; 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.6 $
+; $Revision: 1.7 $
; 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
+; Debug functions
IMPORT SerialPrintHex
IMPORT SerialPutChar
mov esi, [esp+REG_SKIP] ; get interrupt number
mov ebx, [eax+esi*4] ; get address of handler function
+ push esi
+ call SerialPrintHex
+ pop esi
+
+ push eax
+ mov eax, 0xa
+ push eax
+ call SerialPutChar
+ pop eax
+ pop eax
+
; Call the handler.
; The argument passed is a pointer to an Interrupt_State struct,
; which describes the stack layout for all interrupts.
; Restore registers
Restore_Registers
+
+ pusha
+
+ mov eax, 0xaa
+ push eax
+ call SerialPrintHex
+ pop eax
+
+ mov eax, 0xa
+ push eax
+ call SerialPutChar
+ pop eax
+
+ popa
+
; Return from the interrupt.
iret