# HG changeset patch # User Michael Pavone # Date 1649317759 25200 # Node ID 2b7847bed4bb1150ecaafb7aa31f37ccc01ed256 # Parent 8a30e44e82231b1fc39a88f777b4a6d55d7e8d01 Fix memory map mask calculation for manually specified cart SRAM/RAM diff -r 8a30e44e8223 -r 2b7847bed4bb romdb.c --- 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);