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