]> xenbits.xensource.com Git - people/andrewcoop/seabios.git/commitdiff
kbd: Implement extended keycode mappings for keypad-enter and keypad-/
authorKevin O'Connor <kevin@koconnor.net>
Fri, 2 Sep 2016 20:17:14 +0000 (16:17 -0400)
committerKevin O'Connor <kevin@koconnor.net>
Mon, 12 Sep 2016 14:22:10 +0000 (10:22 -0400)
On a 101-key keyboard the keypad enter and keypad '/' keys have unique
BIOS keycodes that are distinct from the main keyboard enter and '/'
keys.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
src/kbd.c

index 45edd8f94126149f93446d3e507c55ec48bb4874..cc4102568d74e1b7bb93f703a683f799808d300f 100644 (file)
--- a/src/kbd.c
+++ b/src/kbd.c
@@ -98,6 +98,12 @@ dequeue_key(struct bregs *regs, int incr, int extended)
         // Translate extended keys
         if (ascii == 0xe0 && keycode & 0xff00)
             keycode &= 0xff00;
+        else if (keycode == 0xe00d || keycode == 0xe00a)
+            // Extended enter key
+            keycode = 0x1c00 | ascii;
+        else if (keycode == 0xe02f)
+            // Extended '/' key
+            keycode = 0x352f;
         // Technically, if the ascii value is 0xf0 or if the
         // 'scancode' is greater than 0x84 then the key should be
         // discarded.  However, there seems no harm in passing on the
@@ -385,6 +391,13 @@ static struct scaninfo {
     { 0x8600, 0x8800, 0x8a00, 0x8c00 }, /* F12 */
 };
 
+struct scaninfo key_ext_enter VAR16 = {
+    0xe00d, 0xe00d, 0xe00a, 0xa600
+};
+struct scaninfo key_ext_slash VAR16 = {
+    0xe02f, 0xe02f, 0x9500, 0xa400
+};
+
 // Handle a ps2 style scancode read from the keyboard.
 static void
 __process_key(u8 scancode)
@@ -515,6 +528,8 @@ __process_key(u8 scancode)
         }
         u16 keycode;
         struct scaninfo *info = &scan_to_keycode[scancode];
+        if (flags2 & KF2_LAST_E0 && (scancode == 0x1c || scancode == 0x35))
+            info = (scancode == 0x1c ? &key_ext_enter : &key_ext_slash);
         if (flags0 & KF0_ALTACTIVE) {
             keycode = GET_GLOBAL(info->alt);
         } else if (flags0 & KF0_CTRLACTIVE) {