Macro-ify asm IDT entry loading
This commit is contained in:
@@ -145,32 +145,27 @@ handle_timer:
|
||||
pop rax
|
||||
iretq
|
||||
|
||||
;expects name of label, offset in table
|
||||
%macro load_IDT_entry 2
|
||||
%define IDT_SIZE 16
|
||||
mov rax, %1
|
||||
mov [idt64 + %2*IDT_SIZE], ax
|
||||
mov word [idt64 + %2*IDT_SIZE + 2], cs
|
||||
mov word [idt64 + %2*IDT_SIZE + 4], 0x8e00
|
||||
shr rax, 16
|
||||
mov [idt64 + %2*IDT_SIZE + 6], ax
|
||||
shr rax, 16
|
||||
mov [idt64 + %2*IDT_SIZE + 8], eax
|
||||
%endmacro
|
||||
|
||||
setup_IDT:
|
||||
lidt [idt64.pointer]
|
||||
%define timer_int 8
|
||||
mov rax, handle_timer
|
||||
mov [idt64 + timer_int*16], ax
|
||||
mov word [idt64 + timer_int*16 + 2], cs
|
||||
mov word [idt64 + timer_int*16 + 4], 0x8e00
|
||||
shr rax, 16
|
||||
mov [idt64 + timer_int*16 + 6], ax
|
||||
shr rax, 16
|
||||
mov [idt64 + timer_int*16 + 8], eax
|
||||
|
||||
|
||||
%define int_num 9
|
||||
mov rax, handle_keyboard
|
||||
mov [idt64 + int_num*16], ax
|
||||
mov word [idt64 + int_num*16 +2], cs
|
||||
mov word [idt64 + int_num*16 + 4], 0x8e00
|
||||
shr rax, 16
|
||||
mov [idt64 + int_num*16 + 6], ax
|
||||
shr rax, 16
|
||||
mov [idt64 + int_num*16 + 8], eax
|
||||
load_IDT_entry handle_timer, 8
|
||||
load_IDT_entry handle_keyboard, 9
|
||||
|
||||
ret
|
||||
|
||||
|
||||
;setup_PIC:
|
||||
; mov al, 0xfc ;timer and keyboard, no more
|
||||
; out byte 0x21, al
|
||||
|
||||
Reference in New Issue
Block a user