From d20375921b3063de5ad406a48eb6bf41e881365c Mon Sep 17 00:00:00 2001 From: Jess Haas Date: Wed, 17 Mar 1999 15:29:06 +0000 Subject: [PATCH] Fixed/implemented various interrupt functions. --- msdos/int10.c | 52 +++++++++++++++++++++++---------------------------- msdos/int16.c | 19 +++++++++++++++++-- msdos/int21.c | 6 +++++- msdos/int2f.c | 26 ++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 32 deletions(-) diff --git a/msdos/int10.c b/msdos/int10.c index 3f55dba7ce2..924d6b14052 100644 --- a/msdos/int10.c +++ b/msdos/int10.c @@ -114,7 +114,7 @@ void WINAPI INT_Int10Handler( CONTEXT *context ) case 0x00: /* 40x25 */ case 0x01: VGA_Exit(); - TRACE(int10, "Set Video Mode - Set to Text - 0x0%x\n", + TRACE(int10, "Set VESA Text Mode - 0x0%x\n", BX_reg(context)); CONSOLE_ResizeScreen(40, 25); CONSOLE_ClearScreen(); @@ -124,46 +124,26 @@ void WINAPI INT_Int10Handler( CONTEXT *context ) case 0x03: case 0x07: VGA_Exit(); - TRACE(int10, "Set Video Mode - Set to Text - 0x0%x\n", + TRACE(int10, "Set VESA Text Mode - 0x0%x\n", BX_reg(context)); CONSOLE_ResizeScreen(80, 25); CONSOLE_ClearScreen(); DOSMEM_BiosData()->VideoColumns = 80; break; - case 0x04: - TRACE(int10, "Setting VGA 320x200 4-color mode\n"); - VGA_SetMode(320,200,2); /* FIXME is this right/supported? */ - break; - case 0x05: - TRACE(int10, "Setting VGA 320x200 4-color mode\n"); - VGA_SetMode(320,200,2); /* FIXME is this right/supported? */ - break; - case 0x06: - TRACE(int10, "Setting VGA 640x200 2-color mode\n"); - VGA_SetMode(640,200,1); /* FIXME is this right/supported? */ - break; case 0x0D: - TRACE(int10, "Setting VGA 320x200 16-color mode\n"); + TRACE(int10, "Setting VESA 320x200 16-color mode\n"); VGA_SetMode(320,200,4); break; case 0x0E: - TRACE(int10, "Setting VGA 640x200 16-color mode\n"); + TRACE(int10, "Setting VESA 640x200 16-color mode\n"); VGA_SetMode(640,200,4); break; - case 0x0F: - TRACE(int10, "Setting VGA 640x350 2-color mode\n"); - VGA_SetMode(640,350,1); /* FIXME is this right/supported? */ - break; case 0x10: - TRACE(int10, "Setting VGA 640x350 16-color mode\n"); + TRACE(int10, "Setting VESA 640x350 16-color mode\n"); VGA_SetMode(640,350,4); break; - case 0x11: - TRACE(int10, "Setting VGA 640x480 2-color mode\n"); - VGA_SetMode(640,480,1); /* FIXME is this right/supported? */ - break; case 0x12: - TRACE(int10, "Setting VGA 640x480 16-color mode\n"); + TRACE(int10, "Setting VESA 640x480 16-color mode\n"); VGA_SetMode(640,480,4); break; case 0x13: @@ -337,7 +317,6 @@ else { AL_reg(context)); CONSOLE_ResizeScreen(40, 25); CONSOLE_ClearScreen(); - DOSMEM_BiosData()->VideoMode = AL_reg(context); DOSMEM_BiosData()->VideoColumns = 40; break; case 0x02: @@ -348,18 +327,33 @@ else { AL_reg(context)); CONSOLE_ResizeScreen(80, 25); CONSOLE_ClearScreen(); - DOSMEM_BiosData()->VideoMode = AL_reg(context); DOSMEM_BiosData()->VideoColumns = 80; break; + case 0x0D: + TRACE(int10, "Setting VGA 320x200 16-color mode\n"); + VGA_SetMode(320,200,4); + break; + case 0x0E: + TRACE(int10, "Setting VGA 640x200 16-color mode\n"); + VGA_SetMode(640,200,4); + break; + case 0x10: + TRACE(int10, "Setting VGA 640x350 16-color mode\n"); + VGA_SetMode(640,350,4); + break; + case 0x12: + TRACE(int10, "Setting VGA 640x480 16-color mode\n"); + VGA_SetMode(640,480,4); + break; case 0x13: TRACE(int10, "Setting VGA 320x200 256-color mode\n"); VGA_SetMode(320,200,8); - DOSMEM_BiosData()->VideoMode = AL_reg(context); break; default: FIXME(int10, "Set Video Mode (0x%x) - Not Supported\n", AL_reg(context)); } + DOSMEM_BiosData()->VideoMode = AL_reg(context); break; case 0x01: /* SET CURSOR SHAPE */ diff --git a/msdos/int16.c b/msdos/int16.c index aba0de1061d..1de9f1962f1 100644 --- a/msdos/int16.c +++ b/msdos/int16.c @@ -68,11 +68,26 @@ void WINAPI INT_Int16Handler( CONTEXT *context ) break; case 0x10: /* Get Enhanced Keystroke */ - FIXME(int16, "Get Enhanced Keystroke - Not Supported\n"); + TRACE(int16, "Get Enhanced Keystroke - Partially supported\n"); + /* Returns: AH = Scan code + AL = ASCII character */ + CONSOLE_GetKeystroke(&AH_reg(context), &AL_reg(context)); break; + case 0x11: /* Check for Enhanced Keystroke */ - FIXME(int16, "Check for Enhanced Keystroke - Not Supported\n"); + /* Returns: ZF set if no keystroke */ + /* AH = Scan code */ + /* AL = ASCII character */ + TRACE(int16, "Check for Enhanced Keystroke - Partially supported\n"); + if (!CONSOLE_CheckForKeystroke(&AH_reg(context), &AL_reg(context))) + { + SET_ZFLAG(context); + } + else + { + RESET_ZFLAG(context); + } break; case 0x12: /* Get Extended Shift States */ diff --git a/msdos/int21.c b/msdos/int21.c index 71f7c0cfa7e..1549b69e691 100644 --- a/msdos/int21.c +++ b/msdos/int21.c @@ -1149,7 +1149,6 @@ void WINAPI DOS3Call( CONTEXT *context ) case 0x26: /* CREATE NEW PROGRAM SEGMENT PREFIX */ case 0x27: /* RANDOM BLOCK READ FROM FCB FILE */ case 0x28: /* RANDOM BLOCK WRITE TO FCB FILE */ - case 0x54: /* GET VERIFY FLAG */ INT_BARF( context, 0x21 ); break; @@ -1903,6 +1902,11 @@ void WINAPI DOS3Call( CONTEXT *context ) } break; + case 0x54: /* Get Verify Flag */ + TRACE(int21,"Get Verify Flag - Not Supported\n"); + AL_reg(context) = 0x00; /* pretend we can tell. 00h = off 01h = on */ + break; + case 0x56: /* "RENAME" - RENAME FILE */ TRACE(int21,"RENAME %s to %s\n", (LPCSTR)CTX_SEG_OFF_TO_LIN(context, DS_reg(context),EDX_reg(context)), diff --git a/msdos/int2f.c b/msdos/int2f.c index f370ed56017..913f67d4994 100644 --- a/msdos/int2f.c +++ b/msdos/int2f.c @@ -225,6 +225,19 @@ void WINAPI INT_Int2fHandler( CONTEXT *context ) break; } break; + case 0xd2: + switch(AL_reg(context)) + { + case 0x01: /* Quarterdeck RPCI - QEMM/QRAM - PCL-838.EXE functions */ + if(BX_reg(context) == 0x5145 && CX_reg(context) == 0x4D4D + && DX_reg(context) == 0x3432) + TRACE(int, "Check for QEMM v5.0+ (not installed)\n"); + break; + default: + INT_BARF( context, 0x2f ); + break; + } + break; case 0xd7: /* Banyan Vines */ switch (AL_reg(context)) { @@ -236,6 +249,19 @@ void WINAPI INT_Int2fHandler( CONTEXT *context ) break; } break; + case 0xde: + switch(AL_reg(context)) + { + case 0x01: /* Quarterdeck QDPMI.SYS - DESQview */ + if(BX_reg(context) == 0x4450 && CX_reg(context) == 0x4d49 + && DX_reg(context) == 0x8f4f) + TRACE(int, "Check for QDPMI.SYS (not installed)\n"); + break; + default: + INT_BARF( context, 0x2f ); + break; + } + break; case 0xfa: /* Watcom debugger check, returns 0x666 if installed */ break; default: