comparison xband.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 11ac0b511cff
children adb62000d296
comparison
equal deleted inserted replaced
1443:93c1b056ccdd 1444:14a2834d010c
291 uint16_t value = xband_reg_read_b(address | 1, context); 291 uint16_t value = xband_reg_read_b(address | 1, context);
292 value |= gen->header.get_open_bus_value(&gen->header) & 0xFF00; 292 value |= gen->header.get_open_bus_value(&gen->header) & 0xFF00;
293 return value; 293 return value;
294 } 294 }
295 295
296 void xband_serialize(genesis_context *gen, serialize_buffer *buf)
297 {
298 xband *x = get_xband(gen);
299 save_int8(buf, x->kill);
300 save_int8(buf, x->control);
301 save_buffer8(buf, x->regs, XBAND_REGS);
302 }
303
304 void xband_deserialize(deserialize_buffer *buf, genesis_context *gen)
305 {
306 xband *x = get_xband(gen);
307 x->kill = load_int8(buf);
308 update_control(gen, load_int8(buf));
309 for (int i = 0; i < XBAND_REGS; i++)
310 {
311 xband_write_b(0x3BC001 + i*2, gen, load_int8(buf));
312 }
313 }
314
296 rom_info xband_configure_rom(tern_node *rom_db, void *rom, uint32_t rom_size, void *lock_on, uint32_t lock_on_size, memmap_chunk const *base_map, uint32_t base_chunks) 315 rom_info xband_configure_rom(tern_node *rom_db, void *rom, uint32_t rom_size, void *lock_on, uint32_t lock_on_size, memmap_chunk const *base_map, uint32_t base_chunks)
297 { 316 {
298 rom_info info; 317 rom_info info;
299 if (lock_on && lock_on_size) { 318 if (lock_on && lock_on_size) {
300 rom_info lock_on_info = configure_rom(rom_db, lock_on, lock_on_size, NULL, 0, base_map, base_chunks); 319 rom_info lock_on_info = configure_rom(rom_db, lock_on, lock_on_size, NULL, 0, base_map, base_chunks);
332 x->regs[0xB4] = 0x7F; 351 x->regs[0xB4] = 0x7F;
333 x->regs[UNKNOWN_REG2] = 8; 352 x->regs[UNKNOWN_REG2] = 8;
334 353
335 byteswap_rom(0x400000, x->cart_space); 354 byteswap_rom(0x400000, x->cart_space);
336 355
356 info.mapper_type = MAPPER_XBAND;
337 info.map_chunks = base_chunks + 5; 357 info.map_chunks = base_chunks + 5;
338 info.map = calloc(sizeof(memmap_chunk), info.map_chunks); 358 info.map = calloc(sizeof(memmap_chunk), info.map_chunks);
339 info.map[0].mask = 0xFFFFFF; 359 info.map[0].mask = 0xFFFFFF;
340 info.map[0].aux_mask = 0xFFFFFF; 360 info.map[0].aux_mask = 0xFFFFFF;
341 info.map[0].flags = MMAP_READ|MMAP_CODE|MMAP_PTR_IDX|MMAP_FUNC_NULL|MMAP_AUX_BUFF; 361 info.map[0].flags = MMAP_READ|MMAP_CODE|MMAP_PTR_IDX|MMAP_FUNC_NULL|MMAP_AUX_BUFF;