aboutsummaryrefslogtreecommitdiff
path: root/src/idt/stubs.S
diff options
context:
space:
mode:
Diffstat (limited to 'src/idt/stubs.S')
-rw-r--r--src/idt/stubs.S82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/idt/stubs.S b/src/idt/stubs.S
new file mode 100644
index 0000000..97f1797
--- /dev/null
+++ b/src/idt/stubs.S
@@ -0,0 +1,82 @@
+.set IRQ_BASE, 0x20
+
+.section .text
+.extern handle_interrupt
+
+.macro interrupt num
+.global interrupt\num
+interrupt\num:
+ push $0
+ push $\num + IRQ_BASE
+ jmp interrupt_common
+.endm
+
+.macro exception num
+.global exception\num
+exception\num:
+ push $0
+ push $\num
+ jmp interrupt_common
+.endm
+
+.macro exception_ec num
+.global exception\num
+exception\num:
+ push $\num
+ jmp interrupt_common
+.endm
+
+/* exceptions */
+exception 0x00
+exception 0x01
+exception 0x02
+exception 0x03
+exception 0x04
+exception 0x05
+exception 0x06
+exception 0x07
+exception_ec 0x08
+exception 0x09
+exception_ec 0x0a
+exception_ec 0x0b
+exception_ec 0x0c
+exception_ec 0x0d
+exception_ec 0x0e
+exception 0x0f
+exception 0x10
+exception_ec 0x11
+exception 0x12
+exception 0x13
+
+/* interrupts - master pic */
+interrupt 0x00 # system timer
+interrupt 0x01 # keyboard controller
+interrupt 0x02 # slave pic
+interrupt 0x03 # serial port 2 and 4
+interrupt 0x04 # serial port 1 and 3
+interrupt 0x05 # parallel port 2 and 3, sound card
+interrupt 0x06 # floppy controller
+interrupt 0x07 # parallel port 1
+/* interrupts - slave pic */
+interrupt 0x08 # real-time clock
+interrupt 0x09 # acpi
+interrupt 0x0a #
+interrupt 0x0b #
+interrupt 0x0c # mouse on ps/2
+interrupt 0x0d # fpu
+interrupt 0x0e # primary ATA
+interrupt 0x0f # secondary ATA
+
+interrupt_common:
+ pusha
+
+ push %esp
+ call handle_interrupt
+ mov %eax, %esp
+
+ popa
+ /* remove error code and irq from stack */
+ add $8, %esp
+
+ iret
+