summaryrefslogtreecommitdiff
path: root/arm9/asm/OS_irqTable.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm/OS_irqTable.s')
-rw-r--r--arm9/asm/OS_irqTable.s143
1 files changed, 143 insertions, 0 deletions
diff --git a/arm9/asm/OS_irqTable.s b/arm9/asm/OS_irqTable.s
new file mode 100644
index 00000000..9a484063
--- /dev/null
+++ b/arm9/asm/OS_irqTable.s
@@ -0,0 +1,143 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .dtcm
+ .balign 16, 0
+ .global OS_IRQTable
+OS_IRQTable: ; 027E0000 ;10b6a0
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OSi_IrqTimer0
+ .word OSi_IrqTimer1
+ .word OSi_IrqTimer2
+ .word OSi_IrqTimer3
+ .word OS_IrqDummy
+ .word OSi_IrqDma0
+ .word OSi_IrqDma1
+ .word OSi_IrqDma2
+ .word OSi_IrqDma3
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+ .word OS_IrqDummy
+
+ .section .text
+
+ arm_func_start OSi_IrqTimer3
+OSi_IrqTimer3: ; 0x020C9C8C
+ ldr ip, _020C9C98 ; =OSi_IrqCallback
+ mov r0, #0x7
+ bx r12
+ .balign 4
+_020C9C98: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqTimer2
+OSi_IrqTimer2: ; 0x020C9C9C
+ ldr ip, _020C9CA8 ; =OSi_IrqCallback
+ mov r0, #0x6
+ bx r12
+ .balign 4
+_020C9CA8: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqTimer1
+OSi_IrqTimer1: ; 0x020C9CAC
+ ldr ip, _020C9CB8 ; =OSi_IrqCallback
+ mov r0, #0x5
+ bx r12
+ .balign 4
+_020C9CB8: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqTimer0
+OSi_IrqTimer0: ; 0x020C9CBC
+ ldr ip, _020C9CC8 ; =OSi_IrqCallback
+ mov r0, #0x4
+ bx r12
+ .balign 4
+_020C9CC8: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqDma3
+OSi_IrqDma3: ; 0x020C9CCC
+ ldr ip, _020C9CD8 ; =OSi_IrqCallback
+ mov r0, #0x3
+ bx r12
+ .balign 4
+_020C9CD8: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqDma2
+OSi_IrqDma2: ; 0x020C9CDC
+ ldr ip, _020C9CE8 ; =OSi_IrqCallback
+ mov r0, #0x2
+ bx r12
+ .balign 4
+_020C9CE8: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqDma1
+OSi_IrqDma1: ; 0x020C9CEC
+ ldr ip, _020C9CF8 ; =OSi_IrqCallback
+ mov r0, #0x1
+ bx r12
+ .balign 4
+_020C9CF8: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqDma0
+OSi_IrqDma0: ; 0x020C9CFC
+ ldr ip, _020C9D08 ; =OSi_IrqCallback
+ mov r0, #0x0
+ bx r12
+ .balign 4
+_020C9D08: .word OSi_IrqCallback
+
+ arm_func_start OSi_IrqCallback
+OSi_IrqCallback: ; 0x020C9D0C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r1, #0xc
+ mul r4, r0, r1
+ ldr r2, _020C9D94 ; =OSi_IrqCallbackInfo
+ ldr r3, _020C9D98 ; =0x02106818
+ mov r0, r0, lsl #0x1
+ ldr r1, [r2, r4]
+ ldrh r3, [r3, r0]
+ mov r5, #0x1
+ mov r0, #0x0
+ str r0, [r2, r4]
+ cmp r1, #0x0
+ mov r5, r5, lsl r3
+ beq _020C9D54
+ ldr r0, _020C9D9C ; =0x021D3424
+ ldr r0, [r0, r4]
+ blx r1
+_020C9D54:
+ ldr r0, _020C9DA0 ; =0x027E0000
+ ldr r1, _020C9DA4 ; =0x021D3420
+ add r0, r0, #0x3000
+ ldr r2, [r0, #0xff8]
+ orr r2, r2, r5
+ str r2, [r0, #0xff8]
+ ldr r0, [r1, r4]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ mov r0, r5
+ bl OS_DisableIrqMask
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020C9D94: .word OSi_IrqCallbackInfo
+_020C9D98: .word OSi_IrqCallbackInfoIndex
+_020C9D9C: .word OSi_IrqCallbackInfo + 8
+_020C9DA0: .word SDK_AUTOLOAD_DTCM_START
+_020C9DA4: .word OSi_IrqCallbackInfo + 4
+
+ arm_func_start OS_IrqDummy
+OS_IrqDummy: ; 0x020C9DA8
+ bx lr