+ lapic: Start implementation + ioapic: Start implementation + apic: Now properly working + madt: Start implementation + pit: Start implementation + smp: Start implementation (only grabs the bootstrap processor's LAPIC ID)
116 lines
No EOL
1.6 KiB
NASM
116 lines
No EOL
1.6 KiB
NASM
|
|
%macro pushall 0
|
|
push rax
|
|
push rcx
|
|
push rdx
|
|
push rbx
|
|
push rbp
|
|
push rsi
|
|
push rdi
|
|
push r8
|
|
push r9
|
|
push r10
|
|
push r11
|
|
push r12
|
|
push r13
|
|
push r14
|
|
push r15
|
|
%endmacro
|
|
|
|
%macro popall 0
|
|
pop r15
|
|
pop r14
|
|
pop r13
|
|
pop r12
|
|
pop r11
|
|
pop r10
|
|
pop r9
|
|
pop r8
|
|
pop rdi
|
|
pop rsi
|
|
pop rbp
|
|
pop rbx
|
|
pop rdx
|
|
pop rcx
|
|
pop rax
|
|
%endmacro
|
|
|
|
%macro isr_err_stub 1
|
|
isr_stub_%+%1:
|
|
push %1
|
|
pushall
|
|
mov rdi, rsp
|
|
|
|
call idt_interrupt_handler
|
|
|
|
popall
|
|
|
|
add rsp, 16
|
|
iretq
|
|
%endmacro
|
|
|
|
%macro isr_no_err_stub 1
|
|
isr_stub_%+%1:
|
|
push 0 ; push the error code (0) into the stack
|
|
push %1 ; push intno into the stack
|
|
|
|
pushall
|
|
|
|
mov rdi, rsp ; put the stack as the first arg.
|
|
|
|
call idt_interrupt_handler
|
|
|
|
popall
|
|
|
|
add rsp, 16
|
|
iretq
|
|
%endmacro
|
|
|
|
extern idt_interrupt_handler
|
|
isr_no_err_stub 0
|
|
isr_no_err_stub 1
|
|
isr_no_err_stub 2
|
|
isr_no_err_stub 3
|
|
isr_no_err_stub 4
|
|
isr_no_err_stub 5
|
|
isr_no_err_stub 6
|
|
isr_no_err_stub 7
|
|
isr_err_stub 8
|
|
isr_no_err_stub 9
|
|
isr_err_stub 10
|
|
isr_err_stub 11
|
|
isr_err_stub 12
|
|
isr_err_stub 13
|
|
isr_err_stub 14
|
|
isr_no_err_stub 15
|
|
isr_no_err_stub 16
|
|
isr_err_stub 17
|
|
isr_no_err_stub 18
|
|
isr_no_err_stub 19
|
|
isr_no_err_stub 20
|
|
isr_no_err_stub 21
|
|
isr_no_err_stub 22
|
|
isr_no_err_stub 23
|
|
isr_no_err_stub 24
|
|
isr_no_err_stub 25
|
|
isr_no_err_stub 26
|
|
isr_no_err_stub 27
|
|
isr_no_err_stub 28
|
|
isr_no_err_stub 29
|
|
isr_err_stub 30
|
|
isr_no_err_stub 31
|
|
|
|
%assign i 32
|
|
%rep 224
|
|
isr_no_err_stub i
|
|
%assign i i+1
|
|
%endrep
|
|
|
|
|
|
global isr_stub_table
|
|
isr_stub_table:
|
|
%assign i 0
|
|
%rep 256
|
|
dq isr_stub_%+i
|
|
%assign i i+1
|
|
%endrep |