comparison genesis.c @ 1444:14a2834d010c

Save/restore mapper state in native save states
author Michael Pavone <pavone@retrodev.com>
date Sun, 27 Aug 2017 18:15:00 -0700
parents 7d4483944d4d
children 349d50930c03
comparison
equal deleted inserted replaced
1443:93c1b056ccdd 1444:14a2834d010c
79 start_section(buf, SECTION_SOUND_RAM); 79 start_section(buf, SECTION_SOUND_RAM);
80 save_int8(buf, Z80_RAM_BYTES / 1024); 80 save_int8(buf, Z80_RAM_BYTES / 1024);
81 save_buffer8(buf, gen->zram, Z80_RAM_BYTES); 81 save_buffer8(buf, gen->zram, Z80_RAM_BYTES);
82 end_section(buf); 82 end_section(buf);
83 83
84 //TODO: mapper state 84 cart_serialize(&gen->header, buf);
85 } 85 }
86 86
87 static void ram_deserialize(deserialize_buffer *buf, void *vgen) 87 static void ram_deserialize(deserialize_buffer *buf, void *vgen)
88 { 88 {
89 genesis_context *gen = vgen; 89 genesis_context *gen = vgen;
122 register_section_handler(buf, (section_handler){.fun = io_deserialize, .data = gen->io.ports}, SECTION_SEGA_IO_1); 122 register_section_handler(buf, (section_handler){.fun = io_deserialize, .data = gen->io.ports}, SECTION_SEGA_IO_1);
123 register_section_handler(buf, (section_handler){.fun = io_deserialize, .data = gen->io.ports + 1}, SECTION_SEGA_IO_2); 123 register_section_handler(buf, (section_handler){.fun = io_deserialize, .data = gen->io.ports + 1}, SECTION_SEGA_IO_2);
124 register_section_handler(buf, (section_handler){.fun = io_deserialize, .data = gen->io.ports + 2}, SECTION_SEGA_IO_EXT); 124 register_section_handler(buf, (section_handler){.fun = io_deserialize, .data = gen->io.ports + 2}, SECTION_SEGA_IO_EXT);
125 register_section_handler(buf, (section_handler){.fun = ram_deserialize, .data = gen}, SECTION_MAIN_RAM); 125 register_section_handler(buf, (section_handler){.fun = ram_deserialize, .data = gen}, SECTION_MAIN_RAM);
126 register_section_handler(buf, (section_handler){.fun = zram_deserialize, .data = gen}, SECTION_SOUND_RAM); 126 register_section_handler(buf, (section_handler){.fun = zram_deserialize, .data = gen}, SECTION_SOUND_RAM);
127 register_section_handler(buf, (section_handler){.fun = cart_deserialize, .data = gen}, SECTION_MAPPER);
127 //TODO: mapper state 128 //TODO: mapper state
128 while (buf->cur_pos < buf->size) 129 while (buf->cur_pos < buf->size)
129 { 130 {
130 load_section(buf); 131 load_section(buf);
131 } 132 }
1265 gen->vdp->vsram[i] = rand(); 1266 gen->vdp->vsram[i] = rand();
1266 } 1267 }
1267 } 1268 }
1268 setup_io_devices(config, rom, &gen->io); 1269 setup_io_devices(config, rom, &gen->io);
1269 1270
1270 gen->save_type = rom->save_type; 1271 gen->mapper_type = rom->mapper_type;
1271 gen->save_type = rom->save_type; 1272 gen->save_type = rom->save_type;
1272 if (gen->save_type != SAVE_NONE) { 1273 if (gen->save_type != SAVE_NONE) {
1273 gen->save_ram_mask = rom->save_mask; 1274 gen->save_ram_mask = rom->save_mask;
1274 gen->save_size = rom->save_size; 1275 gen->save_size = rom->save_size;
1275 gen->save_storage = rom->save_buffer; 1276 gen->save_storage = rom->save_buffer;