Added savestate support to hd6309_intf.cpp and improved savestate support in m6800_intf.cpp

This commit is contained in:
Barry Harris 2012-01-06 14:10:15 +00:00
parent 51ea3a6c6b
commit 5c4dd43732
2 changed files with 49 additions and 25 deletions

View File

@ -399,11 +399,19 @@ INT32 HD6309Scan(INT32 nAction)
char szName[] = "HD6309 #n";
szName[7] = '0' + i;
ba.Data = &HD6309CPUContext[i];
ba.nLen = sizeof(HD6309CPUContext[i]);
memset(&ba, 0, sizeof(ba));
ba.Data = &HD6309CPUContext[i].reg;
ba.nLen = sizeof(HD6309CPUContext[i].reg);
ba.szName = szName;
BurnAcb(&ba);
SCAN_VAR(HD6309CPUContext[i].nCyclesTotal);
SCAN_VAR(HD6309CPUContext[i].nCyclesSegment);
SCAN_VAR(HD6309CPUContext[i].nCyclesLeft);
SCAN_VAR(nHD6309CyclesDone[i]);
}
SCAN_VAR(nHD6309CyclesTotal);
return 0;
}

View File

@ -487,31 +487,47 @@ INT32 M6800Scan(INT32 nAction)
if (!DebugCPU_M6800Initted) bprintf(PRINT_ERROR, _T("M6800Scan called without init\n"));
#endif
struct BurnArea ba;
if (nAction & ACB_DRIVER_DATA) {
m6800_Regs *tmp;
void (* const * insn)(void);
const UINT8 *cycles;
for (INT32 i = 0; i < nM6800Count; i++) {
tmp = &M6800CPUContext[i].reg;
char szName[] = "M6800 #n";
szName[7] = '0' + i;
cycles = tmp->cycles;
insn = tmp->insn;
ba.Data = &M6800CPUContext[i].reg;
ba.nLen = sizeof(M6800CPUContext[i].reg);
ba.szName = szName;
BurnAcb(&ba);
tmp->cycles = cycles;
tmp->insn = insn;
for (INT32 i = 0; i <= nM6800Count; i++) {
m6800_Regs *R = &M6800CPUContext[i].reg;
SCAN_VAR(R->ppc);
SCAN_VAR(R->pc);
SCAN_VAR(R->s);
SCAN_VAR(R->x);
SCAN_VAR(R->d);
SCAN_VAR(R->cc);
SCAN_VAR(R->wai_state);
SCAN_VAR(R->nmi_state);
SCAN_VAR(R->irq_state);
SCAN_VAR(R->ic_eddge);
SCAN_VAR(R->extra_cycles);
SCAN_VAR(R->port1_ddr);
SCAN_VAR(R->port2_ddr);
SCAN_VAR(R->port3_ddr);
SCAN_VAR(R->port4_ddr);
SCAN_VAR(R->port1_data);
SCAN_VAR(R->port2_data);
SCAN_VAR(R->port3_data);
SCAN_VAR(R->port4_data);
SCAN_VAR(R->tcsr);
SCAN_VAR(R->rmcr);
SCAN_VAR(R->pending_tcsr);
SCAN_VAR(R->irq2);
SCAN_VAR(R->ram_ctrl);
SCAN_VAR(R->counter);
SCAN_VAR(R->output_compare);
SCAN_VAR(R->input_capture);
SCAN_VAR(R->timer_over);
SCAN_VAR(M6800CPUContext[i].nCyclesTotal);
SCAN_VAR(M6800CPUContext[i].nCyclesSegment);
SCAN_VAR(M6800CPUContext[i].nCyclesLeft);
SCAN_VAR(nM6800CyclesDone[i]);
}
SCAN_VAR(nM6800CyclesTotal);
}
return 0;
}