X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=source%2Fsrc%2Fvm%2Fmcs48.cpp;h=c52f02e82e8323654f8a73be2aa1df449e6b43ec;hb=351996e2efcf0532fba38600e870e538a2cbdcf6;hp=4705005ae167afc4468f277c7e621040d5c34561;hpb=f1dde8ed148c5e383c46ca8605e916b2150bc9b5;p=csp-qt%2Fcommon_source_project-fm7.git diff --git a/source/src/vm/mcs48.cpp b/source/src/vm/mcs48.cpp index 4705005ae..c52f02e82 100644 --- a/source/src/vm/mcs48.cpp +++ b/source/src/vm/mcs48.cpp @@ -209,35 +209,90 @@ int MCS48::run(int icount) #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; }