Mercurial > repos > blastem
changeset 2154:2b7847bed4bb
Fix memory map mask calculation for manually specified cart SRAM/RAM
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 07 Apr 2022 00:49:19 -0700 |
parents | 8a30e44e8223 |
children | 6f58af5bd6fa |
files | romdb.c |
diffstat | 1 files changed, 7 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/romdb.c Wed Apr 06 22:46:20 2022 -0700 +++ b/romdb.c Thu Apr 07 00:49:19 2022 -0700 @@ -780,30 +780,35 @@ process_sram_def(key, state); map->buffer = state->info->save_buffer + offset; map->flags = MMAP_READ | MMAP_WRITE; + uint32_t save_size_mask = state->info->save_size; if (state->info->save_type == RAM_FLAG_ODD) { map->flags |= MMAP_ONLY_ODD; + save_size_mask *= 2; } else if(state->info->save_type == RAM_FLAG_EVEN) { map->flags |= MMAP_ONLY_EVEN; + save_size_mask *= 2; } else { map->flags |= MMAP_CODE; } - map->mask = calc_mask(state->info->save_size, start, end); + map->mask = calc_mask(save_size_mask, start, end); } else if (!strcmp(dtype, "RAM")) { uint32_t size = strtol(tern_find_ptr_default(node, "size", "0"), NULL, 16); if (!size || size > map->end - map->start) { size = map->end - map->start; } map->buffer = calloc(size, 1); - map->mask = calc_mask(size, start, end); map->flags = MMAP_READ | MMAP_WRITE; char *bus = tern_find_ptr_default(node, "bus", "both"); if (!strcmp(bus, "odd")) { map->flags |= MMAP_ONLY_ODD; + size *= 2; } else if (!strcmp(bus, "even")) { map->flags |= MMAP_ONLY_EVEN; + size *= 2; } else { map->flags |= MMAP_CODE; } + map->mask = calc_mask(size, start, end); } else if (!strcmp(dtype, "NOR")) { process_nor_def(key, state);