comparison genesis.c @ 1165:9fc680b35dbb

Fix crash regression for games with some kind of mapper functionality
author Michael Pavone <pavone@retrodev.com>
date Tue, 10 Jan 2017 09:29:28 -0800
parents 8f14767661fa
children 9170fc4d9835
comparison
equal deleted inserted replaced
1164:21df13266e6a 1165:9fc680b35dbb
959 } 959 }
960 } else { 960 } else {
961 gen->save_storage = NULL; 961 gen->save_storage = NULL;
962 } 962 }
963 963
964 //This must happen before we generate memory access functions in init_m68k_opts
964 for (int i = 0; i < rom->map_chunks; i++) 965 for (int i = 0; i < rom->map_chunks; i++)
965 { 966 {
966 if (rom->map[i].flags & MMAP_PTR_IDX) {
967 gen->m68k->mem_pointers[rom->map[i].ptr_index] = rom->map[i].buffer;
968 }
969 if (rom->map[i].start == 0xE00000) { 967 if (rom->map[i].start == 0xE00000) {
970 rom->map[i].buffer = gen->work_ram; 968 rom->map[i].buffer = gen->work_ram;
969 break;
971 } 970 }
972 } 971 }
973 972
974 m68k_options *opts = malloc(sizeof(m68k_options)); 973 m68k_options *opts = malloc(sizeof(m68k_options));
975 init_m68k_opts(opts, rom->map, rom->map_chunks, MCLKS_PER_68K); 974 init_m68k_opts(opts, rom->map, rom->map_chunks, MCLKS_PER_68K);
976 //TODO: make this configurable 975 //TODO: make this configurable
977 opts->gen.flags |= M68K_OPT_BROKEN_READ_MODIFY; 976 opts->gen.flags |= M68K_OPT_BROKEN_READ_MODIFY;
978 gen->m68k = init_68k_context(opts, NULL); 977 gen->m68k = init_68k_context(opts, NULL);
979 gen->m68k->system = gen; 978 gen->m68k->system = gen;
980 opts->address_log = (system_opts & OPT_ADDRESS_LOG) ? fopen("address.log", "w") : NULL; 979 opts->address_log = (system_opts & OPT_ADDRESS_LOG) ? fopen("address.log", "w") : NULL;
980
981 //This must happen after the 68K context has been allocated
982 for (int i = 0; i < rom->map_chunks; i++)
983 {
984 if (rom->map[i].flags & MMAP_PTR_IDX) {
985 gen->m68k->mem_pointers[rom->map[i].ptr_index] = rom->map[i].buffer;
986 }
987 }
981 988
982 return gen; 989 return gen;
983 } 990 }
984 991
985 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) 992 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)