90 lines
986 B
ArmAsm
90 lines
986 B
ArmAsm
[BITS 32]
|
|
|
|
%include "base.inc"
|
|
|
|
%macro ISR_NO_ERR 1
|
|
global isr%1
|
|
isr%1:
|
|
cli
|
|
push byte 0
|
|
push byte %1
|
|
jmp isr_handler
|
|
%endmacro
|
|
|
|
%macro ISR_ERR 1
|
|
global isr%1
|
|
isr%1:
|
|
cli
|
|
push byte %1
|
|
jmp isr_handler
|
|
%endmacro
|
|
|
|
section .text
|
|
|
|
ISR_NO_ERR 0
|
|
ISR_NO_ERR 1
|
|
ISR_NO_ERR 2
|
|
ISR_NO_ERR 3
|
|
ISR_NO_ERR 4
|
|
ISR_NO_ERR 5
|
|
ISR_NO_ERR 6
|
|
ISR_NO_ERR 7
|
|
ISR_ERR 8
|
|
ISR_NO_ERR 9
|
|
ISR_ERR 10
|
|
ISR_ERR 11
|
|
ISR_ERR 12
|
|
ISR_ERR 13
|
|
ISR_ERR 14
|
|
ISR_NO_ERR 15
|
|
ISR_NO_ERR 16
|
|
ISR_NO_ERR 17
|
|
ISR_NO_ERR 18
|
|
ISR_NO_ERR 19
|
|
ISR_NO_ERR 20
|
|
ISR_NO_ERR 21
|
|
ISR_NO_ERR 22
|
|
ISR_NO_ERR 23
|
|
ISR_NO_ERR 24
|
|
ISR_NO_ERR 25
|
|
ISR_NO_ERR 26
|
|
ISR_NO_ERR 27
|
|
ISR_NO_ERR 28
|
|
ISR_NO_ERR 29
|
|
ISR_NO_ERR 30
|
|
ISR_NO_ERR 31
|
|
|
|
global isr_handler
|
|
isr_handler:
|
|
pusha
|
|
|
|
mov ax, ds
|
|
push eax
|
|
mov ax, 0x10
|
|
mov ds, ax
|
|
mov es, ax
|
|
mov fs, ax
|
|
mov gs, ax
|
|
|
|
LOG msg_interrupt
|
|
|
|
extern pic_eoi
|
|
call pic_eoi
|
|
|
|
pop eax
|
|
mov ds, ax
|
|
mov es, ax
|
|
mov fs, ax
|
|
mov gs, ax
|
|
|
|
popa
|
|
add esp, 8
|
|
|
|
sti
|
|
iret
|
|
|
|
section .rodata
|
|
|
|
msg_interrupt db "interrupt", 0
|
|
file db __FILE__, 0
|