diff options
Diffstat (limited to 'kernel/idt.c')
| -rw-r--r-- | kernel/idt.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/kernel/idt.c b/kernel/idt.c new file mode 100644 index 0000000..e1ff72f --- /dev/null +++ b/kernel/idt.c @@ -0,0 +1,23 @@ +#include <stdint.h> +#include <string.h> +#include "idt.h" + +void idt_set_gate(uint8_t idx, uint32_t base, uint16_t sel, uint8_t flags) +{ + idt[idx].base_lo = base & 0xFFFF; + idt[idx].base_hi = base >> 16; + idt[idx].sel = sel; + idt[idx].zero = 0; + idt[idx].flags = flags; +} + +void idt_init(void) +{ + printf("idt_init()"); + idt_pt.limit = sizeof(idt) - 1; + idt_pt.base = (uint32_t)&idt; + + memset(&idt, 0, sizeof(idt)); + + idt_flush((uint32_t)&idt_pt); +} |