Initialize PIC
diff --git a/src/descriptor_tables.c b/src/descriptor_tables.c
index 36e6f8f..a9aa521 100644
--- a/src/descriptor_tables.c
+++ b/src/descriptor_tables.c
@@ -1,6 +1,7 @@
#include "descriptor_tables.h"
#include "vga.h"
-#include "mem.h"
+#include "io.h"
+#include "pic.h"
extern void gdt_flush(uint gdt);
extern void idt_flush(uint idt);
@@ -14,41 +15,14 @@
struct idt_entry idt_entries[256];
struct idt_pointer idt_pointer;
-static void (* isrs[32])() =
-{
- isr0,
- isr1,
- isr2,
- isr3,
- isr4,
- isr5,
- isr6,
- isr7,
- isr8,
- isr9,
- isr10,
- isr11,
- isr12,
- isr13,
- isr14,
- isr15,
- isr16,
- isr17,
- isr18,
- isr19,
- isr20,
- isr21,
- isr22,
- isr23,
- isr24,
- isr25,
- isr26,
- isr27,
- isr28,
- isr29,
- isr30,
- isr31
-};
+static void (*isrs[32])() = {
+ isr0, isr1, isr2, isr3, isr4, isr5, isr6, isr7, isr8, isr9, isr10,
+ isr11, isr12, isr13, isr14, isr15, isr16, isr17, isr18, isr19, isr20, isr21,
+ isr22, isr23, isr24, isr25, isr26, isr27, isr28, isr29, isr30, isr31};
+
+static void (*irqs[16])() = {irq0, irq1, irq2, irq3, irq4, irq5,
+ irq6, irq7, irq8, irq9, irq10, irq11,
+ irq12, irq13, irq14, irq15};
void init_gdt()
{
@@ -106,6 +80,25 @@
idt_flush((uint)&idt_pointer);
+ // Remap PIC
+
+ outb(PIC1_COMMAND, 0x11);
+ outb(PIC2_COMMAND, 0x11);
+
+ outb(PIC1_DATA, 0x20);
+ outb(PIC2_DATA, 0x28);
+ outb(PIC1_DATA, 0x04);
+ outb(PIC2_DATA, 0x02);
+ outb(PIC1_DATA, 0x01);
+ outb(PIC2_DATA, 0x01);
+ outb(PIC1_DATA, 0);
+ outb(PIC2_DATA, 0);
+
+ for (int i = 0; i < 16; i++)
+ {
+ idt_set_gate(i + 32, (uint)irqs[i], 0x08, 0x8e);
+ }
+
vga_write("IDT Initialized!\n");
}