[NTVDM]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Thu, 24 Sep 2015 00:27:59 +0000 (00:27 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Thu, 24 Sep 2015 00:27:59 +0000 (00:27 +0000)
- Fix ZF and CF flags setting in function INT 2Fh, AX=1214h.
- Use CreateEventW explicitely.
- Set the VdmTaskEvent event at startup. This allows user input by default (even if we don't run our own DOS) in NTVDM. Fixes keyboard input not working when testing boot&usage of MSDOS 6.

svn path=/trunk/; revision=69339

reactos/subsystems/mvdm/ntvdm/dos/dem.c
reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c
reactos/subsystems/mvdm/ntvdm/emulator.c

index c0658c9..b364221 100644 (file)
@@ -1015,7 +1015,7 @@ DWORD DosStartProcess32(IN LPCSTR ExecutablePath,
                         sizeof(*DosStartProc32.ComSpecInfo));
     ASSERT(DosStartProc32.ComSpecInfo);
 
-    DosStartProc32.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
+    DosStartProc32.hEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
     ASSERT(DosStartProc32.hEvent);
 #endif
 
index 0b9712d..151186c 100644 (file)
@@ -2184,8 +2184,16 @@ VOID WINAPI DosInt2Fh(LPWORD Stack)
                     PVOID PointerFromFarPointer2 = SEG_OFF_TO_PTR(getES(), getDI());
                     BOOLEAN AreEqual = (PointerFromFarPointer1 == PointerFromFarPointer2);
 
-                    setZF(AreEqual);
-                    setCF(!AreEqual);
+                    if (AreEqual)
+                    {
+                        Stack[STACK_FLAGS] |=  EMULATOR_FLAG_ZF;
+                        Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_CF;
+                    }
+                    else
+                    {
+                        Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_ZF;
+                        Stack[STACK_FLAGS] |=  EMULATOR_FLAG_CF;
+                    }
                     break;
                 }
 
index 0873549..690a522 100644 (file)
@@ -475,7 +475,7 @@ BOOLEAN EmulatorInitialize(HANDLE ConsoleInput, HANDLE ConsoleOutput)
 
     /**************** ATTACH INPUT WITH CONSOLE *****************/
     /* Create the task event */
-    VdmTaskEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+    VdmTaskEvent = CreateEventW(NULL, TRUE, FALSE, NULL);
     ASSERT(VdmTaskEvent != NULL);
 
     /* Start the input thread */
@@ -486,6 +486,7 @@ BOOLEAN EmulatorInitialize(HANDLE ConsoleInput, HANDLE ConsoleOutput)
         EmulatorCleanup();
         return FALSE;
     }
+    ResumeEventThread();
     /************************************************************/
 
     /* Initialize the VGA */