From 5a3cc5df3cf7fc617d11d4c2be68da63bc186f97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 21 Feb 2014 19:27:27 +0000 Subject: [PATCH] [NTVDM] 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 --- subsystems/ntvdm/clock.c | 1 - subsystems/ntvdm/emulator.c | 10 ++++++++-- subsystems/ntvdm/emulator.h | 2 ++ subsystems/ntvdm/ntvdm.c | 4 ++-- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/subsystems/ntvdm/clock.c b/subsystems/ntvdm/clock.c index 0bb3e0c21c8..a6d43f5c591 100644 --- a/subsystems/ntvdm/clock.c +++ b/subsystems/ntvdm/clock.c @@ -127,7 +127,6 @@ VOID ClockUpdate(VOID) VgaHorizontalRetrace(); /* Continue CPU emulation */ - // EmulatorSimulate(); for (i = 0; (i < STEPS_PER_CYCLE) && VdmRunning; i++) { EmulatorStep(); diff --git a/subsystems/ntvdm/emulator.c b/subsystems/ntvdm/emulator.c index 826ff3937ac..0e5cba83bab 100644 --- a/subsystems/ntvdm/emulator.c +++ b/subsystems/ntvdm/emulator.c @@ -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) diff --git a/subsystems/ntvdm/emulator.h b/subsystems/ntvdm/emulator.h index 49aff1e43ed..51e9dceb249 100644 --- a/subsystems/ntvdm/emulator.h +++ b/subsystems/ntvdm/emulator.h @@ -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); diff --git a/subsystems/ntvdm/ntvdm.c b/subsystems/ntvdm/ntvdm.c index 6dfe67a9d81..ab185ac8eeb 100644 --- a/subsystems/ntvdm/ntvdm.c +++ b/subsystems/ntvdm/ntvdm.c @@ -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();