From e35cff6d299a07d9b34f303717083a9299a37e82 Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Mon, 28 Aug 2023 15:16:12 +0100 Subject: Initial import --- src/keyb.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/keyb.c (limited to 'src/keyb.c') diff --git a/src/keyb.c b/src/keyb.c new file mode 100644 index 0000000..d5228f6 --- /dev/null +++ b/src/keyb.c @@ -0,0 +1,35 @@ +#include +#include +#include +#include + +volatile uint8_t ubox_keys[0xff] = { 0 }; + +static _go32_dpmi_seginfo old_handler, new_handler; + +static void keyb_handler() +{ + uint8_t k = inportb(0x60); + + if (k & 128) + ubox_keys[k & 127] = 0; + else + ubox_keys[k] = 1; + + outportb(0x20, 0x20); +} + +void ubox_keyb_init() +{ + _go32_dpmi_get_protected_mode_interrupt_vector(9, &old_handler); + new_handler.pm_offset = (unsigned long)keyb_handler; + new_handler.pm_selector = _go32_my_cs(); + _go32_dpmi_allocate_iret_wrapper(&new_handler); + _go32_dpmi_set_protected_mode_interrupt_vector(9, &new_handler); +} + +void ubox_keyb_free() +{ + if (_go32_dpmi_set_protected_mode_interrupt_vector(9, &old_handler) != -1) + _go32_dpmi_free_iret_wrapper(&new_handler); +} -- cgit v1.2.3