diff options
Diffstat (limited to 'arm9/asm/NNS_SND_main.s')
-rw-r--r-- | arm9/asm/NNS_SND_main.s | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/arm9/asm/NNS_SND_main.s b/arm9/asm/NNS_SND_main.s new file mode 100644 index 00000000..4cbe3d65 --- /dev/null +++ b/arm9/asm/NNS_SND_main.s @@ -0,0 +1,125 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global sCurDriverInfo +sCurDriverInfo: ; 0x021D1C8C + .space 0x4 + + .global sDriverInfoFirstFlag +sDriverInfoFirstFlag: ; 0x021D1C90 + .space 0x4 + + .global initialized$8127 +initialized$8127: ; 0x021D1C94 + .space 0x4 + + .global sPreSleepCallback +sPreSleepCallback: ; 0x021D1C98 + .space 0xc + + .global sPostSleepCallback +sPostSleepCallback: ; 0x021D1CA4 + .space 0xc + + .section .text + + local_arm_func_start EndSleep +EndSleep: ; 0x020C0130 + ldr ip, _020C0138 ; =NNSi_SndCaptureEndSleep + bx r12 + .balign 4 +_020C0138: .word NNSi_SndCaptureEndSleep + + local_arm_func_start BeginSleep +BeginSleep: ; 0x020C013C + stmdb sp!, {r4,lr} + bl NNSi_SndCaptureBeginSleep + mov r0, #0x0 + mov r1, r0 + mov r2, r0 + mov r3, r0 + bl SND_StopTimer + bl SND_GetCurrentCommandTag + mov r4, r0 + mov r0, #0x1 + bl SND_FlushCommand + mov r0, r4 + bl SND_WaitForCommandProc + ldmia sp!, {r4,pc} + + arm_func_start NNS_SndSetMonoFlag +NNS_SndSetMonoFlag: ; 0x020C0174 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + beq _020C0194 + mov r0, #0x40 + bl SND_SetMasterPan + add sp, sp, #0x4 + ldmia sp!, {pc} +_020C0194: + bl SND_ResetMasterPan + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndMain +NNS_SndMain: ; 0x020C01A0 + stmdb sp!, {r4,lr} + mov r4, #0x0 +_020C01A8: + mov r0, r4 + bl SND_RecvCommandReply + cmp r0, #0x0 + bne _020C01A8 + bl NNSi_SndPlayerMain + bl NNSi_SndCaptureMain + bl NNSi_SndArcStrmMain + mov r0, #0x0 + bl SND_FlushCommand + ldmia sp!, {r4,pc} + + arm_func_start NNS_SndInit +NNS_SndInit: ; 0x020C01D0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C0254 ; =initialized$8127 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {pc} + mov r1, #0x1 + str r1, [r0, #0x0] + bl SND_Init + ldr ip, _020C0258 ; =BeginSleep + ldr r0, _020C025C ; =sPreSleepCallback + mov r3, #0x0 + ldr r1, _020C0260 ; =sPostSleepCallback + ldr r2, _020C0264 ; =EndSleep + str r12, [r0, #0x0] + str r3, [r0, #0x4] + str r2, [r1, #0x0] + str r3, [r1, #0x4] + bl PM_PrependPreSleepCallback + ldr r0, _020C0260 ; =sPostSleepCallback + bl PM_AppendPostSleepCallback + bl NNSi_SndInitResourceMgr + bl NNSi_SndCaptureInit + bl NNSi_SndPlayerInit + ldr r1, _020C0268 ; =sCurDriverInfo + mvn r3, #0x0 + ldr r0, _020C026C ; =sDriverInfoFirstFlag + mov r2, #0x1 + strb r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020C0254: .word initialized$8127 +_020C0258: .word BeginSleep +_020C025C: .word sPreSleepCallback +_020C0260: .word sPostSleepCallback +_020C0264: .word EndSleep +_020C0268: .word sCurDriverInfo +_020C026C: .word sDriverInfoFirstFlag |