| /* | |
| * DOS interrupt 16h handler | |
| */ | |
| #include <stdlib.h> | |
| #include <string.h> | |
| #include <unistd.h> | |
| #include "config.h" | |
| #include "debug.h" | |
| #include "ldt.h" | |
| #include "drive.h" | |
| #include "msdos.h" | |
| #include "miscemu.h" | |
| #include "module.h" | |
| #include "console.h" | |
| /********************************************************************** | |
| * INT_Int16Handler | |
| * | |
| * Handler for int 16h (keyboard) | |
| * | |
| * NOTE: | |
| * | |
| * KEYB.COM (DOS >3.2) adds functions to this interrupt, they are | |
| * not currently listed here. | |
| */ | |
| void WINAPI INT_Int16Handler( CONTEXT *context ) | |
| { | |
| switch AH_reg(context) { | |
| case 0x00: /* Get Keystroke */ | |
| /* Returns: AH = Scan code | |
| AL = ASCII character */ | |
| TRACE(int16, "Get Keystroke\n"); | |
| CONSOLE_GetKeystroke(&AH_reg(context), &AL_reg(context)); | |
| break; | |
| case 0x01: /* Check for Keystroke */ | |
| /* Returns: ZF set if no keystroke */ | |
| /* AH = Scan code */ | |
| /* AL = ASCII character */ | |
| TRACE(int16, "Check for Keystroke\n"); | |
| if (!CONSOLE_CheckForKeystroke(&AH_reg(context), &AL_reg(context))) | |
| { | |
| SET_ZFLAG(context); | |
| } | |
| else | |
| { | |
| RESET_ZFLAG(context); | |
| } | |
| break; | |
| case 0x02: /* Get Shift Flags */ | |
| FIXME(int16, "Get Shift Flags - Not Supported\n"); | |
| break; | |
| case 0x03: /* Set Typematic Rate and Delay */ | |
| FIXME(int16, "Set Typematic Rate and Delay - Not Supported\n"); | |
| break; | |
| case 0x09: /* Get Keyboard Functionality */ | |
| FIXME(int16, "Get Keyboard Functionality - Not Supported\n"); | |
| /* As a temporary measure, say that "nothing" is supported... */ | |
| AL_reg(context) = 0; | |
| break; | |
| case 0x0a: /* Get Keyboard ID */ | |
| FIXME(int16, "Get Keyboard ID - Not Supported\n"); | |
| break; | |
| case 0x10: /* Get Enhanced Keystroke */ | |
| FIXME(int16, "Get Enhanced Keystroke - Not Supported\n"); | |
| break; | |
| case 0x11: /* Check for Enhanced Keystroke */ | |
| FIXME(int16, "Check for Enhanced Keystroke - Not Supported\n"); | |
| break; | |
| case 0x12: /* Get Extended Shift States */ | |
| FIXME(int16, "Get Extended Shift States - Not Supported\n"); | |
| break; | |
| default: | |
| FIXME(int16, "Unknown INT 16 function - 0x%x\n", AH_reg(context)); | |
| break; | |
| } | |
| } | |