[SeaBIOS] [PATCH 02/10] kbd: Implement extended keycode mappings for keypad-enter and keypad-/
Kevin O'Connor
kevin at koconnor.net
Mon Sep 5 20:36:03 CEST 2016
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 at koconnor.net>
---
src/kbd.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/src/kbd.c b/src/kbd.c
index 2e43e71..b7b34ee 100644
--- a/src/kbd.c
+++ b/src/kbd.c
@@ -98,6 +98,14 @@ dequeue_key(struct bregs *regs, int incr, int extended)
// Translate extended keys
if (ascii == 0xe0)
keycode &=0xff00;
+ else if ((keycode & 0xff00) == 0xe000) {
+ if (ascii == 0x2f)
+ // Extended '/' key
+ keycode = 0x352f;
+ else
+ // Extended enter key
+ keycode = 0x1c00 | (keycode & 0x00ff);
+ }
// 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 +393,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 +530,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) {
--
2.5.5
More information about the SeaBIOS
mailing list