diff --git a/reactos/subsystems/mvdm/ntvdm/bios/bios32/bios32.c b/reactos/subsystems/mvdm/ntvdm/bios/bios32/bios32.c index 8842756521f..7d8235c6dd2 100644 --- a/reactos/subsystems/mvdm/ntvdm/bios/bios32/bios32.c +++ b/reactos/subsystems/mvdm/ntvdm/bios/bios32/bios32.c @@ -721,7 +721,30 @@ static VOID WINAPI BiosTimerIrq(LPWORD Stack) * because some programs may hook only BIOS_SYS_TIMER_INTERRUPT * for their purpose... */ + + WORD AX = getAX(); + WORD CX = getCX(); + WORD DX = getDX(); + WORD BX = getBX(); + WORD BP = getBP(); + WORD SI = getSI(); + WORD DI = getDI(); + WORD DS = getDS(); + WORD ES = getES(); + Int32Call(&BiosContext, BIOS_SYS_TIMER_INTERRUPT); + + setAX(AX); + setCX(CX); + setDX(DX); + setBX(BX); + setBP(BP); + setSI(SI); + setDI(DI); + setDS(DS); + setES(ES); + setCF(0); + // BiosSystemTimerInterrupt(Stack); PicIRQComplete(LOBYTE(Stack[STACK_INT_NUM])); } diff --git a/reactos/subsystems/mvdm/ntvdm/bios/bios32/kbdbios32.c b/reactos/subsystems/mvdm/ntvdm/bios/bios32/kbdbios32.c index ca4be508b23..3567e2f15d8 100644 --- a/reactos/subsystems/mvdm/ntvdm/bios/bios32/kbdbios32.c +++ b/reactos/subsystems/mvdm/ntvdm/bios/bios32/kbdbios32.c @@ -209,8 +209,15 @@ 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. */ - BYTE CF = getCF(); WORD AX = getAX(); + WORD CX = getCX(); + WORD DX = getDX(); + WORD BX = getBX(); + WORD BP = getBP(); + WORD SI = getSI(); + WORD DI = getDI(); + WORD DS = getDS(); + WORD ES = getES(); setCF(1); setAL(IOReadB(PS2_DATA_PORT)); @@ -222,7 +229,15 @@ VOID WINAPI BiosKeyboardIrq(LPWORD Stack) ScanCode = getAL(); setAX(AX); - setCF(CF); + setCX(CX); + setDX(DX); + setBX(BX); + setBP(BP); + setSI(SI); + setDI(DI); + setDS(DS); + setES(ES); + setCF(0); if (ScanCode == 0xE0) {