diff options
Diffstat (limited to 'kernel/idt.c')
-rw-r--r-- | kernel/idt.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/kernel/idt.c b/kernel/idt.c index 5633c61..66e1fb8 100644 --- a/kernel/idt.c +++ b/kernel/idt.c @@ -73,6 +73,22 @@ isr_panic(29); isr_panic(30); isr_panic(31); +#include "irq.h" + +void tick() { + *(uint16_t*)(0xb8890) += 1; + irq_reset(); +} + + +asm( + ".globl isr_32\n" + "isr_32:\n" + "pusha\n" + "call tick\n" + "popa\n" + "iret\n" +); void idt_init() { idt_set_gate(0, (uint32_t)isr_0, 0x08, 0x8e00); @@ -108,6 +124,9 @@ void idt_init() { idt_set_gate(30, (uint32_t)isr_30, 0x08, 0x8e00); idt_set_gate(31, (uint32_t)isr_31, 0x08, 0x8e00); + void isr_32(); + idt_set_gate(32, (uint32_t)isr_32, 0x08, 0x8e00); + asm volatile( "lidt (%0)\n" : : "r" (&idtr) |