VM8086 Support, Starting on VESA Driver
[tpg/acess2.git] / Kernel / drv / kb.c
index a546153..950f722 100644 (file)
@@ -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)

UCC git Repository :: git.ucc.asn.au