comparison romdb.c @ 1863:d60f2d7c02a5

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
author Michael Pavone <pavone@retrodev.com>
date Tue, 14 May 2019 23:20:35 -0700
parents 882746581f17
children ebf124803a93
comparison
equal deleted inserted replaced
1862:e07fc3d473b2 1863:d60f2d7c02a5
75 start_section(buf, SECTION_MAPPER); 75 start_section(buf, SECTION_MAPPER);
76 save_int8(buf, gen->mapper_type); 76 save_int8(buf, gen->mapper_type);
77 switch(gen->mapper_type) 77 switch(gen->mapper_type)
78 { 78 {
79 case MAPPER_SEGA: 79 case MAPPER_SEGA:
80 case MAPPER_SEGA_SRAM:
80 sega_mapper_serialize(gen, buf); 81 sega_mapper_serialize(gen, buf);
81 break; 82 break;
82 case MAPPER_REALTEC: 83 case MAPPER_REALTEC:
83 realtec_serialize(gen, buf); 84 realtec_serialize(gen, buf);
84 break; 85 break;
94 95
95 void cart_deserialize(deserialize_buffer *buf, void *vcontext) 96 void cart_deserialize(deserialize_buffer *buf, void *vcontext)
96 { 97 {
97 genesis_context *gen = vcontext; 98 genesis_context *gen = vcontext;
98 uint8_t mapper_type = load_int8(buf); 99 uint8_t mapper_type = load_int8(buf);
99 if (mapper_type != gen->mapper_type) { 100 if (mapper_type != gen->mapper_type && (mapper_type != MAPPER_SEGA || gen->mapper_type != MAPPER_SEGA_SRAM)) {
100 warning("Mapper type mismatch, skipping load of mapper state"); 101 warning("Mapper type mismatch, skipping load of mapper state\n");
101 return; 102 return;
102 } 103 }
103 switch(gen->mapper_type) 104 switch(gen->mapper_type)
104 { 105 {
105 case MAPPER_SEGA: 106 case MAPPER_SEGA:
107 case MAPPER_SEGA_SRAM:
106 sega_mapper_deserialize(buf, gen); 108 sega_mapper_deserialize(buf, gen);
107 break; 109 break;
108 case MAPPER_REALTEC: 110 case MAPPER_REALTEC:
109 realtec_deserialize(buf, gen); 111 realtec_deserialize(buf, gen);
110 break; 112 break;
363 info->map[1].flags |= MMAP_ONLY_EVEN; 365 info->map[1].flags |= MMAP_ONLY_EVEN;
364 } 366 }
365 info->map[1].buffer = info->save_buffer; 367 info->map[1].buffer = info->save_buffer;
366 } else { 368 } else {
367 //Assume the standard Sega mapper 369 //Assume the standard Sega mapper
368 info->mapper_type = MAPPER_SEGA; 370 info->mapper_type = MAPPER_SEGA_SRAM;
369 info->map[0].end = 0x200000; 371 info->map[0].end = 0x200000;
370 info->map[0].mask = 0xFFFFFF; 372 info->map[0].mask = 0xFFFFFF;
371 info->map[0].flags = MMAP_READ; 373 info->map[0].flags = MMAP_READ;
372 info->map[0].buffer = rom; 374 info->map[0].buffer = rom;
373 375