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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
|
.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start MIi_DMAFastCallback
MIi_DMAFastCallback: ; 0x020CDE78
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, _020CDEB4 ; =0x021D37FC
mov r2, #0x0
ldr r1, [r0, #0x10]
str r2, [r0, #0x0]
cmp r1, #0x0
addeq sp, sp, #0x4
ldr r0, [r0, #0x14]
ldmeqia sp!, {lr}
bxeq lr
blx r1
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020CDEB4: .word 0x021D37FC
arm_func_start MI_SendGXCommandAsyncFast
MI_SendGXCommandAsyncFast: ; 0x020CDEB8
stmdb sp!, {r4-r6,lr}
movs r4, r2
mov r6, r0
mov r5, r1
bne _020CDEE8
cmp r3, #0x0
ldmeqia sp!, {r4-r6,lr}
bxeq lr
ldr r0, [sp, #0x10]
blx r3
ldmia sp!, {r4-r6,lr}
bx lr
_020CDEE8:
ldr r2, _020CDF6C ; =0x021D37FC
ldr r0, [r2, #0x0]
cmp r0, #0x0
bne _020CDEE8
ldr r12, [sp, #0x10]
mov lr, #0x1
mov r0, r6
mov r1, #0x38000000
str lr, [r2, #0x0]
str r6, [r2, #0x4]
str r3, [r2, #0x10]
str r12, [r2, #0x14]
bl MIi_CheckAnotherAutoDMA
mov r0, r6
mov r1, r5
mov r2, r4
mov r3, #0x0
bl MIi_CheckDma0SourceAddress
mov r0, r6
bl MI_WaitDma
mov r0, r6
ldr r1, _020CDF70 ; =MIi_DMAFastCallback
mov r2, #0x0
bl OSi_EnterDmaCallback
mov r0, r6
mov r1, r5
ldr r2, _020CDF74 ; =0x04000400
mov r3, #0x3c00000
rsb r3, r3, #0x0
orr r3, r3, r4, lsr #0x2
bl MIi_DmaSetParams
ldmia sp!, {r4-r6,lr}
bx lr
.balign 4
_020CDF6C: .word 0x021D37FC
_020CDF70: .word MIi_DMAFastCallback
_020CDF74: .word 0x04000400
arm_func_start MIi_DMACallback
MIi_DMACallback: ; 0x020CDF78
stmdb sp!, {lr}
sub sp, sp, #0x4
mov r0, #0x200000
bl OS_DisableIrqMask
ldr r2, _020CDFE4 ; =0x04000600
ldr r0, _020CDFE8 ; =0x021D37FC
ldr r1, [r2, #0x0]
ldr r3, [r0, #0x18]
bic r1, r1, #0xc0000000
orr r1, r1, r3, lsl #0x1e
str r1, [r2, #0x0]
ldr r1, [r0, #0x1c]
mov r0, #0x200000
bl OS_SetIrqFunction
ldr r0, _020CDFE8 ; =0x021D37FC
mov r2, #0x0
ldr r1, [r0, #0x10]
str r2, [r0, #0x0]
cmp r1, #0x0
addeq sp, sp, #0x4
ldr r0, [r0, #0x14]
ldmeqia sp!, {lr}
bxeq lr
blx r1
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020CDFE4: .word 0x04000600
_020CDFE8: .word 0x021D37FC
arm_func_start MIi_FIFOCallback
MIi_FIFOCallback: ; 0x020CDFEC
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
ldr r0, _020CE0A4 ; =0x021D37FC
ldr r4, [r0, #0xc]
cmp r4, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,lr}
bxeq lr
ldr r0, _020CE0A4 ; =0x021D37FC
cmp r4, #0x1d8
ldr r5, [r0, #0x8]
movcs r4, #0x1d8
ldr r2, [r0, #0xc]
add r1, r5, r4
subs r2, r2, r4
str r2, [r0, #0xc]
str r1, [r0, #0x8]
bne _020CE078
ldr r0, [r0, #0x4]
ldr r1, _020CE0A8 ; =MIi_DMACallback
mov r2, #0x0
bl OSi_EnterDmaCallback
mov r0, #0x3bc00000
rsb r3, r0, #0x0
ldr r1, _020CE0A4 ; =0x021D37FC
ldr r2, _020CE0AC ; =0x04000400
ldr r0, [r1, #0x4]
mov r1, r5
orr r3, r3, r4, lsr #0x2
bl MIi_DmaSetParams
mov r0, #0x200000
bl OS_ResetRequestIrqMask
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
_020CE078:
ldr r3, _020CE0B0 ; =0x84400000
ldr r0, [r0, #0x4]
ldr r2, _020CE0AC ; =0x04000400
mov r1, r5
orr r3, r3, r4, lsr #0x2
bl MIi_DmaSetParams
mov r0, #0x200000
bl OS_ResetRequestIrqMask
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020CE0A4: .word 0x021D37FC
_020CE0A8: .word MIi_DMACallback
_020CE0AC: .word 0x04000400
_020CE0B0: .word 0x84400000
arm_func_start MI_SendGXCommandAsync
MI_SendGXCommandAsync: ; 0x020CE0B4
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r4, r0
cmp r2, #0x0
bne _020CE0EC
cmp r3, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,lr}
bxeq lr
ldr r0, [sp, #0x10]
blx r3
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
_020CE0EC:
ldr r0, _020CE1BC ; =0x021D37FC
ldr r0, [r0, #0x0]
cmp r0, #0x0
bne _020CE0EC
ldr r5, _020CE1C0 ; =0x04000600
_020CE100:
ldr r0, [r5, #0x0]
and r0, r0, #0x7000000
mov r0, r0, lsr #0x18
ands r0, r0, #0x2
beq _020CE100
ldr ip, _020CE1BC ; =0x021D37FC
ldr lr, [sp, #0x10]
str r3, [r12, #0x10]
mov r5, #0x1
mov r0, r4
mov r3, #0x0
str r5, [r12, #0x0]
str r4, [r12, #0x4]
str r1, [r12, #0x8]
str r2, [r12, #0xc]
str lr, [r12, #0x14]
bl MIi_CheckDma0SourceAddress
mov r0, r4
bl MI_WaitDma
bl OS_DisableInterrupts
ldr r1, _020CE1C0 ; =0x04000600
mov r4, r0
ldr r0, [r1, #0x0]
ldr r1, _020CE1BC ; =0x021D37FC
and r0, r0, #0xc0000000
mov r2, r0, lsr #0x1e
mov r0, #0x200000
str r2, [r1, #0x18]
bl OS_GetIrqFunction
ldr r1, _020CE1BC ; =0x021D37FC
ldr r2, _020CE1C0 ; =0x04000600
str r0, [r1, #0x1c]
ldr r0, [r2, #0x0]
ldr r1, _020CE1C4 ; =MIi_FIFOCallback
bic r0, r0, #0xc0000000
orr r3, r0, #0x40000000
mov r0, #0x200000
str r3, [r2, #0x0]
bl OS_SetIrqFunction
mov r0, #0x200000
bl OS_EnableIrqMask
bl MIi_FIFOCallback
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020CE1BC: .word 0x021D37FC
_020CE1C0: .word 0x04000600
_020CE1C4: .word MIi_FIFOCallback
|