X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=Kernel%2Fdrv%2Fkb.c;h=950f7228edae93b89a7f4a8c285428551ab44660;hb=049de1f2533477716a12a708c097b199eaa8fb6c;hp=a546153d3e46457c4e26e20b2de564b77f2314a6;hpb=b3fa9a08edcbc459bd8e9df73186e292470ebfc3;p=tpg%2Facess2.git diff --git a/Kernel/drv/kb.c b/Kernel/drv/kb.c index a546153d..950f7228 100644 --- a/Kernel/drv/kb.c +++ b/Kernel/drv/kb.c @@ -11,6 +11,7 @@ // === CONSTANTS === #define KB_BUFFER_SIZE 1024 +#define USE_KERNEL_MAGIC 1 // === IMPORTS === void Threads_Dump(); @@ -56,10 +57,18 @@ Uint8 gbaKB_States[3][256]; */ int KB_Install(char **Arguments) { + Uint8 temp; + + // Attempt to get around a strange bug in Bochs/Qemu by toggling + // the controller on and off + temp = inb(0x61); + outb(0x61, temp | 0x80); + outb(0x61, temp & 0x7F); + IRQ_AddHandler(1, KB_IRQHandler); DevFS_AddDevice( &gKB_DevInfo ); //Log("KB_Install: Installed"); - return 1; + return MODULE_ERR_OK; } /** @@ -75,8 +84,9 @@ void KB_IRQHandler() //if( inportb(0x64) & 0x20 ) return; scancode = inb(0x60); // Read from the keyboard's data buffer + Log_Debug("KB", "scancode = %02x"); - Log("KB_IRQHandler: scancode = 0x%02x", scancode); + //Log("KB_IRQHandler: scancode = 0x%02x", scancode); // Ignore ACKs if(scancode == 0xFA) { @@ -161,8 +171,14 @@ void KB_IRQHandler() // --- Check for Kernel Magic Combos #if USE_KERNEL_MAGIC - if(ch == KEY_LCTRL) gbKB_MagicState |= 1; - if(ch == KEY_LALT) gbKB_MagicState |= 2; + if(ch == KEY_LCTRL) { + gbKB_MagicState |= 1; + Log_Log("KB", "Kernel Magic LCTRL Down\n"); + } + if(ch == KEY_LALT) { + gbKB_MagicState |= 2; + Log_Log("KB", "Kernel Magic LALT Down\n"); + } if(gbKB_MagicState == 3) { switch(ch)