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
198
199
200
201
202
203
204
205
206
207
208
|
.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start FUN_037FC530
FUN_037FC530: ; 0x037FC530
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r5, r1
add r0, r6, #40 ; 0x28
bl SND_GetLfoValue
mov r4, r0
mov ip, r0, asr #31
mov r3, #0
cmp ip, r3
cmpeq r0, r3
beq _037FC5B0
ldrb r1, [r6, #40] ; 0x28
cmp r1, #0
beq _037FC59C
cmp r1, #1
beq _037FC584
cmp r1, #2
moveq ip, ip, lsl #6
orreq ip, ip, r0, lsr #26
moveq r4, r0, lsl #6
b _037FC5A8
_037FC584:
mov r2, #60 ; 0x3c
umull r4, r1, r0, r2
mla r1, r0, r3, r1
mla r1, ip, r2, r1
mov ip, r1
b _037FC5A8
_037FC59C:
mov ip, ip, lsl #6
orr ip, ip, r0, lsr #26
mov r4, r0, lsl #6
_037FC5A8:
mov r4, r4, lsr #14
orr r4, r4, ip, lsl #18
_037FC5B0:
cmp r5, #0
beq _037FC5C0
add r0, r6, #40 ; 0x28
bl SND_UpdateLfo
_037FC5C0:
mov r0, r4
ldmia sp!, {r4, r5, r6, lr}
bx lr
arm_func_start FUN_037FC5CC
FUN_037FC5CC: ; 0x037FC5CC
stmdb sp!, {r4, r5, lr}
sub sp, sp, #4
mov r4, r0
mov r5, r1
ldrsh r3, [r4, #50] ; 0x32
cmp r3, #0
moveq r0, #0
beq _037FC630
ldr r0, [r4, #20]
ldr r2, [r4, #24]
cmp r0, r2
movge r0, #0
bge _037FC630
sub r0, r2, r0
smull r0, r1, r3, r0
mov r3, r2, asr #31
bl _ll_sdiv
cmp r5, #0
beq _037FC630
ldrb r1, [r4, #3]
mov r1, r1, lsl #29
movs r1, r1, lsr #31
ldrne r1, [r4, #20]
addne r1, r1, #1
strne r1, [r4, #20]
_037FC630:
add sp, sp, #4
ldmia sp!, {r4, r5, lr}
bx lr
arm_func_start FUN_037FC63C
FUN_037FC63C: ; 0x037FC63C
stmfd sp!, {lr}
sub sp, sp, #4
ldrh lr, [r0, #36] ; 0x24
and r2, lr, #255 ; 0xff
ldrh ip, [r1, #36] ; 0x24
and r0, ip, #255 ; 0xff
mov r2, r2, lsl #4
mov r3, r0, lsl #4
ldr r1, _037FC698 ; =_03807294
ldrb r0, [r1, lr, asr #8]
mov r2, r2, asr r0
ldrb r0, [r1, ip, asr #8]
mov r0, r3, asr r0
cmp r2, r0
beq _037FC688
cmp r2, r0
movlt r0, #1
mvnge r0, #0
b _037FC68C
_037FC688:
mov r0, #0
_037FC68C:
add sp, sp, #4
ldmia sp!, {lr}
bx lr
_037FC698: .word _03807294
arm_func_start FUN_037FC69C
FUN_037FC69C: ; 0x037FC69C
stmdb sp!, {r4, lr}
mov r4, r0
ldr r0, _037FC6E4 ; =0xFFFE9680
str r0, [r4, #16]
mov r0, #0
strb r0, [r4, #2]
str r1, [r4, #52] ; 0x34
add r0, r4, #40 ; 0x28
bl SND_StartLfo
ldrb r0, [r4, #3]
orr r0, r0, #2
strb r0, [r4, #3]
ldrb r0, [r4, #3]
bic r0, r0, #1
orr r0, r0, #1
strb r0, [r4, #3]
ldmia sp!, {r4, lr}
bx lr
_037FC6E4: .word 0xFFFE9680
arm_func_start FUN_037FC6E8
FUN_037FC6E8: ; 0x037FC6E8
stmdb sp!, {r4, lr}
mov r4, r0
mov ip, #0
str ip, [r4, #80] ; 0x50
str r1, [r4, #72] ; 0x48
str r2, [r4, #76] ; 0x4c
str ip, [r4, #52] ; 0x34
strb r3, [r4, #34] ; 0x22
mov r1, #127 ; 0x7f
strh r1, [r4, #36] ; 0x24
ldrb r2, [r4, #3]
bic r2, r2, #2
strb r2, [r4, #3]
ldrb r2, [r4, #3]
orr r2, r2, #4
strb r2, [r4, #3]
mov r2, #60 ; 0x3c
strb r2, [r4, #8]
strb r2, [r4, #5]
strb r1, [r4, #9]
strb ip, [r4, #10]
strh ip, [r4, #12]
strh ip, [r4, #6]
strh ip, [r4, #14]
strb ip, [r4, #11]
strb r1, [r4, #4]
strh ip, [r4, #50] ; 0x32
str ip, [r4, #24]
str ip, [r4, #20]
bl SND_SetExChannelAttack
mov r0, r4
mov r1, #127 ; 0x7f
bl SND_SetExChannelDecay
mov r0, r4
mov r1, #127 ; 0x7f
bl SND_SetExChannelSustain
mov r0, r4
mov r1, #127 ; 0x7f
bl SND_SetExChannelRelease
add r0, r4, #40 ; 0x28
bl SND_InitLfoParam
ldmia sp!, {r4, lr}
bx lr
arm_func_start FUN_037FC794
FUN_037FC794: ; 0x037FC794
stmfd sp!, {lr}
sub sp, sp, #4
mov r1, r0
cmp r1, #127 ; 0x7f
ldreq r0, _037FC7F0 ; =0x0000FFFF
beq _037FC7E4
cmp r1, #126 ; 0x7e
moveq r0, #15360 ; 0x3c00
beq _037FC7E4
cmp r1, #50 ; 0x32
movlt r0, r1, lsl #1
addlt r0, r0, #1
movlt r0, r0, lsl #16
movlt r0, r0, lsr #16
blt _037FC7E4
mov r0, #7680 ; 0x1e00
rsb r1, r1, #126 ; 0x7e
bl _s32_div_f
mov r0, r0, lsl #16
mov r0, r0, lsr #16
_037FC7E4:
add sp, sp, #4
ldmia sp!, {lr}
bx lr
_037FC7F0: .word 0x0000FFFF
|