summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-05-25 15:44:17 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-05-25 15:44:17 -0400
commit5887aceb35b0bff7bc3b6db4c965c2e5a9963367 (patch)
tree5130545b176ded19ae60088bd9b1461702caaf20
parent5a3e2988978165de66af6ffc05a909d2bb117c5a (diff)
Split libsoc
-rw-r--r--arm9/arm9.lcf22
-rw-r--r--arm9/asm/SOC_soc.s758
-rw-r--r--arm9/asm/SOC_socl_bind.s198
-rw-r--r--arm9/asm/SOC_socl_cleanup.s283
-rw-r--r--arm9/asm/SOC_socl_close.s288
-rw-r--r--arm9/asm/SOC_socl_command.s300
-rw-r--r--arm9/asm/SOC_socl_const.s2
-rw-r--r--arm9/asm/SOC_socl_create.s491
-rw-r--r--arm9/asm/SOC_socl_list.s128
-rw-r--r--arm9/asm/SOC_socl_misc.s10
-rw-r--r--arm9/asm/SOC_socl_poll.s93
-rw-r--r--arm9/asm/SOC_socl_read.s1203
-rw-r--r--arm9/asm/SOC_socl_shutdown.s90
-rw-r--r--arm9/asm/SOC_socl_ssl.s110
-rw-r--r--arm9/asm/SOC_socl_startup.s236
-rw-r--r--arm9/asm/libVCT.s8
-rw-r--r--arm9/asm/unk_020910EC.s4126
-rw-r--r--arm9/global.inc100
-rw-r--r--arm9/modules/04/asm/arm_04.s102
-rw-r--r--arm9/modules/13/asm/module_13_thumb.s38
-rw-r--r--arm9/modules/79/asm/module_79_arm.s2
21 files changed, 4359 insertions, 4229 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
index 6ef2b114..59de4650 100644
--- a/arm9/arm9.lcf
+++ b/arm9/arm9.lcf
@@ -431,6 +431,20 @@ SECTIONS {
unk_0208AC14.o (.text)
custom_allocator.o (.text)
unk_020910EC.o (.text)
+ SOC_socl_startup.o (.text)
+ SOC_socl_command.o (.text)
+ SOC_socl_create.o (.text)
+ SOC_socl_bind.o (.text)
+ SOC_socl_read.o (.text)
+ SOC_socl_shutdown.o (.text)
+ SOC_socl_close.o (.text)
+ SOC_socl_cleanup.o (.text)
+ SOC_socl_poll.o (.text)
+ SOC_socl_const.o (.text)
+ SOC_socl_misc.o (.text)
+ SOC_socl_list.o (.text)
+ SOC_soc.o (.text)
+ SOC_socl_ssl.o (.text)
CPS_network.o (.text)
SSL_ssl.o (.text)
SSL_md5.o (.text)
@@ -712,6 +726,7 @@ SECTIONS {
unk_02089F24.o (.rodata)
unk_0208A998.o (.rodata)
unk_020910EC.o (.rodata)
+ SOC_soc.o (.rodata)
CPS_network.o (.rodata)
SSL_ssl.o (.rodata)
SSL_md5.o (.rodata)
@@ -772,6 +787,8 @@ SECTIONS {
unk_020893E0.o (.data)
unk_0208AC14.o (.data)
unk_020910EC.o (.data)
+ SOC_socl_bind.o (.data)
+ SOC_soc.o (.data)
CPS_network.o (.data)
SSL_ssl.o (.data)
SSL_md5.o (.data)
@@ -858,6 +875,11 @@ SECTIONS {
unk_0208AC14.o (.bss)
custom_allocator.o (.bss)
unk_020910EC.o (.bss)
+ SOC_socl_startup.o (.bss)
+ SOC_socl_command.o (.bss)
+ SOC_socl_read.o (.bss)
+ SOC_socl_list.o (.bss)
+ SOC_soc.o (.bss)
CPS_network.o (.bss)
SSL_ssl.o (.bss)
SSL_md5.o (.bss)
diff --git a/arm9/asm/SOC_soc.s b/arm9/asm/SOC_soc.s
new file mode 100644
index 00000000..506a16eb
--- /dev/null
+++ b/arm9/asm/SOC_soc.s
@@ -0,0 +1,758 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global SOCLSocketParamUDP
+SOCLSocketParamUDP: ; 0x021061C4
+ .byte 0x01, 0x01, 0xC0, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08
+ .byte 0x00, 0x08, 0x0C, 0x20, 0x00, 0x00, 0x00, 0x00
+
+ .global SOCLSocketParamTCP
+SOCLSocketParamTCP: ; 0x021061DC
+ .byte 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x66, 0x04, 0x00, 0x00, 0x00, 0x00, 0x61, 0x08, 0x00, 0x00
+ .byte 0x00, 0x08, 0x0C, 0x20, 0x00, 0x08, 0x0D, 0x20
+
+ .global SOCLSocketParamUDPSend
+SOCLSocketParamUDPSend: ; 0x021061F4
+ .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x05, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x06, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0D, 0x20
+
+ .global UNK_0210620C
+UNK_0210620C: ; 0x0210620C
+ .byte 0x25, 0x64, 0x2E, 0x25, 0x64, 0x2E, 0x25, 0x64, 0x2E, 0x25, 0x64, 0x00
+
+ .section .bss
+
+ .global UNK_021C8D38
+UNK_021C8D38: ; 0x021C8D38
+ .space 0x4
+
+ .global FreeFunc_SOC
+FreeFunc_SOC: ; 0x021C8D3C
+ .space 0x4
+
+ .global AllocFunc_SOC
+AllocFunc_SOC: ; 0x021C8D40
+ .space 0x4
+
+ .global UNK_021C8D44
+UNK_021C8D44: ; 0x021C8D44
+ .space 0x8
+
+ .global UNK_021C8D4C
+UNK_021C8D4C: ; 0x021C8D4C
+ .space 0x10
+
+ .global UNK_021C8D5C
+UNK_021C8D5C: ; 0x021C8D5C
+ .space 0x10
+
+ .global UNK_021C8D6C
+UNK_021C8D6C: ; 0x021C8D6C
+ .space 0x38
+
+ .global UNK_021C8DA4
+UNK_021C8DA4: ; 0x021C8DA4
+ .space 0x104
+
+ .text
+
+ arm_func_start SOC_Poll
+SOC_Poll: ; 0x0209A0AC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r9, r2
+ str r0, [sp, #0x0]
+ mov r0, #0x1
+ str r0, [sp, #0x8]
+ mov r0, #0x0
+ mov r8, r3
+ mvn r2, #0x0
+ cmp r8, r2
+ cmpeq r9, r2
+ movne r11, #0x1
+ mov r10, r1
+ moveq r11, #0x0
+ str r0, [sp, #0x4]
+_0209A0E8:
+ ldr r5, [sp, #0x4]
+ ldr r7, [sp, #0x0]
+ mov r6, r5
+ cmp r10, #0x0
+ bls _0209A128
+_0209A0FC:
+ ldrsh r1, [r7, #0x4]
+ ldr r0, [r7, #0x0]
+ orr r4, r1, #0xe0
+ bl SOCL_GetStatus
+ ands r0, r4, r0
+ strh r0, [r7, #0x6]
+ add r6, r6, #0x1
+ addne r5, r5, #0x1
+ cmp r6, r10
+ add r7, r7, #0x8
+ blo _0209A0FC
+_0209A128:
+ cmp r5, #0x0
+ bgt _0209A160
+ cmp r11, #0x0
+ beq _0209A148
+ mov r1, #0x0
+ subs r0, r1, r9
+ sbcs r0, r1, r8
+ bge _0209A160
+_0209A148:
+ ldr r0, [sp, #0x8]
+ bl OS_Sleep
+ ldr r0, _0209A170 ; =0x0000020B
+ subs r9, r9, r0
+ sbc r8, r8, #0x0
+ b _0209A0E8
+_0209A160:
+ mov r0, r5
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209A170: .word 0x0000020B
+
+ arm_func_start SOC_U32to4U8
+SOC_U32to4U8: ; 0x0209A174
+ mov r2, r0, lsr #0x18
+ strb r2, [r1, #0x0]
+ mov r2, r0, lsr #0x10
+ strb r2, [r1, #0x1]
+ mov r2, r0, lsr #0x8
+ strb r2, [r1, #0x2]
+ strb r0, [r1, #0x3]
+ bx lr
+
+ arm_func_start SOC_InetNtoP
+SOC_InetNtoP: ; 0x0209A194
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x18
+ cmp r0, #0x2
+ mov r4, r2
+ addne sp, sp, #0x18
+ movne r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ cmp r3, #0x10
+ addcc sp, sp, #0x18
+ movcc r0, #0x0
+ ldmccia sp!, {r4,lr}
+ bxcc lr
+ mov r0, r1
+ add r1, sp, #0xc
+ mov r2, #0x4
+ bl MI_CpuCopy8
+ ldr r0, [sp, #0xc]
+ add r1, sp, #0x10
+ bl SOC_U32to4U8
+ ldrb r1, [sp, #0x12]
+ ldr r2, _0209A220 ; =UNK_0210620C
+ mov r0, r4
+ str r1, [sp, #0x0]
+ ldrb r3, [sp, #0x11]
+ mov r1, #0x10
+ str r3, [sp, #0x4]
+ ldrb r3, [sp, #0x10]
+ str r3, [sp, #0x8]
+ ldrb r3, [sp, #0x13]
+ bl OS_SNPrintf
+ mov r0, r4
+ add sp, sp, #0x18
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209A220: .word UNK_0210620C
+
+ arm_func_start SOC_InetAtoN
+SOC_InetAtoN: ; 0x0209A224
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ bl SOCL_InetAtoH
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ mov r2, r0, lsr #0x18
+ mov r1, r0, lsr #0x8
+ mov r3, r0, lsl #0x8
+ mov r12, r0, lsl #0x18
+ and r2, r2, #0xff
+ and r0, r1, #0xff00
+ and r1, r3, #0xff0000
+ orr r0, r2, r0
+ and r2, r12, #0xff000000
+ orr r0, r1, r0
+ orr r0, r2, r0
+ str r0, [r4, #0x0]
+ mov r0, #0x1
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start SOC_InetNtoA
+SOC_InetNtoA: ; 0x0209A27C
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _0209A2B0 ; =UNK_021C8D5C
+ add r1, sp, #0x8
+ mov r0, #0x2
+ mov r3, #0x10
+ bl SOC_InetNtoP
+ ldr r0, _0209A2B0 ; =UNK_021C8D5C
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_0209A2B0: .word UNK_021C8D5C
+
+ arm_func_start SOC_Cleanup
+SOC_Cleanup: ; 0x0209A2B4
+ ldr ip, _0209A2BC ; =SOCL_Cleanup
+ bx r12
+ .balign 4
+_0209A2BC: .word SOCL_Cleanup
+
+ arm_func_start SOC_Startup
+SOC_Startup: ; 0x0209A2C0
+ stmdb sp!, {r4-r8,lr}
+ ldr r1, [r0, #0xc]
+ ldr ip, _0209A430 ; =UNK_021C8D6C
+ cmp r1, #0x1
+ moveq r1, #0x1
+ movne r1, #0x0
+ str r1, [r12, #0x0]
+ ldr r6, [r0, #0x10]
+ ldr r5, _0209A434 ; =AllocFunc_SOCL
+ mov r2, r6, lsr #0x18
+ mov r1, r6, lsr #0x8
+ mov r3, r6, lsl #0x8
+ and r2, r2, #0xff
+ and r1, r1, #0xff00
+ mov r6, r6, lsl #0x18
+ orr r1, r2, r1
+ and r3, r3, #0xff0000
+ orr r1, r3, r1
+ and r2, r6, #0xff000000
+ orr r1, r2, r1
+ str r1, [r12, #0x4]
+ ldr r7, [r0, #0x14]
+ ldr r4, _0209A438 ; =FreeFunc_SOCL
+ mov r2, r7, lsr #0x18
+ mov r1, r7, lsr #0x8
+ mov r6, r7, lsl #0x8
+ and r2, r2, #0xff
+ and r1, r1, #0xff00
+ mov r7, r7, lsl #0x18
+ orr r1, r2, r1
+ and r6, r6, #0xff0000
+ and r2, r7, #0xff000000
+ orr r1, r6, r1
+ orr r1, r2, r1
+ str r1, [r12, #0x8]
+ ldr r1, [r0, #0x18]
+ ldr r3, _0209A43C ; =AllocFunc_SOC
+ mov r7, r1, lsr #0x18
+ mov r6, r1, lsr #0x8
+ mov r8, r1, lsl #0x8
+ and r7, r7, #0xff
+ and r6, r6, #0xff00
+ mov r1, r1, lsl #0x18
+ orr r6, r7, r6
+ and r8, r8, #0xff0000
+ and r7, r1, #0xff000000
+ orr r1, r8, r6
+ orr r1, r7, r1
+ str r1, [r12, #0xc]
+ ldr r1, [r0, #0x1c]
+ ldr r2, _0209A440 ; =FreeFunc_SOC
+ mov r7, r1, lsr #0x18
+ mov r6, r1, lsr #0x8
+ mov r8, r1, lsl #0x8
+ and r7, r7, #0xff
+ and r6, r6, #0xff00
+ mov r1, r1, lsl #0x18
+ orr r6, r7, r6
+ and r8, r8, #0xff0000
+ and r7, r1, #0xff000000
+ orr r1, r8, r6
+ orr r1, r7, r1
+ str r1, [r12, #0x10]
+ ldr r1, [r0, #0x20]
+ mov lr, #0x40
+ mov r7, r1, lsr #0x18
+ mov r6, r1, lsr #0x8
+ mov r8, r1, lsl #0x8
+ and r7, r7, #0xff
+ and r6, r6, #0xff00
+ mov r1, r1, lsl #0x18
+ orr r6, r7, r6
+ and r8, r8, #0xff0000
+ and r7, r1, #0xff000000
+ orr r1, r8, r6
+ orr r1, r7, r1
+ str r5, [r12, #0x18]
+ str r4, [r12, #0x1c]
+ str r1, [r12, #0x14]
+ ldr r1, [r0, #0x4]
+ str r1, [r3, #0x0]
+ ldr r1, [r0, #0x8]
+ str lr, [r12, #0x20]
+ str r1, [r2, #0x0]
+ ldr r1, [r0, #0x2c]
+ str r1, [r12, #0x30]
+ ldr r1, [r0, #0x30]
+ mov r0, r12
+ str r1, [r12, #0x34]
+ bl SOCL_Startup
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209A430: .word UNK_021C8D6C
+_0209A434: .word AllocFunc_SOCL
+_0209A438: .word FreeFunc_SOCL
+_0209A43C: .word AllocFunc_SOC
+_0209A440: .word FreeFunc_SOC
+
+ arm_func_start FreeFunc_SOCL
+FreeFunc_SOCL: ; 0x0209A444
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldr r1, _0209A480 ; =FreeFunc_SOC
+ ldr r2, [r0, #-0x4]
+ ldr r3, [r1, #0x0]
+ sub r1, r0, #0x4
+ mov r0, #0x0
+ blx r3
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209A480: .word FreeFunc_SOC
+
+ arm_func_start AllocFunc_SOCL
+AllocFunc_SOCL: ; 0x0209A484
+ stmdb sp!, {r4,lr}
+ ldr r1, _0209A4B0 ; =AllocFunc_SOC
+ add r4, r0, #0x4
+ ldr r2, [r1, #0x0]
+ mov r1, r4
+ mov r0, #0x0
+ blx r2
+ cmp r0, #0x0
+ strne r4, [r0], #0x4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209A4B0: .word AllocFunc_SOC
+
+ arm_func_start SOC_Fcntl
+SOC_Fcntl: ; 0x0209A4B4
+ cmp r0, #0x0
+ mvneq r0, #0x0
+ bxeq lr
+ cmp r1, #0x3
+ beq _0209A4D4
+ cmp r1, #0x4
+ beq _0209A4E8
+ b _0209A4FC
+_0209A4D4:
+ ldrsb r0, [r0, #0x72]
+ cmp r0, #0x1
+ moveq r0, #0x0
+ movne r0, #0x4
+ bx lr
+_0209A4E8:
+ ands r1, r2, #0x4
+ movne r1, #0x0
+ strneb r1, [r0, #0x72]
+ moveq r1, #0x1
+ streqb r1, [r0, #0x72]
+_0209A4FC:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start SOC_Accept
+SOC_Accept: ; 0x0209A504
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ mov r4, r1
+ add r1, sp, #0x0
+ add r2, sp, #0x4
+ bl SOCL_Accept
+ cmp r0, #0x0
+ addlt sp, sp, #0x8
+ ldmltia sp!, {r4,lr}
+ bxlt lr
+ ldrh r1, [sp, #0x0]
+ mov r2, r1, asr #0x8
+ mov r1, r1, lsl #0x8
+ and r2, r2, #0xff
+ and r1, r1, #0xff00
+ orr r1, r2, r1
+ strh r1, [r4, #0x2]
+ ldr r12, [sp, #0x4]
+ mov r2, r12, lsr #0x18
+ mov r1, r12, lsr #0x8
+ mov r3, r12, lsl #0x8
+ mov r12, r12, lsl #0x18
+ and r2, r2, #0xff
+ and r1, r1, #0xff00
+ and r3, r3, #0xff0000
+ orr r1, r2, r1
+ and r2, r12, #0xff000000
+ orr r1, r3, r1
+ orr r1, r2, r1
+ str r1, [r4, #0x4]
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start SOC_Listen
+SOC_Listen: ; 0x0209A588
+ ldr ip, _0209A590 ; =SOCL_Listen
+ bx r12
+ .balign 4
+_0209A590: .word SOCL_Listen
+
+ arm_func_start SOC_GetResolver
+SOC_GetResolver: ; 0x0209A594
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r12, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ mov r2, r12, lsr #0x18
+ mov r4, r0, lsr #0x18
+ mov lr, r0, lsr #0x8
+ mov r1, r12, lsr #0x8
+ mov r5, r0, lsl #0x8
+ mov r3, r12, lsl #0x8
+ mov r0, r0, lsl #0x18
+ mov r12, r12, lsl #0x18
+ and r4, r4, #0xff
+ and lr, lr, #0xff00
+ and r2, r2, #0xff
+ and r1, r1, #0xff00
+ and r5, r5, #0xff0000
+ orr r4, r4, lr
+ and r3, r3, #0xff0000
+ orr r1, r2, r1
+ and lr, r0, #0xff000000
+ orr r0, r5, r4
+ and r2, r12, #0xff000000
+ orr r1, r3, r1
+ orr r0, lr, r0
+ orr r1, r2, r1
+ bl SOCL_SetResolver
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start SOC_GetHostID
+SOC_GetHostID: ; 0x0209A60C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl SOCL_GetHostID
+ mov r2, r0, lsr #0x18
+ mov r1, r0, lsr #0x8
+ mov r3, r0, lsl #0x8
+ mov r12, r0, lsl #0x18
+ and r2, r2, #0xff
+ and r0, r1, #0xff00
+ and r1, r3, #0xff0000
+ orr r0, r2, r0
+ and r2, r12, #0xff000000
+ orr r0, r1, r0
+ orr r0, r2, r0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SOC_GetSockName
+SOC_GetSockName: ; 0x0209A650
+ stmdb sp!, {r4-r6,lr}
+ movs r5, r0
+ mov r4, r1
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ bl SOCL_GetHostID
+ cmp r5, #0x0
+ ldrneh r1, [r5, #0x74]
+ mov r2, r0, lsr #0x18
+ mov r6, #0x8
+ moveq r1, #0x0
+ cmp r0, #0x0
+ moveq r1, #0x0
+ mov r1, r1, lsl #0x10
+ mov r3, r1, lsr #0x10
+ mov r5, r3, asr #0x8
+ mov lr, r3, lsl #0x8
+ strb r6, [r4, #0x0]
+ mov r6, #0x2
+ mov r1, r0, lsr #0x8
+ mov r3, r0, lsl #0x8
+ mov r12, r0, lsl #0x18
+ and r0, r1, #0xff00
+ and r2, r2, #0xff
+ orr r0, r2, r0
+ and r1, r3, #0xff0000
+ and r5, r5, #0xff
+ and lr, lr, #0xff00
+ strb r6, [r4, #0x1]
+ orr r3, r5, lr
+ and r2, r12, #0xff000000
+ orr r0, r1, r0
+ strh r3, [r4, #0x2]
+ orr r0, r2, r0
+ str r0, [r4, #0x4]
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start SOC_GetHostByAddr
+SOC_GetHostByAddr: ; 0x0209A6EC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl SOCL_Resolve
+ movs r4, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r0, _0209A7A4 ; =UNK_021C8DA4
+ ldr r2, _0209A7A8 ; =0x00000101
+ mov r1, #0x0
+ bl MI_CpuFill8
+ ldr r0, _0209A7A4 ; =UNK_021C8DA4
+ ldr r2, _0209A7A8 ; =0x00000101
+ mov r1, r5
+ bl STD_CopyLString
+ mov r1, r4, lsr #0x18
+ mov r0, r4, lsr #0x8
+ mov r2, r4, lsl #0x8
+ mov r3, r4, lsl #0x18
+ and r1, r1, #0xff
+ and r0, r0, #0xff00
+ and r2, r2, #0xff0000
+ orr r0, r1, r0
+ and r3, r3, #0xff000000
+ orr r1, r2, r0
+ ldr r5, _0209A7A4 ; =UNK_021C8DA4
+ ldr r0, _0209A7AC ; =UNK_021C8D4C
+ ldr ip, _0209A7B0 ; =UNK_021C8D44
+ mov r4, #0x0
+ ldr r2, _0209A7B4 ; =UNK_021C8D38
+ orr r1, r3, r1
+ mov lr, #0x2
+ mov r3, #0x4
+ str r5, [r0, #0x0]
+ str r4, [r0, #0x4]
+ strh lr, [r0, #0x8]
+ strh r3, [r0, #0xa]
+ str r12, [r0, #0xc]
+ str r2, [r12, #0x0]
+ str r4, [r12, #0x4]
+ str r1, [r2, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0209A7A4: .word UNK_021C8DA4 ; entName
+_0209A7A8: .word 0x00000101
+_0209A7AC: .word UNK_021C8D4C ; hostent
+_0209A7B0: .word UNK_021C8D44 ; hostAddrList
+_0209A7B4: .word UNK_021C8D38 ; hostip
+
+ arm_func_start SOC_Close
+SOC_Close: ; 0x0209A7B8
+ ldr ip, _0209A7C0 ; =SOCL_Close
+ bx r12
+ .balign 4
+_0209A7C0: .word SOCL_Close
+
+ arm_func_start SOC_Shutdown
+SOC_Shutdown: ; 0x0209A7C4
+ ldr ip, _0209A7CC ; =SOCL_Shutdown
+ bx r12
+ .balign 4
+_0209A7CC: .word SOCL_Shutdown
+
+ arm_func_start SOC_SendTo
+SOC_SendTo: ; 0x0209A7D0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ ldr r5, [sp, #0x20]
+ cmp r5, #0x0
+ moveq r5, #0x0
+ moveq r4, r5
+ beq _0209A83C
+ ldrh r4, [r5, #0x2]
+ ldr r6, [r5, #0x4]
+ mov r7, r4, asr #0x8
+ mov r12, r4, lsl #0x8
+ mov r4, r6, lsr #0x18
+ mov lr, r6, lsr #0x8
+ mov r5, r6, lsl #0x8
+ mov r6, r6, lsl #0x18
+ and r7, r7, #0xff
+ and r12, r12, #0xff00
+ orr r7, r7, r12
+ and r4, r4, #0xff
+ and lr, lr, #0xff00
+ and r5, r5, #0xff0000
+ orr r4, r4, lr
+ mov r12, r7, lsl #0x10
+ orr r4, r5, r4
+ and r6, r6, #0xff000000
+ mov r5, r12, lsr #0x10
+ orr r4, r6, r4
+_0209A83C:
+ str r4, [sp, #0x0]
+ str r3, [sp, #0x4]
+ mov r3, r5
+ bl SOCL_WriteTo
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start SOC_Send
+SOC_Send: ; 0x0209A858
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ str r3, [sp, #0x4]
+ mov r3, r12
+ bl SOCL_WriteTo
+ add sp, sp, #0xc
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SOC_RecvFrom
+SOC_RecvFrom: ; 0x0209A880
+ stmdb sp!, {lr}
+ sub sp, sp, #0x14
+ add r12, sp, #0xc
+ str r12, [sp, #0x0]
+ str r3, [sp, #0x4]
+ add r3, sp, #0x8
+ bl SOCLi_ReadFrom
+ cmp r0, #0x0
+ addlt sp, sp, #0x14
+ ldmltia sp!, {lr}
+ bxlt lr
+ ldr r1, [sp, #0x18]
+ cmp r1, #0x0
+ addeq sp, sp, #0x14
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldrh r2, [sp, #0x8]
+ mov r3, r2, asr #0x8
+ mov r2, r2, lsl #0x8
+ and r3, r3, #0xff
+ and r2, r2, #0xff00
+ orr r2, r3, r2
+ strh r2, [r1, #0x2]
+ ldr lr, [sp, #0xc]
+ mov r3, lr, lsr #0x18
+ mov r2, lr, lsr #0x8
+ mov r12, lr, lsl #0x8
+ mov lr, lr, lsl #0x18
+ and r3, r3, #0xff
+ and r2, r2, #0xff00
+ and r12, r12, #0xff0000
+ orr r2, r3, r2
+ and r3, lr, #0xff000000
+ orr r2, r12, r2
+ orr r2, r3, r2
+ str r2, [r1, #0x4]
+ add sp, sp, #0x14
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SOC_Read
+SOC_Read: ; 0x0209A91C
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ str r3, [sp, #0x4]
+ mov r3, r12
+ bl SOCLi_ReadFrom
+ add sp, sp, #0xc
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SOC_Connect
+SOC_Connect: ; 0x0209A944
+ stmdb sp!, {r4,lr}
+ ldrh r2, [r1, #0x2]
+ ldr lr, [r1, #0x4]
+ mov r4, r2, asr #0x8
+ mov r1, r2, lsl #0x8
+ mov r3, lr, lsr #0x18
+ mov r2, lr, lsr #0x8
+ mov r12, lr, lsl #0x8
+ mov lr, lr, lsl #0x18
+ and r4, r4, #0xff
+ and r1, r1, #0xff00
+ orr r1, r4, r1
+ mov r1, r1, lsl #0x10
+ and r3, r3, #0xff
+ and r2, r2, #0xff00
+ and r12, r12, #0xff0000
+ orr r2, r3, r2
+ and r3, lr, #0xff000000
+ orr r2, r12, r2
+ mov r1, r1, lsr #0x10
+ orr r2, r3, r2
+ bl SOCL_Connect
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start SOC_Bind
+SOC_Bind: ; 0x0209A9A4
+ ldrh r1, [r1, #0x2]
+ ldr ip, _0209A9CC ; =SOCL_Bind
+ mov r2, r1, asr #0x8
+ mov r1, r1, lsl #0x8
+ and r2, r2, #0xff
+ and r1, r1, #0xff00
+ orr r1, r2, r1
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ bx r12
+ .balign 4
+_0209A9CC: .word SOCL_Bind
+
+ arm_func_start SOC_Socket
+SOC_Socket: ; 0x0209A9D0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x1
+ bne _0209A9F4
+ ldr r0, _0209AA08 ; =SOCLSocketParamTCP
+ bl SOCL_CreateSocket
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209A9F4:
+ ldr r0, _0209AA0C ; =SOCLSocketParamUDP
+ bl SOCL_CreateSocket
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209AA08: .word SOCLSocketParamTCP
+_0209AA0C: .word SOCLSocketParamUDP
diff --git a/arm9/asm/SOC_socl_bind.s b/arm9/asm/SOC_socl_bind.s
new file mode 100644
index 00000000..4f9c54e5
--- /dev/null
+++ b/arm9/asm/SOC_socl_bind.s
@@ -0,0 +1,198 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .balign 4, 0
+ .global SOCLiResultCodeInConnecting
+SOCLiResultCodeInConnecting: ; 0x021061C0
+ .word -26
+
+ .text
+
+ arm_func_start SOCLi_BindCallBack
+SOCLi_BindCallBack: ; 0x020982C4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ ldr r4, [r7, #0x4]
+ mov r5, #0x0
+ ldr r6, [r4, #0x64]
+ add r0, r6, #0xe0
+ bl OS_LockMutex
+ ldrh r0, [r7, #0x10]
+ ldrh r1, [r7, #0x12]
+ ldr r2, [r7, #0x14]
+ bl CPS_SocPingMode
+ mov r0, r5
+ str r0, [r6, #0xf8]
+ ldrsb r0, [r7, #0xc]
+ cmp r0, #0x0
+ beq _02098310
+ cmp r0, #0x4
+ bne _02098318
+_02098310:
+ bl CPS_TcpConnect
+ mov r5, r0
+_02098318:
+ add r0, r6, #0xe0
+ bl OS_UnlockMutex
+ cmp r5, #0x0
+ ldrnesh r1, [r4, #0x70]
+ mvnne r0, #0x4b
+ moveq r0, #0x0
+ orrne r1, r1, #0x40
+ strneh r1, [r4, #0x70]
+ ldreqsh r1, [r4, #0x70]
+ orreq r1, r1, #0x4
+ streqh r1, [r4, #0x70]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start SOCLi_ExecBindCommand
+SOCLi_ExecBindCommand: ; 0x02098350
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldrsb r2, [r4, #0x72]
+ ldr r0, _020983AC ; =SOCLi_BindCallBack
+ mov r1, r4
+ bl SOCLi_CreateCommandPacket
+ movs r1, r0
+ mvneq r0, #0x20
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrh r2, [r4, #0x74]
+ mov r0, r4
+ strh r2, [r1, #0x10]
+ ldrh r2, [r4, #0x76]
+ strh r2, [r1, #0x12]
+ ldr r2, [r4, #0x78]
+ str r2, [r1, #0x14]
+ ldrsh r2, [r4, #0x70]
+ orr r2, r2, #0x2
+ strh r2, [r4, #0x70]
+ bl SOCLi_ExecCommandPacketInRecvPipe
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_020983AC: .word SOCLi_BindCallBack
+
+ arm_func_start SOCL_Connect
+SOCL_Connect: ; 0x020983B0
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ bne _020983D8
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x8
+ beq _020983E4
+_020983D8:
+ mvn r0, #0x1b
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_020983E4:
+ cmp r6, #0x0
+ mov r1, #0x0
+ beq _020983FC
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_020983FC:
+ cmp r1, #0x0
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrsb r0, [r6, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _02098424
+ cmp r0, #0x4
+ movne r1, #0x0
+_02098424:
+ cmp r1, #0x0
+ beq _0209849C
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x4
+ beq _02098450
+ ldrsb r0, [r6, #0x72]
+ cmp r0, #0x1
+ mvneq r0, #0x1d
+ movne r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_02098450:
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x2
+ beq _02098478
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x40
+ ldrne r0, [r6, #0x6c]
+ ldreq r0, _020984B0 ; =SOCLiResultCodeInConnecting
+ ldreq r0, [r0, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_02098478:
+ strh r5, [r6, #0x76]
+ mov r0, r6
+ str r4, [r6, #0x78]
+ bl SOCLi_ExecBindCommand
+ ldrsb r1, [r6, #0x72]
+ cmp r1, #0x1
+ mvnne r0, #0x19
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209849C:
+ strh r5, [r6, #0x76]
+ str r4, [r6, #0x78]
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020984B0: .word SOCLiResultCodeInConnecting
+
+ arm_func_start SOCL_Bind
+SOCL_Bind:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ mov r5, r1
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ cmp r4, #0x0
+ mov r1, #0x0
+ beq _020984F4
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_020984F4:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x2
+ addne sp, sp, #0x4
+ mvnne r0, #0x6
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ strh r5, [r4, #0x74]
+ ldrsb r0, [r4, #0x73]
+ cmp r0, #0x1
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ mov r0, r4
+ bl SOCLi_ExecBindCommand
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
diff --git a/arm9/asm/SOC_socl_cleanup.s b/arm9/asm/SOC_socl_cleanup.s
new file mode 100644
index 00000000..5eb8b949
--- /dev/null
+++ b/arm9/asm/SOC_socl_cleanup.s
@@ -0,0 +1,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
diff --git a/arm9/asm/SOC_socl_close.s b/arm9/asm/SOC_socl_close.s
new file mode 100644
index 00000000..b15b611d
--- /dev/null
+++ b/arm9/asm/SOC_socl_close.s
@@ -0,0 +1,288 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start SOCLi_TrashSocket
+SOCLi_TrashSocket: ; 0x020996C0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ ldr r4, _02099704 ; =SOCLiSocketListTrash
+ mov r5, r0
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _020996F0
+_020996E0:
+ bl SOCLi_CleanupSocket
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ bne _020996E0
+_020996F0:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_02099704: .word SOCLiSocketListTrash
+
+ arm_func_start SOCLi_FreeCommandPipe
+SOCLi_FreeCommandPipe: ; 0x02099708
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ movs r8, r0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ add r0, r8, #0x20
+ bl OS_JoinThread
+ bl OS_DisableInterrupts
+ mov r7, r0
+ bl OS_DisableScheduler
+ add r1, sp, #0x0
+ mov r0, r8
+ mov r2, #0x0
+ bl OS_ReceiveMessage
+ cmp r0, #0x0
+ beq _0209979C
+ add r4, sp, #0x0
+ mvn r6, #0xa
+ mov r5, #0x0
+_02099758:
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x0
+ beq _02099784
+ ldr r0, [r0, #0x8]
+ cmp r0, #0x0
+ beq _0209977C
+ mov r1, r6
+ mov r2, r5
+ bl OS_SendMessage
+_0209977C:
+ ldr r0, [sp, #0x0]
+ bl SOCLi_FreeCommandPacket
+_02099784:
+ mov r0, r8
+ mov r1, r4
+ mov r2, r5
+ bl OS_ReceiveMessage
+ cmp r0, #0x0
+ bne _02099758
+_0209979C:
+ bl OS_EnableScheduler
+ bl OS_RescheduleThread
+ mov r0, r7
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start SOCLi_CleanupSocket
+SOCLi_CleanupSocket:
+ stmdb sp!, {r4-r6,lr}
+ movs r4, r0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ mov r0, #0x0
+ strh r0, [r4, #0x70]
+ ldrsb r1, [r4, #0x73]
+ mov r2, #0x1
+ cmp r1, #0x0
+ beq _020997E8
+ cmp r1, #0x4
+ movne r2, r0
+_020997E8:
+ cmp r2, #0x0
+ beq _02099804
+ ldr r0, [r4, #0x68]
+ bl SOCLi_FreeCommandPipe
+ ldr r0, [r4, #0x64]
+ bl SOCLi_FreeCommandPipe
+ b _02099884
+_02099804:
+ cmp r1, #0x1
+ bne _02099874
+ ldr r0, [r4, #0x64]
+ ldr r0, [r0, #0x104]
+ cmp r0, #0x0
+ beq _0209983C
+ ldr r5, _020998C0 ; =SOCLiConfigPtr
+_02099820:
+ ldr r1, [r5, #0x0]
+ ldr r6, [r0, #0x0]
+ ldr r1, [r1, #0x1c]
+ blx r1
+ mov r0, r6
+ cmp r6, #0x0
+ bne _02099820
+_0209983C:
+ ldr r0, [r4, #0x64]
+ mov r1, #0x0
+ add r0, r0, #0x100
+ strh r1, [r0, #0x8]
+ ldr r0, [r4, #0x64]
+ str r1, [r0, #0x100]
+ ldr r0, [r4, #0x64]
+ str r1, [r0, #0x104]
+ ldr r0, [r4, #0x64]
+ add r0, r0, #0x10c
+ bl OS_WakeupThread
+ ldr r0, [r4, #0x64]
+ bl SOCLi_FreeCommandPipe
+ b _02099884
+_02099874:
+ cmp r1, #0x2
+ bne _02099884
+ ldr r0, [r4, #0x68]
+ bl SOCLi_FreeCommandPipe
+_02099884:
+ bl OS_DisableInterrupts
+ mov r5, r0
+ mov r0, r4
+ bl SOCLi_SocketUnregister
+ mov r0, r4
+ bl SOCLi_SocketUnregisterTrash
+ ldr r1, _020998C0 ; =SOCLiConfigPtr
+ mov r0, r4
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x1c]
+ blx r1
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_020998C0: .word SOCLiConfigPtr
+
+ arm_func_start SOCLi_CloseCallBack
+SOCLi_CloseCallBack: ; 0x020998C4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r4, [r0, #0x4]
+ mov r1, #0x1
+ ldrsb r0, [r4, #0x73]
+ cmp r0, #0x0
+ beq _020998E8
+ cmp r0, #0x4
+ movne r1, #0x0
+_020998E8:
+ cmp r1, #0x0
+ beq _02099908
+ ldr r0, [r4, #0x68]
+ add r0, r0, #0x20
+ bl OS_JoinThread
+ bl CPS_TcpShutdown
+ bl CPS_TcpClose
+ bl CPS_SocRelease
+_02099908:
+ bl CPS_SocUnRegister
+ ldrsh r0, [r4, #0x70]
+ mov r1, #0x0
+ bic r0, r0, #0x6
+ strh r0, [r4, #0x70]
+ ldrsb r0, [r4, #0x73]
+ cmp r0, #0x2
+ ldreq r0, [r4, #0x68]
+ ldrne r0, [r4, #0x64]
+ bl SOCLi_SendCommandPacket
+ bl OS_DisableInterrupts
+ mov r5, r0
+ mov r0, r4
+ bl SOCLi_SocketUnregister
+ mov r0, r4
+ bl SOCLi_SocketRegisterTrash
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldrsh r1, [r4, #0x70]
+ mov r0, #0x0
+ orr r1, r1, #0x20
+ strh r1, [r4, #0x70]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start SOCL_Close
+SOCL_Close: ; 0x0209996C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ cmp r4, #0x0
+ mvnle r0, #0x1b
+ ldmleia sp!, {r4,lr}
+ bxle lr
+ bl SOCL_SocketIsInTrash
+ cmp r0, #0x0
+ mvnne r0, #0x19
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ mov r0, r4
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ movne r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ cmp r4, #0x0
+ mov r1, #0x0
+ beq _020999C8
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_020999C8:
+ cmp r1, #0x0
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x10
+ mvnne r0, #0x19
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ ldrsh r0, [r4, #0x70]
+ mov r1, #0x1
+ orr r0, r0, #0x18
+ strh r0, [r4, #0x70]
+ ldrsb r0, [r4, #0x73]
+ cmp r0, #0x0
+ beq _02099A10
+ cmp r0, #0x4
+ movne r1, #0x0
+_02099A10:
+ cmp r1, #0x0
+ beq _02099A24
+ ldr r0, [r4, #0x68]
+ mov r1, #0x0
+ bl SOCLi_SendCommandPacket
+_02099A24:
+ ldr r0, _02099A54 ; =SOCLi_CloseCallBack
+ mov r1, r4
+ mov r2, #0x1
+ bl SOCLi_CreateCommandPacket
+ mov r1, r0
+ mov r2, #0x0
+ mov r0, r4
+ str r2, [r1, #0x8]
+ bl SOCLi_SendCommandPacketToCtrlPipe
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02099A54: .word SOCLi_CloseCallBack
+
+ arm_func_start SOCL_IsClosed
+SOCL_IsClosed:
+ stmdb sp!, {r4,lr}
+ movs r4, r0
+ bmi _02099A88
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ beq _02099A88
+ mov r0, r4
+ bl SOCL_SocketIsInTrash
+ cmp r0, #0x0
+ moveq r0, #0x1
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+_02099A88:
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
diff --git a/arm9/asm/SOC_socl_command.s b/arm9/asm/SOC_socl_command.s
new file mode 100644
index 00000000..693af250
--- /dev/null
+++ b/arm9/asm/SOC_socl_command.s
@@ -0,0 +1,300 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global SOCLiCommandPackets
+SOCLiCommandPackets: ; 0x021C8D04
+ .space 0x4
+
+ .global SOCLiCommandPacketQueue
+SOCLiCommandPacketQueue: ; 0x021C8D08
+ .space 0x20
+
+ .text
+
+ arm_func_start SOCLi_CommandPacketHandler
+SOCLi_CommandPacketHandler: ; 0x02097878
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r9, r0
+ add r6, sp, #0x0
+ mov r4, #0x0
+ mov r5, #0x1
+_02097890:
+ mov r0, r9
+ mov r1, r6
+ mov r2, r5
+ bl OS_ReadMessage
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ ldr r1, [r0, #0x0]
+ blx r1
+ mov r7, r0
+ bl OS_DisableInterrupts
+ mov r8, r0
+ bl OS_DisableScheduler
+ mov r0, r9
+ mov r1, r4
+ mov r2, r4
+ bl OS_ReceiveMessage
+ ldr r0, [sp, #0x0]
+ ldr r0, [r0, #0x4]
+ cmp r0, #0x0
+ strne r7, [r0, #0x6c]
+ ldr r0, [sp, #0x0]
+ ldr r0, [r0, #0x8]
+ cmp r0, #0x0
+ beq _02097908
+ mov r1, r7
+ mov r2, r4
+ bl OS_SendMessage
+_02097908:
+ ldr r0, [sp, #0x0]
+ bl SOCLi_FreeCommandPacket
+ bl OS_EnableScheduler
+ mov r0, r8
+ bl OS_RestoreInterrupts
+ b _02097890
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start SOCLi_ExecCommandPacketInCtrlPipe
+SOCLi_ExecCommandPacketInCtrlPipe: ; 0x0209792C
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ bl SOCLi_GetCtrlPipe
+ mov r1, r4
+ bl SOCLi_ExecCommandPacket
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start SOCLi_ExecCommandPacketInSendPipe
+SOCLi_ExecCommandPacketInSendPipe:
+ ldr ip, _02097954 ; =SOCLi_ExecCommandPacket
+ ldr r0, [r0, #0x68]
+ bx r12
+ .balign 4
+_02097954: .word SOCLi_ExecCommandPacket
+
+ arm_func_start SOCLi_ExecCommandPacketInRecvPipe
+SOCLi_ExecCommandPacketInRecvPipe: ; 0x02097958
+ ldr ip, _02097964 ; =SOCLi_ExecCommandPacket
+ ldr r0, [r0, #0x64]
+ bx r12
+ .balign 4
+_02097964: .word SOCLi_ExecCommandPacket
+
+ arm_func_start SOCLi_ExecCommandPacket
+SOCLi_ExecCommandPacket: ; 0x02097968
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x2c
+ mov r4, r1
+ ldrsb r2, [r4, #0xd]
+ mov r5, r0
+ cmp r2, #0x1
+ bne _020979BC
+ add r0, sp, #0x8
+ add r1, sp, #0x4
+ mov r2, #0x1
+ bl OS_InitMessageQueue
+ add r2, sp, #0x8
+ mov r0, r5
+ mov r1, r4
+ str r2, [r4, #0x8]
+ bl SOCLi_SendCommandPacket
+ add r0, sp, #0x8
+ add r1, sp, #0x0
+ mov r2, #0x1
+ bl OS_ReceiveMessage
+ b _020979CC
+_020979BC:
+ mov r2, #0x0
+ str r2, [r4, #0x8]
+ bl SOCLi_SendCommandPacket
+ str r0, [sp, #0x0]
+_020979CC:
+ ldr r0, [sp, #0x0]
+ add sp, sp, #0x2c
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start SOCLi_SendCommandPacketToCtrlPipe
+SOCLi_SendCommandPacketToCtrlPipe:
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ bl SOCLi_GetCtrlPipe
+ mov r1, r4
+ bl SOCLi_SendCommandPacket
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start SOCLi_SendCommandPacket
+SOCLi_SendCommandPacket:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ movs r5, r1
+ beq _02097A14
+ ldrsb r1, [r5, #0xd]
+ ands r1, r1, #0x1
+ beq _02097A1C
+_02097A14:
+ mov r2, #0x1
+ b _02097A20
+_02097A1C:
+ mov r2, #0x0
+_02097A20:
+ mov r1, r5
+ bl OS_SendMessage
+ movs r4, r0
+ bne _02097A38
+ mov r0, r5
+ bl SOCLi_FreeCommandPacket
+_02097A38:
+ cmp r4, #0x0
+ movne r0, #0x0
+ mvneq r0, #0x29
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start SOCLi_GetCtrlPipe
+SOCLi_GetCtrlPipe: ; 0x02097A50
+ ldr r1, [r0, #0x64]
+ cmp r1, #0x0
+ ldreq r1, [r0, #0x68]
+ mov r0, r1
+ bx lr
+
+ arm_func_start SOCLi_FreeCommandPacket
+SOCLi_FreeCommandPacket:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ movs r1, r0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldr r0, _02097A94 ; =SOCLiCommandPacketQueue
+ mov r2, #0x0
+ bl OS_SendMessage
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_02097A94: .word SOCLiCommandPacketQueue
+
+ arm_func_start SOCLi_CreateCommandPacket
+SOCLi_CreateCommandPacket: ; 0x02097A98
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r2
+ mov r6, r0
+ mov r0, r4
+ mov r5, r1
+ bl SOCLi_AllocCommandPacket
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ str r6, [r0, #0x0]
+ str r5, [r0, #0x4]
+ mov r1, #0x0
+ str r1, [r0, #0x8]
+ ldrsb r1, [r5, #0x73]
+ strb r1, [r0, #0xc]
+ strb r4, [r0, #0xd]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start SOCLi_AllocCommandPacket
+SOCLi_AllocCommandPacket:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r0
+ ldr r0, _02097B10 ; =SOCLiCommandPacketQueue
+ add r1, sp, #0x0
+ bl OS_ReceiveMessage
+ cmp r0, #0x0
+ ldrne r0, [sp, #0x0]
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_02097B10: .word SOCLiCommandPacketQueue
+
+ arm_func_start SOCLi_CleanupCommandPacketQueue
+SOCLi_CleanupCommandPacketQueue: ; 0x02097B14
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _02097B6C ; =SOCLiCommandPacketQueue
+ ldr r1, [r0, #0x1c]
+ ldr r0, [r0, #0x14]
+ cmp r1, r0
+ addlt sp, sp, #0x4
+ mvnlt r0, #0x0
+ ldmltia sp!, {lr}
+ bxlt lr
+ ldr r0, _02097B70 ; =SOCLiConfigPtr
+ ldr r1, _02097B74 ; =SOCLiCommandPackets
+ ldr r2, [r0, #0x0]
+ ldr r0, [r1, #0x0]
+ ldr r1, [r2, #0x1c]
+ blx r1
+ ldr r1, _02097B74 ; =SOCLiCommandPackets
+ mov r0, #0x0
+ str r0, [r1, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_02097B6C: .word SOCLiCommandPacketQueue
+_02097B70: .word SOCLiConfigPtr
+_02097B74: .word SOCLiCommandPackets
+
+ arm_func_start SOCLi_StartupCommandPacketQueue
+SOCLi_StartupCommandPacketQueue: ; 0x02097B78
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r0
+ mov r0, #0x2c
+ mul r1, r4, r0
+ ldr r0, _02097C08 ; =SOCLiConfigPtr
+ mov r2, r4, lsl #0x2
+ add r2, r2, #0x3
+ ldr r0, [r0, #0x0]
+ add r1, r1, #0x3
+ bic r5, r2, #0x3
+ bic r2, r1, #0x3
+ ldr r1, [r0, #0x18]
+ add r0, r2, r5
+ blx r1
+ movs r6, r0
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r0, _02097C0C ; =SOCLiCommandPacketQueue
+ mov r1, r6
+ mov r2, r4
+ bl OS_InitMessageQueue
+ cmp r4, #0x0
+ add r5, r6, r5
+ ble _02097BF4
+_02097BDC:
+ mov r0, r5
+ bl SOCLi_FreeCommandPacket
+ sub r4, r4, #0x1
+ cmp r4, #0x0
+ add r5, r5, #0x2c
+ bgt _02097BDC
+_02097BF4:
+ ldr r1, _02097C10 ; =SOCLiCommandPackets
+ mov r0, #0x0
+ str r6, [r1, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_02097C08: .word SOCLiConfigPtr
+_02097C0C: .word SOCLiCommandPacketQueue
+_02097C10: .word SOCLiCommandPackets
diff --git a/arm9/asm/SOC_socl_const.s b/arm9/asm/SOC_socl_const.s
new file mode 100644
index 00000000..1a4b032e
--- /dev/null
+++ b/arm9/asm/SOC_socl_const.s
@@ -0,0 +1,2 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
diff --git a/arm9/asm/SOC_socl_create.s b/arm9/asm/SOC_socl_create.s
new file mode 100644
index 00000000..8f8f42b2
--- /dev/null
+++ b/arm9/asm/SOC_socl_create.s
@@ -0,0 +1,491 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start SOCLi_InitCommandPipe
+SOCLi_InitCommandPipe: ; 0x02097C14
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ mov r5, r2
+ mov r7, r0
+ mov r0, r5
+ mov r6, r1
+ bl SOCLi_GetSizeCommandPipe
+ add r4, r7, r0
+ ldrb r2, [r5, #0x3]
+ mov r0, r6
+ mov r1, r7
+ bl OS_InitMessageQueue
+ add r0, r6, #0xe0
+ bl OS_InitMutex
+ ldrh r2, [r5, #0x0]
+ add r0, r6, #0x20
+ ldr r1, _02097C88 ; =SOCLi_CommandPacketHandler
+ str r2, [sp, #0x0]
+ ldrb r12, [r5, #0x2]
+ mov r2, r6
+ mov r3, r4
+ str r12, [sp, #0x4]
+ bl OS_CreateThread
+ add r0, r6, #0x20
+ bl OS_WakeupThreadDirect
+ mov r0, r4
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02097C88: .word SOCLi_CommandPacketHandler
+
+ arm_func_start SOCLi_InitSocketBuffer
+SOCLi_InitSocketBuffer: ; 0x02097C8C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ cmp r2, #0x0
+ moveq r0, #0x0
+ str r0, [r1, #0x4]
+ mov r0, r2
+ str r2, [r1, #0x0]
+ bl SOCLi_RoundUp4
+ add r0, r4, r0
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start SOCLi_InitSocket
+SOCLi_InitSocket: ; 0x02097CB8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r1
+ ldrsb r1, [r6, #0x0]
+ mov r7, r0
+ add r4, r7, #0x80
+ strb r1, [r7, #0x73]
+ ldrsb r0, [r6, #0x1]
+ strb r0, [r7, #0x72]
+ ldrh r0, [r6, #0x2]
+ cmp r0, #0x0
+ beq _02097D40
+ str r4, [r7, #0x64]
+ ldrh r2, [r6, #0x4]
+ mov r1, r4
+ add r0, r4, #0x114
+ strh r2, [r4, #0xfc]
+ add r2, r6, #0x10
+ mov r5, r4
+ bl SOCLi_InitCommandPipe
+ ldrh r2, [r6, #0x2]
+ add r1, r7, #0x3c
+ bl SOCLi_InitSocketBuffer
+ ldrh r2, [r6, #0x8]
+ add r1, r7, #0x50
+ bl SOCLi_InitSocketBuffer
+ ldrh r3, [r6, #0xe]
+ add r1, r5, #0x100
+ mov r2, #0x0
+ strh r3, [r1, #0xa]
+ str r2, [r5, #0x110]
+ ldr r1, [r5, #0x110]
+ mov r4, r0
+ str r1, [r5, #0x10c]
+_02097D40:
+ ldrh r0, [r6, #0x6]
+ cmp r0, #0x0
+ ldreq r0, _02097DC0 ; =SOCLiUDPSendSocket
+ ldreq r0, [r0, #0x0]
+ ldreq r0, [r0, #0x68]
+ streq r0, [r7, #0x68]
+ beq _02097DB0
+ str r4, [r7, #0x68]
+ mov r1, r4
+ str r7, [r4, #0x10c]
+ add r0, r4, #0x110
+ add r2, r6, #0x14
+ mov r5, r4
+ bl SOCLi_InitCommandPipe
+ ldrh r2, [r6, #0x6]
+ add r1, r7, #0x48
+ bl SOCLi_InitSocketBuffer
+ ldrh r2, [r6, #0xa]
+ add r1, r7, #0x58
+ bl SOCLi_InitSocketBuffer
+ ldrh r2, [r6, #0xc]
+ add r1, r4, #0xf8
+ bl SOCLi_InitSocketBuffer
+ mov r1, #0x0
+ str r1, [r5, #0x108]
+ ldr r1, [r5, #0x108]
+ mov r4, r0
+ str r1, [r5, #0x104]
+_02097DB0:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02097DC0: .word SOCLiUDPSendSocket
+
+ arm_func_start SOCLi_GetSizeCommandPipe
+SOCLi_GetSizeCommandPipe: ; 0x02097DC4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrb r0, [r5, #0x3]
+ mov r0, r0, lsl #0x2
+ bl SOCLi_RoundUp4
+ mov r4, r0
+ ldrh r0, [r5, #0x0]
+ bl SOCLi_RoundUp4
+ add r0, r4, r0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start SOCLi_GetSizeSocket
+SOCLi_GetSizeSocket: ; 0x02097DF8
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrh r0, [r5, #0x2]
+ mov r4, #0x80
+ cmp r0, #0x0
+ beq _02097E38
+ add r4, r4, #0x114
+ bl SOCLi_RoundUp4
+ add r4, r4, r0
+ ldrh r0, [r5, #0x8]
+ bl SOCLi_RoundUp4
+ add r4, r4, r0
+ add r0, r5, #0x10
+ bl SOCLi_GetSizeCommandPipe
+ add r4, r4, r0
+_02097E38:
+ ldrh r0, [r5, #0x6]
+ cmp r0, #0x0
+ beq _02097E74
+ add r4, r4, #0x110
+ bl SOCLi_RoundUp4
+ add r4, r4, r0
+ ldrh r0, [r5, #0xa]
+ bl SOCLi_RoundUp4
+ add r4, r4, r0
+ ldrh r0, [r5, #0xc]
+ bl SOCLi_RoundUp4
+ add r4, r4, r0
+ add r0, r5, #0x14
+ bl SOCLi_GetSizeCommandPipe
+ add r4, r4, r0
+_02097E74:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start SOCLi_StartupSocket
+SOCLi_StartupSocket: ; 0x02097E84
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ bl SOCLi_GetSizeSocket
+ mov r4, r0
+ bl OS_DisableInterrupts
+ ldr r1, _02097EF4 ; =SOCLiConfigPtr
+ mov r5, r0
+ ldr r1, [r1, #0x0]
+ mov r0, r4
+ ldr r1, [r1, #0x18]
+ blx r1
+ movs r6, r0
+ beq _02097EDC
+ mov r2, r4
+ mov r1, #0x0
+ bl MI_CpuFill8
+ mov r0, r6
+ mov r1, r7
+ bl SOCLi_InitSocket
+ mov r0, r6
+ bl SOCLi_SocketRegister
+_02097EDC:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r6
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02097EF4: .word SOCLiConfigPtr
+
+ arm_func_start SOCLi_CreateSocketCallBack
+SOCLi_CreateSocketCallBack: ; 0x02097EF8
+ stmdb sp!, {r4,lr}
+ ldr r4, [r0, #0x4]
+ mov r0, r4
+ bl CPS_SocRegister
+ ldrsb r0, [r4, #0x73]
+ ldr r1, [r4, #0x68]
+ cmp r0, #0x4
+ addls pc, pc, r0, lsl #0x2
+ b _02097F58
+_02097F1C: ; jump table
+ b _02097F30 ; case 0
+ b _02097F40 ; case 1
+ b _02097F54 ; case 2
+ b _02097F58 ; case 3
+ b _02097F30 ; case 4
+_02097F30:
+ add r0, r1, #0x20
+ bl CPS_SocDup
+ bl CPS_SocUse
+ b _02097F58
+_02097F40:
+ bl CPS_SocUse
+ bl CPS_SocDatagramMode
+ ldr r0, _02097F6C ; =SOCLi_UdpRecvCallback
+ bl CPS_SetUdpCallback
+ b _02097F58
+_02097F54:
+ bl CPS_SocDatagramMode
+_02097F58:
+ mov r0, #0x1
+ strh r0, [r4, #0x70]
+ mov r0, #0x0
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02097F6C: .word SOCLi_UdpRecvCallback
+
+ arm_func_start SOCL_CreateSocket
+SOCL_CreateSocket: ; 0x02097F70
+ stmdb sp!, {r4,lr}
+ bl SOCLi_StartupSocket
+ movs r4, r0
+ mvneq r0, #0x30
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r0, _02097FB0 ; =SOCLi_CreateSocketCallBack
+ mov r1, r4
+ mov r2, #0x1
+ bl SOCLi_CreateCommandPacket
+ mov r1, r0
+ mov r0, r4
+ bl SOCLi_ExecCommandPacketInCtrlPipe
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02097FB0: .word SOCLi_CreateSocketCallBack
+
+ arm_func_start SOCLi_ListenAcceptCallBack
+SOCLi_ListenAcceptCallBack: ; 0x02097FB4
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r6, r0
+ ldr r4, [r6, #0x4]
+ ldr r5, [r4, #0x64]
+ add r0, r5, #0xe0
+ bl OS_LockMutex
+ mov r1, #0x0
+ ldrh r0, [r6, #0x10]
+ mov r2, r1
+ bl CPS_SocPingMode
+ bl CPS_TcpListen
+ mov r2, #0x0
+ add r0, sp, #0x0
+ add r1, sp, #0x4
+ str r2, [r5, #0xf8]
+ bl CPS_SocWho
+ ldrh r2, [sp, #0x0]
+ ldr r1, [r6, #0x14]
+ strh r2, [r1, #0x0]
+ ldr r1, [r6, #0x18]
+ str r0, [r1, #0x0]
+ ldrsh r1, [r4, #0x70]
+ add r0, r5, #0xe0
+ orr r1, r1, #0x4
+ strh r1, [r4, #0x70]
+ bl OS_UnlockMutex
+ mov r0, #0x0
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start SOCL_ListenAccept
+SOCL_ListenAccept:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ cmp r6, #0x0
+ mov r1, #0x0
+ beq _0209806C
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_0209806C:
+ cmp r1, #0x0
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x2
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldrsb r0, [r6, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _020980A8
+ cmp r0, #0x4
+ movne r1, #0x0
+_020980A8:
+ cmp r1, #0x0
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrsb r2, [r6, #0x72]
+ cmp r2, #0x1
+ mvnne r0, #0x5
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldrh r0, [r6, #0x74]
+ cmp r0, #0x0
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r0, _0209811C ; =SOCLi_ListenAcceptCallBack
+ mov r1, r6
+ bl SOCLi_CreateCommandPacket
+ mov r1, r0
+ ldrh r2, [r6, #0x74]
+ mov r0, r6
+ strh r2, [r1, #0x10]
+ str r5, [r1, #0x14]
+ str r4, [r1, #0x18]
+ ldrsh r2, [r6, #0x70]
+ orr r2, r2, #0x2
+ strh r2, [r6, #0x70]
+ bl SOCLi_ExecCommandPacketInRecvPipe
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209811C: .word SOCLi_ListenAcceptCallBack
+
+ arm_func_start SOCL_Accept
+SOCL_Accept:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ cmp r6, #0x0
+ mov r1, #0x0
+ beq _02098164
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_02098164:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldrsh r0, [r6, #0x70]
+ ands r0, r0, #0x2
+ addne sp, sp, #0x4
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldrsb r0, [r6, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _020981A8
+ cmp r0, #0x4
+ movne r1, #0x0
+_020981A8:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldrsb r0, [r6, #0x72]
+ cmp r0, #0x1
+ addne sp, sp, #0x4
+ mvnne r0, #0x5
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldr r0, _02098228 ; =SOCLSocketParamTCP
+ bl SOCL_CreateSocket
+ movs r7, r0
+ addmi sp, sp, #0x4
+ ldmmiia sp!, {r4-r7,lr}
+ bxmi lr
+ ldrh r1, [r6, #0x74]
+ bl SOCL_Bind
+ cmp r0, #0x0
+ addlt sp, sp, #0x4
+ ldmltia sp!, {r4-r7,lr}
+ bxlt lr
+ mov r0, r7
+ mov r1, r5
+ mov r2, r4
+ bl SOCL_ListenAccept
+ cmp r0, #0x0
+ movge r0, r7
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02098228: .word SOCLSocketParamTCP
+
+ arm_func_start SOCL_Listen
+SOCL_Listen: ; 0x0209822C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ cmp r4, #0x0
+ mov r1, #0x0
+ beq _02098260
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_02098260:
+ cmp r1, #0x0
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x2
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ ldrsb r0, [r4, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _0209829C
+ cmp r0, #0x4
+ movne r1, #0x0
+_0209829C:
+ cmp r1, #0x0
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrsb r0, [r4, #0x72]
+ cmp r0, #0x1
+ moveq r0, #0x0
+ mvnne r0, #0x5
+ ldmia sp!, {r4,lr}
+ bx lr
diff --git a/arm9/asm/SOC_socl_list.s b/arm9/asm/SOC_socl_list.s
new file mode 100644
index 00000000..08f780d1
--- /dev/null
+++ b/arm9/asm/SOC_socl_list.s
@@ -0,0 +1,128 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global SOCLiSocketList
+SOCLiSocketList: ; 0x021C8D30
+ .space 0x4
+
+ .global SOCLiSocketListTrash
+SOCLiSocketListTrash: ; 0x021C8D34
+ .space 0x4
+
+ .text
+
+ arm_func_start SOCL_SocketIsInTrash
+SOCL_SocketIsInTrash:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r1, r0
+ ldr r0, _02099FA4 ; =SOCLiSocketListTrash
+ bl SOCLi_SocketGetNextPtr
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_02099FA4: .word SOCLiSocketListTrash
+
+ arm_func_start SOCL_SocketIsInvalid
+SOCL_SocketIsInvalid:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r1, r0
+ cmp r1, #0x0
+ ble _02099FCC
+ ldr r0, _02099FEC ; =SOCLiSocketList
+ bl SOCLi_SocketGetNextPtr
+ cmp r0, #0x0
+ bne _02099FDC
+_02099FCC:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {lr}
+ bx lr
+_02099FDC:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_02099FEC: .word SOCLiSocketList
+
+ arm_func_start SOCLi_SocketUnregisterTrash
+SOCLi_SocketUnregisterTrash: ; 0x02099FF0
+ ldr ip, _0209A000 ; =SOCLi_SocketUnregisterList
+ mov r1, r0
+ ldr r0, _0209A004 ; =SOCLiSocketListTrash
+ bx r12
+ .balign 4
+_0209A000: .word SOCLi_SocketUnregisterList
+_0209A004: .word SOCLiSocketListTrash
+
+ arm_func_start SOCLi_SocketGetNextPtr
+SOCLi_SocketGetNextPtr:
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ beq _0209A02C
+_0209A014:
+ cmp r2, r1
+ bxeq lr
+ add r0, r2, #0x7c
+ ldr r2, [r2, #0x7c]
+ cmp r2, #0x0
+ bne _0209A014
+_0209A02C:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start SOCLi_SocketUnregisterList
+SOCLi_SocketUnregisterList: ; 0x0209A034
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ bl SOCLi_SocketGetNextPtr
+ cmp r0, #0x0
+ ldrne r1, [r4, #0x7c]
+ strne r1, [r0, #0x0]
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start SOCLi_SocketUnregister
+SOCLi_SocketUnregister: ; 0x0209A054
+ ldr ip, _0209A064 ; =SOCLi_SocketUnregisterList
+ mov r1, r0
+ ldr r0, _0209A068 ; =SOCLiSocketList
+ bx r12
+ .balign 4
+_0209A064: .word SOCLi_SocketUnregisterList
+_0209A068: .word SOCLiSocketList
+
+ arm_func_start SOCLi_SocketRegisterTrash
+SOCLi_SocketRegisterTrash: ; 0x0209A06C
+ ldr ip, _0209A07C ; =SOCLi_SocketRegisterList
+ mov r1, r0
+ ldr r0, _0209A080 ; =SOCLiSocketListTrash
+ bx r12
+ .balign 4
+_0209A07C: .word SOCLi_SocketRegisterList
+_0209A080: .word SOCLiSocketListTrash
+
+ arm_func_start SOCLi_SocketRegisterList
+SOCLi_SocketRegisterList: ; 0x0209A084
+ ldr r2, [r0, #0x0]
+ str r2, [r1, #0x7c]
+ str r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start SOCLi_SocketRegister
+SOCLi_SocketRegister: ; 0x0209A094
+ ldr ip, _0209A0A4 ; =SOCLi_SocketRegisterList
+ mov r1, r0
+ ldr r0, _0209A0A8 ; =SOCLiSocketList
+ bx r12
+ .balign 4
+_0209A0A4: .word SOCLi_SocketRegisterList
+_0209A0A8: .word SOCLiSocketList
diff --git a/arm9/asm/SOC_socl_misc.s b/arm9/asm/SOC_socl_misc.s
new file mode 100644
index 00000000..91330d45
--- /dev/null
+++ b/arm9/asm/SOC_socl_misc.s
@@ -0,0 +1,10 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start SOCLi_RoundUp4
+SOCLi_RoundUp4:
+ add r0, r0, #0x3
+ bic r0, r0, #0x3
+ bx lr
diff --git a/arm9/asm/SOC_socl_poll.s b/arm9/asm/SOC_socl_poll.s
new file mode 100644
index 00000000..811fbdda
--- /dev/null
+++ b/arm9/asm/SOC_socl_poll.s
@@ -0,0 +1,93 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start SOCLi_GetReadBufferOccpiedSize
+SOCLi_GetReadBufferOccpiedSize:
+ ldr r2, [r0, #0x64]
+ mov r3, #0x0
+ cmp r2, #0x0
+ beq _02099E88
+ ldrsb r1, [r0, #0x73]
+ cmp r1, #0x1
+ bne _02099E6C
+ ldr r0, [r2, #0x104]
+ cmp r0, #0x0
+ ldrneh r3, [r0, #0x4]
+ b _02099E88
+_02099E6C:
+ cmp r1, #0x0
+ beq _02099E7C
+ cmp r1, #0x4
+ bne _02099E88
+_02099E7C:
+ ldr r1, [r0, #0x44]
+ ldr r0, [r2, #0xf8]
+ sub r3, r1, r0
+_02099E88:
+ mov r0, r3
+ bx lr
+
+ arm_func_start SOCL_GetStatus
+SOCL_GetStatus:
+ stmdb sp!, {r4-r6,lr}
+ mov r4, #0x0
+ mov r5, r0
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ orrne r4, r4, #0x80
+ bne _02099F60
+ ldrsh r0, [r5, #0x70]
+ ands r0, r0, #0x40
+ ldrsb r0, [r5, #0x73]
+ orrne r4, r4, #0x20
+ cmp r0, #0x1
+ beq _02099ED0
+ ldrsh r0, [r5, #0x70]
+ ands r0, r0, #0x4
+ beq _02099F00
+_02099ED0:
+ bl OS_DisableInterrupts
+ mov r6, r0
+ mov r0, r5
+ bl SOCLi_GetReadBufferOccpiedSize
+ cmp r0, #0x0
+ mov r0, r5
+ orrgt r4, r4, #0x1
+ bl SOCLi_GetWriteBufferFreeSize
+ cmp r0, #0x0
+ mov r0, r6
+ orrgt r4, r4, #0x8
+ bl OS_RestoreInterrupts
+_02099F00:
+ ldrsb r0, [r5, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _02099F18
+ cmp r0, #0x4
+ movne r1, #0x0
+_02099F18:
+ cmp r1, #0x0
+ beq _02099F60
+ ldrsh r0, [r5, #0x70]
+ ands r0, r0, #0x4
+ beq _02099F48
+ ldrb r0, [r5, #0x8]
+ cmp r0, #0x4
+ beq _02099F48
+ ands r0, r4, #0x1
+ ldreqsh r0, [r5, #0x70]
+ biceq r0, r0, #0x6
+ streqh r0, [r5, #0x70]
+_02099F48:
+ ldrsh r0, [r5, #0x70]
+ ands r0, r0, #0x2
+ bne _02099F60
+ ldrsh r0, [r5, #0x70]
+ ands r0, r0, #0x4
+ orreq r4, r4, #0x40
+_02099F60:
+ mov r0, r4
+ ldmia sp!, {r4-r6,lr}
+ bx lr
diff --git a/arm9/asm/SOC_socl_read.s b/arm9/asm/SOC_socl_read.s
new file mode 100644
index 00000000..9bf5aa69
--- /dev/null
+++ b/arm9/asm/SOC_socl_read.s
@@ -0,0 +1,1203 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global SOCLi_CheckCount
+SOCLi_CheckCount: ; 0x021C8D28
+ .space 0x8
+
+ .text
+
+ arm_func_start SOCLi_UdpRecvCallback
+SOCLi_UdpRecvCallback: ; 0x02098550
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r7, r2
+ ldr r6, [r7, #0x64]
+ mov r9, r0
+ mov r8, r1
+ bl OS_DisableInterrupts
+ add r1, r6, #0x100
+ ldrh r2, [r1, #0x8]
+ ldrh r1, [r1, #0xa]
+ mov r4, r0
+ add r0, r2, r8
+ cmp r1, r0
+ blo _02098618
+ ldr r1, _02098668 ; =SOCLiConfigPtr
+ add r0, r8, #0xc
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x18]
+ blx r1
+ movs r5, r0
+ beq _02098604
+ add r1, r6, #0x100
+ ldrh r3, [r1, #0x8]
+ mov r2, #0x0
+ mov r0, r9
+ add r3, r3, r8
+ strh r3, [r1, #0x8]
+ str r2, [r5, #0x0]
+ strh r8, [r5, #0x4]
+ ldrh r3, [r7, #0x18]
+ mov r2, r8
+ add r1, r5, #0xc
+ strh r3, [r5, #0x6]
+ ldr r3, [r7, #0x1c]
+ str r3, [r5, #0x8]
+ bl MI_CpuCopy8
+ ldr r0, [r6, #0x100]
+ cmp r0, #0x0
+ ldrne r0, [r6, #0x100]
+ strne r5, [r0, #0x0]
+ str r5, [r6, #0x100]
+ ldr r0, [r6, #0x104]
+ cmp r0, #0x0
+ streq r5, [r6, #0x104]
+ b _02098628
+_02098604:
+ ldr r0, _0209866C ; =SOCLi_CheckCount
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x1
+ str r1, [r0, #0x0]
+ b _02098628
+_02098618:
+ ldr r0, _0209866C ; =SOCLi_CheckCount
+ ldr r1, [r0, #0x4]
+ add r1, r1, #0x1
+ str r1, [r0, #0x4]
+_02098628:
+ ldrh r0, [r7, #0x74]
+ cmp r0, #0x0
+ ldreqh r0, [r7, #0xa]
+ streqh r0, [r7, #0x74]
+ ldrh r1, [r7, #0x1a]
+ add r0, r6, #0x10c
+ strh r1, [r7, #0x18]
+ ldr r1, [r7, #0x20]
+ str r1, [r7, #0x1c]
+ bl OS_WakeupThread
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_02098668: .word SOCLiConfigPtr
+_0209866C: .word SOCLi_CheckCount
+
+ arm_func_start SOCLi_ReadUdpBuffer
+SOCLi_ReadUdpBuffer: ; 0x02098670
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r10, r0
+ ldr r9, [r10, #0x64]
+ str r1, [sp, #0x0]
+ ldr r0, [r9, #0x104]
+ str r2, [sp, #0x4]
+ str r3, [sp, #0x8]
+ bl OS_DisableInterrupts
+ ldr r8, [r9, #0x104]
+ str r0, [sp, #0xc]
+ cmp r8, #0x0
+ bne _02098710
+ ldr r0, [sp, #0x3c]
+ and r7, r0, #0x1
+ add r6, r9, #0x10c
+ mov r4, #0x1
+ mov r5, #0x0
+_020986B8:
+ cmp r7, #0x0
+ mvneq r11, #0x5
+ beq _02098710
+ mov r0, r6
+ bl OS_SleepThread
+ mov r0, r10
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ bne _020986FC
+ mov r1, r5
+ cmp r10, #0x0
+ beq _020986F4
+ ldrsh r0, [r10, #0x70]
+ ands r0, r0, #0x1
+ movne r1, r4
+_020986F4:
+ cmp r1, #0x0
+ bne _02098704
+_020986FC:
+ mvn r11, #0x37
+ b _02098710
+_02098704:
+ ldr r8, [r9, #0x104]
+ cmp r8, #0x0
+ beq _020986B8
+_02098710:
+ cmp r8, #0x0
+ beq _020987A4
+ ldrh r1, [r8, #0x4]
+ ldr r0, [sp, #0x4]
+ cmp r0, r1
+ strgt r1, [sp, #0x4]
+ ldr r1, [sp, #0x0]
+ ldr r2, [sp, #0x4]
+ add r0, r8, #0xc
+ bl MI_CpuCopy8
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ ldrneh r1, [r8, #0x6]
+ strneh r1, [r0, #0x0]
+ ldr r1, [sp, #0x38]
+ cmp r1, #0x0
+ ldrne r0, [r8, #0x8]
+ strne r0, [r1, #0x0]
+ ldrsb r0, [r9, #0xfe]
+ ldrh r11, [r8, #0x4]
+ cmp r0, #0x0
+ bne _020987A4
+ ldr r0, [r8, #0x0]
+ ldr r1, _020987BC ; =SOCLiConfigPtr
+ str r0, [r9, #0x104]
+ ldr r0, [r8, #0x0]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ streq r0, [r9, #0x100]
+ ldr r1, [r1, #0x0]
+ mov r0, r8
+ ldr r1, [r1, #0x1c]
+ blx r1
+ add r0, r9, #0x100
+ ldrh r1, [r0, #0x8]
+ sub r1, r1, r11
+ strh r1, [r0, #0x8]
+_020987A4:
+ ldr r0, [sp, #0xc]
+ bl OS_RestoreInterrupts
+ mov r0, r11
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_020987BC: .word SOCLiConfigPtr
+
+ arm_func_start SOCLi_ConsumeCPSBuffer
+SOCLi_ConsumeCPSBuffer: ; 0x020987C0
+ stmdb sp!, {r4-r6,lr}
+ ldr r6, [r0, #0x64]
+ bl OS_DisableInterrupts
+ ldr r4, [r6, #0xf8]
+ mov r5, r0
+ cmp r4, #0x0
+ beq _020987EC
+ mov r1, #0x0
+ mov r0, r4
+ str r1, [r6, #0xf8]
+ bl CPS_SocConsume
+_020987EC:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start SOCLi_ConsumeCallBack
+SOCLi_ConsumeCallBack: ; 0x02098800
+ ldr ip, _0209880C ; =SOCLi_ConsumeCPSBuffer
+ ldr r0, [r0, #0x4]
+ bx r12
+ .balign 4
+_0209880C: .word SOCLi_ConsumeCPSBuffer
+
+ arm_func_start SOCLi_ConsumeBuffer
+SOCLi_ConsumeBuffer:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r1, [r4, #0x64]
+ ldrh r0, [r1, #0xfc]
+ ldr r1, [r1, #0xf8]
+ cmp r1, r0
+ movlt r0, #0x0
+ ldmltia sp!, {r4,lr}
+ bxlt lr
+ ldr r0, _02098864 ; =SOCLi_ConsumeCallBack
+ mov r1, r4
+ mov r2, #0x0
+ bl SOCLi_CreateCommandPacket
+ movs r1, r0
+ mvneq r0, #0x20
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ mov r0, r4
+ bl SOCLi_ExecCommandPacketInRecvPipe
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02098864: .word SOCLi_ConsumeCallBack
+
+ arm_func_start SOCLi_ReadCallBack
+SOCLi_ReadCallBack: ; 0x02098868
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ ldr r9, [r0, #0x4]
+ ldr r1, [r0, #0x10]
+ ldr r8, [r9, #0x64]
+ str r1, [sp, #0x4]
+ ldr r1, [r0, #0x18]
+ ldr r10, [r0, #0x14]
+ ldr r0, [r0, #0x1c]
+ ldr r7, [r8, #0xf8]
+ str r1, [sp, #0x8]
+ str r0, [sp, #0xc]
+ add r11, sp, #0x10
+ mov r5, #0x0
+ mov r6, #0x1
+ mov r4, #0xa
+_020988A8:
+ mov r0, r11
+ bl CPS_SocRead
+ cmp r0, #0x0
+ beq _02098904
+ ldr r1, [sp, #0x10]
+ sub r1, r1, r7
+ cmp r1, #0x0
+ bgt _02098904
+ ldrsb r0, [r9, #0x73]
+ mov r1, r6
+ cmp r0, #0x0
+ beq _020988E0
+ cmp r0, #0x4
+ movne r1, r5
+_020988E0:
+ cmp r1, #0x0
+ beq _020988F8
+ ldrb r0, [r9, #0x8]
+ cmp r0, #0x4
+ movne r0, #0x0
+ bne _02098904
+_020988F8:
+ mov r0, r4
+ bl OS_Sleep
+ b _020988A8
+_02098904:
+ ldrsb r1, [r9, #0x73]
+ cmp r1, #0x4
+ bne _02098954
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldr r1, [sp, #0x10]
+ cmp r10, r1
+ movhi r10, r1
+ ldr r1, [sp, #0x4]
+ mov r2, r10
+ bl MI_CpuCopy8
+ mov r0, r10
+ bl CPS_SocConsume
+ add sp, sp, #0x14
+ mov r0, r10
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_02098954:
+ cmp r0, #0x0
+ moveq r4, #0x0
+ beq _02098980
+ ldr r4, [sp, #0xc]
+ ldr r1, [sp, #0x4]
+ ldr r3, [sp, #0x8]
+ mov r0, r9
+ mov r2, r10
+ str r4, [sp, #0x0]
+ bl SOCLi_CopyCPSBuffer
+ mov r4, r0
+_02098980:
+ cmp r4, #0x0
+ addle sp, sp, #0x14
+ movle r0, r4
+ ldmleia sp!, {r4-r11,lr}
+ bxle lr
+ ldrh r0, [r8, #0xfc]
+ ldr r1, [r8, #0xf8]
+ cmp r1, r0
+ blt _020989AC
+ mov r0, r9
+ bl SOCLi_ConsumeCPSBuffer
+_020989AC:
+ mov r0, r4
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start SOCLi_ExecReadCommand
+SOCLi_ExecReadCommand: ; 0x020989BC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ ldr r0, _02098A10 ; =SOCLi_ReadCallBack
+ mov r1, r7
+ mov r2, #0x1
+ mov r4, r3
+ bl SOCLi_CreateCommandPacket
+ mov r1, r0
+ str r6, [r1, #0x10]
+ str r5, [r1, #0x14]
+ ldr r2, [sp, #0x18]
+ str r4, [r1, #0x18]
+ mov r0, r7
+ str r2, [r1, #0x1c]
+ bl SOCLi_ExecCommandPacketInRecvPipe
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_02098A10: .word SOCLi_ReadCallBack
+
+ arm_func_start SOCLi_ReadCPSBuffer
+SOCLi_ReadCPSBuffer:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, [r0, #0x64]
+ ldr r5, [r0, #0xc4]
+ ldr r4, [r0, #0xf8]
+ ldr r0, [r5, #0x44]
+ subs lr, r0, r4
+ bmi _02098A78
+ ldrh r12, [r5, #0xa]
+ ldr r0, [sp, #0x10]
+ cmp lr, #0x0
+ strh r12, [r2, #0x0]
+ ldrh r2, [r5, #0x18]
+ strh r2, [r3, #0x0]
+ ldr r2, [r5, #0x1c]
+ str r2, [r0, #0x0]
+ str lr, [r1, #0x0]
+ bne _02098A90
+ ldrb r0, [r5, #0x8]
+ cmp r0, #0x4
+ beq _02098A90
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_02098A78:
+ mvn r0, #0x0
+ str r0, [r1, #0x0]
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_02098A90:
+ ldr r0, [r5, #0x40]
+ add r0, r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start SOCLi_CopyCPSBuffer
+SOCLi_CopyCPSBuffer: ; 0x02098AA4
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x14
+ mov r9, r0
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ bl OS_DisableInterrupts
+ add r1, sp, #0xc
+ mov r5, r0
+ str r1, [sp, #0x0]
+ add r1, sp, #0x8
+ mov r0, r9
+ add r2, sp, #0x4
+ add r3, sp, #0x6
+ bl SOCLi_ReadCPSBuffer
+ cmp r0, #0x0
+ beq _02098B48
+ ldr r4, [sp, #0x8]
+ cmp r4, #0x0
+ mvneq r4, #0x5
+ beq _02098B64
+ ldrsb r1, [r9, #0x73]
+ cmp r7, r4
+ movgt r7, r4
+ mov r2, #0x1
+ cmp r1, #0x0
+ beq _02098B18
+ cmp r1, #0x4
+ movne r2, #0x0
+_02098B18:
+ cmp r2, #0x0
+ mov r1, r8
+ mov r2, r7
+ movne r4, r7
+ bl MI_CpuCopy8
+ ldr r1, [r9, #0x64]
+ ldrsb r0, [r1, #0xfe]
+ cmp r0, #0x0
+ ldreq r0, [r1, #0xf8]
+ addeq r0, r0, r4
+ streq r0, [r1, #0xf8]
+ b _02098B64
+_02098B48:
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ ldrsh r0, [r9, #0x70]
+ moveq r4, #0x0
+ mvnne r4, #0x1b
+ bic r0, r0, #0x6
+ strh r0, [r9, #0x70]
+_02098B64:
+ cmp r4, #0x0
+ blt _02098B9C
+ cmp r6, #0x0
+ beq _02098B8C
+ ldr r1, [sp, #0x30]
+ cmp r1, #0x0
+ ldrneh r0, [sp, #0x6]
+ strneh r0, [r6, #0x0]
+ ldrne r0, [sp, #0xc]
+ strne r0, [r1, #0x0]
+_02098B8C:
+ ldrh r0, [r9, #0x74]
+ cmp r0, #0x0
+ ldreqh r0, [sp, #0x4]
+ streqh r0, [r9, #0x74]
+_02098B9C:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start SOCLi_ReadBuffer
+SOCLi_ReadBuffer: ; 0x02098BB4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ ldrsb r12, [r7, #0x73]
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ cmp r12, #0x4
+ bne _02098BF0
+ ldr r4, [sp, #0x18]
+ str r4, [sp, #0x0]
+ bl SOCLi_ExecReadCommand
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_02098BF0:
+ ldr r12, [sp, #0x18]
+ str r12, [sp, #0x0]
+ bl SOCLi_CopyCPSBuffer
+ mvn r1, #0x5
+ cmp r0, r1
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldr r1, [sp, #0x1c]
+ ands r1, r1, #0x1
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r12, [sp, #0x18]
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ mov r3, r4
+ str r12, [sp, #0x0]
+ bl SOCLi_ExecReadCommand
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start SOCLi_ReadAndConsumeBuffer
+SOCLi_ReadAndConsumeBuffer: ; 0x02098C4C
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ ldr r5, [sp, #0x28]
+ mov r7, r0
+ ands r0, r5, #0x2
+ ldr r5, [r7, #0x64]
+ beq _02098C74
+ cmp r5, #0x0
+ movne r6, #0x1
+ bne _02098C78
+_02098C74:
+ mov r6, #0x0
+_02098C78:
+ cmp r6, #0x0
+ ldrnesb r4, [r5, #0xfe]
+ movne r0, #0x1
+ strneb r0, [r5, #0xfe]
+ ldrsb r0, [r7, #0x73]
+ cmp r0, #0x1
+ bne _02098CB4
+ ldr r0, [sp, #0x20]
+ ldr r12, [sp, #0x24]
+ str r0, [sp, #0x0]
+ mov r0, r7
+ str r12, [sp, #0x4]
+ bl SOCLi_ReadUdpBuffer
+ mov r8, r0
+ b _02098CDC
+_02098CB4:
+ ldr r0, [sp, #0x20]
+ ldr r12, [sp, #0x24]
+ str r0, [sp, #0x0]
+ mov r0, r7
+ str r12, [sp, #0x4]
+ bl SOCLi_ReadBuffer
+ movs r8, r0
+ bmi _02098CDC
+ mov r0, r7
+ bl SOCLi_ConsumeBuffer
+_02098CDC:
+ cmp r6, #0x0
+ strneb r4, [r5, #0xfe]
+ mov r0, r8
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start SOCLi_ReadFrom
+SOCLi_ReadFrom:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0xc
+ mov r9, r0
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r9,lr}
+ bxne lr
+ ldr r0, [sp, #0x2c]
+ ands r0, r0, #0x4
+ bne _02098D3C
+ ldrsb r0, [r9, #0x72]
+ cmp r0, #0x0
+ bne _02098D5C
+_02098D3C:
+ ldrsb r0, [r9, #0x73]
+ cmp r0, #0x4
+ addeq sp, sp, #0xc
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ mov r4, #0x0
+ b _02098D78
+_02098D5C:
+ bl OS_GetProcMode
+ cmp r0, #0x12
+ addeq sp, sp, #0xc
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ mov r4, #0x1
+_02098D78:
+ cmp r9, #0x0
+ mov r1, #0x0
+ beq _02098D90
+ ldrsh r0, [r9, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_02098D90:
+ cmp r1, #0x0
+ addeq sp, sp, #0xc
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ ldrsb r0, [r9, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _02098DBC
+ cmp r0, #0x4
+ movne r1, #0x0
+_02098DBC:
+ cmp r1, #0x0
+ beq _02098DEC
+ ldrsh r0, [r9, #0x70]
+ ands r0, r0, #0x4
+ beq _02098DDC
+ ldrsh r0, [r9, #0x70]
+ ands r0, r0, #0x8
+ beq _02098DEC
+_02098DDC:
+ add sp, sp, #0xc
+ mvn r0, #0x37
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_02098DEC:
+ ands r0, r4, #0x1
+ ldr r5, [r9, #0x64]
+ bne _02098E18
+ add r0, r5, #0xe0
+ bl OS_TryLockMutex
+ cmp r0, #0x0
+ bne _02098E20
+ add sp, sp, #0xc
+ mvn r0, #0x5
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_02098E18:
+ add r0, r5, #0xe0
+ bl OS_LockMutex
+_02098E20:
+ ldr r0, [sp, #0x28]
+ ldr r12, [sp, #0x2c]
+ str r0, [sp, #0x0]
+ str r4, [sp, #0x4]
+ mov r0, r9
+ mov r1, r8
+ mov r2, r7
+ mov r3, r6
+ str r12, [sp, #0x8]
+ bl SOCLi_ReadAndConsumeBuffer
+ mov r4, r0
+ add r0, r5, #0xe0
+ bl OS_UnlockMutex
+ mov r0, r4
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+; libsoc.a:socl_write.a
+
+ arm_func_start SOCLi_MemCpy
+SOCLi_MemCpy: ; 0x02098E64
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r2
+ ldr r5, [r6, #0x14]
+ ldr r4, [r6, #0x1c]
+ cmp r5, r1
+ mov r7, r0
+ movgt r5, r1
+ movgt r4, #0x0
+ bgt _02098E98
+ sub r0, r1, r5
+ cmp r4, r0
+ movgt r4, r0
+_02098E98:
+ cmp r5, #0x0
+ ble _02098EC8
+ ldr r0, [r6, #0x10]
+ mov r1, r7
+ mov r2, r5
+ bl MI_CpuCopy8
+ ldr r0, [r6, #0x10]
+ add r0, r0, r5
+ str r0, [r6, #0x10]
+ ldr r0, [r6, #0x14]
+ sub r0, r0, r5
+ str r0, [r6, #0x14]
+_02098EC8:
+ cmp r4, #0x0
+ ble _02098EF8
+ ldr r0, [r6, #0x18]
+ mov r2, r4
+ add r1, r7, r5
+ bl MI_CpuCopy8
+ ldr r0, [r6, #0x18]
+ add r0, r0, r4
+ str r0, [r6, #0x18]
+ ldr r0, [r6, #0x1c]
+ sub r0, r0, r4
+ str r0, [r6, #0x1c]
+_02098EF8:
+ add r0, r5, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start SOCLi_GetOptimumSendBufLen
+SOCLi_GetOptimumSendBufLen: ; 0x02098F08
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r1, _02098FBC ; =OSi_ThreadInfo
+ mov r4, r0
+ ldr r0, [r1, #0x4]
+ ldr r5, [r0, #0xa4]
+ bl OS_DisableInterrupts
+ cmp r5, #0x0
+ beq _02098F74
+ ldrh r3, [r5, #0x2e]
+ cmp r3, #0x0
+ beq _02098F64
+ ldrh r2, [r5, #0x2c]
+ cmp r2, #0x0
+ beq _02098F64
+ ldr r1, _02098FC0 ; =SOCLiCPSConfig
+ cmp r3, r2
+ ldr r1, [r1, #0x24]
+ movgt r3, r2
+ cmp r3, r1
+ movgt r3, r1
+ mov r5, r3, lsl #0x1
+ b _02098F80
+_02098F64:
+ ldr r1, _02098FC0 ; =SOCLiCPSConfig
+ ldr r1, [r1, #0x24]
+ mov r5, r1, lsl #0x1
+ b _02098F80
+_02098F74:
+ ldr r1, _02098FC0 ; =SOCLiCPSConfig
+ ldr r1, [r1, #0x24]
+ mov r5, r1, lsl #0x1
+_02098F80:
+ bl OS_RestoreInterrupts
+ cmp r5, #0x0
+ ble _02098FAC
+ mov r0, r4
+ mov r1, r5
+ bl _s32_div_f
+ cmp r0, #0x0
+ mulgt r0, r5, r0
+ addgt sp, sp, #0x4
+ ldmgtia sp!, {r4-r5,lr}
+ bxgt lr
+_02098FAC:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_02098FBC: .word OSi_ThreadInfo
+_02098FC0: .word SOCLiCPSConfig
+
+ arm_func_start SOCLi_WriteCallBack
+SOCLi_WriteCallBack: ; 0x02098FC4
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r8, r0
+ ldr r7, [r8, #0x4]
+ mov r4, #0x0
+ ldrsb r0, [r7, #0x73]
+ ldr r6, [r7, #0x68]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _02098FF4
+ cmp r0, #0x4
+ movne r1, r4
+_02098FF4:
+ cmp r1, #0x0
+ beq _02099008
+ ldrsh r0, [r7, #0x70]
+ ands r0, r0, #0x4
+ beq _020990DC
+_02099008:
+ ldr r2, [r8, #0x28]
+ cmp r2, #0x0
+ beq _02099020
+ ldrh r0, [r8, #0x24]
+ ldrh r1, [r8, #0x26]
+ bl CPS_SocPingMode
+_02099020:
+ ldrsb r1, [r7, #0x73]
+ mov r0, #0x1
+ cmp r1, #0x0
+ beq _02099038
+ cmp r1, #0x4
+ movne r0, #0x0
+_02099038:
+ cmp r0, #0x0
+ movne r2, #0x36
+ moveq r2, #0x2a
+ ldr r0, [r7, #0x4c]
+ cmp r1, #0x0
+ add r5, r0, r2
+ beq _0209905C
+ cmp r1, #0x4
+ bne _02099070
+_0209905C:
+ ldr r0, [r7, #0x48]
+ sub r0, r0, r2
+ bl SOCLi_GetOptimumSendBufLen
+ mov r9, r0
+ b _02099078
+_02099070:
+ ldr r0, [r7, #0x48]
+ sub r9, r0, r2
+_02099078:
+ mov r0, r5
+ mov r1, r9
+ mov r2, r8
+ bl SOCLi_MemCpy
+ mov r1, r0
+ cmp r1, #0x0
+ ble _020990E0
+ mov r0, r5
+ bl CPS_SocWrite
+ cmp r0, #0x0
+ bgt _020990D4
+ ldrsb r0, [r7, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _020990BC
+ cmp r0, #0x4
+ movne r1, #0x0
+_020990BC:
+ cmp r1, #0x0
+ ldrnesh r0, [r7, #0x70]
+ mvn r4, #0x4b
+ bicne r0, r0, #0xe
+ strneh r0, [r7, #0x70]
+ b _020990E0
+_020990D4:
+ add r4, r4, r0
+ b _02099078
+_020990DC:
+ mvn r4, #0x4b
+_020990E0:
+ ldrh r2, [r8, #0x20]
+ add r1, r6, #0x100
+ add r0, r6, #0x104
+ strh r2, [r1, #0x2]
+ bl OS_WakeupThread
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start SOCLi_ExecWriteCommand
+SOCLi_ExecWriteCommand:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r9, r0
+ ldr r6, [r9, #0x68]
+ mov r4, r1
+ mov r8, r2
+ ldr r1, [r6, #0x10c]
+ ldr r2, [sp, #0x28]
+ ldr r0, _0209929C ; =SOCLi_WriteCallBack
+ mov r7, r3
+ bl SOCLi_CreateCommandPacket
+ movs r5, r0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x20
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ ldr r0, [sp, #0x28]
+ ands r0, r0, #0x1
+ beq _02099164
+ ldrsb r0, [r9, #0x73]
+ cmp r0, #0x1
+ movne r0, #0x3
+ strneb r0, [r5, #0xd]
+ bne _0209916C
+_02099164:
+ mov r0, #0x0
+ strb r0, [r5, #0xd]
+_0209916C:
+ ldr r2, [r6, #0xf8]
+ add r1, r7, r8
+ cmp r1, r2
+ ldr r3, [r6, #0xfc]
+ bge _020991A0
+ add r0, r3, r7
+ str r0, [r5, #0x10]
+ str r8, [r5, #0x14]
+ mov r0, #0x0
+ str r0, [r5, #0x18]
+ mov r7, r1
+ str r0, [r5, #0x1c]
+ b _020991D8
+_020991A0:
+ add r0, r3, r7
+ str r0, [r5, #0x10]
+ sub r0, r2, r7
+ str r0, [r5, #0x14]
+ str r3, [r5, #0x18]
+ ldr r0, [r5, #0x14]
+ sub r0, r8, r0
+ str r0, [r5, #0x1c]
+ ldr r7, [r5, #0x1c]
+ ldr r0, [r5, #0x14]
+ ldr r1, [r5, #0x18]
+ mov r2, r7
+ add r0, r4, r0
+ bl MI_CpuCopy8
+_020991D8:
+ ldr r1, [r5, #0x10]
+ ldr r2, [r5, #0x14]
+ mov r0, r4
+ bl MI_CpuCopy8
+ add r0, r6, #0x100
+ ldrh r4, [r0, #0x0]
+ strh r7, [r5, #0x20]
+ ldrh r1, [r5, #0x20]
+ strh r1, [r0, #0x0]
+ ldrsb r0, [r9, #0x73]
+ cmp r0, #0x1
+ bne _02099268
+ ldrh r0, [r9, #0x74]
+ cmp r0, #0x0
+ bne _02099224
+ bl CPS_SocGetEport
+ strh r0, [r9, #0x74]
+ ldrh r0, [r9, #0x74]
+ strh r0, [r9, #0xa]
+_02099224:
+ ldrh r0, [r9, #0x74]
+ strh r0, [r5, #0x24]
+ ldr r1, [r9, #0x78]
+ cmp r1, #0x0
+ beq _02099244
+ ldr r0, [sp, #0x24]
+ cmp r0, #0x0
+ beq _02099258
+_02099244:
+ ldr r1, [sp, #0x24]
+ ldrh r0, [sp, #0x20]
+ str r1, [r5, #0x28]
+ strh r0, [r5, #0x26]
+ b _02099270
+_02099258:
+ str r1, [r5, #0x28]
+ ldrh r0, [r9, #0x76]
+ strh r0, [r5, #0x26]
+ b _02099270
+_02099268:
+ mov r0, #0x0
+ str r0, [r5, #0x28]
+_02099270:
+ ldr r0, [r6, #0x10c]
+ mov r1, r5
+ bl SOCLi_ExecCommandPacketInSendPipe
+ cmp r0, #0x0
+ addne r0, r6, #0x100
+ movne r8, #0x0
+ strneh r4, [r0, #0x0]
+ mov r0, r8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_0209929C: .word SOCLi_WriteCallBack
+
+ arm_func_start SOCLi_GetWriteBufferFreeSize
+SOCLi_GetWriteBufferFreeSize:
+ ldr r2, [r0, #0x68]
+ add r0, r2, #0x100
+ ldrh r1, [r0, #0x0]
+ ldrh r0, [r0, #0x2]
+ ldr r2, [r2, #0xf8]
+ sub r0, r0, r1
+ subs r0, r0, #0x1
+ addmi r0, r0, r2
+ bx lr
+
+ arm_func_start SOCLi_AllocWriteBuffer
+SOCLi_AllocWriteBuffer: ; 0x020992C4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r10, r0
+ mov r9, r1
+ mov r8, r2
+ cmp r8, r9
+ mov r11, r3
+ ldr r7, [r10, #0x68]
+ movgt r8, r9
+ bl OS_DisableInterrupts
+ ldr r1, [sp, #0x28]
+ str r0, [sp, #0x0]
+ and r5, r1, #0x1
+ add r4, r7, #0x104
+_020992FC:
+ mov r0, r10
+ bl SOCLi_GetWriteBufferFreeSize
+ mov r6, r0
+ cmp r6, r8
+ blt _02099328
+ add r0, r7, #0x100
+ ldrh r0, [r0, #0x0]
+ cmp r6, r9
+ movge r6, r9
+ str r0, [r11, #0x0]
+ b _02099340
+_02099328:
+ cmp r5, #0x0
+ moveq r6, #0x0
+ beq _02099340
+ mov r0, r4
+ bl OS_SleepThread
+ b _020992FC
+_02099340:
+ ldr r0, [sp, #0x0]
+ bl OS_RestoreInterrupts
+ mov r0, r6
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start SOCLi_WriteBuffer
+SOCLi_WriteBuffer: ; 0x02099358
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x1c
+ mov r10, r0
+ ldr r4, [r10, #0x68]
+ ldrsb r0, [r10, #0x73]
+ ldr r4, [r4, #0x10c]
+ mov r9, r1
+ cmp r0, #0x1
+ ldr r0, [r4, #0x48]
+ mov r8, r2
+ str r3, [sp, #0xc]
+ ldr r7, [sp, #0x40]
+ ldr r6, [sp, #0x44]
+ mov r4, #0x0
+ bne _020993B4
+ sub r0, r0, #0x2a
+ cmp r8, r0
+ addgt sp, sp, #0x1c
+ mvngt r0, #0x22
+ ldmgtia sp!, {r4-r11,lr}
+ bxgt lr
+ str r8, [sp, #0x10]
+ b _020993C4
+_020993B4:
+ sub r0, r0, #0x36
+ str r0, [sp, #0x10]
+ cmp r8, r0
+ strle r8, [sp, #0x10]
+_020993C4:
+ cmp r8, #0x0
+ ble _02099460
+ and r11, r6, #0x1
+_020993D0:
+ ldr r2, [sp, #0x10]
+ mov r0, r10
+ mov r1, r8
+ add r3, sp, #0x14
+ str r6, [sp, #0x0]
+ bl SOCLi_AllocWriteBuffer
+ mov r5, r0
+ cmp r5, #0x0
+ ble _02099438
+ ldr r0, [sp, #0xc]
+ mov r1, r9
+ str r0, [sp, #0x0]
+ str r7, [sp, #0x4]
+ str r6, [sp, #0x8]
+ ldr r3, [sp, #0x14]
+ mov r0, r10
+ mov r2, r5
+ bl SOCLi_ExecWriteCommand
+ cmp r0, #0x0
+ addle sp, sp, #0x1c
+ mvnle r0, #0x5
+ ldmleia sp!, {r4-r11,lr}
+ bxle lr
+ add r9, r9, r5
+ sub r8, r8, r5
+ add r4, r4, r5
+_02099438:
+ cmp r11, #0x0
+ bne _02099458
+ cmp r5, #0x0
+ bgt _02099460
+ add sp, sp, #0x1c
+ mvn r0, #0x5
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_02099458:
+ cmp r8, #0x0
+ bgt _020993D0
+_02099460:
+ mov r0, r4
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+
+ arm_func_start SOCL_WriteTo
+SOCL_WriteTo: ; 0x02099470
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ addne sp, sp, #0x8
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ cmp r8, #0x0
+ mov r1, #0x0
+ beq _020994B8
+ ldrsh r0, [r8, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_020994B8:
+ cmp r1, #0x0
+ addeq sp, sp, #0x8
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldrsb r0, [r8, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _020994E4
+ cmp r0, #0x4
+ movne r1, #0x0
+_020994E4:
+ cmp r1, #0x0
+ beq _02099514
+ ldrsh r0, [r8, #0x70]
+ ands r0, r0, #0x4
+ beq _02099504
+ ldrsh r0, [r8, #0x70]
+ ands r0, r0, #0x8
+ beq _02099514
+_02099504:
+ add sp, sp, #0x8
+ mvn r0, #0x37
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_02099514:
+ ldr r0, [sp, #0x24]
+ ldr r4, [r8, #0x68]
+ ands r0, r0, #0x4
+ bne _02099530
+ ldrsb r0, [r8, #0x72]
+ cmp r0, #0x0
+ bne _02099554
+_02099530:
+ add r0, r4, #0xe0
+ bl OS_TryLockMutex
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ mvneq r0, #0x5
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ mov r12, #0x0
+ b _02099560
+_02099554:
+ add r0, r4, #0xe0
+ bl OS_LockMutex
+ mov r12, #0x1
+_02099560:
+ ldr r1, [sp, #0x20]
+ mov r0, r8
+ str r1, [sp, #0x0]
+ mov r1, r7
+ mov r2, r6
+ mov r3, r5
+ str r12, [sp, #0x4]
+ bl SOCLi_WriteBuffer
+ mov r5, r0
+ add r0, r4, #0xe0
+ bl OS_UnlockMutex
+ mov r0, r5
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
diff --git a/arm9/asm/SOC_socl_shutdown.s b/arm9/asm/SOC_socl_shutdown.s
new file mode 100644
index 00000000..f1f43e90
--- /dev/null
+++ b/arm9/asm/SOC_socl_shutdown.s
@@ -0,0 +1,90 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start SOCLi_ShutdownCallBack
+SOCLi_ShutdownCallBack: ; 0x0209959C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, [r0, #0x4]
+ mov r1, #0x1
+ ldrsb r0, [r0, #0x73]
+ cmp r0, #0x0
+ beq _020995C0
+ cmp r0, #0x4
+ movne r1, #0x0
+_020995C0:
+ cmp r1, #0x0
+ beq _020995CC
+ bl CPS_TcpShutdown
+_020995CC:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SOCL_Shutdown
+SOCL_Shutdown: ; 0x020995DC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ cmp r4, #0x0
+ mov r1, #0x0
+ beq _02099618
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_02099618:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x4
+ beq _02099644
+ ldrsh r0, [r4, #0x70]
+ ands r0, r0, #0x8
+ beq _02099654
+_02099644:
+ add sp, sp, #0x4
+ mvn r0, #0x37
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_02099654:
+ ldrsh r0, [r4, #0x70]
+ orr r0, r0, #0x8
+ strh r0, [r4, #0x70]
+ ldr r5, [r4, #0x68]
+ cmp r5, #0x0
+ beq _020996AC
+ ldr r1, [r5, #0x10c]
+ cmp r1, #0x0
+ beq _020996AC
+ ldrsb r2, [r4, #0x72]
+ ldr r0, _020996BC ; =SOCLi_ShutdownCallBack
+ bl SOCLi_CreateCommandPacket
+ movs r1, r0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x20
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r0, [r5, #0x10c]
+ bl SOCLi_ExecCommandPacketInSendPipe
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_020996AC:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020996BC: .word SOCLi_ShutdownCallBack
diff --git a/arm9/asm/SOC_socl_ssl.s b/arm9/asm/SOC_socl_ssl.s
new file mode 100644
index 00000000..99848655
--- /dev/null
+++ b/arm9/asm/SOC_socl_ssl.s
@@ -0,0 +1,110 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start SOCLi_EnableSslCallBack
+SOCLi_EnableSslCallBack: ; 0x0209AA10
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ ldr r6, [r7, #0x4]
+ ldr r5, [r6, #0x64]
+ add r0, r5, #0xe0
+ ldr r4, [r5, #0xc4]
+ bl OS_LockMutex
+ ldr r1, [r7, #0x10]
+ cmp r1, #0x0
+ beq _0209AA54
+ mov r0, #0x1
+ str r1, [r4, #0xc]
+ bl CPS_SetSsl
+ mov r0, #0x4
+ strb r0, [r6, #0x73]
+ b _0209AA68
+_0209AA54:
+ mov r0, #0x0
+ strb r0, [r6, #0x73]
+ bl CPS_SetSsl
+ mov r0, #0x0
+ str r0, [r4, #0xc]
+_0209AA68:
+ add r0, r5, #0xe0
+ bl OS_UnlockMutex
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start SOCLi_ExecEnableSslCommand
+SOCLi_ExecEnableSslCommand: ; 0x0209AA80
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ ldr r0, _0209AACC ; =SOCLi_EnableSslCallBack
+ mov r1, r5
+ mov r2, #0x1
+ bl SOCLi_CreateCommandPacket
+ movs r1, r0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x20
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ mov r0, r5
+ str r4, [r1, #0x10]
+ bl SOCLi_ExecCommandPacketInRecvPipe
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0209AACC: .word SOCLi_EnableSslCallBack
+
+ arm_func_start SOCL_EnableSsl
+SOCL_EnableSsl: ; 0x0209AAD0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ bl SOCL_SocketIsInvalid
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ ldrsb r0, [r5, #0x73]
+ mov r1, #0x1
+ cmp r0, #0x0
+ beq _0209AB10
+ cmp r0, #0x4
+ movne r1, #0x0
+_0209AB10:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x1b
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ cmp r5, #0x0
+ mov r1, #0x0
+ beq _0209AB3C
+ ldrsh r0, [r5, #0x70]
+ ands r0, r0, #0x1
+ movne r1, #0x1
+_0209AB3C:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ mvneq r0, #0x26
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldrsh r0, [r5, #0x70]
+ ands r0, r0, #0x2
+ addne sp, sp, #0x4
+ mvnne r0, #0x1b
+ ldmneia sp!, {r4-r5,lr}
+ bxne lr
+ mov r0, r5
+ mov r1, r4
+ bl SOCLi_ExecEnableSslCommand
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
diff --git a/arm9/asm/SOC_socl_startup.s b/arm9/asm/SOC_socl_startup.s
new file mode 100644
index 00000000..61147b6a
--- /dev/null
+++ b/arm9/asm/SOC_socl_startup.s
@@ -0,0 +1,236 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global SOCLiConfigPtr
+SOCLiConfigPtr: ; 0x021C8CC0
+ .space 0x4
+
+ .global SOCLiYieldWait
+SOCLiYieldWait: ; 0x021C8CC4
+ .space 0x4
+
+ .global SOCLiRequestedIP
+SOCLiRequestedIP: ; 0x021C8CC8
+ .space 0x4
+
+ .global SOCLiDhcpState
+SOCLiDhcpState: ; 0x021C8CCC
+ .space 0x4
+
+ .global SOCLiUDPSendSocket
+SOCLiUDPSendSocket: ; 0x021C8CD0
+ .space 0x4
+
+ .global SOCLiCPSConfig
+SOCLiCPSConfig: ; 0x021C8CD4
+ .space 0x30
+
+ .text
+
+ arm_func_start SOCL_LinkIsOn
+SOCL_LinkIsOn: ; 0x020975B4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl WCM_GetApMacAddress
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start SOCLi_DhcpTimeout
+SOCLi_DhcpTimeout: ; 0x020975D8
+ ldr r0, _020975EC ; =SOCLiDhcpState
+ ldr r1, [r0, #0x0]
+ orr r1, r1, #0x2
+ str r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020975EC: .word SOCLiDhcpState
+
+ arm_func_start SOCLi_SetMyIP
+SOCLi_SetMyIP: ; 0x020975F0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _02097654 ; =SOCLiConfigPtr
+ ldr r0, _02097658 ; =SOCLiDhcpState
+ ldr lr, [r1, #0x0]
+ ldr r3, [r0, #0x0]
+ ldr r12, [lr, #0x4]
+ ldr r2, _0209765C ; =CPSMyIp
+ ldr r1, _02097660 ; =CPSNetMask
+ str r12, [r2, #0x0]
+ ldr r12, [lr, #0x8]
+ ldr r2, _02097664 ; =CPSGatewayIp
+ str r12, [r1, #0x0]
+ ldr r12, [lr, #0xc]
+ ldr r1, _02097668 ; =CPSDnsIp
+ str r12, [r2, #0x0]
+ ldr r12, [lr, #0x10]
+ orr r2, r3, #0x2
+ str r12, [r1, #0x0]
+ ldr r3, [lr, #0x14]
+ str r3, [r1, #0x4]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_02097654: .word SOCLiConfigPtr
+_02097658: .word SOCLiDhcpState
+_0209765C: .word CPSMyIp
+_02097660: .word CPSNetMask
+_02097664: .word CPSGatewayIp
+_02097668: .word CPSDnsIp
+
+ arm_func_start SOCLi_StartupCPS
+SOCLi_StartupCPS: ; 0x0209766C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020977C0 ; =SOCLiConfigPtr
+ ldr r5, _020977C4 ; =SOCLiCPSConfig
+ ldr r4, [r0, #0x0]
+ mov r0, r5
+ mov r1, #0x0
+ mov r2, #0x30
+ bl MI_CpuFill8
+ ldr r0, _020977C8 ; =SOCLiYieldWait
+ ldr r2, [r4, #0x18]
+ mov r1, r5
+ str r2, [r1, #0x4]
+ ldr r12, [r4, #0x1c]
+ mov r2, #0x0
+ ldr r3, _020977CC ; =SOCL_LinkIsOn
+ ldr r0, [r0, #0x0]
+ str r12, [r1, #0x8]
+ str r3, [r1, #0x10]
+ str r2, [r1, #0x14]
+ str r2, [r1, #0x18]
+ str r0, [r1, #0x2c]
+ ldr r0, [r4, #0x24]
+ cmp r0, #0x0
+ strne r0, [r5, #0x20]
+ moveq r0, #0x4000
+ streq r0, [r5, #0x20]
+ ldr r0, [r4, #0x28]
+ cmp r0, #0x0
+ strne r0, [r5, #0x1c]
+ bne _02097700
+ ldr r1, _020977C0 ; =SOCLiConfigPtr
+ ldr r0, [r5, #0x20]
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x18]
+ blx r1
+ str r0, [r5, #0x1c]
+_02097700:
+ ldr r0, [r4, #0x30]
+ ldr r12, [r4, #0x34]
+ cmp r0, #0x0
+ moveq r0, #0x240
+ cmp r12, #0x0
+ sub r2, r0, #0x28
+ moveq r12, #0x10c0
+ add r0, r12, r12, lsr #0x1f
+ str r2, [r5, #0x24]
+ ldr r1, _020977D0 ; =SOCLSocketParamTCP
+ mov r3, r0, asr #0x1
+ ldr r0, _020977D4 ; =CPSMyIp
+ mov r2, #0x0
+ strh r12, [r1, #0x2]
+ strh r3, [r1, #0x4]
+ str r2, [r0, #0x0]
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _02097774
+ ldr r0, _020977D8 ; =SOCLiDhcpState
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ ldr r1, _020977DC ; =SOCLi_DhcpTimeout
+ str r2, [r5, #0x0]
+ ldr r0, _020977E0 ; =SOCLiRequestedIP
+ str r1, [r5, #0xc]
+ ldr r0, [r0, #0x0]
+ str r0, [r5, #0x28]
+ b _0209778C
+_02097774:
+ ldr r0, _020977D8 ; =SOCLiDhcpState
+ mov r1, #0x1
+ str r2, [r0, #0x0]
+ ldr r0, _020977E4 ; =SOCLi_SetMyIP
+ str r1, [r5, #0x0]
+ str r0, [r5, #0xc]
+_0209778C:
+ ldr r0, [r4, #0x2c]
+ cmp r0, #0x0
+ moveq r0, #0xb
+ bl CPS_SetThreadPriority
+ ldr r0, _020977E8 ; =CPSi_RecvCallbackFunc
+ bl WCM_SetRecvDCFCallback
+ ldr r0, _020977EC ; =SOCLi_TrashSocket
+ bl CPS_SetScavengerCallback
+ mov r0, r5
+ bl CPS_Startup
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_020977C0: .word SOCLiConfigPtr
+_020977C4: .word SOCLiCPSConfig
+_020977C8: .word SOCLiYieldWait
+_020977CC: .word SOCL_LinkIsOn
+_020977D0: .word SOCLSocketParamTCP
+_020977D4: .word CPSMyIp
+_020977D8: .word SOCLiDhcpState
+_020977DC: .word SOCLi_DhcpTimeout
+_020977E0: .word SOCLiRequestedIP
+_020977E4: .word SOCLi_SetMyIP
+_020977E8: .word CPSi_RecvCallbackFunc
+_020977EC: .word SOCLi_TrashSocket
+
+ arm_func_start SOCLi_StartupSOCL
+SOCLi_StartupSOCL: ; 0x020977F0
+ stmdb sp!, {r4,lr}
+ ldr r0, _02097828 ; =SOCLiConfigPtr
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x20]
+ bl SOCLi_StartupCommandPacketQueue
+ movs r4, r0
+ bmi _0209781C
+ ldr r0, _0209782C ; =SOCLSocketParamUDPSend
+ bl SOCL_CreateSocket
+ ldr r1, _02097830 ; =SOCLiUDPSendSocket
+ str r0, [r1, #0x0]
+_0209781C:
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02097828: .word SOCLiConfigPtr
+_0209782C: .word SOCLSocketParamUDPSend
+_02097830: .word SOCLiUDPSendSocket
+
+ .extern _SDK_NintendoWiFi
+
+ arm_func_start SOCL_Startup
+SOCL_Startup: ; 0x02097834
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, _02097870 ; =_SDK_NintendoWiFi
+ bl OSi_ReferSymbol
+ ldr r0, _02097874 ; =SOCLiConfigPtr
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ movne r0, #0x0
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ str r4, [r0, #0x0]
+ bl SOCLi_StartupCPS
+ bl SOCLi_StartupSOCL
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_02097870: .word _SDK_NintendoWiFi
+_02097874: .word SOCLiConfigPtr
diff --git a/arm9/asm/libVCT.s b/arm9/asm/libVCT.s
index f0a9d36e..e514c486 100644
--- a/arm9/asm/libVCT.s
+++ b/arm9/asm/libVCT.s
@@ -5619,8 +5619,8 @@ _020A87B0: .word FUN_020A85F0
_020A87B4: .word UNK_021CA874
_020A87B8: .word UNK_021CA870
- arm_func_start FUN_020A87BC
-FUN_020A87BC: ; 0x020A87BC
+ arm_func_start WCM_SetRecvDCFCallback
+WCM_SetRecvDCFCallback: ; 0x020A87BC
stmdb sp!, {r4,lr}
mov r4, r0
bl OS_DisableInterrupts
@@ -5665,8 +5665,8 @@ _020A8830:
.balign 4
_020A884C: .word 0x0000214C
- arm_func_start FUN_020A8850
-FUN_020A8850:
+ arm_func_start WCM_GetApMacAddress
+WCM_GetApMacAddress:
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, #0x0
diff --git a/arm9/asm/unk_020910EC.s b/arm9/asm/unk_020910EC.s
index f95f89a5..185f3505 100644
--- a/arm9/asm/unk_020910EC.s
+++ b/arm9/asm/unk_020910EC.s
@@ -86,30 +86,6 @@ UNK_0210619C: ; 0x0210619C
.byte 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76
.byte 0x00, 0x00, 0x00, 0x00
- .balign 4, 0
- .global UNK_021061C0
-UNK_021061C0: ; 0x021061C0
- .word -26
-
- .global UNK_021061C4
-UNK_021061C4: ; 0x021061C4
- .byte 0x01, 0x01, 0xC0, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08
- .byte 0x00, 0x08, 0x0C, 0x20, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_021061DC
-UNK_021061DC: ; 0x021061DC
- .byte 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x66, 0x04, 0x00, 0x00, 0x00, 0x00, 0x61, 0x08, 0x00, 0x00
- .byte 0x00, 0x08, 0x0C, 0x20, 0x00, 0x08, 0x0D, 0x20
-
- .global UNK_021061F4
-UNK_021061F4: ; 0x021061F4
- .byte 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x05, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x06, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0D, 0x20
-
- .global UNK_0210620C
-UNK_0210620C: ; 0x0210620C
- .byte 0x25, 0x64, 0x2E, 0x25, 0x64, 0x2E, 0x25, 0x64, 0x2E, 0x25, 0x64, 0x00
-
.section .bss
.global UNK_021C8C78
@@ -148,82 +124,6 @@ UNK_021C8C90: ; 0x021C8C90
UNK_021C8CA0: ; 0x021C8CA0
.space 0x20
- .global UNK_021C8CC0
-UNK_021C8CC0: ; 0x021C8CC0
- .space 0x4
-
- .global UNK_021C8CC4
-UNK_021C8CC4: ; 0x021C8CC4
- .space 0x4
-
- .global UNK_021C8CC8
-UNK_021C8CC8: ; 0x021C8CC8
- .space 0x4
-
- .global UNK_021C8CCC
-UNK_021C8CCC: ; 0x021C8CCC
- .space 0x4
-
- .global UNK_021C8CD0
-UNK_021C8CD0: ; 0x021C8CD0
- .space 0x4
-
- .global UNK_021C8CD4
-UNK_021C8CD4: ; 0x021C8CD4
- .space 0x30
-
- .global UNK_021C8D04
-UNK_021C8D04: ; 0x021C8D04
- .space 0x4
-
- .global UNK_021C8D08
-UNK_021C8D08: ; 0x021C8D08
- .space 0x20
-
- .global UNK_021C8D28
-UNK_021C8D28: ; 0x021C8D28
- .space 0x8
-
- .global UNK_021C8D30
-UNK_021C8D30: ; 0x021C8D30
- .space 0x4
-
- .global UNK_021C8D34
-UNK_021C8D34: ; 0x021C8D34
- .space 0x4
-
- .global UNK_021C8D38
-UNK_021C8D38: ; 0x021C8D38
- .space 0x4
-
- .global UNK_021C8D3C
-UNK_021C8D3C: ; 0x021C8D3C
- .space 0x4
-
- .global UNK_021C8D40
-UNK_021C8D40: ; 0x021C8D40
- .space 0x4
-
- .global UNK_021C8D44
-UNK_021C8D44: ; 0x021C8D44
- .space 0x8
-
- .global UNK_021C8D4C
-UNK_021C8D4C: ; 0x021C8D4C
- .space 0x10
-
- .global UNK_021C8D5C
-UNK_021C8D5C: ; 0x021C8D5C
- .space 0x10
-
- .global UNK_021C8D6C
-UNK_021C8D6C: ; 0x021C8D6C
- .space 0x38
-
- .global UNK_021C8DA4
-UNK_021C8DA4: ; 0x021C8DA4
- .space 0x104
-
.text
; Nintendo DWC
@@ -7516,4029 +7416,3 @@ FUN_02097588: ; 0x02097588
str r1, [r0, #0x0]
mov r0, #0x1
bx lr
-
- arm_func_start FUN_020975B4
-FUN_020975B4: ; 0x020975B4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl FUN_020A8850
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start FUN_020975D8
-FUN_020975D8: ; 0x020975D8
- ldr r0, _020975EC ; =UNK_021C8CCC
- ldr r1, [r0, #0x0]
- orr r1, r1, #0x2
- str r1, [r0, #0x0]
- bx lr
- .balign 4
-_020975EC: .word UNK_021C8CCC
-
- arm_func_start FUN_020975F0
-FUN_020975F0: ; 0x020975F0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _02097654 ; =UNK_021C8CC0
- ldr r0, _02097658 ; =UNK_021C8CCC
- ldr lr, [r1, #0x0]
- ldr r3, [r0, #0x0]
- ldr r12, [lr, #0x4]
- ldr r2, _0209765C ; =CPSMyIp
- ldr r1, _02097660 ; =CPSNetMask
- str r12, [r2, #0x0]
- ldr r12, [lr, #0x8]
- ldr r2, _02097664 ; =CPSGatewayIp
- str r12, [r1, #0x0]
- ldr r12, [lr, #0xc]
- ldr r1, _02097668 ; =CPSDnsIp
- str r12, [r2, #0x0]
- ldr r12, [lr, #0x10]
- orr r2, r3, #0x2
- str r12, [r1, #0x0]
- ldr r3, [lr, #0x14]
- str r3, [r1, #0x4]
- str r2, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_02097654: .word UNK_021C8CC0
-_02097658: .word UNK_021C8CCC
-_0209765C: .word CPSMyIp
-_02097660: .word CPSNetMask
-_02097664: .word CPSGatewayIp
-_02097668: .word CPSDnsIp
-
- arm_func_start FUN_0209766C
-FUN_0209766C: ; 0x0209766C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r0, _020977C0 ; =UNK_021C8CC0
- ldr r5, _020977C4 ; =UNK_021C8CD4
- ldr r4, [r0, #0x0]
- mov r0, r5
- mov r1, #0x0
- mov r2, #0x30
- bl MI_CpuFill8
- ldr r0, _020977C8 ; =UNK_021C8CC4
- ldr r2, [r4, #0x18]
- mov r1, r5
- str r2, [r1, #0x4]
- ldr r12, [r4, #0x1c]
- mov r2, #0x0
- ldr r3, _020977CC ; =FUN_020975B4
- ldr r0, [r0, #0x0]
- str r12, [r1, #0x8]
- str r3, [r1, #0x10]
- str r2, [r1, #0x14]
- str r2, [r1, #0x18]
- str r0, [r1, #0x2c]
- ldr r0, [r4, #0x24]
- cmp r0, #0x0
- strne r0, [r5, #0x20]
- moveq r0, #0x4000
- streq r0, [r5, #0x20]
- ldr r0, [r4, #0x28]
- cmp r0, #0x0
- strne r0, [r5, #0x1c]
- bne _02097700
- ldr r1, _020977C0 ; =UNK_021C8CC0
- ldr r0, [r5, #0x20]
- ldr r1, [r1, #0x0]
- ldr r1, [r1, #0x18]
- blx r1
- str r0, [r5, #0x1c]
-_02097700:
- ldr r0, [r4, #0x30]
- ldr r12, [r4, #0x34]
- cmp r0, #0x0
- moveq r0, #0x240
- cmp r12, #0x0
- sub r2, r0, #0x28
- moveq r12, #0x10c0
- add r0, r12, r12, lsr #0x1f
- str r2, [r5, #0x24]
- ldr r1, _020977D0 ; =UNK_021061DC
- mov r3, r0, asr #0x1
- ldr r0, _020977D4 ; =CPSMyIp
- mov r2, #0x0
- strh r12, [r1, #0x2]
- strh r3, [r1, #0x4]
- str r2, [r0, #0x0]
- ldr r0, [r4, #0x0]
- cmp r0, #0x0
- beq _02097774
- ldr r0, _020977D8 ; =UNK_021C8CCC
- mov r1, #0x1
- str r1, [r0, #0x0]
- ldr r1, _020977DC ; =FUN_020975D8
- str r2, [r5, #0x0]
- ldr r0, _020977E0 ; =UNK_021C8CC8
- str r1, [r5, #0xc]
- ldr r0, [r0, #0x0]
- str r0, [r5, #0x28]
- b _0209778C
-_02097774:
- ldr r0, _020977D8 ; =UNK_021C8CCC
- mov r1, #0x1
- str r2, [r0, #0x0]
- ldr r0, _020977E4 ; =FUN_020975F0
- str r1, [r5, #0x0]
- str r0, [r5, #0xc]
-_0209778C:
- ldr r0, [r4, #0x2c]
- cmp r0, #0x0
- moveq r0, #0xb
- bl CPS_SetThreadPriority
- ldr r0, _020977E8 ; =CPSi_RecvCallbackFunc
- bl FUN_020A87BC
- ldr r0, _020977EC ; =FUN_020996C0
- bl CPS_SetScavengerCallback
- mov r0, r5
- bl CPS_Startup
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020977C0: .word UNK_021C8CC0
-_020977C4: .word UNK_021C8CD4
-_020977C8: .word UNK_021C8CC4
-_020977CC: .word FUN_020975B4
-_020977D0: .word UNK_021061DC
-_020977D4: .word CPSMyIp
-_020977D8: .word UNK_021C8CCC
-_020977DC: .word FUN_020975D8
-_020977E0: .word UNK_021C8CC8
-_020977E4: .word FUN_020975F0
-_020977E8: .word CPSi_RecvCallbackFunc
-_020977EC: .word FUN_020996C0
-
- arm_func_start FUN_020977F0
-FUN_020977F0: ; 0x020977F0
- stmdb sp!, {r4,lr}
- ldr r0, _02097828 ; =UNK_021C8CC0
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x20]
- bl FUN_02097B78
- movs r4, r0
- bmi _0209781C
- ldr r0, _0209782C ; =UNK_021061F4
- bl FUN_02097F70
- ldr r1, _02097830 ; =UNK_021C8CD0
- str r0, [r1, #0x0]
-_0209781C:
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_02097828: .word UNK_021C8CC0
-_0209782C: .word UNK_021061F4
-_02097830: .word UNK_021C8CD0
-
- .extern _SDK_NintendoWiFi
-
- arm_func_start FUN_02097834
-FUN_02097834: ; 0x02097834
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r0, _02097870 ; =_SDK_NintendoWiFi
- bl OSi_ReferSymbol
- ldr r0, _02097874 ; =UNK_021C8CC0
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- movne r0, #0x0
- ldmneia sp!, {r4,lr}
- bxne lr
- str r4, [r0, #0x0]
- bl FUN_0209766C
- bl FUN_020977F0
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_02097870: .word _SDK_NintendoWiFi
-_02097874: .word UNK_021C8CC0
-
- ; Ubiquitous CPS (?)
-
- arm_func_start FUN_02097878
-FUN_02097878: ; 0x02097878
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r9, r0
- add r6, sp, #0x0
- mov r4, #0x0
- mov r5, #0x1
-_02097890:
- mov r0, r9
- mov r1, r6
- mov r2, r5
- bl OS_ReadMessage
- ldr r0, [sp, #0x0]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- ldr r1, [r0, #0x0]
- blx r1
- mov r7, r0
- bl OS_DisableInterrupts
- mov r8, r0
- bl OS_DisableScheduler
- mov r0, r9
- mov r1, r4
- mov r2, r4
- bl OS_ReceiveMessage
- ldr r0, [sp, #0x0]
- ldr r0, [r0, #0x4]
- cmp r0, #0x0
- strne r7, [r0, #0x6c]
- ldr r0, [sp, #0x0]
- ldr r0, [r0, #0x8]
- cmp r0, #0x0
- beq _02097908
- mov r1, r7
- mov r2, r4
- bl OS_SendMessage
-_02097908:
- ldr r0, [sp, #0x0]
- bl FUN_02097A64
- bl OS_EnableScheduler
- mov r0, r8
- bl OS_RestoreInterrupts
- b _02097890
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,lr}
- bx lr
-
- arm_func_start FUN_0209792C
-FUN_0209792C: ; 0x0209792C
- stmdb sp!, {r4,lr}
- mov r4, r1
- bl FUN_02097A50
- mov r1, r4
- bl FUN_02097968
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FUN_02097948
-FUN_02097948:
- ldr ip, _02097954 ; =FUN_02097968
- ldr r0, [r0, #0x68]
- bx r12
- .balign 4
-_02097954: .word FUN_02097968
-
- arm_func_start FUN_02097958
-FUN_02097958: ; 0x02097958
- ldr ip, _02097964 ; =FUN_02097968
- ldr r0, [r0, #0x64]
- bx r12
- .balign 4
-_02097964: .word FUN_02097968
-
- arm_func_start FUN_02097968
-FUN_02097968: ; 0x02097968
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x2c
- mov r4, r1
- ldrsb r2, [r4, #0xd]
- mov r5, r0
- cmp r2, #0x1
- bne _020979BC
- add r0, sp, #0x8
- add r1, sp, #0x4
- mov r2, #0x1
- bl OS_InitMessageQueue
- add r2, sp, #0x8
- mov r0, r5
- mov r1, r4
- str r2, [r4, #0x8]
- bl FUN_020979F8
- add r0, sp, #0x8
- add r1, sp, #0x0
- mov r2, #0x1
- bl OS_ReceiveMessage
- b _020979CC
-_020979BC:
- mov r2, #0x0
- str r2, [r4, #0x8]
- bl FUN_020979F8
- str r0, [sp, #0x0]
-_020979CC:
- ldr r0, [sp, #0x0]
- add sp, sp, #0x2c
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start FUN_020979DC
-FUN_020979DC:
- stmdb sp!, {r4,lr}
- mov r4, r1
- bl FUN_02097A50
- mov r1, r4
- bl FUN_020979F8
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FUN_020979F8
-FUN_020979F8:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- movs r5, r1
- beq _02097A14
- ldrsb r1, [r5, #0xd]
- ands r1, r1, #0x1
- beq _02097A1C
-_02097A14:
- mov r2, #0x1
- b _02097A20
-_02097A1C:
- mov r2, #0x0
-_02097A20:
- mov r1, r5
- bl OS_SendMessage
- movs r4, r0
- bne _02097A38
- mov r0, r5
- bl FUN_02097A64
-_02097A38:
- cmp r4, #0x0
- movne r0, #0x0
- mvneq r0, #0x29
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start FUN_02097A50
-FUN_02097A50: ; 0x02097A50
- ldr r1, [r0, #0x64]
- cmp r1, #0x0
- ldreq r1, [r0, #0x68]
- mov r0, r1
- bx lr
-
- arm_func_start FUN_02097A64
-FUN_02097A64:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- movs r1, r0
- addeq sp, sp, #0x4
- ldmeqia sp!, {lr}
- bxeq lr
- ldr r0, _02097A94 ; =UNK_021C8D08
- mov r2, #0x0
- bl OS_SendMessage
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_02097A94: .word UNK_021C8D08
-
- arm_func_start FUN_02097A98
-FUN_02097A98: ; 0x02097A98
- stmdb sp!, {r4-r6,lr}
- mov r4, r2
- mov r6, r0
- mov r0, r4
- mov r5, r1
- bl FUN_02097AE0
- cmp r0, #0x0
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- str r6, [r0, #0x0]
- str r5, [r0, #0x4]
- mov r1, #0x0
- str r1, [r0, #0x8]
- ldrsb r1, [r5, #0x73]
- strb r1, [r0, #0xc]
- strb r4, [r0, #0xd]
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start FUN_02097AE0
-FUN_02097AE0:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, r0
- ldr r0, _02097B10 ; =UNK_021C8D08
- add r1, sp, #0x0
- bl OS_ReceiveMessage
- cmp r0, #0x0
- ldrne r0, [sp, #0x0]
- moveq r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_02097B10: .word UNK_021C8D08
-
- arm_func_start FUN_02097B14
-FUN_02097B14: ; 0x02097B14
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _02097B6C ; =UNK_021C8D08
- ldr r1, [r0, #0x1c]
- ldr r0, [r0, #0x14]
- cmp r1, r0
- addlt sp, sp, #0x4
- mvnlt r0, #0x0
- ldmltia sp!, {lr}
- bxlt lr
- ldr r0, _02097B70 ; =UNK_021C8CC0
- ldr r1, _02097B74 ; =UNK_021C8D04
- ldr r2, [r0, #0x0]
- ldr r0, [r1, #0x0]
- ldr r1, [r2, #0x1c]
- blx r1
- ldr r1, _02097B74 ; =UNK_021C8D04
- mov r0, #0x0
- str r0, [r1, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_02097B6C: .word UNK_021C8D08
-_02097B70: .word UNK_021C8CC0
-_02097B74: .word UNK_021C8D04
-
- arm_func_start FUN_02097B78
-FUN_02097B78: ; 0x02097B78
- stmdb sp!, {r4-r6,lr}
- mov r4, r0
- mov r0, #0x2c
- mul r1, r4, r0
- ldr r0, _02097C08 ; =UNK_021C8CC0
- mov r2, r4, lsl #0x2
- add r2, r2, #0x3
- ldr r0, [r0, #0x0]
- add r1, r1, #0x3
- bic r5, r2, #0x3
- bic r2, r1, #0x3
- ldr r1, [r0, #0x18]
- add r0, r2, r5
- blx r1
- movs r6, r0
- mvneq r0, #0x0
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- ldr r0, _02097C0C ; =UNK_021C8D08
- mov r1, r6
- mov r2, r4
- bl OS_InitMessageQueue
- cmp r4, #0x0
- add r5, r6, r5
- ble _02097BF4
-_02097BDC:
- mov r0, r5
- bl FUN_02097A64
- sub r4, r4, #0x1
- cmp r4, #0x0
- add r5, r5, #0x2c
- bgt _02097BDC
-_02097BF4:
- ldr r1, _02097C10 ; =UNK_021C8D04
- mov r0, #0x0
- str r6, [r1, #0x0]
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_02097C08: .word UNK_021C8CC0
-_02097C0C: .word UNK_021C8D08
-_02097C10: .word UNK_021C8D04
-
- arm_func_start FUN_02097C14
-FUN_02097C14: ; 0x02097C14
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0xc
- mov r5, r2
- mov r7, r0
- mov r0, r5
- mov r6, r1
- bl FUN_02097DC4
- add r4, r7, r0
- ldrb r2, [r5, #0x3]
- mov r0, r6
- mov r1, r7
- bl OS_InitMessageQueue
- add r0, r6, #0xe0
- bl OS_InitMutex
- ldrh r2, [r5, #0x0]
- add r0, r6, #0x20
- ldr r1, _02097C88 ; =FUN_02097878
- str r2, [sp, #0x0]
- ldrb r12, [r5, #0x2]
- mov r2, r6
- mov r3, r4
- str r12, [sp, #0x4]
- bl OS_CreateThread
- add r0, r6, #0x20
- bl OS_WakeupThreadDirect
- mov r0, r4
- add sp, sp, #0xc
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_02097C88: .word FUN_02097878
-
- arm_func_start FUN_02097C8C
-FUN_02097C8C: ; 0x02097C8C
- stmdb sp!, {r4,lr}
- mov r4, r0
- cmp r2, #0x0
- moveq r0, #0x0
- str r0, [r1, #0x4]
- mov r0, r2
- str r2, [r1, #0x0]
- bl FUN_02099F6C
- add r0, r4, r0
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FUN_02097CB8
-FUN_02097CB8: ; 0x02097CB8
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r1
- ldrsb r1, [r6, #0x0]
- mov r7, r0
- add r4, r7, #0x80
- strb r1, [r7, #0x73]
- ldrsb r0, [r6, #0x1]
- strb r0, [r7, #0x72]
- ldrh r0, [r6, #0x2]
- cmp r0, #0x0
- beq _02097D40
- str r4, [r7, #0x64]
- ldrh r2, [r6, #0x4]
- mov r1, r4
- add r0, r4, #0x114
- strh r2, [r4, #0xfc]
- add r2, r6, #0x10
- mov r5, r4
- bl FUN_02097C14
- ldrh r2, [r6, #0x2]
- add r1, r7, #0x3c
- bl FUN_02097C8C
- ldrh r2, [r6, #0x8]
- add r1, r7, #0x50
- bl FUN_02097C8C
- ldrh r3, [r6, #0xe]
- add r1, r5, #0x100
- mov r2, #0x0
- strh r3, [r1, #0xa]
- str r2, [r5, #0x110]
- ldr r1, [r5, #0x110]
- mov r4, r0
- str r1, [r5, #0x10c]
-_02097D40:
- ldrh r0, [r6, #0x6]
- cmp r0, #0x0
- ldreq r0, _02097DC0 ; =UNK_021C8CD0
- ldreq r0, [r0, #0x0]
- ldreq r0, [r0, #0x68]
- streq r0, [r7, #0x68]
- beq _02097DB0
- str r4, [r7, #0x68]
- mov r1, r4
- str r7, [r4, #0x10c]
- add r0, r4, #0x110
- add r2, r6, #0x14
- mov r5, r4
- bl FUN_02097C14
- ldrh r2, [r6, #0x6]
- add r1, r7, #0x48
- bl FUN_02097C8C
- ldrh r2, [r6, #0xa]
- add r1, r7, #0x58
- bl FUN_02097C8C
- ldrh r2, [r6, #0xc]
- add r1, r4, #0xf8
- bl FUN_02097C8C
- mov r1, #0x0
- str r1, [r5, #0x108]
- ldr r1, [r5, #0x108]
- mov r4, r0
- str r1, [r5, #0x104]
-_02097DB0:
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_02097DC0: .word UNK_021C8CD0
-
- arm_func_start FUN_02097DC4
-FUN_02097DC4: ; 0x02097DC4
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldrb r0, [r5, #0x3]
- mov r0, r0, lsl #0x2
- bl FUN_02099F6C
- mov r4, r0
- ldrh r0, [r5, #0x0]
- bl FUN_02099F6C
- add r0, r4, r0
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start FUN_02097DF8
-FUN_02097DF8: ; 0x02097DF8
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldrh r0, [r5, #0x2]
- mov r4, #0x80
- cmp r0, #0x0
- beq _02097E38
- add r4, r4, #0x114
- bl FUN_02099F6C
- add r4, r4, r0
- ldrh r0, [r5, #0x8]
- bl FUN_02099F6C
- add r4, r4, r0
- add r0, r5, #0x10
- bl FUN_02097DC4
- add r4, r4, r0
-_02097E38:
- ldrh r0, [r5, #0x6]
- cmp r0, #0x0
- beq _02097E74
- add r4, r4, #0x110
- bl FUN_02099F6C
- add r4, r4, r0
- ldrh r0, [r5, #0xa]
- bl FUN_02099F6C
- add r4, r4, r0
- ldrh r0, [r5, #0xc]
- bl FUN_02099F6C
- add r4, r4, r0
- add r0, r5, #0x14
- bl FUN_02097DC4
- add r4, r4, r0
-_02097E74:
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start FUN_02097E84
-FUN_02097E84: ; 0x02097E84
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- bl FUN_02097DF8
- mov r4, r0
- bl OS_DisableInterrupts
- ldr r1, _02097EF4 ; =UNK_021C8CC0
- mov r5, r0
- ldr r1, [r1, #0x0]
- mov r0, r4
- ldr r1, [r1, #0x18]
- blx r1
- movs r6, r0
- beq _02097EDC
- mov r2, r4
- mov r1, #0x0
- bl MI_CpuFill8
- mov r0, r6
- mov r1, r7
- bl FUN_02097CB8
- mov r0, r6
- bl FUN_0209A094
-_02097EDC:
- mov r0, r5
- bl OS_RestoreInterrupts
- mov r0, r6
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_02097EF4: .word UNK_021C8CC0
-
- arm_func_start FUN_02097EF8
-FUN_02097EF8: ; 0x02097EF8
- stmdb sp!, {r4,lr}
- ldr r4, [r0, #0x4]
- mov r0, r4
- bl CPS_SocRegister
- ldrsb r0, [r4, #0x73]
- ldr r1, [r4, #0x68]
- cmp r0, #0x4
- addls pc, pc, r0, lsl #0x2
- b _02097F58
-_02097F1C:
- b _02097F30
-_02097F20:
- b _02097F40
-_02097F24:
- b _02097F54
-_02097F28:
- b _02097F58
-_02097F2C:
- b _02097F30
-_02097F30:
- add r0, r1, #0x20
- bl CPS_SocDup
- bl CPS_SocUse
- b _02097F58
-_02097F40:
- bl CPS_SocUse
- bl CPS_SocDatagramMode
- ldr r0, _02097F6C ; =FUN_02098550
- bl CPS_SetUdpCallback
- b _02097F58
-_02097F54:
- bl CPS_SocDatagramMode
-_02097F58:
- mov r0, #0x1
- strh r0, [r4, #0x70]
- mov r0, #0x0
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_02097F6C: .word FUN_02098550
-
- arm_func_start FUN_02097F70
-FUN_02097F70: ; 0x02097F70
- stmdb sp!, {r4,lr}
- bl FUN_02097E84
- movs r4, r0
- mvneq r0, #0x30
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldr r0, _02097FB0 ; =FUN_02097EF8
- mov r1, r4
- mov r2, #0x1
- bl FUN_02097A98
- mov r1, r0
- mov r0, r4
- bl FUN_0209792C
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_02097FB0: .word FUN_02097EF8
-
- arm_func_start FUN_02097FB4
-FUN_02097FB4: ; 0x02097FB4
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x8
- mov r6, r0
- ldr r4, [r6, #0x4]
- ldr r5, [r4, #0x64]
- add r0, r5, #0xe0
- bl OS_LockMutex
- mov r1, #0x0
- ldrh r0, [r6, #0x10]
- mov r2, r1
- bl CPS_SocPingMode
- bl CPS_TcpListen
- mov r2, #0x0
- add r0, sp, #0x0
- add r1, sp, #0x4
- str r2, [r5, #0xf8]
- bl CPS_SocWho
- ldrh r2, [sp, #0x0]
- ldr r1, [r6, #0x14]
- strh r2, [r1, #0x0]
- ldr r1, [r6, #0x18]
- str r0, [r1, #0x0]
- ldrsh r1, [r4, #0x70]
- add r0, r5, #0xe0
- orr r1, r1, #0x4
- strh r1, [r4, #0x70]
- bl OS_UnlockMutex
- mov r0, #0x0
- add sp, sp, #0x8
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start FUN_02098030
-FUN_02098030:
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl FUN_02099FA8
- cmp r0, #0x0
- mvnne r0, #0x1b
- ldmneia sp!, {r4-r6,lr}
- bxne lr
- cmp r6, #0x0
- mov r1, #0x0
- beq _0209806C
- ldrsh r0, [r6, #0x70]
- ands r0, r0, #0x1
- movne r1, #0x1
-_0209806C:
- cmp r1, #0x0
- mvneq r0, #0x26
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- ldrsh r0, [r6, #0x70]
- ands r0, r0, #0x2
- mvnne r0, #0x1b
- ldmneia sp!, {r4-r6,lr}
- bxne lr
- ldrsb r0, [r6, #0x73]
- mov r1, #0x1
- cmp r0, #0x0
- beq _020980A8
- cmp r0, #0x4
- movne r1, #0x0
-_020980A8:
- cmp r1, #0x0
- mvneq r0, #0x1b
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- ldrsb r2, [r6, #0x72]
- cmp r2, #0x1
- mvnne r0, #0x5
- ldmneia sp!, {r4-r6,lr}
- bxne lr
- ldrh r0, [r6, #0x74]
- cmp r0, #0x0
- mvneq r0, #0x1b
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- ldr r0, _0209811C ; =FUN_02097FB4
- mov r1, r6
- bl FUN_02097A98
- mov r1, r0
- ldrh r2, [r6, #0x74]
- mov r0, r6
- strh r2, [r1, #0x10]
- str r5, [r1, #0x14]
- str r4, [r1, #0x18]
- ldrsh r2, [r6, #0x70]
- orr r2, r2, #0x2
- strh r2, [r6, #0x70]
- bl FUN_02097958
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_0209811C: .word FUN_02097FB4
-
- arm_func_start FUN_02098120
-FUN_02098120:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl FUN_02099FA8
- cmp r0, #0x0
- addne sp, sp, #0x4
- mvnne r0, #0x1b
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- cmp r6, #0x0
- mov r1, #0x0
- beq _02098164
- ldrsh r0, [r6, #0x70]
- ands r0, r0, #0x1
- movne r1, #0x1
-_02098164:
- cmp r1, #0x0
- addeq sp, sp, #0x4
- mvneq r0, #0x26
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- ldrsh r0, [r6, #0x70]
- ands r0, r0, #0x2
- addne sp, sp, #0x4
- mvnne r0, #0x1b
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- ldrsb r0, [r6, #0x73]
- mov r1, #0x1
- cmp r0, #0x0
- beq _020981A8
- cmp r0, #0x4
- movne r1, #0x0
-_020981A8:
- cmp r1, #0x0
- addeq sp, sp, #0x4
- mvneq r0, #0x1b
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- ldrsb r0, [r6, #0x72]
- cmp r0, #0x1
- addne sp, sp, #0x4
- mvnne r0, #0x5
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- ldr r0, _02098228 ; =UNK_021061DC
- bl FUN_02097F70
- movs r7, r0
- addmi sp, sp, #0x4
- ldmmiia sp!, {r4-r7,lr}
- bxmi lr
- ldrh r1, [r6, #0x74]
- bl FUN_020984B4
- cmp r0, #0x0
- addlt sp, sp, #0x4
- ldmltia sp!, {r4-r7,lr}
- bxlt lr
- mov r0, r7
- mov r1, r5
- mov r2, r4
- bl FUN_02098030
- cmp r0, #0x0
- movge r0, r7
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_02098228: .word UNK_021061DC
-
- arm_func_start FUN_0209822C
-FUN_0209822C: ; 0x0209822C
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_02099FA8
- cmp r0, #0x0
- mvnne r0, #0x1b
- ldmneia sp!, {r4,lr}
- bxne lr
- cmp r4, #0x0
- mov r1, #0x0
- beq _02098260
- ldrsh r0, [r4, #0x70]
- ands r0, r0, #0x1
- movne r1, #0x1
-_02098260:
- cmp r1, #0x0
- mvneq r0, #0x26
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldrsh r0, [r4, #0x70]
- ands r0, r0, #0x2
- mvnne r0, #0x1b
- ldmneia sp!, {r4,lr}
- bxne lr
- ldrsb r0, [r4, #0x73]
- mov r1, #0x1
- cmp r0, #0x0
- beq _0209829C
- cmp r0, #0x4
- movne r1, #0x0
-_0209829C:
- cmp r1, #0x0
- mvneq r0, #0x1b
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldrsb r0, [r4, #0x72]
- cmp r0, #0x1
- moveq r0, #0x0
- mvnne r0, #0x5
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FUN_020982C4
-FUN_020982C4: ; 0x020982C4
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- ldr r4, [r7, #0x4]
- mov r5, #0x0
- ldr r6, [r4, #0x64]
- add r0, r6, #0xe0
- bl OS_LockMutex
- ldrh r0, [r7, #0x10]
- ldrh r1, [r7, #0x12]
- ldr r2, [r7, #0x14]
- bl CPS_SocPingMode
- mov r0, r5
- str r0, [r6, #0xf8]
- ldrsb r0, [r7, #0xc]
- cmp r0, #0x0
- beq _02098310
- cmp r0, #0x4
- bne _02098318
-_02098310:
- bl CPS_TcpConnect
- mov r5, r0
-_02098318:
- add r0, r6, #0xe0
- bl OS_UnlockMutex
- cmp r5, #0x0
- ldrnesh r1, [r4, #0x70]
- mvnne r0, #0x4b
- moveq r0, #0x0
- orrne r1, r1, #0x40
- strneh r1, [r4, #0x70]
- ldreqsh r1, [r4, #0x70]
- orreq r1, r1, #0x4
- streqh r1, [r4, #0x70]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start FUN_02098350
-FUN_02098350: ; 0x02098350
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldrsb r2, [r4, #0x72]
- ldr r0, _020983AC ; =FUN_020982C4
- mov r1, r4
- bl FUN_02097A98
- movs r1, r0
- mvneq r0, #0x20
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldrh r2, [r4, #0x74]
- mov r0, r4
- strh r2, [r1, #0x10]
- ldrh r2, [r4, #0x76]
- strh r2, [r1, #0x12]
- ldr r2, [r4, #0x78]
- str r2, [r1, #0x14]
- ldrsh r2, [r4, #0x70]
- orr r2, r2, #0x2
- strh r2, [r4, #0x70]
- bl FUN_02097958
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_020983AC: .word FUN_020982C4
-
- arm_func_start FUN_020983B0
-FUN_020983B0: ; 0x020983B0
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl FUN_02099FA8
- cmp r0, #0x0
- bne _020983D8
- ldrsh r0, [r6, #0x70]
- ands r0, r0, #0x8
- beq _020983E4
-_020983D8:
- mvn r0, #0x1b
- ldmia sp!, {r4-r6,lr}
- bx lr
-_020983E4:
- cmp r6, #0x0
- mov r1, #0x0
- beq _020983FC
- ldrsh r0, [r6, #0x70]
- ands r0, r0, #0x1
- movne r1, #0x1
-_020983FC:
- cmp r1, #0x0
- mvneq r0, #0x26
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- ldrsb r0, [r6, #0x73]
- mov r1, #0x1
- cmp r0, #0x0
- beq _02098424
- cmp r0, #0x4
- movne r1, #0x0
-_02098424:
- cmp r1, #0x0
- beq _0209849C
- ldrsh r0, [r6, #0x70]
- ands r0, r0, #0x4
- beq _02098450
- ldrsb r0, [r6, #0x72]
- cmp r0, #0x1
- mvneq r0, #0x1d
- movne r0, #0x0
- ldmia sp!, {r4-r6,lr}
- bx lr
-_02098450:
- ldrsh r0, [r6, #0x70]
- ands r0, r0, #0x2
- beq _02098478
- ldrsh r0, [r6, #0x70]
- ands r0, r0, #0x40
- ldrne r0, [r6, #0x6c]
- ldreq r0, _020984B0 ; =UNK_021061C0
- ldreq r0, [r0, #0x0]
- ldmia sp!, {r4-r6,lr}
- bx lr
-_02098478:
- strh r5, [r6, #0x76]
- mov r0, r6
- str r4, [r6, #0x78]
- bl FUN_02098350
- ldrsb r1, [r6, #0x72]
- cmp r1, #0x1
- mvnne r0, #0x19
- ldmia sp!, {r4-r6,lr}
- bx lr
-_0209849C:
- strh r5, [r6, #0x76]
- str r4, [r6, #0x78]
- mov r0, #0x0
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020984B0: .word UNK_021061C0
-
- arm_func_start FUN_020984B4
-FUN_020984B4:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r0
- mov r5, r1
- bl FUN_02099FA8
- cmp r0, #0x0
- addne sp, sp, #0x4
- mvnne r0, #0x1b
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- cmp r4, #0x0
- mov r1, #0x0
- beq _020984F4
- ldrsh r0, [r4, #0x70]
- ands r0, r0, #0x1
- movne r1, #0x1
-_020984F4:
- cmp r1, #0x0
- addeq sp, sp, #0x4
- mvneq r0, #0x26
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- ldrsh r0, [r4, #0x70]
- ands r0, r0, #0x2
- addne sp, sp, #0x4
- mvnne r0, #0x6
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- strh r5, [r4, #0x74]
- ldrsb r0, [r4, #0x73]
- cmp r0, #0x1
- addne sp, sp, #0x4
- movne r0, #0x0
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- mov r0, r4
- bl FUN_02098350
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start FUN_02098550
-FUN_02098550: ; 0x02098550
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r7, r2
- ldr r6, [r7, #0x64]
- mov r9, r0
- mov r8, r1
- bl OS_DisableInterrupts
- add r1, r6, #0x100
- ldrh r2, [r1, #0x8]
- ldrh r1, [r1, #0xa]
- mov r4, r0
- add r0, r2, r8
- cmp r1, r0
- blo _02098618
- ldr r1, _02098668 ; =UNK_021C8CC0
- add r0, r8, #0xc
- ldr r1, [r1, #0x0]
- ldr r1, [r1, #0x18]
- blx r1
- movs r5, r0
- beq _02098604
- add r1, r6, #0x100
- ldrh r3, [r1, #0x8]
- mov r2, #0x0
- mov r0, r9
- add r3, r3, r8
- strh r3, [r1, #0x8]
- str r2, [r5, #0x0]
- strh r8, [r5, #0x4]
- ldrh r3, [r7, #0x18]
- mov r2, r8
- add r1, r5, #0xc
- strh r3, [r5, #0x6]
- ldr r3, [r7, #0x1c]
- str r3, [r5, #0x8]
- bl MI_CpuCopy8
- ldr r0, [r6, #0x100]
- cmp r0, #0x0
- ldrne r0, [r6, #0x100]
- strne r5, [r0, #0x0]
- str r5, [r6, #0x100]
- ldr r0, [r6, #0x104]
- cmp r0, #0x0
- streq r5, [r6, #0x104]
- b _02098628
-_02098604:
- ldr r0, _0209866C ; =UNK_021C8D28
- ldr r1, [r0, #0x0]
- add r1, r1, #0x1
- str r1, [r0, #0x0]
- b _02098628
-_02098618:
- ldr r0, _0209866C ; =UNK_021C8D28
- ldr r1, [r0, #0x4]
- add r1, r1, #0x1
- str r1, [r0, #0x4]
-_02098628:
- ldrh r0, [r7, #0x74]
- cmp r0, #0x0
- ldreqh r0, [r7, #0xa]
- streqh r0, [r7, #0x74]
- ldrh r1, [r7, #0x1a]
- add r0, r6, #0x10c
- strh r1, [r7, #0x18]
- ldr r1, [r7, #0x20]
- str r1, [r7, #0x1c]
- bl OS_WakeupThread
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,lr}
- bx lr
- .balign 4
-_02098668: .word UNK_021C8CC0
-_0209866C: .word UNK_021C8D28
-
- arm_func_start FUN_02098670
-FUN_02098670: ; 0x02098670
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x14
- mov r10, r0
- ldr r9, [r10, #0x64]
- str r1, [sp, #0x0]
- ldr r0, [r9, #0x104]
- str r2, [sp, #0x4]
- str r3, [sp, #0x8]
- bl OS_DisableInterrupts
- ldr r8, [r9, #0x104]
- str r0, [sp, #0xc]
- cmp r8, #0x0
- bne _02098710
- ldr r0, [sp, #0x3c]
- and r7, r0, #0x1
- add r6, r9, #0x10c
- mov r4, #0x1
- mov r5, #0x0
-_020986B8:
- cmp r7, #0x0
- mvneq r11, #0x5
- beq _02098710
- mov r0, r6
- bl OS_SleepThread
- mov r0, r10
- bl FUN_02099FA8
- cmp r0, #0x0
- bne _020986FC
- mov r1, r5
- cmp r10, #0x0
- beq _020986F4
- ldrsh r0, [r10, #0x70]
- ands r0, r0, #0x1
- movne r1, r4
-_020986F4:
- cmp r1, #0x0
- bne _02098704
-_020986FC:
- mvn r11, #0x37
- b _02098710
-_02098704:
- ldr r8, [r9, #0x104]
- cmp r8, #0x0
- beq _020986B8
-_02098710:
- cmp r8, #0x0
- beq _020987A4
- ldrh r1, [r8, #0x4]
- ldr r0, [sp, #0x4]
- cmp r0, r1
- strgt r1, [sp, #0x4]
- ldr r1, [sp, #0x0]
- ldr r2, [sp, #0x4]
- add r0, r8, #0xc
- bl MI_CpuCopy8
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- ldrneh r1, [r8, #0x6]
- strneh r1, [r0, #0x0]
- ldr r1, [sp, #0x38]
- cmp r1, #0x0
- ldrne r0, [r8, #0x8]
- strne r0, [r1, #0x0]
- ldrsb r0, [r9, #0xfe]
- ldrh r11, [r8, #0x4]
- cmp r0, #0x0
- bne _020987A4
- ldr r0, [r8, #0x0]
- ldr r1, _020987BC ; =UNK_021C8CC0
- str r0, [r9, #0x104]
- ldr r0, [r8, #0x0]
- cmp r0, #0x0
- moveq r0, #0x0
- streq r0, [r9, #0x100]
- ldr r1, [r1, #0x0]
- mov r0, r8
- ldr r1, [r1, #0x1c]
- blx r1
- add r0, r9, #0x100
- ldrh r1, [r0, #0x8]
- sub r1, r1, r11
- strh r1, [r0, #0x8]
-_020987A4:
- ldr r0, [sp, #0xc]
- bl OS_RestoreInterrupts
- mov r0, r11
- add sp, sp, #0x14
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_020987BC: .word UNK_021C8CC0
-
- arm_func_start FUN_020987C0
-FUN_020987C0: ; 0x020987C0
- stmdb sp!, {r4-r6,lr}
- ldr r6, [r0, #0x64]
- bl OS_DisableInterrupts
- ldr r4, [r6, #0xf8]
- mov r5, r0
- cmp r4, #0x0
- beq _020987EC
- mov r1, #0x0
- mov r0, r4
- str r1, [r6, #0xf8]
- bl CPS_SocConsume
-_020987EC:
- mov r0, r5
- bl OS_RestoreInterrupts
- mov r0, r4
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start FUN_02098800
-FUN_02098800: ; 0x02098800
- ldr ip, _0209880C ; =FUN_020987C0
- ldr r0, [r0, #0x4]
- bx r12
- .balign 4
-_0209880C: .word FUN_020987C0
-
- arm_func_start FUN_02098810
-FUN_02098810:
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r1, [r4, #0x64]
- ldrh r0, [r1, #0xfc]
- ldr r1, [r1, #0xf8]
- cmp r1, r0
- movlt r0, #0x0
- ldmltia sp!, {r4,lr}
- bxlt lr
- ldr r0, _02098864 ; =FUN_02098800
- mov r1, r4
- mov r2, #0x0
- bl FUN_02097A98
- movs r1, r0
- mvneq r0, #0x20
- ldmeqia sp!, {r4,lr}
- bxeq lr
- mov r0, r4
- bl FUN_02097958
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_02098864: .word FUN_02098800
-
- arm_func_start FUN_02098868
-FUN_02098868: ; 0x02098868
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x14
- ldr r9, [r0, #0x4]
- ldr r1, [r0, #0x10]
- ldr r8, [r9, #0x64]
- str r1, [sp, #0x4]
- ldr r1, [r0, #0x18]
- ldr r10, [r0, #0x14]
- ldr r0, [r0, #0x1c]
- ldr r7, [r8, #0xf8]
- str r1, [sp, #0x8]
- str r0, [sp, #0xc]
- add r11, sp, #0x10
- mov r5, #0x0
- mov r6, #0x1
- mov r4, #0xa
-_020988A8:
- mov r0, r11
- bl CPS_SocRead
- cmp r0, #0x0
- beq _02098904
- ldr r1, [sp, #0x10]
- sub r1, r1, r7
- cmp r1, #0x0
- bgt _02098904
- ldrsb r0, [r9, #0x73]
- mov r1, r6
- cmp r0, #0x0
- beq _020988E0
- cmp r0, #0x4
- movne r1, r5
-_020988E0:
- cmp r1, #0x0
- beq _020988F8
- ldrb r0, [r9, #0x8]
- cmp r0, #0x4
- movne r0, #0x0
- bne _02098904
-_020988F8:
- mov r0, r4
- bl OS_Sleep
- b _020988A8
-_02098904:
- ldrsb r1, [r9, #0x73]
- cmp r1, #0x4
- bne _02098954
- cmp r0, #0x0
- addeq sp, sp, #0x14
- moveq r0, #0x0
- ldmeqia sp!, {r4-r11,lr}
- bxeq lr
- ldr r1, [sp, #0x10]
- cmp r10, r1
- movhi r10, r1
- ldr r1, [sp, #0x4]
- mov r2, r10
- bl MI_CpuCopy8
- mov r0, r10
- bl CPS_SocConsume
- add sp, sp, #0x14
- mov r0, r10
- ldmia sp!, {r4-r11,lr}
- bx lr
-_02098954:
- cmp r0, #0x0
- moveq r4, #0x0
- beq _02098980
- ldr r4, [sp, #0xc]
- ldr r1, [sp, #0x4]
- ldr r3, [sp, #0x8]
- mov r0, r9
- mov r2, r10
- str r4, [sp, #0x0]
- bl FUN_02098AA4
- mov r4, r0
-_02098980:
- cmp r4, #0x0
- addle sp, sp, #0x14
- movle r0, r4
- ldmleia sp!, {r4-r11,lr}
- bxle lr
- ldrh r0, [r8, #0xfc]
- ldr r1, [r8, #0xf8]
- cmp r1, r0
- blt _020989AC
- mov r0, r9
- bl FUN_020987C0
-_020989AC:
- mov r0, r4
- add sp, sp, #0x14
- ldmia sp!, {r4-r11,lr}
- bx lr
-
- arm_func_start FUN_020989BC
-FUN_020989BC: ; 0x020989BC
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- mov r5, r2
- ldr r0, _02098A10 ; =FUN_02098868
- mov r1, r7
- mov r2, #0x1
- mov r4, r3
- bl FUN_02097A98
- mov r1, r0
- str r6, [r1, #0x10]
- str r5, [r1, #0x14]
- ldr r2, [sp, #0x18]
- str r4, [r1, #0x18]
- mov r0, r7
- str r2, [r1, #0x1c]
- bl FUN_02097958
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_02098A10: .word FUN_02098868
-
- arm_func_start FUN_02098A14
-FUN_02098A14:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r0, [r0, #0x64]
- ldr r5, [r0, #0xc4]
- ldr r4, [r0, #0xf8]
- ldr r0, [r5, #0x44]
- subs lr, r0, r4
- bmi _02098A78
- ldrh r12, [r5, #0xa]
- ldr r0, [sp, #0x10]
- cmp lr, #0x0
- strh r12, [r2, #0x0]
- ldrh r2, [r5, #0x18]
- strh r2, [r3, #0x0]
- ldr r2, [r5, #0x1c]
- str r2, [r0, #0x0]
- str lr, [r1, #0x0]
- bne _02098A90
- ldrb r0, [r5, #0x8]
- cmp r0, #0x4
- beq _02098A90
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r5,lr}
- bx lr
-_02098A78:
- mvn r0, #0x0
- str r0, [r1, #0x0]
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r5,lr}
- bx lr
-_02098A90:
- ldr r0, [r5, #0x40]
- add r0, r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start FUN_02098AA4
-FUN_02098AA4: ; 0x02098AA4
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x14
- mov r9, r0
- mov r8, r1
- mov r7, r2
- mov r6, r3
- bl OS_DisableInterrupts
- add r1, sp, #0xc
- mov r5, r0
- str r1, [sp, #0x0]
- add r1, sp, #0x8
- mov r0, r9
- add r2, sp, #0x4
- add r3, sp, #0x6
- bl FUN_02098A14
- cmp r0, #0x0
- beq _02098B48
- ldr r4, [sp, #0x8]
- cmp r4, #0x0
- mvneq r4, #0x5
- beq _02098B64
- ldrsb r1, [r9, #0x73]
- cmp r7, r4
- movgt r7, r4
- mov r2, #0x1
- cmp r1, #0x0
- beq _02098B18
- cmp r1, #0x4
- movne r2, #0x0
-_02098B18:
- cmp r2, #0x0
- mov r1, r8
- mov r2, r7
- movne r4, r7
- bl MI_CpuCopy8
- ldr r1, [r9, #0x64]
- ldrsb r0, [r1, #0xfe]
- cmp r0, #0x0
- ldreq r0, [r1, #0xf8]
- addeq r0, r0, r4
- streq r0, [r1, #0xf8]
- b _02098B64
-_02098B48:
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- ldrsh r0, [r9, #0x70]
- moveq r4, #0x0
- mvnne r4, #0x1b
- bic r0, r0, #0x6
- strh r0, [r9, #0x70]
-_02098B64:
- cmp r4, #0x0
- blt _02098B9C
- cmp r6, #0x0
- beq _02098B8C
- ldr r1, [sp, #0x30]
- cmp r1, #0x0
- ldrneh r0, [sp, #0x6]
- strneh r0, [r6, #0x0]
- ldrne r0, [sp, #0xc]
- strne r0, [r1, #0x0]
-_02098B8C:
- ldrh r0, [r9, #0x74]
- cmp r0, #0x0
- ldreqh r0, [sp, #0x4]
- streqh r0, [r9, #0x74]
-_02098B9C:
- mov r0, r5
- bl OS_RestoreInterrupts
- mov r0, r4
- add sp, sp, #0x14
- ldmia sp!, {r4-r9,lr}
- bx lr
-
- arm_func_start FUN_02098BB4
-FUN_02098BB4: ; 0x02098BB4
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- ldrsb r12, [r7, #0x73]
- mov r6, r1
- mov r5, r2
- mov r4, r3
- cmp r12, #0x4
- bne _02098BF0
- ldr r4, [sp, #0x18]
- str r4, [sp, #0x0]
- bl FUN_020989BC
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_02098BF0:
- ldr r12, [sp, #0x18]
- str r12, [sp, #0x0]
- bl FUN_02098AA4
- mvn r1, #0x5
- cmp r0, r1
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- ldr r1, [sp, #0x1c]
- ands r1, r1, #0x1
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- ldr r12, [sp, #0x18]
- mov r0, r7
- mov r1, r6
- mov r2, r5
- mov r3, r4
- str r12, [sp, #0x0]
- bl FUN_020989BC
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start FUN_02098C4C
-FUN_02098C4C: ; 0x02098C4C
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x8
- ldr r5, [sp, #0x28]
- mov r7, r0
- ands r0, r5, #0x2
- ldr r5, [r7, #0x64]
- beq _02098C74
- cmp r5, #0x0
- movne r6, #0x1
- bne _02098C78
-_02098C74:
- mov r6, #0x0
-_02098C78:
- cmp r6, #0x0
- ldrnesb r4, [r5, #0xfe]
- movne r0, #0x1
- strneb r0, [r5, #0xfe]
- ldrsb r0, [r7, #0x73]
- cmp r0, #0x1
- bne _02098CB4
- ldr r0, [sp, #0x20]
- ldr r12, [sp, #0x24]
- str r0, [sp, #0x0]
- mov r0, r7
- str r12, [sp, #0x4]
- bl FUN_02098670
- mov r8, r0
- b _02098CDC
-_02098CB4:
- ldr r0, [sp, #0x20]
- ldr r12, [sp, #0x24]
- str r0, [sp, #0x0]
- mov r0, r7
- str r12, [sp, #0x4]
- bl FUN_02098BB4
- movs r8, r0
- bmi _02098CDC
- mov r0, r7
- bl FUN_02098810
-_02098CDC:
- cmp r6, #0x0
- strneb r4, [r5, #0xfe]
- mov r0, r8
- add sp, sp, #0x8
- ldmia sp!, {r4-r8,lr}
- bx lr
-
- arm_func_start FUN_02098CF4
-FUN_02098CF4:
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0xc
- mov r9, r0
- mov r8, r1
- mov r7, r2
- mov r6, r3
- bl FUN_02099FA8
- cmp r0, #0x0
- addne sp, sp, #0xc
- mvnne r0, #0x1b
- ldmneia sp!, {r4-r9,lr}
- bxne lr
- ldr r0, [sp, #0x2c]
- ands r0, r0, #0x4
- bne _02098D3C
- ldrsb r0, [r9, #0x72]
- cmp r0, #0x0
- bne _02098D5C
-_02098D3C:
- ldrsb r0, [r9, #0x73]
- cmp r0, #0x4
- addeq sp, sp, #0xc
- mvneq r0, #0x1b
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- mov r4, #0x0
- b _02098D78
-_02098D5C:
- bl OS_GetProcMode
- cmp r0, #0x12
- addeq sp, sp, #0xc
- mvneq r0, #0x1b
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- mov r4, #0x1
-_02098D78:
- cmp r9, #0x0
- mov r1, #0x0
- beq _02098D90
- ldrsh r0, [r9, #0x70]
- ands r0, r0, #0x1
- movne r1, #0x1
-_02098D90:
- cmp r1, #0x0
- addeq sp, sp, #0xc
- mvneq r0, #0x26
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- ldrsb r0, [r9, #0x73]
- mov r1, #0x1
- cmp r0, #0x0
- beq _02098DBC
- cmp r0, #0x4
- movne r1, #0x0
-_02098DBC:
- cmp r1, #0x0
- beq _02098DEC
- ldrsh r0, [r9, #0x70]
- ands r0, r0, #0x4
- beq _02098DDC
- ldrsh r0, [r9, #0x70]
- ands r0, r0, #0x8
- beq _02098DEC
-_02098DDC:
- add sp, sp, #0xc
- mvn r0, #0x37
- ldmia sp!, {r4-r9,lr}
- bx lr
-_02098DEC:
- ands r0, r4, #0x1
- ldr r5, [r9, #0x64]
- bne _02098E18
- add r0, r5, #0xe0
- bl OS_TryLockMutex
- cmp r0, #0x0
- bne _02098E20
- add sp, sp, #0xc
- mvn r0, #0x5
- ldmia sp!, {r4-r9,lr}
- bx lr
-_02098E18:
- add r0, r5, #0xe0
- bl OS_LockMutex
-_02098E20:
- ldr r0, [sp, #0x28]
- ldr r12, [sp, #0x2c]
- str r0, [sp, #0x0]
- str r4, [sp, #0x4]
- mov r0, r9
- mov r1, r8
- mov r2, r7
- mov r3, r6
- str r12, [sp, #0x8]
- bl FUN_02098C4C
- mov r4, r0
- add r0, r5, #0xe0
- bl OS_UnlockMutex
- mov r0, r4
- add sp, sp, #0xc
- ldmia sp!, {r4-r9,lr}
- bx lr
-
- arm_func_start FUN_02098E64
-FUN_02098E64: ; 0x02098E64
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r2
- ldr r5, [r6, #0x14]
- ldr r4, [r6, #0x1c]
- cmp r5, r1
- mov r7, r0
- movgt r5, r1
- movgt r4, #0x0
- bgt _02098E98
- sub r0, r1, r5
- cmp r4, r0
- movgt r4, r0
-_02098E98:
- cmp r5, #0x0
- ble _02098EC8
- ldr r0, [r6, #0x10]
- mov r1, r7
- mov r2, r5
- bl MI_CpuCopy8
- ldr r0, [r6, #0x10]
- add r0, r0, r5
- str r0, [r6, #0x10]
- ldr r0, [r6, #0x14]
- sub r0, r0, r5
- str r0, [r6, #0x14]
-_02098EC8:
- cmp r4, #0x0
- ble _02098EF8
- ldr r0, [r6, #0x18]
- mov r2, r4
- add r1, r7, r5
- bl MI_CpuCopy8
- ldr r0, [r6, #0x18]
- add r0, r0, r4
- str r0, [r6, #0x18]
- ldr r0, [r6, #0x1c]
- sub r0, r0, r4
- str r0, [r6, #0x1c]
-_02098EF8:
- add r0, r5, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start FUN_02098F08
-FUN_02098F08: ; 0x02098F08
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r1, _02098FBC ; =OSi_ThreadInfo
- mov r4, r0
- ldr r0, [r1, #0x4]
- ldr r5, [r0, #0xa4]
- bl OS_DisableInterrupts
- cmp r5, #0x0
- beq _02098F74
- ldrh r3, [r5, #0x2e]
- cmp r3, #0x0
- beq _02098F64
- ldrh r2, [r5, #0x2c]
- cmp r2, #0x0
- beq _02098F64
- ldr r1, _02098FC0 ; =UNK_021C8CD4
- cmp r3, r2
- ldr r1, [r1, #0x24]
- movgt r3, r2
- cmp r3, r1
- movgt r3, r1
- mov r5, r3, lsl #0x1
- b _02098F80
-_02098F64:
- ldr r1, _02098FC0 ; =UNK_021C8CD4
- ldr r1, [r1, #0x24]
- mov r5, r1, lsl #0x1
- b _02098F80
-_02098F74:
- ldr r1, _02098FC0 ; =UNK_021C8CD4
- ldr r1, [r1, #0x24]
- mov r5, r1, lsl #0x1
-_02098F80:
- bl OS_RestoreInterrupts
- cmp r5, #0x0
- ble _02098FAC
- mov r0, r4
- mov r1, r5
- bl _s32_div_f
- cmp r0, #0x0
- mulgt r0, r5, r0
- addgt sp, sp, #0x4
- ldmgtia sp!, {r4-r5,lr}
- bxgt lr
-_02098FAC:
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_02098FBC: .word OSi_ThreadInfo
-_02098FC0: .word UNK_021C8CD4
-
- arm_func_start FUN_02098FC4
-FUN_02098FC4: ; 0x02098FC4
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r8, r0
- ldr r7, [r8, #0x4]
- mov r4, #0x0
- ldrsb r0, [r7, #0x73]
- ldr r6, [r7, #0x68]
- mov r1, #0x1
- cmp r0, #0x0
- beq _02098FF4
- cmp r0, #0x4
- movne r1, r4
-_02098FF4:
- cmp r1, #0x0
- beq _02099008
- ldrsh r0, [r7, #0x70]
- ands r0, r0, #0x4
- beq _020990DC
-_02099008:
- ldr r2, [r8, #0x28]
- cmp r2, #0x0
- beq _02099020
- ldrh r0, [r8, #0x24]
- ldrh r1, [r8, #0x26]
- bl CPS_SocPingMode
-_02099020:
- ldrsb r1, [r7, #0x73]
- mov r0, #0x1
- cmp r1, #0x0
- beq _02099038
- cmp r1, #0x4
- movne r0, #0x0
-_02099038:
- cmp r0, #0x0
- movne r2, #0x36
- moveq r2, #0x2a
- ldr r0, [r7, #0x4c]
- cmp r1, #0x0
- add r5, r0, r2
- beq _0209905C
- cmp r1, #0x4
- bne _02099070
-_0209905C:
- ldr r0, [r7, #0x48]
- sub r0, r0, r2
- bl FUN_02098F08
- mov r9, r0
- b _02099078
-_02099070:
- ldr r0, [r7, #0x48]
- sub r9, r0, r2
-_02099078:
- mov r0, r5
- mov r1, r9
- mov r2, r8
- bl FUN_02098E64
- mov r1, r0
- cmp r1, #0x0
- ble _020990E0
- mov r0, r5
- bl CPS_SocWrite
- cmp r0, #0x0
- bgt _020990D4
- ldrsb r0, [r7, #0x73]
- mov r1, #0x1
- cmp r0, #0x0
- beq _020990BC
- cmp r0, #0x4
- movne r1, #0x0
-_020990BC:
- cmp r1, #0x0
- ldrnesh r0, [r7, #0x70]
- mvn r4, #0x4b
- bicne r0, r0, #0xe
- strneh r0, [r7, #0x70]
- b _020990E0
-_020990D4:
- add r4, r4, r0
- b _02099078
-_020990DC:
- mvn r4, #0x4b
-_020990E0:
- ldrh r2, [r8, #0x20]
- add r1, r6, #0x100
- add r0, r6, #0x104
- strh r2, [r1, #0x2]
- bl OS_WakeupThread
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,lr}
- bx lr
-
- arm_func_start FUN_02099104
-FUN_02099104:
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r9, r0
- ldr r6, [r9, #0x68]
- mov r4, r1
- mov r8, r2
- ldr r1, [r6, #0x10c]
- ldr r2, [sp, #0x28]
- ldr r0, _0209929C ; =FUN_02098FC4
- mov r7, r3
- bl FUN_02097A98
- movs r5, r0
- addeq sp, sp, #0x4
- mvneq r0, #0x20
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- ldr r0, [sp, #0x28]
- ands r0, r0, #0x1
- beq _02099164
- ldrsb r0, [r9, #0x73]
- cmp r0, #0x1
- movne r0, #0x3
- strneb r0, [r5, #0xd]
- bne _0209916C
-_02099164:
- mov r0, #0x0
- strb r0, [r5, #0xd]
-_0209916C:
- ldr r2, [r6, #0xf8]
- add r1, r7, r8
- cmp r1, r2
- ldr r3, [r6, #0xfc]
- bge _020991A0
- add r0, r3, r7
- str r0, [r5, #0x10]
- str r8, [r5, #0x14]
- mov r0, #0x0
- str r0, [r5, #0x18]
- mov r7, r1
- str r0, [r5, #0x1c]
- b _020991D8
-_020991A0:
- add r0, r3, r7
- str r0, [r5, #0x10]
- sub r0, r2, r7
- str r0, [r5, #0x14]
- str r3, [r5, #0x18]
- ldr r0, [r5, #0x14]
- sub r0, r8, r0
- str r0, [r5, #0x1c]
- ldr r7, [r5, #0x1c]
- ldr r0, [r5, #0x14]
- ldr r1, [r5, #0x18]
- mov r2, r7
- add r0, r4, r0
- bl MI_CpuCopy8
-_020991D8:
- ldr r1, [r5, #0x10]
- ldr r2, [r5, #0x14]
- mov r0, r4
- bl MI_CpuCopy8
- add r0, r6, #0x100
- ldrh r4, [r0, #0x0]
- strh r7, [r5, #0x20]
- ldrh r1, [r5, #0x20]
- strh r1, [r0, #0x0]
- ldrsb r0, [r9, #0x73]
- cmp r0, #0x1
- bne _02099268
- ldrh r0, [r9, #0x74]
- cmp r0, #0x0
- bne _02099224
- bl CPS_SocGetEport
- strh r0, [r9, #0x74]
- ldrh r0, [r9, #0x74]
- strh r0, [r9, #0xa]
-_02099224:
- ldrh r0, [r9, #0x74]
- strh r0, [r5, #0x24]
- ldr r1, [r9, #0x78]
- cmp r1, #0x0
- beq _02099244
- ldr r0, [sp, #0x24]
- cmp r0, #0x0
- beq _02099258
-_02099244:
- ldr r1, [sp, #0x24]
- ldrh r0, [sp, #0x20]
- str r1, [r5, #0x28]
- strh r0, [r5, #0x26]
- b _02099270
-_02099258:
- str r1, [r5, #0x28]
- ldrh r0, [r9, #0x76]
- strh r0, [r5, #0x26]
- b _02099270
-_02099268:
- mov r0, #0x0
- str r0, [r5, #0x28]
-_02099270:
- ldr r0, [r6, #0x10c]
- mov r1, r5
- bl FUN_02097948
- cmp r0, #0x0
- addne r0, r6, #0x100
- movne r8, #0x0
- strneh r4, [r0, #0x0]
- mov r0, r8
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,lr}
- bx lr
- .balign 4
-_0209929C: .word FUN_02098FC4
-
- arm_func_start FUN_020992A0
-FUN_020992A0:
- ldr r2, [r0, #0x68]
- add r0, r2, #0x100
- ldrh r1, [r0, #0x0]
- ldrh r0, [r0, #0x2]
- ldr r2, [r2, #0xf8]
- sub r0, r0, r1
- subs r0, r0, #0x1
- addmi r0, r0, r2
- bx lr
-
- arm_func_start FUN_020992C4
-FUN_020992C4: ; 0x020992C4
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- mov r10, r0
- mov r9, r1
- mov r8, r2
- cmp r8, r9
- mov r11, r3
- ldr r7, [r10, #0x68]
- movgt r8, r9
- bl OS_DisableInterrupts
- ldr r1, [sp, #0x28]
- str r0, [sp, #0x0]
- and r5, r1, #0x1
- add r4, r7, #0x104
-_020992FC:
- mov r0, r10
- bl FUN_020992A0
- mov r6, r0
- cmp r6, r8
- blt _02099328
- add r0, r7, #0x100
- ldrh r0, [r0, #0x0]
- cmp r6, r9
- movge r6, r9
- str r0, [r11, #0x0]
- b _02099340
-_02099328:
- cmp r5, #0x0
- moveq r6, #0x0
- beq _02099340
- mov r0, r4
- bl OS_SleepThread
- b _020992FC
-_02099340:
- ldr r0, [sp, #0x0]
- bl OS_RestoreInterrupts
- mov r0, r6
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,lr}
- bx lr
-
- arm_func_start FUN_02099358
-FUN_02099358: ; 0x02099358
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x1c
- mov r10, r0
- ldr r4, [r10, #0x68]
- ldrsb r0, [r10, #0x73]
- ldr r4, [r4, #0x10c]
- mov r9, r1
- cmp r0, #0x1
- ldr r0, [r4, #0x48]
- mov r8, r2
- str r3, [sp, #0xc]
- ldr r7, [sp, #0x40]
- ldr r6, [sp, #0x44]
- mov r4, #0x0
- bne _020993B4
- sub r0, r0, #0x2a
- cmp r8, r0
- addgt sp, sp, #0x1c
- mvngt r0, #0x22
- ldmgtia sp!, {r4-r11,lr}
- bxgt lr
- str r8, [sp, #0x10]
- b _020993C4
-_020993B4:
- sub r0, r0, #0x36
- str r0, [sp, #0x10]
- cmp r8, r0
- strle r8, [sp, #0x10]
-_020993C4:
- cmp r8, #0x0
- ble _02099460
- and r11, r6, #0x1
-_020993D0:
- ldr r2, [sp, #0x10]
- mov r0, r10
- mov r1, r8
- add r3, sp, #0x14
- str r6, [sp, #0x0]
- bl FUN_020992C4
- mov r5, r0
- cmp r5, #0x0
- ble _02099438
- ldr r0, [sp, #0xc]
- mov r1, r9
- str r0, [sp, #0x0]
- str r7, [sp, #0x4]
- str r6, [sp, #0x8]
- ldr r3, [sp, #0x14]
- mov r0, r10
- mov r2, r5
- bl FUN_02099104
- cmp r0, #0x0
- addle sp, sp, #0x1c
- mvnle r0, #0x5
- ldmleia sp!, {r4-r11,lr}
- bxle lr
- add r9, r9, r5
- sub r8, r8, r5
- add r4, r4, r5
-_02099438:
- cmp r11, #0x0
- bne _02099458
- cmp r5, #0x0
- bgt _02099460
- add sp, sp, #0x1c
- mvn r0, #0x5
- ldmia sp!, {r4-r11,lr}
- bx lr
-_02099458:
- cmp r8, #0x0
- bgt _020993D0
-_02099460:
- mov r0, r4
- add sp, sp, #0x1c
- ldmia sp!, {r4-r11,lr}
- bx lr
-
- arm_func_start FUN_02099470
-FUN_02099470: ; 0x02099470
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x8
- mov r8, r0
- mov r7, r1
- mov r6, r2
- mov r5, r3
- bl FUN_02099FA8
- cmp r0, #0x0
- addne sp, sp, #0x8
- mvnne r0, #0x1b
- ldmneia sp!, {r4-r8,lr}
- bxne lr
- cmp r8, #0x0
- mov r1, #0x0
- beq _020994B8
- ldrsh r0, [r8, #0x70]
- ands r0, r0, #0x1
- movne r1, #0x1
-_020994B8:
- cmp r1, #0x0
- addeq sp, sp, #0x8
- mvneq r0, #0x26
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- ldrsb r0, [r8, #0x73]
- mov r1, #0x1
- cmp r0, #0x0
- beq _020994E4
- cmp r0, #0x4
- movne r1, #0x0
-_020994E4:
- cmp r1, #0x0
- beq _02099514
- ldrsh r0, [r8, #0x70]
- ands r0, r0, #0x4
- beq _02099504
- ldrsh r0, [r8, #0x70]
- ands r0, r0, #0x8
- beq _02099514
-_02099504:
- add sp, sp, #0x8
- mvn r0, #0x37
- ldmia sp!, {r4-r8,lr}
- bx lr
-_02099514:
- ldr r0, [sp, #0x24]
- ldr r4, [r8, #0x68]
- ands r0, r0, #0x4
- bne _02099530
- ldrsb r0, [r8, #0x72]
- cmp r0, #0x0
- bne _02099554
-_02099530:
- add r0, r4, #0xe0
- bl OS_TryLockMutex
- cmp r0, #0x0
- addeq sp, sp, #0x8
- mvneq r0, #0x5
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- mov r12, #0x0
- b _02099560
-_02099554:
- add r0, r4, #0xe0
- bl OS_LockMutex
- mov r12, #0x1
-_02099560:
- ldr r1, [sp, #0x20]
- mov r0, r8
- str r1, [sp, #0x0]
- mov r1, r7
- mov r2, r6
- mov r3, r5
- str r12, [sp, #0x4]
- bl FUN_02099358
- mov r5, r0
- add r0, r4, #0xe0
- bl OS_UnlockMutex
- mov r0, r5
- add sp, sp, #0x8
- ldmia sp!, {r4-r8,lr}
- bx lr
-
- arm_func_start FUN_0209959C
-FUN_0209959C: ; 0x0209959C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, [r0, #0x4]
- mov r1, #0x1
- ldrsb r0, [r0, #0x73]
- cmp r0, #0x0
- beq _020995C0
- cmp r0, #0x4
- movne r1, #0x0
-_020995C0:
- cmp r1, #0x0
- beq _020995CC
- bl CPS_TcpShutdown
-_020995CC:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start FUN_020995DC
-FUN_020995DC: ; 0x020995DC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r0
- bl FUN_02099FA8
- cmp r0, #0x0
- addne sp, sp, #0x4
- mvnne r0, #0x1b
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- cmp r4, #0x0
- mov r1, #0x0
- beq _02099618
- ldrsh r0, [r4, #0x70]
- ands r0, r0, #0x1
- movne r1, #0x1
-_02099618:
- cmp r1, #0x0
- addeq sp, sp, #0x4
- mvneq r0, #0x26
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- ldrsh r0, [r4, #0x70]
- ands r0, r0, #0x4
- beq _02099644
- ldrsh r0, [r4, #0x70]
- ands r0, r0, #0x8
- beq _02099654
-_02099644:
- add sp, sp, #0x4
- mvn r0, #0x37
- ldmia sp!, {r4-r5,lr}
- bx lr
-_02099654:
- ldrsh r0, [r4, #0x70]
- orr r0, r0, #0x8
- strh r0, [r4, #0x70]
- ldr r5, [r4, #0x68]
- cmp r5, #0x0
- beq _020996AC
- ldr r1, [r5, #0x10c]
- cmp r1, #0x0
- beq _020996AC
- ldrsb r2, [r4, #0x72]
- ldr r0, _020996BC ; =FUN_0209959C
- bl FUN_02097A98
- movs r1, r0
- addeq sp, sp, #0x4
- mvneq r0, #0x20
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- ldr r0, [r5, #0x10c]
- bl FUN_02097948
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-_020996AC:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_020996BC: .word FUN_0209959C
-
- arm_func_start FUN_020996C0
-FUN_020996C0: ; 0x020996C0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- bl OS_DisableInterrupts
- ldr r4, _02099704 ; =UNK_021C8D34
- mov r5, r0
- ldr r0, [r4, #0x0]
- cmp r0, #0x0
- beq _020996F0
-_020996E0:
- bl FUN_020997B8
- ldr r0, [r4, #0x0]
- cmp r0, #0x0
- bne _020996E0
-_020996F0:
- mov r0, r5
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_02099704: .word UNK_021C8D34
-
- arm_func_start FUN_02099708
-FUN_02099708: ; 0x02099708
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x8
- movs r8, r0
- addeq sp, sp, #0x8
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- add r0, r8, #0x20
- bl OS_JoinThread
- bl OS_DisableInterrupts
- mov r7, r0
- bl OS_DisableScheduler
- add r1, sp, #0x0
- mov r0, r8
- mov r2, #0x0
- bl OS_ReceiveMessage
- cmp r0, #0x0
- beq _0209979C
- add r4, sp, #0x0
- mvn r6, #0xa
- mov r5, #0x0
-_02099758:
- ldr r0, [sp, #0x0]
- cmp r0, #0x0
- beq _02099784
- ldr r0, [r0, #0x8]
- cmp r0, #0x0
- beq _0209977C
- mov r1, r6
- mov r2, r5
- bl OS_SendMessage
-_0209977C:
- ldr r0, [sp, #0x0]
- bl FUN_02097A64
-_02099784:
- mov r0, r8
- mov r1, r4
- mov r2, r5
- bl OS_ReceiveMessage
- cmp r0, #0x0
- bne _02099758
-_0209979C:
- bl OS_EnableScheduler
- bl OS_RescheduleThread
- mov r0, r7
- bl OS_RestoreInterrupts
- add sp, sp, #0x8
- ldmia sp!, {r4-r8,lr}
- bx lr
-
- arm_func_start FUN_020997B8
-FUN_020997B8:
- stmdb sp!, {r4-r6,lr}
- movs r4, r0
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- mov r0, #0x0
- strh r0, [r4, #0x70]
- ldrsb r1, [r4, #0x73]
- mov r2, #0x1
- cmp r1, #0x0
- beq _020997E8
- cmp r1, #0x4
- movne r2, r0
-_020997E8:
- cmp r2, #0x0
- beq _02099804
- ldr r0, [r4, #0x68]
- bl FUN_02099708
- ldr r0, [r4, #0x64]
- bl FUN_02099708
- b _02099884
-_02099804:
- cmp r1, #0x1
- bne _02099874
- ldr r0, [r4, #0x64]
- ldr r0, [r0, #0x104]
- cmp r0, #0x0
- beq _0209983C
- ldr r5, _020998C0 ; =UNK_021C8CC0
-_02099820:
- ldr r1, [r5, #0x0]
- ldr r6, [r0, #0x0]
- ldr r1, [r1, #0x1c]
- blx r1
- mov r0, r6
- cmp r6, #0x0
- bne _02099820
-_0209983C:
- ldr r0, [r4, #0x64]
- mov r1, #0x0
- add r0, r0, #0x100
- strh r1, [r0, #0x8]
- ldr r0, [r4, #0x64]
- str r1, [r0, #0x100]
- ldr r0, [r4, #0x64]
- str r1, [r0, #0x104]
- ldr r0, [r4, #0x64]
- add r0, r0, #0x10c
- bl OS_WakeupThread
- ldr r0, [r4, #0x64]
- bl FUN_02099708
- b _02099884
-_02099874:
- cmp r1, #0x2
- bne _02099884
- ldr r0, [r4, #0x68]
- bl FUN_02099708
-_02099884:
- bl OS_DisableInterrupts
- mov r5, r0
- mov r0, r4
- bl FUN_0209A054
- mov r0, r4
- bl FUN_02099FF0
- ldr r1, _020998C0 ; =UNK_021C8CC0
- mov r0, r4
- ldr r1, [r1, #0x0]
- ldr r1, [r1, #0x1c]
- blx r1
- mov r0, r5
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_020998C0: .word UNK_021C8CC0
-
- arm_func_start FUN_020998C4
-FUN_020998C4: ; 0x020998C4
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r4, [r0, #0x4]
- mov r1, #0x1
- ldrsb r0, [r4, #0x73]
- cmp r0, #0x0
- beq _020998E8
- cmp r0, #0x4
- movne r1, #0x0
-_020998E8:
- cmp r1, #0x0
- beq _02099908
- ldr r0, [r4, #0x68]
- add r0, r0, #0x20
- bl OS_JoinThread
- bl CPS_TcpShutdown
- bl CPS_TcpClose
- bl CPS_SocRelease
-_02099908:
- bl CPS_SocUnRegister
- ldrsh r0, [r4, #0x70]
- mov r1, #0x0
- bic r0, r0, #0x6
- strh r0, [r4, #0x70]
- ldrsb r0, [r4, #0x73]
- cmp r0, #0x2
- ldreq r0, [r4, #0x68]
- ldrne r0, [r4, #0x64]
- bl FUN_020979F8
- bl OS_DisableInterrupts
- mov r5, r0
- mov r0, r4
- bl FUN_0209A054
- mov r0, r4
- bl FUN_0209A06C
- mov r0, r5
- bl OS_RestoreInterrupts
- ldrsh r1, [r4, #0x70]
- mov r0, #0x0
- orr r1, r1, #0x20
- strh r1, [r4, #0x70]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start FUN_0209996C
-FUN_0209996C: ; 0x0209996C
- stmdb sp!, {r4,lr}
- mov r4, r0
- cmp r4, #0x0
- mvnle r0, #0x1b
- ldmleia sp!, {r4,lr}
- bxle lr
- bl FUN_02099F78
- cmp r0, #0x0
- mvnne r0, #0x19
- ldmneia sp!, {r4,lr}
- bxne lr
- mov r0, r4
- bl FUN_02099FA8
- cmp r0, #0x0
- movne r0, #0x0
- ldmneia sp!, {r4,lr}
- bxne lr
- cmp r4, #0x0
- mov r1, #0x0
- beq _020999C8
- ldrsh r0, [r4, #0x70]
- ands r0, r0, #0x1
- movne r1, #0x1
-_020999C8:
- cmp r1, #0x0
- mvneq r0, #0x26
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldrsh r0, [r4, #0x70]
- ands r0, r0, #0x10
- mvnne r0, #0x19
- ldmneia sp!, {r4,lr}
- bxne lr
- ldrsh r0, [r4, #0x70]
- mov r1, #0x1
- orr r0, r0, #0x18
- strh r0, [r4, #0x70]
- ldrsb r0, [r4, #0x73]
- cmp r0, #0x0
- beq _02099A10
- cmp r0, #0x4
- movne r1, #0x0
-_02099A10:
- cmp r1, #0x0
- beq _02099A24
- ldr r0, [r4, #0x68]
- mov r1, #0x0
- bl FUN_020979F8
-_02099A24:
- ldr r0, _02099A54 ; =FUN_020998C4
- mov r1, r4
- mov r2, #0x1
- bl FUN_02097A98
- mov r1, r0
- mov r2, #0x0
- mov r0, r4
- str r2, [r1, #0x8]
- bl FUN_020979DC
- mov r0, #0x0
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_02099A54: .word FUN_020998C4
-
- arm_func_start FUN_02099A58
-FUN_02099A58:
- stmdb sp!, {r4,lr}
- movs r4, r0
- bmi _02099A88
- bl FUN_02099FA8
- cmp r0, #0x0
- beq _02099A88
- mov r0, r4
- bl FUN_02099F78
- cmp r0, #0x0
- moveq r0, #0x1
- ldmeqia sp!, {r4,lr}
- bxeq lr
-_02099A88:
- mov r0, #0x0
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FUN_02099A94
-FUN_02099A94: ; 0x02099A94
- stmdb sp!, {r4,lr}
- ldr r0, _02099B10 ; =UNK_021C8CD0
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _02099AE8
- bl FUN_02099B14
- movs r4, r0
- bne _02099AE0
- ldr r0, _02099B10 ; =UNK_021C8CD0
- ldr r0, [r0, #0x0]
- bl FUN_0209996C
- ldr r0, _02099B10 ; =UNK_021C8CD0
- ldr r0, [r0, #0x0]
- bl FUN_02099A58
- cmp r0, #0x0
- ldrne r0, _02099B10 ; =UNK_021C8CD0
- movne r1, #0x0
- strne r1, [r0, #0x0]
- mvn r4, #0x19
-_02099AE0:
- bl FUN_020996C0
- b _02099B04
-_02099AE8:
- bl CPS_CalmDown
- cmp r0, #0x0
- mvneq r4, #0x19
- beq _02099B04
- mov r0, #0x0
- bl FUN_020A87BC
- mov r4, #0x0
-_02099B04:
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_02099B10: .word UNK_021C8CD0
-
- arm_func_start FUN_02099B14
-FUN_02099B14: ; 0x02099B14
- stmdb sp!, {r4-r6,lr}
- ldr r4, _02099BBC ; =UNK_021C8CD0
- ldr r5, _02099BC0 ; =UNK_021C8D30
-_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 FUN_0209996C
- b _02099B20
-_02099B6C:
- ldr r0, _02099BC0 ; =UNK_021C8D30
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- beq _02099B98
- ldr r0, _02099BBC ; =UNK_021C8CD0
- ldr r0, [r0, #0x0]
- cmp r1, r0
- bne _02099BB0
- ldr r0, [r1, #0x7c]
- cmp r0, #0x0
- bne _02099BB0
-_02099B98:
- ldr r0, _02099BC4 ; =UNK_021C8D34
- 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 UNK_021C8CD0
-_02099BC0: .word UNK_021C8D30
-_02099BC4: .word UNK_021C8D34
-
- arm_func_start FUN_02099BC8
-FUN_02099BC8: ; 0x02099BC8
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r1, _02099C68 ; =UNK_021C8CC8
- ldr r0, [r1, #0x0]
- cmp r0, #0x0
- ldreq r0, _02099C6C ; =CPSMyIp
- ldreq r0, [r0, #0x0]
- streq r0, [r1, #0x0]
- bl FUN_02099A94
- mvn r4, #0x19
- cmp r0, r4
- bne _02099C10
- mov r5, #0x64
-_02099BFC:
- mov r0, r5
- bl OS_Sleep
- bl FUN_02099A94
- cmp r0, r4
- beq _02099BFC
-_02099C10:
- bl FUN_02097B14
- movs r4, r0
- bmi _02099C58
- bl CPS_Cleanup
- mov r0, #0x0
- bl CPS_SetScavengerCallback
- ldr r0, _02099C70 ; =UNK_021C8CC0
- ldr r1, [r0, #0x0]
- ldr r0, [r1, #0x28]
- cmp r0, #0x0
- bne _02099C4C
- ldr r0, _02099C74 ; =UNK_021C8CD4
- ldr r1, [r1, #0x1c]
- ldr r0, [r0, #0x1c]
- blx r1
-_02099C4C:
- ldr r0, _02099C70 ; =UNK_021C8CC0
- 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 UNK_021C8CC8
-_02099C6C: .word CPSMyIp
-_02099C70: .word UNK_021C8CC0
-_02099C74: .word UNK_021C8CD4
-
- arm_func_start FUN_02099C78
-FUN_02099C78:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _02099CE0 ; =CPSMyIp
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- bne _02099CBC
- ldr r0, _02099CE4 ; =UNK_021C8CCC
- 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 ; =UNK_021C8CC8
- 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 UNK_021C8CCC
-_02099CE8: .word UNK_021C8CC8
-
- arm_func_start FUN_02099CEC
-FUN_02099CEC: ; 0x02099CEC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r1
- bl FUN_02099C78
- 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 FUN_02099D28
-FUN_02099D28:
- 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 FUN_02099D88
-FUN_02099D88: ; 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 ; =UNK_021C8CC0
- 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 ; =UNK_021C8CC0
- 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 UNK_021C8CC0
-_02099E38: .word 0x00000B68
-_02099E3C: .word 0x00000466
-
- arm_func_start FUN_02099E40
-FUN_02099E40:
- ldr r2, [r0, #0x64]
- mov r3, #0x0
- cmp r2, #0x0
- beq _02099E88
- ldrsb r1, [r0, #0x73]
- cmp r1, #0x1
- bne _02099E6C
- ldr r0, [r2, #0x104]
- cmp r0, #0x0
- ldrneh r3, [r0, #0x4]
- b _02099E88
-_02099E6C:
- cmp r1, #0x0
- beq _02099E7C
- cmp r1, #0x4
- bne _02099E88
-_02099E7C:
- ldr r1, [r0, #0x44]
- ldr r0, [r2, #0xf8]
- sub r3, r1, r0
-_02099E88:
- mov r0, r3
- bx lr
-
- arm_func_start FUN_02099E90
-FUN_02099E90:
- stmdb sp!, {r4-r6,lr}
- mov r4, #0x0
- mov r5, r0
- bl FUN_02099FA8
- cmp r0, #0x0
- orrne r4, r4, #0x80
- bne _02099F60
- ldrsh r0, [r5, #0x70]
- ands r0, r0, #0x40
- ldrsb r0, [r5, #0x73]
- orrne r4, r4, #0x20
- cmp r0, #0x1
- beq _02099ED0
- ldrsh r0, [r5, #0x70]
- ands r0, r0, #0x4
- beq _02099F00
-_02099ED0:
- bl OS_DisableInterrupts
- mov r6, r0
- mov r0, r5
- bl FUN_02099E40
- cmp r0, #0x0
- mov r0, r5
- orrgt r4, r4, #0x1
- bl FUN_020992A0
- cmp r0, #0x0
- mov r0, r6
- orrgt r4, r4, #0x8
- bl OS_RestoreInterrupts
-_02099F00:
- ldrsb r0, [r5, #0x73]
- mov r1, #0x1
- cmp r0, #0x0
- beq _02099F18
- cmp r0, #0x4
- movne r1, #0x0
-_02099F18:
- cmp r1, #0x0
- beq _02099F60
- ldrsh r0, [r5, #0x70]
- ands r0, r0, #0x4
- beq _02099F48
- ldrb r0, [r5, #0x8]
- cmp r0, #0x4
- beq _02099F48
- ands r0, r4, #0x1
- ldreqsh r0, [r5, #0x70]
- biceq r0, r0, #0x6
- streqh r0, [r5, #0x70]
-_02099F48:
- ldrsh r0, [r5, #0x70]
- ands r0, r0, #0x2
- bne _02099F60
- ldrsh r0, [r5, #0x70]
- ands r0, r0, #0x4
- orreq r4, r4, #0x40
-_02099F60:
- mov r0, r4
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start FUN_02099F6C
-FUN_02099F6C:
- add r0, r0, #0x3
- bic r0, r0, #0x3
- bx lr
-
- arm_func_start FUN_02099F78
-FUN_02099F78:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r1, r0
- ldr r0, _02099FA4 ; =UNK_021C8D34
- bl FUN_0209A008
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_02099FA4: .word UNK_021C8D34
-
- arm_func_start FUN_02099FA8
-FUN_02099FA8:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r1, r0
- cmp r1, #0x0
- ble _02099FCC
- ldr r0, _02099FEC ; =UNK_021C8D30
- bl FUN_0209A008
- cmp r0, #0x0
- bne _02099FDC
-_02099FCC:
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {lr}
- bx lr
-_02099FDC:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_02099FEC: .word UNK_021C8D30
-
- arm_func_start FUN_02099FF0
-FUN_02099FF0: ; 0x02099FF0
- ldr ip, _0209A000 ; =FUN_0209A034
- mov r1, r0
- ldr r0, _0209A004 ; =UNK_021C8D34
- bx r12
- .balign 4
-_0209A000: .word FUN_0209A034
-_0209A004: .word UNK_021C8D34
-
- arm_func_start FUN_0209A008
-FUN_0209A008:
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- beq _0209A02C
-_0209A014:
- cmp r2, r1
- bxeq lr
- add r0, r2, #0x7c
- ldr r2, [r2, #0x7c]
- cmp r2, #0x0
- bne _0209A014
-_0209A02C:
- mov r0, #0x0
- bx lr
-
- arm_func_start FUN_0209A034
-FUN_0209A034: ; 0x0209A034
- stmdb sp!, {r4,lr}
- mov r4, r1
- bl FUN_0209A008
- cmp r0, #0x0
- ldrne r1, [r4, #0x7c]
- strne r1, [r0, #0x0]
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FUN_0209A054
-FUN_0209A054: ; 0x0209A054
- ldr ip, _0209A064 ; =FUN_0209A034
- mov r1, r0
- ldr r0, _0209A068 ; =UNK_021C8D30
- bx r12
- .balign 4
-_0209A064: .word FUN_0209A034
-_0209A068: .word UNK_021C8D30
-
- arm_func_start FUN_0209A06C
-FUN_0209A06C: ; 0x0209A06C
- ldr ip, _0209A07C ; =FUN_0209A084
- mov r1, r0
- ldr r0, _0209A080 ; =UNK_021C8D34
- bx r12
- .balign 4
-_0209A07C: .word FUN_0209A084
-_0209A080: .word UNK_021C8D34
-
- arm_func_start FUN_0209A084
-FUN_0209A084: ; 0x0209A084
- ldr r2, [r0, #0x0]
- str r2, [r1, #0x7c]
- str r1, [r0, #0x0]
- bx lr
-
- arm_func_start FUN_0209A094
-FUN_0209A094: ; 0x0209A094
- ldr ip, _0209A0A4 ; =FUN_0209A084
- mov r1, r0
- ldr r0, _0209A0A8 ; =UNK_021C8D30
- bx r12
- .balign 4
-_0209A0A4: .word FUN_0209A084
-_0209A0A8: .word UNK_021C8D30
-
- arm_func_start FUN_0209A0AC
-FUN_0209A0AC: ; 0x0209A0AC
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0xc
- mov r9, r2
- str r0, [sp, #0x0]
- mov r0, #0x1
- str r0, [sp, #0x8]
- mov r0, #0x0
- mov r8, r3
- mvn r2, #0x0
- cmp r8, r2
- cmpeq r9, r2
- movne r11, #0x1
- mov r10, r1
- moveq r11, #0x0
- str r0, [sp, #0x4]
-_0209A0E8:
- ldr r5, [sp, #0x4]
- ldr r7, [sp, #0x0]
- mov r6, r5
- cmp r10, #0x0
- bls _0209A128
-_0209A0FC:
- ldrsh r1, [r7, #0x4]
- ldr r0, [r7, #0x0]
- orr r4, r1, #0xe0
- bl FUN_02099E90
- ands r0, r4, r0
- strh r0, [r7, #0x6]
- add r6, r6, #0x1
- addne r5, r5, #0x1
- cmp r6, r10
- add r7, r7, #0x8
- blo _0209A0FC
-_0209A128:
- cmp r5, #0x0
- bgt _0209A160
- cmp r11, #0x0
- beq _0209A148
- mov r1, #0x0
- subs r0, r1, r9
- sbcs r0, r1, r8
- bge _0209A160
-_0209A148:
- ldr r0, [sp, #0x8]
- bl OS_Sleep
- ldr r0, _0209A170 ; =0x0000020B
- subs r9, r9, r0
- sbc r8, r8, #0x0
- b _0209A0E8
-_0209A160:
- mov r0, r5
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_0209A170: .word 0x0000020B
-
- arm_func_start FUN_0209A174
-FUN_0209A174: ; 0x0209A174
- mov r2, r0, lsr #0x18
- strb r2, [r1, #0x0]
- mov r2, r0, lsr #0x10
- strb r2, [r1, #0x1]
- mov r2, r0, lsr #0x8
- strb r2, [r1, #0x2]
- strb r0, [r1, #0x3]
- bx lr
-
- arm_func_start FUN_0209A194
-FUN_0209A194: ; 0x0209A194
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x18
- cmp r0, #0x2
- mov r4, r2
- addne sp, sp, #0x18
- movne r0, #0x0
- ldmneia sp!, {r4,lr}
- bxne lr
- cmp r3, #0x10
- addcc sp, sp, #0x18
- movcc r0, #0x0
- ldmccia sp!, {r4,lr}
- bxcc lr
- mov r0, r1
- add r1, sp, #0xc
- mov r2, #0x4
- bl MI_CpuCopy8
- ldr r0, [sp, #0xc]
- add r1, sp, #0x10
- bl FUN_0209A174
- ldrb r1, [sp, #0x12]
- ldr r2, _0209A220 ; =UNK_0210620C
- mov r0, r4
- str r1, [sp, #0x0]
- ldrb r3, [sp, #0x11]
- mov r1, #0x10
- str r3, [sp, #0x4]
- ldrb r3, [sp, #0x10]
- str r3, [sp, #0x8]
- ldrb r3, [sp, #0x13]
- bl OS_SNPrintf
- mov r0, r4
- add sp, sp, #0x18
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_0209A220: .word UNK_0210620C
-
- arm_func_start FUN_0209A224
-FUN_0209A224: ; 0x0209A224
- stmdb sp!, {r4,lr}
- mov r4, r1
- bl FUN_02099D28
- cmp r0, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- mov r2, r0, lsr #0x18
- mov r1, r0, lsr #0x8
- mov r3, r0, lsl #0x8
- mov r12, r0, lsl #0x18
- and r2, r2, #0xff
- and r0, r1, #0xff00
- and r1, r3, #0xff0000
- orr r0, r2, r0
- and r2, r12, #0xff000000
- orr r0, r1, r0
- orr r0, r2, r0
- str r0, [r4, #0x0]
- mov r0, #0x1
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FUN_0209A27C
-FUN_0209A27C: ; 0x0209A27C
- stmdb sp!, {r0-r3}
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, _0209A2B0 ; =UNK_021C8D5C
- add r1, sp, #0x8
- mov r0, #0x2
- mov r3, #0x10
- bl FUN_0209A194
- ldr r0, _0209A2B0 ; =UNK_021C8D5C
- add sp, sp, #0x4
- ldmia sp!, {lr}
- add sp, sp, #0x10
- bx lr
- .balign 4
-_0209A2B0: .word UNK_021C8D5C
-
- arm_func_start THUNK_FUN_02099BC8
-THUNK_FUN_02099BC8: ; 0x0209A2B4
- ldr ip, _0209A2BC ; =FUN_02099BC8
- bx r12
- .balign 4
-_0209A2BC: .word FUN_02099BC8
-
- arm_func_start FUN_0209A2C0
-FUN_0209A2C0: ; 0x0209A2C0
- stmdb sp!, {r4-r8,lr}
- ldr r1, [r0, #0xc]
- ldr ip, _0209A430 ; =UNK_021C8D6C
- cmp r1, #0x1
- moveq r1, #0x1
- movne r1, #0x0
- str r1, [r12, #0x0]
- ldr r6, [r0, #0x10]
- ldr r5, _0209A434 ; =FUN_0209A484
- mov r2, r6, lsr #0x18
- mov r1, r6, lsr #0x8
- mov r3, r6, lsl #0x8
- and r2, r2, #0xff
- and r1, r1, #0xff00
- mov r6, r6, lsl #0x18
- orr r1, r2, r1
- and r3, r3, #0xff0000
- orr r1, r3, r1
- and r2, r6, #0xff000000
- orr r1, r2, r1
- str r1, [r12, #0x4]
- ldr r7, [r0, #0x14]
- ldr r4, _0209A438 ; =FUN_0209A444
- mov r2, r7, lsr #0x18
- mov r1, r7, lsr #0x8
- mov r6, r7, lsl #0x8
- and r2, r2, #0xff
- and r1, r1, #0xff00
- mov r7, r7, lsl #0x18
- orr r1, r2, r1
- and r6, r6, #0xff0000
- and r2, r7, #0xff000000
- orr r1, r6, r1
- orr r1, r2, r1
- str r1, [r12, #0x8]
- ldr r1, [r0, #0x18]
- ldr r3, _0209A43C ; =UNK_021C8D40
- mov r7, r1, lsr #0x18
- mov r6, r1, lsr #0x8
- mov r8, r1, lsl #0x8
- and r7, r7, #0xff
- and r6, r6, #0xff00
- mov r1, r1, lsl #0x18
- orr r6, r7, r6
- and r8, r8, #0xff0000
- and r7, r1, #0xff000000
- orr r1, r8, r6
- orr r1, r7, r1
- str r1, [r12, #0xc]
- ldr r1, [r0, #0x1c]
- ldr r2, _0209A440 ; =UNK_021C8D3C
- mov r7, r1, lsr #0x18
- mov r6, r1, lsr #0x8
- mov r8, r1, lsl #0x8
- and r7, r7, #0xff
- and r6, r6, #0xff00
- mov r1, r1, lsl #0x18
- orr r6, r7, r6
- and r8, r8, #0xff0000
- and r7, r1, #0xff000000
- orr r1, r8, r6
- orr r1, r7, r1
- str r1, [r12, #0x10]
- ldr r1, [r0, #0x20]
- mov lr, #0x40
- mov r7, r1, lsr #0x18
- mov r6, r1, lsr #0x8
- mov r8, r1, lsl #0x8
- and r7, r7, #0xff
- and r6, r6, #0xff00
- mov r1, r1, lsl #0x18
- orr r6, r7, r6
- and r8, r8, #0xff0000
- and r7, r1, #0xff000000
- orr r1, r8, r6
- orr r1, r7, r1
- str r5, [r12, #0x18]
- str r4, [r12, #0x1c]
- str r1, [r12, #0x14]
- ldr r1, [r0, #0x4]
- str r1, [r3, #0x0]
- ldr r1, [r0, #0x8]
- str lr, [r12, #0x20]
- str r1, [r2, #0x0]
- ldr r1, [r0, #0x2c]
- str r1, [r12, #0x30]
- ldr r1, [r0, #0x30]
- mov r0, r12
- str r1, [r12, #0x34]
- bl FUN_02097834
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_0209A430: .word UNK_021C8D6C
-_0209A434: .word FUN_0209A484
-_0209A438: .word FUN_0209A444
-_0209A43C: .word UNK_021C8D40
-_0209A440: .word UNK_021C8D3C
-
- arm_func_start FUN_0209A444
-FUN_0209A444: ; 0x0209A444
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {lr}
- bxeq lr
- ldr r1, _0209A480 ; =UNK_021C8D3C
- ldr r2, [r0, #-0x4]
- ldr r3, [r1, #0x0]
- sub r1, r0, #0x4
- mov r0, #0x0
- blx r3
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_0209A480: .word UNK_021C8D3C
-
- arm_func_start FUN_0209A484
-FUN_0209A484: ; 0x0209A484
- stmdb sp!, {r4,lr}
- ldr r1, _0209A4B0 ; =UNK_021C8D40
- add r4, r0, #0x4
- ldr r2, [r1, #0x0]
- mov r1, r4
- mov r0, #0x0
- blx r2
- cmp r0, #0x0
- strne r4, [r0], #0x4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_0209A4B0: .word UNK_021C8D40
-
- arm_func_start FUN_0209A4B4
-FUN_0209A4B4: ; 0x0209A4B4
- cmp r0, #0x0
- mvneq r0, #0x0
- bxeq lr
- cmp r1, #0x3
- beq _0209A4D4
- cmp r1, #0x4
- beq _0209A4E8
- b _0209A4FC
-_0209A4D4:
- ldrsb r0, [r0, #0x72]
- cmp r0, #0x1
- moveq r0, #0x0
- movne r0, #0x4
- bx lr
-_0209A4E8:
- ands r1, r2, #0x4
- movne r1, #0x0
- strneb r1, [r0, #0x72]
- moveq r1, #0x1
- streqb r1, [r0, #0x72]
-_0209A4FC:
- mov r0, #0x0
- bx lr
-
- arm_func_start FUN_0209A504
-FUN_0209A504: ; 0x0209A504
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x8
- mov r4, r1
- add r1, sp, #0x0
- add r2, sp, #0x4
- bl FUN_02098120
- cmp r0, #0x0
- addlt sp, sp, #0x8
- ldmltia sp!, {r4,lr}
- bxlt lr
- ldrh r1, [sp, #0x0]
- mov r2, r1, asr #0x8
- mov r1, r1, lsl #0x8
- and r2, r2, #0xff
- and r1, r1, #0xff00
- orr r1, r2, r1
- strh r1, [r4, #0x2]
- ldr r12, [sp, #0x4]
- mov r2, r12, lsr #0x18
- mov r1, r12, lsr #0x8
- mov r3, r12, lsl #0x8
- mov r12, r12, lsl #0x18
- and r2, r2, #0xff
- and r1, r1, #0xff00
- and r3, r3, #0xff0000
- orr r1, r2, r1
- and r2, r12, #0xff000000
- orr r1, r3, r1
- orr r1, r2, r1
- str r1, [r4, #0x4]
- add sp, sp, #0x8
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FUN_0209A588
-FUN_0209A588: ; 0x0209A588
- ldr ip, _0209A590 ; =FUN_0209822C
- bx r12
- .balign 4
-_0209A590: .word FUN_0209822C
-
- arm_func_start FUN_0209A594
-FUN_0209A594: ; 0x0209A594
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r12, [r1, #0x0]
- ldr r0, [r0, #0x0]
- mov r2, r12, lsr #0x18
- mov r4, r0, lsr #0x18
- mov lr, r0, lsr #0x8
- mov r1, r12, lsr #0x8
- mov r5, r0, lsl #0x8
- mov r3, r12, lsl #0x8
- mov r0, r0, lsl #0x18
- mov r12, r12, lsl #0x18
- and r4, r4, #0xff
- and lr, lr, #0xff00
- and r2, r2, #0xff
- and r1, r1, #0xff00
- and r5, r5, #0xff0000
- orr r4, r4, lr
- and r3, r3, #0xff0000
- orr r1, r2, r1
- and lr, r0, #0xff000000
- orr r0, r5, r4
- and r2, r12, #0xff000000
- orr r1, r3, r1
- orr r0, lr, r0
- orr r1, r2, r1
- bl FUN_02099CEC
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start FUN_0209A60C
-FUN_0209A60C: ; 0x0209A60C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl FUN_02099C78
- mov r2, r0, lsr #0x18
- mov r1, r0, lsr #0x8
- mov r3, r0, lsl #0x8
- mov r12, r0, lsl #0x18
- and r2, r2, #0xff
- and r0, r1, #0xff00
- and r1, r3, #0xff0000
- orr r0, r2, r0
- and r2, r12, #0xff000000
- orr r0, r1, r0
- orr r0, r2, r0
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start FUN_0209A650
-FUN_0209A650: ; 0x0209A650
- stmdb sp!, {r4-r6,lr}
- movs r5, r0
- mov r4, r1
- mvneq r0, #0x26
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- bl FUN_02099C78
- cmp r5, #0x0
- ldrneh r1, [r5, #0x74]
- mov r2, r0, lsr #0x18
- mov r6, #0x8
- moveq r1, #0x0
- cmp r0, #0x0
- moveq r1, #0x0
- mov r1, r1, lsl #0x10
- mov r3, r1, lsr #0x10
- mov r5, r3, asr #0x8
- mov lr, r3, lsl #0x8
- strb r6, [r4, #0x0]
- mov r6, #0x2
- mov r1, r0, lsr #0x8
- mov r3, r0, lsl #0x8
- mov r12, r0, lsl #0x18
- and r0, r1, #0xff00
- and r2, r2, #0xff
- orr r0, r2, r0
- and r1, r3, #0xff0000
- and r5, r5, #0xff
- and lr, lr, #0xff00
- strb r6, [r4, #0x1]
- orr r3, r5, lr
- and r2, r12, #0xff000000
- orr r0, r1, r0
- strh r3, [r4, #0x2]
- orr r0, r2, r0
- str r0, [r4, #0x4]
- mov r0, #0x0
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start FUN_0209A6EC
-FUN_0209A6EC: ; 0x0209A6EC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl FUN_02099D88
- movs r4, r0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- ldr r0, _0209A7A4 ; =UNK_021C8DA4
- ldr r2, _0209A7A8 ; =0x00000101
- mov r1, #0x0
- bl MI_CpuFill8
- ldr r0, _0209A7A4 ; =UNK_021C8DA4
- ldr r2, _0209A7A8 ; =0x00000101
- mov r1, r5
- bl STD_CopyLString
- mov r1, r4, lsr #0x18
- mov r0, r4, lsr #0x8
- mov r2, r4, lsl #0x8
- mov r3, r4, lsl #0x18
- and r1, r1, #0xff
- and r0, r0, #0xff00
- and r2, r2, #0xff0000
- orr r0, r1, r0
- and r3, r3, #0xff000000
- orr r1, r2, r0
- ldr r5, _0209A7A4 ; =UNK_021C8DA4
- ldr r0, _0209A7AC ; =UNK_021C8D4C
- ldr ip, _0209A7B0 ; =UNK_021C8D44
- mov r4, #0x0
- ldr r2, _0209A7B4 ; =UNK_021C8D38
- orr r1, r3, r1
- mov lr, #0x2
- mov r3, #0x4
- str r5, [r0, #0x0]
- str r4, [r0, #0x4]
- strh lr, [r0, #0x8]
- strh r3, [r0, #0xa]
- str r12, [r0, #0xc]
- str r2, [r12, #0x0]
- str r4, [r12, #0x4]
- str r1, [r2, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_0209A7A4: .word UNK_021C8DA4
-_0209A7A8: .word 0x00000101
-_0209A7AC: .word UNK_021C8D4C
-_0209A7B0: .word UNK_021C8D44
-_0209A7B4: .word UNK_021C8D38
-
- arm_func_start thunk_FUN_0209996c
-thunk_FUN_0209996c: ; 0x0209A7B8
- ldr ip, _0209A7C0 ; =FUN_0209996C
- bx r12
- .balign 4
-_0209A7C0: .word FUN_0209996C
-
- arm_func_start thunk_FUN_020995dc
-thunk_FUN_020995dc: ; 0x0209A7C4
- ldr ip, _0209A7CC ; =FUN_020995DC
- bx r12
- .balign 4
-_0209A7CC: .word FUN_020995DC
-
- arm_func_start FUN_0209A7D0
-FUN_0209A7D0: ; 0x0209A7D0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0xc
- ldr r5, [sp, #0x20]
- cmp r5, #0x0
- moveq r5, #0x0
- moveq r4, r5
- beq _0209A83C
- ldrh r4, [r5, #0x2]
- ldr r6, [r5, #0x4]
- mov r7, r4, asr #0x8
- mov r12, r4, lsl #0x8
- mov r4, r6, lsr #0x18
- mov lr, r6, lsr #0x8
- mov r5, r6, lsl #0x8
- mov r6, r6, lsl #0x18
- and r7, r7, #0xff
- and r12, r12, #0xff00
- orr r7, r7, r12
- and r4, r4, #0xff
- and lr, lr, #0xff00
- and r5, r5, #0xff0000
- orr r4, r4, lr
- mov r12, r7, lsl #0x10
- orr r4, r5, r4
- and r6, r6, #0xff000000
- mov r5, r12, lsr #0x10
- orr r4, r6, r4
-_0209A83C:
- str r4, [sp, #0x0]
- str r3, [sp, #0x4]
- mov r3, r5
- bl FUN_02099470
- add sp, sp, #0xc
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start FUN_0209A858
-FUN_0209A858: ; 0x0209A858
- stmdb sp!, {lr}
- sub sp, sp, #0xc
- mov r12, #0x0
- str r12, [sp, #0x0]
- str r3, [sp, #0x4]
- mov r3, r12
- bl FUN_02099470
- add sp, sp, #0xc
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start FUN_0209A880
-FUN_0209A880: ; 0x0209A880
- stmdb sp!, {lr}
- sub sp, sp, #0x14
- add r12, sp, #0xc
- str r12, [sp, #0x0]
- str r3, [sp, #0x4]
- add r3, sp, #0x8
- bl FUN_02098CF4
- cmp r0, #0x0
- addlt sp, sp, #0x14
- ldmltia sp!, {lr}
- bxlt lr
- ldr r1, [sp, #0x18]
- cmp r1, #0x0
- addeq sp, sp, #0x14
- ldmeqia sp!, {lr}
- bxeq lr
- ldrh r2, [sp, #0x8]
- mov r3, r2, asr #0x8
- mov r2, r2, lsl #0x8
- and r3, r3, #0xff
- and r2, r2, #0xff00
- orr r2, r3, r2
- strh r2, [r1, #0x2]
- ldr lr, [sp, #0xc]
- mov r3, lr, lsr #0x18
- mov r2, lr, lsr #0x8
- mov r12, lr, lsl #0x8
- mov lr, lr, lsl #0x18
- and r3, r3, #0xff
- and r2, r2, #0xff00
- and r12, r12, #0xff0000
- orr r2, r3, r2
- and r3, lr, #0xff000000
- orr r2, r12, r2
- orr r2, r3, r2
- str r2, [r1, #0x4]
- add sp, sp, #0x14
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start FUN_0209A91C
-FUN_0209A91C: ; 0x0209A91C
- stmdb sp!, {lr}
- sub sp, sp, #0xc
- mov r12, #0x0
- str r12, [sp, #0x0]
- str r3, [sp, #0x4]
- mov r3, r12
- bl FUN_02098CF4
- add sp, sp, #0xc
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start FUN_0209A944
-FUN_0209A944: ; 0x0209A944
- stmdb sp!, {r4,lr}
- ldrh r2, [r1, #0x2]
- ldr lr, [r1, #0x4]
- mov r4, r2, asr #0x8
- mov r1, r2, lsl #0x8
- mov r3, lr, lsr #0x18
- mov r2, lr, lsr #0x8
- mov r12, lr, lsl #0x8
- mov lr, lr, lsl #0x18
- and r4, r4, #0xff
- and r1, r1, #0xff00
- orr r1, r4, r1
- mov r1, r1, lsl #0x10
- and r3, r3, #0xff
- and r2, r2, #0xff00
- and r12, r12, #0xff0000
- orr r2, r3, r2
- and r3, lr, #0xff000000
- orr r2, r12, r2
- mov r1, r1, lsr #0x10
- orr r2, r3, r2
- bl FUN_020983B0
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FUN_0209A9A4
-FUN_0209A9A4: ; 0x0209A9A4
- ldrh r1, [r1, #0x2]
- ldr ip, _0209A9CC ; =FUN_020984B4
- mov r2, r1, asr #0x8
- mov r1, r1, lsl #0x8
- and r2, r2, #0xff
- and r1, r1, #0xff00
- orr r1, r2, r1
- mov r1, r1, lsl #0x10
- mov r1, r1, lsr #0x10
- bx r12
- .balign 4
-_0209A9CC: .word FUN_020984B4
-
- arm_func_start FUN_0209A9D0
-FUN_0209A9D0: ; 0x0209A9D0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r1, #0x1
- bne _0209A9F4
- ldr r0, _0209AA08 ; =UNK_021061DC
- bl FUN_02097F70
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_0209A9F4:
- ldr r0, _0209AA0C ; =UNK_021061C4
- bl FUN_02097F70
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_0209AA08: .word UNK_021061DC
-_0209AA0C: .word UNK_021061C4
-
- arm_func_start FUN_0209AA10
-FUN_0209AA10: ; 0x0209AA10
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- ldr r6, [r7, #0x4]
- ldr r5, [r6, #0x64]
- add r0, r5, #0xe0
- ldr r4, [r5, #0xc4]
- bl OS_LockMutex
- ldr r1, [r7, #0x10]
- cmp r1, #0x0
- beq _0209AA54
- mov r0, #0x1
- str r1, [r4, #0xc]
- bl CPS_SetSsl
- mov r0, #0x4
- strb r0, [r6, #0x73]
- b _0209AA68
-_0209AA54:
- mov r0, #0x0
- strb r0, [r6, #0x73]
- bl CPS_SetSsl
- mov r0, #0x0
- str r0, [r4, #0xc]
-_0209AA68:
- add r0, r5, #0xe0
- bl OS_UnlockMutex
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start FUN_0209AA80
-FUN_0209AA80: ; 0x0209AA80
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r1
- ldr r0, _0209AACC ; =FUN_0209AA10
- mov r1, r5
- mov r2, #0x1
- bl FUN_02097A98
- movs r1, r0
- addeq sp, sp, #0x4
- mvneq r0, #0x20
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- mov r0, r5
- str r4, [r1, #0x10]
- bl FUN_02097958
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_0209AACC: .word FUN_0209AA10
-
- arm_func_start FUN_0209AAD0
-FUN_0209AAD0: ; 0x0209AAD0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r1
- bl FUN_02099FA8
- cmp r0, #0x0
- addne sp, sp, #0x4
- mvnne r0, #0x1b
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- ldrsb r0, [r5, #0x73]
- mov r1, #0x1
- cmp r0, #0x0
- beq _0209AB10
- cmp r0, #0x4
- movne r1, #0x0
-_0209AB10:
- cmp r1, #0x0
- addeq sp, sp, #0x4
- mvneq r0, #0x1b
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- cmp r5, #0x0
- mov r1, #0x0
- beq _0209AB3C
- ldrsh r0, [r5, #0x70]
- ands r0, r0, #0x1
- movne r1, #0x1
-_0209AB3C:
- cmp r1, #0x0
- addeq sp, sp, #0x4
- mvneq r0, #0x26
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- ldrsh r0, [r5, #0x70]
- ands r0, r0, #0x2
- addne sp, sp, #0x4
- mvnne r0, #0x1b
- ldmneia sp!, {r4-r5,lr}
- bxne lr
- mov r0, r5
- mov r1, r4
- bl FUN_0209AA80
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
diff --git a/arm9/global.inc b/arm9/global.inc
index a7bab851..62d708f6 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -5515,29 +5515,6 @@
.extern FUN_02097484
.extern FUN_02097490
.extern FUN_02097508
-.extern FUN_02099A94
-.extern FUN_02099C78
-.extern FUN_02099D88
-.extern FUN_0209A0AC
-.extern FUN_0209A174
-.extern FUN_0209A224
-.extern FUN_0209A27C
-.extern FUN_0209A2C0
-.extern FUN_0209A4B4
-.extern FUN_0209A504
-.extern FUN_0209A588
-.extern FUN_0209A594
-.extern FUN_0209A60C
-.extern FUN_0209A650
-.extern FUN_0209A6EC
-.extern FUN_0209A7D0
-.extern FUN_0209A858
-.extern FUN_0209A880
-.extern FUN_0209A91C
-.extern FUN_0209A944
-.extern FUN_0209A9A4
-.extern FUN_0209A9D0
-.extern FUN_0209AAD0
.extern FUN_020A71F8
.extern FUN_020A722C
.extern FUN_020A7488
@@ -5552,9 +5529,7 @@
.extern FUN_020A83D0
.extern FUN_020A846C
.extern FUN_020A84D8
-.extern FUN_020A87BC
.extern FUN_020A87E0
-.extern FUN_020A8850
.extern FUN_020A8BA4
.extern FUN_020A8BB0
.extern FUN_020A8BBC
@@ -7528,6 +7503,76 @@
.extern SNDi_LockMutex
.extern SNDi_SetAlarmHandler
.extern SNDi_UnlockMutex
+.extern SOCLSocketParamTCP
+.extern SOCLSocketParamUDPSend
+.extern SOCL_Accept
+.extern SOCL_Bind
+.extern SOCL_CalmDown
+.extern SOCL_Cleanup
+.extern SOCL_Close
+.extern SOCL_Connect
+.extern SOCL_CreateSocket
+.extern SOCL_EnableSsl
+.extern SOCL_GetHostID
+.extern SOCL_GetStatus
+.extern SOCL_InetAtoH
+.extern SOCL_IsClosed
+.extern SOCL_Listen
+.extern SOCL_Resolve
+.extern SOCL_SetResolver
+.extern SOCL_Shutdown
+.extern SOCL_SocketIsInTrash
+.extern SOCL_SocketIsInvalid
+.extern SOCL_Startup
+.extern SOCL_WriteTo
+.extern SOCLiCPSConfig
+.extern SOCLiConfigPtr
+.extern SOCLiDhcpState
+.extern SOCLiRequestedIP
+.extern SOCLiSocketList
+.extern SOCLiSocketListTrash
+.extern SOCLiUDPSendSocket
+.extern SOCLi_CleanupCommandPacketQueue
+.extern SOCLi_CommandPacketHandler
+.extern SOCLi_CreateCommandPacket
+.extern SOCLi_ExecCommandPacketInCtrlPipe
+.extern SOCLi_ExecCommandPacketInRecvPipe
+.extern SOCLi_ExecCommandPacketInSendPipe
+.extern SOCLi_FreeCommandPacket
+.extern SOCLi_GetWriteBufferFreeSize
+.extern SOCLi_ReadFrom
+.extern SOCLi_RoundUp4
+.extern SOCLi_SendCommandPacket
+.extern SOCLi_SendCommandPacketToCtrlPipe
+.extern SOCLi_SocketRegister
+.extern SOCLi_SocketRegisterTrash
+.extern SOCLi_SocketUnregister
+.extern SOCLi_SocketUnregisterTrash
+.extern SOCLi_StartupCommandPacketQueue
+.extern SOCLi_TrashSocket
+.extern SOCLi_UdpRecvCallback
+.extern SOC_Accept
+.extern SOC_Bind
+.extern SOC_Cleanup
+.extern SOC_Close
+.extern SOC_Connect
+.extern SOC_Fcntl
+.extern SOC_GetHostByAddr
+.extern SOC_GetHostID
+.extern SOC_GetResolver
+.extern SOC_GetSockName
+.extern SOC_InetAtoN
+.extern SOC_InetNtoA
+.extern SOC_Listen
+.extern SOC_Poll
+.extern SOC_Read
+.extern SOC_RecvFrom
+.extern SOC_Send
+.extern SOC_SendTo
+.extern SOC_Shutdown
+.extern SOC_Socket
+.extern SOC_Startup
+.extern SOC_U32to4U8
.extern STD_CopyLString
.extern SVC_CpuSet
.extern SVC_GetCRC16
@@ -7548,7 +7593,6 @@
.extern StringLength
.extern StringNotEqual
.extern StringNotEqualN
-.extern THUNK_FUN_02099BC8
.extern TP_CheckError
.extern TP_GetCalibratedPoint
.extern TP_GetLatestIndexInAuto
@@ -7621,7 +7665,9 @@
.extern VEC_MultAdd
.extern VEC_Normalize
.extern VEC_Subtract
+.extern WCM_GetApMacAddress
.extern WCM_SendDCFData
+.extern WCM_SetRecvDCFCallback
.extern WM_Disable
.extern WM_Disconnect
.extern WM_Enable
@@ -7830,8 +7876,6 @@
.extern tempName_NNS_FndCreateExpHeapEx
.extern thunk_FUN_02096e4c
.extern thunk_FUN_02097190
-.extern thunk_FUN_020995dc
-.extern thunk_FUN_0209996c
.extern thunk_FUN_020adc8c
.extern thunk_FUN_020adc8c_2
.extern thunk_FUN_020ae84c
diff --git a/arm9/modules/04/asm/arm_04.s b/arm9/modules/04/asm/arm_04.s
index 24fa13fc..129acd10 100644
--- a/arm9/modules/04/asm/arm_04.s
+++ b/arm9/modules/04/asm/arm_04.s
@@ -1411,7 +1411,7 @@ _021DA104:
bl OS_SNPrintf
bl OS_DisableInterrupts
mov sb, r0
- bl FUN_020A8850
+ bl WCM_GetApMacAddress
mov r8, r0
mov r1, #6
bl DC_InvalidateRange
@@ -5451,7 +5451,7 @@ MOD04_021DD9DC: ; 0x021DD9DC
str r0, [r4]
bl OS_DisableInterrupts
mov r6, r0
- bl FUN_020A8850
+ bl WCM_GetApMacAddress
mov r5, r0
mov r1, #6
bl DC_InvalidateRange
@@ -17170,7 +17170,7 @@ MOD04_021E7B04: ; 0x021E7B04
mov r5, r4
b _021E7C48
_021E7BC0:
- bl FUN_0209A60C
+ bl SOC_GetHostID
mov r0, r0, lsl #0x10
ldr r1, _021E7DEC ; =0x0000FFFF
ldr r2, _021E7DF0 ; =0x0000A8C0
@@ -17220,7 +17220,7 @@ _021E7C48:
str r8, [r0, #0x19c]
b _021E7D00
_021E7C74:
- bl FUN_0209A60C
+ bl SOC_GetHostID
str r0, [sp, #8]
bl MOD04_021E26E4
ldr r0, [r0, #4]
@@ -21677,7 +21677,7 @@ MOD04_021EBA28: ; 0x021EBA28
blo _021EBAB0
cmp r0, #0x10
bhi _021EBAB0
- bl FUN_020A8850
+ bl WCM_GetApMacAddress
mov r4, r0
mov r1, #6
bl DC_InvalidateRange
@@ -22854,12 +22854,12 @@ _021ECA44:
MOD04_021ECA4C: ; 0x021ECA4C
stmdb sp!, {lr}
sub sp, sp, #4
- bl FUN_02099A94
+ bl SOCL_CalmDown
cmp r0, #0
addne sp, sp, #4
movne r0, #0
ldmneia sp!, {pc}
- bl THUNK_FUN_02099BC8
+ bl SOC_Cleanup
cmp r0, #0
beq _021ECA80
mvn r1, #0x26
@@ -24207,7 +24207,7 @@ MOD04_021EDBCC: ; 0x021EDBCC
str r0, [sp, #4]
add r0, sp, #0
add r1, sp, #4
- bl FUN_0209A594
+ bl SOC_GetResolver
add sp, sp, #8
ldmia sp!, {r4, pc}
@@ -24318,12 +24318,12 @@ _021EDDB8: .word 0x0220BB2C
MOD04_021EDDBC: ; 0x021EDDBC
stmdb sp!, {lr}
sub sp, sp, #4
- bl FUN_02099A94
+ bl SOCL_CalmDown
cmp r0, #0
addne sp, sp, #4
movne r0, #0xb
ldmneia sp!, {pc}
- bl THUNK_FUN_02099BC8
+ bl SOC_Cleanup
cmp r0, #0
beq _021EDDF0
mvn r1, #0x26
@@ -24401,7 +24401,7 @@ MOD04_021EDE90: ; 0x021EDE90
MOD04_021EDEC8: ; 0x021EDEC8
stmdb sp!, {r4, lr}
mov r4, r0
- bl FUN_0209A60C
+ bl SOC_GetHostID
cmp r0, #0
beq _021EDF00
mov r0, r4
@@ -24456,7 +24456,7 @@ MOD04_021EDF58: ; 0x021EDF58
mov r2, #4
mov r0, r4
str r2, [r1]
- bl FUN_0209A2C0
+ bl SOC_Startup
cmp r0, #0
moveq r0, #0xc
ldmeqia sp!, {r4, r5, r6, pc}
@@ -25236,7 +25236,7 @@ MOD04_021EE9E0: ; 0x021EE9E0
cmp r1, r0
bne _021EEA58
mov r0, r5
- bl FUN_0209A6EC
+ bl SOC_GetHostByAddr
cmp r0, #0
addeq sp, sp, #4
moveq r0, #0
@@ -26554,7 +26554,7 @@ MOD04_021EFB38: ; 0x021EFB38
stmdb sp!, {lr}
sub sp, sp, #4
add r1, sp, #0
- bl FUN_0209A224
+ bl SOC_InetAtoN
cmp r0, #0
mvneq r0, #0
ldrne r0, [sp]
@@ -26569,7 +26569,7 @@ MOD04_021EFB5C: ; 0x021EFB5C
ldr r2, [r4]
mov r5, r1
strb r2, [r5]
- bl FUN_0209A650
+ bl SOC_GetSockName
ldrb r2, [r5]
mvn r1, #0
str r2, [r4]
@@ -26619,7 +26619,7 @@ _021EFBE8:
add ip, sp, #4
strb lr, [sp, #4]
str ip, [sp]
- bl FUN_0209A7D0
+ bl SOC_SendTo
mvn r1, #0
bl MOD04_021EFDD4
add sp, sp, #0x10
@@ -26629,7 +26629,7 @@ _021EFBE8:
MOD04_021EFC24: ; 0x021EFC24
stmdb sp!, {lr}
sub sp, sp, #4
- bl FUN_0209A858
+ bl SOC_Send
mvn r1, #0
bl MOD04_021EFDD4
add sp, sp, #4
@@ -26644,7 +26644,7 @@ MOD04_021EFC40: ; 0x021EFC40
ldr ip, [r4]
strb ip, [r5]
str r5, [sp]
- bl FUN_0209A880
+ bl SOC_RecvFrom
ldrb r2, [r5]
mvn r1, #0
str r2, [r4]
@@ -26656,7 +26656,7 @@ MOD04_021EFC40: ; 0x021EFC40
MOD04_021EFC78: ; 0x021EFC78
stmdb sp!, {lr}
sub sp, sp, #4
- bl FUN_0209A91C
+ bl SOC_Read
mvn r1, #0
bl MOD04_021EFDD4
add sp, sp, #4
@@ -26670,7 +26670,7 @@ MOD04_021EFC94: ; 0x021EFC94
ldr r2, [r4]
mov r5, r1
strb r2, [r5]
- bl FUN_0209A504
+ bl SOC_Accept
ldrb r2, [r5]
mvn r1, #0
str r2, [r4]
@@ -26682,7 +26682,7 @@ MOD04_021EFC94: ; 0x021EFC94
MOD04_021EFCC8: ; 0x021EFCC8
stmdb sp!, {lr}
sub sp, sp, #4
- bl FUN_0209A588
+ bl SOC_Listen
mvn r1, #0
bl MOD04_021EFDD4
add sp, sp, #4
@@ -26703,7 +26703,7 @@ _021EFCF4:
bne _021EFCF4
add r1, sp, #0
strb r2, [sp]
- bl FUN_0209A944
+ bl SOC_Connect
mvn r1, #0
bl MOD04_021EFDD4
add sp, sp, #8
@@ -26729,7 +26729,7 @@ _021EFD4C:
bne _021EFD4C
add r1, sp, #0
strb r2, [sp]
- bl FUN_0209A9A4
+ bl SOC_Bind
mvn r1, #0
bl MOD04_021EFDD4
add sp, sp, #8
@@ -26739,7 +26739,7 @@ _021EFD4C:
MOD04_021EFD80: ; 0x021EFD80
stmdb sp!, {lr}
sub sp, sp, #4
- bl thunk_FUN_020995dc
+ bl SOC_Shutdown
mvn r1, #0
bl MOD04_021EFDD4
add sp, sp, #4
@@ -26749,7 +26749,7 @@ MOD04_021EFD80: ; 0x021EFD80
MOD04_021EFD9C: ; 0x021EFD9C
stmdb sp!, {lr}
sub sp, sp, #4
- bl thunk_FUN_0209996c
+ bl SOC_Close
mvn r1, #0
bl MOD04_021EFDD4
add sp, sp, #4
@@ -26759,7 +26759,7 @@ MOD04_021EFD9C: ; 0x021EFD9C
MOD04_021EFDB8: ; 0x021EFDB8
stmdb sp!, {lr}
sub sp, sp, #4
- bl FUN_0209A9D0
+ bl SOC_Socket
mvn r1, #0
bl MOD04_021EFDD4
add sp, sp, #4
@@ -26829,9 +26829,9 @@ MOD04_021EFE70: ; 0x021EFE70
strh r3, [r1, #0xa]
str r2, [r1, #0xc]
str r3, [r0]
- bl FUN_02099C78
+ bl SOCL_GetHostID
ldr r1, _021EFEF8 ; =0x02210F50
- bl FUN_0209A174
+ bl SOC_U32to4U8
ldr r2, _021EFEF8 ; =0x02210F50
ldr r0, [r2]
cmp r0, #0
@@ -26904,7 +26904,7 @@ MOD04_021EFF5C: ; 0x021EFF5C
add r0, sp, #0
mov r1, #1
strh r2, [sp, #6]
- bl FUN_0209A0AC
+ bl SOC_Poll
cmp r0, #0
addlt sp, sp, #8
mvnlt r0, #0
@@ -27050,13 +27050,13 @@ MOD04_021F017C: ; 0x021F017C
mov r1, #3
mov r2, #0
mov r5, r0
- bl FUN_0209A4B4
+ bl SOC_Fcntl
cmp r4, #0
bicne r2, r0, #4
orreq r2, r0, #4
mov r0, r5
mov r1, #4
- bl FUN_0209A4B4
+ bl SOC_Fcntl
cmp r0, #0
moveq r0, #1
movne r0, #0
@@ -32277,7 +32277,7 @@ _021F4AD0:
ldmia sp!, {r4, r5, r6, pc}
_021F4B0C:
ldr r0, _021F4C30 ; =0x0220DD90
- bl FUN_0209A6EC
+ bl SOC_GetHostByAddr
cmp r0, #0
bne _021F4B48
ldr r2, _021F4C34 ; =0x0220E144
@@ -39046,7 +39046,7 @@ _021FAB54:
ldmia sp!, {r4, r5, r6, pc}
_021FAB90:
ldr r0, _021FACA8 ; =0x0220E860
- bl FUN_0209A6EC
+ bl SOC_GetHostByAddr
cmp r0, #0
bne _021FABCC
ldr r2, _021FACAC ; =0x0220EBC4
@@ -45132,7 +45132,7 @@ _021FFE40:
cmp r5, r0
bne _021FFE84
mov r0, r8
- bl FUN_0209A6EC
+ bl SOC_GetHostByAddr
cmp r0, #0
addeq sp, sp, #0x104
moveq r0, #0
@@ -45176,7 +45176,7 @@ _021FFEE0:
beq _021FFF18
add r0, sp, #0
ldmia r0, {r0}
- bl FUN_0209A27C
+ bl SOC_InetNtoA
mov r2, r0
ldr r1, _021FFF6C ; =0x0220F008
mov r0, r5
@@ -45186,7 +45186,7 @@ _021FFEE0:
_021FFF18:
add r0, sp, #0
ldmia r0, {r0}
- bl FUN_0209A27C
+ bl SOC_InetNtoA
mov r2, r0
ldr r1, _021FFF70 ; =0x0220F010
mov r0, r5
@@ -45879,7 +45879,7 @@ MOD04_022008A0: ; 0x022008A0
cmp r0, r1
ldmneia sp!, {r4, pc}
mov r0, r4
- bl FUN_0209A6EC
+ bl SOC_GetHostByAddr
cmp r0, #0
moveq r0, #0
ldrne r0, [r0, #0xc]
@@ -46381,7 +46381,7 @@ _02200F8C:
bl MOD04_022021C0
add r0, r5, r8, lsl #2
ldmia r0, {r0}
- bl FUN_0209A27C
+ bl SOC_InetNtoA
mov r1, r0
mov r0, r6
bl MOD04_022021C0
@@ -47603,7 +47603,7 @@ _022020D0:
cmp r0, #0
beq _0220211C
mov r0, r7
- bl FUN_0209A6EC
+ bl SOC_GetHostByAddr
movs r4, r0
addeq sp, sp, #4
moveq r0, #0
@@ -52308,7 +52308,7 @@ _02206038:
cmp r0, r1
bne _022060A4
add r0, sp, #8
- bl FUN_0209A6EC
+ bl SOC_GetHostByAddr
cmp r0, #0
addeq sp, sp, #0x88
moveq r0, #2
@@ -56591,12 +56591,12 @@ MOD04_022099C0: ; 0x022099C0
moveq r2, #7
add r6, r0, r2
mov r0, r6
- bl FUN_0209A224
+ bl SOC_InetAtoN
cmp r0, #0
ldrne r0, [sp]
bne _02209A54
mov r0, r6
- bl FUN_02099D88
+ bl SOCL_Resolve
cmp r0, #0
addeq sp, sp, #8
moveq r0, #0
@@ -56837,7 +56837,7 @@ MOD04_02209D40: ; 0x02209D40
ldmltia sp!, {pc}
mov r0, r1
mov r1, #2
- bl thunk_FUN_020995dc
+ bl SOC_Shutdown
add sp, sp, #4
ldmfd sp!, {pc}
@@ -56849,7 +56849,7 @@ MOD04_02209D68: ; 0x02209D68
mov r1, r2
mov r2, r3
ldr r3, [sp, #8]
- bl FUN_0209A858
+ bl SOC_Send
cmp r0, #0
ldmgeia sp!, {r4, pc}
ldr r1, [r4, #4]
@@ -56872,7 +56872,7 @@ MOD04_02209DB4: ; 0x02209DB4
mov r1, r2
mov r2, r3
ldr r3, [sp, #8]
- bl FUN_0209A91C
+ bl SOC_Read
cmp r0, #0
ldmgeia sp!, {r4, pc}
ldr r1, [r4, #4]
@@ -56907,7 +56907,7 @@ MOD04_02209E00: ; 0x02209E00
strb lr, [sp, #1]
strh r3, [sp, #2]
str r2, [sp, #4]
- bl FUN_0209A944
+ bl SOC_Connect
cmp r0, #0
bge _02209E6C
ldr r0, [r4, #4]
@@ -56928,7 +56928,7 @@ MOD04_02209E7C: ; 0x02209E7C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r8, r1
mov r0, r8
- bl thunk_FUN_0209996c
+ bl SOC_Close
cmp r0, #0
ldmneia sp!, {r4, r5, r6, r7, r8, pc}
mov r7, #0
@@ -56942,7 +56942,7 @@ _02209EA8:
add r7, r7, #0x1f4
_02209EB4:
mov r0, r8
- bl thunk_FUN_0209996c
+ bl SOC_Close
cmp r0, r5
ldmneia sp!, {r4, r5, r6, r7, r8, pc}
cmp r7, r4
@@ -56959,7 +56959,7 @@ MOD04_02209ED4: ; 0x02209ED4
mov r0, #2
mov r1, #1
mov r2, #0
- bl FUN_0209A9D0
+ bl SOC_Socket
movs r4, r0
bmi _02209F4C
ldr r0, [r5, #8]
@@ -56977,11 +56977,11 @@ MOD04_02209ED4: ; 0x02209ED4
ldr r1, [r5, #0x20]
str r2, [r1, #0x810]
ldr r1, [r5, #0x20]
- bl FUN_0209AAD0
+ bl SOCL_EnableSsl
cmp r0, #0
bge _02209F4C
mov r0, r4
- bl thunk_FUN_0209996c
+ bl SOC_Close
mvn r4, #0
_02209F4C:
mov r0, r4
diff --git a/arm9/modules/13/asm/module_13_thumb.s b/arm9/modules/13/asm/module_13_thumb.s
index 5cb48aa3..4eadd8c7 100644
--- a/arm9/modules/13/asm/module_13_thumb.s
+++ b/arm9/modules/13/asm/module_13_thumb.s
@@ -215,7 +215,7 @@ MOD13_02217440: ; 0x02217440
ldr r4, [sp, #0x10]
strb r5, [r4]
str r4, [sp]
- bl FUN_0209A7D0
+ bl SOC_SendTo
add sp, #4
pop {r4, r5}
pop {r3}
@@ -250,7 +250,7 @@ MOD13_02217458: ; 0x02217458
add r0, sp, #0
mov r1, #1
add r3, r4, #0
- bl FUN_0209A0AC
+ bl SOC_Poll
add sp, #8
pop {r4, r5, r6}
pop {r3}
@@ -267,7 +267,7 @@ MOD13_022174A4: ; 0x022174A4
ldr r4, [sp, #0x10]
strb r5, [r4]
str r4, [sp]
- bl FUN_0209A880
+ bl SOC_RecvFrom
add sp, #4
pop {r4, r5}
pop {r3}
@@ -323,7 +323,7 @@ _022174FA:
MOD13_02217504: ; 0x02217504
push {lr}
sub sp, #4
- bl THUNK_FUN_02099BC8
+ bl SOC_Cleanup
cmp r0, #0
bge _0221751A
mov r0, #0
@@ -363,7 +363,7 @@ MOD13_02217530: ; 0x02217530
ldr r1, _0221758C ; =0x0223F7C8
str r0, [r1, #0x18]
add r0, r1, #0
- bl FUN_0209A2C0
+ bl SOC_Startup
cmp r0, #0
bge _0221756A
mov r0, #0
@@ -10807,7 +10807,7 @@ _0221C6FC:
mov r0, #2
lsl r1, r0, #0
ldr r2, [sp, #0x10]
- bl FUN_0209A9D0
+ bl SOC_Socket
add r4, r0, #0
cmp r4, #0
bge _0221C716
@@ -10831,7 +10831,7 @@ _0221C716:
ldr r1, [sp, #0x18]
str r1, [sp, #0x48]
add r1, sp, #0x44
- bl FUN_0209A9A4
+ bl SOC_Bind
str r0, [sp, #4]
cmp r0, #0
bge _0221C746
@@ -10851,7 +10851,7 @@ _0221C74C:
cmp r0, r1
blo _0221C768
add r0, r4, #0
- bl thunk_FUN_0209996c
+ bl SOC_Close
ldr r0, [sp, #0x1c]
str r0, [sp, #4]
mov r0, #1
@@ -10870,7 +10870,7 @@ _0221C768:
ldr r1, _0221C9F8 ; =0x022427E4
ldr r2, _0221C9FC ; =0x00000800
mov r3, #4
- bl FUN_0209A880
+ bl SOC_RecvFrom
cmp r0, #0
bgt _0221C78C
b _0221CA3C
@@ -10916,7 +10916,7 @@ _0221C7D8:
cmp r0, r1
blo _0221C7F4
add r0, r4, #0
- bl thunk_FUN_0209996c
+ bl SOC_Close
ldr r0, [sp, #0x20]
str r0, [sp, #4]
mov r0, #1
@@ -10929,7 +10929,7 @@ _0221C7F4:
ldr r1, _0221C9F8 ; =0x022427E4
ldr r2, _0221C9FC ; =0x00000800
mov r3, #4
- bl FUN_0209A880
+ bl SOC_RecvFrom
cmp r0, #0
ble _0221C86A
ldr r0, _0221C9F8 ; =0x022427E4
@@ -11042,7 +11042,7 @@ _0221C8DE:
ldr r1, _0221C9F8 ; =0x022427E4
ldr r2, _0221C9FC ; =0x00000800
mov r3, #4
- bl FUN_0209A880
+ bl SOC_RecvFrom
cmp r0, #0
ble _0221C932
ldr r0, _0221C9F8 ; =0x022427E4
@@ -11090,7 +11090,7 @@ _0221C932:
cmp r0, #0xa
blt _0221C95A
add r0, r4, #0
- bl thunk_FUN_0209996c
+ bl SOC_Close
ldr r0, [sp, #0x14]
str r0, [sp, #4]
mov r0, #1
@@ -11197,7 +11197,7 @@ _0221CA4C:
cmp r4, #0
beq _0221CA56
add r0, r4, #0
- bl thunk_FUN_0209996c
+ bl SOC_Close
_0221CA56:
ldr r0, _0221CA70 ; =0x02241AC0
ldr r0, [r0]
@@ -12531,9 +12531,9 @@ MOD13_0221D414: ; 0x0221D414
str r0, [sp, #8]
ldr r0, _0221D454 ; =0x000001E6
strh r0, [r1, #2]
- bl FUN_02099C78
+ bl SOCL_GetHostID
add r1, sp, #0xc
- bl FUN_0209A174
+ bl SOC_U32to4U8
str r4, [sp]
add r0, r5, #0
add r1, sp, #4
@@ -12555,7 +12555,7 @@ MOD13_0221D458: ; 0x0221D458
add r1, r3, #0
ldr r2, [sp, #8]
mov r3, #0
- bl FUN_0209A7D0
+ bl SOC_SendTo
cmp r0, #0
bge _0221D470
mov r0, #3
@@ -13228,7 +13228,7 @@ _0221D982:
beq _0221D992
mov r1, #0
str r1, [r0]
- bl THUNK_FUN_02099BC8
+ bl SOC_Cleanup
_0221D992:
pop {r4, r5, r6}
pop {r3}
@@ -13379,7 +13379,7 @@ _0221DA9A:
ldr r0, _0221DAE8 ; =0x02241AD0
str r1, [r0]
ldr r0, _0221DAEC ; =0x0223F8D4
- bl FUN_0209A2C0
+ bl SOC_Startup
cmp r0, #0
bge _0221DABC
mov r0, #1
diff --git a/arm9/modules/79/asm/module_79_arm.s b/arm9/modules/79/asm/module_79_arm.s
index 9c6a0246..d737c74e 100644
--- a/arm9/modules/79/asm/module_79_arm.s
+++ b/arm9/modules/79/asm/module_79_arm.s
@@ -4723,7 +4723,7 @@ _022164D4:
cmp r1, r0
bne _02216524
mov r0, r5
- bl FUN_0209A6EC
+ bl SOC_GetHostByAddr
cmp r0, #0
moveq r0, #1
streq r0, [r4, #0xfc]