10fa393ace27c0a643d0cc3f07ba2619b3839444
[lunaix-os.git] / lunaix-os / kernel / asm / x86 / interrupt.S
1 .macro isr_template vector, no_error_code=1
2     .global _asm_isr\vector
3     .type _asm_isr\vector, @function
4     _asm_isr\vector:
5         .if \no_error_code
6             pushl $0x0
7         .endif
8         pushl $\vector
9         jmp interrupt_wrapper
10 .endm
11
12 .section .text
13     isr_template 0
14     isr_template 13, no_error_code=0
15     isr_template 14, no_error_code=0
16
17     interrupt_wrapper:
18
19         movl %esp, %eax
20         andl $0xfffffff0, %esp
21         subl $16, %esp
22         movl %eax, (%esp)
23
24         call interrupt_handler
25         pop %eax
26         movl %eax, %esp
27         addl $8, %esp
28
29         iret