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
This commit is contained in:
Hermès Bélusca-Maïto 2014-02-21 19:27:27 +00:00
parent 0b434e7c6c
commit 5a3cc5df3c
4 changed files with 12 additions and 5 deletions

View file

@ -127,7 +127,6 @@ VOID ClockUpdate(VOID)
VgaHorizontalRetrace();
/* Continue CPU emulation */
// EmulatorSimulate();
for (i = 0; (i < STEPS_PER_CYCLE) && VdmRunning; i++)
{
EmulatorStep();

View file

@ -177,12 +177,18 @@ VOID EmulatorStep(VOID)
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)

View file

@ -118,6 +118,8 @@ VOID EmulatorExecute(WORD Segment, WORD Offset);
VOID EmulatorInterrupt(BYTE Number);
VOID EmulatorInterruptSignal(VOID);
VOID EmulatorStep(VOID);
VOID EmulatorSimulate(VOID);
VOID EmulatorUnsimulate(VOID);
VOID EmulatorCleanup(VOID);
VOID EmulatorSetA20(BOOLEAN Enabled);

View file

@ -420,8 +420,8 @@ INT wmain(INT argc, WCHAR *argv[])
goto Cleanup;
}
/* Main loop */
while (VdmRunning) ClockUpdate();
/* Start simulation */
EmulatorSimulate();
/* Perform another screen refresh */
VgaRefreshDisplay();