[NTVDM]: Fix a bug introduced in revision 64324, where I didn't restore the original...
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 27 Sep 2014 23:45:24 +0000 (23:45 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 27 Sep 2014 23:45:24 +0000 (23:45 +0000)
svn path=/trunk/; revision=64360

reactos/subsystems/ntvdm/bios/bios32/kbdbios32.c

index 0c60a54..0782f3e 100644 (file)
@@ -194,6 +194,7 @@ static VOID WINAPI BiosKeyboardService(LPWORD Stack)
 // Keyboard IRQ 1
 static VOID WINAPI BiosKeyboardIrq(LPWORD Stack)
 {
 // Keyboard IRQ 1
 static VOID WINAPI BiosKeyboardIrq(LPWORD Stack)
 {
+    BOOLEAN SkipScanCode;
     BYTE ScanCode, VirtualKey;
     WORD Character;
 
     BYTE ScanCode, VirtualKey;
     WORD Character;
 
@@ -204,18 +205,25 @@ static VOID WINAPI BiosKeyboardIrq(LPWORD Stack)
      * In return, if CF is set we continue processing the scan code
      * stored in AL, and if not, we skip it.
      */
      * 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);
 
     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 */
     /* Retrieve the modified scan code in AL */
+    SkipScanCode = (getCF() == 0);
     ScanCode = getAL();
 
     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);
 
     /* Get the corresponding virtual key code */
     VirtualKey = MapVirtualKey(ScanCode & 0x7F, MAPVK_VSC_TO_VK);