Fix: asm macros for irq, isr

This commit is contained in:
xamidev
2024-08-18 10:56:27 +02:00
parent 7b65e4ed01
commit 7e551dbfae
2 changed files with 77 additions and 329 deletions

View File

@@ -41,8 +41,13 @@ void gdt_install()
gdt_set_gate(0, 0, 0, 0, 0); gdt_set_gate(0, 0, 0, 0, 0);
// Ring 0 code + data
gdt_set_gate(1, 0, 0xFFFFFFFF, 0x9A, 0xCF); gdt_set_gate(1, 0, 0xFFFFFFFF, 0x9A, 0xCF);
gdt_set_gate(2, 0, 0xFFFFFFFF, 0x92, 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(); gdt_flush();
} }

View File

@@ -49,225 +49,55 @@ idt_load:
lidt [idtp] lidt [idtp]
ret ret
global isr0 %macro ISR_NOERRCODE 1
global isr1 global isr%1
global isr2 isr%1:
global isr3 cli
global isr4 push byte 0
global isr5 push byte %1
global isr6 jmp isr_common_stub
global isr7 %endmacro
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
; Interrupt service routine exceptions %macro ISR_ERRCODE 1
isr0: global isr%1
cli isr%1:
push byte 0 cli
push byte 0 push byte %1
jmp isr_common_stub jmp isr_common_stub
%endmacro
isr1: ISR_NOERRCODE 0
cli ISR_NOERRCODE 1
push byte 0 ISR_NOERRCODE 2
push byte 1 ISR_NOERRCODE 3
jmp isr_common_stub ISR_NOERRCODE 4
ISR_NOERRCODE 5
isr2: ISR_NOERRCODE 6
cli ISR_NOERRCODE 7
push byte 0 ISR_ERRCODE 8
push byte 2 ISR_NOERRCODE 9
jmp isr_common_stub ISR_ERRCODE 10
ISR_ERRCODE 11
isr3: ISR_ERRCODE 12
cli ISR_ERRCODE 13
push byte 0 ISR_ERRCODE 14
push byte 3 ISR_NOERRCODE 15
jmp isr_common_stub ISR_NOERRCODE 16
ISR_NOERRCODE 17
isr4: ISR_NOERRCODE 18
cli ISR_NOERRCODE 19
push byte 0 ISR_NOERRCODE 20
push byte 4 ISR_NOERRCODE 21
jmp isr_common_stub ISR_NOERRCODE 22
ISR_NOERRCODE 23
isr5: ISR_NOERRCODE 24
cli ISR_NOERRCODE 25
push byte 0 ISR_NOERRCODE 26
push byte 5 ISR_NOERRCODE 27
jmp isr_common_stub ISR_NOERRCODE 28
ISR_NOERRCODE 29
isr6: ISR_NOERRCODE 30
cli ISR_NOERRCODE 31
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
extern fault_handler extern fault_handler
@@ -295,118 +125,31 @@ isr_common_stub:
add esp, 8 add esp, 8
iret iret
global irq0 %macro IRQ 2
global irq1 global irq%1
global irq2 irq%1:
global irq3 cli
global irq4 push byte 0
global irq5 push byte %2
global irq6 jmp irq_common_stub
global irq7 %endmacro
global irq8
global irq9
global irq10
global irq11
global irq12
global irq13
global irq14
global irq15
irq0: IRQ 0, 32
cli IRQ 1, 33
push byte 0 IRQ 2, 34
push byte 32 IRQ 3, 35
jmp irq_common_stub IRQ 4, 36
IRQ 5, 37
irq1: IRQ 6, 38
cli IRQ 7, 39
push byte 0 IRQ 8, 40
push byte 33 IRQ 9, 41
jmp irq_common_stub IRQ 10, 42
IRQ 11, 43
irq2: IRQ 12, 44
cli IRQ 13, 45
push byte 0 IRQ 14, 46
push byte 34 IRQ 15, 47
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
extern irq_handler extern irq_handler