#define STATE_VERSION 2
-void MCS48::save_state(FILEIO* state_fio)
+#include "../statesub.h"
+
+void MCS48::decl_state()
{
- state_fio->FputUint32(STATE_VERSION);
- state_fio->FputInt32(this_device_id);
+ enter_decl_state(STATE_VERSION);
#ifdef USE_DEBUGGER
- state_fio->FputUint64(total_icount);
+ DECL_STATE_ENTRY_UINT64(total_icount);
#endif
- state_fio->Fwrite(opaque, sizeof(mcs48_state), 1);
+ // BEGIN CPUREGS
+ mcs48_state *cpustate = (mcs48_state *)opaque;
+
+ DECL_STATE_ENTRY_UINT16((cpustate->prevpc));
+ DECL_STATE_ENTRY_UINT16((cpustate->pc));
+
+ DECL_STATE_ENTRY_UINT8((cpustate->a));
+ DECL_STATE_ENTRY_INT32((cpustate->regptr));
+ DECL_STATE_ENTRY_UINT8((cpustate->psw));
+ DECL_STATE_ENTRY_UINT8((cpustate->p1));
+ DECL_STATE_ENTRY_UINT8((cpustate->p2));
+ DECL_STATE_ENTRY_UINT8((cpustate->timer));
+ DECL_STATE_ENTRY_UINT8((cpustate->prescaler));
+ DECL_STATE_ENTRY_UINT8((cpustate->t1_history));
+ DECL_STATE_ENTRY_UINT8((cpustate->sts));
+
+ DECL_STATE_ENTRY_UINT8((cpustate->int_state));
+ DECL_STATE_ENTRY_UINT8((cpustate->irq_state));
+ DECL_STATE_ENTRY_UINT8((cpustate->irq_in_progress));
+ DECL_STATE_ENTRY_UINT8((cpustate->timer_overflow));
+ DECL_STATE_ENTRY_UINT8((cpustate->timer_flag));
+ DECL_STATE_ENTRY_UINT8((cpustate->tirq_enabled));
+ DECL_STATE_ENTRY_UINT8((cpustate->xirq_enabled));
+ DECL_STATE_ENTRY_UINT8((cpustate->t0_clk_enabled));
+ DECL_STATE_ENTRY_UINT8((cpustate->timecount_enabled));
+
+ DECL_STATE_ENTRY_UINT16((cpustate->a11));
+
+ DECL_STATE_ENTRY_INT32((cpustate->icount));
+
+ DECL_STATE_ENTRY_1D_ARRAY((cpustate->rom), 0x1000); // 0x100 ?
+
+ // END CPUREGS
+ leave_decl_state();
+}
+void MCS48::save_state(FILEIO* state_fio)
+{
+ if(state_entry != NULL) {
+ state_entry->save_state(state_fio);
+ }
+
+// state_fio->FputUint32(STATE_VERSION);
+// state_fio->FputInt32(this_device_id);
+//
+//#ifdef USE_DEBUGGER
+// state_fio->FputUint64(total_icount);
+//#endif
+// state_fio->Fwrite(opaque, sizeof(mcs48_state), 1);
}
bool MCS48::load_state(FILEIO* state_fio)
{
- if(state_fio->FgetUint32() != STATE_VERSION) {
- return false;
+ bool mb = false;
+ if(state_entry != NULL) {
+ mb = state_entry->load_state(state_fio);
}
- if(state_fio->FgetInt32() != this_device_id) {
- return false;
- }
-#ifdef USE_DEBUGGER
- total_icount = prev_total_icount = state_fio->FgetUint64();
-#endif
- state_fio->Fread(opaque, sizeof(mcs48_state), 1);
+ if(!mb) return false;
+
+// if(state_fio->FgetUint32() != STATE_VERSION) {
+// return false;
+// }
+// if(state_fio->FgetInt32() != this_device_id) {
+// return false;
+// }
+//#ifdef USE_DEBUGGER
+// total_icount = prev_total_icount = state_fio->FgetUint64();
+//#endif
+// state_fio->Fread(opaque, sizeof(mcs48_state), 1);
// post process
mcs48_state *cpustate = (mcs48_state *)opaque;
cpustate->mem = d_mem;
cpustate->io = d_io;
cpustate->intr = d_intr;
+ prev_total_icount = total_icount;
return true;
}