Author: hbelusca Date: Sat Sep 27 23:45:24 2014 New Revision: 64360
URL: http://svn.reactos.org/svn/reactos?rev=64360&view=rev Log: [NTVDM]: Fix a bug introduced in revision 64324, where I didn't restore the original values of CF and AX. Fix some keyboard issues in Mystery Mansion.
Modified: trunk/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c
Modified: trunk/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/ntvdm/bios/bios3... ============================================================================== --- trunk/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c [iso-8859-1] Sat Sep 27 23:45:24 2014 @@ -194,6 +194,7 @@ // Keyboard IRQ 1 static VOID WINAPI BiosKeyboardIrq(LPWORD Stack) { + BOOLEAN SkipScanCode; BYTE ScanCode, VirtualKey; WORD Character;
@@ -204,17 +205,24 @@ * In return, if CF is set we continue processing the scan code * stored in AL, and if not, we skip it. */ + BYTE CF, AX; + CF = getCF(); + AX = getAX(); + setCF(1); setAL(IOReadB(PS2_DATA_PORT)); setAH(0x4F); Int32Call(&BiosContext, BIOS_MISC_INTERRUPT);
- /* Check whether CL is clear. If so, skip the scan code. */ - if (getCF() == 0) goto Quit; - /**/setCF(0);/**/ // FIXME: HACK: Reset CF otherwise we enter in an infinite loop. - /* Retrieve the modified scan code in AL */ + SkipScanCode = (getCF() == 0); ScanCode = getAL(); + + setAX(AX); + setCF(CF); + + /* Check whether CF is clear. If so, skip the scan code. */ + if (SkipScanCode) goto Quit;
/* Get the corresponding virtual key code */ VirtualKey = MapVirtualKey(ScanCode & 0x7F, MAPVK_VSC_TO_VK);