summaryrefslogtreecommitdiff
path: root/kernel/boot.s
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/boot.s')
-rw-r--r--kernel/boot.s24
1 files changed, 22 insertions, 2 deletions
diff --git a/kernel/boot.s b/kernel/boot.s
index db846c9..d609611 100644
--- a/kernel/boot.s
+++ b/kernel/boot.s
@@ -2,6 +2,7 @@ global gdt
global idt
global kboot
global register_isr
+global register_trap
extern con_init
extern hd_init
extern kmain
@@ -191,8 +192,27 @@ register_isr:
mov eax, [ebp+12]
and al, 3
shl al, 5
- mov cl, [edx+5]
- and cl, 0x9F
+ mov cl, 0x8E
+ or cl, al
+ mov [edx+5], cl
+ pop ebp
+ ret
+
+; void register_trap(uint8_t n, uint8_t dpl, void *handler);
+register_trap:
+ push ebp
+ mov ebp, esp
+ mov edx, [ebp+8]
+ shl edx, 3
+ add edx, idt
+ mov eax, [ebp+16]
+ mov [edx], ax
+ shr eax, 16
+ mov [edx+6], ax
+ mov eax, [ebp+12]
+ and al, 3
+ shl al, 5
+ mov cl, 0x8F
or cl, al
mov [edx+5], cl
pop ebp