From 53fbdf6bc9d699b0f7a44d287507f9d02ccfef44 Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Tue, 25 Jun 2013 17:56:05 +0000 Subject: [PATCH] [NTVDM] Implement the "Get Interrupt Vector" and "Set Interrupt Vector" DOS API functions. svn path=/branches/ntvdm/; revision=59340 --- subsystems/ntvdm/dos.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/subsystems/ntvdm/dos.c b/subsystems/ntvdm/dos.c index 4bd4652dd28..5f91e79de22 100644 --- a/subsystems/ntvdm/dos.c +++ b/subsystems/ntvdm/dos.c @@ -635,6 +635,17 @@ VOID DosInt21h(WORD CodeSegment) break; } + /* Set Interrupt Vector */ + case 0x25: + { + DWORD FarPointer = MAKELONG(LOWORD(Edx), DataSegment); + + /* Write the new far pointer to the IDT */ + ((PDWORD)BaseAddress)[LOBYTE(Eax)] = FarPointer; + + break; + } + /* Get system date */ case 0x2A: { @@ -710,6 +721,18 @@ VOID DosInt21h(WORD CodeSegment) break; } + /* Get Interrupt Vector */ + case 0x35: + { + DWORD FarPointer = ((PDWORD)BaseAddress)[LOBYTE(Eax)]; + + /* Read the address from the IDT into ES:BX */ + EmulatorSetRegister(EMULATOR_REG_ES, HIWORD(FarPointer)); + EmulatorSetRegister(EMULATOR_REG_BX, LOWORD(FarPointer)); + + break; + } + /* Create Directory */ case 0x39: {