# HG changeset patch # User Michael Pavone # Date 1557901235 25200 # Node ID d60f2d7c02a56613eeb17a039c141ccca682ad47 # Parent e07fc3d473b21bf975e4731620c56a221cfdfdd6 Differentiate between the full Sega mapper and the SRAM only one. Fixes crash on save state load for Phantasy Star IV and other games that use the same mapper diff -r e07fc3d473b2 -r d60f2d7c02a5 romdb.c --- a/romdb.c Wed May 08 23:44:40 2019 -0700 +++ b/romdb.c Tue May 14 23:20:35 2019 -0700 @@ -77,6 +77,7 @@ switch(gen->mapper_type) { case MAPPER_SEGA: + case MAPPER_SEGA_SRAM: sega_mapper_serialize(gen, buf); break; case MAPPER_REALTEC: @@ -96,13 +97,14 @@ { genesis_context *gen = vcontext; uint8_t mapper_type = load_int8(buf); - if (mapper_type != gen->mapper_type) { - warning("Mapper type mismatch, skipping load of mapper state"); + if (mapper_type != gen->mapper_type && (mapper_type != MAPPER_SEGA || gen->mapper_type != MAPPER_SEGA_SRAM)) { + warning("Mapper type mismatch, skipping load of mapper state\n"); return; } switch(gen->mapper_type) { case MAPPER_SEGA: + case MAPPER_SEGA_SRAM: sega_mapper_deserialize(buf, gen); break; case MAPPER_REALTEC: @@ -365,7 +367,7 @@ info->map[1].buffer = info->save_buffer; } else { //Assume the standard Sega mapper - info->mapper_type = MAPPER_SEGA; + info->mapper_type = MAPPER_SEGA_SRAM; info->map[0].end = 0x200000; info->map[0].mask = 0xFFFFFF; info->map[0].flags = MMAP_READ; diff -r e07fc3d473b2 -r d60f2d7c02a5 romdb.h --- a/romdb.h Wed May 08 23:44:40 2019 -0700 +++ b/romdb.h Tue May 14 23:20:35 2019 -0700 @@ -43,6 +43,7 @@ enum { MAPPER_NONE, MAPPER_SEGA, + MAPPER_SEGA_SRAM, MAPPER_REALTEC, MAPPER_XBAND, MAPPER_MULTI_GAME, diff -r e07fc3d473b2 -r d60f2d7c02a5 sega_mapper.c --- a/sega_mapper.c Wed May 08 23:44:40 2019 -0700 +++ b/sega_mapper.c Tue May 14 23:20:35 2019 -0700 @@ -116,7 +116,7 @@ context->mem_pointers[gen->mapper_start_index + i] = gen->cart + 0x40000*gen->bank_regs[i]; } } - } else { + } else if (gen->mapper_type == MAPPER_SEGA) { void *new_ptr = gen->cart + 0x40000*value; if (context->mem_pointers[gen->mapper_start_index + address] != new_ptr) { m68k_invalidate_code_range(gen->m68k, address * 0x80000, (address + 1) * 0x80000);