changeset 1452:f284ad74afe1

Make initial bank register state stored in bank_regs match what is put in to mem_pointers for the sega/SSF2 mapper. Invalidate RAM code ranges on RAM deserialization
author Michael Pavone <pavone@retrodev.com>
date Tue, 29 Aug 2017 19:43:38 -0700
parents 9c65819afec3
children cd6e566eb6b9
files genesis.c
diffstat 1 files changed, 10 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/genesis.c	Tue Aug 29 19:42:44 2017 -0700
+++ b/genesis.c	Tue Aug 29 19:43:38 2017 -0700
@@ -93,6 +93,7 @@
 		fatal_error("State has a RAM size of %d bytes", ram_size * 2);
 	}
 	load_buffer16(buf, gen->work_ram, ram_size);
+	m68k_invalidate_code_range(gen->m68k, 0xE00000, 0x1000000);
 }
 
 static void zram_deserialize(deserialize_buffer *buf, void *vgen)
@@ -103,6 +104,7 @@
 		fatal_error("State has a Z80 RAM size of %d bytes", ram_size);
 	}
 	load_buffer8(buf, gen->zram, ram_size);
+	z80_invalidate_code_range(gen->z80, 0, 0x4000);
 }
 
 static void update_z80_bank_pointer(genesis_context *gen)
@@ -1315,6 +1317,14 @@
 			gen->m68k->mem_pointers[rom->map[i].ptr_index] = rom->map[i].buffer;
 		}
 	}
+	
+	if (gen->mapper_type == MAPPER_SEGA) {
+		//initialize bank registers
+		for (int i = 1; i < sizeof(gen->bank_regs); i++)
+		{
+			gen->bank_regs[i] = i;
+		}
+	}
 
 	return gen;
 }