summaryrefslogtreecommitdiff
path: root/asm
diff options
context:
space:
mode:
Diffstat (limited to 'asm')
-rw-r--r--asm/int_syscall_handler.asm41
1 files changed, 41 insertions, 0 deletions
diff --git a/asm/int_syscall_handler.asm b/asm/int_syscall_handler.asm
new file mode 100644
index 0000000..e607ff5
--- /dev/null
+++ b/asm/int_syscall_handler.asm
@@ -0,0 +1,41 @@
+global int_syscall_handler
+
+[extern example_syscall]
+[extern example_syscall_2]
+
+[bits 32]
+int_syscall_handler:
+
+ cli
+
+ push ebx
+ push ecx
+ push edx
+
+ cmp eax, 10
+ je call_example_syscall
+
+ cmp eax, 20
+ je call_example_syscall_2
+
+done:
+
+ pop ebx
+ pop ecx
+ pop edx
+
+ mov ebx,eax
+
+ mov al, 0x20 ;Port number AND command number to Acknowledge IRQ
+ out 0x20, al ;Acknowledge IRQ, so we keep getting interrupts
+
+ sti
+ iret ;Interrupt-Return
+
+call_example_syscall:
+ call example_syscall
+ jmp done
+
+call_example_syscall_2
+ call example_syscall_2
+ jmp done