From d65c53b046c2268fc60a015db71543dbbf34b690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 24 Sep 2015 00:27:59 +0000 Subject: [PATCH] [NTVDM] - 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 | 2 +- reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c | 12 ++++++++++-- reactos/subsystems/mvdm/ntvdm/emulator.c | 3 ++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/reactos/subsystems/mvdm/ntvdm/dos/dem.c b/reactos/subsystems/mvdm/ntvdm/dos/dem.c index c0658c980fb..b3642215c23 100644 --- a/reactos/subsystems/mvdm/ntvdm/dos/dem.c +++ b/reactos/subsystems/mvdm/ntvdm/dos/dem.c @@ -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 diff --git a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c index 0b9712df83a..151186cef9e 100644 --- a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c +++ b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c @@ -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; } diff --git a/reactos/subsystems/mvdm/ntvdm/emulator.c b/reactos/subsystems/mvdm/ntvdm/emulator.c index 0873549b665..690a5222e6d 100644 --- a/reactos/subsystems/mvdm/ntvdm/emulator.c +++ b/reactos/subsystems/mvdm/ntvdm/emulator.c @@ -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 */