Initial commit
diff --git a/src/descriptor_tables.h b/src/descriptor_tables.h
new file mode 100644
index 0000000..d918f4a
--- /dev/null
+++ b/src/descriptor_tables.h
@@ -0,0 +1,114 @@
+#pragma once
+
+#include "kint.h"
+
+struct gdt_entry
+{
+	ushort limit_low;
+	ushort base_low;
+	uchar base_middle;
+
+	union
+	{
+		struct
+		{
+			uint a_p    : 1;
+			uint a_dpl  : 2;
+			uint a_dt   : 1;
+			uint a_type : 4;
+		};
+
+		uchar access;
+	};
+
+	union
+	{
+		struct
+		{
+			uint g_g    : 1;
+			uint g_d    : 1;
+			uint g_zero : 2; /* includes A */
+			uint g_len  : 4;
+		};
+		
+		uchar granularity;
+	};
+
+	uchar base_high;
+} __attribute__((packed));
+
+
+struct gdt_pointer
+{
+	/* Upper 16 bits of selector limits */
+	ushort limit;
+	/* first struct gdt_entry */
+	uint base;
+} __attribute__((packed));
+
+struct idt_entry
+{
+	ushort base_low;
+	ushort selector;
+	uchar zero;
+
+	union
+	{
+		struct
+		{
+			uchar f_p     : 1;
+			uchar f_dpl   : 2;
+			uchar f_const : 5;
+		};
+		
+		uchar flags;
+	};
+	
+	ushort base_high;
+} __attribute__((packed));
+
+#define IDT_F_CONST 0b00110
+
+struct idt_pointer
+{
+	ushort limit;
+	uint base;
+} __attribute__((packed));
+
+extern void isr0();
+extern void isr1();
+extern void isr2();
+extern void isr3();
+extern void isr4();
+extern void isr5();
+extern void isr6();
+extern void isr7();
+extern void isr8();
+extern void isr9();
+extern void isr10();
+extern void isr11();
+extern void isr12();
+extern void isr13();
+extern void isr14();
+extern void isr15();
+extern void isr16();
+extern void isr17();
+extern void isr18();
+extern void isr19();
+extern void isr20();
+extern void isr21();
+extern void isr22();
+extern void isr23();
+extern void isr24();
+extern void isr25();
+extern void isr26();
+extern void isr27();
+extern void isr28();
+extern void isr29();
+extern void isr30();
+extern void isr31();
+
+
+void init_descriptor_tables();
+void init_idt();
+void init_gdt();