%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