[isrs] Use macros in ASM

This commit is contained in:
Kevin Lange 2011-01-18 14:52:08 -06:00
parent c4b54ed3b7
commit 3e9f4d65a7
2 changed files with 71 additions and 359 deletions

Binary file not shown.

430
start.asm
View File

@ -43,256 +43,55 @@ idt_load:
ret ret
; Interrupt Service Routines ; Interrupt Service Routines
global _isr0 %macro ISR_NOERR 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
; 0: Divide By Zero Exception %macro ISR_ERR 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
; 1: Debug Exception ISR_NOERR 0
_isr1: ISR_NOERR 1
cli ISR_NOERR 2
push byte 0 ISR_NOERR 3
push byte 1 ISR_NOERR 4
jmp isr_common_stub ISR_NOERR 5
ISR_NOERR 6
; 2: Non Maskable Interrupt Exception ISR_NOERR 7
_isr2: ISR_ERR 8
cli ISR_NOERR 9
push byte 0 ISR_ERR 10
push byte 2 ISR_ERR 11
jmp isr_common_stub ISR_ERR 12
ISR_ERR 13
; 3: Int 3 Exception ISR_ERR 14
_isr3: ISR_NOERR 15
cli ISR_NOERR 16
push byte 0 ISR_NOERR 17
push byte 3 ISR_NOERR 18
jmp isr_common_stub ISR_NOERR 19
ISR_NOERR 20
; 4: INTO Exception ISR_NOERR 21
_isr4: ISR_NOERR 22
cli ISR_NOERR 23
push byte 0 ISR_NOERR 24
push byte 4 ISR_NOERR 25
jmp isr_common_stub ISR_NOERR 26
ISR_NOERR 27
; 5: Out of Bounds Exception ISR_NOERR 28
_isr5: ISR_NOERR 29
cli ISR_NOERR 30
push byte 0 ISR_NOERR 31
push byte 5
jmp isr_common_stub
; 6: Invalid Opcode Exception
_isr6:
cli
push byte 0
push byte 6
jmp isr_common_stub
; 7: Coprocessor Not Available Exception
_isr7:
cli
push byte 0
push byte 7
jmp isr_common_stub
; 8: Double Fault Exception (With Error Code!)
_isr8:
cli
push byte 8
jmp isr_common_stub
; 9: Coprocessor Segment Overrun Exception
_isr9:
cli
push byte 0
push byte 9
jmp isr_common_stub
; 10: Bad TSS Exception (With Error Code!)
_isr10:
cli
push byte 10
jmp isr_common_stub
; 11: Segment Not Present Exception (With Error Code!)
_isr11:
cli
push byte 11
jmp isr_common_stub
; 12: Stack Fault Exception (With Error Code!)
_isr12:
cli
push byte 12
jmp isr_common_stub
; 13: General Protection Fault Exception (With Error Code!)
_isr13:
cli
push byte 13
jmp isr_common_stub
; 14: Page Fault Exception (With Error Code!)
_isr14:
cli
push byte 14
jmp isr_common_stub
; 15: Reserved Exception
_isr15:
cli
push byte 0
push byte 15
jmp isr_common_stub
; 16: Floating Point Exception
_isr16:
cli
push byte 0
push byte 16
jmp isr_common_stub
; 17: Alignment Check Exception
_isr17:
cli
push byte 0
push byte 17
jmp isr_common_stub
; 18: Machine Check Exception
_isr18:
cli
push byte 0
push byte 18
jmp isr_common_stub
; 19: Reserved
_isr19:
cli
push byte 0
push byte 19
jmp isr_common_stub
; 20: Reserved
_isr20:
cli
push byte 0
push byte 20
jmp isr_common_stub
; 21: Reserved
_isr21:
cli
push byte 0
push byte 21
jmp isr_common_stub
; 22: Reserved
_isr22:
cli
push byte 0
push byte 22
jmp isr_common_stub
; 23: Reserved
_isr23:
cli
push byte 0
push byte 23
jmp isr_common_stub
; 24: Reserved
_isr24:
cli
push byte 0
push byte 24
jmp isr_common_stub
; 25: Reserved
_isr25:
cli
push byte 0
push byte 25
jmp isr_common_stub
; 26: Reserved
_isr26:
cli
push byte 0
push byte 26
jmp isr_common_stub
; 27: Reserved
_isr27:
cli
push byte 0
push byte 27
jmp isr_common_stub
; 28: Reserved
_isr28:
cli
push byte 0
push byte 28
jmp isr_common_stub
; 29: Reserved
_isr29:
cli
push byte 0
push byte 29
jmp isr_common_stub
; 30: Reserved
_isr30:
cli
push byte 0
push byte 30
jmp isr_common_stub
; 31: Reserved
_isr31:
cli
push byte 0
push byte 31
jmp isr_common_stub
extern fault_handler extern fault_handler
@ -320,118 +119,31 @@ isr_common_stub:
add esp, 8 add esp, 8
iret iret
global _irq0 %macro IRQ_ENTRY 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_ENTRY 0, 32
cli IRQ_ENTRY 1, 33
push byte 0 IRQ_ENTRY 2, 34
push byte 32 IRQ_ENTRY 3, 35
jmp irq_common_stub IRQ_ENTRY 4, 36
IRQ_ENTRY 5, 37
_irq1: IRQ_ENTRY 6, 38
cli IRQ_ENTRY 7, 39
push byte 0 IRQ_ENTRY 8, 40
push byte 33 IRQ_ENTRY 9, 41
jmp irq_common_stub IRQ_ENTRY 10, 42
IRQ_ENTRY 11, 43
_irq2: IRQ_ENTRY 12, 44
cli IRQ_ENTRY 13, 45
push byte 0 IRQ_ENTRY 14, 46
push byte 34 IRQ_ENTRY 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