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
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
|
.include "asm/macros.inc"
.include "global.inc"
.extern CTRDGi_Work
.section .bss
.global UNK_021D6948
UNK_021D6948: ; 0x021D6948
.space 0x4
.global UNK_021D694C
UNK_021D694C: ; 0x021D694C
.space 0x4
.global UNK_021D6950
UNK_021D6950: ; 0x021D6950
.space 0x4
.global UNK_021D6954
UNK_021D6954: ; 0x021D6954
.space 0x4
.global UNK_021D6958
UNK_021D6958: ; 0x021D6958
.space 0x8
.global UNK_021D6960
UNK_021D6960: ; 0x021D6960
.space 0x4
.global UNK_021D6964
UNK_021D6964: ; 0x021D6964
.space 0xbc
.global UNK_021D6A20
UNK_021D6A20: ; 0x021D6A20
.space 0xe8
.text
arm_func_start CTRDGi_CallbackForSetPhi
CTRDGi_CallbackForSetPhi: ; 0x020DB978
ldr r0, _020DB988 ; =UNK_021D694C
mov r1, #0x0
str r1, [r0, #0x0]
bx lr
.balign 4
_020DB988: .word UNK_021D694C
arm_func_start CTRDG_TerminateForPulledOut
CTRDG_TerminateForPulledOut: ; 0x020DB98C
stmdb sp!, {lr}
sub sp, sp, #0x4
mov r0, #0x2
bl CTRDGi_SendtoPxi
bl OS_Terminate
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
arm_func_start CTRDGi_PulledOutCallback
CTRDGi_PulledOutCallback: ; 0x020DB9AC
stmdb sp!, {lr}
sub sp, sp, #0x4
and r0, r1, #0x3f
cmp r0, #0x11
bne _020DBA14
ldr r0, _020DBA24 ; =UNK_021D6954
ldr r0, [r0, #0x0]
cmp r0, #0x0
addne sp, sp, #0x4
ldmneia sp!, {lr}
bxne lr
ldr r1, _020DBA28 ; =UNK_021D6958
mov r0, #0x0
ldr r1, [r1, #0x0]
cmp r1, #0x0
beq _020DB9F0
blx r1
_020DB9F0:
cmp r0, #0x0
beq _020DB9FC
bl CTRDG_TerminateForPulledOut
_020DB9FC:
ldr r0, _020DBA24 ; =UNK_021D6954
mov r1, #0x1
str r1, [r0, #0x0]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020DBA14:
bl OS_Terminate
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020DBA24: .word UNK_021D6954
_020DBA28: .word UNK_021D6958
arm_func_start CTRDGi_CallbackForInitModuleInfo
CTRDGi_CallbackForInitModuleInfo: ; 0x020DBA2C
stmdb sp!, {lr}
sub sp, sp, #0x4
and r0, r1, #0x3f
cmp r0, #0x1
ldreq r0, _020DBA64 ; =CTRDGi_Work
moveq r1, #0x1
streqh r1, [r0, #0x0]
addeq sp, sp, #0x4
ldmeqia sp!, {lr}
bxeq lr
bl OS_Terminate
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020DBA64: .word CTRDGi_Work
arm_func_start CTRDGi_InitModuleInfo
CTRDGi_InitModuleInfo: ; 0x020DBA68
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x14
ldr r0, _020DBC50 ; =UNK_021D6948
ldr r1, [r0, #0x0]
cmp r1, #0x0
addne sp, sp, #0x14
ldmneia sp!, {r4-r7,lr}
bxne lr
ldr r1, _020DBC54 ; =0x04000300
mov r2, #0x1
str r2, [r0, #0x0]
ldrh r0, [r1, #0x0]
ands r0, r0, #0x1
addeq sp, sp, #0x14
ldmeqia sp!, {r4-r7,lr}
bxeq lr
mov r0, #0x40000
bl OS_SetIrqMask
ldr r3, _020DBC58 ; =0x04000208
mov r2, #0x1
ldrh r4, [r3, #0x0]
ldr r1, _020DBC5C ; =CTRDGi_Work
mov r6, r0
strh r2, [r3, #0x0]
ldrh r0, [r1, #0x2]
add r1, sp, #0x0
bl CTRDGi_LockByProcessor
ldr r1, _020DBC60 ; =0x04000204
add r0, sp, #0x8
ldrh r1, [r1, #0x0]
and r1, r1, #0x8000
mov r5, r1, asr #0xf
bl CTRDGi_ChangeLatestAccessCycle
ldr r3, _020DBC60 ; =0x04000204
ldr r0, _020DBC64 ; =UNK_021D6960
ldrh r2, [r3, #0x0]
add r0, r0, #0x80
mov r1, #0x40
bic r2, r2, #0x8000
strh r2, [r3, #0x0]
bl DC_InvalidateRange
ldr r2, _020DBC64 ; =UNK_021D6960
ldr r1, _020DBC68 ; =0x08000080
mov r0, #0x1
mov r3, #0x40
add r2, r2, #0x80
bl MI_DmaCopy16
ldr r2, _020DBC60 ; =0x04000204
add r0, sp, #0x8
ldrh r1, [r2, #0x0]
bic r1, r1, #0x8000
orr r1, r1, r5, lsl #0xf
strh r1, [r2, #0x0]
bl CTRDGi_RestoreAccessCycle
ldr r0, _020DBC5C ; =CTRDGi_Work
add r1, sp, #0x0
ldrh r0, [r0, #0x2]
bl CTRDGi_UnlockByProcessor
ldr r0, _020DBC6C ; =0x027FFF9B
ldrb r0, [r0, #0x0]
cmp r0, #0x0
bne _020DBB70
ldr r0, _020DBC70 ; =0x027FFF9A
ldrb r0, [r0, #0x0]
cmp r0, #0x0
bne _020DBBDC
_020DBB70:
ldr r2, _020DBC64 ; =UNK_021D6960
ldr r0, _020DBC74 ; =0x027FFC30
ldrh r1, [r2, #0xbe]
mov r3, #0x0
strh r1, [r0, #0x0]
_020DBB84:
add r0, r2, r3
ldrb r1, [r0, #0xb5]
add r0, r3, #0x2700000
add r0, r0, #0xff000
add r3, r3, #0x1
strb r1, [r0, #0xC32]
cmp r3, #0x3
blt _020DBB84
ldrh r0, [r2, #0xb0]
ldr r1, _020DBC74 ; =0x027FFC30
strh r0, [r1, #0x6]
ldr r0, [r2, #0xac]
str r0, [r1, #0x8]
bl CTRDG_IsExisting
_020DBBBC: ; 0x020DBBBC
cmp r0, #0x0
movne r2, #0x1
ldr r1, _020DBC6C ; =0x027FFF9B
moveq r2, #0x0
strb r2, [r1, #0x0]
ldr r0, _020DBC70 ; =0x027FFF9A
mov r1, #0x1
strb r1, [r0, #0x0]
_020DBBDC:
ldr r0, _020DBC78 ; =0xFFFF0020
ldr r1, _020DBC7C ; =UNK_021D6964
mov r2, #0x9c
bl MIi_CpuCopy32
bl DC_FlushAll
ldr r0, _020DBC64 ; =UNK_021D6960
add r0, r0, #0xfe000000
mov r0, r0, lsr #0x5
mov r0, r0, lsl #0x6
orr r0, r0, #0x1
bl CTRDGi_SendtoPxi
ldr r5, _020DBC5C ; =CTRDGi_Work
ldrh r0, [r5, #0x0]
cmp r0, #0x1
beq _020DBC30
mov r7, #0x1
_020DBC1C:
mov r0, r7
bl SVC_WaitByLoop
ldrh r0, [r5, #0x0]
cmp r0, #0x1
bne _020DBC1C
_020DBC30:
ldr r2, _020DBC58 ; =0x04000208
mov r0, r6
ldrh r1, [r2, #0x0]
strh r4, [r2, #0x0]
bl OS_SetIrqMask
add sp, sp, #0x14
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
_020DBC50: .word UNK_021D6948
_020DBC54: .word 0x04000300
_020DBC58: .word 0x04000208
_020DBC5C: .word CTRDGi_Work
_020DBC60: .word 0x04000204
_020DBC64: .word UNK_021D6960
_020DBC68: .word 0x08000080
_020DBC6C: .word 0x027FFF9B
_020DBC70: .word 0x027FFF9A
_020DBC74: .word 0x027FFC30
_020DBC78: .word 0xFFFF0020
_020DBC7C: .word UNK_021D6964
arm_func_start CTRDG_Init
CTRDG_Init: ; 0x020DBC80
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
ldr r0, _020DBD34 ; =UNK_021D6950
ldr r1, [r0, #0x0]
cmp r1, #0x0
addne sp, sp, #0x4
ldmneia sp!, {r4-r5,lr}
bxne lr
mov r1, #0x1
str r1, [r0, #0x0]
bl CTRDGi_InitCommon
ldr r0, _020DBD38 ; =UNK_021D6954
mov r1, #0x0
str r1, [r0, #0x0]
bl PXI_Init
mov r5, #0xd
mov r4, #0x1
_020DBCC4:
mov r0, r5
mov r1, r4
bl PXI_IsCallbackReady
_020DBCD0: ; 0x020DBCD0
cmp r0, #0x0
beq _020DBCC4
ldr r1, _020DBD3C ; =CTRDGi_CallbackForInitModuleInfo
mov r0, #0xd
bl PXI_SetFifoRecvCallback
bl CTRDGi_InitModuleInfo
mov r0, #0xd
mov r1, #0x0
bl PXI_SetFifoRecvCallback
ldr r1, _020DBD40 ; =CTRDGi_PulledOutCallback
mov r0, #0xd
bl PXI_SetFifoRecvCallback
ldr r1, _020DBD44 ; =UNK_021D6958
mov r2, #0x0
ldr r0, _020DBD48 ; =UNK_021D6A20
str r2, [r1, #0x0]
bl CTRDGi_InitTaskThread
ldr r1, _020DBD4C ; =CTRDGi_CallbackForSetPhi
mov r0, #0x11
bl PXI_SetFifoRecvCallback
_020DBD20: ; 0x020DBD20
mov r0, #0x0
bl CTRDG_Enable
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020DBD34: .word UNK_021D6950
_020DBD38: .word UNK_021D6954
_020DBD3C: .word CTRDGi_CallbackForInitModuleInfo
_020DBD40: .word CTRDGi_PulledOutCallback
_020DBD44: .word UNK_021D6958
_020DBD48: .word UNK_021D6A20
_020DBD4C: .word CTRDGi_CallbackForSetPhi
|