[NTVDM]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Fri, 21 Feb 2014 19:27:27 +0000 (19:27 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Fri, 21 Feb 2014 19:27:27 +0000 (19:27 +0000)
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
subsystems/ntvdm/emulator.c
subsystems/ntvdm/emulator.h
subsystems/ntvdm/ntvdm.c

index 0bb3e0c..a6d43f5 100644 (file)
@@ -127,7 +127,6 @@ VOID ClockUpdate(VOID)
     VgaHorizontalRetrace();
 
     /* Continue CPU emulation */
-    // EmulatorSimulate();
     for (i = 0; (i < STEPS_PER_CYCLE) && VdmRunning; i++)
     {
         EmulatorStep();
index 826ff39..0e5cba8 100644 (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)
index 49aff1e..51e9dce 100644 (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);
 
index 6dfe67a..ab185ac 100644 (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();