comparison genesis.c @ 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 f82decf0537d
children 2e6320d261ff a763523dadf4
comparison
equal deleted inserted replaced
1451:9c65819afec3 1452:f284ad74afe1
91 uint32_t ram_size = load_int8(buf) * 1024 / 2; 91 uint32_t ram_size = load_int8(buf) * 1024 / 2;
92 if (ram_size > RAM_WORDS) { 92 if (ram_size > RAM_WORDS) {
93 fatal_error("State has a RAM size of %d bytes", ram_size * 2); 93 fatal_error("State has a RAM size of %d bytes", ram_size * 2);
94 } 94 }
95 load_buffer16(buf, gen->work_ram, ram_size); 95 load_buffer16(buf, gen->work_ram, ram_size);
96 m68k_invalidate_code_range(gen->m68k, 0xE00000, 0x1000000);
96 } 97 }
97 98
98 static void zram_deserialize(deserialize_buffer *buf, void *vgen) 99 static void zram_deserialize(deserialize_buffer *buf, void *vgen)
99 { 100 {
100 genesis_context *gen = vgen; 101 genesis_context *gen = vgen;
101 uint32_t ram_size = load_int8(buf) * 1024; 102 uint32_t ram_size = load_int8(buf) * 1024;
102 if (ram_size > Z80_RAM_BYTES) { 103 if (ram_size > Z80_RAM_BYTES) {
103 fatal_error("State has a Z80 RAM size of %d bytes", ram_size); 104 fatal_error("State has a Z80 RAM size of %d bytes", ram_size);
104 } 105 }
105 load_buffer8(buf, gen->zram, ram_size); 106 load_buffer8(buf, gen->zram, ram_size);
107 z80_invalidate_code_range(gen->z80, 0, 0x4000);
106 } 108 }
107 109
108 static void update_z80_bank_pointer(genesis_context *gen) 110 static void update_z80_bank_pointer(genesis_context *gen)
109 { 111 {
110 if (gen->z80->bank_reg < 0x100) { 112 if (gen->z80->bank_reg < 0x100) {
1313 { 1315 {
1314 if (rom->map[i].flags & MMAP_PTR_IDX) { 1316 if (rom->map[i].flags & MMAP_PTR_IDX) {
1315 gen->m68k->mem_pointers[rom->map[i].ptr_index] = rom->map[i].buffer; 1317 gen->m68k->mem_pointers[rom->map[i].ptr_index] = rom->map[i].buffer;
1316 } 1318 }
1317 } 1319 }
1320
1321 if (gen->mapper_type == MAPPER_SEGA) {
1322 //initialize bank registers
1323 for (int i = 1; i < sizeof(gen->bank_regs); i++)
1324 {
1325 gen->bank_regs[i] = i;
1326 }
1327 }
1318 1328
1319 return gen; 1329 return gen;
1320 } 1330 }
1321 1331
1322 genesis_context *alloc_config_genesis(void *rom, uint32_t rom_size, void *lock_on, uint32_t lock_on_size, uint32_t ym_opts, uint8_t force_region, rom_info *info_out) 1332 genesis_context *alloc_config_genesis(void *rom, uint32_t rom_size, void *lock_on, uint32_t lock_on_size, uint32_t ym_opts, uint8_t force_region, rom_info *info_out)