diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2021-05-02 14:46:18 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2021-05-02 14:46:18 +0200 |
| commit | e59104ffb55abe522c82d658f1f285149cca2cb1 (patch) | |
| tree | eb3cc1e46d0dd5b684864903b95ae32e245010da /src/core/int.S | |
| parent | 4f08ba2b1d0ad7ea90d4d97a483b56b891b9c902 (diff) | |
Debug GDT enable multitasking
Diffstat (limited to 'src/core/int.S')
| -rw-r--r-- | src/core/int.S | 80 |
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: |
