diff romdb.c @ 2159:2ed402b4c1fb

Merge
author Michael Pavone <pavone@retrodev.com>
date Tue, 24 May 2022 09:11:12 -0700
parents da7890445962 2b7847bed4bb
children 6a954675d634
line wrap: on
line diff
--- a/romdb.c	Tue May 24 09:10:54 2022 -0700
+++ b/romdb.c	Tue May 24 09:11:12 2022 -0700
@@ -776,30 +776,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);