Macro-ify asm IDT entry loading
This commit is contained in:
@@ -145,32 +145,27 @@ handle_timer:
|
|||||||
pop rax
|
pop rax
|
||||||
iretq
|
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:
|
setup_IDT:
|
||||||
lidt [idt64.pointer]
|
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
|
|
||||||
|
|
||||||
|
load_IDT_entry handle_timer, 8
|
||||||
%define int_num 9
|
load_IDT_entry handle_keyboard, 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
|
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
;setup_PIC:
|
;setup_PIC:
|
||||||
; mov al, 0xfc ;timer and keyboard, no more
|
; mov al, 0xfc ;timer and keyboard, no more
|
||||||
; out byte 0x21, al
|
; out byte 0x21, al
|
||||||
|
|||||||
Reference in New Issue
Block a user