From 7e551dbfaef33c259d4a60ee446c513e313a9073 Mon Sep 17 00:00:00 2001 From: xamidev <121681048+xamidev@users.noreply.github.com> Date: Sun, 18 Aug 2024 10:56:27 +0200 Subject: [PATCH] Fix: asm macros for irq, isr --- src/kernel/gdt.c | 7 +- src/kernel/loader.s | 399 ++++++++------------------------------------ 2 files changed, 77 insertions(+), 329 deletions(-) diff --git a/src/kernel/gdt.c b/src/kernel/gdt.c index 65dc5c5..d29743a 100644 --- a/src/kernel/gdt.c +++ b/src/kernel/gdt.c @@ -40,9 +40,14 @@ void gdt_install() gp.base = (unsigned int)&gdt; gdt_set_gate(0, 0, 0, 0, 0); - + + // Ring 0 code + data gdt_set_gate(1, 0, 0xFFFFFFFF, 0x9A, 0xCF); gdt_set_gate(2, 0, 0xFFFFFFFF, 0x92, 0xCF); + // Ring 3 + gdt_set_gate(3, 0, 0xFFFFFFFF, 0xFA, 0xCF); + gdt_set_gate(4, 0, 0xFFFFFFFF, 0xF2, 0xCF); + gdt_flush(); } diff --git a/src/kernel/loader.s b/src/kernel/loader.s index 2459695..4bd1c6c 100644 --- a/src/kernel/loader.s +++ b/src/kernel/loader.s @@ -49,225 +49,55 @@ idt_load: lidt [idtp] ret -global isr0 -global isr1 -global isr2 -global isr3 -global isr4 -global isr5 -global isr6 -global isr7 -global isr8 -global isr9 -global isr10 -global isr11 -global isr12 -global isr13 -global isr14 -global isr15 -global isr16 -global isr17 -global isr18 -global isr19 -global isr20 -global isr21 -global isr22 -global isr23 -global isr24 -global isr25 -global isr26 -global isr27 -global isr28 -global isr29 -global isr30 -global isr31 +%macro ISR_NOERRCODE 1 + global isr%1 + isr%1: + cli + push byte 0 + push byte %1 + jmp isr_common_stub +%endmacro -; Interrupt service routine exceptions -isr0: - cli - push byte 0 - push byte 0 - jmp isr_common_stub +%macro ISR_ERRCODE 1 + global isr%1 + isr%1: + cli + push byte %1 + jmp isr_common_stub +%endmacro -isr1: - cli - push byte 0 - push byte 1 - jmp isr_common_stub - -isr2: - cli - push byte 0 - push byte 2 - jmp isr_common_stub - -isr3: - cli - push byte 0 - push byte 3 - jmp isr_common_stub - -isr4: - cli - push byte 0 - push byte 4 - jmp isr_common_stub - -isr5: - cli - push byte 0 - push byte 5 - jmp isr_common_stub - -isr6: - cli - push byte 0 - push byte 6 - jmp isr_common_stub - -isr7: - cli - push byte 0 - push byte 7 - jmp isr_common_stub - -isr8: - cli - push byte 8 - jmp isr_common_stub - -isr9: - cli - push byte 0 - push byte 9 - jmp isr_common_stub - -isr10: - cli - push byte 10 - jmp isr_common_stub - -isr11: - cli - push byte 11 - jmp isr_common_stub - -isr12: - cli - push byte 12 - jmp isr_common_stub - -isr13: - cli - push byte 13 - jmp isr_common_stub - -isr14: - cli - push byte 14 - jmp isr_common_stub - -isr15: - cli - push byte 0 - push byte 15 - jmp isr_common_stub - -isr16: - cli - push byte 0 - push byte 16 - jmp isr_common_stub - -isr17: - cli - push byte 0 - push byte 17 - jmp isr_common_stub - -isr18: - cli - push byte 0 - push byte 18 - jmp isr_common_stub - -isr19: - cli - push byte 0 - push byte 19 - jmp isr_common_stub - -isr20: - cli - push byte 0 - push byte 20 - jmp isr_common_stub - -isr21: - cli - push byte 0 - push byte 21 - jmp isr_common_stub - -isr22: - cli - push byte 0 - push byte 22 - jmp isr_common_stub - -isr23: - cli - push byte 0 - push byte 23 - jmp isr_common_stub - -isr24: - cli - push byte 0 - push byte 24 - jmp isr_common_stub - -isr25: - cli - push byte 0 - push byte 25 - jmp isr_common_stub - -isr26: - cli - push byte 0 - push byte 26 - jmp isr_common_stub - -isr27: - cli - push byte 0 - push byte 27 - jmp isr_common_stub - -isr28: - cli - push byte 0 - push byte 28 - jmp isr_common_stub - -isr29: - cli - push byte 0 - push byte 29 - jmp isr_common_stub - -isr30: - cli - push byte 0 - push byte 30 - jmp isr_common_stub - -isr31: - cli - push byte 0 - push byte 31 - jmp isr_common_stub +ISR_NOERRCODE 0 +ISR_NOERRCODE 1 +ISR_NOERRCODE 2 +ISR_NOERRCODE 3 +ISR_NOERRCODE 4 +ISR_NOERRCODE 5 +ISR_NOERRCODE 6 +ISR_NOERRCODE 7 +ISR_ERRCODE 8 +ISR_NOERRCODE 9 +ISR_ERRCODE 10 +ISR_ERRCODE 11 +ISR_ERRCODE 12 +ISR_ERRCODE 13 +ISR_ERRCODE 14 +ISR_NOERRCODE 15 +ISR_NOERRCODE 16 +ISR_NOERRCODE 17 +ISR_NOERRCODE 18 +ISR_NOERRCODE 19 +ISR_NOERRCODE 20 +ISR_NOERRCODE 21 +ISR_NOERRCODE 22 +ISR_NOERRCODE 23 +ISR_NOERRCODE 24 +ISR_NOERRCODE 25 +ISR_NOERRCODE 26 +ISR_NOERRCODE 27 +ISR_NOERRCODE 28 +ISR_NOERRCODE 29 +ISR_NOERRCODE 30 +ISR_NOERRCODE 31 extern fault_handler @@ -295,118 +125,31 @@ isr_common_stub: add esp, 8 iret -global irq0 -global irq1 -global irq2 -global irq3 -global irq4 -global irq5 -global irq6 -global irq7 -global irq8 -global irq9 -global irq10 -global irq11 -global irq12 -global irq13 -global irq14 -global irq15 +%macro IRQ 2 + global irq%1 + irq%1: + cli + push byte 0 + push byte %2 + jmp irq_common_stub +%endmacro -irq0: - cli - push byte 0 - push byte 32 - jmp irq_common_stub - -irq1: - cli - push byte 0 - push byte 33 - jmp irq_common_stub - -irq2: - cli - push byte 0 - push byte 34 - jmp irq_common_stub - -irq3: - cli - push byte 0 - push byte 35 - jmp irq_common_stub - -irq4: - cli - push byte 0 - push byte 36 - jmp irq_common_stub - -irq5: - cli - push byte 0 - push byte 37 - jmp irq_common_stub - -irq6: - cli - push byte 0 - push byte 38 - jmp irq_common_stub - -irq7: - cli - push byte 0 - push byte 39 - jmp irq_common_stub - -irq8: - cli - push byte 0 - push byte 40 - jmp irq_common_stub - -irq9: - cli - push byte 0 - push byte 41 - jmp irq_common_stub - -irq10: - cli - push byte 0 - push byte 42 - jmp irq_common_stub - -irq11: - cli - push byte 0 - push byte 43 - jmp irq_common_stub - -irq12: - cli - push byte 0 - push byte 44 - jmp irq_common_stub - -irq13: - cli - push byte 0 - push byte 45 - jmp irq_common_stub - -irq14: - cli - push byte 0 - push byte 46 - jmp irq_common_stub - -irq15: - cli - push byte 0 - push byte 47 - jmp irq_common_stub +IRQ 0, 32 +IRQ 1, 33 +IRQ 2, 34 +IRQ 3, 35 +IRQ 4, 36 +IRQ 5, 37 +IRQ 6, 38 +IRQ 7, 39 +IRQ 8, 40 +IRQ 9, 41 +IRQ 10, 42 +IRQ 11, 43 +IRQ 12, 44 +IRQ 13, 45 +IRQ 14, 46 +IRQ 15, 47 extern irq_handler