Start to implement EmulatorSimulate / EmulatorUnsimulate (used by VDDSimulate16 and VDDUnsimualte16). This piece of code can be better written, but it works for what I'm going to commit next.
svn path=/branches/ntvdm/; revision=62282
VgaHorizontalRetrace();
/* Continue CPU emulation */
- // EmulatorSimulate();
for (i = 0; (i < STEPS_PER_CYCLE) && VdmRunning; i++)
{
EmulatorStep();
VOID EmulatorSimulate(VOID)
{
- UNIMPLEMENTED;
+ // FIXME: Do not mix VdmRunning (i.e. ntvdm running) and CpuSimulate!!
+ while (VdmRunning) ClockUpdate();
+
+ /* This takes into account for reentrance */
+ VdmRunning = TRUE;
}
VOID EmulatorUnsimulate(VOID)
{
- UNIMPLEMENTED;
+ /* Stop simulation */
+ // FIXME: Do not mix VdmRunning (i.e. ntvdm running) and CpuSimulate!!
+ VdmRunning = FALSE;
}
VOID EmulatorInterrupt(BYTE Number)
VOID EmulatorInterrupt(BYTE Number);
VOID EmulatorInterruptSignal(VOID);
VOID EmulatorStep(VOID);
+VOID EmulatorSimulate(VOID);
+VOID EmulatorUnsimulate(VOID);
VOID EmulatorCleanup(VOID);
VOID EmulatorSetA20(BOOLEAN Enabled);
goto Cleanup;
}
- /* Main loop */
- while (VdmRunning) ClockUpdate();
+ /* Start simulation */
+ EmulatorSimulate();
/* Perform another screen refresh */
VgaRefreshDisplay();