136 lines
1.5 KiB
NASM
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 |