summaryrefslogtreecommitdiff
path: root/kernel/idt.c
diff options
context:
space:
mode:
authorVegard Storheil Eriksen <zyp@jvnv.net>2010-01-20 22:18:02 +0100
committerVegard Storheil Eriksen <zyp@jvnv.net>2010-01-20 22:18:02 +0100
commit068368d0bedc34f561ab0c9dd614c02b346d1d4e (patch)
tree5951082c13767904c9995c759263c18fcd17845e /kernel/idt.c
parentbfa24f7e97eebd26561d87bbab643a9825e93392 (diff)
Added IRQ-support and timer interrupt.
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)