luxos/Kernel/hal/cpu/isrs-asm.asm

218 lines
4.3 KiB
NASM

bits 32
; !!! ISRs !!!
global isr_exception_0
global isr_exception_1
global isr_exception_2
global isr_exception_3
global isr_exception_4
global isr_exception_5
global isr_exception_6
global isr_exception_7
global isr_exception_8
global isr_exception_9
global isr_exception_10
global isr_exception_11
global isr_exception_12
global isr_exception_13
global isr_exception_14
global isr_exception_15
global isr_exception_16
global isr_exception_17
global isr_exception_18
global isr_exception_19
global isr_exception_20
global isr_exception_21
global isr_exception_22
global isr_exception_23
global isr_exception_24
global isr_exception_25
global isr_exception_26
global isr_exception_27
global isr_exception_28
global isr_exception_29
global isr_exception_30
global isr_exception_31
isr_exception_0:
cli
push byte 0; A normal ISR stub that pops a dummy error code to keep a
; uniform stack frame
push byte 0
jmp isr_common_stub
isr_exception_1:
cli
push byte 0
push byte 1
jmp isr_common_stub
isr_exception_2:
cli
push byte 0
push byte 2
jmp isr_common_stub
isr_exception_3:
cli
push byte 0
push byte 3
jmp isr_common_stub
isr_exception_4:
cli
push byte 0
push byte 4
jmp isr_common_stub
isr_exception_5:
cli
push byte 0
push byte 5
jmp isr_common_stub
isr_exception_6:
cli
push byte 0
push byte 6
jmp isr_common_stub
isr_exception_7:
cli
push byte 0
push byte 7
jmp isr_common_stub
isr_exception_8:
cli
push byte 8
jmp isr_common_stub
isr_exception_9:
cli
push byte 0
push byte 9
jmp isr_common_stub
isr_exception_10:
cli
push byte 10
jmp isr_common_stub
isr_exception_11:
cli
push byte 11
jmp isr_common_stub
isr_exception_12:
cli
push byte 12
jmp isr_common_stub
isr_exception_13:
cli
push byte 13
jmp isr_common_stub
isr_exception_14:
cli
push byte 14
jmp isr_common_stub
isr_exception_15:
cli
push byte 0
push byte 15
jmp isr_common_stub
isr_exception_16:
cli
push byte 0
push byte 16
jmp isr_common_stub
isr_exception_17:
cli
push byte 0
push byte 17
jmp isr_common_stub
isr_exception_18:
cli
push byte 0
push byte 18
jmp isr_common_stub
isr_exception_19:
cli
push byte 0
push byte 19
jmp isr_common_stub
isr_exception_20:
cli
push byte 0
push byte 20
jmp isr_common_stub
isr_exception_21:
cli
push byte 0
push byte 21
jmp isr_common_stub
isr_exception_22:
cli
push byte 0
push byte 22
jmp isr_common_stub
isr_exception_23:
cli
push byte 0
push byte 23
jmp isr_common_stub
isr_exception_24:
cli
push byte 0
push byte 24
jmp isr_common_stub
isr_exception_25:
cli
push byte 0
push byte 25
jmp isr_common_stub
isr_exception_26:
cli
push byte 0
push byte 26
jmp isr_common_stub
isr_exception_27:
cli
push byte 0
push byte 27
jmp isr_common_stub
isr_exception_28:
cli
push byte 0
push byte 28
jmp isr_common_stub
isr_exception_29:
cli
push byte 0
push byte 29
jmp isr_common_stub
isr_exception_30:
cli
push byte 0
push byte 30
jmp isr_common_stub
isr_exception_31:
cli
push byte 0
push byte 31
jmp isr_common_stub
extern IsrsFaultHandler
isr_common_stub:
pusha
push ds
push es
push fs
push gs
mov ax, 0x10 ; Load the Kernel Data Segment descriptor!
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov eax, esp ; Push us the stack
push eax
mov eax, IsrsFaultHandler
call eax ; A special call, preserves the 'eip' register
pop eax
pop gs
pop fs
pop es
pop ds
popa
add esp, 8 ; Cleans up the pushed error code and pushed ISR number
iret ; pops 5 things at once: CS, EIP, EFLAGS, SS, and ESP!