Added isr.asm with 50 isr_%d labels defined, ready to call isr()

git-svn-id: svn://anubis/hos/trunk@62 5b3e749e-e535-0410-8002-a9bb6afbdfca
This commit is contained in:
josh 2009-07-23 22:02:11 +00:00
parent 2f810cc2ec
commit 6a75fdfc10

61
kernel/boot/isr.asm Normal file
View File

@ -0,0 +1,61 @@
; C ISR routine
[extern isr]
; Macro for creating a single ISR label
; We need to push a junk value on the stack first
; if the interrupt number is not 8 or 10-14.
; This is to properly align the stack for both exceptions
; having and not having error codes.
%macro isr_label 1
[global isr_%1]
isr_%1:
%if ( (%1 != 8) && (%1 < 10 || %1 > 14) )
push eax ; junk value to take error code stack space
%endif
push eax
mov al, %1 ; save interrupt number in al
jmp isr_common
%endmacro
; Loop to create all of our ISR labels
%assign i 0
%rep 50
isr_label i
%assign i i+1
%endrep
; The common ISR routine
isr_common:
push ebx
push ecx
push edx
push edi
push esi
push ebp
push ds
push es
push fs
push gs
push esp
push eax
; TODO: currently commented since there is no isr()
; so the build will not break
; call isr
add esp, 8
pop gs
pop fs
pop es
pop ds
pop ebp
pop esi
pop edi
pop edx
pop ecx
pop ebx
pop eax ; error code can be ignored now
pop eax
iret