mirror of
https://github.com/gbowne1/ClassicOS.git
synced 2025-05-15 09:01:27 -07:00
81 lines
1.4 KiB
NASM
81 lines
1.4 KiB
NASM
[BITS 32]
|
||
[GLOBAL isr0, isr1, isr2, isr3, isr4, isr5, isr6, isr7, isr8, isr9]
|
||
[GLOBAL isr10, isr11, isr12, isr13, isr14, isr15, isr16, isr17, isr18, isr19]
|
||
[GLOBAL isr20, isr21, isr22, isr23, isr24, isr25, isr26, isr27, isr28, isr29]
|
||
[GLOBAL isr30, isr31, isr_default]
|
||
|
||
[EXTERN isr_handler]
|
||
|
||
%macro ISR_NOERR 1
|
||
isr%1:
|
||
cli
|
||
push dword 0 ; Dummy error code
|
||
push dword %1 ; Interrupt number
|
||
call isr_handler
|
||
add esp, 8
|
||
sti
|
||
iret
|
||
%endmacro
|
||
|
||
%macro ISR_ERR 1
|
||
isr%1:
|
||
cli
|
||
push dword %1 ; Interrupt number
|
||
call isr_handler
|
||
add esp, 8
|
||
sti
|
||
iret
|
||
%endmacro
|
||
|
||
; ISR 0–7: No error code
|
||
ISR_NOERR 0
|
||
ISR_NOERR 1
|
||
ISR_NOERR 2
|
||
ISR_NOERR 3
|
||
ISR_NOERR 4
|
||
ISR_NOERR 5
|
||
ISR_NOERR 6
|
||
ISR_NOERR 7
|
||
|
||
; ISR 8–14: Error code pushed automatically
|
||
ISR_ERR 8
|
||
ISR_NOERR 9 ; Coprocessor Segment Overrun (obsolete, no error code)
|
||
ISR_ERR 10
|
||
ISR_ERR 11
|
||
ISR_ERR 12
|
||
ISR_ERR 13
|
||
ISR_ERR 14
|
||
|
||
; ISR 15 is reserved
|
||
ISR_NOERR 15
|
||
|
||
; ISR 16–19 (FPU, Alignment Check, etc.)
|
||
ISR_NOERR 16
|
||
ISR_ERR 17
|
||
ISR_NOERR 18
|
||
ISR_NOERR 19
|
||
|
||
; ISR 20–31 (reserved or future use)
|
||
ISR_NOERR 20
|
||
ISR_NOERR 21
|
||
ISR_NOERR 22
|
||
ISR_NOERR 23
|
||
ISR_NOERR 24
|
||
ISR_NOERR 25
|
||
ISR_NOERR 26
|
||
ISR_NOERR 27
|
||
ISR_NOERR 28
|
||
ISR_NOERR 29
|
||
ISR_NOERR 30
|
||
ISR_NOERR 31
|
||
|
||
; Fallback handler
|
||
isr_default:
|
||
cli
|
||
push dword 255
|
||
push dword 0
|
||
call isr_handler
|
||
add esp, 8
|
||
sti
|
||
iret
|