diff options
Diffstat (limited to 'arm7/asm/SND_main.s')
-rw-r--r-- | arm7/asm/SND_main.s | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/arm7/asm/SND_main.s b/arm7/asm/SND_main.s new file mode 100644 index 00000000..4182b325 --- /dev/null +++ b/arm7/asm/SND_main.s @@ -0,0 +1,171 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start SndThread +SndThread: ; 0x037FC2B0 + stmdb sp!, {r4, r5, r6, lr} + bl SND_InitIntervalTimer + bl SND_ExChannelInit + bl SND_SeqInit + bl SND_AlarmInit + bl SND_Enable + mov r0, #0 + mov r1, r0 + mov r2, r0 + mov r3, r0 + bl SND_SetOutputSelector + mov r0, #127 ; 0x7f + bl SND_SetMasterVolume + bl SND_StartIntervalTimer + mov r4, #1 + mov r5, #0 +_037FC2F0: + mov r6, r5 + bl SND_WaitForIntervalTimer + cmp r0, #1 + beq _037FC308 + cmp r0, #2 + b _037FC30C +_037FC308: + mov r6, r4 +_037FC30C: + bl SND_UpdateExChannel + bl SND_CommandProc + mov r0, r6 + bl SND_SeqMain + mov r0, r6 + bl SND_ExChannelMain + bl SND_UpdateSharedWork + bl SND_CalcRandom + b _037FC2F0 +_037FC330: + ldr r0, _037FC344 ; =_03807A54 + mov r1, #1 + mov r2, #0 + ldr ip, _037FC348 ; =OS_SendMessage + bx ip +_037FC344: .word _03807A54 +_037FC348: .word OS_SendMessage + + arm_func_start SNDi_UnlockMutex +SNDi_UnlockMutex: ; 0x037FC34C + bx lr + + arm_func_start SNDi_LockMutex +SNDi_LockMutex: ; 0x037FC350 + bx lr + + arm_func_start SND_SendWakeupMessage +SND_SendWakeupMessage: ; 0x037FC354 + ldr r0, _037FC368 ; =_03807A54 + mov r1, #2 + mov r2, #0 + ldr ip, _037FC36C ; =OS_SendMessage + bx ip +_037FC368: .word _03807A54 +_037FC36C: .word OS_SendMessage + + arm_func_start SND_WaitForIntervalTimer +SND_WaitForIntervalTimer: ; 0x037FC370 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r0, _037FC398 ; =_03807A54 + add r1, sp, #0 + mov r2, #1 + bl OS_ReceiveMessage + ldr r0, [sp] + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_037FC398: .word _03807A54 + + arm_func_start SND_StopIntervalTimer +SND_StopIntervalTimer: ; 0x037FC39C + ldr r0, _037FC3A8 ; =_03807A74 + ldr ip, _037FC3AC ; =OS_CancelAlarm + bx ip +_037FC3A8: .word _03807A74 +_037FC3AC: .word OS_CancelAlarm + + arm_func_start SND_StartIntervalTimer +SND_StartIntervalTimer: ; 0x037FC3B0 + stmfd sp!, {lr} + sub sp, sp, #12 + bl OS_GetTick + mov ip, r0 + ldr r0, _037FC3FC ; =_037FC330 + str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #8] + ldr r3, _037FC400 ; =0x00000AA8 + str r0, [sp] + ldr r0, _037FC404 ; =_03807A74 + mov r2, #65536 ; 0x10000 + adds ip, ip, r2 + adc r2, r1, #0 + mov r1, ip + bl OS_SetPeriodicAlarm + add sp, sp, #12 + ldmia sp!, {lr} + bx lr +_037FC3FC: .word _037FC330 +_037FC400: .word 0x00000AA8 +_037FC404: .word _03807A74 + + arm_func_start SND_InitIntervalTimer +SND_InitIntervalTimer: ; 0x037FC408 + stmfd sp!, {lr} + sub sp, sp, #4 + ldr r0, _037FC434 ; =_03807A54 + ldr r1, _037FC438 ; =_03807A34 + mov r2, #8 + bl OS_InitMessageQueue + ldr r0, _037FC43C ; =_03807A74 + bl OS_CreateAlarm + add sp, sp, #4 + ldmia sp!, {lr} + bx lr +_037FC434: .word _03807A54 +_037FC438: .word _03807A34 +_037FC43C: .word _03807A74 + + arm_func_start SND_CreateThread +SND_CreateThread: ; 0x037FC440 + stmfd sp!, {lr} + sub sp, sp, #12 + mov r1, #1024 ; 0x400 + str r1, [sp] + str r0, [sp, #4] + ldr r0, _037FC47C ; =_03807AA0 + ldr r1, _037FC480 ; =SndThread + mov r2, #0 + ldr r3, _037FC484 ; =_03807F44 + bl OS_CreateThread + ldr r0, _037FC47C ; =_03807AA0 + bl OS_WakeupThreadDirect + add sp, sp, #12 + ldmia sp!, {lr} + bx lr +_037FC47C: .word _03807AA0 +_037FC480: .word SndThread +_037FC484: .word _03807F44 + + arm_func_start SND_Init +SND_Init: ; 0x037FC488 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, _037FC4BC ; =_03807A30 + ldr r1, [r0] + cmp r1, #0 + bne _037FC4B4 + mov r1, #1 + str r1, [r0] + bl SND_CommandInit + mov r0, r4 + bl SND_CreateThread +_037FC4B4: + ldmia sp!, {r4, lr} + bx lr +_037FC4BC: .word _03807A30 |