summaryrefslogtreecommitdiff
path: root/genesis.c
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2017-01-10 09:29:28 -0800
committerMichael Pavone <pavone@retrodev.com>2017-01-10 09:29:28 -0800
commit588d69091052c3c27762eb73ab50ad0566a08e62 (patch)
treead856b8d92a5cb9f423a85945c830b7b9b9e48c0 /genesis.c
parent7150bf02fb665c63a494def0738c8fc0ae41d27b (diff)
Fix crash regression for games with some kind of mapper functionality
Diffstat (limited to 'genesis.c')
-rw-r--r--genesis.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/genesis.c b/genesis.c
index 6343986..9644fbe 100644
--- a/genesis.c
+++ b/genesis.c
@@ -961,13 +961,12 @@ genesis_context *alloc_init_genesis(rom_info *rom, void *main_rom, void *lock_on
gen->save_storage = NULL;
}
+ //This must happen before we generate memory access functions in init_m68k_opts
for (int i = 0; i < rom->map_chunks; i++)
{
- if (rom->map[i].flags & MMAP_PTR_IDX) {
- gen->m68k->mem_pointers[rom->map[i].ptr_index] = rom->map[i].buffer;
- }
if (rom->map[i].start == 0xE00000) {
rom->map[i].buffer = gen->work_ram;
+ break;
}
}
@@ -978,6 +977,14 @@ genesis_context *alloc_init_genesis(rom_info *rom, void *main_rom, void *lock_on
gen->m68k = init_68k_context(opts, NULL);
gen->m68k->system = gen;
opts->address_log = (system_opts & OPT_ADDRESS_LOG) ? fopen("address.log", "w") : NULL;
+
+ //This must happen after the 68K context has been allocated
+ for (int i = 0; i < rom->map_chunks; i++)
+ {
+ if (rom->map[i].flags & MMAP_PTR_IDX) {
+ gen->m68k->mem_pointers[rom->map[i].ptr_index] = rom->map[i].buffer;
+ }
+ }
return gen;
}