summaryrefslogtreecommitdiff
path: root/arm9/asm/NNS_SND_main.s
blob: 4cbe3d65c95c9b8acf0c1b59efe5ed825f216f50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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