%include "asm.inc"
BITS 32
SECTION .text
; NB: il jmp dopo l'iret E` NECESSARIO perche` dopo che il task ha eseguito
; l'iret il TSS avra` eip che punta all'istruzione successiva, che e`
; appunto il jmp che fa ritornare al punto giusto.
;
;
%macro EXCP 1
GLOBAL __excp_%1
EXTERN _excp_%1
CODE_ALIGN 8
__excp_%1
call _excp_%1
add esp,4
iret
jmp __excp_%1
%endm
EXCP 01
EXCP 03
EXCP 08
EXCP 0a
EXCP 0c
EXCP 0d
EXCP 0e
%macro TRAP 1
GLOBAL __trap_%1
EXTERN _trap_%1
CODE_ALIGN 8
__trap_%1
pushad
push ds
push es
mov ax,KERNEL_DS
mov ds,ax
mov es,ax
mov eax,esp
call _trap_%1
pop es
pop ds
popad
iret
%endm
TRAP 00
TRAP 02
TRAP 04
TRAP 05
TRAP 06
TRAP 07
TRAP 0b
TRAP 16
EXTERN _irq_handler
%macro IRQ 1
GLOBAL __irq_%1
CODE_ALIGN 8
__irq_%1
mov eax,0x%1
call _irq_handler
iret
jmp __irq_%1
%endm
IRQ 0
IRQ 1
IRQ 2
IRQ 3
IRQ 4
IRQ 5
IRQ 6
IRQ 7
IRQ 8
IRQ 9
IRQ a
IRQ b
IRQ c
IRQ d
IRQ e
IRQ f