forked from PoliEcho-holding-org/kern
* We did loose tasking and only have a paging skeleton, but hey it took like 4 months so i'm happy that there's something :p
130 lines
1.8 KiB
ArmAsm
130 lines
1.8 KiB
ArmAsm
[bits 64]
|
|
|
|
[section .text]
|
|
isr_common:
|
|
push rax
|
|
push rbx
|
|
push rcx
|
|
push rdx
|
|
push rsi
|
|
push rdi
|
|
push rbp
|
|
push r8
|
|
push r9
|
|
push r10
|
|
push r11
|
|
push r12
|
|
push r13
|
|
push r14
|
|
push r15
|
|
mov rbp, ds
|
|
push rbp
|
|
|
|
mov rdi, rsp
|
|
|
|
[extern isr_handle_interrupt]
|
|
call isr_handle_interrupt
|
|
|
|
[global isr_return]
|
|
isr_return:
|
|
pop rbp
|
|
pop r15
|
|
pop r14
|
|
pop r13
|
|
pop r12
|
|
pop r11
|
|
pop r10
|
|
pop r9
|
|
pop r8
|
|
pop rbp
|
|
pop rdi
|
|
pop rsi
|
|
pop rdx
|
|
pop rcx
|
|
pop rbx
|
|
pop rax
|
|
|
|
add rsp, 16 ; Pop errno and int number
|
|
iretq
|
|
|
|
%macro ISR_WITH_ERRNO 1
|
|
[global isr%1]
|
|
isr%1:
|
|
push %1
|
|
jmp isr_common
|
|
%endmacro
|
|
|
|
%macro ISR_WITHOUT_ERRNO 1
|
|
[global isr%1]
|
|
isr%1:
|
|
push 0
|
|
push %1
|
|
jmp isr_common
|
|
%endmacro
|
|
|
|
;; Exceptions
|
|
ISR_WITHOUT_ERRNO 0
|
|
ISR_WITHOUT_ERRNO 1
|
|
ISR_WITHOUT_ERRNO 2
|
|
ISR_WITHOUT_ERRNO 3
|
|
ISR_WITHOUT_ERRNO 4
|
|
ISR_WITHOUT_ERRNO 5
|
|
ISR_WITHOUT_ERRNO 6
|
|
ISR_WITHOUT_ERRNO 7
|
|
ISR_WITH_ERRNO 8
|
|
ISR_WITHOUT_ERRNO 9
|
|
ISR_WITH_ERRNO 10
|
|
ISR_WITH_ERRNO 11
|
|
ISR_WITH_ERRNO 12
|
|
ISR_WITH_ERRNO 13
|
|
ISR_WITH_ERRNO 14
|
|
ISR_WITHOUT_ERRNO 15
|
|
ISR_WITHOUT_ERRNO 16
|
|
ISR_WITHOUT_ERRNO 17
|
|
ISR_WITHOUT_ERRNO 18
|
|
ISR_WITHOUT_ERRNO 19
|
|
ISR_WITHOUT_ERRNO 20
|
|
ISR_WITHOUT_ERRNO 21
|
|
ISR_WITHOUT_ERRNO 22
|
|
ISR_WITHOUT_ERRNO 23
|
|
ISR_WITHOUT_ERRNO 24
|
|
ISR_WITHOUT_ERRNO 25
|
|
ISR_WITHOUT_ERRNO 26
|
|
ISR_WITHOUT_ERRNO 27
|
|
ISR_WITHOUT_ERRNO 28
|
|
ISR_WITHOUT_ERRNO 29
|
|
ISR_WITHOUT_ERRNO 30
|
|
ISR_WITHOUT_ERRNO 31
|
|
|
|
;; IRQs
|
|
ISR_WITHOUT_ERRNO 32
|
|
ISR_WITHOUT_ERRNO 33
|
|
ISR_WITHOUT_ERRNO 34
|
|
ISR_WITHOUT_ERRNO 35
|
|
ISR_WITHOUT_ERRNO 36
|
|
ISR_WITHOUT_ERRNO 37
|
|
ISR_WITHOUT_ERRNO 38
|
|
ISR_WITHOUT_ERRNO 39
|
|
ISR_WITHOUT_ERRNO 40
|
|
ISR_WITHOUT_ERRNO 41
|
|
ISR_WITHOUT_ERRNO 42
|
|
ISR_WITHOUT_ERRNO 43
|
|
ISR_WITHOUT_ERRNO 44
|
|
ISR_WITHOUT_ERRNO 45
|
|
ISR_WITHOUT_ERRNO 46
|
|
ISR_WITHOUT_ERRNO 47
|
|
|
|
; Syscall
|
|
ISR_WITHOUT_ERRNO 128
|
|
ISR_WITHOUT_ERRNO 255
|
|
|
|
[section .data]
|
|
[global isr_redirect_table]
|
|
isr_redirect_table:
|
|
%assign i 0
|
|
%rep 48
|
|
dq isr%+i
|
|
%assign i i+1
|
|
%endrep
|
|
|