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
|
.include "asm/macros.inc"
.include "global.inc"
.extern __console_exit
.section .bss
.global UNK_021D6B50
UNK_021D6B50: ; 0x021D6B50
.space 0x4
.global UNK_021D6B54
UNK_021D6B54: ; 0x021D6B54
.space 0x424
.text
arm_func_start CTRDGi_SetTask
CTRDGi_SetTask: ; 0x020DD9FC
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
ldr r3, _020DDAA8 ; =UNK_021D6B50
mov r7, r0
mov r4, r1
mov r6, r2
ldr r5, [r3, #0x0]
bl CTRDGi_IsTaskAvailable
_020DDA1C: ; 0x020DDA1C
cmp r0, #0x0
bne _020DDA28
bl OS_Terminate
_020DDA28:
ldr r0, _020DDAAC ; =UNK_021D6B54
ldrb r0, [r0, #0x22]
cmp r0, #0x0
beq _020DDA3C
bl OS_Terminate
_020DDA3C:
bl OS_DisableInterrupts
mov r1, #0x1
strb r1, [r7, #0x22]
str r4, [r7, #0x0]
add r1, r5, #0xc4
cmp r7, r1
mov r4, r0
ldreq r0, _020DDAA8 ; =UNK_021D6B50
str r6, [r7, #0x4]
moveq r1, #0x0
streq r1, [r0, #0x0]
ldr ip, _020DDAAC ; =UNK_021D6B54
ldmia r7!, {r0-r3}
mov r6, r12
stmia r12!, {r0-r3}
ldmia r7!, {r0-r3}
stmia r12!, {r0-r3}
ldr r1, [r7, #0x0]
mov r0, r5
str r1, [r12, #0x0]
str r6, [r5, #0xc0]
bl OS_WakeupThreadDirect
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
_020DDAA8: .word UNK_021D6B50
_020DDAAC: .word UNK_021D6B54
arm_func_start CTRDGi_TaskThread
CTRDGi_TaskThread: ; 0x020DDAB0
stmdb sp!, {r4-r10,lr}
sub sp, sp, #0x28
ldr r6, _020DDB94 ; =UNK_021D6B54
ldr r5, _020DDB98 ; =UNK_021D6B50
mov r4, r0
add r9, sp, #0x0
mov r8, #0x0
mov r7, #0x24
_020DDAD0:
mov r0, r9
mov r1, r8
mov r2, r7
bl MI_CpuFill8
bl OS_DisableInterrupts
ldr r1, [r4, #0xc0]
mov r10, r0
cmp r1, #0x0
bne _020DDB08
_020DDAF4:
mov r0, r8
bl OS_SleepThread
ldr r0, [r4, #0xc0]
cmp r0, #0x0
beq _020DDAF4
_020DDB08:
ldr lr, [r4, #0xc0]
add r12, sp, #0x0
ldmia lr!, {r0-r3}
stmia r12!, {r0-r3}
ldmia lr!, {r0-r3}
stmia r12!, {r0-r3}
ldr r1, [lr, #0x0]
mov r0, r10
str r1, [r12, #0x0]
bl OS_RestoreInterrupts
ldr r1, [sp, #0x0]
cmp r1, #0x0
beq _020DDB48
mov r0, r9
blx r1
str r0, [sp, #0x8]
_020DDB48:
bl OS_DisableInterrupts
ldr r1, [sp, #0x4]
mov r10, r0
strb r8, [r6, #0x22]
cmp r1, #0x0
beq _020DDB68
mov r0, r9
blx r1
_020DDB68:
ldr r0, [r5, #0x0]
cmp r0, #0x0
beq _020DDB84
mov r0, r10
str r8, [r4, #0xc0]
bl OS_RestoreInterrupts
b _020DDAD0
_020DDB84:
bl OS_ExitThread
add sp, sp, #0x28
ldmia sp!, {r4-r10,lr}
bx lr
.balign 4
_020DDB94: .word UNK_021D6B54
_020DDB98: .word UNK_021D6B50
arm_func_start CTRDGi_InitTaskInfo
CTRDGi_InitTaskInfo:
ldr ip, _020DDBAC ; =MI_CpuFill8
mov r1, #0x0
mov r2, #0x24
bx r12
.balign 4
_020DDBAC: .word MI_CpuFill8
arm_func_start CTRDGi_IsTaskAvailable
CTRDGi_IsTaskAvailable:
ldr r0, _020DDBC8 ; =UNK_021D6B50
ldr r0, [r0, #0x0]
cmp r0, #0x0
movne r0, #0x1
moveq r0, #0x0
bx lr
.balign 4
_020DDBC8: .word UNK_021D6B50
arm_func_start CTRDGi_InitTaskThread
CTRDGi_InitTaskThread: ; 0x020DDBCC
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0xc
mov r5, r0
bl OS_DisableInterrupts
ldr r1, _020DDC4C ; =UNK_021D6B50
mov r4, r0
ldr r0, [r1, #0x0]
cmp r0, #0x0
bne _020DDC38
add r0, r5, #0xc4
str r5, [r1, #0x0]
bl CTRDGi_InitTaskInfo
ldr r0, _020DDC50 ; =UNK_021D6B54
bl CTRDGi_InitTaskInfo
_020DDC04: ; 0x020DDC04
mov r0, #0x0
str r0, [r5, #0xc0]
mov r2, #0x400
ldr r1, _020DDC54 ; =CTRDGi_TaskThread
ldr r3, _020DDC58 ; =__console_exit
mov r0, r5
str r2, [sp, #0x0]
mov r2, #0x14
str r2, [sp, #0x4]
mov r2, r5
bl OS_CreateThread
mov r0, r5
bl OS_WakeupThreadDirect
_020DDC38:
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0xc
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020DDC4C: .word UNK_021D6B50
_020DDC50: .word UNK_021D6B54
_020DDC54: .word CTRDGi_TaskThread
_020DDC58: .word __console_exit
|