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