Initialize PIC
diff --git a/src/irq.s b/src/irq.s
new file mode 100644
index 0000000..9806b1e
--- /dev/null
+++ b/src/irq.s
@@ -0,0 +1,53 @@
+	[bits 32]
+
+%macro IRQ 2
+	[global irq%1]
+irq%1:
+	cli
+	push byte 0 				; Error code
+	push byte %2				; Interrupt number
+	jmp irq_common
+%endmacro
+
+IRQ 0, 32
+IRQ 1, 33
+IRQ 2, 34
+IRQ 3, 35
+IRQ 4, 36
+IRQ 5, 37
+IRQ 6, 38
+IRQ 7, 39
+IRQ 8, 40
+IRQ 9, 41
+IRQ 10, 42
+IRQ 11, 43
+IRQ 12, 44
+IRQ 13, 45
+IRQ 14, 46
+IRQ 15, 47
+
+	[extern irq_handler]
+irq_common:
+	pusha
+	mov ax, ds					; Save data segment
+	push eax
+
+	mov ax, 0x10 				; New segments
+	mov ds, ax
+	mov es, ax
+	mov fs, ax
+	mov gs, ax
+
+	call irq_handler
+
+	pop ebx						; Old data segment
+	mov ds, bx
+	mov es, bx
+	mov fs, bx
+	mov gs, bx
+
+	popa
+	add esp, 8
+	sti
+	iret
+