summaryrefslogtreecommitdiff
path: root/arm7/asm/SND_main.s
blob: 2353d2c20dfd597a9f5567e0e0a08f1d7c4d04c4 (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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
	.include "asm/macros.inc"
	.include "global.inc"

    .section .bss

	.global _03807A30
_03807A30: ;0x03807A30
	.space 0x03807A34 - 0x03807A30

	.global _03807A34
_03807A34: ;0x03807A34
	.space 0x03807A54 - 0x03807A34

	.global _03807A54
_03807A54: ;0x03807A54
	.space 0x03807A74 - 0x03807A54

	.global _03807A74
_03807A74: ;0x03807A74
	.space 0x03807AA0 - 0x03807A74

	.global _03807AA0
_03807AA0: ;0x03807AA0
	.space 0x03807F44 - 0x03807AA0

	.global _03807F44
_03807F44: ;0x03807F44
	.space 0x03807F48 - 0x03807F44

    .section .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