diff options
author | 2011-02-08 06:48:39 +0000 | |
---|---|---|
committer | 2011-02-08 06:48:39 +0000 | |
commit | 4f7efb1ca4bcf00edd9e519167367f44d797186c (patch) | |
tree | c9ee8aae0bc80942f118df4df24d9054504b9ad9 /src/emu/cpu | |
parent | f4f3adf2506ce7808363593436de5b13bb304d47 (diff) |
Moved the state saving system to C++. For now the registration macros
are still intact. The new state_manager class has templatized methods
for saving the various types, and through template specialization can
save more complex system types cleanly (like bitmaps and attotimes).
Added new mechanism to detect proper state save types. This is much
more strict and there will likely be some games/devices that fatalerror
at startup until they are remedied. Spot checking has caught the more
common situations.
The new state_manager is embedded directly in the running_machine,
allowing objects to register state saving in their constructors now.
Added NAME() macro which is a generalization of FUNC() and can be
used to wrap variables that are registered when directly using the
new methods as opposed to the previous macros. For example:
machine->state().save_item(NAME(global_item))
Added methods in the device_t class that implicitly register state
against the current device, making for a cleaner interface.
Just a couple of required regexes for now:
state_save_register_postload( *)\(( *)([^,;]+), *
\3->state().register_postload\1\(\2
state_save_register_presave( *)\(( *)([^,;]+), *
\3->state().register_presave\1\(\2
Diffstat (limited to 'src/emu/cpu')
-rw-r--r-- | src/emu/cpu/arm/arm.c | 2 | ||||
-rw-r--r-- | src/emu/cpu/cubeqcpu/cubeqcpu.c | 6 | ||||
-rw-r--r-- | src/emu/cpu/g65816/g65816.c | 2 | ||||
-rw-r--r-- | src/emu/cpu/h83002/h8_16.c | 2 | ||||
-rw-r--r-- | src/emu/cpu/h83002/h8_8.c | 2 | ||||
-rw-r--r-- | src/emu/cpu/hd6309/hd6309.c | 2 | ||||
-rw-r--r-- | src/emu/cpu/i386/i386.c | 2 | ||||
-rw-r--r-- | src/emu/cpu/jaguar/jaguar.c | 2 | ||||
-rw-r--r-- | src/emu/cpu/m37710/m37710.c | 28 | ||||
-rw-r--r-- | src/emu/cpu/m68000/m68kcpu.c | 4 | ||||
-rw-r--r-- | src/emu/cpu/mips/psx.c | 2 | ||||
-rw-r--r-- | src/emu/cpu/tms34010/tms34010.c | 2 |
12 files changed, 23 insertions, 33 deletions
diff --git a/src/emu/cpu/arm/arm.c b/src/emu/cpu/arm/arm.c index 420ddef7c8a..28f420e98f9 100644 --- a/src/emu/cpu/arm/arm.c +++ b/src/emu/cpu/arm/arm.c @@ -535,7 +535,6 @@ static CPU_INIT( arm ) state_save_register_device_item_array(device, 0, cpustate->coproRegister); state_save_register_device_item(device, 0, cpustate->pendingIrq); state_save_register_device_item(device, 0, cpustate->pendingFiq); - state_save_register_device_item(device, 0, cpustate->endian); } @@ -552,7 +551,6 @@ static CPU_INIT( arm_be ) state_save_register_device_item_array(device, 0, cpustate->coproRegister); state_save_register_device_item(device, 0, cpustate->pendingIrq); state_save_register_device_item(device, 0, cpustate->pendingFiq); - state_save_register_device_item(device, 0, cpustate->endian); } diff --git a/src/emu/cpu/cubeqcpu/cubeqcpu.c b/src/emu/cpu/cubeqcpu/cubeqcpu.c index db01be30ffe..7b45fd6fb5e 100644 --- a/src/emu/cpu/cubeqcpu/cubeqcpu.c +++ b/src/emu/cpu/cubeqcpu/cubeqcpu.c @@ -275,7 +275,7 @@ static void cquestsnd_state_register(device_t *device) state_save_register_device_item(device, 0, cpustate->prev_ipram); state_save_register_device_item(device, 0, cpustate->prev_ipwrt); - state_save_register_postload(device->machine, cquestsnd_postload, (void *)device); + device->machine->state().register_postload(cquestsnd_postload, (void *)device); } static CPU_INIT( cquestsnd ) @@ -349,7 +349,7 @@ static void cquestrot_state_register(device_t *device) state_save_register_device_item_pointer(device, 0, cpustate->dram, 16384); state_save_register_device_item_pointer(device, 0, cpustate->sram, 2048); - state_save_register_postload(device->machine, cquestrot_postload, (void *)device); + device->machine->state().register_postload(cquestrot_postload, (void *)device); } static CPU_INIT( cquestrot ) @@ -433,7 +433,7 @@ static void cquestlin_state_register(device_t *device) state_save_register_device_item_pointer(device, 0, cpustate->e_stack, 32768); state_save_register_device_item_pointer(device, 0, cpustate->o_stack, 32768); - state_save_register_postload(device->machine, cquestlin_postload, (void *)device); + device->machine->state().register_postload(cquestlin_postload, (void *)device); } static CPU_INIT( cquestlin ) diff --git a/src/emu/cpu/g65816/g65816.c b/src/emu/cpu/g65816/g65816.c index a54a6c93962..1ad3e64aec5 100644 --- a/src/emu/cpu/g65816/g65816.c +++ b/src/emu/cpu/g65816/g65816.c @@ -365,7 +365,7 @@ static CPU_INIT( g65816 ) state_save_register_device_item(device, 0, cpustate->irq_delay); state_save_register_device_item(device, 0, cpustate->stopped); - state_save_register_postload(device->machine, g65816_restore_state, cpustate); + device->machine->state().register_postload(g65816_restore_state, cpustate); } /************************************************************************** diff --git a/src/emu/cpu/h83002/h8_16.c b/src/emu/cpu/h83002/h8_16.c index d276714eb72..cea2931af24 100644 --- a/src/emu/cpu/h83002/h8_16.c +++ b/src/emu/cpu/h83002/h8_16.c @@ -237,7 +237,7 @@ static CPU_INIT(h8) state_save_register_device_item(device, 0, h8->h8TSTR); state_save_register_device_item_array(device, 0, h8->h8TCNT); - state_save_register_postload(device->machine, h8_onstateload, h8); + device->machine->state().register_postload(h8_onstateload, h8); h8_itu_init(h8); } diff --git a/src/emu/cpu/h83002/h8_8.c b/src/emu/cpu/h83002/h8_8.c index f145e415b34..f7d98ae8bcd 100644 --- a/src/emu/cpu/h83002/h8_8.c +++ b/src/emu/cpu/h83002/h8_8.c @@ -259,7 +259,7 @@ static CPU_INIT(h8bit) state_save_register_device_item(device, 0, h8->h8TSTR); state_save_register_device_item_array(device, 0, h8->h8TCNT); - state_save_register_postload(h8->device->machine, h8_onstateload, h8); + h8->device->machine->state().register_postload(h8_onstateload, h8); } static CPU_RESET(h8bit) diff --git a/src/emu/cpu/hd6309/hd6309.c b/src/emu/cpu/hd6309/hd6309.c index 74602866f5a..8adeb17f8e0 100644 --- a/src/emu/cpu/hd6309/hd6309.c +++ b/src/emu/cpu/hd6309/hd6309.c @@ -541,7 +541,7 @@ static CPU_INIT( hd6309 ) state_save_register_device_item(device, 0, DP); state_save_register_device_item(device, 0, CC); state_save_register_device_item(device, 0, MD); - state_save_register_postload(device->machine, hd6309_postload, (void *) device); + device->machine->state().register_postload(hd6309_postload, (void *) device); state_save_register_device_item(device, 0, m68_state->int_state); state_save_register_device_item(device, 0, m68_state->nmi_state); state_save_register_device_item(device, 0, m68_state->irq_state[0]); diff --git a/src/emu/cpu/i386/i386.c b/src/emu/cpu/i386/i386.c index 6eba89454a0..d3999ab8685 100644 --- a/src/emu/cpu/i386/i386.c +++ b/src/emu/cpu/i386/i386.c @@ -605,7 +605,7 @@ static CPU_INIT( i386 ) state_save_register_device_item(device, 0, cpustate->ldtr.flags); state_save_register_device_item(device, 0, cpustate->irq_state); state_save_register_device_item(device, 0, cpustate->performed_intersegment_jump); - state_save_register_postload(device->machine, i386_postload, (void *)device); + device->machine->state().register_postload(i386_postload, (void *)device); } static void build_opcode_table(i386_state *cpustate, UINT32 features) diff --git a/src/emu/cpu/jaguar/jaguar.c b/src/emu/cpu/jaguar/jaguar.c index ddcf2c7df91..0ece28b5d3c 100644 --- a/src/emu/cpu/jaguar/jaguar.c +++ b/src/emu/cpu/jaguar/jaguar.c @@ -430,7 +430,7 @@ static void init_common(int isdsp, legacy_cpu_device *device, device_irq_callbac state_save_register_device_item_array(device, 0, jaguar->a); state_save_register_device_item_array(device, 0, jaguar->ctrl); state_save_register_device_item(device, 0, jaguar->ppc); - state_save_register_postload(device->machine, jaguar_postload, (void *)device); + device->machine->state().register_postload(jaguar_postload, (void *)device); } diff --git a/src/emu/cpu/m37710/m37710.c b/src/emu/cpu/m37710/m37710.c index 29de9d00cfe..bd17e16ec04 100644 --- a/src/emu/cpu/m37710/m37710.c +++ b/src/emu/cpu/m37710/m37710.c @@ -940,24 +940,16 @@ static CPU_INIT( m37710 ) state_save_register_device_item(device, 0, cpustate->irq_level); state_save_register_device_item(device, 0, cpustate->stopped); state_save_register_device_item_array(device, 0, cpustate->m37710_regs); - state_save_register_device_item(device, 0, cpustate->reload[0].seconds); - state_save_register_device_item(device, 0, cpustate->reload[0].attoseconds); - state_save_register_device_item(device, 0, cpustate->reload[1].seconds); - state_save_register_device_item(device, 0, cpustate->reload[1].attoseconds); - state_save_register_device_item(device, 0, cpustate->reload[2].seconds); - state_save_register_device_item(device, 0, cpustate->reload[2].attoseconds); - state_save_register_device_item(device, 0, cpustate->reload[3].seconds); - state_save_register_device_item(device, 0, cpustate->reload[3].attoseconds); - state_save_register_device_item(device, 0, cpustate->reload[4].seconds); - state_save_register_device_item(device, 0, cpustate->reload[4].attoseconds); - state_save_register_device_item(device, 0, cpustate->reload[5].seconds); - state_save_register_device_item(device, 0, cpustate->reload[5].attoseconds); - state_save_register_device_item(device, 0, cpustate->reload[6].seconds); - state_save_register_device_item(device, 0, cpustate->reload[6].attoseconds); - state_save_register_device_item(device, 0, cpustate->reload[7].seconds); - state_save_register_device_item(device, 0, cpustate->reload[7].attoseconds); - - state_save_register_postload(device->machine, m37710_restore_state, cpustate); + state_save_register_device_item(device, 0, cpustate->reload[0]); + state_save_register_device_item(device, 0, cpustate->reload[1]); + state_save_register_device_item(device, 0, cpustate->reload[2]); + state_save_register_device_item(device, 0, cpustate->reload[3]); + state_save_register_device_item(device, 0, cpustate->reload[4]); + state_save_register_device_item(device, 0, cpustate->reload[5]); + state_save_register_device_item(device, 0, cpustate->reload[6]); + state_save_register_device_item(device, 0, cpustate->reload[7]); + + device->machine->state().register_postload(m37710_restore_state, cpustate); } /************************************************************************** diff --git a/src/emu/cpu/m68000/m68kcpu.c b/src/emu/cpu/m68000/m68kcpu.c index 4738f23dd37..2dbbc94fbc1 100644 --- a/src/emu/cpu/m68000/m68kcpu.c +++ b/src/emu/cpu/m68000/m68kcpu.c @@ -769,8 +769,8 @@ static CPU_INIT( m68k ) state_save_register_device_item(device, 0, m68k->save_halted); state_save_register_device_item(device, 0, m68k->pref_addr); state_save_register_device_item(device, 0, m68k->pref_data); - state_save_register_presave(device->machine, m68k_presave, m68k); - state_save_register_postload(device->machine, m68k_postload, m68k); + device->machine->state().register_presave(m68k_presave, m68k); + device->machine->state().register_postload(m68k_postload, m68k); } /* Pulse the RESET line on the CPU */ diff --git a/src/emu/cpu/mips/psx.c b/src/emu/cpu/mips/psx.c index c613887b563..7a7d6bdec9e 100644 --- a/src/emu/cpu/mips/psx.c +++ b/src/emu/cpu/mips/psx.c @@ -1627,7 +1627,7 @@ static void mips_state_register( const char *type, legacy_cpu_device *device ) state_save_register_device_item( device, 0, psxcpu->multiplier_operation ); state_save_register_device_item( device, 0, psxcpu->multiplier_operand1 ); state_save_register_device_item( device, 0, psxcpu->multiplier_operand2 ); - state_save_register_postload( device->machine, mips_postload, psxcpu ); + device->machine->state().register_postload( mips_postload, psxcpu ); } static CPU_INIT( psxcpu ) diff --git a/src/emu/cpu/tms34010/tms34010.c b/src/emu/cpu/tms34010/tms34010.c index 752ef891ac5..42db4963dc6 100644 --- a/src/emu/cpu/tms34010/tms34010.c +++ b/src/emu/cpu/tms34010/tms34010.c @@ -669,7 +669,7 @@ static CPU_INIT( tms34010 ) state_save_register_device_item(device, 0, tms->pixelshift); state_save_register_device_item(device, 0, tms->gfxcycles); state_save_register_device_item_pointer(device, 0, (&tms->regs[0].reg), ARRAY_LENGTH(tms->regs)); - state_save_register_postload(device->machine, tms34010_state_postload, tms); + device->machine->state().register_postload(tms34010_state_postload, tms); } static CPU_RESET( tms34010 ) |