#include <palacios/vmm.h>
 #include <palacios/vmm_types.h>
 
-#define KEYBOARD_DEBUG 1
+#define KEYBOARD_DEBUG 0
 
-#define KEYBOARD_DEBUG_80H   1
+#define KEYBOARD_DEBUG_80H   0
 
 #if KEYBOARD_DEBUG
 #define KEYBOARD_DEBUG_PRINT(first, rest...) PrintDebug(first, ##rest)
 
   //
   // 2 1.44 MB floppy drives
   //
+#if 1
   nvram_state->mem_state[NVRAM_REG_FLOPPY_TYPE]= 0x44;
+#else
+  nvram_state->mem_state[NVRAM_REG_FLOPPY_TYPE] = 0x00;
+#endif
 
   //
   // For old boot sequence style, do floppy first
 
 /*
  * Keyboard driver
  * Copyright (c) 2001,2004 David H. Hovemeyer <daveho@cs.umd.edu>
- * $Revision: 1.4 $
+ * $Revision: 1.5 $
  * 
  * This is free software.  You are permitted to use,
  * redistribute, and modify it as specified in the file "COPYING".
 #include <geekos/keyboard.h>
 
 
-static enum {TARGET_GEEKOS,TARGET_VMM} target=TARGET_GEEKOS;
+static enum {TARGET_GEEKOS,TARGET_VMM} target=TARGET_VMM;
 
 extern void deliver_key_to_vmm(uchar_t status, uchar_t scancode);
 
 
     Begin_IRQ(state);
 
-    Print("Keyboard\n");
+    //Print("Keyboard\n");
 
     status = In_Byte(KB_CMD);
     
       /* There is a byte available */
       scanCode = In_Byte(KB_DATA);
       raw_scancode=scanCode;
-      Print("Keyboard: status=0x%x, scancode=0x%x\n", raw_status, raw_scancode);
+      //Print("Keyboard: status=0x%x, scancode=0x%x\n", raw_status, raw_scancode);
       IO_Delay();
       /*
        *       Print("code=%x%s\n", scanCode, (scanCode&0x80) ? " [release]" : "");
 
 ; Low level interrupt/thread handling code for GeekOS.
 ; Copyright (c) 2001,2003,2004 David H. Hovemeyer <daveho@cs.umd.edu>
 ; Copyright (c) 2003, Jeffrey K. Hollingsworth <hollings@cs.umd.edu>
-; $Revision: 1.5 $
+; $Revision: 1.6 $
 
 ; This is free software.  You are permitted to use,
 ; redistribute, and modify it as specified in the file "COPYING".
 ; Function to activate a new user context (if needed).
 IMPORT Switch_To_User_Context
 
+IMPORT SerialPrintHex
+IMPORT SerialPutChar
+
 ; Sizes of interrupt handler entry points for interrupts with
 ; and without error codes.  The code in idt.c uses this
 ; information to infer the layout of the table of interrupt
        mov     [g_needReschedule], dword 0
 
 .restore:
+
+;      push    ebp
+;      mov     ebp, esp
+;      pusha   
+;
+;      mov     eax, 0xa
+;      push    eax
+;      call    SerialPutChar
+;      pop     eax
+;      mov     eax, 0xa
+;      push    eax
+;      call    SerialPutChar
+;      pop     eax
+;
+;        mov     ecx, 4
+;        mov     edx, 24 
+;
+;.loop:
+;      mov     eax, [ebp + ecx]
+;            
+;        push    eax
+;      call    SerialPrintHex
+;      pop     eax
+;
+;      mov     eax, 0xa
+;      push    eax
+;      call    SerialPutChar
+;      pop     eax
+;        
+;        add     ecx, 4
+;      dec     edx
+;      jnz     .loop
+;
+;
+;      popa
+;      pop     ebp
+       
        ; Activate the user context, if necessary.
        Activate_User_Context
 
 
  * GeekOS timer interrupt support
  * Copyright (c) 2001,2003 David H. Hovemeyer <daveho@cs.umd.edu>
  * Copyright (c) 2003, Jeffrey K. Hollingsworth <hollings@cs.umd.edu>
- * $Revision: 1.4 $
+ * $Revision: 1.5 $
  * 
  * This is free software.  You are permitted to use,
  * redistribute, and modify it as specified in the file "COPYING".
 
 static void Timer_Interrupt_Handler(struct Interrupt_State* state)
 {
-    struct Kernel_Thread* current = g_currentThread;
+   struct Kernel_Thread* current = g_currentThread;
 
     Begin_IRQ(state);
 
      * to choose a new thread.
      */
     if (current->numTicks >= g_Quantum) {
-       g_needReschedule = true;
+       g_needReschedule = true;
     }