From 6bb1e22bf0889333c6141a6f0703687186144013 Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Sun, 13 Feb 2005 13:06:44 +0000 Subject: [PATCH] some changes in the extend keyhandling Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2108 --- src/ints/bios_keyboard.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/ints/bios_keyboard.cpp b/src/ints/bios_keyboard.cpp index 8e579d3e..bf4f9328 100644 --- a/src/ints/bios_keyboard.cpp +++ b/src/ints/bios_keyboard.cpp @@ -377,29 +377,34 @@ irq1_return: } static Bitu INT16_Handler(void) { - Bit16u temp; + Bit16u temp; + bool extended = false; //accept extended keycodes (call 0x10 0x11) switch (reg_ah) { + case 0x10: /* GET KEYSTROKE (extended) */ + extended = true; /* Fallthrough */ case 0x00: /* GET KEYSTROKE */ - case 0x10: + //Officially: the non extended version should skip all extended keys. + //For improved compatibility: clear the extended part (0xe0) { -//TODO find a more elegant way to do this do { + //TODO find a more elegant way to do this temp=get_key(); if (temp==0) { CALLBACK_Idle();}; } while (temp==0); reg_ax=temp; - if(reg_al==0xe0) reg_al=0; //extended key + if(!extended && reg_al==0xe0) reg_al=0; //no extended break; } + case 0x11: /* CHECK FOR KEYSTROKE (extended) */ + extended = true; /* Fallthrough */ case 0x01: /* CHECK FOR KEYSTROKE */ - case 0x11: temp=check_key(); if (temp==0) { CALLBACK_SZF(true); } else { CALLBACK_SZF(false); reg_ax=temp; - if(reg_al==0xe0) reg_al=0; //extended key + if(!extended && reg_al==0xe0) reg_al=0; //no extended } break; case 0x02: /* GET SHIFT FlAGS */