changeset 1445:349d50930c03

Save and restore Z80 bank register in native save states
author Michael Pavone <pavone@retrodev.com>
date Mon, 28 Aug 2017 22:40:33 -0700
parents 14a2834d010c
children adb62000d296
files genesis.c
diffstat 1 files changed, 13 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/genesis.c	Sun Aug 27 18:15:00 2017 -0700
+++ b/genesis.c	Mon Aug 28 22:40:33 2017 -0700
@@ -57,6 +57,7 @@
 	start_section(buf, SECTION_GEN_BUS_ARBITER);
 	save_int8(buf, gen->z80->reset);
 	save_int8(buf, gen->z80->busreq);
+	save_int16(buf, gen->z80->bank_reg);
 	end_section(buf);
 	
 	start_section(buf, SECTION_SEGA_IO_1);
@@ -104,11 +105,21 @@
 	load_buffer8(buf, gen->zram, ram_size);
 }
 
+static void update_z80_bank_pointer(genesis_context *gen)
+{
+	if (gen->z80->bank_reg < 0x100) {
+		gen->z80->mem_pointers[1] = get_native_pointer(gen->z80->bank_reg << 15, (void **)gen->m68k->mem_pointers, &gen->m68k->options->gen);
+	} else {
+		gen->z80->mem_pointers[1] = NULL;
+	}
+}
+
 static void bus_arbiter_deserialize(deserialize_buffer *buf, void *vgen)
 {
 	genesis_context *gen = vgen;
 	gen->z80->reset = load_int8(buf);
 	gen->z80->busreq = load_int8(buf);
+	gen->z80->bank_reg = load_int16(buf) & 0x1FF;
 }
 
 void genesis_deserialize(deserialize_buffer *buf, genesis_context *gen)
@@ -125,11 +136,11 @@
 	register_section_handler(buf, (section_handler){.fun = ram_deserialize, .data = gen}, SECTION_MAIN_RAM);
 	register_section_handler(buf, (section_handler){.fun = zram_deserialize, .data = gen}, SECTION_SOUND_RAM);
 	register_section_handler(buf, (section_handler){.fun = cart_deserialize, .data = gen}, SECTION_MAPPER);
-	//TODO: mapper state
 	while (buf->cur_pos < buf->size)
 	{
 		load_section(buf);
 	}
+	update_z80_bank_pointer(gen);
 }
 
 uint16_t read_dma_value(uint32_t address)
@@ -951,12 +962,7 @@
 	z80_context * context = vcontext;
 
 	context->bank_reg = (context->bank_reg >> 1 | value << 8) & 0x1FF;
-	if (context->bank_reg < 0x100) {
-		genesis_context *gen = context->system;
-		context->mem_pointers[1] = get_native_pointer(context->bank_reg << 15, (void **)gen->m68k->mem_pointers, &gen->m68k->options->gen);
-	} else {
-		context->mem_pointers[1] = NULL;
-	}
+	update_z80_bank_pointer(context->system);
 
 	return context;
 }