summaryrefslogtreecommitdiff
path: root/arm7/asm/SND_alarm.s
diff options
context:
space:
mode:
Diffstat (limited to 'arm7/asm/SND_alarm.s')
-rw-r--r--arm7/asm/SND_alarm.s138
1 files changed, 138 insertions, 0 deletions
diff --git a/arm7/asm/SND_alarm.s b/arm7/asm/SND_alarm.s
new file mode 100644
index 00000000..9a582901
--- /dev/null
+++ b/arm7/asm/SND_alarm.s
@@ -0,0 +1,138 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start AlarmHandler
+AlarmHandler: ; 0x037FF524
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, #7
+ mov r4, #0
+_037FF534:
+ mov r0, r5
+ mov r1, r6
+ mov r2, r4
+ bl PXI_SendWordByFifo
+ cmp r0, #0
+ blt _037FF534
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start SND_StopAlarm
+SND_StopAlarm: ; 0x037FF554
+ stmdb sp!, {r4, lr}
+ ldr r1, _037FF590 ; =_03808EEC
+ add r4, r1, r0, lsl #6
+ ldrb r0, [r1, r0, lsl #6]
+ cmp r0, #0
+ beq _037FF588
+ add r0, r4, #20
+ bl OS_CancelAlarm
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ mov r0, #0
+ strb r0, [r4]
+_037FF588:
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FF590: .word _03808EEC
+
+ arm_func_start SND_StartAlarm
+SND_StartAlarm: ; 0x037FF594
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #12
+ mov r4, r0
+ ldr r0, _037FF654 ; =_03808EEC
+ add r5, r0, r4, lsl #6
+ ldrb r0, [r0, r4, lsl #6]
+ cmp r0, #0
+ beq _037FF5C4
+ add r0, r5, #20
+ bl OS_CancelAlarm
+ mov r0, #0
+ strb r0, [r5]
+_037FF5C4:
+ ldr r9, [r5, #4]
+ ldr r8, [r5, #8]
+ ldr r7, [r5, #12]
+ ldr r6, [r5, #16]
+ ldrb r0, [r5, #1]
+ orr r4, r4, r0, lsl #8
+ add r0, r5, #20
+ bl OS_CreateAlarm
+ mov r0, #0
+ cmp r6, r0
+ cmpeq r7, r0
+ bne _037FF610
+ str r4, [sp]
+ add r0, r5, #20
+ mov r1, r9
+ mov r2, r8
+ ldr r3, _037FF658 ; =AlarmHandler
+ bl OS_SetAlarm
+ b _037FF640
+_037FF610:
+ bl OS_GetTick
+ mov r2, r0
+ ldr r0, _037FF658 ; =AlarmHandler
+ str r0, [sp, #4]
+ str r4, [sp, #8]
+ mov r3, r7
+ str r6, [sp]
+ add r0, r5, #20
+ adds r4, r9, r2
+ adc r2, r8, r1
+ mov r1, r4
+ bl OS_SetPeriodicAlarm
+_037FF640:
+ mov r0, #1
+ strb r0, [r5]
+ add sp, sp, #12
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037FF654: .word _03808EEC
+_037FF658: .word AlarmHandler
+
+ arm_func_start SND_SetupAlarm
+SND_SetupAlarm: ; 0x037FF65C
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ ldr r5, [sp, #24]
+ ldr r1, _037FF6B4 ; =_03808EEC
+ add r4, r1, r0, lsl #6
+ ldrb r0, [r1, r0, lsl #6]
+ cmp r0, #0
+ beq _037FF694
+ add r0, r4, #20
+ bl OS_CancelAlarm
+ mov r0, #0
+ strb r0, [r4]
+_037FF694:
+ str r8, [r4, #4]
+ str r7, [r4, #8]
+ str r6, [r4, #12]
+ str r5, [r4, #16]
+ ldr r0, [sp, #28]
+ strb r0, [r4, #1]
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037FF6B4: .word _03808EEC
+
+ arm_func_start SND_AlarmInit
+SND_AlarmInit: ; 0x037FF6B8
+ mov r3, #0
+ mov r2, r3
+ ldr r1, _037FF6E0 ; =SNDi_Work
+_037FF6C4:
+ add r0, r1, r3, lsl #6
+ strb r2, [r0, #3968] ; 0xf80
+ strb r2, [r0, #3969] ; 0xf81
+ add r3, r3, #1
+ cmp r3, #8
+ blt _037FF6C4
+ bx lr
+_037FF6E0: .word SNDi_Work