summaryrefslogtreecommitdiff
path: root/kernel/idt.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/idt.c')
-rw-r--r--kernel/idt.c19
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)