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/bios…
==============================================================================
--- 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);