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
|
.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global _03807F48
_03807F48: ;0x03807F48
.space 0x03807F4C - 0x03807F48
.section .text
arm_func_start SND_GetLockedChannel
SND_GetLockedChannel: ; 0x037FC964
ands r0, r0, #1
ldrne r0, _037FC97C ; =_03807F44
ldrne r0, [r0]
ldreq r0, _037FC980 ; =_03807F48
ldreq r0, [r0]
bx lr
_037FC97C: .word _03807F44
_037FC980: .word _03807F48
arm_func_start SND_UnlockChannel
SND_UnlockChannel: ; 0x037FC984
ands r1, r1, #1
ldreq r1, _037FC9B8 ; =_03807F48
ldreq r2, [r1]
mvneq r0, r0
andeq r0, r2, r0
streq r0, [r1]
bxeq lr
ldr r1, _037FC9BC ; =_03807F44
ldr r2, [r1]
mvn r0, r0
and r0, r2, r0
str r0, [r1]
bx lr
_037FC9B8: .word _03807F48
_037FC9BC: .word _03807F44
arm_func_start SND_LockChannel
SND_LockChannel: ; 0x037FC9C0
stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
sub sp, sp, #4
mov sl, r0
mov r9, r1
mov r7, sl
mov r6, #0
mov fp, r6
str r6, [sp]
mov r4, r6
mov r5, #1
b _037FCA6C
_037FC9EC:
ands r0, r7, #1
beq _037FCA64
mov r1, #84 ; 0x54
ldr r0, _037FCAAC ; =SNDi_Work
mla r8, r6, r1, r0
ldr r0, _037FCAB0 ; =_03807F48
ldr r1, [r0]
mov r0, r5, lsl r6
ands r0, r1, r0
bne _037FCA64
ldr r3, [r8, #72] ; 0x48
cmp r3, #0
beq _037FCA34
mov r0, r8
mov r1, fp
ldr r2, [r8, #76] ; 0x4c
mov lr, pc
bx r3
_037FCA34:
mov r0, r6
ldr r1, [sp]
bl SND_StopChannel
strb r4, [r8, #34] ; 0x22
mov r0, r8
bl SND_FreeExChannel
ldrb r0, [r8, #3]
bic r0, r0, #248 ; 0xf8
strb r0, [r8, #3]
ldrb r0, [r8, #3]
bic r0, r0, #1
strb r0, [r8, #3]
_037FCA64:
add r6, r6, #1
mov r7, r7, lsr #1
_037FCA6C:
cmp r6, #16
bge _037FCA7C
cmp r7, #0
bne _037FC9EC
_037FCA7C:
ands r0, r9, #1
ldrne r0, _037FCAB4 ; =_03807F44
ldrne r1, [r0]
orrne r1, r1, sl
strne r1, [r0]
ldreq r0, _037FCAB0 ; =_03807F48
ldreq r1, [r0]
orreq r1, r1, sl
streq r1, [r0]
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
bx lr
_037FCAAC: .word SNDi_Work
_037FCAB0: .word _03807F48
_037FCAB4: .word _03807F44
arm_func_start SND_StopUnlockedChannel
SND_StopUnlockedChannel: ; 0x037FCAB8
stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
sub sp, sp, #4
mov sl, r0
mov r8, #0
mov r6, r8
mov r5, r8
mov r4, r8
ldr fp, _037FCB78 ; =SNDi_Work
mov r7, #1
b _037FCB5C
_037FCAE0:
ands r0, sl, #1
beq _037FCB54
mov r0, #84 ; 0x54
mla r9, r8, r0, fp
ldr r0, _037FCB7C ; =_03807F48
ldr r1, [r0]
mov r0, r7, lsl r8
ands r0, r1, r0
bne _037FCB54
ldr r3, [r9, #72] ; 0x48
cmp r3, #0
beq _037FCB24
mov r0, r9
mov r1, r6
ldr r2, [r9, #76] ; 0x4c
mov lr, pc
bx r3
_037FCB24:
mov r0, r8
mov r1, r5
bl SND_StopChannel
strb r4, [r9, #34] ; 0x22
mov r0, r9
bl SND_FreeExChannel
ldrb r0, [r9, #3]
bic r0, r0, #248 ; 0xf8
strb r0, [r9, #3]
ldrb r0, [r9, #3]
bic r0, r0, #1
strb r0, [r9, #3]
_037FCB54:
add r8, r8, #1
mov sl, sl, lsr #1
_037FCB5C:
cmp r8, #16
bge _037FCB6C
cmp sl, #0
bne _037FCAE0
_037FCB6C:
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
bx lr
_037FCB78: .word SNDi_Work
_037FCB7C: .word _03807F48
|