/* * Copyright (C) 2025 Danny Holman * * This file is part of BoxOS, a free and open-source Unix-like operating * system. * * BoxOS is free software; you can redistribute it and/or modify under the * terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) any later * version. * * BoxOS is distributed in the hope it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * BoxOS; if not, see . */ .section .text .macro isr_err_stub num .global isr_stub_\num .type isr_stub_\num, @function isr_stub_\num: cli pushq $\num jmp isr_frame_asm .endm .macro isr_no_err_stub num .global isr_stub_\num .type isr_stub_\num, @function isr_stub_\num: cli pushq $0 pushq $\num jmp isr_frame_asm .endm .macro irq_stub num .global irq_stub_\num .type irq_stub_\num, @function irq_stub_\num: cli pushq $0 pushq $\num+32 jmp isr_frame_asm .endm isr_frame_asm: pushq %rax pushq %rbx pushq %rcx pushq %rdx pushq %rsi pushq %rdi pushq %r8 pushq %r9 pushq %r10 pushq %r11 pushq %r12 pushq %r13 pushq %r14 pushq %r15 movq %cr0, %rax pushq %rax movq %cr2, %rax pushq %rax movq %cr3, %rax pushq %rax movq %cr4, %rax pushq %rax movq %rsp, %rdi cld call isr_dispatch popq %rax movq %rax, %cr4 popq %rax movq %rax, %cr3 popq %rax movq %rax, %cr2 popq %rax movq %rax, %cr0 popq %r15 popq %r14 popq %r13 popq %r12 popq %r11 popq %r10 popq %r9 popq %r8 popq %rdi popq %rsi popq %rdx popq %rcx popq %rbx popq %rax addq $16, %rsp iretq isr_no_err_stub 0 isr_no_err_stub 1 isr_no_err_stub 2 isr_no_err_stub 3 isr_no_err_stub 4 isr_no_err_stub 5 isr_no_err_stub 6 isr_no_err_stub 7 isr_err_stub 8 isr_no_err_stub 9 isr_err_stub 10 isr_err_stub 11 isr_err_stub 12 isr_err_stub 13 isr_err_stub 14 isr_no_err_stub 15 isr_no_err_stub 16 isr_err_stub 17 isr_no_err_stub 18 isr_no_err_stub 19 isr_no_err_stub 20 isr_err_stub 21 isr_no_err_stub 22 isr_no_err_stub 23 isr_no_err_stub 24 isr_no_err_stub 25 isr_no_err_stub 26 isr_no_err_stub 27 isr_no_err_stub 28 isr_err_stub 29 isr_err_stub 30 isr_no_err_stub 31 irq_stub 0 irq_stub 1 irq_stub 2 irq_stub 3 irq_stub 4 irq_stub 5 irq_stub 6 irq_stub 7 irq_stub 8 irq_stub 9 irq_stub 10 irq_stub 11 irq_stub 12 irq_stub 13 irq_stub 14 irq_stub 15 isr_no_err_stub 128