summaryrefslogtreecommitdiff
path: root/arm7/asm/OS_interrupt.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm7/asm/OS_interrupt.s')
-rw-r--r--arm7/asm/OS_interrupt.s155
1 files changed, 155 insertions, 0 deletions
diff --git a/arm7/asm/OS_interrupt.s b/arm7/asm/OS_interrupt.s
new file mode 100644
index 00000000..48fc9d1b
--- /dev/null
+++ b/arm7/asm/OS_interrupt.s
@@ -0,0 +1,155 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start OS_ResetRequestIrqMask
+OS_ResetRequestIrqMask: ; 0x037F8824
+ ldr ip, _037F8850 ; =0x04000208
+ ldrh r3, [ip]
+ mov r1, #0
+ strh r1, [ip]
+ ldr r2, _037F8854 ; =0x04000214
+ ldr r1, [r2]
+ str r0, [r2]
+ ldrh r0, [ip]
+ strh r3, [ip]
+ mov r0, r1
+ bx lr
+_037F8850: .word 0x04000208
+_037F8854: .word 0x04000214
+
+ arm_func_start OS_DisableIrqMask
+OS_DisableIrqMask: ; 0x037F8858
+ ldr ip, _037F888C ; =0x04000208
+ ldrh r3, [ip]
+ mov r1, #0
+ strh r1, [ip]
+ ldr r2, _037F8890 ; =0x04000210
+ ldr r1, [r2]
+ mvn r0, r0
+ and r0, r1, r0
+ str r0, [r2]
+ ldrh r0, [ip]
+ strh r3, [ip]
+ mov r0, r1
+ bx lr
+_037F888C: .word 0x04000208
+_037F8890: .word 0x04000210
+
+ arm_func_start OS_EnableIrqMask
+OS_EnableIrqMask: ; 0x037F8894
+ ldr ip, _037F88C4 ; =0x04000208
+ ldrh r3, [ip]
+ mov r1, #0
+ strh r1, [ip]
+ ldr r2, _037F88C8 ; =0x04000210
+ ldr r1, [r2]
+ orr r0, r1, r0
+ str r0, [r2]
+ ldrh r0, [ip]
+ strh r3, [ip]
+ mov r0, r1
+ bx lr
+_037F88C4: .word 0x04000208
+_037F88C8: .word 0x04000210
+
+ arm_func_start OS_SetIrqMask
+OS_SetIrqMask: ; 0x037F88CC
+ ldr ip, _037F88F8 ; =0x04000208
+ ldrh r3, [ip]
+ mov r1, #0
+ strh r1, [ip]
+ ldr r2, _037F88FC ; =0x04000210
+ ldr r1, [r2]
+ str r0, [r2]
+ ldrh r0, [ip]
+ strh r3, [ip]
+ mov r0, r1
+ bx lr
+_037F88F8: .word 0x04000208
+_037F88FC: .word 0x04000210
+
+ arm_func_start OSi_EnterTimerCallback
+OSi_EnterTimerCallback: ; 0x037F8900
+ stmdb sp!, {r4, lr}
+ mov r3, #12
+ mul r4, r0, r3
+ ldr r3, _037F8940 ; =_03807744
+ str r1, [r3, r4]
+ ldr r1, _037F8944 ; =_0380774C
+ str r2, [r1, r4]
+ mov r1, #1
+ add r0, r0, #3
+ mov r0, r1, lsl r0
+ bl OS_EnableIrqMask
+ mov r1, #1
+ ldr r0, _037F8948 ; =_03807748
+ str r1, [r0, r4]
+ ldmia sp!, {r4, lr}
+ bx lr
+_037F8940: .word _03807744
+_037F8944: .word _0380774C
+_037F8948: .word _03807748
+
+ arm_func_start OS_SetIrqFunction
+OS_SetIrqFunction: ; 0x037F894C
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r9, #0
+ mov r7, r9
+ ldr lr, _037F89E8 ; =OS_IRQTable
+ ldr r4, _037F89EC ; =_03807774
+ ldr r6, _037F89F0 ; =OSi_IrqCallbackInfo
+ mov ip, r9
+ mov r3, #1
+ mov r2, #12
+_037F8974:
+ ands r5, r0, #1
+ beq _037F89CC
+ mov r8, r7
+ cmp r9, #8
+ blt _037F8998
+ cmp r9, #11
+ suble r5, r9, #8
+ mlale r8, r5, r2, r6
+ ble _037F89BC
+_037F8998:
+ cmp r9, #3
+ blt _037F89B0
+ cmp r9, #6
+ addle r5, r9, #1
+ mlale r8, r5, r2, r6
+ ble _037F89BC
+_037F89B0:
+ cmp r9, #0
+ moveq r8, r4
+ strne r1, [lr, r9, lsl #2]
+_037F89BC:
+ cmp r8, #0
+ strne r1, [r8]
+ strne ip, [r8, #8]
+ strne r3, [r8, #4]
+_037F89CC:
+ mov r0, r0, lsr #1
+ add r9, r9, #1
+ cmp r9, #25
+ blt _037F8974
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037F89E8: .word OS_IRQTable
+_037F89EC: .word _03807774
+_037F89F0: .word OSi_IrqCallbackInfo
+
+ arm_func_start OS_InitIrqTable
+OS_InitIrqTable: ; 0x037F89F4
+ mov r1, #0
+ ldr r0, _037F8A10 ; =OSi_IrqThreadQueue
+ str r1, [r0, #4]
+ str r1, [r0]
+ ldr r0, _037F8A14 ; =0x027FFC3C
+ str r1, [r0]
+ bx lr
+_037F8A10: .word OSi_IrqThreadQueue
+_037F8A14: .word 0x027FFC3C