Mercurial > repos > blastem
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) |