Luna/kernel/src/interrupts/InterruptEntry.asm
2022-09-05 16:13:51 +02:00

136 lines
1.5 KiB
NASM

%macro ISR 1
global isr%1
isr%1:
push byte 0
push byte %1
jmp asm_common
%endmacro
%macro ISR_ERROR 1
global isr%1
isr%1:
push byte %1
jmp asm_common
%endmacro
%macro IRQ 2
global isr%1
isr%1:
push byte %2
push byte %1
jmp asm_common
%endmacro
%macro SOFT 1
global isr%1
isr%1:
push byte 0
push byte %1
jmp asm_common
%endmacro
global unused
unused:
push byte 0
push 256
jmp asm_common
extern common_handler
global asm_common
asm_common:
cld
push rax
push rbx
push rcx
push rdx
push rbp
push rdi
push rsi
push r8
push r9
push r10
push r11
push r12
push r13
push r14
push r15
mov r8, ds
push r8
mov r8, 0x10
mov ds, r8
mov es, r8
mov r8, cr2
push r8
mov rdi, rsp
call common_handler
add rsp, 8
pop r8
mov ds, r8
mov es, r8
pop r15
pop r14
pop r13
pop r12
pop r11
pop r10
pop r9
pop r8
pop rsi
pop rdi
pop rbp
pop rdx
pop rcx
pop rbx
pop rax
add rsp, 16
iretq
ISR 0
ISR 1
ISR 2
ISR 3
ISR 4
ISR 5
ISR 6
ISR 7
ISR_ERROR 8
ISR_ERROR 10
ISR_ERROR 11
ISR_ERROR 12
ISR_ERROR 13
ISR_ERROR 14
ISR 16
ISR_ERROR 17
ISR 18
ISR 19
ISR 20
ISR_ERROR 21
ISR 28
ISR_ERROR 29
ISR_ERROR 30
IRQ 32, 0
IRQ 33, 1
IRQ 34, 2
IRQ 35, 3
IRQ 36, 4
IRQ 37, 5
IRQ 38, 6
IRQ 39, 7
IRQ 40, 8
IRQ 41, 9
IRQ 42, 10
IRQ 43, 11
IRQ 44, 12
IRQ 45, 13
IRQ 46, 14
IRQ 47, 15
SOFT 48