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);