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");
 }