diff options
Diffstat (limited to 'arm7/asm/SND_alarm.s')
-rw-r--r-- | arm7/asm/SND_alarm.s | 138 |
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 |