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