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
|
.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start SOCL_CalmDown
SOCL_CalmDown: ; 0x02099A94
stmdb sp!, {r4,lr}
ldr r0, _02099B10 ; =SOCLiUDPSendSocket
ldr r0, [r0, #0x0]
cmp r0, #0x0
beq _02099AE8
bl SOCL_CloseAll
movs r4, r0
bne _02099AE0
ldr r0, _02099B10 ; =SOCLiUDPSendSocket
ldr r0, [r0, #0x0]
bl SOCL_Close
ldr r0, _02099B10 ; =SOCLiUDPSendSocket
ldr r0, [r0, #0x0]
bl SOCL_IsClosed
cmp r0, #0x0
ldrne r0, _02099B10 ; =SOCLiUDPSendSocket
movne r1, #0x0
strne r1, [r0, #0x0]
mvn r4, #0x19
_02099AE0:
bl SOCLi_TrashSocket
b _02099B04
_02099AE8:
bl CPS_CalmDown
cmp r0, #0x0
mvneq r4, #0x19
beq _02099B04
mov r0, #0x0
bl WCM_SetRecvDCFCallback
mov r4, #0x0
_02099B04:
mov r0, r4
ldmia sp!, {r4,lr}
bx lr
.balign 4
_02099B10: .word SOCLiUDPSendSocket
arm_func_start SOCL_CloseAll
SOCL_CloseAll: ; 0x02099B14
stmdb sp!, {r4-r6,lr}
ldr r4, _02099BBC ; =SOCLiUDPSendSocket
ldr r5, _02099BC0 ; =SOCLiSocketList
_02099B20:
bl OS_DisableInterrupts
ldr r6, [r5, #0x0]
cmp r6, #0x0
beq _02099B54
ldr r2, [r4, #0x0]
_02099B34:
cmp r6, r2
beq _02099B48
ldrsh r1, [r6, #0x70]
ands r1, r1, #0x10
beq _02099B54
_02099B48:
ldr r6, [r6, #0x7c]
cmp r6, #0x0
bne _02099B34
_02099B54:
bl OS_RestoreInterrupts
cmp r6, #0x0
beq _02099B6C
mov r0, r6
bl SOCL_Close
b _02099B20
_02099B6C:
ldr r0, _02099BC0 ; =SOCLiSocketList
ldr r1, [r0, #0x0]
cmp r1, #0x0
beq _02099B98
ldr r0, _02099BBC ; =SOCLiUDPSendSocket
ldr r0, [r0, #0x0]
cmp r1, r0
bne _02099BB0
ldr r0, [r1, #0x7c]
cmp r0, #0x0
bne _02099BB0
_02099B98:
ldr r0, _02099BC4 ; =SOCLiSocketListTrash
ldr r0, [r0, #0x0]
cmp r0, #0x0
moveq r0, #0x0
ldmeqia sp!, {r4-r6,lr}
bxeq lr
_02099BB0:
mvn r0, #0x19
ldmia sp!, {r4-r6,lr}
bx lr
.balign 4
_02099BBC: .word SOCLiUDPSendSocket
_02099BC0: .word SOCLiSocketList
_02099BC4: .word SOCLiSocketListTrash
arm_func_start SOCL_Cleanup
SOCL_Cleanup: ; 0x02099BC8
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
ldr r1, _02099C68 ; =SOCLiRequestedIP
ldr r0, [r1, #0x0]
cmp r0, #0x0
ldreq r0, _02099C6C ; =CPSMyIp
ldreq r0, [r0, #0x0]
streq r0, [r1, #0x0]
bl SOCL_CalmDown
mvn r4, #0x19
cmp r0, r4
bne _02099C10
mov r5, #0x64
_02099BFC:
mov r0, r5
bl OS_Sleep
bl SOCL_CalmDown
cmp r0, r4
beq _02099BFC
_02099C10:
bl SOCLi_CleanupCommandPacketQueue
movs r4, r0
bmi _02099C58
bl CPS_Cleanup
mov r0, #0x0
bl CPS_SetScavengerCallback
ldr r0, _02099C70 ; =SOCLiConfigPtr
ldr r1, [r0, #0x0]
ldr r0, [r1, #0x28]
cmp r0, #0x0
bne _02099C4C
ldr r0, _02099C74 ; =SOCLiCPSConfig
ldr r1, [r1, #0x1c]
ldr r0, [r0, #0x1c]
blx r1
_02099C4C:
ldr r0, _02099C70 ; =SOCLiConfigPtr
mov r1, #0x0
str r1, [r0, #0x0]
_02099C58:
mov r0, r4
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_02099C68: .word SOCLiRequestedIP
_02099C6C: .word CPSMyIp
_02099C70: .word SOCLiConfigPtr
_02099C74: .word SOCLiCPSConfig
arm_func_start SOCL_GetHostID
SOCL_GetHostID: ; 02099C78
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, _02099CE0 ; =CPSMyIp
ldr r2, [r0, #0x0]
cmp r2, #0x0
bne _02099CBC
ldr r0, _02099CE4 ; =SOCLiDhcpState
ldr r0, [r0, #0x0]
and r0, r0, #0x3
cmp r0, #0x1
bne _02099CCC
bl OS_GetProcMode
cmp r0, #0x12
beq _02099CCC
mov r0, #0xa
bl OS_Sleep
b _02099CCC
_02099CBC:
ldr r0, _02099CE8 ; =SOCLiRequestedIP
ldr r1, [r0, #0x0]
cmp r1, #0x0
streq r2, [r0, #0x0]
_02099CCC:
ldr r0, _02099CE0 ; =CPSMyIp
ldr r0, [r0, #0x0]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_02099CE0: .word CPSMyIp
_02099CE4: .word SOCLiDhcpState
_02099CE8: .word SOCLiRequestedIP
arm_func_start SOCL_SetResolver
SOCL_SetResolver: ; 0x02099CEC
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
mov r4, r1
bl SOCL_GetHostID
cmp r0, #0x0
ldrne r1, _02099D24 ; =CPSDnsIp
mvneq r0, #0x26
movne r0, #0x0
strne r5, [r1, #0x0]
strne r4, [r1, #0x4]
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_02099D24: .word CPSDnsIp
arm_func_start SOCL_InetAtoH
SOCL_InetAtoH: ; 0x022099D28
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r4, r0
bl OS_DisableInterrupts
ldr r1, _02099D84 ; =CPSDnsIp
mov r5, r0
ldr r7, [r1, #0x0]
mov r2, #0x0
ldr r6, [r1, #0x4]
mov r0, r4
str r2, [r1, #0x0]
str r2, [r1, #0x4]
bl CPS_Resolve
ldr r1, _02099D84 ; =CPSDnsIp
mov r4, r0
mov r0, r5
str r7, [r1, #0x0]
str r6, [r1, #0x4]
bl OS_RestoreInterrupts
mov r0, r4
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
_02099D84: .word CPSDnsIp
arm_func_start SOCL_Resolve
SOCL_Resolve: ; 0x02099D88
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x64
movs r4, r0
addeq sp, sp, #0x64
moveq r0, #0x0
ldmeqia sp!, {r4-r5,lr}
bxeq lr
ldr r1, _02099E34 ; =SOCLiConfigPtr
mov r0, #0xfd0
ldr r1, [r1, #0x0]
ldr r1, [r1, #0x18]
blx r1
movs r5, r0
addeq sp, sp, #0x64
moveq r0, #0x0
ldmeqia sp!, {r4-r5,lr}
bxeq lr
add r0, sp, #0x0
mov r1, #0x0
mov r2, #0x64
bl MI_CpuFill8
ldr r3, _02099E38 ; =0x00000B68
ldr r1, _02099E3C ; =0x00000466
add r2, r5, r3
add r0, sp, #0x0
str r5, [sp, #0x40]
str r3, [sp, #0x3c]
str r2, [sp, #0x4c]
str r1, [sp, #0x48]
bl CPS_SocRegister
mov r0, r4
bl CPS_Resolve
mov r4, r0
bl CPS_SocUnRegister
ldr r1, _02099E34 ; =SOCLiConfigPtr
mov r0, r5
ldr r1, [r1, #0x0]
ldr r1, [r1, #0x1c]
blx r1
mov r0, r4
add sp, sp, #0x64
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_02099E34: .word SOCLiConfigPtr
_02099E38: .word 0x00000B68
_02099E3C: .word 0x00000466
|