diff options
Diffstat (limited to 'kernel/boot.s')
| -rw-r--r-- | kernel/boot.s | 24 |
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 |
