diff options
author | Vegard Storheil Eriksen <zyp@jvnv.net> | 2010-01-20 22:18:02 +0100 |
---|---|---|
committer | Vegard Storheil Eriksen <zyp@jvnv.net> | 2010-01-20 22:18:02 +0100 |
commit | 068368d0bedc34f561ab0c9dd614c02b346d1d4e (patch) | |
tree | 5951082c13767904c9995c759263c18fcd17845e /kernel/idt.c | |
parent | bfa24f7e97eebd26561d87bbab643a9825e93392 (diff) |
Added IRQ-support and timer interrupt.
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) |