aboutsummaryrefslogtreecommitdiff
path: root/src/core/int.S
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2021-05-02 14:46:18 +0200
committerLoic Guegan <manzerbredes@mailbox.org>2021-05-02 14:46:18 +0200
commite59104ffb55abe522c82d658f1f285149cca2cb1 (patch)
treeeb3cc1e46d0dd5b684864903b95ae32e245010da /src/core/int.S
parent4f08ba2b1d0ad7ea90d4d97a483b56b891b9c902 (diff)
Debug GDT enable multitasking
Diffstat (limited to 'src/core/int.S')
-rw-r--r--src/core/int.S80
1 files changed, 71 insertions, 9 deletions
diff --git a/src/core/int.S b/src/core/int.S
index 9505191..2897698 100644
--- a/src/core/int.S
+++ b/src/core/int.S
@@ -1,50 +1,112 @@
.code64
.extern printk
-.extern ack
+.extern apic_ack
-.macro call_printk msg
+.macro CALL_PRINTK msg
mov \msg, %rdi
mov $0, %eax # Required for variadic functions
mov $printk,%rcx
call *(%rcx)
.endm
+.macro SAVE_REGS
+ push %r8
+ push %r9
+ push %r10
+ push %r11
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ push %rax
+ push %rbx
+ push %rcx
+ push %rdx
+ push %rbp
+ push %rsi
+ push %rdi
+ push %rax
+ mov $0x10, %ax
+ mov %ax, %ds
+ pop %rax
+.endm
+
+.macro RESTORE_REGS
+ pop %rdi
+ pop %rsi
+ pop %rbp
+ pop %rdx
+ pop %rcx
+ pop %rbx
+ pop %rax
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %r11
+ pop %r10
+ pop %r9
+ pop %r8
+.endm
+
.globl INT_DEFAULT
INT_DEFAULT:
+ SAVE_REGS
+ RESTORE_REGS
iretq
.globl INT_0
INT_0:
- call_printk $MSG_INT_0
+ CALL_PRINTK $MSG_INT_0
INT_0_INFINITE:
jmp INT_0_INFINITE
iretq
+.globl INT_10
+INT_10:
+ CALL_PRINTK $MSG_INT_10
+ INT_10_INFINITE:
+ jmp INT_10_INFINITE
+ iretq
+
.globl INT_14
INT_14:
- call_printk $MSG_INT_14
- mov $0, %eax
- call printk
+ CALL_PRINTK $MSG_INT_14
INT_14_INFINITE:
jmp INT_14_INFINITE
iretq
.globl INT_KBD
INT_KBD:
- #call_printk $MSG_INT_KBD
- call ack
+ SAVE_REGS
+ CALL_PRINTK $MSG_INT_KBD
+ call apic_ack
+ RESTORE_REGS
iretq
.globl INT_CLK
.extern clock
INT_CLK:
+ SAVE_REGS
call clock
- call ack
+ call apic_ack
+ RESTORE_REGS
+ iretq
+
+.globl INT_SYSCALL
+.extern syscall
+INT_SYSCALL:
+ SAVE_REGS
+ call syscall
+ RESTORE_REGS
iretq
+
MSG_INT_0:
.asciz "Zero Division error!"
+MSG_INT_10:
+.asciz "Invalid TSS!"
MSG_INT_14:
.asciz "Page fault!"
MSG_INT_KBD: