summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lcf4
-rw-r--r--arm9/asm/CPS_network.s6410
-rw-r--r--arm9/asm/SSL_ssl.s138
-rw-r--r--arm9/asm/libVCT.s4
-rw-r--r--arm9/asm/unk_020910EC.s6397
-rw-r--r--arm9/global.inc253
-rw-r--r--arm9/modules/04/asm/arm_04.s40
7 files changed, 6627 insertions, 6619 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
index d01beea9..6ef2b114 100644
--- a/arm9/arm9.lcf
+++ b/arm9/arm9.lcf
@@ -431,6 +431,7 @@ SECTIONS {
unk_0208AC14.o (.text)
custom_allocator.o (.text)
unk_020910EC.o (.text)
+ CPS_network.o (.text)
SSL_ssl.o (.text)
SSL_md5.o (.text)
SSL_sha1.o (.text)
@@ -711,6 +712,7 @@ SECTIONS {
unk_02089F24.o (.rodata)
unk_0208A998.o (.rodata)
unk_020910EC.o (.rodata)
+ CPS_network.o (.rodata)
SSL_ssl.o (.rodata)
SSL_md5.o (.rodata)
SSL_sha1.o (.rodata)
@@ -770,6 +772,7 @@ SECTIONS {
unk_020893E0.o (.data)
unk_0208AC14.o (.data)
unk_020910EC.o (.data)
+ CPS_network.o (.data)
SSL_ssl.o (.data)
SSL_md5.o (.data)
SSL_sha1.o (.data)
@@ -855,6 +858,7 @@ SECTIONS {
unk_0208AC14.o (.bss)
custom_allocator.o (.bss)
unk_020910EC.o (.bss)
+ CPS_network.o (.bss)
SSL_ssl.o (.bss)
SSL_md5.o (.bss)
SSL_sha1.o (.bss)
diff --git a/arm9/asm/CPS_network.s b/arm9/asm/CPS_network.s
new file mode 100644
index 00000000..898a32a3
--- /dev/null
+++ b/arm9/asm/CPS_network.s
@@ -0,0 +1,6410 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global helper_threads_priority
+helper_threads_priority: ; 0x02106218
+ .byte 0x10, 0x00, 0x00, 0x00
+
+ .global mac_broadcast
+mac_broadcast: ; 0x0210621C
+ .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00
+
+ .global UNK_02106224
+UNK_02106224: ; 0x02106224
+ .asciz "NintendoDS"
+
+ .balign 4, 0
+ .global UNK_02106230
+UNK_02106230: ; 0x02106230
+ .byte 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .section .bss
+
+ .global wfailed
+wfailed: ; 0x021C8EA8
+ .space 0x4
+
+ .global ip_conflict
+ip_conflict: ; 0x021C8EAC
+ .space 0x4
+
+ .global mymss
+mymss: ; 0x021C8EB0
+ .space 0x4
+
+ .global UNK_021C8EB4
+UNK_021C8EB4: ; 0x021C8EB4
+ .space 0x4
+
+ .global ipid
+ipid: ; 0x021C8EB8
+ .space 0x4
+
+ .global eport
+eport: ; 0x021C8EBC
+ .space 0x4
+
+ .global CPSNoIpReason
+CPSNoIpReason: ; 0x021C8EC0
+ .space 0x4
+
+ .global mode
+mode: ; 0x021C8EC4
+ .space 0x4
+
+ .global CPSiAlloc
+CPSiAlloc: ; 0x021C8EC8
+ .space 0x4
+
+ .global dhcp_callback
+dhcp_callback: ; 0x021C8ECC
+ .space 0x4
+
+ .global CPSNetMask
+CPSNetMask: ; 0x021C8ED0
+ .space 0x4
+
+ .global CPSDhcpServerIp
+CPSDhcpServerIp: ; 0x021C8ED4
+ .space 0x4
+
+ .global yield_wait
+yield_wait: ; 0x021C8ED8
+ .space 0x4
+
+ .global wlan_putpnt
+wlan_putpnt: ; 0x021C8EDC
+ .space 0x4
+
+ .global CPSGatewayIp
+CPSGatewayIp: ; 0x021C8EE0
+ .space 0x4
+
+ .global wlan_getpnt
+wlan_getpnt: ; 0x021C8EE4
+ .space 0x4
+
+ .global offered_myip
+offered_myip: ; 0x021C8EE8
+ .space 0x4
+
+ .global UNK_021C8EEC
+UNK_021C8EEC: ; 0x021C8EEC
+ .space 0x4
+
+ .global scavenger_callback
+scavenger_callback: ; 0x021C8EF0
+ .space 0x4
+
+ .global CPSiFree
+CPSiFree: ; 0x021C8EF4
+ .space 0x4
+
+ .global scavenger_force_exit
+scavenger_force_exit: ; 0x021C8EF8
+ .space 0x4
+
+ .global link_is_on
+link_is_on: ; 0x021C8EFC
+ .space 0x4
+
+ .global lease_time
+lease_time: ; 0x021C8F00
+ .space 0x4
+
+ .global CPSMyIp
+CPSMyIp: ; 0x021C8F04
+ .space 0x4
+
+ .global receiver_thread
+receiver_thread: ; 0x021C8F08
+ .space 0x4
+
+ .global wlan_buf
+wlan_buf: ; 0x021C8F0C
+ .space 0x4
+
+ .global wlan_buflen
+wlan_buflen: ; 0x021C8F10
+ .space 0x4
+
+ .global CPSMyMac
+CPSMyMac: ; 0x021C8F14
+ .space 0x8
+
+ .global CPSDnsIp
+CPSDnsIp: ; 0x021C8F1C
+ .space 0x8
+
+ .global CPSiRand32ctx
+CPSiRand32ctx: ; 0x021C8F24
+ .space 0x18
+
+ .global tmpbuf
+tmpbuf: ; 0x021C8F3C
+ .space 0x3C
+
+ .global arpcache
+arpcache: ; 0x021C8F78
+ .space 0x60
+
+ .global scavenger_soc
+scavenger_soc: ; 0x021C8FD8
+ .space 0x64
+
+ .global tmpsoc
+tmpsoc: ; 0x021C903C
+ .space 0x64
+
+ .global scavenger_thread
+scavenger_thread: ; 0x021C90A0
+ .space 0xc0
+
+ .global tcpip_thread
+tcpip_thread: ; 0x021C9160
+ .space 0xc0
+
+ .global scavenger_sndbuf
+scavenger_sndbuf: ; 0x021C9220
+ .space 0x180
+
+ .global scavenger_rcvbuf
+scavenger_rcvbuf: ; 0x021C93A0
+ .space 0x180
+
+ .global fragtable
+fragtable: ; 0x021C9520
+ .space 0x1c0
+
+ .global scavenger_stack
+scavenger_stack: ; 0x021C96E0
+ .space 0x800
+
+ .global tcpip_stack
+tcpip_stack: ; 0x021C9EE0
+ .space 0x800
+
+ .text
+
+ arm_func_start CPS_Resolve
+CPS_Resolve: ; 0x0209AB80
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ ldr r6, _0209ACC0 ; =CPSiRand32ctx
+ mov r9, #0x0
+ ldr r11, [r6, #0x8]
+ ldr r2, [r6, #0x0]
+ ldr r1, [r6, #0x4]
+ umull r5, r4, r11, r2
+ mla r4, r11, r1, r4
+ ldr r10, [r6, #0xc]
+ ldr r3, [r6, #0x10]
+ mla r4, r10, r2, r4
+ adds r5, r3, r5
+ ldr r1, [r6, #0x14]
+ umull r8, r7, r11, r5
+ adc r4, r1, r4
+ mla r7, r11, r4, r7
+ mla r7, r10, r5, r7
+ mov r2, r9, lsl #0x10
+ adds r8, r3, r8
+ str r5, [r6, #0x0]
+ adc r5, r1, r7
+ mov r3, r9, lsl #0x10
+ orr r2, r2, r4, lsr #0x10
+ str r4, [r6, #0x4]
+ orr r3, r3, r5, lsr #0x10
+ add r1, sp, #0x4
+ mov r10, r0
+ strh r2, [sp, #0x8]
+ str r8, [r6, #0x0]
+ str r5, [r6, #0x4]
+ strh r3, [sp, #0xa]
+ bl rawip
+ cmp r0, #0x0
+ ldrne r0, [sp, #0x4]
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4-r11,lr}
+ bxne lr
+ mov r0, #0x1
+ ldr r6, _0209ACC4 ; =CPSDnsIp
+ strb r0, [sp, #0x0]
+ strb r0, [sp, #0x1]
+ add r5, sp, #0x8
+ mov r4, r9
+ mov r11, r9
+_0209AC34:
+ mov r8, r11
+ add r7, sp, #0x0
+_0209AC3C:
+ ldrb r0, [r7, #0x0]
+ cmp r0, #0x0
+ beq _0209AC80
+ mov r0, r8, lsl #0x1
+ ldrh r2, [r5, r0]
+ ldr r1, [r6, r8, lsl #0x2]
+ mov r0, r10
+ bl resolve_sub
+ str r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _0209AC74
+ mvn r1, #0x0
+ cmp r0, r1
+ bne _0209AC9C
+_0209AC74:
+ mvn r1, #0x0
+ cmp r0, r1
+ streqb r4, [r7, #0x0]
+_0209AC80:
+ add r8, r8, #0x1
+ cmp r8, #0x2
+ add r7, r7, #0x1
+ blt _0209AC3C
+ add r9, r9, #0x1
+ cmp r9, #0x3
+ blt _0209AC34
+_0209AC9C:
+ ldr r1, [sp, #0x4]
+ mvn r0, #0x0
+ cmp r1, r0
+ moveq r0, #0x0
+ streq r0, [sp, #0x4]
+ ldr r0, [sp, #0x4]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209ACC0: .word CPSiRand32ctx
+_0209ACC4: .word CPSDnsIp
+
+ arm_func_start resolve_sub
+resolve_sub: ; 0x0209ACC8
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ movs r5, r1
+ mov r6, r0
+ mov r4, r2
+ addeq sp, sp, #0x8
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ bl CPS_SocUse
+ bl CPS_SocDatagramMode
+ mov r2, r5
+ mov r0, #0x0
+ mov r1, #0x35
+ bl CPS_SocPingMode
+ mov r0, r6
+ mov r2, r4
+ mov r3, #0x0
+ str r3, [sp, #0x0]
+ mov r1, #0x1
+ bl resolve_common
+ mov r4, r0
+ bl CPS_SocRelease
+ mov r0, r4
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start rawip
+rawip:
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ mov r6, #0x0
+ mov r8, r0
+ mov r7, r1
+ mov r5, r6
+ add r4, sp, #0x0
+_0209AD50:
+ mov r0, r8
+ mov r1, r4
+ mov r6, r6, lsl #0x8
+ bl strtol10
+ ldr r2, [sp, #0x0]
+ cmp r8, r2
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ mov r8, r2
+ cmp r0, #0xff
+ bhi _0209ADB0
+ cmp r5, #0x3
+ beq _0209AD9C
+ ldrb r1, [r2, #0x0]
+ add r8, r2, #0x1
+ cmp r1, #0x2e
+ bne _0209ADB0
+_0209AD9C:
+ cmp r5, #0x3
+ bne _0209ADC0
+ ldrb r1, [r8, #0x0]
+ cmp r1, #0x0
+ beq _0209ADC0
+_0209ADB0:
+ add sp, sp, #0x8
+ mov r0, #0x0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_0209ADC0:
+ add r5, r5, #0x1
+ cmp r5, #0x4
+ orr r6, r6, r0
+ blt _0209AD50
+ str r6, [r7, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start strtol10
+strtol10: ; 0x0209ADE4
+ str r0, [r1, #0x0]
+ mov r12, #0x0
+ mov r2, #0xa
+_0209ADF0:
+ ldrb r3, [r0, #0x0]
+ sub r3, r3, #0x30
+ and r3, r3, #0xff
+ cmp r3, #0x9
+ mlals r12, r2, r12, r3
+ addls r0, r0, #0x1
+ strls r0, [r1, #0x0]
+ bls _0209ADF0
+ mov r0, r12
+ bx lr
+
+ arm_func_start resolve_common
+resolve_common: ; 0x0209AE18
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4c
+ mov r9, r2
+ mov r2, r9, asr #0x8
+ mov r10, r1
+ orr r1, r2, r9, lsl #0x8
+ strh r1, [sp, #0x10]
+ cmp r10, #0x20
+ mov r5, #0x0
+ movne r1, #0x1
+ strneh r1, [sp, #0x12]
+ ldreq r1, _0209B0C8 ; =0x00001001
+ strh r5, [sp, #0x16]
+ streqh r1, [sp, #0x12]
+ mov r1, #0x100
+ strh r1, [sp, #0x14]
+ add r1, sp, #0x1c
+ strh r5, [sp, #0x18]
+ strh r5, [sp, #0x1a]
+ str r5, [sp, #0xc]
+ ldrb r6, [r0], #0x1
+ str r3, [sp, #0x0]
+ ldr r8, [sp, #0x70]
+ add r2, r1, #0x1
+ cmp r6, #0x0
+ beq _0209AED8
+ add r4, sp, #0x10
+_0209AE84:
+ cmp r6, #0x2e
+ beq _0209AEB8
+ sub r3, r2, r4
+ cmp r3, #0x3c
+ addge sp, sp, #0x4c
+ mvnge r0, #0x0
+ ldmgeia sp!, {r4-r11,lr}
+ bxge lr
+ strb r6, [r2], #0x1
+ ldr r3, [sp, #0xc]
+ add r3, r3, #0x1
+ str r3, [sp, #0xc]
+ b _0209AECC
+_0209AEB8:
+ ldr r3, [sp, #0xc]
+ strb r3, [r1, #0x0]
+ mov r1, r2
+ str r5, [sp, #0xc]
+ add r2, r2, #0x1
+_0209AECC:
+ ldrb r6, [r0], #0x1
+ cmp r6, #0x0
+ bne _0209AE84
+_0209AED8:
+ ldr r0, [sp, #0xc]
+ mov r3, #0x0
+ strb r0, [r1, #0x0]
+ strb r3, [r2, #0x0]
+ mov r0, r10, lsr #0x8
+ strb r0, [r2, #0x1]
+ strb r10, [r2, #0x2]
+ strb r3, [r2, #0x3]
+ mov r3, #0x1
+ add r0, sp, #0x10
+ add r1, r2, #0x5
+ sub r1, r1, r0
+ strb r3, [r2, #0x4]
+ bl CPS_SocWrite
+ mov r6, #0x0
+ bl OS_GetTick
+ mov r5, r0, lsr #0x10
+ mov r0, #0x2
+ str r0, [sp, #0x8]
+ mov r0, #0x1
+ orr r5, r5, r1, lsl #0x10
+ str r0, [sp, #0x4]
+ mvn r11, #0x0
+ b _0209B084
+_0209AF38:
+ bl CPS_SocGetLength
+ cmp r0, #0x0
+ bne _0209AF4C
+ bl OS_YieldThread__
+ b _0209B084
+_0209AF4C:
+ add r0, sp, #0xc
+ bl CPS_SocRead
+ ldr r1, [sp, #0xc]
+ cmp r1, #0xc
+ bls _0209B07C
+ ldrh r3, [r0, #0x0]
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r2, r2, lsl #0x10
+ cmp r9, r2, lsr #0x10
+ bne _0209B07C
+ ldrb r2, [r0, #0x3]
+ and r2, r2, #0xf
+ cmp r2, #0x3
+ moveq r6, r11
+ beq _0209B07C
+ cmp r2, #0x0
+ bne _0209B07C
+ ldrb r2, [r0, #0x4]
+ add r4, r0, r1
+ ldrb r1, [r0, #0x5]
+ add r0, r0, #0xc
+ orr r1, r1, r2, lsl #0x8
+ mov r1, r1, lsl #0x10
+ movs r1, r1, lsr #0x10
+ sub r7, r1, #0x1
+ beq _0209AFCC
+_0209AFB8:
+ bl dns_skipname
+ cmp r7, #0x0
+ add r0, r0, #0x4
+ sub r7, r7, #0x1
+ bne _0209AFB8
+_0209AFCC:
+ cmp r0, r4
+ bhs _0209B07C
+_0209AFD4:
+ bl dns_skipname
+ ldrb r7, [r0, #0x8]
+ ldrb r1, [r0, #0x9]
+ ldrb r3, [r0, #0x0]
+ ldrb r2, [r0, #0x1]
+ orr r1, r1, r7, lsl #0x8
+ mov r1, r1, lsl #0x10
+ orr r3, r2, r3, lsl #0x8
+ mov r2, r1, lsr #0x10
+ mov r1, r3, lsl #0x10
+ cmp r10, r1, lsr #0x10
+ bne _0209B06C
+ cmp r10, #0xc
+ beq _0209B04C
+ add r1, r0, #0x6
+ add r3, r1, r2
+ add r4, r0, #0x8
+ ldrb r1, [r1, r2]
+ ldrb r0, [r3, #0x1]
+ add r3, r4, r2
+ ldrb r2, [r4, r2]
+ orr r0, r0, r1, lsl #0x8
+ ldrb r1, [r3, #0x1]
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ orr r0, r1, r2, lsl #0x8
+ mov r1, r3, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r6, r1, r0, lsr #0x10
+ b _0209B07C
+_0209B04C:
+ cmp r2, r8
+ ldrhi r6, [sp, #0x8]
+ bhi _0209B07C
+ ldr r1, [sp, #0x0]
+ add r0, r0, #0xa
+ bl MI_CpuCopy8
+ ldr r6, [sp, #0x4]
+ b _0209B07C
+_0209B06C:
+ add r1, r2, #0xa
+ add r0, r0, r1
+ cmp r0, r4
+ blo _0209AFD4
+_0209B07C:
+ ldr r0, [sp, #0xc]
+ bl CPS_SocConsume
+_0209B084:
+ ldr r0, _0209B0CC ; =link_is_on
+ ldr r0, [r0, #0x0]
+ blx r0
+ cmp r0, #0x0
+ beq _0209B0B8
+ cmp r6, #0x0
+ bne _0209B0B8
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ sub r0, r0, r5
+ cmp r0, #0xf
+ blt _0209AF38
+_0209B0B8:
+ mov r0, r6
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209B0C8: .word 0x00001001
+_0209B0CC: .word link_is_on
+
+ arm_func_start dns_skipname
+dns_skipname:
+ ldrb r2, [r0], #0x1
+ cmp r2, #0x0
+ bxeq lr
+_0209B0DC:
+ and r1, r2, #0xc0
+ cmp r1, #0xc0
+ addeq r0, r0, #0x1
+ bxeq lr
+ add r0, r0, r2
+ ldrb r2, [r0], #0x1
+ cmp r2, #0x0
+ bne _0209B0DC
+ bx lr
+
+ arm_func_start dhcp_release_server
+dhcp_release_server: ; 0x0209B100
+ stmdb sp!, {r4,lr}
+ bl CPS_SocUse
+ bl CPS_SocDatagramMode
+ ldr r1, _0209B168 ; =CPSDhcpServerIp
+ mov r0, #0x44
+ ldr r2, [r1, #0x0]
+ mov r1, #0x43
+ bl CPS_SocPingMode
+ ldr r4, _0209B16C ; =scavenger_sndbuf + 0x2A
+ mov r1, #0x7
+ mov r0, r4
+ mov r2, #0x0
+ bl dhcp_setcommon
+ mov r1, #0xff
+ add r2, r0, #0x1
+ strb r1, [r0, #0x0]
+ mov r0, #0x0
+ mov r1, #0x12c
+ sub r3, r2, r4
+ bl pad_mem
+ sub r1, r0, r4
+ mov r0, r4
+ bl CPS_SocWrite
+ bl CPS_SocRelease
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209B168: .word CPSDhcpServerIp
+_0209B16C: .word scavenger_sndbuf + 0x2A
+
+ arm_func_start dhcp_request_server
+dhcp_request_server:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r5, r0
+ bl CPS_SocUse
+ bl CPS_SocDatagramMode
+ cmp r4, #0x1
+ bne _0209B1A8
+ ldr r1, _0209B28C ; =CPSDhcpServerIp
+ mov r0, #0x44
+ ldr r2, [r1, #0x0]
+ mov r1, #0x43
+ bl CPS_SocPingMode
+ b _0209B1B8
+_0209B1A8:
+ mov r0, #0x44
+ mov r1, #0x43
+ mvn r2, #0x0
+ bl CPS_SocPingMode
+_0209B1B8:
+ mov r6, #0x0
+_0209B1BC:
+ mov r0, r4
+ bl dhcp_send_request
+ mov r1, r6
+ bl dhcp_analyze_response
+ movs r7, r0
+ bne _0209B1E0
+ add r6, r6, #0x1
+ cmp r6, #0x4
+ blt _0209B1BC
+_0209B1E0:
+ bl CPS_SocRelease
+ cmp r7, #0x2
+ bne _0209B224
+ ldr r0, _0209B290 ; =lease_time
+ mov r1, #0x3
+ ldr r3, [r0, #0x0]
+ ldr r2, _0209B294 ; =UNK_021C8EEC
+ mov r3, r3, lsr #0x1
+ str r3, [r5, #0x0]
+ ldr r3, [r0, #0x0]
+ add sp, sp, #0x4
+ mul r1, r3, r1
+ mov r1, r1, lsr #0x3
+ str r1, [r2, #0x0]
+ mov r0, #0x1
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209B224:
+ ldr r1, _0209B294 ; =UNK_021C8EEC
+ cmp r4, #0x1
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsr #0x1
+ str r0, [r1, #0x0]
+ str r0, [r5, #0x0]
+ beq _0209B24C
+ cmp r4, #0x2
+ beq _0209B270
+ b _0209B27C
+_0209B24C:
+ cmp r0, #0x3c
+ bhs _0209B27C
+ mov r2, #0x1
+ ldr r0, _0209B290 ; =lease_time
+ str r2, [r5, #0x0]
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsr #0x3
+ str r0, [r1, #0x0]
+ b _0209B27C
+_0209B270:
+ cmp r0, #0x3c
+ movcc r0, #0x1
+ strcc r0, [r5, #0x0]
+_0209B27C:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209B28C: .word CPSDhcpServerIp
+_0209B290: .word lease_time
+_0209B294: .word UNK_021C8EEC
+
+ arm_func_start dhcp_discover_server
+dhcp_discover_server:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl CPS_SocUse
+ bl CPS_SocDatagramMode
+ mov r0, #0x44
+ mov r1, #0x43
+ mvn r2, #0x0
+ bl CPS_SocPingMode
+ mov r4, #0x0
+_0209B2BC:
+ bl dhcp_send_discover
+ mov r1, r4
+ bl dhcp_analyze_response
+ mov r5, r0
+ cmp r5, #0x1
+ beq _0209B2E0
+ add r4, r4, #0x1
+ cmp r4, #0x4
+ blt _0209B2BC
+_0209B2E0:
+ bl CPS_SocRelease
+ cmp r5, #0x1
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start dhcp_analyze_response
+dhcp_analyze_response: ; 0x0209B2FC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ add r2, r1, #0x1
+ mov r1, #0xf
+ mul r1, r2, r1
+ str r1, [sp, #0x8]
+ str r0, [sp, #0x0]
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ str r0, [sp, #0x4]
+ orr r0, r0, r1, lsl #0x10
+ mov r4, #0x0
+ str r0, [sp, #0x4]
+ mov r0, #0x3
+ mov r9, r4
+ ldr r5, _0209B698 ; =CPSDnsIp
+ mov r7, #0x2
+ mov r8, #0x1
+ ldr fp, _0209B69C ; =CPSGatewayIp
+ ldr r6, _0209B6A0 ; =CPSNetMask
+ str r0, [sp, #0xc]
+ b _0209B64C
+_0209B354:
+ bl CPS_SocGetLength
+ cmp r0, #0x0
+ bne _0209B368
+ bl OS_YieldThread__
+ b _0209B64C
+_0209B368:
+ add r0, sp, #0x10
+ bl CPS_SocRead
+ mov r10, r0
+ ldr r0, [sp, #0x10]
+ cmp r0, #0xf0
+ bls _0209B644
+ ldrb r0, [r10, #0x0]
+ cmp r0, #0x2
+ bne _0209B644
+ ldrh r1, [r10, #0x6]
+ ldrh r2, [r10, #0x4]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r1, r0, lsl #0x10
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ mov r0, r0, lsl #0x10
+ orr r1, r0, r1, lsr #0x10
+ ldr r0, [sp, #0x0]
+ cmp r0, r1
+ bne _0209B644
+ ldr r1, _0209B6A4 ; =CPSMyMac
+ add r0, r10, #0x1c
+ bl maccmp
+ cmp r0, #0x0
+ bne _0209B644
+ ldrb r3, [r10, #0x10]
+ ldrb r0, [r10, #0x11]
+ ldrb r2, [r10, #0x12]
+ ldrb r1, [r10, #0x13]
+ orr r0, r0, r3, lsl #0x8
+ mov r0, r0, lsl #0x10
+ orr r1, r1, r2, lsl #0x8
+ mov r0, r0, lsr #0x10
+ mov r2, r0, lsl #0x10
+ mov r0, r1, lsl #0x10
+ orr r0, r2, r0, lsr #0x10
+ ldrb r2, [r10, #0xec]
+ ldr r1, [sp, #0x10]
+ ldr r4, [sp, #0xc]
+ add r1, r10, r1
+ cmp r2, #0x63
+ bne _0209B644
+ ldrb r2, [r10, #0xed]
+ cmp r2, #0x82
+ bne _0209B644
+ ldrb r2, [r10, #0xee]
+ cmp r2, #0x53
+ bne _0209B644
+ add r2, r10, #0xf0
+ ldrb r3, [r10, #0xef]
+ cmp r3, #0x63
+ bne _0209B644
+ b _0209B630
+_0209B448:
+ cmp r3, #0x0
+ beq _0209B630
+ cmp r3, #0x33
+ bgt _0209B48C
+ cmp r3, #0x33
+ bge _0209B588
+ cmp r3, #0x6
+ bgt _0209B624
+ cmp r3, #0x1
+ blt _0209B624
+ cmp r3, #0x1
+ beq _0209B4AC
+ cmp r3, #0x3
+ beq _0209B4E0
+ cmp r3, #0x6
+ beq _0209B514
+ b _0209B624
+_0209B48C:
+ cmp r3, #0x35
+ bgt _0209B4A0
+ cmp r3, #0x35
+ beq _0209B5C0
+ b _0209B624
+_0209B4A0:
+ cmp r3, #0x36
+ beq _0209B5F0
+ b _0209B624
+_0209B4AC:
+ ldrb lr, [r2, #0x1]
+ ldrb r12, [r2, #0x2]
+ ldrb r10, [r2, #0x3]
+ ldrb r3, [r2, #0x4]
+ orr r12, r12, lr, lsl #0x8
+ mov r12, r12, lsl #0x10
+ orr r3, r3, r10, lsl #0x8
+ mov r10, r12, lsr #0x10
+ mov r10, r10, lsl #0x10
+ mov r3, r3, lsl #0x10
+ orr r3, r10, r3, lsr #0x10
+ str r3, [r6, #0x0]
+ b _0209B624
+_0209B4E0:
+ ldrb lr, [r2, #0x1]
+ ldrb r12, [r2, #0x2]
+ ldrb r10, [r2, #0x3]
+ ldrb r3, [r2, #0x4]
+ orr r12, r12, lr, lsl #0x8
+ mov r12, r12, lsl #0x10
+ orr r3, r3, r10, lsl #0x8
+ mov r10, r12, lsr #0x10
+ mov r10, r10, lsl #0x10
+ mov r3, r3, lsl #0x10
+ orr r3, r10, r3, lsr #0x10
+ str r3, [r11, #0x0]
+ b _0209B624
+_0209B514:
+ ldrb r3, [r2, #0x0]
+ cmp r3, #0x8
+ strcc r9, [r5, #0x4]
+ blo _0209B554
+ ldrb lr, [r2, #0x5]
+ ldrb r12, [r2, #0x6]
+ ldrb r10, [r2, #0x7]
+ ldrb r3, [r2, #0x8]
+ orr r12, r12, lr, lsl #0x8
+ mov r12, r12, lsl #0x10
+ orr r3, r3, r10, lsl #0x8
+ mov r10, r12, lsr #0x10
+ mov r10, r10, lsl #0x10
+ mov r3, r3, lsl #0x10
+ orr r3, r10, r3, lsr #0x10
+ str r3, [r5, #0x4]
+_0209B554:
+ ldrb lr, [r2, #0x1]
+ ldrb r12, [r2, #0x2]
+ ldrb r10, [r2, #0x3]
+ ldrb r3, [r2, #0x4]
+ orr r12, r12, lr, lsl #0x8
+ mov r12, r12, lsl #0x10
+ orr r3, r3, r10, lsl #0x8
+ mov r10, r12, lsr #0x10
+ mov r10, r10, lsl #0x10
+ mov r3, r3, lsl #0x10
+ orr r3, r10, r3, lsr #0x10
+ str r3, [r5, #0x0]
+ b _0209B624
+_0209B588:
+ ldrb lr, [r2, #0x1]
+ ldrb r12, [r2, #0x2]
+ ldrb r10, [r2, #0x3]
+ ldrb r3, [r2, #0x4]
+ orr r12, r12, lr, lsl #0x8
+ mov r12, r12, lsl #0x10
+ orr r3, r3, r10, lsl #0x8
+ mov r10, r12, lsr #0x10
+ mov r10, r10, lsl #0x10
+ mov r3, r3, lsl #0x10
+ orr r10, r10, r3, lsr #0x10
+ ldr r3, _0209B6A8 ; =lease_time
+ str r10, [r3, #0x0]
+ b _0209B624
+_0209B5C0:
+ ldrb r3, [r2, #0x1]
+ cmp r3, #0x2
+ beq _0209B5E0
+ cmp r3, #0x5
+ ldreq r3, _0209B6AC ; =CPSMyIp
+ moveq r4, r7
+ streq r0, [r3, #0x0]
+ b _0209B624
+_0209B5E0:
+ ldr r3, _0209B6B0 ; =offered_myip
+ mov r4, r8
+ str r0, [r3, #0x0]
+ b _0209B624
+_0209B5F0:
+ ldrb lr, [r2, #0x1]
+ ldrb r12, [r2, #0x2]
+ ldrb r10, [r2, #0x3]
+ ldrb r3, [r2, #0x4]
+ orr r12, r12, lr, lsl #0x8
+ mov r12, r12, lsl #0x10
+ orr r3, r3, r10, lsl #0x8
+ mov r10, r12, lsr #0x10
+ mov r10, r10, lsl #0x10
+ mov r3, r3, lsl #0x10
+ orr r10, r10, r3, lsr #0x10
+ ldr r3, _0209B6B4 ; =CPSDhcpServerIp
+ str r10, [r3, #0x0]
+_0209B624:
+ ldrb r3, [r2, #0x0]
+ add r3, r3, #0x1
+ add r2, r2, r3
+_0209B630:
+ cmp r2, r1
+ bhs _0209B644
+ ldrb r3, [r2], #0x1
+ cmp r3, #0xff
+ bne _0209B448
+_0209B644:
+ ldr r0, [sp, #0x10]
+ bl CPS_SocConsume
+_0209B64C:
+ ldr r0, _0209B6B8 ; =link_is_on
+ ldr r0, [r0, #0x0]
+ blx r0
+ cmp r0, #0x0
+ beq _0209B688
+ cmp r4, #0x0
+ bne _0209B688
+ bl OS_GetTick
+ mov r2, r0, lsr #0x10
+ ldr r0, [sp, #0x4]
+ orr r2, r2, r1, lsl #0x10
+ sub r1, r2, r0
+ ldr r0, [sp, #0x8]
+ cmp r1, r0
+ blt _0209B354
+_0209B688:
+ mov r0, r4
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209B698: .word CPSDnsIp
+_0209B69C: .word CPSGatewayIp
+_0209B6A0: .word CPSNetMask
+_0209B6A4: .word CPSMyMac
+_0209B6A8: .word lease_time
+_0209B6AC: .word CPSMyIp
+_0209B6B0: .word offered_myip
+_0209B6B4: .word CPSDhcpServerIp
+_0209B6B8: .word link_is_on
+
+ arm_func_start dhcp_send_request
+dhcp_send_request: ; 0x0209B6BC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r4, _0209B7CC ; =scavenger_sndbuf + 0x2A
+ mov r5, r0
+ add r2, sp, #0x0
+ mov r0, r4
+ mov r1, #0x3
+ bl dhcp_setcommon
+ mov r12, r0
+ cmp r5, #0x0
+ bne _0209B790
+ mov r0, #0x32
+ strb r0, [r12, #0x0]
+ mov r0, #0x4
+ ldr r3, _0209B7D0 ; =offered_myip
+ strb r0, [r12, #0x1]
+ ldr r1, [r3, #0x0]
+ mov lr, #0x36
+ mov r1, r1, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ mov r1, r1, asr #0x8
+ strb r1, [r12, #0x2]
+ ldr r1, [r3, #0x0]
+ ldr r2, _0209B7D4 ; =CPSDhcpServerIp
+ mov r1, r1, lsr #0x10
+ strb r1, [r12, #0x3]
+ ldr r1, [r3, #0x0]
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ mov r1, r1, asr #0x8
+ strb r1, [r12, #0x4]
+ ldr r1, [r3, #0x0]
+ strb r1, [r12, #0x5]
+ strb lr, [r12, #0x6]
+ strb r0, [r12, #0x7]
+ ldr r0, [r2, #0x0]
+ mov r0, r0, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ mov r0, r0, asr #0x8
+ strb r0, [r12, #0x8]
+ ldr r0, [r2, #0x0]
+ mov r0, r0, lsr #0x10
+ strb r0, [r12, #0x9]
+ ldr r0, [r2, #0x0]
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ mov r0, r0, asr #0x8
+ strb r0, [r12, #0xa]
+ ldr r0, [r2, #0x0]
+ strb r0, [r12, #0xb]
+ add r12, r12, #0xc
+_0209B790:
+ add r2, r12, #0x1
+ mov lr, #0xff
+ sub r3, r2, r4
+ mov r0, #0x0
+ mov r1, #0x12c
+ strb lr, [r12, #0x0]
+ bl pad_mem
+ mov r1, r0
+ mov r0, r4
+ sub r1, r1, r4
+ bl CPS_SocWrite
+ ldr r0, [sp, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0209B7CC: .word scavenger_sndbuf + 0x2A
+_0209B7D0: .word offered_myip
+_0209B7D4: .word CPSDhcpServerIp
+
+ arm_func_start dhcp_send_discover
+dhcp_send_discover: ; 0x0209B7D8
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ ldr r4, _0209B898 ; =scavenger_sndbuf + 0x2A
+ add r2, sp, #0x0
+ mov r0, r4
+ mov r1, #0x1
+ bl dhcp_setcommon
+ ldr r1, _0209B89C ; =offered_myip
+ mov r12, r0
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ beq _0209B85C
+ mov r0, #0x32
+ strb r0, [r12, #0x0]
+ mov r0, #0x4
+ strb r0, [r12, #0x1]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ mov r0, r0, asr #0x8
+ strb r0, [r12, #0x2]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsr #0x10
+ strb r0, [r12, #0x3]
+ ldr r0, [r1, #0x0]
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ mov r0, r0, asr #0x8
+ strb r0, [r12, #0x4]
+ ldr r0, [r1, #0x0]
+ strb r0, [r12, #0x5]
+ add r12, r12, #0x6
+_0209B85C:
+ add r2, r12, #0x1
+ mov lr, #0xff
+ sub r3, r2, r4
+ mov r0, #0x0
+ mov r1, #0x12c
+ strb lr, [r12, #0x0]
+ bl pad_mem
+ mov r1, r0
+ mov r0, r4
+ sub r1, r1, r4
+ bl CPS_SocWrite
+ ldr r0, [sp, #0x0]
+ add sp, sp, #0x8
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209B898: .word scavenger_sndbuf + 0x2A
+_0209B89C: .word offered_myip
+
+ arm_func_start pad_mem
+pad_mem: ; 0x0209B8A0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r12, r0
+ mov r5, r2
+ cmp r3, r1
+ bhs _0209B8D0
+ sub r4, r1, r3
+ mov r0, r5
+ mov r1, r12
+ mov r2, r4
+ bl MI_CpuFill8
+ add r5, r5, r4
+_0209B8D0:
+ mov r0, r5
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start dhcp_setcommon
+dhcp_setcommon: ; 0x0209B8E0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ mov r4, r2
+ mov r1, #0x0
+ mov r2, #0xec
+ mov r6, r0
+ bl MI_CpuFill8
+ ldr r0, _0209BA5C ; =0x00000101
+ mov r1, #0x6
+ strh r0, [r6, #0x0]
+ ldr r0, _0209BA60 ; =CPSiRand32ctx
+ strb r1, [r6, #0x2]
+ ldr r3, [r0, #0x8]
+ ldr r2, [r0, #0x0]
+ ldr r1, [r0, #0x4]
+ umull lr, r12, r3, r2
+ mla r12, r3, r1, r12
+ ldr r1, [r0, #0xc]
+ ldr r7, [r0, #0x10]
+ mla r12, r1, r2, r12
+ adds r3, r7, lr
+ ldr r1, [r0, #0x14]
+ str r3, [r0, #0x0]
+ adc r1, r1, r12
+ str r1, [r0, #0x4]
+ mov r0, r1, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ cmp r4, #0x0
+ mov r2, r3, asr #0x8
+ mov r0, r1, lsl #0x10
+ strne r1, [r4, #0x0]
+ mov r1, r0, lsr #0x10
+ orr r2, r2, r3, lsl #0x8
+ mov r0, r1, asr #0x8
+ strh r2, [r6, #0x4]
+ orr r0, r0, r1, lsl #0x8
+ strh r0, [r6, #0x6]
+ ldr r2, _0209BA64 ; =CPSMyIp
+ ldr r0, _0209BA68 ; =CPSMyMac
+ ldr r1, [r2, #0x0]
+ mov r1, r1, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r3, r1, lsr #0x10
+ mov r1, r3, asr #0x8
+ orr r1, r1, r3, lsl #0x8
+ strh r1, [r6, #0xc]
+ ldr r2, [r2, #0x0]
+ add r1, r6, #0x1c
+ mov r2, r2, lsl #0x10
+ mov r3, r2, lsr #0x10
+ mov r2, r3, asr #0x8
+ orr r3, r2, r3, lsl #0x8
+ mov r2, #0x6
+ strh r3, [r6, #0xe]
+ bl MI_CpuCopy8
+ ldr r0, _0209BA6C ; =0x00008263
+ ldr r1, _0209BA70 ; =0x00006353
+ strh r0, [r6, #0xec]
+ strh r1, [r6, #0xee]
+ ldr r0, _0209BA74 ; =0x00000135
+ mov r1, #0x7
+ strh r0, [r6, #0xf0]
+ strb r5, [r6, #0xf2]
+ mov r0, #0x3d
+ strb r0, [r6, #0xf3]
+ strb r1, [r6, #0xf4]
+ mov r3, #0x1
+ ldr r0, _0209BA68 ; =CPSMyMac
+ add r1, r6, #0xf6
+ mov r2, #0x6
+ strb r3, [r6, #0xf5]
+ bl MI_CpuCopy8
+ mov r1, #0xc
+ strb r1, [r6, #0xfc]
+ mov r2, #0xa
+ ldr r0, _0209BA78 ; =UNK_02106224
+ add r1, r6, #0xfe
+ strb r2, [r6, #0xfd]
+ bl MI_CpuCopy8
+ mov r1, #0x37
+ strb r1, [r6, #0x108]
+ mov r2, #0x3
+ ldr r0, _0209BA7C ; =0x0000010D
+ strb r2, [r6, #0x109]
+ mov r1, #0x1
+ strb r1, [r6, #0x10a]
+ strb r2, [r6, #0x10b]
+ mov r1, #0x6
+ strb r1, [r6, #0x10c]
+ add r0, r6, r0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209BA5C: .word 0x00000101
+_0209BA60: .word CPSiRand32ctx
+_0209BA64: .word CPSMyIp
+_0209BA68: .word CPSMyMac
+_0209BA6C: .word 0x00008263
+_0209BA70: .word 0x00006353
+_0209BA74: .word 0x00000135
+_0209BA78: .word UNK_02106224
+_0209BA7C: .word 0x0000010D
+
+ arm_func_start scavenger
+scavenger: ; 0x0209BA80
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x54
+ ldr r3, _0209BE40 ; =scavenger_force_exit
+ mov r1, #0x0
+ ldr r0, _0209BE44 ; =scavenger_soc
+ mov r2, #0x64
+ str r1, [r3, #0x0]
+ bl MI_CpuFill8
+ ldr r0, _0209BE44 ; =scavenger_soc
+ mov r3, #0x180
+ ldr r2, _0209BE48 ; =scavenger_rcvbuf
+ ldr r1, _0209BE4C ; =scavenger_sndbuf
+ str r3, [r0, #0x3c]
+ str r2, [r0, #0x40]
+ str r3, [r0, #0x48]
+ str r1, [r0, #0x4c]
+ bl CPS_SocRegister
+ mov r11, #0x0
+ mov r0, #0x1
+ str r0, [sp, #0x0]
+ str r0, [sp, #0x4]
+ str r0, [sp, #0x4c]
+ mov r1, r0
+ ldr r0, _0209BE50 ; =CPSNoIpReason
+ ldr r5, [sp, #0x0]
+ str r1, [r0, #0x0]
+ mov r0, #0x2
+ str r0, [sp, #0x10]
+ mov r0, r5
+ str r0, [sp, #0x34]
+ str r0, [sp, #0x3c]
+ mov r0, #0x3
+ str r0, [sp, #0x1c]
+ mov r0, r5
+ str r0, [sp, #0x30]
+ str r0, [sp, #0x28]
+ str r0, [sp, #0x24]
+ str r0, [sp, #0x20]
+ str r0, [sp, #0xc]
+ mov r0, #0x69
+ str r0, [sp, #0x44]
+ mov r0, #0x3e8
+ mov r6, r11
+ mov r4, r11
+ mov r10, r11
+ str r11, [sp, #0x14]
+ str r11, [sp, #0x18]
+ str r11, [sp, #0x38]
+ str r11, [sp, #0x2c]
+ str r11, [sp, #0x40]
+ str r11, [sp, #0x48]
+ str r0, [sp, #0x8]
+_0209BB50:
+ ldr r0, [sp, #0x8]
+ bl OS_Sleep
+ ldr r0, _0209BE40 ; =scavenger_force_exit
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _0209BE14
+ bl OS_GetTick
+ mov r9, r0, lsr #0x10
+ ldr r0, _0209BE54 ; =link_is_on
+ orr r9, r9, r1, lsl #0x10
+ ldr r0, [r0, #0x0]
+ blx r0
+ cmp r0, #0x0
+ beq _0209BC8C
+ ldr r0, [sp, #0x4c]
+ subs r0, r0, #0x1
+ str r0, [sp, #0x4c]
+ bne _0209BCA4
+ ldr r0, _0209BE58 ; =mode
+ ldr r0, [r0, #0x0]
+ ands r0, r0, #0x1
+ beq _0209BBBC
+ cmp r11, #0x0
+ bne _0209BCA4
+ bl set_fixed_ip
+ ldr r11, [sp, #0xc]
+ b _0209BCA4
+_0209BBBC:
+ cmp r11, #0x3
+ addls pc, pc, r11, lsl #0x2
+ b _0209BCA4
+_0209BBC8: ; jump table
+ b _0209BBD8 ; case 0
+ b _0209BC28 ; case 1
+ b _0209BC4C ; case 2
+ b _0209BCA4 ; case 3
+_0209BBD8:
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ ldrne r1, [sp, #0x10]
+ ldrne r0, _0209BE50 ; =CPSNoIpReason
+ strne r1, [r0, #0x0]
+ ldrne r0, [sp, #0x14]
+ strne r0, [sp, #0x4]
+ bl dhcp_discover_server
+ cmp r0, #0x0
+ beq _0209BC14
+ ldr r1, [sp, #0x18]
+ add r0, sp, #0x4c
+ bl dhcp_request_server
+ cmp r0, #0x0
+ bne _0209BC20
+_0209BC14:
+ bl set_fixed_ip
+ ldr r11, [sp, #0x1c]
+ b _0209BCA4
+_0209BC20:
+ ldr r11, [sp, #0x20]
+ b _0209BCA4
+_0209BC28:
+ ldr r1, [sp, #0x24]
+ add r0, sp, #0x4c
+ bl dhcp_request_server
+ cmp r0, #0x0
+ bne _0209BCA4
+ ldr r0, [sp, #0x4c]
+ cmp r0, #0x3c
+ ldrcc r11, [sp, #0x10]
+ b _0209BCA4
+_0209BC4C:
+ ldr r1, [sp, #0x10]
+ add r0, sp, #0x4c
+ bl dhcp_request_server
+ cmp r0, #0x0
+ ldrne r11, [sp, #0x28]
+ bne _0209BCA4
+ ldr r0, [sp, #0x4c]
+ cmp r0, #0x3c
+ bhs _0209BCA4
+ ldr r0, [sp, #0x1c]
+ bl reset_network_vars
+ ldr r0, [sp, #0x30]
+ ldr r11, [sp, #0x2c]
+ str r0, [sp, #0x4c]
+ str r0, [sp, #0x0]
+ b _0209BCA4
+_0209BC8C:
+ ldr r0, [sp, #0x34]
+ bl reset_network_vars
+ ldr r0, [sp, #0x3c]
+ ldr r11, [sp, #0x38]
+ str r0, [sp, #0x4c]
+ str r0, [sp, #0x0]
+_0209BCA4:
+ ldr r1, [sp, #0x40]
+ ldr r0, _0209BE5C ; =arpcache
+_0209BCAC:
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ beq _0209BCD4
+ ldrh r2, [r0, #0xa]
+ sub r2, r9, r2
+ mov r2, r2, lsl #0x10
+ mov r3, r2, asr #0x10
+ ldr r2, _0209BE60 ; =0x000003BD
+ cmp r3, r2
+ strgt r6, [r0, #0x0]
+_0209BCD4:
+ add r0, r0, #0xc
+ add r1, r1, #0x1
+ cmp r1, #0x8
+ blt _0209BCAC
+ ldr r0, _0209BE64 ; =CPSGatewayIp
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _0209BD10
+ ldr r1, [sp, #0x0]
+ subs r1, r1, #0x1
+ str r1, [sp, #0x0]
+ bne _0209BD10
+ bl send_arprequest
+ ldr r0, [sp, #0x44]
+ str r0, [sp, #0x0]
+_0209BD10:
+ ldr r0, _0209BE68 ; =OSi_ThreadInfo
+ ldr r7, [r0, #0x8]
+ cmp r7, #0x0
+ beq _0209BDAC
+_0209BD20:
+ ldr r0, [r7, #0xa4]
+ cmp r0, #0x0
+ beq _0209BDA0
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ beq _0209BDA0
+ ldrb r2, [r0, #0x8]
+ cmp r2, #0x3
+ bne _0209BD6C
+ ldr r1, [r0, #0x10]
+ sub r1, r9, r1
+ cmp r1, #0x27
+ ble _0209BD6C
+ strb r5, [r0, #0x8]
+ ldrh r1, [r0, #0x1a]
+ strh r1, [r0, #0x18]
+ ldr r1, [r0, #0x20]
+ str r1, [r0, #0x1c]
+ b _0209BDA0
+_0209BD6C:
+ cmp r2, #0x2
+ bne _0209BDA0
+ ldr r1, [r0, #0x10]
+ sub r1, r9, r1
+ cmp r1, #0x27
+ ble _0209BDA0
+ ldr r1, [r0, #0x4]
+ cmp r1, #0x1
+ bne _0209BDA0
+ strb r4, [r0, #0x8]
+ str r4, [r0, #0x4]
+ ldr r0, [r0, #0x0]
+ bl OS_WakeupThreadDirect
+_0209BDA0:
+ ldr r7, [r7, #0x68]
+ cmp r7, #0x0
+ bne _0209BD20
+_0209BDAC:
+ ldr r7, [sp, #0x48]
+ ldr r8, _0209BE6C ; =fragtable
+_0209BDB4:
+ ldrh r0, [r8, #0x4]
+ cmp r0, #0x0
+ beq _0209BDE4
+ ldr r0, [r8, #0x2c]
+ sub r0, r9, r0
+ cmp r0, #0xef
+ ble _0209BDE4
+ ldr r1, _0209BE70 ; =CPSiFree
+ ldr r0, [r8, #0x34]
+ ldr r1, [r1, #0x0]
+ blx r1
+ strh r10, [r8, #0x4]
+_0209BDE4:
+ add r8, r8, #0x38
+ add r7, r7, #0x1
+ cmp r7, #0x8
+ blt _0209BDB4
+ mov r0, r9
+ bl CPSi_SslPeriodical
+ ldr r0, _0209BE74 ; =scavenger_callback
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _0209BB50
+ blx r0
+ b _0209BB50
+_0209BE14:
+ ldr r0, _0209BE58 ; =mode
+ ldr r0, [r0, #0x0]
+ ands r0, r0, #0x1
+ bne _0209BE30
+ cmp r11, #0x3
+ beq _0209BE30
+ bl dhcp_release_server
+_0209BE30:
+ bl CPS_SocUnRegister
+ add sp, sp, #0x54
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209BE40: .word scavenger_force_exit
+_0209BE44: .word scavenger_soc
+_0209BE48: .word scavenger_rcvbuf
+_0209BE4C: .word scavenger_sndbuf
+_0209BE50: .word CPSNoIpReason
+_0209BE54: .word link_is_on
+_0209BE58: .word mode
+_0209BE5C: .word arpcache
+_0209BE60: .word 0x000003BD
+_0209BE64: .word CPSGatewayIp
+_0209BE68: .word OSi_ThreadInfo
+_0209BE6C: .word fragtable
+_0209BE70: .word CPSiFree
+_0209BE74: .word scavenger_callback
+
+ arm_func_start set_fixed_ip
+set_fixed_ip: ; 0x0209BE78
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r0, _0209BF3C ; =dhcp_callback
+ ldr r0, [r0, #0x0]
+ blx r0
+ ldr r0, _0209BF40 ; =CPSMyIp
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ bl send_arprequest
+ mov r0, #0x64
+ bl OS_Sleep
+ ldr r0, _0209BF40 ; =CPSMyIp
+ ldr r0, [r0, #0x0]
+ bl send_arprequest
+ bl OS_GetTick
+ mov r4, r0, lsr #0x10
+ orr r4, r4, r1, lsl #0x10
+ ldr r6, _0209BF44 ; =ip_conflict
+ mov r7, #0x64
+ ldr r5, _0209BF48 ; =link_is_on
+ b _0209BF00
+_0209BED8:
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x0
+ beq _0209BEF8
+ mov r0, #0x4
+ bl reset_network_vars
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209BEF8:
+ mov r0, r7
+ bl OS_Sleep
+_0209BF00:
+ ldr r0, [r5, #0x0]
+ blx r0
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ sub r0, r0, r4
+ cmp r0, #0x17
+ blt _0209BED8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209BF3C: .word dhcp_callback
+_0209BF40: .word CPSMyIp
+_0209BF44: .word ip_conflict
+_0209BF48: .word link_is_on
+
+ arm_func_start CPS_SocGetChar
+CPS_SocGetChar: ; 0x0209BF4C
+ stmdb sp!, {r4,lr}
+ ldr r0, _0209BF98 ; =OSi_ThreadInfo
+ ldr r0, [r0, #0x4]
+ ldr r4, [r0, #0xa4]
+ cmp r4, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r1, [r4, #0x60]
+ cmp r1, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ mov r2, #0x0
+ ldr r0, [r4, #0x5c]
+ mov r3, r2
+ bl CPSi_SocWrite2
+ mov r0, #0x0
+ str r0, [r4, #0x60]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209BF98: .word OSi_ThreadInfo
+
+ arm_func_start CPS_SocGetLength
+CPS_SocGetLength:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _0209C02C ; =OSi_ThreadInfo
+ ldr r0, [r0, #0x4]
+ ldr r0, [r0, #0xa4]
+ cmp r0, #0x0
+ beq _0209C01C
+ ldrb r1, [r0, #0x9]
+ cmp r1, #0x0
+ beq _0209BFD4
+ bl CPSi_SslGetLength
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209BFD4:
+ ldr r1, [r0, #0x44]
+ cmp r1, #0x0
+ bne _0209BFFC
+ ldrb r0, [r0, #0x8]
+ cmp r0, #0x4
+ beq _0209BFFC
+ add r0, r0, #0xf6
+ and r0, r0, #0xff
+ cmp r0, #0x1
+ bhi _0209C00C
+_0209BFFC:
+ add sp, sp, #0x4
+ mov r0, r1
+ ldmia sp!, {lr}
+ bx lr
+_0209C00C:
+ add sp, sp, #0x4
+ mvn r0, #0x0
+ ldmia sp!, {lr}
+ bx lr
+_0209C01C:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209C02C: .word OSi_ThreadInfo
+
+ arm_func_start CPS_SocWrite
+CPS_SocWrite:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r3, _0209C0E4 ; =OSi_ThreadInfo
+ mov r2, r0
+ ldr r4, [r3, #0x4]
+ mov r3, r1
+ ldr r5, [r4, #0xa4]
+ cmp r5, #0x0
+ beq _0209C0D4
+ ldr r4, [r5, #0x60]
+ cmp r4, #0x0
+ beq _0209C0BC
+ ldr r0, [r5, #0x5c]
+ mov r1, r4
+ bl CPSi_SocWrite2
+ ldr r1, [r5, #0x60]
+ mov r4, r0
+ cmp r4, r1
+ movcs r0, #0x0
+ strcs r0, [r5, #0x60]
+ addcs sp, sp, #0x4
+ subcs r0, r4, r1
+ ldmcsia sp!, {r4-r5,lr}
+ bxcs lr
+ ldr r0, [r5, #0x5c]
+ sub r2, r1, r4
+ add r1, r0, r4
+ bl memmove
+ ldr r1, [r5, #0x60]
+ add sp, sp, #0x4
+ sub r1, r1, r4
+ mov r0, #0x0
+ str r1, [r5, #0x60]
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_0209C0BC:
+ mov r2, #0x0
+ mov r3, r2
+ bl CPSi_SocWrite2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+_0209C0D4:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0209C0E4: .word OSi_ThreadInfo
+
+ arm_func_start CPSi_SocWrite2
+CPSi_SocWrite2:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr ip, _0209C1CC ; =OSi_ThreadInfo
+ mov r7, r1
+ ldr r12, [r12, #0x4]
+ mov r6, r2
+ ldr r4, [r12, #0xa4]
+ mov r5, r3
+ cmp r4, #0x0
+ beq _0209C1BC
+ ldrb r12, [r4, #0x8]
+ cmp r12, #0xa
+ bne _0209C14C
+ cmp r7, #0x0
+ beq _0209C12C
+ mov r2, r4
+ bl send_udp
+_0209C12C:
+ cmp r5, #0x0
+ beq _0209C144
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl send_udp
+_0209C144:
+ add r0, r7, r5
+ b _0209C1A4
+_0209C14C:
+ cmp r12, #0xb
+ bne _0209C184
+ cmp r7, #0x0
+ beq _0209C164
+ mov r2, r4
+ bl send_ping
+_0209C164:
+ cmp r5, #0x0
+ beq _0209C17C
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl send_ping
+_0209C17C:
+ add r0, r7, r5
+ b _0209C1A4
+_0209C184:
+ ldrb r12, [r4, #0x9]
+ cmp r12, #0x0
+ beq _0209C19C
+ str r4, [sp, #0x0]
+ bl CPSi_SslWrite2
+ b _0209C1A4
+_0209C19C:
+ str r4, [sp, #0x0]
+ bl CPSi_TcpWrite2Raw
+_0209C1A4:
+ ldr r1, _0209C1D0 ; =wfailed
+ ldrb r1, [r1, #0x0]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+_0209C1BC:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209C1CC: .word OSi_ThreadInfo
+_0209C1D0: .word wfailed
+
+ arm_func_start CPSi_TcpWrite2Raw
+CPSi_TcpWrite2Raw:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x1c
+ mov r4, #0x0
+ mov r10, r0
+ ldr r8, [sp, #0x40]
+ mov r0, r4
+ str r4, [sp, #0xc]
+ mov r9, r1
+ mov r11, r2
+ str r3, [sp, #0x8]
+ mov r6, r4
+ str r0, [r8, #0x34]
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ str r0, [sp, #0x10]
+ orr r0, r0, r1, lsl #0x10
+ str r0, [sp, #0x10]
+ mov r0, r6
+ str r0, [sp, #0x18]
+ mov r0, #0x1
+ ldr r4, _0209C3EC ; =link_is_on
+ str r0, [sp, #0x14]
+ b _0209C39C
+_0209C230:
+ ldr r7, [r8, #0x28]
+ ldr r3, [sp, #0x8]
+ str r8, [sp, #0x0]
+ mov r0, r10
+ mov r1, r9
+ mov r2, r11
+ str r6, [sp, #0x4]
+ bl tcp_write_do2
+ bl OS_GetTick
+ mov r5, r0, lsr #0x10
+ orr r5, r5, r1, lsl #0x10
+_0209C25C:
+ bl OS_YieldThread__
+ ldr r0, [r4, #0x0]
+ blx r0
+ cmp r0, #0x0
+ beq _0209C2B8
+ ldrb r0, [r8, #0x8]
+ cmp r0, #0x4
+ bne _0209C2B8
+ ldr r1, [r8, #0x28]
+ ldr r0, [r8, #0x30]
+ cmp r1, r0
+ beq _0209C2B8
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ sub r0, r0, r5
+ cmp r0, #0xf
+ bge _0209C2B8
+ cmp r6, #0x0
+ beq _0209C25C
+ ldrh r0, [r8, #0x2c]
+ cmp r0, #0x0
+ beq _0209C25C
+_0209C2B8:
+ ldr r0, [r8, #0x30]
+ subs r7, r0, r7
+ ldr r0, [sp, #0xc]
+ add r0, r0, r7
+ str r0, [sp, #0xc]
+ beq _0209C2E4
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ str r0, [sp, #0x10]
+ orr r0, r0, r1, lsl #0x10
+ str r0, [sp, #0x10]
+_0209C2E4:
+ ldr r0, [r8, #0x30]
+ str r0, [r8, #0x28]
+ ldrb r0, [r8, #0x8]
+ cmp r0, #0x4
+ bne _0209C36C
+ ldrh r0, [r8, #0x2c]
+ cmp r0, #0x0
+ bne _0209C36C
+ cmp r7, #0x0
+ bne _0209C36C
+ cmp r6, #0x0
+ bne _0209C370
+ bl OS_GetTick
+ mov r5, r0, lsr #0x10
+ orr r5, r5, r1, lsl #0x10
+ b _0209C334
+_0209C324:
+ bl OS_YieldThread__
+ ldrh r0, [r8, #0x2c]
+ cmp r0, #0x0
+ bne _0209C35C
+_0209C334:
+ ldr r0, [r4, #0x0]
+ blx r0
+ cmp r0, #0x0
+ beq _0209C35C
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ sub r0, r0, r5
+ cmp r0, #0xf
+ blt _0209C324
+_0209C35C:
+ ldrh r0, [r8, #0x2c]
+ cmp r0, #0x0
+ ldreq r6, [sp, #0x14]
+ b _0209C370
+_0209C36C:
+ ldr r6, [sp, #0x18]
+_0209C370:
+ cmp r7, r9
+ addcc r10, r10, r7
+ subcc r9, r9, r7
+ blo _0209C39C
+ sub r1, r7, r9
+ add r10, r11, r1
+ ldr r0, [sp, #0x8]
+ ldr r11, [sp, #0x18]
+ sub r9, r0, r1
+ mov r0, r11
+ str r0, [sp, #0x8]
+_0209C39C:
+ ldr r0, [r4, #0x0]
+ blx r0
+ cmp r0, #0x0
+ beq _0209C3DC
+ cmp r9, #0x0
+ beq _0209C3DC
+ ldrb r0, [r8, #0x8]
+ cmp r0, #0x4
+ bne _0209C3DC
+ bl OS_GetTick
+ mov r2, r0, lsr #0x10
+ ldr r0, [sp, #0x10]
+ orr r2, r2, r1, lsl #0x10
+ sub r0, r2, r0
+ cmp r0, #0x9f
+ blt _0209C230
+_0209C3DC:
+ ldr r0, [sp, #0xc]
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209C3EC: .word link_is_on
+
+ arm_func_start tcp_write_do2
+tcp_write_do2: ; 0x0209C3F0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r2
+ mov r4, r3
+ ldr r2, [sp, #0x10]
+ ldr r3, [sp, #0x14]
+ bl tcp_write_do
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,lr}
+ bxeq lr
+ ldr r2, [sp, #0x10]
+ mov r0, r5
+ mov r1, r4
+ mov r3, #0x0
+ bl tcp_write_do
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start tcp_write_do
+tcp_write_do:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r8, r2
+ ldr r11, [r8, #0x34]
+ mov r10, r0
+ movs r0, r3
+ mov r0, r11, lsl #0x1
+ movne r6, #0x1
+ add r5, r0, #0x4
+ mov r0, #0x18
+ str r3, [sp, #0x4]
+ mov r9, r1
+ ldreqh r6, [r8, #0x2c]
+ mov r4, #0x0
+ str r0, [sp, #0x8]
+ b _0209C504
+_0209C48C:
+ ldr r0, _0209C528 ; =mymss
+ ldrh r7, [r8, #0x2e]
+ ldrh r0, [r0, #0x0]
+ ldr r1, [r8, #0x34]
+ cmp r7, r6
+ movcs r7, r6
+ cmp r0, r7
+ movcc r7, r0
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ biceq r7, r7, #0x1
+ cmp r9, r7
+ sub r0, r1, r11
+ movcc r7, r9
+ adds r0, r5, r0
+ moveq r7, r4
+ mov r11, r1
+ sub r5, r0, #0x1
+ cmp r7, #0x0
+ beq _0209C518
+ ldr r3, [sp, #0x8]
+ mov r0, r10
+ mov r1, r7
+ mov r2, r8
+ str r4, [sp, #0x0]
+ sub r6, r6, r7
+ bl send_tcp
+ bl OS_YieldThread
+ add r10, r10, r7
+ sub r9, r9, r7
+_0209C504:
+ cmp r9, #0x0
+ beq _0209C518
+ ldrb r0, [r8, #0x8]
+ cmp r0, #0x4
+ beq _0209C48C
+_0209C518:
+ mov r0, r7
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209C528: .word mymss
+
+ arm_func_start CPS_SocConsume
+CPS_SocConsume: ; 0x0209C52C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _0209C57C ; =OSi_ThreadInfo
+ ldr r1, [r1, #0x4]
+ ldr r1, [r1, #0xa4]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldrb r2, [r1, #0x9]
+ cmp r2, #0x0
+ beq _0209C56C
+ bl CPSi_SslConsume
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209C56C:
+ bl CPSi_SocConsumeRaw
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209C57C: .word OSi_ThreadInfo
+
+ arm_func_start CPSi_SocConsumeRaw
+CPSi_SocConsumeRaw:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r7, r0
+ bl OS_DisableInterrupts
+ ldr r2, [r4, #0x44]
+ ldr r1, [r4, #0x3c]
+ mov r6, r0
+ cmp r2, r1
+ mov r5, #0x0
+ bne _0209C5B4
+ cmp r7, #0x0
+ movne r5, #0x1
+_0209C5B4:
+ cmp r7, r2
+ movcs r0, #0x0
+ strcs r0, [r4, #0x44]
+ bhs _0209C5D8
+ ldr r0, [r4, #0x40]
+ sub r2, r2, r7
+ add r1, r0, r7
+ str r2, [r4, #0x44]
+ bl memmove
+_0209C5D8:
+ mov r0, r6
+ bl OS_RestoreInterrupts
+ ldrb r0, [r4, #0x8]
+ cmp r0, #0xa
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ cmp r0, #0xb
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r0, [r4, #0x44]
+ cmp r0, #0x0
+ beq _0209C620
+ cmp r5, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+_0209C620:
+ mov r0, r4
+ mov r1, #0x1b
+ bl tck_send_ack
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start CPS_SocRead
+CPS_SocRead:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _0209C6BC ; =OSi_ThreadInfo
+ ldr r1, [r1, #0x4]
+ ldr r1, [r1, #0xa4]
+ cmp r1, #0x0
+ beq _0209C6A4
+ ldrb r2, [r1, #0x8]
+ add r2, r2, #0xf6
+ and r2, r2, #0xff
+ cmp r2, #0x1
+ bhi _0209C678
+ bl udp_read_raw
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209C678:
+ ldrb r2, [r1, #0x9]
+ cmp r2, #0x0
+ beq _0209C694
+ bl CPSi_SslRead
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209C694:
+ bl CPSi_TcpReadRaw
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209C6A4:
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ mov r0, r1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209C6BC: .word OSi_ThreadInfo
+
+ arm_func_start CPSi_TcpReadRaw
+CPSi_TcpReadRaw: ; 0x0209C6C0
+ stmdb sp!, {r4-r8,lr}
+ mov r4, r1
+ ldr r1, [r4, #0x44]
+ mov r5, r0
+ cmp r1, #0x0
+ bne _0209C728
+ ldrb r0, [r4, #0x8]
+ cmp r0, #0x4
+ bne _0209C728
+ bl OS_DisableInterrupts
+ mov r8, r0
+ mov r7, #0x2
+ mov r6, #0x0
+ b _0209C704
+_0209C6F8:
+ mov r0, r6
+ str r7, [r4, #0x4]
+ bl OS_SleepThread
+_0209C704:
+ ldr r0, [r4, #0x44]
+ cmp r0, #0x0
+ bne _0209C71C
+ ldrb r0, [r4, #0x8]
+ cmp r0, #0x4
+ beq _0209C6F8
+_0209C71C:
+ mov r0, r8
+ bl OS_RestoreInterrupts
+ b _0209C72C
+_0209C728:
+ bl OS_YieldThread
+_0209C72C:
+ ldr r0, [r4, #0x44]
+ str r0, [r5, #0x0]
+ ldr r0, [r5, #0x0]
+ cmp r0, #0x0
+ ldrne r0, [r4, #0x40]
+ moveq r0, #0x0
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+
+ arm_func_start udp_read_raw
+udp_read_raw: ; 0x0209C74C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r8, r1
+ mov r9, r0
+ bl OS_DisableInterrupts
+ ldr r7, [r8, #0x44]
+ mov r6, r0
+ cmp r7, #0x0
+ bne _0209C790
+ mov r5, #0x3
+ mov r4, #0x0
+_0209C778:
+ mov r0, r4
+ str r5, [r8, #0x4]
+ bl OS_SleepThread
+ ldr r7, [r8, #0x44]
+ cmp r7, #0x0
+ beq _0209C778
+_0209C790:
+ mov r0, r6
+ bl OS_RestoreInterrupts
+ str r7, [r9, #0x0]
+ ldr r0, [r8, #0x40]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start CPS_TcpClose
+CPS_TcpClose: ; 0x0209C7AC
+ stmdb sp!, {r4-r6,lr}
+ ldr r0, _0209C838 ; =OSi_ThreadInfo
+ ldr r0, [r0, #0x4]
+ ldr r4, [r0, #0xa4]
+ cmp r4, #0x0
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrb r0, [r4, #0x9]
+ cmp r0, #0x0
+ beq _0209C7DC
+ mov r0, r4
+ bl CPSi_SslClose
+_0209C7DC:
+ bl OS_GetTick
+ mov r6, r0, lsr #0x10
+ orr r6, r6, r1, lsl #0x10
+ ldr r5, _0209C83C ; =link_is_on
+ b _0209C7F4
+_0209C7F0:
+ bl OS_YieldThread__
+_0209C7F4:
+ ldr r0, [r5, #0x0]
+ blx r0
+ cmp r0, #0x0
+ beq _0209C828
+ ldrb r0, [r4, #0x8]
+ cmp r0, #0x0
+ beq _0209C828
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ sub r0, r0, r6
+ cmp r0, #0x27
+ blt _0209C7F0
+_0209C828:
+ mov r0, #0x0
+ strb r0, [r4, #0x8]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209C838: .word OSi_ThreadInfo
+_0209C83C: .word link_is_on
+
+ arm_func_start CPS_TcpShutdown
+CPS_TcpShutdown:
+ stmdb sp!, {r4,lr}
+ ldr r0, _0209C880 ; =OSi_ThreadInfo
+ ldr r0, [r0, #0x4]
+ ldr r4, [r0, #0xa4]
+ cmp r4, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldrb r0, [r4, #0x9]
+ cmp r0, #0x0
+ beq _0209C870
+ mov r0, r4
+ bl CPSi_SslShutdown
+_0209C870:
+ mov r0, r4
+ bl CPSi_TcpShutdownRaw
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209C880: .word OSi_ThreadInfo
+
+ arm_func_start CPSi_TcpShutdownRaw
+CPSi_TcpShutdownRaw: ; 0x0209C884
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl OS_YieldThread
+ ldrb r1, [r4, #0x8]
+ add r0, r1, #0xfd
+ and r0, r0, #0xff
+ cmp r0, #0x1
+ bhi _0209C8C0
+ mov r0, r4
+ mov r1, #0x19
+ bl tck_send_finack
+ mov r0, #0x7
+ strb r0, [r4, #0x8]
+ ldmia sp!, {r4,lr}
+ bx lr
+_0209C8C0:
+ cmp r1, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ mov r0, r4
+ mov r1, #0x1a
+ bl tck_send_ack
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start CPS_SocWho
+CPS_SocWho: ; 0x0209C8E0
+ ldr r2, _0209C930 ; =OSi_ThreadInfo
+ ldr r2, [r2, #0x4]
+ ldr r3, [r2, #0xa4]
+ cmp r3, #0x0
+ beq _0209C928
+ ldrb r2, [r3, #0x8]
+ cmp r2, #0x4
+ beq _0209C908
+ cmp r2, #0xa
+ bne _0209C928
+_0209C908:
+ cmp r0, #0x0
+ ldrneh r2, [r3, #0x18]
+ strneh r2, [r0, #0x0]
+ cmp r1, #0x0
+ ldrne r0, [r3, #0x14]
+ strne r0, [r1, #0x0]
+ ldr r0, [r3, #0x1c]
+ bx lr
+_0209C928:
+ mov r0, #0x0
+ bx lr
+ .balign 4
+_0209C930: .word OSi_ThreadInfo
+
+ arm_func_start CPS_TcpConnect
+CPS_TcpConnect: ; 0x0209C934
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _0209C98C ; =OSi_ThreadInfo
+ ldr r0, [r0, #0x4]
+ ldr r0, [r0, #0xa4]
+ cmp r0, #0x0
+ beq _0209C97C
+ ldrb r1, [r0, #0x9]
+ cmp r1, #0x0
+ beq _0209C96C
+ bl CPSi_SslConnect
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209C96C:
+ bl CPSi_TcpConnectRaw
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209C97C:
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209C98C: .word OSi_ThreadInfo
+
+ arm_func_start CPSi_TcpConnectRaw
+CPSi_TcpConnectRaw:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r10, r0
+ bl get_seqno
+ mov r8, r0
+ mov r9, #0x0
+ mov r11, r9
+ mov r4, #0x1
+ mov r6, #0x2
+ mov r5, #0x18
+_0209C9B8:
+ str r8, [r10, #0x28]
+ strb r6, [r10, #0x8]
+ bl OS_GetTick
+ mov r2, r0, lsr #0x10
+ orr r2, r2, r1, lsl #0x10
+ str r2, [r10, #0x10]
+ mov r0, r10
+ mov r1, r6
+ mov r2, r5
+ bl tcp_send_handshake
+ bl OS_DisableInterrupts
+ mov r7, r0
+ ldr r0, _0209CA50 ; =CPSMyIp
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _0209CA04
+ mov r0, r11
+ str r4, [r10, #0x4]
+ bl OS_SleepThread
+_0209CA04:
+ mov r0, r7
+ bl OS_RestoreInterrupts
+ ldrb r0, [r10, #0x8]
+ cmp r0, #0x4
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldr r0, _0209CA50 ; =CPSMyIp
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _0209CA40
+ add r9, r9, #0x1
+ cmp r9, #0x3
+ blo _0209C9B8
+_0209CA40:
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209CA50: .word CPSMyIp
+
+ arm_func_start CPS_TcpListen
+CPS_TcpListen: ; 0x0209CA54
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _0209CAA4 ; =OSi_ThreadInfo
+ ldr r0, [r0, #0x4]
+ ldr r0, [r0, #0xa4]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldrb r1, [r0, #0x9]
+ cmp r1, #0x0
+ beq _0209CA94
+ bl CPSi_SslListen
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_0209CA94:
+ bl CPSi_TcpListenRaw
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209CAA4: .word OSi_ThreadInfo
+
+ arm_func_start CPS_SetUdpCallback
+CPS_SetUdpCallback:
+ ldr r1, _0209CAC0 ; =OSi_ThreadInfo
+ ldr r1, [r1, #0x4]
+ ldr r1, [r1, #0xa4]
+ cmp r1, #0x0
+ strne r0, [r1, #0x38]
+ bx lr
+ .balign 4
+_0209CAC0: .word OSi_ThreadInfo
+
+ arm_func_start CPSi_TcpListenRaw
+CPSi_TcpListenRaw: ; 0x0209CAC4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl get_seqno
+ str r0, [r5, #0x28]
+ mov r0, #0x1
+ strb r0, [r5, #0x8]
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r1, #0x1
+ mov r0, #0x0
+ str r1, [r5, #0x4]
+ bl OS_SleepThread
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+
+ arm_func_start CPS_SocDup
+CPS_SocDup: ; 0x0209CB0C
+ ldr r1, _0209CB20 ; =OSi_ThreadInfo
+ ldr r1, [r1, #0x4]
+ ldr r1, [r1, #0xa4]
+ str r1, [r0, #0xa4]
+ bx lr
+ .balign 4
+_0209CB20: .word OSi_ThreadInfo
+
+ arm_func_start CPS_SocRelease
+CPS_SocRelease: ; 0x0209CB24
+ ldr r0, _0209CB40 ; =OSi_ThreadInfo
+ ldr r0, [r0, #0x4]
+ ldr r1, [r0, #0xa4]
+ cmp r1, #0x0
+ movne r0, #0x0
+ strne r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_0209CB40: .word OSi_ThreadInfo
+
+ arm_func_start CPS_SocUse
+CPS_SocUse: ; 0x0209CB44
+ ldr r0, _0209CB74 ; =OSi_ThreadInfo
+ ldr r0, [r0, #0x4]
+ ldr r1, [r0, #0xa4]
+ cmp r1, #0x0
+ bxeq lr
+ str r0, [r1, #0x0]
+ mov r0, #0x0
+ strb r0, [r1, #0x8]
+ str r0, [r1, #0x44]
+ str r0, [r1, #0x60]
+ str r0, [r1, #0x38]
+ bx lr
+ .balign 4
+_0209CB74: .word OSi_ThreadInfo
+
+ arm_func_start CPS_SocPingMode
+CPS_SocPingMode: ; 0x0209CB78
+ stmdb sp!, {r4,lr}
+ ldr r3, _0209CBDC ; =OSi_ThreadInfo
+ ldr r3, [r3, #0x4]
+ ldr r4, [r3, #0xa4]
+ cmp r4, #0x0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ ldr r3, _0209CBE0 ; =0x7F000001
+ cmp r2, r3
+ ldreq r2, _0209CBE4 ; =CPSMyIp
+ ldreq r2, [r2, #0x0]
+ cmp r0, #0x0
+ strh r1, [r4, #0x1a]
+ ldrh r1, [r4, #0x1a]
+ strh r1, [r4, #0x18]
+ str r2, [r4, #0x20]
+ ldr r1, [r4, #0x20]
+ str r1, [r4, #0x1c]
+ strneh r0, [r4, #0xa]
+ ldmneia sp!, {r4,lr}
+ bxne lr
+ bl CPS_SocGetEport
+ strh r0, [r4, #0xa]
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209CBDC: .word OSi_ThreadInfo
+_0209CBE0: .word 0x7F000001
+_0209CBE4: .word CPSMyIp
+
+ arm_func_start CPS_SocDatagramMode
+CPS_SocDatagramMode: ; 0x0209CBE8
+ ldr r0, _0209CC0C ; =OSi_ThreadInfo
+ ldr r0, [r0, #0x4]
+ ldr r1, [r0, #0xa4]
+ cmp r1, #0x0
+ movne r0, #0xa
+ strneb r0, [r1, #0x8]
+ movne r0, #0x0
+ strne r0, [r1, #0x44]
+ bx lr
+ .balign 4
+_0209CC0C: .word OSi_ThreadInfo
+
+ arm_func_start CPS_SocUnRegister
+CPS_SocUnRegister: ; 0x0209CC10
+ ldr r0, _0209CC24 ; =OSi_ThreadInfo
+ mov r1, #0x0
+ ldr r0, [r0, #0x4]
+ str r1, [r0, #0xa4]
+ bx lr
+ .balign 4
+_0209CC24: .word OSi_ThreadInfo
+
+ arm_func_start CPS_SocRegister
+CPS_SocRegister: ; 0x0209CC28
+ ldr r1, _0209CC38 ; =OSi_ThreadInfo
+ ldr r1, [r1, #0x4]
+ str r0, [r1, #0xa4]
+ bx lr
+ .balign 4
+_0209CC38: .word OSi_ThreadInfo
+
+ arm_func_start get_seqno
+get_seqno: ; 0x0209CC3C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _0209CC88 ; =CPSiRand32ctx
+ ldr r3, [r1, #0x8]
+ ldr r2, [r1, #0x0]
+ ldr r0, [r1, #0x4]
+ umull lr, r12, r3, r2
+ mla r12, r3, r0, r12
+ ldr r0, [r1, #0xc]
+ ldr r3, [r1, #0x10]
+ mla r12, r0, r2, r12
+ adds r2, r3, lr
+ ldr r0, [r1, #0x14]
+ str r2, [r1, #0x0]
+ adc r0, r0, r12
+ str r0, [r1, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209CC88: .word CPSiRand32ctx
+
+ arm_func_start CPS_SocGetEport
+CPS_SocGetEport: ; 0x0209CC8C
+ stmdb sp!, {r4-r8,lr}
+ ldr r0, _0209CD30 ; =OSi_ThreadInfo
+ ldr r6, [r0, #0x8]
+ ldr r2, _0209CD34 ; =eport
+ mov r4, #0x400
+ mov r3, #0x1
+ mov r5, #0x0
+ ldr r1, _0209CD38 ; =0x00001388
+_0209CCAC:
+ ldrh r12, [r2, #0x0]
+ mov r0, r5
+ add r12, r12, #0x1
+ strh r12, [r2, #0x0]
+ ldrh r12, [r2, #0x0]
+ cmp r12, #0x400
+ blo _0209CCD0
+ cmp r12, r1
+ blo _0209CCD4
+_0209CCD0:
+ strh r4, [r2, #0x0]
+_0209CCD4:
+ mov r8, r6
+ cmp r6, #0x0
+ beq _0209CD18
+ ldrh r7, [r2, #0x0]
+_0209CCE4:
+ ldr lr, [r8, #0xa4]
+ cmp lr, #0x0
+ beq _0209CD0C
+ ldr r12, [lr, #0x0]
+ cmp r12, #0x0
+ beq _0209CD0C
+ ldrh r12, [lr, #0xa]
+ cmp r12, r7
+ moveq r0, r3
+ beq _0209CD18
+_0209CD0C:
+ ldr r8, [r8, #0x68]
+ cmp r8, #0x0
+ bne _0209CCE4
+_0209CD18:
+ cmp r0, #0x0
+ bne _0209CCAC
+ ldr r0, _0209CD34 ; =eport
+ ldrh r0, [r0, #0x0]
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209CD30: .word OSi_ThreadInfo
+_0209CD34: .word eport
+_0209CD38: .word 0x00001388
+
+ arm_func_start tcpip
+tcpip: ; 0x0209CD3C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r5, _0209CDAC ; =0x00000806
+ add r4, sp, #0x0
+_0209CD4C:
+ mov r0, r4
+ bl receive_packet
+ ldr r3, [sp, #0x0]
+ cmp r3, #0x22
+ bls _0209CDA4
+ ldrh r2, [r0, #0xc]
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ cmp r1, #0x800
+ beq _0209CD88
+ cmp r1, r5
+ beq _0209CD98
+ b _0209CDA4
+_0209CD88:
+ add r0, r0, #0xe
+ sub r1, r3, #0xe
+ bl dispatch_ip
+ b _0209CDA4
+_0209CD98:
+ add r0, r0, #0xe
+ sub r1, r3, #0xe
+ bl dispatch_arp
+_0209CDA4:
+ bl throw_packet
+ b _0209CD4C
+ .balign 4
+_0209CDAC: .word 0x00000806
+
+ arm_func_start dispatch_ip
+dispatch_ip: ; 0x0209CDB0
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r4, r0
+ ldrh r12, [r4, #0xc]
+ ldrh r6, [r4, #0x10]
+ ldrh r2, [r4, #0xe]
+ ldrh r0, [r4, #0x12]
+ mov r5, r6, asr #0x8
+ mov r3, r12, asr #0x8
+ orr r5, r5, r6, lsl #0x8
+ orr r12, r3, r12, lsl #0x8
+ mov r3, r5, lsl #0x10
+ mov r5, r0, asr #0x8
+ mov r12, r12, lsl #0x10
+ mov lr, r2, asr #0x8
+ mov r6, r3, lsr #0x10
+ orr r0, r5, r0, lsl #0x8
+ mov r3, r12, lsr #0x10
+ orr r2, lr, r2, lsl #0x8
+ mov r5, r6, lsl #0x10
+ mov r0, r0, lsl #0x10
+ mov r3, r3, lsl #0x10
+ mov r2, r2, lsl #0x10
+ orr r0, r5, r0, lsr #0x10
+ orr r2, r3, r2, lsr #0x10
+ mov r5, r1
+ cmp r0, r2
+ beq _0209CEF0
+ bl ip_isme
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrh r1, [r4, #0x2]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ cmp r5, r0, lsr #0x10
+ addcc sp, sp, #0x8
+ ldmccia sp!, {r4-r6,lr}
+ bxcc lr
+ ldrb r1, [r4, #0x0]
+ mov r0, r4
+ and r1, r1, #0xf
+ mov r1, r1, lsl #0x2
+ bl calc_checksum
+ ldr r1, _0209CFA0 ; =0x0000FFFF
+ cmp r0, r1
+ addne sp, sp, #0x8
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldrh r2, [r4, #0x10]
+ ldrh r12, [r4, #0x12]
+ ldr r1, _0209CFA4 ; =CPSMyIp
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r2, r12, asr #0x8
+ mov r3, r0, lsr #0x10
+ orr r0, r2, r12, lsl #0x8
+ mov r2, r3, lsl #0x10
+ mov r0, r0, lsl #0x10
+ ldr r1, [r1, #0x0]
+ orr r0, r2, r0, lsr #0x10
+ cmp r1, r0
+ bne _0209CEF0
+ ldrh r2, [r4, #0xc]
+ ldrh r12, [r4, #0xe]
+ sub r0, r4, #0x8
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ mov r1, r1, lsl #0x10
+ mov r2, r12, asr #0x8
+ mov r3, r1, lsr #0x10
+ orr r1, r2, r12, lsl #0x8
+ mov r2, r3, lsl #0x10
+ mov r1, r1, lsl #0x10
+ orr r1, r2, r1, lsr #0x10
+ mov r2, #0x1
+ bl reg_arprequest
+_0209CEF0:
+ add r1, sp, #0x0
+ mov r0, r4
+ bl check_frag
+ movs r4, r0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldrh r2, [r4, #0x2]
+ ldrb r3, [r4, #0x0]
+ ldrb r12, [r4, #0x9]
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ mov r1, r1, lsl #0x10
+ and r3, r3, #0xf
+ mov r2, r1, lsr #0x10
+ cmp r12, #0x11
+ add r1, r4, r3, lsl #0x2
+ sub r2, r2, r3, lsl #0x2
+ bne _0209CF44
+ bl dispatch_udp
+ b _0209CF70
+_0209CF44:
+ ldr r3, _0209CFA4 ; =CPSMyIp
+ ldr r3, [r3, #0x0]
+ cmp r3, #0x0
+ beq _0209CF70
+ cmp r12, #0x1
+ bne _0209CF64
+ bl dispatch_icmp
+ b _0209CF70
+_0209CF64:
+ cmp r12, #0x6
+ bne _0209CF70
+ bl dispatch_tcp
+_0209CF70:
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r6,lr}
+ bxeq lr
+ ldr r1, _0209CFA8 ; =CPSiFree
+ sub r0, r4, #0xe
+ ldr r1, [r1, #0x0]
+ blx r1
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209CFA0: .word 0x0000FFFF
+_0209CFA4: .word CPSMyIp
+_0209CFA8: .word CPSiFree
+
+ arm_func_start check_frag
+check_frag: ; 0x0209CFAC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r6, #0x0
+ mov r10, r0
+ str r6, [r1, #0x0]
+ ldrh r3, [r10, #0x6]
+ str r1, [sp, #0x0]
+ ldr r2, _0209D2A4 ; =0x00003FFF
+ mov r1, r3, asr #0x8
+ orr r1, r1, r3, lsl #0x8
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ str r1, [sp, #0x4]
+ ands r1, r1, r2
+ addeq sp, sp, #0x14
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldrh r1, [r10, #0xc]
+ ldrh r3, [r10, #0xe]
+ ldrb r4, [r10, #0x0]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r1, r3, asr #0x8
+ mov r2, r0, lsr #0x10
+ orr r0, r1, r3, lsl #0x8
+ and r3, r4, #0xf
+ ldrh r9, [r10, #0x4]
+ mov r2, r2, lsl #0x10
+ mov r1, r0, lsl #0x10
+ ldr r5, _0209D2A8 ; =fragtable
+ mov r0, r6
+ mov r7, r3, lsl #0x2
+ orr r4, r2, r1, lsr #0x10
+_0209D034:
+ ldrh r2, [r5, #0x4]
+ cmp r2, #0x0
+ beq _0209D058
+ ldr r1, [r5, #0x0]
+ cmp r1, r4
+ bne _0209D058
+ ldrh r1, [r5, #0x6]
+ cmp r1, r9
+ beq _0209D078
+_0209D058:
+ cmp r2, #0x0
+ bne _0209D068
+ cmp r6, #0x0
+ moveq r6, r5
+_0209D068:
+ add r0, r0, #0x1
+ cmp r0, #0x8
+ add r5, r5, #0x38
+ blo _0209D034
+_0209D078:
+ ldrh r2, [r10, #0x2]
+ cmp r0, #0x8
+ ldr r1, _0209D2AC ; =0x00001FFF
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r2, r0, lsr #0x10
+ ldr r0, [sp, #0x4]
+ and r8, r0, r1
+ sub r0, r2, r7
+ str r0, [sp, #0x8]
+ mov r0, r8, lsl #0x3
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x8]
+ add r11, r0, r8, lsl #0x3
+ bne _0209D150
+ cmp r6, #0x0
+ beq _0209D0C8
+ cmp r11, #0x1000
+ bls _0209D0D8
+_0209D0C8:
+ add sp, sp, #0x14
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_0209D0D8:
+ ldr r1, _0209D2B0 ; =CPSiAlloc
+ ldr r0, _0209D2B4 ; =0x0000100E
+ ldr r1, [r1, #0x0]
+ add r0, r7, r0
+ mov r5, r6
+ blx r1
+ str r0, [r6, #0x34]
+ ldr r0, [r6, #0x34]
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ str r4, [r6, #0x0]
+ strh r9, [r6, #0x6]
+ mov r0, #0x0
+ strh r0, [r6, #0x8]
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ str r0, [r6, #0x2c]
+ ldr r1, [r6, #0x34]
+ mov r0, r10
+ add r1, r1, #0xe
+ add r1, r1, r7
+ str r1, [r6, #0x30]
+ ldr r1, [r6, #0x34]
+ mov r2, r7
+ add r1, r1, #0xe
+ bl MI_CpuCopy8
+_0209D150:
+ ldrh r0, [r5, #0x4]
+ cmp r0, #0x8
+ beq _0209D164
+ cmp r11, #0x1000
+ bls _0209D18C
+_0209D164:
+ mov r0, #0x0
+ strh r0, [r5, #0x4]
+ ldr r1, _0209D2B8 ; =CPSiFree
+ ldr r0, [r5, #0x34]
+ ldr r1, [r1, #0x0]
+ blx r1
+ add sp, sp, #0x14
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+_0209D18C:
+ ldr r0, [sp, #0x8]
+ ldr r2, [sp, #0x8]
+ add r0, r0, #0x7
+ add r1, r8, r0, lsr #0x3
+ ldr r0, [sp, #0x4]
+ ands r0, r0, #0x2000
+ streqh r11, [r5, #0xa]
+ streqh r1, [r5, #0x8]
+ ldrh r3, [r5, #0x4]
+ add r0, r10, r7
+ add r3, r5, r3, lsl #0x1
+ strh r8, [r3, #0xc]
+ ldrh r3, [r5, #0x4]
+ add r3, r5, r3, lsl #0x1
+ strh r1, [r3, #0x1c]
+ ldrh r1, [r5, #0x4]
+ add r1, r1, #0x1
+ strh r1, [r5, #0x4]
+ ldr r3, [r5, #0x30]
+ ldr r1, [sp, #0xc]
+ add r1, r3, r1
+ bl MI_CpuCopy8
+ ldrh r6, [r5, #0x8]
+ cmp r6, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ ldrh r7, [r5, #0x4]
+ mov r3, #0x0
+ mov r4, r3
+ cmp r7, #0x0
+ bls _0209D244
+ mov r0, r3
+_0209D214:
+ add r2, r5, r4, lsl #0x1
+ ldrh r1, [r2, #0xc]
+ cmp r1, r3
+ bhi _0209D238
+ ldrh r1, [r2, #0x1c]
+ cmp r3, r1
+ movcc r3, r1
+ movcc r4, r0
+ blo _0209D23C
+_0209D238:
+ add r4, r4, #0x1
+_0209D23C:
+ cmp r4, r7
+ blo _0209D214
+_0209D244:
+ cmp r3, r6
+ addcc sp, sp, #0x14
+ movcc r0, #0x0
+ ldmccia sp!, {r4-r11,lr}
+ bxcc lr
+ ldr r0, [r5, #0x34]
+ ldrh r3, [r5, #0xa]
+ ldrb r1, [r0, #0xe]
+ add r0, r0, #0xe
+ mov r2, #0x0
+ and r1, r1, #0xf
+ add r1, r3, r1, lsl #0x2
+ mov r1, r1, lsl #0x10
+ mov r3, r1, lsr #0x10
+ mov r1, r3, asr #0x8
+ orr r1, r1, r3, lsl #0x8
+ strh r1, [r0, #0x2]
+ strh r2, [r5, #0x4]
+ ldr r1, [sp, #0x0]
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209D2A4: .word 0x00003FFF
+_0209D2A8: .word fragtable
+_0209D2AC: .word 0x00001FFF
+_0209D2B0: .word CPSiAlloc
+_0209D2B4: .word 0x0000100E
+_0209D2B8: .word CPSiFree
+
+ arm_func_start dispatch_udp
+dispatch_udp: ; 0x0209D2BC
+ stmdb sp!, {r4-r8,lr}
+ mov r6, r1
+ ldrh r1, [r6, #0x6]
+ mov r7, r0
+ mov r5, r2
+ cmp r1, #0x0
+ beq _0209D2F8
+ mov r0, r6
+ mov r1, r5
+ mov r2, r7
+ mov r3, #0x11
+ bl check_tcpudpsum
+ cmp r0, #0x0
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+_0209D2F8:
+ bl OS_DisableInterrupts
+ ldr r1, _0209D4D4 ; =OSi_ThreadInfo
+ mov r8, r0
+ ldr r2, [r1, #0x8]
+ cmp r2, #0x0
+ beq _0209D4C4
+ mvn r12, #0x0
+_0209D314:
+ ldr r4, [r2, #0xa4]
+ cmp r4, #0x0
+ beq _0209D4B8
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ beq _0209D4B8
+ ldrb r0, [r4, #0x8]
+ cmp r0, #0xa
+ bne _0209D4B8
+ ldrh r3, [r6, #0x2]
+ ldrh r1, [r4, #0xa]
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ mov r0, r0, lsl #0x10
+ cmp r1, r0, lsr #0x10
+ bne _0209D4B8
+ ldrh r3, [r4, #0x18]
+ cmp r3, #0x0
+ beq _0209D378
+ ldrh r1, [r6, #0x0]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ cmp r3, r0, lsr #0x10
+ bne _0209D4B8
+_0209D378:
+ ldr r1, [r4, #0x1c]
+ cmp r1, #0x0
+ beq _0209D3C0
+ cmp r1, r12
+ beq _0209D3C0
+ ldrh lr, [r7, #0xc]
+ ldrh r0, [r7, #0xe]
+ mov r3, lr, asr #0x8
+ orr r3, r3, lr, lsl #0x8
+ mov r3, r3, lsl #0x10
+ mov lr, r0, asr #0x8
+ mov r3, r3, lsr #0x10
+ orr r0, lr, r0, lsl #0x8
+ mov r3, r3, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r0, r3, r0, lsr #0x10
+ cmp r1, r0
+ bne _0209D4B8
+_0209D3C0:
+ ldrh r1, [r7, #0x10]
+ ldrh r3, [r7, #0x12]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r1, r3, asr #0x8
+ mov r2, r0, lsr #0x10
+ orr r0, r1, r3, lsl #0x8
+ mov r1, r2, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r0, r1, r0, lsr #0x10
+ str r0, [r4, #0x14]
+ ldr r0, [r4, #0x1c]
+ cmp r0, #0x0
+ bne _0209D43C
+ ldrh r1, [r7, #0xc]
+ ldrh r3, [r7, #0xe]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r1, r3, asr #0x8
+ mov r2, r0, lsr #0x10
+ orr r0, r1, r3, lsl #0x8
+ mov r1, r2, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r0, r1, r0, lsr #0x10
+ str r0, [r4, #0x1c]
+ ldrh r1, [r6, #0x0]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ strh r0, [r4, #0x18]
+_0209D43C:
+ ldr r0, [r4, #0x44]
+ cmp r0, #0x0
+ bne _0209D4C4
+ ldr r1, [r4, #0x3c]
+ sub r0, r5, #0x8
+ cmp r0, r1
+ strhi r1, [r4, #0x44]
+ strls r0, [r4, #0x44]
+ ldr r1, [r4, #0x40]
+ ldr r2, [r4, #0x44]
+ add r0, r6, #0x8
+ bl MI_CpuCopy8
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x3
+ bne _0209D48C
+ mov r0, #0x0
+ str r0, [r4, #0x4]
+ ldr r0, [r4, #0x0]
+ bl OS_WakeupThreadDirect
+ b _0209D4C4
+_0209D48C:
+ ldr r3, [r4, #0x38]
+ cmp r3, #0x0
+ beq _0209D4C4
+ ldr r0, [r4, #0x40]
+ ldr r1, [r4, #0x44]
+ mov r2, r4
+ blx r3
+ cmp r0, #0x0
+ movne r0, #0x0
+ strne r0, [r4, #0x44]
+ b _0209D4C4
+_0209D4B8:
+ ldr r2, [r2, #0x68]
+ cmp r2, #0x0
+ bne _0209D314
+_0209D4C4:
+ mov r0, r8
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209D4D4: .word OSi_ThreadInfo
+
+ arm_func_start dispatch_tcp
+dispatch_tcp:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ mov r0, r5
+ mov r1, r4
+ mov r2, r6
+ mov r3, #0x6
+ bl check_tcpudpsum
+ cmp r0, #0x0
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ ldrb r0, [r5, #0xc]
+ ldrb r2, [r5, #0xd]
+ and r1, r0, #0xf0
+ mov r0, r1, asr #0x1
+ add r0, r1, r0, lsr #0x1e
+ and r1, r2, #0x17
+ cmp r1, #0x10
+ sub r4, r4, r0, asr #0x2
+ bgt _0209D558
+ cmp r1, #0x10
+ bge _0209D5C4
+ cmp r1, #0x2
+ bgt _0209D5F4
+ cmp r1, #0x1
+ blt _0209D5F4
+ cmp r1, #0x1
+ beq _0209D5DC
+ cmp r1, #0x2
+ beq _0209D57C
+ b _0209D5F4
+_0209D558:
+ cmp r1, #0x12
+ bgt _0209D5F4
+ cmp r1, #0x11
+ blt _0209D5F4
+ cmp r1, #0x11
+ beq _0209D5C4
+ cmp r1, #0x12
+ beq _0209D5A0
+ b _0209D5F4
+_0209D57C:
+ ands r0, r2, #0x28
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl dt_syn
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209D5A0:
+ ands r0, r2, #0x28
+ ldmneia sp!, {r4-r6,lr}
+ bxne lr
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl dt_synack
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209D5C4:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl dt_ack
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209D5DC:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl dt_fin
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209D5F4:
+ ands r0, r2, #0x4
+ beq _0209D610
+ mov r0, r6
+ mov r1, r5
+ bl dt_rst
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209D610:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ mov r3, #0x0
+ bl tcp_send_rst
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start dt_rst
+dt_rst: ; 0x0209D62C
+ stmdb sp!, {r4,lr}
+ bl find_socket
+ movs r4, r0
+ ldmeqia sp!, {r4,lr}
+ bxeq lr
+ bl OS_YieldThread
+ mov r1, #0x0
+ strb r1, [r4, #0x8]
+ ldr r0, [r4, #0x4]
+ sub r0, r0, #0x1
+ cmp r0, #0x1
+ ldmhiia sp!, {r4,lr}
+ bxhi lr
+ str r1, [r4, #0x4]
+ ldr r0, [r4, #0x0]
+ bl OS_WakeupThreadDirect
+ ldmia sp!, {r4,lr}
+ bx lr
+
+ arm_func_start dt_fin
+dt_fin: ; 0x0209D674
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl find_socket
+ movs r4, r0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldrb r1, [r4, #0x8]
+ cmp r1, #0x4
+ beq _0209D72C
+ cmp r1, #0x7
+ beq _0209D6BC
+ cmp r1, #0x8
+ beq _0209D6E4
+ b _0209D754
+_0209D6BC:
+ ldr r2, [r4, #0x24]
+ mov r1, #0x0
+ add r2, r2, #0x1
+ str r2, [r4, #0x24]
+ bl tck_send_ack
+ mov r0, #0x9
+ add sp, sp, #0x4
+ strb r0, [r4, #0x8]
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209D6E4:
+ ldr r2, [r4, #0x24]
+ mov r1, #0x0
+ add r2, r2, #0x1
+ str r2, [r4, #0x24]
+ bl tck_send_ack
+ mov r1, #0x0
+ strb r1, [r4, #0x8]
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x2
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ str r1, [r4, #0x4]
+ ldr r0, [r4, #0x0]
+ bl OS_WakeupThreadDirect
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209D72C:
+ ldr r2, [r4, #0x24]
+ mov r1, #0x0
+ add r2, r2, #0x1
+ str r2, [r4, #0x24]
+ bl tck_send_finack
+ mov r0, #0x6
+ add sp, sp, #0x4
+ strb r0, [r4, #0x8]
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209D754:
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ mov r3, #0x0
+ bl tcp_send_rst
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start dt_ack
+dt_ack: ; 0x0209D774
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ bl find_socket
+ movs r5, r0
+ bne _0209D7B4
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ mov r3, #0x0
+ bl tcp_send_rst
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_0209D7B4:
+ ldrh r3, [r7, #0x8]
+ ldrh r1, [r7, #0xa]
+ ldrb r4, [r7, #0xd]
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r2, r2, lsl #0x10
+ mov r3, r1, asr #0x8
+ mov r2, r2, lsr #0x10
+ orr r1, r3, r1, lsl #0x8
+ mov r2, r2, lsl #0x10
+ mov r1, r1, lsl #0x10
+ orr r1, r2, r1, lsr #0x10
+ str r1, [r5, #0x30]
+ ldrh r9, [r7, #0x4]
+ ldrh r1, [r7, #0x6]
+ ldrb r3, [r5, #0x8]
+ mov r2, r9, asr #0x8
+ orr r2, r2, r9, lsl #0x8
+ mov r2, r2, lsl #0x10
+ mov r9, r1, asr #0x8
+ mov r2, r2, lsr #0x10
+ orr r1, r9, r1, lsl #0x8
+ mov r2, r2, lsl #0x10
+ mov r1, r1, lsl #0x10
+ cmp r3, #0x4
+ orr r2, r2, r1, lsr #0x10
+ bne _0209D840
+ ldr r1, [r5, #0x24]
+ cmp r1, r2
+ beq _0209D840
+ mov r1, #0x0
+ bl tck_send_ack
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+_0209D840:
+ ldrh r1, [r7, #0xe]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ strh r0, [r5, #0x2c]
+ ldrb r0, [r5, #0x8]
+ cmp r0, #0x9
+ addls pc, pc, r0, lsl #0x2
+ b _0209DA70
+_0209D860: ; jump table
+ b _0209D888 ; case 0
+ b _0209DA70 ; case 1
+ b _0209D888 ; case 2
+ b _0209D8A0 ; case 3
+ b _0209D8CC ; case 4
+ b _0209DA70 ; case 5
+ b _0209DA4C ; case 6
+ b _0209D9D8 ; case 7
+ b _0209D9D8 ; case 8
+ b _0209DA4C ; case 9
+_0209D888:
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ mov r3, #0x0
+ bl tcp_send_rst
+ b _0209DA8C
+_0209D8A0:
+ mov r0, #0x4
+ strb r0, [r5, #0x8]
+ ldr r0, [r5, #0x4]
+ cmp r0, #0x1
+ bne _0209D8C4
+ mov r0, #0x0
+ str r0, [r5, #0x4]
+ ldr r0, [r5, #0x0]
+ bl OS_WakeupThreadDirect
+_0209D8C4:
+ cmp r6, #0x0
+ beq _0209DA8C
+_0209D8CC:
+ ldr r0, [r5, #0x34]
+ add r0, r0, #0x1
+ str r0, [r5, #0x34]
+ ldr r1, [r5, #0x3c]
+ ldr r0, [r5, #0x44]
+ sub r0, r1, r0
+ cmp r6, r0
+ movhi r9, #0x0
+ movhi r6, r0
+ movls r9, #0x1
+ cmp r6, #0x0
+ beq _0209D968
+ bl OS_DisableInterrupts
+ ldrb r1, [r7, #0xc]
+ ldr r12, [r5, #0x40]
+ ldr r3, [r5, #0x44]
+ and r2, r1, #0xf0
+ mov r1, r2, asr #0x1
+ add r1, r2, r1, lsr #0x1e
+ mov r8, r0
+ mov r2, r6
+ add r0, r7, r1, asr #0x2
+ add r1, r12, r3
+ bl MI_CpuCopy8
+ ldr r1, [r5, #0x44]
+ mov r0, r8
+ add r1, r1, r6
+ str r1, [r5, #0x44]
+ ldr r1, [r5, #0x24]
+ add r1, r1, r6
+ str r1, [r5, #0x24]
+ bl OS_RestoreInterrupts
+ ldr r0, [r5, #0x4]
+ cmp r0, #0x2
+ bne _0209D968
+ mov r0, #0x0
+ str r0, [r5, #0x4]
+ ldr r0, [r5, #0x0]
+ bl OS_WakeupThreadDirect
+_0209D968:
+ cmp r9, #0x0
+ beq _0209D9C0
+ ands r0, r4, #0x1
+ beq _0209D9C0
+ mov r0, #0x6
+ strb r0, [r5, #0x8]
+ ldr r1, [r5, #0x24]
+ mov r0, r5
+ add r2, r1, #0x1
+ mov r1, #0x0
+ str r2, [r5, #0x24]
+ bl tck_send_finack
+ cmp r6, #0x0
+ bne _0209DA8C
+ ldr r0, [r5, #0x4]
+ cmp r0, #0x2
+ bne _0209DA8C
+ mov r0, #0x0
+ str r0, [r5, #0x4]
+ ldr r0, [r5, #0x0]
+ bl OS_WakeupThreadDirect
+ b _0209DA8C
+_0209D9C0:
+ cmp r6, #0x0
+ beq _0209DA8C
+ mov r0, r5
+ mov r1, #0x0
+ bl tck_send_ack
+ b _0209DA8C
+_0209D9D8:
+ ands r0, r4, #0x1
+ beq _0209DA20
+ ldr r1, [r5, #0x24]
+ add r0, r6, #0x1
+ add r2, r1, r0
+ mov r0, r5
+ mov r1, #0x0
+ str r2, [r5, #0x24]
+ bl tck_send_ack
+ mov r1, #0x0
+ strb r1, [r5, #0x8]
+ ldr r0, [r5, #0x4]
+ cmp r0, #0x2
+ bne _0209DA8C
+ str r1, [r5, #0x4]
+ ldr r0, [r5, #0x0]
+ bl OS_WakeupThreadDirect
+ b _0209DA8C
+_0209DA20:
+ cmp r6, #0x0
+ beq _0209DA40
+ ldr r1, [r5, #0x24]
+ mov r0, r5
+ add r2, r1, r6
+ mov r1, #0x0
+ str r2, [r5, #0x24]
+ bl tck_send_ack
+_0209DA40:
+ mov r0, #0x8
+ strb r0, [r5, #0x8]
+ b _0209DA8C
+_0209DA4C:
+ mov r1, #0x0
+ strb r1, [r5, #0x8]
+ ldr r0, [r5, #0x4]
+ cmp r0, #0x2
+ bne _0209DA8C
+ str r1, [r5, #0x4]
+ ldr r0, [r5, #0x0]
+ bl OS_WakeupThreadDirect
+ b _0209DA8C
+_0209DA70:
+ ands r0, r4, #0x1
+ ldrne r0, [r5, #0x24]
+ mov r1, #0x0
+ addne r0, r0, #0x1
+ strne r0, [r5, #0x24]
+ mov r0, r5
+ bl tck_send_ack
+_0209DA8C:
+ bl OS_YieldThread
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+
+ arm_func_start dt_synack
+dt_synack: ; 0x0209DA9C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r5, r1
+ mov r6, r2
+ bl find_socket
+ movs r4, r0
+ beq _0209DAC8
+ ldrb r0, [r4, #0x8]
+ cmp r0, #0x2
+ beq _0209DAE8
+_0209DAC8:
+ mov r0, r7
+ mov r1, r5
+ mov r2, r6
+ mov r3, #0x0
+ bl tcp_send_rst
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209DAE8:
+ bl OS_YieldThread
+ ldrh r2, [r5, #0x4]
+ ldrh r12, [r5, #0x6]
+ mov r0, r5
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ mov r1, r1, lsl #0x10
+ mov r2, r12, asr #0x8
+ mov r3, r1, lsr #0x10
+ orr r1, r2, r12, lsl #0x8
+ mov r2, r3, lsl #0x10
+ mov r1, r1, lsl #0x10
+ orr r1, r2, r1, lsr #0x10
+ add r1, r1, #0x1
+ str r1, [r4, #0x24]
+ ldrh r3, [r5, #0x8]
+ ldrh lr, [r5, #0xa]
+ mov r1, r4
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r2, r2, lsl #0x10
+ mov r3, lr, asr #0x8
+ mov r12, r2, lsr #0x10
+ orr r2, r3, lr, lsl #0x8
+ mov r3, r12, lsl #0x10
+ mov r2, r2, lsl #0x10
+ orr r2, r3, r2, lsr #0x10
+ str r2, [r4, #0x30]
+ ldrh r3, [r5, #0xe]
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ strh r2, [r4, #0x2c]
+ bl parse_mss
+ mov r0, r4
+ mov r1, #0x0
+ bl tck_send_ack
+ mov r0, #0x4
+ strb r0, [r4, #0x8]
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x1
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ mov r0, #0x0
+ str r0, [r4, #0x4]
+ ldr r0, [r4, #0x0]
+ bl OS_WakeupThreadDirect
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start dt_syn
+dt_syn: ; 0x0209DBB0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ ldrh r12, [r4, #0x10]
+ ldrh r7, [r4, #0xc]
+ ldrh r3, [r4, #0x12]
+ mov r5, r12, asr #0x8
+ mov r6, r7, asr #0x8
+ orr r5, r5, r12, lsl #0x8
+ orr r6, r6, r7, lsl #0x8
+ mov r12, r6, lsl #0x10
+ ldrh r0, [r4, #0xe]
+ mov lr, r5, lsl #0x10
+ mov r5, r3, asr #0x8
+ mov r6, r0, asr #0x8
+ mov r7, r12, lsr #0x10
+ orr r0, r6, r0, lsl #0x8
+ orr r3, r5, r3, lsl #0x8
+ mov r12, lr, lsr #0x10
+ mov r6, r7, lsl #0x10
+ mov r0, r0, lsl #0x10
+ mov r5, r12, lsl #0x10
+ mov r3, r3, lsl #0x10
+ mov r7, r1
+ orr r1, r5, r3, lsr #0x10
+ orr r0, r6, r0, lsr #0x10
+ mov r5, r2
+ bl valid_IP
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r4
+ mov r1, r7
+ mov r2, r5
+ bl find_specific_socket
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ mov r0, r4
+ mov r1, r7
+ bl check_listener
+ movs r2, r0
+ beq _0209DC7C
+ mov r0, r4
+ mov r1, r7
+ bl dt_syn_LISTEN
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209DC7C:
+ bl OS_YieldThread
+ mov r0, r4
+ mov r1, r7
+ bl check_listener
+ movs r2, r0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r4
+ mov r1, r7
+ bl dt_syn_LISTEN
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start find_specific_socket
+find_specific_socket:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl find_socket
+ movs r2, r0
+ beq _0209DD38
+ ldrb r0, [r2, #0x8]
+ cmp r0, #0x1
+ bne _0209DCEC
+ mov r0, r6
+ mov r1, r5
+ bl dt_syn_LISTEN
+ b _0209DD2C
+_0209DCEC:
+ add r0, r0, #0xfd
+ and r0, r0, #0xff
+ cmp r0, #0x1
+ bhi _0209DD18
+ ldr r1, [r2, #0x28]
+ mov r0, r6
+ sub r3, r1, #0x1
+ mov r1, r5
+ str r3, [r2, #0x28]
+ bl dt_syn_LISTEN
+ b _0209DD2C
+_0209DD18:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ mov r3, #0x0
+ bl tcp_send_rst
+_0209DD2C:
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209DD38:
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start dt_syn_LISTEN
+dt_syn_LISTEN: ; 0x0209DD44
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r2
+ mov r2, #0x3
+ mov r6, r0
+ mov r5, r1
+ strb r2, [r4, #0x8]
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ str r0, [r4, #0x10]
+ ldrh r2, [r6, #0x10]
+ ldrh r3, [r6, #0x12]
+ mov r0, r5
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ mov r1, r1, lsl #0x10
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r1, r1, lsr #0x10
+ mov r3, r1, lsl #0x10
+ mov r1, r2, lsl #0x10
+ orr r1, r3, r1, lsr #0x10
+ str r1, [r4, #0x14]
+ ldrh r3, [r5, #0x0]
+ mov r1, r4
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ strh r2, [r4, #0x18]
+ ldrh r3, [r6, #0xc]
+ ldrh r6, [r6, #0xe]
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r2, r2, lsl #0x10
+ mov r3, r6, asr #0x8
+ orr r3, r3, r6, lsl #0x8
+ mov r2, r2, lsr #0x10
+ mov r6, r2, lsl #0x10
+ mov r2, r3, lsl #0x10
+ orr r2, r6, r2, lsr #0x10
+ str r2, [r4, #0x1c]
+ ldrh r3, [r5, #0x4]
+ ldrh r6, [r5, #0x6]
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r2, r2, lsl #0x10
+ mov r3, r6, asr #0x8
+ mov r5, r2, lsr #0x10
+ orr r2, r3, r6, lsl #0x8
+ mov r3, r5, lsl #0x10
+ mov r2, r2, lsl #0x10
+ orr r2, r3, r2, lsr #0x10
+ add r2, r2, #0x1
+ str r2, [r4, #0x24]
+ bl parse_mss
+ mov r0, r4
+ mov r1, #0x12
+ mov r2, #0x0
+ bl tcp_send_handshake
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start tcp_send_rst
+tcp_send_rst: ; 0x0209DE34
+ stmdb sp!, {r4-r8,lr}
+ ldr r4, _0209DF6C ; =tmpsoc
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r0, r4
+ mov r1, #0x0
+ mov r2, #0x64
+ mov r5, r3
+ bl MI_CpuFill8
+ ldrh r2, [r7, #0x2]
+ mov r1, r4
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ strh r0, [r1, #0xa]
+ ldrh r2, [r7, #0x0]
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ strh r0, [r1, #0x18]
+ ldrh r2, [r8, #0xc]
+ ldrh r8, [r8, #0xe]
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r2, r8, asr #0x8
+ mov r3, r0, lsr #0x10
+ orr r0, r2, r8, lsl #0x8
+ mov r2, r3, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r0, r2, r0, lsr #0x10
+ str r0, [r1, #0x1c]
+ ldrb r0, [r7, #0xd]
+ ands r0, r0, #0x10
+ beq _0209DF04
+ ldrh r2, [r7, #0x8]
+ ldrh r6, [r7, #0xa]
+ mov r0, r4
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ mov r1, r1, lsl #0x10
+ mov r2, r6, asr #0x8
+ mov r3, r1, lsr #0x10
+ orr r1, r2, r6, lsl #0x8
+ mov r2, r3, lsl #0x10
+ mov r1, r1, lsl #0x10
+ orr r3, r2, r1, lsr #0x10
+ mov r2, r5
+ mov r1, #0x4
+ str r3, [r4, #0x28]
+ bl tcp_send_handshake
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_0209DF04:
+ mov r0, #0x0
+ str r0, [r4, #0x28]
+ ldrh r1, [r7, #0x4]
+ ldrh r3, [r7, #0x6]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r1, r3, asr #0x8
+ mov r2, r0, lsr #0x10
+ orr r0, r1, r3, lsl #0x8
+ mov r1, r2, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r0, r1, r0, lsr #0x10
+ add r0, r6, r0
+ str r0, [r4, #0x24]
+ ldrb r0, [r7, #0xd]
+ mov r2, r5
+ mov r1, #0x14
+ ands r0, r0, #0x3
+ ldrne r0, [r4, #0x24]
+ addne r0, r0, #0x1
+ strne r0, [r4, #0x24]
+ mov r0, r4
+ bl tcp_send_handshake
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209DF6C: .word tmpsoc
+
+ arm_func_start tck_send_finack
+tck_send_finack:
+ ldr ip, _0209DF80 ; =tcp_send_handshake
+ mov r2, r1
+ mov r1, #0x11
+ bx r12
+ .balign 4
+_0209DF80: .word tcp_send_handshake
+
+ arm_func_start tck_send_ack
+tck_send_ack: ; 0x0209DF84
+ ldr ip, _0209DF94 ; =tcp_send_handshake
+ mov r2, r1
+ mov r1, #0x10
+ bx r12
+ .balign 4
+_0209DF94: .word tcp_send_handshake
+
+ arm_func_start tcp_send_handshake
+tcp_send_handshake: ; 0x0209DF98
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r6, r0
+ ldr r0, [r6, #0x1c]
+ mov r5, r1
+ mov r4, r2
+ bl no_need_inq
+ cmp r0, #0x0
+ bne _0209DFD0
+ ldr r0, _0209E00C ; =OSi_ThreadInfo
+ ldr r1, _0209E010 ; =tcpip_thread
+ ldr r0, [r0, #0x4]
+ cmp r0, r1
+ beq _0209DFF4
+_0209DFD0:
+ mov r0, #0x0
+ mov r1, r0
+ mov r2, r6
+ mov r3, r5
+ str r4, [sp, #0x0]
+ bl send_tcp
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209DFF4:
+ ldr r0, [r6, #0x1c]
+ bl get_targetip
+ bl send_arprequest
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209E00C: .word OSi_ThreadInfo
+_0209E010: .word tcpip_thread
+
+ arm_func_start no_need_inq
+no_need_inq:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl get_targetip
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x1
+ ldmeqia sp!, {lr}
+ bxeq lr
+ bl inq_arpcache
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start parse_mss
+parse_mss: ; 0x0209E044
+ mov r2, #0x218
+ strh r2, [r1, #0x2e]
+ ldrb r2, [r0, #0xc]
+ add r3, r0, #0x14
+ and r2, r2, #0xf0
+ mov r0, r2, asr #0x1
+ add r0, r2, r0, lsr #0x1e
+ mov r0, r0, asr #0x2
+ subs r0, r0, #0x14
+ sub r12, r0, #0x1
+ bxeq lr
+_0209E070:
+ ldrb r0, [r3], #0x1
+ cmp r0, #0x0
+ bxeq lr
+ cmp r0, #0x1
+ beq _0209E0B8
+ cmp r0, #0x2
+ bne _0209E0A8
+ ldrb r2, [r3, #0x1]
+ ldrb r0, [r3, #0x2]
+ add r3, r3, #0x3
+ sub r12, r12, #0x3
+ orr r0, r0, r2, lsl #0x8
+ strh r0, [r1, #0x2e]
+ b _0209E0B8
+_0209E0A8:
+ ldrb r0, [r3, #0x0]
+ sub r0, r0, #0x1
+ sub r12, r12, r0
+ add r3, r3, r0
+_0209E0B8:
+ cmp r12, #0x0
+ sub r12, r12, #0x1
+ bne _0209E070
+ bx lr
+
+ arm_func_start find_socket
+find_socket: ; 0x0209E0C8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r2, _0209E140 ; =OSi_ThreadInfo
+ mov r7, r0
+ ldr r4, [r2, #0x8]
+ mov r6, r1
+ cmp r4, #0x0
+ beq _0209E130
+_0209E0E8:
+ ldr r5, [r4, #0xa4]
+ cmp r5, #0x0
+ beq _0209E124
+ ldr r0, [r5, #0x0]
+ cmp r0, #0x0
+ beq _0209E124
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ bl check_socket
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ movne r0, r5
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+_0209E124:
+ ldr r4, [r4, #0x68]
+ cmp r4, #0x0
+ bne _0209E0E8
+_0209E130:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209E140: .word OSi_ThreadInfo
+
+ arm_func_start check_socket
+check_socket:
+ stmdb sp!, {r4-r6,lr}
+ ldrb r4, [r2, #0x8]
+ mov r12, #0x0
+ mov r3, r12
+ mov r6, r12
+ mov r5, r12
+ cmp r4, #0xa
+ beq _0209E16C
+ cmp r4, #0xb
+ movne r5, #0x1
+_0209E16C:
+ cmp r5, #0x0
+ beq _0209E190
+ ldrh lr, [r1, #0x2]
+ ldrh r5, [r2, #0xa]
+ mov r4, lr, asr #0x8
+ orr r4, r4, lr, lsl #0x8
+ mov lr, r4, lsl #0x10
+ cmp r5, lr, lsr #0x10
+ moveq r6, #0x1
+_0209E190:
+ cmp r6, #0x0
+ beq _0209E1B4
+ ldrh r4, [r1, #0x0]
+ ldrh lr, [r2, #0x18]
+ mov r1, r4, asr #0x8
+ orr r1, r1, r4, lsl #0x8
+ mov r1, r1, lsl #0x10
+ cmp lr, r1, lsr #0x10
+ moveq r3, #0x1
+_0209E1B4:
+ cmp r3, #0x0
+ beq _0209E1F4
+ ldrh r1, [r0, #0xc]
+ ldrh lr, [r0, #0xe]
+ ldr r3, [r2, #0x1c]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r1, lr, asr #0x8
+ mov r2, r0, lsr #0x10
+ orr r0, r1, lr, lsl #0x8
+ mov r1, r2, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r0, r1, r0, lsr #0x10
+ cmp r3, r0
+ moveq r12, #0x1
+_0209E1F4:
+ mov r0, r12
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+
+ arm_func_start check_listener
+check_listener: ; 0x0209E200
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, _0209E2DC ; =OSi_ThreadInfo
+ ldr r3, [r2, #0x8]
+ cmp r3, #0x0
+ beq _0209E2D0
+_0209E214:
+ ldr r12, [r3, #0xa4]
+ cmp r12, #0x0
+ beq _0209E2C4
+ ldr r2, [r12, #0x0]
+ cmp r2, #0x0
+ beq _0209E2C4
+ ldrb r2, [r12, #0x8]
+ cmp r2, #0x1
+ bne _0209E2C4
+ ldrh r5, [r1, #0x2]
+ ldrh r4, [r12, #0xa]
+ mov r2, r5, asr #0x8
+ orr r2, r2, r5, lsl #0x8
+ mov r2, r2, lsl #0x10
+ cmp r4, r2, lsr #0x10
+ bne _0209E2C4
+ ldrh r5, [r12, #0x18]
+ cmp r5, #0x0
+ beq _0209E278
+ ldrh r4, [r1, #0x0]
+ mov r2, r4, asr #0x8
+ orr r2, r2, r4, lsl #0x8
+ mov r2, r2, lsl #0x10
+ cmp r5, r2, lsr #0x10
+ bne _0209E2C4
+_0209E278:
+ ldr r2, [r12, #0x1c]
+ cmp r2, #0x0
+ beq _0209E2B8
+ ldrh r5, [r0, #0xc]
+ ldrh r6, [r0, #0xe]
+ mov r4, r5, asr #0x8
+ orr r4, r4, r5, lsl #0x8
+ mov lr, r4, lsl #0x10
+ mov r4, r6, asr #0x8
+ mov lr, lr, lsr #0x10
+ orr r4, r4, r6, lsl #0x8
+ mov r5, lr, lsl #0x10
+ mov lr, r4, lsl #0x10
+ orr r4, r5, lr, lsr #0x10
+ cmp r2, r4
+ bne _0209E2C4
+_0209E2B8:
+ mov r0, r12
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+_0209E2C4:
+ ldr r3, [r3, #0x68]
+ cmp r3, #0x0
+ bne _0209E214
+_0209E2D0:
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209E2DC: .word OSi_ThreadInfo
+
+ arm_func_start dispatch_icmp
+dispatch_icmp: ; 0x0209E2E0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ mov r4, r2
+ mov r6, r0
+ mov r0, r5
+ mov r1, r4
+ bl calc_checksum
+ ldr r1, _0209E3D8 ; =0x0000FFFF
+ cmp r0, r1
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldrh r12, [r6, #0x10]
+ ldrh r7, [r6, #0xc]
+ ldrh r0, [r6, #0xe]
+ ldrh r1, [r6, #0x12]
+ mov r3, r7, asr #0x8
+ mov lr, r0, asr #0x8
+ orr r0, lr, r0, lsl #0x8
+ mov r2, r12, asr #0x8
+ orr r7, r3, r7, lsl #0x8
+ orr r3, r2, r12, lsl #0x8
+ mov r2, r7, lsl #0x10
+ mov r12, r1, asr #0x8
+ orr r1, r12, r1, lsl #0x8
+ mov r3, r3, lsl #0x10
+ mov r7, r2, lsr #0x10
+ mov r2, r3, lsr #0x10
+ mov r3, r7, lsl #0x10
+ mov r0, r0, lsl #0x10
+ mov r2, r2, lsl #0x10
+ mov r1, r1, lsl #0x10
+ orr r0, r3, r0, lsr #0x10
+ orr r1, r2, r1, lsr #0x10
+ bl valid_IP
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldrb r0, [r5, #0x0]
+ cmp r0, #0x0
+ beq _0209E3A0
+ cmp r0, #0x8
+ beq _0209E3BC
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209E3A0:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl process_icmp_reply
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209E3BC:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl reply_icmp
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209E3D8: .word 0x0000FFFF
+
+ arm_func_start valid_IP
+valid_IP:
+ cmp r0, #0x0
+ beq _0209E404
+ mvn r2, #0x0
+ cmp r0, r2
+ beq _0209E404
+ cmp r1, #0x0
+ beq _0209E404
+ cmp r1, r2
+ movne r0, #0x1
+ bxne lr
+_0209E404:
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start process_icmp_reply
+process_icmp_reply: ; 0x0209E40C
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl OS_DisableInterrupts
+ ldr r1, _0209E520 ; =OSi_ThreadInfo
+ mov r8, r0
+ ldr r2, [r1, #0x8]
+ cmp r2, #0x0
+ beq _0209E510
+_0209E434:
+ ldr r4, [r2, #0xa4]
+ cmp r4, #0x0
+ beq _0209E504
+ ldr r3, [r4, #0x0]
+ cmp r3, #0x0
+ beq _0209E504
+ ldrb r0, [r4, #0x8]
+ cmp r0, #0xb
+ bne _0209E504
+ ldrh r1, [r6, #0x4]
+ mov r0, r3, lsl #0x10
+ mov r0, r0, lsr #0x10
+ cmp r0, r1
+ bne _0209E504
+ ldrh r1, [r4, #0xa]
+ ldrh r0, [r6, #0x6]
+ cmp r1, r0
+ bne _0209E504
+ ldr r0, [r4, #0x44]
+ cmp r0, #0x0
+ bne _0209E504
+ ldrh r12, [r7, #0xc]
+ ldrh r1, [r7, #0xe]
+ ldr r0, [r4, #0x1c]
+ mov r3, r12, asr #0x8
+ orr r3, r3, r12, lsl #0x8
+ mov r3, r3, lsl #0x10
+ mov r12, r1, asr #0x8
+ mov r3, r3, lsr #0x10
+ orr r1, r12, r1, lsl #0x8
+ mov r3, r3, lsl #0x10
+ mov r1, r1, lsl #0x10
+ orr r1, r3, r1, lsr #0x10
+ cmp r0, r1
+ bne _0209E504
+ ldr r1, [r4, #0x3c]
+ sub r0, r5, #0x8
+ cmp r0, r1
+ strhi r1, [r4, #0x44]
+ strls r0, [r4, #0x44]
+ ldr r1, [r4, #0x40]
+ ldr r2, [r4, #0x44]
+ add r0, r6, #0x8
+ bl MI_CpuCopy8
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x3
+ bne _0209E510
+ mov r0, #0x0
+ str r0, [r4, #0x4]
+ ldr r0, [r4, #0x0]
+ bl OS_WakeupThreadDirect
+ b _0209E510
+_0209E504:
+ ldr r2, [r2, #0x68]
+ cmp r2, #0x0
+ bne _0209E434
+_0209E510:
+ mov r0, r8
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209E520: .word OSi_ThreadInfo
+
+ arm_func_start reply_icmp
+reply_icmp: ; 0x0209E524
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ mov r6, r0
+ ldrh r3, [r6, #0xc]
+ ldrh r4, [r6, #0xe]
+ mov r5, r1
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r1, r4, asr #0x8
+ mov r3, r0, lsr #0x10
+ orr r0, r1, r4, lsl #0x8
+ mov r1, r3, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r0, r1, r0, lsr #0x10
+ mov r4, r2
+ bl get_targetip
+ movs r7, r0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ bl inq_arpcache
+ cmp r0, #0x0
+ bne _0209E598
+ mov r0, r7
+ bl send_arprequest
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209E598:
+ mov r2, #0x0
+ strb r2, [r5, #0x0]
+ mov r0, r5
+ mov r1, r4
+ strh r2, [r5, #0x2]
+ bl calc_checksum
+ mov r1, r0, asr #0x8
+ orr r0, r1, r0, lsl #0x8
+ strh r0, [r5, #0x2]
+ ldrh r1, [r6, #0xc]
+ ldrh r6, [r6, #0xe]
+ mov r2, #0x0
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r1, r6, asr #0x8
+ mov r3, r0, lsr #0x10
+ orr r0, r1, r6, lsl #0x8
+ mov r1, r3, lsl #0x10
+ mov r0, r0, lsl #0x10
+ orr r6, r1, r0, lsr #0x10
+ mov r0, r5
+ mov r1, r4
+ mov r3, r2
+ str r6, [sp, #0x0]
+ mov r4, #0x1
+ str r4, [sp, #0x4]
+ bl send_ip
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+
+ arm_func_start dispatch_arp
+dispatch_arp: ; 0x0209E614
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x1c
+ mov r6, r0
+ addcc sp, sp, #0x4
+ ldmccia sp!, {r4-r7,lr}
+ bxcc lr
+ ldr r1, _0209E7BC ; =CPSMyMac
+ add r0, r6, #0x8
+ bl maccmp
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r0, _0209E7C0 ; =CPSMyIp
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldrh r0, [r6, #0x0]
+ cmp r0, #0x100
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldrh r0, [r6, #0x2]
+ cmp r0, #0x8
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldrh r1, [r6, #0x4]
+ ldr r0, _0209E7C4 ; =0x00000406
+ cmp r1, r0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ ldrh r1, [r6, #0x6]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r4, r0, lsr #0x10
+ cmp r4, #0x1
+ beq _0209E6D0
+ cmp r4, #0x2
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+_0209E6D0:
+ ldrh r1, [r6, #0xe]
+ ldrh r5, [r6, #0x10]
+ ldr r2, _0209E7C0 ; =CPSMyIp
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ mov r1, r5, asr #0x8
+ orr r0, r1, r5, lsl #0x8
+ mov r1, r0, lsl #0x10
+ mov r3, r3, lsl #0x10
+ orr r1, r3, r1, lsr #0x10
+ ldr r0, [r2, #0x0]
+ ldrh r3, [r6, #0x18]
+ ldrh lr, [r6, #0x1a]
+ cmp r1, r0
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r2, r2, lsl #0x10
+ moveq r5, #0x1
+ mov r3, lr, asr #0x8
+ mov r12, r2, lsr #0x10
+ orr r2, r3, lr, lsl #0x8
+ mov r3, r12, lsl #0x10
+ mov r2, r2, lsl #0x10
+ orr r2, r3, r2, lsr #0x10
+ movne r5, #0x0
+ cmp r0, r2
+ moveq r7, #0x1
+ movne r7, #0x0
+ cmp r5, #0x0
+ bne _0209E75C
+ mov r2, r7
+ add r0, r6, #0x8
+ bl reg_arprequest
+_0209E75C:
+ cmp r4, #0x1
+ bne _0209E780
+ cmp r7, #0x0
+ beq _0209E780
+ mov r0, r6
+ bl reply_arp
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209E780:
+ cmp r4, #0x2
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ cmp r7, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ cmp r5, #0x0
+ ldrne r0, _0209E7C8 ; =ip_conflict
+ movne r1, #0x1
+ strneb r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209E7BC: .word CPSMyMac
+_0209E7C0: .word CPSMyIp
+_0209E7C4: .word 0x00000406
+_0209E7C8: .word ip_conflict
+
+ arm_func_start reply_arp
+reply_arp: ; 0x0209E7CC
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r3, #0x200
+ add r0, r4, #0x8
+ add r1, r4, #0x12
+ mov r2, #0xa
+ strh r3, [r4, #0x6]
+ bl MI_CpuCopy8
+ ldr r0, _0209E870 ; =CPSMyMac
+ add r1, r4, #0x8
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ ldr r3, _0209E874 ; =CPSMyIp
+ add r0, r4, #0x12
+ ldr r2, [r3, #0x0]
+ sub r1, r4, #0xe
+ mov r2, r2, lsr #0x10
+ mov r2, r2, lsl #0x10
+ mov r12, r2, lsr #0x10
+ mov r2, r12, asr #0x8
+ orr r2, r2, r12, lsl #0x8
+ strh r2, [r4, #0xe]
+ ldr r3, [r3, #0x0]
+ mov r2, #0x6
+ mov r3, r3, lsl #0x10
+ mov r12, r3, lsr #0x10
+ mov r3, r12, asr #0x8
+ orr r3, r3, r12, lsl #0x8
+ strh r3, [r4, #0x10]
+ bl MI_CpuCopy8
+ ldr r0, _0209E870 ; =CPSMyMac
+ sub r1, r4, #0x8
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ sub r0, r4, #0xe
+ mov r1, #0x2a
+ mov r2, #0x0
+ mov r3, r2
+ bl send_packet
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209E870: .word CPSMyMac
+_0209E874: .word CPSMyIp
+
+ arm_func_start send_tcp
+send_tcp: ; 0x0209E878
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0xc
+ mov r7, r2
+ ldrb r2, [r7, #0x8]
+ mov r9, r0
+ mov r8, r1
+ cmp r2, #0x0
+ mov r6, r3
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ ldr r0, _0209EAEC ; =OSi_ThreadInfo
+ ldr r3, _0209EAF0 ; =CPSMyIp
+ ldr r1, _0209EAF4 ; =tcpip_thread
+ ldr r0, [r0, #0x4]
+ ldr r12, [r3, #0x0]
+ cmp r0, r1
+ ldreq r4, _0209EAF8 ; =tmpbuf + 0x22
+ ldrne r0, [r7, #0x4c]
+ addne r4, r0, #0x22
+ ands r0, r6, #0x2
+ movne r5, #0x18
+ moveq r5, #0x14
+ add r1, r5, r8
+ mov r2, r1, lsl #0x10
+ mov r1, r12, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r12, r1, lsr #0x10
+ mov r1, r12, asr #0x8
+ orr r1, r1, r12, lsl #0x8
+ strh r1, [r4, #-0xc]
+ ldr r1, [r3, #0x0]
+ mov r12, r2, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r2, r1, lsr #0x10
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ strh r1, [r4, #-0xa]
+ ldr r1, [r7, #0x1c]
+ mov r3, r12, asr #0x8
+ mov r1, r1, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r2, r1, lsr #0x10
+ mov r1, r2, asr #0x8
+ orr r1, r1, r2, lsl #0x8
+ strh r1, [r4, #-0x8]
+ ldr r1, [r7, #0x1c]
+ mov r2, r5, lsr #0x2
+ mov r1, r1, lsl #0x10
+ mov lr, r1, lsr #0x10
+ mov r1, lr, asr #0x8
+ orr r1, r1, lr, lsl #0x8
+ strh r1, [r4, #-0x6]
+ mov r1, #0x600
+ strh r1, [r4, #-0x4]
+ orr r1, r3, r12, lsl #0x8
+ strh r1, [r4, #-0x2]
+ ldrh r12, [r7, #0xa]
+ cmp r0, #0x0
+ mov r2, r2, lsl #0x4
+ mov r3, r12, asr #0x8
+ orr r3, r3, r12, lsl #0x8
+ strh r3, [r4, #0x0]
+ ldrh r3, [r7, #0x18]
+ mov r1, #0x0
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ strh r0, [r4, #0x2]
+ ldr r0, [r7, #0x28]
+ mov r0, r0, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ strh r0, [r4, #0x4]
+ ldr r0, [r7, #0x28]
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ strh r0, [r4, #0x6]
+ ldr r0, [r7, #0x24]
+ mov r0, r0, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ strh r0, [r4, #0x8]
+ ldr r0, [r7, #0x24]
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ strh r0, [r4, #0xa]
+ strb r2, [r4, #0xc]
+ strb r6, [r4, #0xd]
+ ldr r2, [r7, #0x3c]
+ ldr r0, [r7, #0x44]
+ sub r0, r2, r0
+ mov r0, r0, lsl #0x10
+ mov r2, r0, lsr #0x10
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ strh r0, [r4, #0xe]
+ strh r1, [r4, #0x10]
+ strh r1, [r4, #0x12]
+ beq _0209EA64
+ ldr r1, _0209EAFC ; =mymss
+ ldrh r0, [r1, #0x0]
+ add r0, r0, #0x2040000
+ mov r0, r0, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r2, r0, lsr #0x10
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ strh r0, [r4, #0x14]
+ ldrh r0, [r1, #0x0]
+ add r0, r0, #0x2040000
+ mov r0, r0, lsl #0x10
+ mov r1, r0, lsr #0x10
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ strh r0, [r4, #0x16]
+_0209EA64:
+ sub r0, r4, #0xc
+ add r1, r5, #0xc
+ mov r2, #0x0
+ bl calc_checksum_do
+ mov r2, r0
+ mov r0, r9
+ mov r1, r8
+ bl calc_checksum_do
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bl invert_checksum
+ mov r3, r0, asr #0x8
+ orr r0, r3, r0, lsl #0x8
+ strh r0, [r4, #0x10]
+ mov r0, r4
+ ldr r4, [r7, #0x1c]
+ mov r3, #0x6
+ str r4, [sp, #0x0]
+ str r3, [sp, #0x4]
+ mov r1, r5
+ mov r2, r9
+ mov r3, r8
+ bl send_ip
+ ands r0, r6, #0x3
+ ldr r0, [r7, #0x28]
+ add r1, r7, #0x28
+ add r0, r0, r8
+ str r0, [r7, #0x28]
+ ldrne r0, [r1, #0x0]
+ addne r0, r0, #0x1
+ strne r0, [r1, #0x0]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_0209EAEC: .word OSi_ThreadInfo
+_0209EAF0: .word CPSMyIp
+_0209EAF4: .word tcpip_thread
+_0209EAF8: .word tmpbuf + 0x22
+_0209EAFC: .word mymss
+
+ arm_func_start send_udp
+send_udp:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ ldr r7, _0209EC3C ; =CPSMyIp
+ mov r5, r2
+ ldr r2, [r7, #0x0]
+ mov r6, r1
+ mov r1, r2, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r2, r1, lsr #0x10
+ ldr r3, [r5, #0x4c]
+ mov r1, r2, asr #0x8
+ add r4, r3, #0x22
+ orr r1, r1, r2, lsl #0x8
+ strh r1, [r4, #-0xc]
+ ldr r1, [r7, #0x0]
+ add r2, r6, #0x8
+ mov r1, r1, lsl #0x10
+ mov r7, r1, lsr #0x10
+ mov r1, r7, asr #0x8
+ orr r1, r1, r7, lsl #0x8
+ strh r1, [r4, #-0xa]
+ ldr r1, [r5, #0x1c]
+ mov r2, r2, lsl #0x10
+ mov r1, r1, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r7, r1, lsr #0x10
+ mov r1, r7, asr #0x8
+ orr r1, r1, r7, lsl #0x8
+ strh r1, [r4, #-0x8]
+ ldr r1, [r5, #0x1c]
+ mov r2, r2, lsr #0x10
+ mov r1, r1, lsl #0x10
+ mov r7, r1, lsr #0x10
+ mov r1, r7, asr #0x8
+ orr r7, r1, r7, lsl #0x8
+ mov r1, r2, asr #0x8
+ strh r7, [r4, #-0x6]
+ mov r7, #0x1100
+ strh r7, [r4, #-0x4]
+ orr r1, r1, r2, lsl #0x8
+ strh r1, [r4, #0x4]
+ ldrh r1, [r4, #0x4]
+ mov r7, r0
+ sub r0, r4, #0xc
+ strh r1, [r4, #-0x2]
+ ldrh lr, [r5, #0x18]
+ mov r2, #0x0
+ mov r1, #0x14
+ mov r12, lr, asr #0x8
+ orr r12, r12, lr, lsl #0x8
+ strh r12, [r4, #0x2]
+ ldrh lr, [r5, #0xa]
+ mov r12, lr, asr #0x8
+ orr r12, r12, lr, lsl #0x8
+ strh r12, [r3, #0x22]
+ strh r2, [r4, #0x6]
+ bl calc_checksum_do
+ mov r2, r0
+ mov r0, r7
+ mov r1, r6
+ bl calc_checksum_do
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bl invert_checksum
+ mov r2, r7
+ mov r3, r6
+ mov r1, r0, asr #0x8
+ orr r0, r1, r0, lsl #0x8
+ strh r0, [r4, #0x6]
+ ldr r1, [r5, #0x1c]
+ mov r0, r4
+ str r1, [sp, #0x0]
+ mov r1, #0x11
+ str r1, [sp, #0x4]
+ mov r1, #0x8
+ bl send_ip
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209EC3C: .word CPSMyIp
+
+ arm_func_start send_ping
+send_ping:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ mov r5, r2
+ ldr r3, [r5, #0x4c]
+ mov r6, r1
+ mov r1, #0x8
+ ldr r2, _0209ECF4 ; =OSi_ThreadInfo
+ strh r1, [r3, #0x22]
+ ldr r2, [r2, #0x4]
+ add r4, r3, #0x22
+ strh r2, [r4, #0x4]
+ mov r2, #0x0
+ ldr r3, _0209ECF8 ; =UNK_021C8EB4
+ strh r2, [r4, #0x2]
+ ldrh lr, [r3, #0x0]
+ mov r7, r0
+ mov r0, r4
+ strh lr, [r5, #0xa]
+ ldrh r12, [r3, #0x0]
+ add r12, r12, #0x1
+ strh r12, [r3, #0x0]
+ strh lr, [r4, #0x6]
+ bl calc_checksum_do
+ mov r2, r0
+ mov r0, r7
+ mov r1, r6
+ bl calc_checksum_do
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bl invert_checksum
+ mov r2, r7
+ mov r3, r6
+ mov r1, r0, asr #0x8
+ orr r0, r1, r0, lsl #0x8
+ strh r0, [r4, #0x2]
+ ldr r1, [r5, #0x1c]
+ mov r0, r4
+ str r1, [sp, #0x0]
+ mov r1, #0x1
+ str r1, [sp, #0x4]
+ mov r1, #0x8
+ bl send_ip
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209ECF4: .word OSi_ThreadInfo
+_0209ECF8: .word UNK_021C8EB4
+
+ arm_func_start send_ip
+send_ip: ; 0x0209ECFC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r10, r0
+ mov r0, #0x45
+ strb r0, [r10, #-0x14]
+ mov r5, #0x0
+ ldr r0, _0209EF0C ; =ipid
+ strb r5, [r10, #-0x13]
+ ldrh r7, [r0, #0x0]
+ ldr r6, [sp, #0x30]
+ ldrb r4, [sp, #0x34]
+ add r7, r7, #0x1
+ strh r7, [r0, #0x0]
+ ldrh r9, [r0, #0x0]
+ mov r0, r6, lsr #0x10
+ mov r7, #0x80
+ mov r8, r9, asr #0x8
+ orr r8, r8, r9, lsl #0x8
+ strh r8, [r10, #-0x10]
+ strb r7, [r10, #-0xc]
+ ldr r7, _0209EF10 ; =CPSMyIp
+ strb r4, [r10, #-0xb]
+ ldr r8, [r7, #0x0]
+ mov r4, r0, lsl #0x10
+ mov r0, r8, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r8, r0, lsr #0x10
+ mov r0, r8, asr #0x8
+ orr r0, r0, r8, lsl #0x8
+ strh r0, [r10, #-0x8]
+ ldr r0, [r7, #0x0]
+ mov r8, r4, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r7, r0, lsr #0x10
+ mov r4, r7, asr #0x8
+ mov r0, r6, lsl #0x10
+ orr r9, r4, r7, lsl #0x8
+ mov r7, r8, asr #0x8
+ mov r4, r0, lsr #0x10
+ mov r0, r4, asr #0x8
+ strh r9, [r10, #-0x6]
+ orr r7, r7, r8, lsl #0x8
+ ldr fp, _0209EF14 ; =0x000005C8
+ mov r9, r1
+ strh r7, [r10, #-0x4]
+ orr r0, r0, r4, lsl #0x8
+ mov r8, r2
+ mov r7, r3
+ strh r0, [r10, #-0x2]
+ cmp r9, r11
+ bls _0209EE74
+ mov r4, r10
+ cmp r9, r11
+ bls _0209EE14
+ str r5, [sp, #0x8]
+_0209EDD8:
+ ldr r1, [sp, #0x8]
+ mov r0, r10
+ mov r2, r4
+ mov r3, r11
+ str r6, [sp, #0x0]
+ orr r12, r5, #0x2000
+ str r12, [sp, #0x4]
+ bl send_ip_frag
+ add r0, r5, #0xb9
+ sub r9, r9, r11
+ mov r0, r0, lsl #0x10
+ cmp r9, r11
+ add r4, r4, r11
+ mov r5, r0, lsr #0x10
+ bhi _0209EDD8
+_0209EE14:
+ cmp r9, #0x0
+ beq _0209EE74
+ cmp r7, #0x0
+ beq _0209EE48
+ mov r0, r10
+ mov r2, r4
+ mov r3, r9
+ str r6, [sp, #0x0]
+ orr r4, r5, #0x2000
+ mov r1, #0x0
+ str r4, [sp, #0x4]
+ bl send_ip_frag
+ b _0209EE64
+_0209EE48:
+ str r6, [sp, #0x0]
+ mov r0, r10
+ mov r2, r4
+ mov r3, r9
+ mov r1, #0x0
+ str r5, [sp, #0x4]
+ bl send_ip_frag
+_0209EE64:
+ add r0, r5, r9, lsr #0x3
+ mov r0, r0, lsl #0x10
+ mov r5, r0, lsr #0x10
+ mov r9, #0x0
+_0209EE74:
+ ldr r0, _0209EF14 ; =0x000005C8
+ add r1, r9, r7
+ cmp r1, r0
+ bls _0209EED4
+ mov r11, #0x0
+_0209EE88:
+ ldr r0, _0209EF14 ; =0x000005C8
+ mov r1, r9
+ sub r4, r0, r9
+ mov r0, r10
+ mov r2, r8
+ mov r3, r4
+ str r6, [sp, #0x0]
+ orr r9, r5, #0x2000
+ str r9, [sp, #0x4]
+ bl send_ip_frag
+ add r0, r5, #0xb9
+ mov r1, r0, lsl #0x10
+ ldr r0, _0209EF14 ; =0x000005C8
+ sub r7, r7, r4
+ mov r9, r11
+ cmp r7, r0
+ add r8, r8, r4
+ mov r5, r1, lsr #0x10
+ bhi _0209EE88
+_0209EED4:
+ adds r0, r9, r7
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r11,lr}
+ bxeq lr
+ str r6, [sp, #0x0]
+ mov r0, r10
+ mov r1, r9
+ mov r2, r8
+ mov r3, r7
+ str r5, [sp, #0x4]
+ bl send_ip_frag
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,lr}
+ bx lr
+ .balign 4
+_0209EF0C: .word ipid
+_0209EF10: .word CPSMyIp
+_0209EF14: .word 0x000005C8
+
+ arm_func_start send_ip_frag
+send_ip_frag: ; 0x0209EF18
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ mov r7, r1
+ mov r5, r3
+ add r1, r7, #0x14
+ add r1, r1, r5
+ ldr r3, [sp, #0x24]
+ mov r1, r1, lsl #0x10
+ mov r4, r1, lsr #0x10
+ mov r1, r3, lsl #0x10
+ mov r3, r4, asr #0x8
+ mov r1, r1, lsr #0x10
+ mov r8, r0
+ orr r3, r3, r4, lsl #0x8
+ mov r0, r1, asr #0x8
+ strh r3, [r8, #-0x12]
+ orr r0, r0, r1, lsl #0x8
+ strh r0, [r8, #-0xe]
+ mov r3, #0x0
+ sub r0, r8, #0x14
+ mov r1, #0x14
+ mov r6, r2
+ strh r3, [r8, #-0xa]
+ ldr r4, [sp, #0x20]
+ bl calc_checksum
+ mov r2, r0, asr #0x8
+ ldr r1, _0209F040 ; =0x7F000001
+ orr r0, r2, r0, lsl #0x8
+ strh r0, [r8, #-0xa]
+ cmp r4, r1
+ beq _0209EFC4
+ ldr r0, _0209F044 ; =CPSMyIp
+ ldr r0, [r0, #0x0]
+ cmp r4, r0
+ beq _0209EFC4
+ mov r2, r6
+ mov r3, r5
+ str r4, [sp, #0x0]
+ mov r12, #0x800
+ sub r0, r8, #0x14
+ add r1, r7, #0x14
+ str r12, [sp, #0x4]
+ bl send_ether
+_0209EFC4:
+ ldr r0, _0209F040 ; =0x7F000001
+ cmp r4, r0
+ beq _0209EFF8
+ ldr r0, _0209F044 ; =CPSMyIp
+ ldr r0, [r0, #0x0]
+ cmp r4, r0
+ beq _0209EFF8
+ mov r0, r4
+ bl is_multicast
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+_0209EFF8:
+ ldr r0, _0209F048 ; =UNK_02106230
+ sub r1, r8, #0x1c
+ mov r2, #0x8
+ bl MI_CpuCopy8
+ bl OS_DisableInterrupts
+ mov r4, r0
+ ldr r0, _0209F04C ; =CPSMyMac
+ str r6, [sp, #0x0]
+ mov r1, r0
+ str r5, [sp, #0x4]
+ sub r2, r8, #0x1c
+ add r3, r7, #0x1c
+ bl put_in_buffer
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209F040: .word 0x7F000001
+_0209F044: .word CPSMyIp
+_0209F048: .word UNK_02106230
+_0209F04C: .word CPSMyMac
+
+ arm_func_start send_ether
+send_ether: ; 0x0209F050
+ stmdb sp!, {r4-r8,lr}
+ ldrh r5, [sp, #0x1c]
+ ldr r4, [sp, #0x18]
+ mov r8, r0
+ mov r0, r5, asr #0x8
+ orr r12, r0, r5, lsl #0x8
+ mov r0, r4
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ strh r12, [r8, #-0x2]
+ bl is_multicast
+ cmp r0, #0x0
+ bne _0209F0CC
+ mov r0, r4
+ bl get_targetip
+ movs r4, r0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ bl inq_arpcache
+ cmp r0, #0x0
+ bne _0209F0B0
+ mov r0, r4
+ bl arprequest
+_0209F0B0:
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ sub r1, r8, #0xe
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ b _0209F0FC
+_0209F0CC:
+ mov r0, #0x1
+ strb r0, [r8, #-0xe]
+ mov r1, #0x0
+ mov r0, r4, lsr #0x10
+ strb r1, [r8, #-0xd]
+ mov r1, #0x5e
+ strb r1, [r8, #-0xc]
+ and r0, r0, #0x7f
+ strb r0, [r8, #-0xb]
+ mov r0, r4, lsr #0x8
+ strb r0, [r8, #-0xa]
+ strb r4, [r8, #-0x9]
+_0209F0FC:
+ ldr r0, _0209F128 ; =CPSMyMac
+ sub r1, r8, #0x8
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ mov r2, r6
+ mov r3, r5
+ sub r0, r8, #0xe
+ add r1, r7, #0xe
+ bl send_packet
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209F128: .word CPSMyMac
+
+ arm_func_start reg_arprequest
+reg_arprequest: ; 0x0209F12C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r3, _0209F29C ; =0x7F000001
+ mov r6, r1
+ cmp r6, r3
+ mov r7, r0
+ mov r4, r2
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r0, _0209F2A0 ; =CPSMyIp
+ ldr r0, [r0, #0x0]
+ cmp r6, r0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r6
+ bl ip_islocal
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r0, r6
+ bl is_multicast
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,lr}
+ bxne lr
+ bl OS_GetTick
+ mov r0, r0, lsr #0x10
+ orr r0, r0, r1, lsl #0x10
+ mov r0, r0, lsl #0x10
+ ldr r1, _0209F2A4 ; =arpcache
+ mov r5, r0, lsr #0x10
+ mov r2, #0x0
+_0209F1B8:
+ ldr r0, [r1, #0x0]
+ cmp r6, r0
+ bne _0209F1F8
+ mov r0, #0xc
+ mul r4, r2, r0
+ ldr r0, _0209F2A4 ; =arpcache
+ ldr r3, _0209F2A8 ; =arpcache+10
+ add r1, r0, r4
+ mov r0, r7
+ add r1, r1, #0x4
+ mov r2, #0x6
+ strh r5, [r3, r4]
+ bl MI_CpuCopy8
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+_0209F1F8:
+ add r2, r2, #0x1
+ cmp r2, #0x8
+ add r1, r1, #0xc
+ blo _0209F1B8
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ mov r12, #0x0
+ ldr r4, _0209F2A4 ; =arpcache
+ mov r0, r12
+ mov r3, r12
+_0209F228:
+ ldr r1, [r4, #0x0]
+ cmp r1, #0x0
+ moveq r0, r3
+ beq _0209F264
+ ldrh r1, [r4, #0xa]
+ add r4, r4, #0xc
+ sub r1, r5, r1
+ mov r1, r1, lsl #0x10
+ mov r2, r1, asr #0x10
+ cmp r2, r12
+ movgt r0, r3
+ add r3, r3, #0x1
+ movgt r12, r1, lsr #0x10
+ cmp r3, #0x8
+ blo _0209F228
+_0209F264:
+ mov r1, #0xc
+ mul r4, r0, r1
+ ldr r3, _0209F2A4 ; =arpcache
+ mov r0, r7
+ add r1, r3, r4
+ add r1, r1, #0x4
+ mov r2, #0x6
+ str r6, [r3, r4]
+ bl MI_CpuCopy8
+ ldr r0, _0209F2A8 ; =arpcache+10
+ strh r5, [r0, r4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209F29C: .word 0x7F000001
+_0209F2A0: .word CPSMyIp
+_0209F2A4: .word arpcache
+_0209F2A8: .word arpcache+10
+
+ arm_func_start arprequest
+arprequest:
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r9, r0
+ mov r8, #0x0
+ ldr r4, _0209F334 ; =CPSMyIp
+ mov r6, r8
+ mov r5, #0x64
+_0209F2C8:
+ mov r0, r9
+ bl send_arprequest
+ mov r7, r6
+_0209F2D4:
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,lr}
+ bxeq lr
+ mov r0, r5
+ bl OS_Sleep
+ mov r0, r9
+ bl inq_arpcache
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r9,lr}
+ bxne lr
+ add r7, r7, #0x1
+ cmp r7, #0x14
+ blo _0209F2D4
+ add r8, r8, #0x1
+ cmp r8, #0x8
+ blo _0209F2C8
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,lr}
+ bx lr
+ .balign 4
+_0209F334: .word CPSMyIp
+
+ arm_func_start send_arprequest
+send_arprequest: ; 0x0209F338
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x30
+ mov r4, r0
+ add r0, sp, #0x0
+ mov r1, #0x0
+ mov r2, #0x2a
+ bl MI_CpuFill8
+ add r0, sp, #0x0
+ mov r1, #0xff
+ mov r2, #0x6
+ bl MI_CpuFill8
+ ldr r0, _0209F428 ; =CPSMyMac
+ add r1, sp, #0x6
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ mov r0, #0x1
+ ldr r1, _0209F42C ; =0x00000608
+ strb r0, [sp, #0xf]
+ strh r1, [sp, #0xc]
+ strb r0, [sp, #0x15]
+ mov r0, #0x8
+ ldr r1, _0209F430 ; =0x00000406
+ strb r0, [sp, #0x10]
+ strh r1, [sp, #0x12]
+ ldr r0, _0209F428 ; =CPSMyMac
+ add r1, sp, #0x16
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ ldr r0, _0209F434 ; =CPSMyIp
+ mov r1, r4, lsr #0x10
+ ldr r3, [r0, #0x0]
+ mov r0, r1, lsl #0x10
+ mov r2, r0, lsr #0x10
+ mov r0, r4, lsl #0x10
+ mov r1, r0, lsr #0x10
+ mov r0, r3, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r4, r0, lsr #0x10
+ mov r0, r3, lsl #0x10
+ mov r3, r0, lsr #0x10
+ mov r0, r4, asr #0x8
+ orr r0, r0, r4, lsl #0x8
+ strh r0, [sp, #0x1c]
+ mov r0, r3, asr #0x8
+ orr r0, r0, r3, lsl #0x8
+ strh r0, [sp, #0x1e]
+ mov r0, r2, asr #0x8
+ orr r0, r0, r2, lsl #0x8
+ strh r0, [sp, #0x26]
+ mov r0, r1, asr #0x8
+ orr r0, r0, r1, lsl #0x8
+ mov r2, #0x0
+ strh r0, [sp, #0x28]
+ add r0, sp, #0x0
+ mov r1, #0x2a
+ mov r3, r2
+ bl send_packet
+ add sp, sp, #0x30
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209F428: .word CPSMyMac
+_0209F42C: .word 0x00000608
+_0209F430: .word 0x00000406
+_0209F434: .word CPSMyIp
+
+ arm_func_start inq_arpcache
+inq_arpcache:
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ bl OS_DisableInterrupts
+ ldr r1, _0209F504 ; =0x7F000001
+ mov r4, r0
+ cmp r7, r1
+ mov r5, #0x0
+ beq _0209F46C
+ ldr r0, _0209F508 ; =CPSMyIp
+ ldr r0, [r0, #0x0]
+ cmp r7, r0
+ bne _0209F474
+_0209F46C:
+ ldr r5, _0209F50C ; =CPSMyMac
+ b _0209F4EC
+_0209F474:
+ mov r0, r7
+ bl is_broadcast
+ cmp r0, #0x0
+ bne _0209F494
+ mov r0, r7
+ bl is_multicast
+ cmp r0, #0x0
+ beq _0209F49C
+_0209F494:
+ ldr r5, _0209F510 ; =mac_broadcast
+ b _0209F4EC
+_0209F49C:
+ ldr r1, _0209F514 ; =arpcache
+ mov r6, r5
+_0209F4A4:
+ ldr r0, [r1, #0x0]
+ cmp r7, r0
+ bne _0209F4DC
+ bl OS_GetTick
+ mov r2, #0xc
+ mul r3, r6, r2
+ ldr r2, _0209F514 ; =arpcache
+ mov r5, r0, lsr #0x10
+ add r0, r2, r3
+ ldr r2, _0209F518 ; =arpcache+10
+ orr r5, r5, r1, lsl #0x10
+ strh r5, [r2, r3]
+ add r5, r0, #0x4
+ b _0209F4EC
+_0209F4DC:
+ add r6, r6, #0x1
+ cmp r6, #0x8
+ add r1, r1, #0xc
+ blo _0209F4A4
+_0209F4EC:
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ mov r0, r5
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_0209F504: .word 0x7F000001
+_0209F508: .word CPSMyIp
+_0209F50C: .word CPSMyMac
+_0209F510: .word mac_broadcast
+_0209F514: .word arpcache
+_0209F518: .word arpcache+10
+
+ arm_func_start throw_packet
+throw_packet: ; 0x0209F51C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ ldr r2, _0209F570 ; =wlan_getpnt
+ ldr r1, _0209F574 ; =wlan_buf
+ ldr lr, [r2, #0x0]
+ ldr r12, [r1, #0x0]
+ ldr r3, [r2, #0x0]
+ ldr r1, _0209F578 ; =wlan_buflen
+ ldrh r3, [r12, r3]
+ add r3, lr, r3
+ str r3, [r2, #0x0]
+ ldr r3, [r2, #0x0]
+ ldr r1, [r1, #0x0]
+ cmp r3, r1
+ movcs r1, #0x0
+ strcs r1, [r2, #0x0]
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209F570: .word wlan_getpnt
+_0209F574: .word wlan_buf
+_0209F578: .word wlan_buflen
+
+ arm_func_start receive_packet
+receive_packet: ; 0x0209F57C
+ stmdb sp!, {r4-r10,lr}
+ mov r6, r0
+ bl OS_DisableInterrupts
+ ldr sl, _0209F644 ; =wlan_getpnt
+ ldr sb, _0209F648 ; =wlan_putpnt
+ ldr r2, [r10, #0x0]
+ ldr r1, [r9, #0x0]
+ mov r5, r0
+ cmp r2, r1
+ bne _0209F5D4
+ ldr r8, _0209F64C ; =OSi_ThreadInfo
+ ldr r7, _0209F650 ; =receiver_thread
+ mov r4, #0x0
+_0209F5B0:
+ ldr r1, [r8, #0x4]
+ mov r0, r4
+ str r1, [r7, #0x0]
+ bl OS_SleepThread
+ str r4, [r7, #0x0]
+ ldr r1, [r10, #0x0]
+ ldr r0, [r9, #0x0]
+ cmp r1, r0
+ beq _0209F5B0
+_0209F5D4:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ ldr r0, _0209F654 ; =wlan_buf
+ ldr r5, [r0, #0x0]
+ ldr r0, _0209F644 ; =wlan_getpnt
+ ldr r1, _0209F658 ; =wlan_buflen
+ mov r3, #0x0
+_0209F5F0:
+ ldr r4, [r1, #0x0]
+ ldr r2, [r0, #0x0]
+ sub r2, r4, r2
+ cmp r2, #0x2
+ strcc r3, [r0, #0x0]
+ ldr r2, [r0, #0x0]
+ ldrh r2, [r5, r2]
+ cmp r2, #0x0
+ streq r3, [r0, #0x0]
+ cmp r2, #0x0
+ beq _0209F5F0
+ sub r0, r2, #0x2
+ ldr r1, _0209F654 ; =wlan_buf
+ str r0, [r6, #0x0]
+ ldr r0, _0209F644 ; =wlan_getpnt
+ ldr r1, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ add r0, r1, r0
+ add r0, r0, #0x2
+ ldmia sp!, {r4-r10,lr}
+ bx lr
+ .balign 4
+_0209F644: .word wlan_getpnt
+_0209F648: .word wlan_putpnt
+_0209F64C: .word OSi_ThreadInfo
+_0209F650: .word receiver_thread
+_0209F654: .word wlan_buf
+_0209F658: .word wlan_buflen
+
+ arm_func_start CPSi_RecvCallbackFunc
+CPSi_RecvCallbackFunc: ; 0x0209F65C
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ str r12, [sp, #0x4]
+ bl put_in_buffer
+ ldr r0, _0209F6BC ; =receiver_thread
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {lr}
+ bxeq lr
+ ldr r0, [r0, #0x0]
+ bl OS_IsThreadTerminated
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ ldmneia sp!, {lr}
+ bxne lr
+ ldr r0, _0209F6BC ; =receiver_thread
+ ldr r0, [r0, #0x0]
+ bl OS_WakeupThreadDirect
+ add sp, sp, #0xc
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209F6BC: .word receiver_thread
+
+ arm_func_start put_in_buffer
+put_in_buffer: ; 0x0209F6C0
+ stmdb sp!, {r4-r8,lr}
+ ldr r4, _0209F918 ; =wlan_buf
+ mov r7, r0
+ ldr r0, [r4, #0x0]
+ mov r6, r2
+ mov r5, r3
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r2, _0209F91C ; =wlan_buflen
+ ldr r2, [r2, #0x0]
+ cmp r2, #0x0
+ ldmeqia sp!, {r4-r8,lr}
+ bxeq lr
+ ldr r2, [sp, #0x1c]
+ add r2, r5, r2
+ cmp r2, #0x8
+ ldmccia sp!, {r4-r8,lr}
+ bxcc lr
+ ldr r3, _0209F920 ; =0x000005E4
+ cmp r2, r3
+ ldmhiia sp!, {r4-r8,lr}
+ bxhi lr
+ ldr r3, _0209F924 ; =UNK_02106230
+ ldrb r8, [r6, #0x0]
+ ldrb r4, [r3, #0x0]
+ cmp r8, r4
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ ldrb r8, [r6, #0x1]
+ ldrb r4, [r3, #0x1]
+ cmp r8, r4
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ ldrb r4, [r6, #0x2]
+ ldrb r3, [r3, #0x2]
+ cmp r4, r3
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ ldrb r3, [r6, #0x6]
+ cmp r3, #0x8
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+ ldrb r3, [r6, #0x7]
+ cmp r3, #0x0
+ beq _0209F784
+ cmp r3, #0x6
+ ldmneia sp!, {r4-r8,lr}
+ bxne lr
+_0209F784:
+ ldr r4, _0209F928 ; =wlan_putpnt
+ add r2, r2, #0x9
+ bic r2, r2, #0x1
+ ldr lr, [r4, #0x0]
+ mov r3, r2, lsl #0x10
+ ldr ip, _0209F92C ; =wlan_getpnt
+ ldr r8, [r4, #0x0]
+ ldr r4, [r12, #0x0]
+ mov r2, r3, lsr #0x10
+ cmp r8, r4
+ add r4, lr, r3, lsr #0x10
+ bhs _0209F7C4
+ ldr r3, [r12, #0x0]
+ cmp r3, r4
+ ldmlsia sp!, {r4-r8,lr}
+ bxls lr
+_0209F7C4:
+ ldr r3, _0209F91C ; =wlan_buflen
+ ldr r8, [r3, #0x0]
+ cmp r4, r8
+ bne _0209F7F0
+ ldr r3, _0209F92C ; =wlan_getpnt
+ mov r4, #0x0
+ ldr r3, [r3, #0x0]
+ cmp r3, #0x0
+ bne _0209F814
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+_0209F7F0:
+ ldr r3, [r3, #0x0]
+ cmp r4, r3
+ bls _0209F814
+ ldr r3, _0209F92C ; =wlan_getpnt
+ mov r4, r2
+ ldr r3, [r3, #0x0]
+ cmp r3, r2
+ ldmlsia sp!, {r4-r8,lr}
+ bxls lr
+_0209F814:
+ ldr ip, _0209F928 ; =wlan_putpnt
+ ldr r3, _0209F91C ; =wlan_buflen
+ ldr lr, [r12, #0x0]
+ ldr r8, [r3, #0x0]
+ add lr, lr, r2
+ cmp lr, r8
+ bls _0209F858
+ ldr r8, [r3, #0x0]
+ ldr r3, [r12, #0x0]
+ sub r3, r8, r3
+ cmp r3, #0x2
+ ldrcs r3, [r12, #0x0]
+ movcs r8, #0x0
+ strcsh r8, [r0, r3]
+ ldr r0, _0209F928 ; =wlan_putpnt
+ mov r3, #0x0
+ str r3, [r0, #0x0]
+_0209F858:
+ ldr ip, _0209F918 ; =wlan_buf
+ ldr r3, _0209F928 ; =wlan_putpnt
+ ldr r8, [r12, #0x0]
+ ldr lr, [r3, #0x0]
+ mov r0, r1
+ strh r2, [r8, lr]
+ ldr r12, [r12, #0x0]
+ ldr r1, [r3, #0x0]
+ mov r2, #0x6
+ add r1, r12, r1
+ add r1, r1, #0x2
+ bl MI_CpuCopy8
+ ldr r1, _0209F918 ; =wlan_buf
+ ldr r0, _0209F928 ; =wlan_putpnt
+ ldr r2, [r1, #0x0]
+ ldr r1, [r0, #0x0]
+ mov r0, r7
+ add r1, r2, r1
+ add r1, r1, #0x8
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ ldr r1, _0209F918 ; =wlan_buf
+ ldr r0, _0209F928 ; =wlan_putpnt
+ ldr r2, [r1, #0x0]
+ ldr r1, [r0, #0x0]
+ add r0, r6, #0x6
+ add r1, r2, r1
+ add r1, r1, #0xe
+ sub r2, r5, #0x6
+ bl MI_CpuCopy8
+ ldr r0, [sp, #0x18]
+ cmp r0, #0x0
+ beq _0209F908
+ ldr r2, [sp, #0x1c]
+ cmp r2, #0x0
+ beq _0209F908
+ ldr r3, _0209F918 ; =wlan_buf
+ ldr r1, _0209F928 ; =wlan_putpnt
+ ldr r3, [r3, #0x0]
+ ldr r1, [r1, #0x0]
+ add r1, r3, r1
+ add r1, r1, #0x8
+ add r1, r1, r5
+ bl MI_CpuCopy8
+_0209F908:
+ ldr r0, _0209F928 ; =wlan_putpnt
+ str r4, [r0, #0x0]
+ ldmia sp!, {r4-r8,lr}
+ bx lr
+ .balign 4
+_0209F918: .word wlan_buf
+_0209F91C: .word wlan_buflen
+_0209F920: .word 0x000005E4
+_0209F924: .word UNK_02106230
+_0209F928: .word wlan_putpnt
+_0209F92C: .word wlan_getpnt
+
+ arm_func_start send_packet
+send_packet: ; 0x0209F930
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ add r1, r6, r5
+ mov r4, r3
+ cmp r1, r2
+ beq _0209F958
+ mov r0, r2
+ mov r2, r4
+ bl MI_CpuCopy8
+_0209F958:
+ ldr r0, _0209F998 ; =UNK_02106230
+ add r1, r6, #0x6
+ mov r2, #0x6
+ bl MI_CpuCopy8
+ add r2, r5, r4
+ mov r0, r6
+ add r1, r6, #0x6
+ sub r2, r2, #0x6
+ bl WCM_SendDCFData
+ cmp r0, #0x0
+ movlt r1, #0x1
+ ldr r0, _0209F99C ; =wfailed
+ movge r1, #0x0
+ strb r1, [r0, #0x0]
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209F998: .word UNK_02106230
+_0209F99C: .word wfailed
+
+ arm_func_start maccmp
+maccmp:
+ mov r12, #0x0
+_0209F9A4:
+ ldrh r3, [r0], #0x2
+ ldrh r2, [r1], #0x2
+ cmp r3, r2
+ movne r0, #0x1
+ bxne lr
+ add r12, r12, #0x1
+ cmp r12, #0x3
+ blt _0209F9A4
+ mov r0, #0x0
+ bx lr
+
+ arm_func_start ip_isme
+ip_isme:
+ stmdb sp!, {r4-r6,lr}
+ ldr r1, _0209FA4C ; =CPSMyIp
+ mov r5, #0x1
+ ldr r1, [r1, #0x0]
+ mov r6, r0
+ mov r4, r5
+ mov r2, r5
+ mov r0, r5
+ cmp r1, #0x0
+ beq _0209F9FC
+ cmp r6, r1
+ movne r0, #0x0
+_0209F9FC:
+ cmp r0, #0x0
+ bne _0209FA10
+ ldr r0, _0209FA50 ; =0x7F000001
+ cmp r6, r0
+ movne r2, #0x0
+_0209FA10:
+ cmp r2, #0x0
+ bne _0209FA28
+ mov r0, r6
+ bl is_broadcast
+ cmp r0, #0x0
+ moveq r4, #0x0
+_0209FA28:
+ cmp r4, #0x0
+ bne _0209FA40
+ mov r0, r6
+ bl is_multicast
+ cmp r0, #0x0
+ moveq r5, #0x0
+_0209FA40:
+ mov r0, r5
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209FA4C: .word CPSMyIp
+_0209FA50: .word 0x7F000001
+
+ arm_func_start is_multicast
+is_multicast:
+ and r0, r0, #0xf0000000
+ cmp r0, #0xe0000000
+ moveq r0, #0x1
+ movne r0, #0x0
+ bx lr
+
+ arm_func_start is_broadcast
+is_broadcast:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, #0x0
+ bl ip_islocal
+ cmp r0, #0x0
+ beq _0209FA9C
+ ldr r0, _0209FAAC ; =CPSNetMask
+ ldr r0, [r0, #0x0]
+ mvn r1, r0
+ and r0, r1, r5
+ cmp r1, r0
+ moveq r4, #0x1
+_0209FA9C:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0209FAAC: .word CPSNetMask
+
+ arm_func_start get_targetip
+get_targetip:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl ip_islocal
+ cmp r0, #0x0
+ ldreq r0, _0209FAD4 ; =CPSGatewayIp
+ ldreq r4, [r0, #0x0]
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209FAD4: .word CPSGatewayIp
+
+ arm_func_start ip_islocal
+ip_islocal:
+ mvn r1, #0x0
+ cmp r0, r1
+ mov r12, #0x1
+ beq _0209FB14
+ ldr r1, _0209FB1C ; =0x7F000001 127.0.0.1
+ cmp r0, r1
+ beq _0209FB14
+ ldr r2, _0209FB20 ; =CPSNetMask
+ ldr r1, _0209FB24 ; =CPSMyIp
+ ldr r3, [r2, #0x0]
+ ldr r1, [r1, #0x0]
+ and r2, r0, r3
+ and r0, r1, r3
+ cmp r2, r0
+ movne r12, #0x0
+_0209FB14:
+ mov r0, r12
+ bx lr
+ .balign 4
+_0209FB1C: .word 0x7F000001
+_0209FB20: .word CPSNetMask
+_0209FB24: .word CPSMyIp
+
+ arm_func_start check_tcpudpsum
+check_tcpudpsum:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r2
+ mov r2, r3
+ mov r5, r1
+ bl calc_checksum_do
+ mov r2, r0
+ add r0, r4, #0xc
+ mov r1, #0x8
+ bl calc_checksum_do
+ add r1, r0, r5
+ ands r0, r1, #0x10000
+ ldrne r0, _0209FB80 ; =0x0000FFFF
+ addne r1, r1, #0x1
+ andne r1, r1, r0
+ ldr r0, _0209FB80 ; =0x0000FFFF
+ cmp r1, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0209FB80: .word 0x0000FFFF
+
+ arm_func_start calc_checksum
+calc_checksum: ; 0x0209FB84
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, #0x0
+ bl calc_checksum_do
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bl invert_checksum
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start invert_checksum
+invert_checksum: ; 0x0209FBAC
+ ldr r1, _0209FBC4 ; =0x0000FFFF
+ eor r0, r0, r1
+ mov r0, r0, lsl #0x10
+ movs r0, r0, lsr #0x10
+ moveq r0, r1
+ bx lr
+ .balign 4
+_0209FBC4: .word 0x0000FFFF
+
+ arm_func_start calc_checksum_do
+calc_checksum_do: ; 0x0209FBC8
+ ands r3, r0, #0x1
+ beq _0209FC00
+ cmp r1, #0x1
+ bls _0209FC54
+_0209FBD8:
+ ldrb r12, [r0, #0x0]
+ ldrb r3, [r0, #0x1]
+ sub r1, r1, #0x2
+ cmp r1, #0x1
+ orr r3, r3, r12, lsl #0x8
+ mov r3, r3, lsl #0x10
+ add r2, r2, r3, lsr #0x10
+ add r0, r0, #0x2
+ bhi _0209FBD8
+ b _0209FC54
+_0209FC00:
+ mov r2, r2, lsl #0x10
+ mov r3, r2, lsr #0x10
+ mov r2, r3, asr #0x8
+ orr r2, r2, r3, lsl #0x8
+ mov r2, r2, lsl #0x10
+ cmp r1, #0x1
+ mov r2, r2, lsr #0x10
+ bls _0209FC38
+_0209FC20:
+ ldrh r3, [r0, #0x0]
+ sub r1, r1, #0x2
+ cmp r1, #0x1
+ add r2, r2, r3
+ add r0, r0, #0x2
+ bhi _0209FC20
+_0209FC38:
+ ldr r3, _0209FC7C ; =0x00FF00FF
+ ldr ip, _0209FC80 ; =0xFF00FF00
+ and r3, r3, r2, lsr #0x8
+ and r2, r12, r2, lsl #0x8
+ orr r3, r3, r2
+ mov r2, r3, lsr #0x10
+ orr r2, r2, r3, lsl #0x10
+_0209FC54:
+ cmp r1, #0x0
+ ldrneb r0, [r0, #0x0]
+ addne r2, r2, r0, lsl #0x8
+ ldr r0, _0209FC84 ; =0x0000FFFF
+ and r0, r2, r0
+ add r0, r0, r2, lsr #0x10
+ add r0, r0, r0, lsr #0x10
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ bx lr
+ .balign 4
+_0209FC7C: .word 0x00FF00FF
+_0209FC80: .word 0xFF00FF00
+_0209FC84: .word 0x0000FFFF
+
+ arm_func_start CPS_SetThreadPriority
+CPS_SetThreadPriority: ; 0x0209FC88
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r2, _0209FCB8 ; =helper_threads_priority
+ ldr r0, _0209FCBC ; =tcpip_thread
+ mov r1, r4
+ str r4, [r2, #0x0]
+ bl OS_SetThreadPriority
+ ldr r0, _0209FCC0 ; =scavenger_thread
+ mov r1, r4
+ bl OS_SetThreadPriority
+ ldmia sp!, {r4,lr}
+ bx lr
+ .balign 4
+_0209FCB8: .word helper_threads_priority
+_0209FCBC: .word tcpip_thread
+_0209FCC0: .word scavenger_thread
+
+ arm_func_start CPS_Cleanup
+CPS_Cleanup:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl CPS_CalmDown
+ ldr r0, _0209FD10 ; =scavenger_thread
+ bl OS_JoinThread
+ ldr r0, _0209FD14 ; =tcpip_thread
+ bl OS_DestroyThread
+ ldr r1, _0209FD18 ; =receiver_thread
+ mov r0, #0x0
+ str r0, [r1, #0x0]
+ bl reset_network_vars
+ ldr r1, _0209FD1C ; =wlan_buf
+ mov r2, #0x0
+ ldr r0, _0209FD20 ; =wlan_buflen
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_0209FD10: .word scavenger_thread
+_0209FD14: .word tcpip_thread
+_0209FD18: .word receiver_thread
+_0209FD1C: .word wlan_buf
+_0209FD20: .word wlan_buflen
+
+ arm_func_start CPS_SetScavengerCallback
+CPS_SetScavengerCallback: ; 0x0209FD24
+ ldr r1, _0209FD30 ; =scavenger_callback
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_0209FD30: .word scavenger_callback
+
+ arm_func_start CPS_CalmDown
+CPS_CalmDown:
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ bl OS_DisableInterrupts
+ mov r5, r0
+ ldr r0, _0209FD8C ; =scavenger_thread
+ bl OS_IsThreadTerminated
+ movs r4, r0
+ bne _0209FD74
+ ldr r1, _0209FD90 ; =scavenger_force_exit
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ bne _0209FD74
+ ldr r0, _0209FD8C ; =scavenger_thread
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ bl OS_WakeupThreadDirect
+_0209FD74:
+ mov r0, r5
+ bl OS_RestoreInterrupts
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,lr}
+ bx lr
+ .balign 4
+_0209FD8C: .word scavenger_thread
+_0209FD90: .word scavenger_force_exit
+
+ .extern _SDK_UbiquitousCPS
+
+ arm_func_start CPS_Startup
+CPS_Startup: ; 0x0209FD94
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r4, r0
+ ldr r0, _0209FFD4 ; =_SDK_UbiquitousCPS
+ bl OSi_ReferSymbol
+ ldr r12, [r4, #0x14]
+ ldr r6, [r4, #0x18]
+ mov r1, #0x0
+ cmp r6, r1
+ cmpeq r12, r1
+ beq _0209FDEC
+ ldr r0, _0209FFD8 ; =CPSiRand32ctx
+ ldr r5, _0209FFDC ; =0x6C078965
+ ldr r3, _0209FFE0 ; =0x5D588B65
+ ldr r2, _0209FFE4 ; =0x00269EC3
+ str r12, [r0, #0x0]
+ str r6, [r0, #0x4]
+ str r5, [r0, #0x8]
+ str r3, [r0, #0xc]
+ str r2, [r0, #0x10]
+ str r1, [r0, #0x14]
+ b _0209FE1C
+_0209FDEC:
+ bl OS_GetTick
+ ldr r2, _0209FFD8 ; =CPSiRand32ctx
+ ldr ip, _0209FFDC ; =0x6C078965
+ ldr r6, _0209FFE0 ; =0x5D588B65
+ ldr r5, _0209FFE4 ; =0x00269EC3
+ mov r3, #0x0
+ str r0, [r2, #0x0]
+ str r1, [r2, #0x4]
+ str r12, [r2, #0x8]
+ str r6, [r2, #0xc]
+ str r5, [r2, #0x10]
+ str r3, [r2, #0x14]
+_0209FE1C:
+ ldr r2, [r4, #0x4]
+ cmp r2, #0x0
+ beq _0209FE4C
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x0
+ beq _0209FE4C
+ ldr r1, _0209FFE8 ; =CPSiAlloc
+ ldr r0, _0209FFEC ; =CPSiFree
+ str r2, [r1, #0x0]
+ ldr r1, [r4, #0x8]
+ str r1, [r0, #0x0]
+ b _0209FE60
+_0209FE4C:
+ ldr r2, _0209FFF0 ; =empty_func
+ ldr r1, _0209FFE8 ; =CPSiAlloc
+ ldr r0, _0209FFEC ; =CPSiFree
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+_0209FE60:
+ ldr r1, [r4, #0x0]
+ ldr r0, _0209FFF4 ; =mode
+ ldr ip, _0209FFD8 ; =CPSiRand32ctx
+ str r1, [r0, #0x0]
+ ldr r1, [r4, #0x24]
+ ldr r3, [r12, #0x8]
+ cmp r1, #0x0
+ ldrne r0, _0209FFF8 ; =mymss
+ strneh r1, [r0, #0x0]
+ ldreq r1, _0209FFFC ; =0x000005B4
+ ldreq r0, _0209FFF8 ; =mymss
+ streqh r1, [r0, #0x0]
+ ldr r2, [r4, #0x28]
+ ldr r1, _020A0000 ; =offered_myip
+ ldr r0, _020A0004 ; =yield_wait
+ str r2, [r1, #0x0]
+ ldr r1, [r4, #0x2c]
+ ldr r2, [r12, #0x0]
+ str r1, [r0, #0x0]
+ ldr r1, [r4, #0xc]
+ umull lr, r5, r3, r2
+ cmp r1, #0x0
+ ldrne r0, _020A0008 ; =dhcp_callback
+ strne r1, [r0, #0x0]
+ ldreq r1, _0209FFF0 ; =empty_func
+ ldreq r0, _020A0008 ; =dhcp_callback
+ streq r1, [r0, #0x0]
+ ldr r1, [r4, #0x10]
+ cmp r1, #0x0
+ ldrne r0, _020A000C ; =link_is_on
+ strne r1, [r0, #0x0]
+ ldreq r1, _020A0010 ; =default_link_is_on
+ ldreq r0, _020A000C ; =link_is_on
+ streq r1, [r0, #0x0]
+ ldr r1, [r12, #0x4]
+ ldr r0, _020A0014 ; =0x00000F88
+ mla r5, r3, r1, r5
+ ldr r1, [r12, #0xc]
+ ldr r3, [r12, #0x10]
+ mla r5, r1, r2, r5
+ adds r2, r3, lr
+ ldr r1, [r12, #0x14]
+ mov r3, #0x0
+ adc r1, r1, r5
+ umull lr, r5, r1, r0
+ mla r5, r1, r3, r5
+ mla r5, r3, r0, r5
+ ldr r6, [r4, #0x1c]
+ ldr r0, _020A0018 ; =wlan_buf
+ ldr lr, _020A001C ; =wlan_buflen
+ str r6, [r0, #0x0]
+ ldr r4, [r4, #0x20]
+ ldr r0, _020A0020 ; =wlan_getpnt
+ str r4, [lr, #0x0]
+ str r3, [r0, #0x0]
+ ldr lr, _020A0024 ; =wlan_putpnt
+ ldr r4, _020A0028 ; =eport
+ add r5, r5, #0x400
+ ldr r0, _020A002C ; =CPSMyMac
+ str r3, [lr, #0x0]
+ str r2, [r12, #0x0]
+ str r1, [r12, #0x4]
+ strh r5, [r4, #0x0]
+ bl OS_GetMacAddress
+ ldr r0, _020A0030 ; =ip_conflict
+ mov r2, #0x0
+ strb r2, [r0, #0x0]
+ mov r1, #0x800
+ str r1, [sp, #0x0]
+ ldr r0, _020A0034 ; =helper_threads_priority
+ ldr r1, _020A0038 ; =tcpip
+ ldr r4, [r0, #0x0]
+ ldr r0, _020A003C ; =tcpip_thread
+ ldr r3, _020A0040 ; =tcpip_stack+0x800
+ str r4, [sp, #0x4]
+ bl OS_CreateThread
+ mov r1, #0x800
+ ldr r0, _020A0034 ; =helper_threads_priority
+ str r1, [sp, #0x0]
+ ldr r1, [r0, #0x0]
+ ldr r0, _020A0044 ; =scavenger_thread
+ str r1, [sp, #0x4]
+ ldr r1, _020A0048 ; =scavenger
+ ldr r3, _020A004C ; =scavenger_stack+0x800
+ mov r2, #0x0
+ bl OS_CreateThread
+ ldr r0, _020A003C ; =tcpip_thread
+ bl OS_WakeupThreadDirect
+ ldr r0, _020A0044 ; =scavenger_thread
+ bl OS_WakeupThreadDirect
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,lr}
+ bx lr
+ .balign 4
+_0209FFD4: .word _SDK_UbiquitousCPS
+_0209FFD8: .word CPSiRand32ctx
+_0209FFDC: .word 0x6C078965
+_0209FFE0: .word 0x5D588B65
+_0209FFE4: .word 0x00269EC3
+_0209FFE8: .word CPSiAlloc
+_0209FFEC: .word CPSiFree
+_0209FFF0: .word empty_func
+_0209FFF4: .word mode
+_0209FFF8: .word mymss
+_0209FFFC: .word 0x000005B4
+_020A0000: .word offered_myip
+_020A0004: .word yield_wait
+_020A0008: .word dhcp_callback
+_020A000C: .word link_is_on
+_020A0010: .word default_link_is_on
+_020A0014: .word 0x00000F88
+_020A0018: .word wlan_buf
+_020A001C: .word wlan_buflen
+_020A0020: .word wlan_getpnt
+_020A0024: .word wlan_putpnt
+_020A0028: .word eport
+_020A002C: .word CPSMyMac
+_020A0030: .word ip_conflict
+_020A0034: .word helper_threads_priority
+_020A0038: .word tcpip
+_020A003C: .word tcpip_thread
+_020A0040: .word tcpip_stack+0x800
+_020A0044: .word scavenger_thread
+_020A0048: .word scavenger
+_020A004C: .word scavenger_stack+0x800
+
+ arm_func_start default_link_is_on
+default_link_is_on: ; 0x020A0050
+ mov r0, #0x1
+ bx lr
+
+ arm_func_start empty_func
+empty_func: ; 0x020A0058
+ bx lr
+
+ arm_func_start OS_YieldThread__
+OS_YieldThread__:
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020A0094 ; =yield_wait
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020A0084
+ bl OS_YieldThread
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+_020A0084:
+ bl OS_Sleep
+ add sp, sp, #0x4
+ ldmia sp!, {lr}
+ bx lr
+ .balign 4
+_020A0094: .word yield_wait
+
+ arm_func_start reset_network_vars
+reset_network_vars: ; 0x020A0098
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r1, _020A01B8 ; =CPSMyIp
+ ldr r5, _020A01BC ; =CPSNoIpReason
+ ldr r1, [r1, #0x0]
+ ldr r3, _020A01C0 ; =CPSDnsIp
+ cmp r1, #0x0
+ mov r1, #0x0
+ movne r6, #0x1
+ ldr ip, _020A01C4 ; =CPSNetMask
+ ldr r2, _020A01C8 ; =CPSDhcpServerIp
+ moveq r6, #0x0
+ ldr lr, _020A01B8 ; =CPSMyIp
+ ldr r4, _020A01CC ; =CPSGatewayIp
+ cmp r6, #0x0
+ str r1, [r12, #0x0]
+ str r1, [r3, #0x0]
+ str r1, [r3, #0x4]
+ str r1, [r2, #0x0]
+ addeq sp, sp, #0x4
+ str r0, [r5, #0x0]
+ str r1, [lr, #0x0]
+ str r1, [r4, #0x0]
+ ldmeqia sp!, {r4-r7,lr}
+ bxeq lr
+ ldr r0, _020A01D0 ; =arpcache
+ mov r2, #0x60
+ bl MI_CpuFill8
+ ldr r0, _020A01D4 ; =OSi_ThreadInfo
+ ldr r5, [r0, #0x8]
+ cmp r5, #0x0
+ beq _020A016C
+ mov r4, #0x0
+_020A011C:
+ ldr r1, [r5, #0xa4]
+ cmp r1, #0x0
+ beq _020A0160
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ beq _020A0160
+ ldrb r0, [r1, #0x8]
+ cmp r0, #0xa
+ beq _020A0148
+ cmp r0, #0xb
+ strneb r4, [r1, #0x8]
+_020A0148:
+ ldr r0, [r1, #0x4]
+ cmp r0, #0x0
+ beq _020A0160
+ str r4, [r1, #0x4]
+ ldr r0, [r1, #0x0]
+ bl OS_WakeupThreadDirect
+_020A0160:
+ ldr r5, [r5, #0x68]
+ cmp r5, #0x0
+ bne _020A011C
+_020A016C:
+ ldr r6, _020A01D8 ; =fragtable
+ mov r7, #0x0
+ ldr r4, _020A01DC ; =CPSiFree
+ mov r5, r7
+_020A017C:
+ ldrh r0, [r6, #0x4]
+ cmp r0, #0x0
+ beq _020A0198
+ ldr r0, [r6, #0x34]
+ ldr r1, [r4, #0x0]
+ blx r1
+ strh r5, [r6, #0x4]
+_020A0198:
+ add r7, r7, #0x1
+ cmp r7, #0x8
+ add r6, r6, #0x38
+ blt _020A017C
+ bl CPSi_SslCleanup
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,lr}
+ bx lr
+ .balign 4
+_020A01B8: .word CPSMyIp
+_020A01BC: .word CPSNoIpReason
+_020A01C0: .word CPSDnsIp
+_020A01C4: .word CPSNetMask
+_020A01C8: .word CPSDhcpServerIp
+_020A01CC: .word CPSGatewayIp
+_020A01D0: .word arpcache
+_020A01D4: .word OSi_ThreadInfo
+_020A01D8: .word fragtable
+_020A01DC: .word CPSiFree
diff --git a/arm9/asm/SSL_ssl.s b/arm9/asm/SSL_ssl.s
index af10aec2..4605b1e8 100644
--- a/arm9/asm/SSL_ssl.s
+++ b/arm9/asm/SSL_ssl.s
@@ -66,142 +66,6 @@ UNK_021062A8: ; 0x021062A8
.section .bss
- .global CPSiAlloc
-CPSiAlloc: ; 0x021C8EC8
- .space 0x4
-
- .global UNK_021C8ECC
-UNK_021C8ECC: ; 0x021C8ECC
- .space 0x4
-
- .global UNK_021C8ED0
-UNK_021C8ED0: ; 0x021C8ED0
- .space 0x4
-
- .global UNK_021C8ED4
-UNK_021C8ED4: ; 0x021C8ED4
- .space 0x4
-
- .global UNK_021C8ED8
-UNK_021C8ED8: ; 0x021C8ED8
- .space 0x4
-
- .global UNK_021C8EDC
-UNK_021C8EDC: ; 0x021C8EDC
- .space 0x4
-
- .global UNK_021C8EE0
-UNK_021C8EE0: ; 0x021C8EE0
- .space 0x4
-
- .global UNK_021C8EE4
-UNK_021C8EE4: ; 0x021C8EE4
- .space 0x4
-
- .global UNK_021C8EE8
-UNK_021C8EE8: ; 0x021C8EE8
- .space 0x4
-
- .global UNK_021C8EEC
-UNK_021C8EEC: ; 0x021C8EEC
- .space 0x4
-
- .global UNK_021C8EF0
-UNK_021C8EF0: ; 0x021C8EF0
- .space 0x4
-
- .global CPSiFree
-CPSiFree: ; 0x021C8EF4
- .space 0x4
-
- .global UNK_021C8EF8
-UNK_021C8EF8: ; 0x021C8EF8
- .space 0x4
-
- .global UNK_021C8EFC
-UNK_021C8EFC: ; 0x021C8EFC
- .space 0x4
-
- .global UNK_021C8F00
-UNK_021C8F00: ; 0x021C8F00
- .space 0x4
-
- .global UNK_021C8F04
-UNK_021C8F04: ; 0x021C8F04
- .space 0x4
-
- .global UNK_021C8F08
-UNK_021C8F08: ; 0x021C8F08
- .space 0x4
-
- .global UNK_021C8F0C
-UNK_021C8F0C: ; 0x021C8F0C
- .space 0x4
-
- .global UNK_021C8F10
-UNK_021C8F10: ; 0x021C8F10
- .space 0x4
-
- .global UNK_021C8F14
-UNK_021C8F14: ; 0x021C8F14
- .space 0x8
-
- .global UNK_021C8F1C
-UNK_021C8F1C: ; 0x021C8F1C
- .space 0x8
-
- .global CPSiRand32ctx
-CPSiRand32ctx: ; 0x021C8F24
- .space 0x3a
-
- .global UNK_021C8F5E
-UNK_021C8F5E: ; 0x021C8F5E
- .space 0x1a
-
- .global UNK_021C8F78
-UNK_021C8F78: ; 0x021C8F78
- .space 0xa
-
- .global UNK_021C8F82
-UNK_021C8F82: ; 0x021C8F82
- .space 0x56
-
- .global UNK_021C8FD8
-UNK_021C8FD8: ; 0x021C8FD8
- .space 0x64
-
- .global UNK_021C903C
-UNK_021C903C: ; 0x021C903C
- .space 0x64
-
- .global UNK_021C90A0
-UNK_021C90A0: ; 0x021C90A0
- .space 0xc0
-
- .global UNK_021C9160
-UNK_021C9160: ; 0x021C9160
- .space 0xc0
-
- .global UNK_021C9220
-UNK_021C9220: ; 0x021C9220
- .space 0x2a
-
- .global UNK_021C924A
-UNK_021C924A: ; 0x021C924A
- .space 0x156
-
- .global UNK_021C93A0
-UNK_021C93A0: ; 0x021C93A0
- .space 0x180
-
- .global UNK_021C9520
-UNK_021C9520: ; 0x021C9520
- .space 0x9c0
-
- .global UNK_021C9EE0
-UNK_021C9EE0: ; 0x021C9EE0
- .space 0x800
-
.global pool_initialized
pool_initialized: ; 0x021CA6E0
.space 0x4
@@ -815,7 +679,7 @@ CPSi_SslListen: ; 0x020A09CC
mov r6, #0x1
_020A09EC:
mov r0, r9
- bl FUN_0209CAC4
+ bl CPSi_TcpListenRaw
strb r7, [r8, #0x455]
str r7, [r8, #0x1d4]
mov r0, r5
diff --git a/arm9/asm/libVCT.s b/arm9/asm/libVCT.s
index 58e54290..f0a9d36e 100644
--- a/arm9/asm/libVCT.s
+++ b/arm9/asm/libVCT.s
@@ -5505,8 +5505,8 @@ _020A8628:
_020A863C: .word UNK_021CA870
_020A8640: .word UNK_021CA874
- arm_func_start FUN_020A8644
-FUN_020A8644:
+ arm_func_start WCM_SendDCFData
+WCM_SendDCFData:
stmdb sp!, {r4-r8,lr}
mov r8, r0
mov r7, r1
diff --git a/arm9/asm/unk_020910EC.s b/arm9/asm/unk_020910EC.s
index 4fe1b53c..f95f89a5 100644
--- a/arm9/asm/unk_020910EC.s
+++ b/arm9/asm/unk_020910EC.s
@@ -110,23 +110,6 @@ UNK_021061F4: ; 0x021061F4
UNK_0210620C: ; 0x0210620C
.byte 0x25, 0x64, 0x2E, 0x25, 0x64, 0x2E, 0x25, 0x64, 0x2E, 0x25, 0x64, 0x00
- .global UNK_02106218
-UNK_02106218: ; 0x02106218
- .byte 0x10, 0x00, 0x00, 0x00
-
- .global UNK_0210621C
-UNK_0210621C: ; 0x0210621C
- .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00
-
- .global UNK_02106224
-UNK_02106224: ; 0x02106224
- .asciz "NintendoDS"
-
- .balign 4, 0
- .global UNK_02106230
-UNK_02106230: ; 0x02106230
- .byte 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00
-
.section .bss
.global UNK_021C8C78
@@ -241,38 +224,6 @@ UNK_021C8D6C: ; 0x021C8D6C
UNK_021C8DA4: ; 0x021C8DA4
.space 0x104
- .global UNK_021C8EA8
-UNK_021C8EA8: ; 0x021C8EA8
- .space 0x4
-
- .global UNK_021C8EAC
-UNK_021C8EAC: ; 0x021C8EAC
- .space 0x4
-
- .global UNK_021C8EB0
-UNK_021C8EB0: ; 0x021C8EB0
- .space 0x4
-
- .global UNK_021C8EB4
-UNK_021C8EB4: ; 0x021C8EB4
- .space 0x4
-
- .global UNK_021C8EB8
-UNK_021C8EB8: ; 0x021C8EB8
- .space 0x4
-
- .global UNK_021C8EBC
-UNK_021C8EBC: ; 0x021C8EBC
- .space 0x4
-
- .global UNK_021C8EC0
-UNK_021C8EC0: ; 0x021C8EC0
- .space 0x4
-
- .global UNK_021C8EC4
-UNK_021C8EC4: ; 0x021C8EC4
- .space 0x4
-
.text
; Nintendo DWC
@@ -7597,14 +7548,14 @@ FUN_020975F0: ; 0x020975F0
ldr lr, [r1, #0x0]
ldr r3, [r0, #0x0]
ldr r12, [lr, #0x4]
- ldr r2, _0209765C ; =UNK_021C8F04
- ldr r1, _02097660 ; =UNK_021C8ED0
+ ldr r2, _0209765C ; =CPSMyIp
+ ldr r1, _02097660 ; =CPSNetMask
str r12, [r2, #0x0]
ldr r12, [lr, #0x8]
- ldr r2, _02097664 ; =UNK_021C8EE0
+ ldr r2, _02097664 ; =CPSGatewayIp
str r12, [r1, #0x0]
ldr r12, [lr, #0xc]
- ldr r1, _02097668 ; =UNK_021C8F1C
+ ldr r1, _02097668 ; =CPSDnsIp
str r12, [r2, #0x0]
ldr r12, [lr, #0x10]
orr r2, r3, #0x2
@@ -7618,10 +7569,10 @@ FUN_020975F0: ; 0x020975F0
.balign 4
_02097654: .word UNK_021C8CC0
_02097658: .word UNK_021C8CCC
-_0209765C: .word UNK_021C8F04
-_02097660: .word UNK_021C8ED0
-_02097664: .word UNK_021C8EE0
-_02097668: .word UNK_021C8F1C
+_0209765C: .word CPSMyIp
+_02097660: .word CPSNetMask
+_02097664: .word CPSGatewayIp
+_02097668: .word CPSDnsIp
arm_func_start FUN_0209766C
FUN_0209766C: ; 0x0209766C
@@ -7674,7 +7625,7 @@ _02097700:
str r2, [r5, #0x24]
ldr r1, _020977D0 ; =UNK_021061DC
mov r3, r0, asr #0x1
- ldr r0, _020977D4 ; =UNK_021C8F04
+ ldr r0, _020977D4 ; =CPSMyIp
mov r2, #0x0
strh r12, [r1, #0x2]
strh r3, [r1, #0x4]
@@ -7703,13 +7654,13 @@ _0209778C:
ldr r0, [r4, #0x2c]
cmp r0, #0x0
moveq r0, #0xb
- bl FUN_0209FC88
- ldr r0, _020977E8 ; =FUN_0209F65C
+ bl CPS_SetThreadPriority
+ ldr r0, _020977E8 ; =CPSi_RecvCallbackFunc
bl FUN_020A87BC
ldr r0, _020977EC ; =FUN_020996C0
- bl FUN_0209FD24
+ bl CPS_SetScavengerCallback
mov r0, r5
- bl FUN_0209FD94
+ bl CPS_Startup
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
@@ -7719,12 +7670,12 @@ _020977C4: .word UNK_021C8CD4
_020977C8: .word UNK_021C8CC4
_020977CC: .word FUN_020975B4
_020977D0: .word UNK_021061DC
-_020977D4: .word UNK_021C8F04
+_020977D4: .word CPSMyIp
_020977D8: .word UNK_021C8CCC
_020977DC: .word FUN_020975D8
_020977E0: .word UNK_021C8CC8
_020977E4: .word FUN_020975F0
-_020977E8: .word FUN_0209F65C
+_020977E8: .word CPSi_RecvCallbackFunc
_020977EC: .word FUN_020996C0
arm_func_start FUN_020977F0
@@ -8276,7 +8227,7 @@ FUN_02097EF8: ; 0x02097EF8
stmdb sp!, {r4,lr}
ldr r4, [r0, #0x4]
mov r0, r4
- bl FUN_0209CC28
+ bl CPS_SocRegister
ldrsb r0, [r4, #0x73]
ldr r1, [r4, #0x68]
cmp r0, #0x4
@@ -8294,17 +8245,17 @@ _02097F2C:
b _02097F30
_02097F30:
add r0, r1, #0x20
- bl FUN_0209CB0C
- bl FUN_0209CB44
+ bl CPS_SocDup
+ bl CPS_SocUse
b _02097F58
_02097F40:
- bl FUN_0209CB44
- bl FUN_0209CBE8
+ bl CPS_SocUse
+ bl CPS_SocDatagramMode
ldr r0, _02097F6C ; =FUN_02098550
- bl FUN_0209CAA8
+ bl CPS_SetUdpCallback
b _02097F58
_02097F54:
- bl FUN_0209CBE8
+ bl CPS_SocDatagramMode
_02097F58:
mov r0, #0x1
strh r0, [r4, #0x70]
@@ -8347,13 +8298,13 @@ FUN_02097FB4: ; 0x02097FB4
mov r1, #0x0
ldrh r0, [r6, #0x10]
mov r2, r1
- bl FUN_0209CB78
- bl FUN_0209CA54
+ bl CPS_SocPingMode
+ bl CPS_TcpListen
mov r2, #0x0
add r0, sp, #0x0
add r1, sp, #0x4
str r2, [r5, #0xf8]
- bl FUN_0209C8E0
+ bl CPS_SocWho
ldrh r2, [sp, #0x0]
ldr r1, [r6, #0x14]
strh r2, [r1, #0x0]
@@ -8564,7 +8515,7 @@ FUN_020982C4: ; 0x020982C4
ldrh r0, [r7, #0x10]
ldrh r1, [r7, #0x12]
ldr r2, [r7, #0x14]
- bl FUN_0209CB78
+ bl CPS_SocPingMode
mov r0, r5
str r0, [r6, #0xf8]
ldrsb r0, [r7, #0xc]
@@ -8573,7 +8524,7 @@ FUN_020982C4: ; 0x020982C4
cmp r0, #0x4
bne _02098318
_02098310:
- bl FUN_0209C934
+ bl CPS_TcpConnect
mov r5, r0
_02098318:
add r0, r6, #0xe0
@@ -8923,7 +8874,7 @@ FUN_020987C0: ; 0x020987C0
mov r1, #0x0
mov r0, r4
str r1, [r6, #0xf8]
- bl FUN_0209C52C
+ bl CPS_SocConsume
_020987EC:
mov r0, r5
bl OS_RestoreInterrupts
@@ -8985,7 +8936,7 @@ FUN_02098868: ; 0x02098868
mov r4, #0xa
_020988A8:
mov r0, r11
- bl FUN_0209C638
+ bl CPS_SocRead
cmp r0, #0x0
beq _02098904
ldr r1, [sp, #0x10]
@@ -9025,7 +8976,7 @@ _02098904:
mov r2, r10
bl MI_CpuCopy8
mov r0, r10
- bl FUN_0209C52C
+ bl CPS_SocConsume
add sp, sp, #0x14
mov r0, r10
ldmia sp!, {r4-r11,lr}
@@ -9526,7 +9477,7 @@ _02099008:
beq _02099020
ldrh r0, [r8, #0x24]
ldrh r1, [r8, #0x26]
- bl FUN_0209CB78
+ bl CPS_SocPingMode
_02099020:
ldrsb r1, [r7, #0x73]
mov r0, #0x1
@@ -9562,7 +9513,7 @@ _02099078:
cmp r1, #0x0
ble _020990E0
mov r0, r5
- bl FUN_0209C030
+ bl CPS_SocWrite
cmp r0, #0x0
bgt _020990D4
ldrsb r0, [r7, #0x73]
@@ -9668,7 +9619,7 @@ _020991D8:
ldrh r0, [r9, #0x74]
cmp r0, #0x0
bne _02099224
- bl FUN_0209CC8C
+ bl CPS_SocGetEport
strh r0, [r9, #0x74]
ldrh r0, [r9, #0x74]
strh r0, [r9, #0xa]
@@ -9943,7 +9894,7 @@ FUN_0209959C: ; 0x0209959C
_020995C0:
cmp r1, #0x0
beq _020995CC
- bl FUN_0209C840
+ bl CPS_TcpShutdown
_020995CC:
mov r0, #0x0
add sp, sp, #0x4
@@ -10184,11 +10135,11 @@ _020998E8:
ldr r0, [r4, #0x68]
add r0, r0, #0x20
bl OS_JoinThread
- bl FUN_0209C840
- bl FUN_0209C7AC
- bl FUN_0209CB24
+ bl CPS_TcpShutdown
+ bl CPS_TcpClose
+ bl CPS_SocRelease
_02099908:
- bl FUN_0209CC10
+ bl CPS_SocUnRegister
ldrsh r0, [r4, #0x70]
mov r1, #0x0
bic r0, r0, #0x6
@@ -10324,7 +10275,7 @@ _02099AE0:
bl FUN_020996C0
b _02099B04
_02099AE8:
- bl FUN_0209FD34
+ bl CPS_CalmDown
cmp r0, #0x0
mvneq r4, #0x19
beq _02099B04
@@ -10401,7 +10352,7 @@ FUN_02099BC8: ; 0x02099BC8
ldr r1, _02099C68 ; =UNK_021C8CC8
ldr r0, [r1, #0x0]
cmp r0, #0x0
- ldreq r0, _02099C6C ; =UNK_021C8F04
+ ldreq r0, _02099C6C ; =CPSMyIp
ldreq r0, [r0, #0x0]
streq r0, [r1, #0x0]
bl FUN_02099A94
@@ -10419,9 +10370,9 @@ _02099C10:
bl FUN_02097B14
movs r4, r0
bmi _02099C58
- bl FUN_0209FCC4
+ bl CPS_Cleanup
mov r0, #0x0
- bl FUN_0209FD24
+ bl CPS_SetScavengerCallback
ldr r0, _02099C70 ; =UNK_021C8CC0
ldr r1, [r0, #0x0]
ldr r0, [r1, #0x28]
@@ -10442,7 +10393,7 @@ _02099C58:
bx lr
.balign 4
_02099C68: .word UNK_021C8CC8
-_02099C6C: .word UNK_021C8F04
+_02099C6C: .word CPSMyIp
_02099C70: .word UNK_021C8CC0
_02099C74: .word UNK_021C8CD4
@@ -10450,7 +10401,7 @@ _02099C74: .word UNK_021C8CD4
FUN_02099C78:
stmdb sp!, {lr}
sub sp, sp, #0x4
- ldr r0, _02099CE0 ; =UNK_021C8F04
+ ldr r0, _02099CE0 ; =CPSMyIp
ldr r2, [r0, #0x0]
cmp r2, #0x0
bne _02099CBC
@@ -10471,13 +10422,13 @@ _02099CBC:
cmp r1, #0x0
streq r2, [r0, #0x0]
_02099CCC:
- ldr r0, _02099CE0 ; =UNK_021C8F04
+ ldr r0, _02099CE0 ; =CPSMyIp
ldr r0, [r0, #0x0]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
-_02099CE0: .word UNK_021C8F04
+_02099CE0: .word CPSMyIp
_02099CE4: .word UNK_021C8CCC
_02099CE8: .word UNK_021C8CC8
@@ -10489,7 +10440,7 @@ FUN_02099CEC: ; 0x02099CEC
mov r4, r1
bl FUN_02099C78
cmp r0, #0x0
- ldrne r1, _02099D24 ; =UNK_021C8F1C
+ ldrne r1, _02099D24 ; =CPSDnsIp
mvneq r0, #0x26
movne r0, #0x0
strne r5, [r1, #0x0]
@@ -10498,7 +10449,7 @@ FUN_02099CEC: ; 0x02099CEC
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
-_02099D24: .word UNK_021C8F1C
+_02099D24: .word CPSDnsIp
arm_func_start FUN_02099D28
FUN_02099D28:
@@ -10506,7 +10457,7 @@ FUN_02099D28:
sub sp, sp, #0x4
mov r4, r0
bl OS_DisableInterrupts
- ldr r1, _02099D84 ; =UNK_021C8F1C
+ ldr r1, _02099D84 ; =CPSDnsIp
mov r5, r0
ldr r7, [r1, #0x0]
mov r2, #0x0
@@ -10514,8 +10465,8 @@ FUN_02099D28:
mov r0, r4
str r2, [r1, #0x0]
str r2, [r1, #0x4]
- bl FUN_0209AB80
- ldr r1, _02099D84 ; =UNK_021C8F1C
+ bl CPS_Resolve
+ ldr r1, _02099D84 ; =CPSDnsIp
mov r4, r0
mov r0, r5
str r7, [r1, #0x0]
@@ -10526,7 +10477,7 @@ FUN_02099D28:
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
-_02099D84: .word UNK_021C8F1C
+_02099D84: .word CPSDnsIp
arm_func_start FUN_02099D88
FUN_02099D88: ; 0x02099D88
@@ -10559,11 +10510,11 @@ FUN_02099D88: ; 0x02099D88
str r3, [sp, #0x3c]
str r2, [sp, #0x4c]
str r1, [sp, #0x48]
- bl FUN_0209CC28
+ bl CPS_SocRegister
mov r0, r4
- bl FUN_0209AB80
+ bl CPS_Resolve
mov r4, r0
- bl FUN_0209CC10
+ bl CPS_SocUnRegister
ldr r1, _02099E34 ; =UNK_021C8CC0
mov r0, r5
ldr r1, [r1, #0x0]
@@ -10925,9 +10876,6 @@ FUN_0209A224: ; 0x0209A224
arm_func_start FUN_0209A27C
FUN_0209A27C: ; 0x0209A27C
stmdb sp!, {r0-r3}
-
- arm_func_start FUN_0209A280
-FUN_0209A280: ; 0x0209A280
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r2, _0209A2B0 ; =UNK_021C8D5C
@@ -11594,6238 +11542,3 @@ _0209AB3C:
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
-
- arm_func_start FUN_0209AB80
-FUN_0209AB80: ; 0x0209AB80
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0xc
- ldr r6, _0209ACC0 ; =CPSiRand32ctx
- mov r9, #0x0
- ldr r11, [r6, #0x8]
- ldr r2, [r6, #0x0]
- ldr r1, [r6, #0x4]
- umull r5, r4, r11, r2
- mla r4, r11, r1, r4
- ldr r10, [r6, #0xc]
- ldr r3, [r6, #0x10]
- mla r4, r10, r2, r4
- adds r5, r3, r5
- ldr r1, [r6, #0x14]
- umull r8, r7, r11, r5
- adc r4, r1, r4
- mla r7, r11, r4, r7
- mla r7, r10, r5, r7
- mov r2, r9, lsl #0x10
- adds r8, r3, r8
- str r5, [r6, #0x0]
- adc r5, r1, r7
- mov r3, r9, lsl #0x10
- orr r2, r2, r4, lsr #0x10
- str r4, [r6, #0x4]
- orr r3, r3, r5, lsr #0x10
- add r1, sp, #0x4
- mov r10, r0
- strh r2, [sp, #0x8]
- str r8, [r6, #0x0]
- str r5, [r6, #0x4]
- strh r3, [sp, #0xa]
- bl FUN_0209AD34
- cmp r0, #0x0
- ldrne r0, [sp, #0x4]
- addne sp, sp, #0xc
- ldmneia sp!, {r4-r11,lr}
- bxne lr
- mov r0, #0x1
- ldr r6, _0209ACC4 ; =UNK_021C8F1C
- strb r0, [sp, #0x0]
- strb r0, [sp, #0x1]
- add r5, sp, #0x8
- mov r4, r9
- mov r11, r9
-_0209AC34:
- mov r8, r11
- add r7, sp, #0x0
-_0209AC3C:
- ldrb r0, [r7, #0x0]
- cmp r0, #0x0
- beq _0209AC80
- mov r0, r8, lsl #0x1
- ldrh r2, [r5, r0]
- ldr r1, [r6, r8, lsl #0x2]
- mov r0, r10
- bl FUN_0209ACC8
- str r0, [sp, #0x4]
- cmp r0, #0x0
- beq _0209AC74
- mvn r1, #0x0
- cmp r0, r1
- bne _0209AC9C
-_0209AC74:
- mvn r1, #0x0
- cmp r0, r1
- streqb r4, [r7, #0x0]
-_0209AC80:
- add r8, r8, #0x1
- cmp r8, #0x2
- add r7, r7, #0x1
- blt _0209AC3C
- add r9, r9, #0x1
- cmp r9, #0x3
- blt _0209AC34
-_0209AC9C:
- ldr r1, [sp, #0x4]
- mvn r0, #0x0
- cmp r1, r0
- moveq r0, #0x0
- streq r0, [sp, #0x4]
- ldr r0, [sp, #0x4]
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_0209ACC0: .word CPSiRand32ctx
-_0209ACC4: .word UNK_021C8F1C
-
- arm_func_start FUN_0209ACC8
-FUN_0209ACC8: ; 0x0209ACC8
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x8
- movs r5, r1
- mov r6, r0
- mov r4, r2
- addeq sp, sp, #0x8
- mvneq r0, #0x0
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- bl FUN_0209CB44
- bl FUN_0209CBE8
- mov r2, r5
- mov r0, #0x0
- mov r1, #0x35
- bl FUN_0209CB78
- mov r0, r6
- mov r2, r4
- mov r3, #0x0
- str r3, [sp, #0x0]
- mov r1, #0x1
- bl FUN_0209AE18
- mov r4, r0
- bl FUN_0209CB24
- mov r0, r4
- add sp, sp, #0x8
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start FUN_0209AD34
-FUN_0209AD34:
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x8
- mov r6, #0x0
- mov r8, r0
- mov r7, r1
- mov r5, r6
- add r4, sp, #0x0
-_0209AD50:
- mov r0, r8
- mov r1, r4
- mov r6, r6, lsl #0x8
- bl FUN_0209ADE4
- ldr r2, [sp, #0x0]
- cmp r8, r2
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- mov r8, r2
- cmp r0, #0xff
- bhi _0209ADB0
- cmp r5, #0x3
- beq _0209AD9C
- ldrb r1, [r2, #0x0]
- add r8, r2, #0x1
- cmp r1, #0x2e
- bne _0209ADB0
-_0209AD9C:
- cmp r5, #0x3
- bne _0209ADC0
- ldrb r1, [r8, #0x0]
- cmp r1, #0x0
- beq _0209ADC0
-_0209ADB0:
- add sp, sp, #0x8
- mov r0, #0x0
- ldmia sp!, {r4-r8,lr}
- bx lr
-_0209ADC0:
- add r5, r5, #0x1
- cmp r5, #0x4
- orr r6, r6, r0
- blt _0209AD50
- str r6, [r7, #0x0]
- mov r0, #0x1
- add sp, sp, #0x8
- ldmia sp!, {r4-r8,lr}
- bx lr
-
- arm_func_start FUN_0209ADE4
-FUN_0209ADE4: ; 0x0209ADE4
- str r0, [r1, #0x0]
- mov r12, #0x0
- mov r2, #0xa
-_0209ADF0:
- ldrb r3, [r0, #0x0]
- sub r3, r3, #0x30
- and r3, r3, #0xff
- cmp r3, #0x9
- mlals r12, r2, r12, r3
- addls r0, r0, #0x1
- strls r0, [r1, #0x0]
- bls _0209ADF0
- mov r0, r12
- bx lr
-
- arm_func_start FUN_0209AE18
-FUN_0209AE18: ; 0x0209AE18
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4c
- mov r9, r2
- mov r2, r9, asr #0x8
- mov r10, r1
- orr r1, r2, r9, lsl #0x8
- strh r1, [sp, #0x10]
- cmp r10, #0x20
- mov r5, #0x0
- movne r1, #0x1
- strneh r1, [sp, #0x12]
- ldreq r1, _0209B0C8 ; =0x00001001
- strh r5, [sp, #0x16]
- streqh r1, [sp, #0x12]
- mov r1, #0x100
- strh r1, [sp, #0x14]
- add r1, sp, #0x1c
- strh r5, [sp, #0x18]
- strh r5, [sp, #0x1a]
- str r5, [sp, #0xc]
- ldrb r6, [r0], #0x1
- str r3, [sp, #0x0]
- ldr r8, [sp, #0x70]
- add r2, r1, #0x1
- cmp r6, #0x0
- beq _0209AED8
- add r4, sp, #0x10
-_0209AE84:
- cmp r6, #0x2e
- beq _0209AEB8
- sub r3, r2, r4
- cmp r3, #0x3c
- addge sp, sp, #0x4c
- mvnge r0, #0x0
- ldmgeia sp!, {r4-r11,lr}
- bxge lr
- strb r6, [r2], #0x1
- ldr r3, [sp, #0xc]
- add r3, r3, #0x1
- str r3, [sp, #0xc]
- b _0209AECC
-_0209AEB8:
- ldr r3, [sp, #0xc]
- strb r3, [r1, #0x0]
- mov r1, r2
- str r5, [sp, #0xc]
- add r2, r2, #0x1
-_0209AECC:
- ldrb r6, [r0], #0x1
- cmp r6, #0x0
- bne _0209AE84
-_0209AED8:
- ldr r0, [sp, #0xc]
- mov r3, #0x0
- strb r0, [r1, #0x0]
- strb r3, [r2, #0x0]
- mov r0, r10, lsr #0x8
- strb r0, [r2, #0x1]
- strb r10, [r2, #0x2]
- strb r3, [r2, #0x3]
- mov r3, #0x1
- add r0, sp, #0x10
- add r1, r2, #0x5
- sub r1, r1, r0
- strb r3, [r2, #0x4]
- bl FUN_0209C030
- mov r6, #0x0
- bl OS_GetTick
- mov r5, r0, lsr #0x10
- mov r0, #0x2
- str r0, [sp, #0x8]
- mov r0, #0x1
- orr r5, r5, r1, lsl #0x10
- str r0, [sp, #0x4]
- mvn r11, #0x0
- b _0209B084
-_0209AF38:
- bl FUN_0209BF9C
- cmp r0, #0x0
- bne _0209AF4C
- bl FUN_020A005C
- b _0209B084
-_0209AF4C:
- add r0, sp, #0xc
- bl FUN_0209C638
- ldr r1, [sp, #0xc]
- cmp r1, #0xc
- bls _0209B07C
- ldrh r3, [r0, #0x0]
- mov r2, r3, asr #0x8
- orr r2, r2, r3, lsl #0x8
- mov r2, r2, lsl #0x10
- cmp r9, r2, lsr #0x10
- bne _0209B07C
- ldrb r2, [r0, #0x3]
- and r2, r2, #0xf
- cmp r2, #0x3
- moveq r6, r11
- beq _0209B07C
- cmp r2, #0x0
- bne _0209B07C
- ldrb r2, [r0, #0x4]
- add r4, r0, r1
- ldrb r1, [r0, #0x5]
- add r0, r0, #0xc
- orr r1, r1, r2, lsl #0x8
- mov r1, r1, lsl #0x10
- movs r1, r1, lsr #0x10
- sub r7, r1, #0x1
- beq _0209AFCC
-_0209AFB8:
- bl FUN_0209B0D0
- cmp r7, #0x0
- add r0, r0, #0x4
- sub r7, r7, #0x1
- bne _0209AFB8
-_0209AFCC:
- cmp r0, r4
- bhs _0209B07C
-_0209AFD4:
- bl FUN_0209B0D0
- ldrb r7, [r0, #0x8]
- ldrb r1, [r0, #0x9]
- ldrb r3, [r0, #0x0]
- ldrb r2, [r0, #0x1]
- orr r1, r1, r7, lsl #0x8
- mov r1, r1, lsl #0x10
- orr r3, r2, r3, lsl #0x8
- mov r2, r1, lsr #0x10
- mov r1, r3, lsl #0x10
- cmp r10, r1, lsr #0x10
- bne _0209B06C
- cmp r10, #0xc
- beq _0209B04C
- add r1, r0, #0x6
- add r3, r1, r2
- add r4, r0, #0x8
- ldrb r1, [r1, r2]
- ldrb r0, [r3, #0x1]
- add r3, r4, r2
- ldrb r2, [r4, r2]
- orr r0, r0, r1, lsl #0x8
- ldrb r1, [r3, #0x1]
- mov r0, r0, lsl #0x10
- mov r3, r0, lsr #0x10
- orr r0, r1, r2, lsl #0x8
- mov r1, r3, lsl #0x10
- mov r0, r0, lsl #0x10
- orr r6, r1, r0, lsr #0x10
- b _0209B07C
-_0209B04C:
- cmp r2, r8
- ldrhi r6, [sp, #0x8]
- bhi _0209B07C
- ldr r1, [sp, #0x0]
- add r0, r0, #0xa
- bl MI_CpuCopy8
- ldr r6, [sp, #0x4]
- b _0209B07C
-_0209B06C:
- add r1, r2, #0xa
- add r0, r0, r1
- cmp r0, r4
- blo _0209AFD4
-_0209B07C:
- ldr r0, [sp, #0xc]
- bl FUN_0209C52C
-_0209B084:
- ldr r0, _0209B0CC ; =UNK_021C8EFC
- ldr r0, [r0, #0x0]
- blx r0
- cmp r0, #0x0
- beq _0209B0B8
- cmp r6, #0x0
- bne _0209B0B8
- bl OS_GetTick
- mov r0, r0, lsr #0x10
- orr r0, r0, r1, lsl #0x10
- sub r0, r0, r5
- cmp r0, #0xf
- blt _0209AF38
-_0209B0B8:
- mov r0, r6
- add sp, sp, #0x4c
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_0209B0C8: .word 0x00001001
-_0209B0CC: .word UNK_021C8EFC
-
- arm_func_start FUN_0209B0D0
-FUN_0209B0D0:
- ldrb r2, [r0], #0x1
- cmp r2, #0x0
- bxeq lr
-_0209B0DC:
- and r1, r2, #0xc0
- cmp r1, #0xc0
- addeq r0, r0, #0x1
- bxeq lr
- add r0, r0, r2
- ldrb r2, [r0], #0x1
- cmp r2, #0x0
- bne _0209B0DC
- bx lr
-
- arm_func_start FUN_0209B100
-FUN_0209B100: ; 0x0209B100
- stmdb sp!, {r4,lr}
- bl FUN_0209CB44
- bl FUN_0209CBE8
- ldr r1, _0209B168 ; =UNK_021C8ED4
- mov r0, #0x44
- ldr r2, [r1, #0x0]
- mov r1, #0x43
- bl FUN_0209CB78
- ldr r4, _0209B16C ; =UNK_021C924A
- mov r1, #0x7
- mov r0, r4
- mov r2, #0x0
- bl FUN_0209B8E0
- mov r1, #0xff
- add r2, r0, #0x1
- strb r1, [r0, #0x0]
- mov r0, #0x0
- mov r1, #0x12c
- sub r3, r2, r4
- bl FUN_0209B8A0
- sub r1, r0, r4
- mov r0, r4
- bl FUN_0209C030
- bl FUN_0209CB24
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_0209B168: .word UNK_021C8ED4
-_0209B16C: .word UNK_021C924A
-
- arm_func_start FUN_0209B170
-FUN_0209B170:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r4, r1
- mov r5, r0
- bl FUN_0209CB44
- bl FUN_0209CBE8
- cmp r4, #0x1
- bne _0209B1A8
- ldr r1, _0209B28C ; =UNK_021C8ED4
- mov r0, #0x44
- ldr r2, [r1, #0x0]
- mov r1, #0x43
- bl FUN_0209CB78
- b _0209B1B8
-_0209B1A8:
- mov r0, #0x44
- mov r1, #0x43
- mvn r2, #0x0
- bl FUN_0209CB78
-_0209B1B8:
- mov r6, #0x0
-_0209B1BC:
- mov r0, r4
- bl FUN_0209B6BC
- mov r1, r6
- bl FUN_0209B2FC
- movs r7, r0
- bne _0209B1E0
- add r6, r6, #0x1
- cmp r6, #0x4
- blt _0209B1BC
-_0209B1E0:
- bl FUN_0209CB24
- cmp r7, #0x2
- bne _0209B224
- ldr r0, _0209B290 ; =UNK_021C8F00
- mov r1, #0x3
- ldr r3, [r0, #0x0]
- ldr r2, _0209B294 ; =UNK_021C8EEC
- mov r3, r3, lsr #0x1
- str r3, [r5, #0x0]
- ldr r3, [r0, #0x0]
- add sp, sp, #0x4
- mul r1, r3, r1
- mov r1, r1, lsr #0x3
- str r1, [r2, #0x0]
- mov r0, #0x1
- ldmia sp!, {r4-r7,lr}
- bx lr
-_0209B224:
- ldr r1, _0209B294 ; =UNK_021C8EEC
- cmp r4, #0x1
- ldr r0, [r1, #0x0]
- mov r0, r0, lsr #0x1
- str r0, [r1, #0x0]
- str r0, [r5, #0x0]
- beq _0209B24C
- cmp r4, #0x2
- beq _0209B270
- b _0209B27C
-_0209B24C:
- cmp r0, #0x3c
- bhs _0209B27C
- mov r2, #0x1
- ldr r0, _0209B290 ; =UNK_021C8F00
- str r2, [r5, #0x0]
- ldr r0, [r0, #0x0]
- mov r0, r0, lsr #0x3
- str r0, [r1, #0x0]
- b _0209B27C
-_0209B270:
- cmp r0, #0x3c
- movcc r0, #0x1
- strcc r0, [r5, #0x0]
-_0209B27C:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_0209B28C: .word UNK_021C8ED4
-_0209B290: .word UNK_021C8F00
-_0209B294: .word UNK_021C8EEC
-
- arm_func_start FUN_0209B298
-FUN_0209B298:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- bl FUN_0209CB44
- bl FUN_0209CBE8
- mov r0, #0x44
- mov r1, #0x43
- mvn r2, #0x0
- bl FUN_0209CB78
- mov r4, #0x0
-_0209B2BC:
- bl FUN_0209B7D8
- mov r1, r4
- bl FUN_0209B2FC
- mov r5, r0
- cmp r5, #0x1
- beq _0209B2E0
- add r4, r4, #0x1
- cmp r4, #0x4
- blt _0209B2BC
-_0209B2E0:
- bl FUN_0209CB24
- cmp r5, #0x1
- moveq r0, #0x1
- movne r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start FUN_0209B2FC
-FUN_0209B2FC: ; 0x0209B2FC
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x14
- add r2, r1, #0x1
- mov r1, #0xf
- mul r1, r2, r1
- str r1, [sp, #0x8]
- str r0, [sp, #0x0]
- bl OS_GetTick
- mov r0, r0, lsr #0x10
- str r0, [sp, #0x4]
- orr r0, r0, r1, lsl #0x10
- mov r4, #0x0
- str r0, [sp, #0x4]
- mov r0, #0x3
- mov r9, r4
- ldr r5, _0209B698 ; =UNK_021C8F1C
- mov r7, #0x2
- mov r8, #0x1
- ldr fp, _0209B69C ; =UNK_021C8EE0
- ldr r6, _0209B6A0 ; =UNK_021C8ED0
- str r0, [sp, #0xc]
- b _0209B64C
-_0209B354:
- bl FUN_0209BF9C
- cmp r0, #0x0
- bne _0209B368
- bl FUN_020A005C
- b _0209B64C
-_0209B368:
- add r0, sp, #0x10
- bl FUN_0209C638
- mov r10, r0
- ldr r0, [sp, #0x10]
- cmp r0, #0xf0
- bls _0209B644
- ldrb r0, [r10, #0x0]
- cmp r0, #0x2
- bne _0209B644
- ldrh r1, [r10, #0x6]
- ldrh r2, [r10, #0x4]
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- mov r1, r0, lsl #0x10
- mov r0, r2, asr #0x8
- orr r0, r0, r2, lsl #0x8
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- mov r0, r0, lsl #0x10
- orr r1, r0, r1, lsr #0x10
- ldr r0, [sp, #0x0]
- cmp r0, r1
- bne _0209B644
- ldr r1, _0209B6A4 ; =UNK_021C8F14
- add r0, r10, #0x1c
- bl FUN_0209F9A0
- cmp r0, #0x0
- bne _0209B644
- ldrb r3, [r10, #0x10]
- ldrb r0, [r10, #0x11]
- ldrb r2, [r10, #0x12]
- ldrb r1, [r10, #0x13]
- orr r0, r0, r3, lsl #0x8
- mov r0, r0, lsl #0x10
- orr r1, r1, r2, lsl #0x8
- mov r0, r0, lsr #0x10
- mov r2, r0, lsl #0x10
- mov r0, r1, lsl #0x10
- orr r0, r2, r0, lsr #0x10
- ldrb r2, [r10, #0xec]
- ldr r1, [sp, #0x10]
- ldr r4, [sp, #0xc]
- add r1, r10, r1
- cmp r2, #0x63
- bne _0209B644
- ldrb r2, [r10, #0xed]
- cmp r2, #0x82
- bne _0209B644
- ldrb r2, [r10, #0xee]
- cmp r2, #0x53
- bne _0209B644
- add r2, r10, #0xf0
- ldrb r3, [r10, #0xef]
- cmp r3, #0x63
- bne _0209B644
- b _0209B630
-_0209B448:
- cmp r3, #0x0
- beq _0209B630
- cmp r3, #0x33
- bgt _0209B48C
- cmp r3, #0x33
- bge _0209B588
- cmp r3, #0x6
- bgt _0209B624
- cmp r3, #0x1
- blt _0209B624
- cmp r3, #0x1
- beq _0209B4AC
- cmp r3, #0x3
- beq _0209B4E0
- cmp r3, #0x6
- beq _0209B514
- b _0209B624
-_0209B48C:
- cmp r3, #0x35
- bgt _0209B4A0
- cmp r3, #0x35
- beq _0209B5C0
- b _0209B624
-_0209B4A0:
- cmp r3, #0x36
- beq _0209B5F0
- b _0209B624
-_0209B4AC:
- ldrb lr, [r2, #0x1]
- ldrb r12, [r2, #0x2]
- ldrb r10, [r2, #0x3]
- ldrb r3, [r2, #0x4]
- orr r12, r12, lr, lsl #0x8
- mov r12, r12, lsl #0x10
- orr r3, r3, r10, lsl #0x8
- mov r10, r12, lsr #0x10
- mov r10, r10, lsl #0x10
- mov r3, r3, lsl #0x10
- orr r3, r10, r3, lsr #0x10
- str r3, [r6, #0x0]
- b _0209B624
-_0209B4E0:
- ldrb lr, [r2, #0x1]
- ldrb r12, [r2, #0x2]
- ldrb r10, [r2, #0x3]
- ldrb r3, [r2, #0x4]
- orr r12, r12, lr, lsl #0x8
- mov r12, r12, lsl #0x10
- orr r3, r3, r10, lsl #0x8
- mov r10, r12, lsr #0x10
- mov r10, r10, lsl #0x10
- mov r3, r3, lsl #0x10
- orr r3, r10, r3, lsr #0x10
- str r3, [r11, #0x0]
- b _0209B624
-_0209B514:
- ldrb r3, [r2, #0x0]
- cmp r3, #0x8
- strcc r9, [r5, #0x4]
- blo _0209B554
- ldrb lr, [r2, #0x5]
- ldrb r12, [r2, #0x6]
- ldrb r10, [r2, #0x7]
- ldrb r3, [r2, #0x8]
- orr r12, r12, lr, lsl #0x8
- mov r12, r12, lsl #0x10
- orr r3, r3, r10, lsl #0x8
- mov r10, r12, lsr #0x10
- mov r10, r10, lsl #0x10
- mov r3, r3, lsl #0x10
- orr r3, r10, r3, lsr #0x10
- str r3, [r5, #0x4]
-_0209B554:
- ldrb lr, [r2, #0x1]
- ldrb r12, [r2, #0x2]
- ldrb r10, [r2, #0x3]
- ldrb r3, [r2, #0x4]
- orr r12, r12, lr, lsl #0x8
- mov r12, r12, lsl #0x10
- orr r3, r3, r10, lsl #0x8
- mov r10, r12, lsr #0x10
- mov r10, r10, lsl #0x10
- mov r3, r3, lsl #0x10
- orr r3, r10, r3, lsr #0x10
- str r3, [r5, #0x0]
- b _0209B624
-_0209B588:
- ldrb lr, [r2, #0x1]
- ldrb r12, [r2, #0x2]
- ldrb r10, [r2, #0x3]
- ldrb r3, [r2, #0x4]
- orr r12, r12, lr, lsl #0x8
- mov r12, r12, lsl #0x10
- orr r3, r3, r10, lsl #0x8
- mov r10, r12, lsr #0x10
- mov r10, r10, lsl #0x10
- mov r3, r3, lsl #0x10
- orr r10, r10, r3, lsr #0x10
- ldr r3, _0209B6A8 ; =UNK_021C8F00
- str r10, [r3, #0x0]
- b _0209B624
-_0209B5C0:
- ldrb r3, [r2, #0x1]
- cmp r3, #0x2
- beq _0209B5E0
- cmp r3, #0x5
- ldreq r3, _0209B6AC ; =UNK_021C8F04
- moveq r4, r7
- streq r0, [r3, #0x0]
- b _0209B624
-_0209B5E0:
- ldr r3, _0209B6B0 ; =UNK_021C8EE8
- mov r4, r8
- str r0, [r3, #0x0]
- b _0209B624
-_0209B5F0:
- ldrb lr, [r2, #0x1]
- ldrb r12, [r2, #0x2]
- ldrb r10, [r2, #0x3]
- ldrb r3, [r2, #0x4]
- orr r12, r12, lr, lsl #0x8
- mov r12, r12, lsl #0x10
- orr r3, r3, r10, lsl #0x8
- mov r10, r12, lsr #0x10
- mov r10, r10, lsl #0x10
- mov r3, r3, lsl #0x10
- orr r10, r10, r3, lsr #0x10
- ldr r3, _0209B6B4 ; =UNK_021C8ED4
- str r10, [r3, #0x0]
-_0209B624:
- ldrb r3, [r2, #0x0]
- add r3, r3, #0x1
- add r2, r2, r3
-_0209B630:
- cmp r2, r1
- bhs _0209B644
- ldrb r3, [r2], #0x1
- cmp r3, #0xff
- bne _0209B448
-_0209B644:
- ldr r0, [sp, #0x10]
- bl FUN_0209C52C
-_0209B64C:
- ldr r0, _0209B6B8 ; =UNK_021C8EFC
- ldr r0, [r0, #0x0]
- blx r0
- cmp r0, #0x0
- beq _0209B688
- cmp r4, #0x0
- bne _0209B688
- bl OS_GetTick
- mov r2, r0, lsr #0x10
- ldr r0, [sp, #0x4]
- orr r2, r2, r1, lsl #0x10
- sub r1, r2, r0
- ldr r0, [sp, #0x8]
- cmp r1, r0
- blt _0209B354
-_0209B688:
- mov r0, r4
- add sp, sp, #0x14
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_0209B698: .word UNK_021C8F1C
-_0209B69C: .word UNK_021C8EE0
-_0209B6A0: .word UNK_021C8ED0
-_0209B6A4: .word UNK_021C8F14
-_0209B6A8: .word UNK_021C8F00
-_0209B6AC: .word UNK_021C8F04
-_0209B6B0: .word UNK_021C8EE8
-_0209B6B4: .word UNK_021C8ED4
-_0209B6B8: .word UNK_021C8EFC
-
- arm_func_start FUN_0209B6BC
-FUN_0209B6BC: ; 0x0209B6BC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r4, _0209B7CC ; =UNK_021C924A
- mov r5, r0
- add r2, sp, #0x0
- mov r0, r4
- mov r1, #0x3
- bl FUN_0209B8E0
- mov r12, r0
- cmp r5, #0x0
- bne _0209B790
- mov r0, #0x32
- strb r0, [r12, #0x0]
- mov r0, #0x4
- ldr r3, _0209B7D0 ; =UNK_021C8EE8
- strb r0, [r12, #0x1]
- ldr r1, [r3, #0x0]
- mov lr, #0x36
- mov r1, r1, lsr #0x10
- mov r1, r1, lsl #0x10
- mov r1, r1, lsr #0x10
- mov r1, r1, asr #0x8
- strb r1, [r12, #0x2]
- ldr r1, [r3, #0x0]
- ldr r2, _0209B7D4 ; =UNK_021C8ED4
- mov r1, r1, lsr #0x10
- strb r1, [r12, #0x3]
- ldr r1, [r3, #0x0]
- mov r1, r1, lsl #0x10
- mov r1, r1, lsr #0x10
- mov r1, r1, asr #0x8
- strb r1, [r12, #0x4]
- ldr r1, [r3, #0x0]
- strb r1, [r12, #0x5]
- strb lr, [r12, #0x6]
- strb r0, [r12, #0x7]
- ldr r0, [r2, #0x0]
- mov r0, r0, lsr #0x10
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- mov r0, r0, asr #0x8
- strb r0, [r12, #0x8]
- ldr r0, [r2, #0x0]
- mov r0, r0, lsr #0x10
- strb r0, [r12, #0x9]
- ldr r0, [r2, #0x0]
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- mov r0, r0, asr #0x8
- strb r0, [r12, #0xa]
- ldr r0, [r2, #0x0]
- strb r0, [r12, #0xb]
- add r12, r12, #0xc
-_0209B790:
- add r2, r12, #0x1
- mov lr, #0xff
- sub r3, r2, r4
- mov r0, #0x0
- mov r1, #0x12c
- strb lr, [r12, #0x0]
- bl FUN_0209B8A0
- mov r1, r0
- mov r0, r4
- sub r1, r1, r4
- bl FUN_0209C030
- ldr r0, [sp, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_0209B7CC: .word UNK_021C924A
-_0209B7D0: .word UNK_021C8EE8
-_0209B7D4: .word UNK_021C8ED4
-
- arm_func_start FUN_0209B7D8
-FUN_0209B7D8: ; 0x0209B7D8
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x8
- ldr r4, _0209B898 ; =UNK_021C924A
- add r2, sp, #0x0
- mov r0, r4
- mov r1, #0x1
- bl FUN_0209B8E0
- ldr r1, _0209B89C ; =UNK_021C8EE8
- mov r12, r0
- ldr r0, [r1, #0x0]
- cmp r0, #0x0
- beq _0209B85C
- mov r0, #0x32
- strb r0, [r12, #0x0]
- mov r0, #0x4
- strb r0, [r12, #0x1]
- ldr r0, [r1, #0x0]
- mov r0, r0, lsr #0x10
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- mov r0, r0, asr #0x8
- strb r0, [r12, #0x2]
- ldr r0, [r1, #0x0]
- mov r0, r0, lsr #0x10
- strb r0, [r12, #0x3]
- ldr r0, [r1, #0x0]
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- mov r0, r0, asr #0x8
- strb r0, [r12, #0x4]
- ldr r0, [r1, #0x0]
- strb r0, [r12, #0x5]
- add r12, r12, #0x6
-_0209B85C:
- add r2, r12, #0x1
- mov lr, #0xff
- sub r3, r2, r4
- mov r0, #0x0
- mov r1, #0x12c
- strb lr, [r12, #0x0]
- bl FUN_0209B8A0
- mov r1, r0
- mov r0, r4
- sub r1, r1, r4
- bl FUN_0209C030
- ldr r0, [sp, #0x0]
- add sp, sp, #0x8
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_0209B898: .word UNK_021C924A
-_0209B89C: .word UNK_021C8EE8
-
- arm_func_start FUN_0209B8A0
-FUN_0209B8A0: ; 0x0209B8A0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r12, r0
- mov r5, r2
- cmp r3, r1
- bhs _0209B8D0
- sub r4, r1, r3
- mov r0, r5
- mov r1, r12
- mov r2, r4
- bl MI_CpuFill8
- add r5, r5, r4
-_0209B8D0:
- mov r0, r5
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start FUN_0209B8E0
-FUN_0209B8E0: ; 0x0209B8E0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r1
- mov r4, r2
- mov r1, #0x0
- mov r2, #0xec
- mov r6, r0
- bl MI_CpuFill8
- ldr r0, _0209BA5C ; =0x00000101
- mov r1, #0x6
- strh r0, [r6, #0x0]
- ldr r0, _0209BA60 ; =CPSiRand32ctx
- strb r1, [r6, #0x2]
- ldr r3, [r0, #0x8]
- ldr r2, [r0, #0x0]
- ldr r1, [r0, #0x4]
- umull lr, r12, r3, r2
- mla r12, r3, r1, r12
- ldr r1, [r0, #0xc]
- ldr r7, [r0, #0x10]
- mla r12, r1, r2, r12
- adds r3, r7, lr
- ldr r1, [r0, #0x14]
- str r3, [r0, #0x0]
- adc r1, r1, r12
- str r1, [r0, #0x4]
- mov r0, r1, lsr #0x10
- mov r0, r0, lsl #0x10
- mov r3, r0, lsr #0x10
- cmp r4, #0x0
- mov r2, r3, asr #0x8
- mov r0, r1, lsl #0x10
- strne r1, [r4, #0x0]
- mov r1, r0, lsr #0x10
- orr r2, r2, r3, lsl #0x8
- mov r0, r1, asr #0x8
- strh r2, [r6, #0x4]
- orr r0, r0, r1, lsl #0x8
- strh r0, [r6, #0x6]
- ldr r2, _0209BA64 ; =UNK_021C8F04
- ldr r0, _0209BA68 ; =UNK_021C8F14
- ldr r1, [r2, #0x0]
- mov r1, r1, lsr #0x10
- mov r1, r1, lsl #0x10
- mov r3, r1, lsr #0x10
- mov r1, r3, asr #0x8
- orr r1, r1, r3, lsl #0x8
- strh r1, [r6, #0xc]
- ldr r2, [r2, #0x0]
- add r1, r6, #0x1c
- mov r2, r2, lsl #0x10
- mov r3, r2, lsr #0x10
- mov r2, r3, asr #0x8
- orr r3, r2, r3, lsl #0x8
- mov r2, #0x6
- strh r3, [r6, #0xe]
- bl MI_CpuCopy8
- ldr r0, _0209BA6C ; =0x00008263
- ldr r1, _0209BA70 ; =0x00006353
- strh r0, [r6, #0xec]
- strh r1, [r6, #0xee]
- ldr r0, _0209BA74 ; =0x00000135
- mov r1, #0x7
- strh r0, [r6, #0xf0]
- strb r5, [r6, #0xf2]
- mov r0, #0x3d
- strb r0, [r6, #0xf3]
- strb r1, [r6, #0xf4]
- mov r3, #0x1
- ldr r0, _0209BA68 ; =UNK_021C8F14
- add r1, r6, #0xf6
- mov r2, #0x6
- strb r3, [r6, #0xf5]
- bl MI_CpuCopy8
- mov r1, #0xc
- strb r1, [r6, #0xfc]
- mov r2, #0xa
- ldr r0, _0209BA78 ; =UNK_02106224
- add r1, r6, #0xfe
- strb r2, [r6, #0xfd]
- bl MI_CpuCopy8
- mov r1, #0x37
- strb r1, [r6, #0x108]
- mov r2, #0x3
- ldr r0, _0209BA7C ; =0x0000010D
- strb r2, [r6, #0x109]
- mov r1, #0x1
- strb r1, [r6, #0x10a]
- strb r2, [r6, #0x10b]
- mov r1, #0x6
- strb r1, [r6, #0x10c]
- add r0, r6, r0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_0209BA5C: .word 0x00000101
-_0209BA60: .word CPSiRand32ctx
-_0209BA64: .word UNK_021C8F04
-_0209BA68: .word UNK_021C8F14
-_0209BA6C: .word 0x00008263
-_0209BA70: .word 0x00006353
-_0209BA74: .word 0x00000135
-_0209BA78: .word UNK_02106224
-_0209BA7C: .word 0x0000010D
-
- arm_func_start FUN_0209BA80
-FUN_0209BA80: ; 0x0209BA80
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x54
- ldr r3, _0209BE40 ; =UNK_021C8EF8
- mov r1, #0x0
- ldr r0, _0209BE44 ; =UNK_021C8FD8
- mov r2, #0x64
- str r1, [r3, #0x0]
- bl MI_CpuFill8
- ldr r0, _0209BE44 ; =UNK_021C8FD8
- mov r3, #0x180
- ldr r2, _0209BE48 ; =UNK_021C93A0
- ldr r1, _0209BE4C ; =UNK_021C9220
- str r3, [r0, #0x3c]
- str r2, [r0, #0x40]
- str r3, [r0, #0x48]
- str r1, [r0, #0x4c]
- bl FUN_0209CC28
- mov r11, #0x0
- mov r0, #0x1
- str r0, [sp, #0x0]
- str r0, [sp, #0x4]
- str r0, [sp, #0x4c]
- mov r1, r0
- ldr r0, _0209BE50 ; =UNK_021C8EC0
- ldr r5, [sp, #0x0]
- str r1, [r0, #0x0]
- mov r0, #0x2
- str r0, [sp, #0x10]
- mov r0, r5
- str r0, [sp, #0x34]
- str r0, [sp, #0x3c]
- mov r0, #0x3
- str r0, [sp, #0x1c]
- mov r0, r5
- str r0, [sp, #0x30]
- str r0, [sp, #0x28]
- str r0, [sp, #0x24]
- str r0, [sp, #0x20]
- str r0, [sp, #0xc]
- mov r0, #0x69
- str r0, [sp, #0x44]
- mov r0, #0x3e8
- mov r6, r11
- mov r4, r11
- mov r10, r11
- str r11, [sp, #0x14]
- str r11, [sp, #0x18]
- str r11, [sp, #0x38]
- str r11, [sp, #0x2c]
- str r11, [sp, #0x40]
- str r11, [sp, #0x48]
- str r0, [sp, #0x8]
-_0209BB50:
- ldr r0, [sp, #0x8]
- bl OS_Sleep
- ldr r0, _0209BE40 ; =UNK_021C8EF8
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _0209BE14
- bl OS_GetTick
- mov r9, r0, lsr #0x10
- ldr r0, _0209BE54 ; =UNK_021C8EFC
- orr r9, r9, r1, lsl #0x10
- ldr r0, [r0, #0x0]
- blx r0
- cmp r0, #0x0
- beq _0209BC8C
- ldr r0, [sp, #0x4c]
- subs r0, r0, #0x1
- str r0, [sp, #0x4c]
- bne _0209BCA4
- ldr r0, _0209BE58 ; =UNK_021C8EC4
- ldr r0, [r0, #0x0]
- ands r0, r0, #0x1
- beq _0209BBBC
- cmp r11, #0x0
- bne _0209BCA4
- bl FUN_0209BE78
- ldr r11, [sp, #0xc]
- b _0209BCA4
-_0209BBBC:
- cmp r11, #0x3
- addls pc, pc, r11, lsl #0x2
- b _0209BCA4
-_0209BBC8:
- b _0209BBD8
-_0209BBCC:
- b _0209BC28
-_0209BBD0:
- b _0209BC4C
-_0209BBD4:
- b _0209BCA4
-_0209BBD8:
- ldr r0, [sp, #0x4]
- cmp r0, #0x0
- ldrne r1, [sp, #0x10]
- ldrne r0, _0209BE50 ; =UNK_021C8EC0
- strne r1, [r0, #0x0]
- ldrne r0, [sp, #0x14]
- strne r0, [sp, #0x4]
- bl FUN_0209B298
- cmp r0, #0x0
- beq _0209BC14
- ldr r1, [sp, #0x18]
- add r0, sp, #0x4c
- bl FUN_0209B170
- cmp r0, #0x0
- bne _0209BC20
-_0209BC14:
- bl FUN_0209BE78
- ldr r11, [sp, #0x1c]
- b _0209BCA4
-_0209BC20:
- ldr r11, [sp, #0x20]
- b _0209BCA4
-_0209BC28:
- ldr r1, [sp, #0x24]
- add r0, sp, #0x4c
- bl FUN_0209B170
- cmp r0, #0x0
- bne _0209BCA4
- ldr r0, [sp, #0x4c]
- cmp r0, #0x3c
- ldrcc r11, [sp, #0x10]
- b _0209BCA4
-_0209BC4C:
- ldr r1, [sp, #0x10]
- add r0, sp, #0x4c
- bl FUN_0209B170
- cmp r0, #0x0
- ldrne r11, [sp, #0x28]
- bne _0209BCA4
- ldr r0, [sp, #0x4c]
- cmp r0, #0x3c
- bhs _0209BCA4
- ldr r0, [sp, #0x1c]
- bl FUN_020A0098
- ldr r0, [sp, #0x30]
- ldr r11, [sp, #0x2c]
- str r0, [sp, #0x4c]
- str r0, [sp, #0x0]
- b _0209BCA4
-_0209BC8C:
- ldr r0, [sp, #0x34]
- bl FUN_020A0098
- ldr r0, [sp, #0x3c]
- ldr r11, [sp, #0x38]
- str r0, [sp, #0x4c]
- str r0, [sp, #0x0]
-_0209BCA4:
- ldr r1, [sp, #0x40]
- ldr r0, _0209BE5C ; =UNK_021C8F78
-_0209BCAC:
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- beq _0209BCD4
- ldrh r2, [r0, #0xa]
- sub r2, r9, r2
- mov r2, r2, lsl #0x10
- mov r3, r2, asr #0x10
- ldr r2, _0209BE60 ; =0x000003BD
- cmp r3, r2
- strgt r6, [r0, #0x0]
-_0209BCD4:
- add r0, r0, #0xc
- add r1, r1, #0x1
- cmp r1, #0x8
- blt _0209BCAC
- ldr r0, _0209BE64 ; =UNK_021C8EE0
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _0209BD10
- ldr r1, [sp, #0x0]
- subs r1, r1, #0x1
- str r1, [sp, #0x0]
- bne _0209BD10
- bl FUN_0209F338
- ldr r0, [sp, #0x44]
- str r0, [sp, #0x0]
-_0209BD10:
- ldr r0, _0209BE68 ; =OSi_ThreadInfo
- ldr r7, [r0, #0x8]
- cmp r7, #0x0
- beq _0209BDAC
-_0209BD20:
- ldr r0, [r7, #0xa4]
- cmp r0, #0x0
- beq _0209BDA0
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- beq _0209BDA0
- ldrb r2, [r0, #0x8]
- cmp r2, #0x3
- bne _0209BD6C
- ldr r1, [r0, #0x10]
- sub r1, r9, r1
- cmp r1, #0x27
- ble _0209BD6C
- strb r5, [r0, #0x8]
- ldrh r1, [r0, #0x1a]
- strh r1, [r0, #0x18]
- ldr r1, [r0, #0x20]
- str r1, [r0, #0x1c]
- b _0209BDA0
-_0209BD6C:
- cmp r2, #0x2
- bne _0209BDA0
- ldr r1, [r0, #0x10]
- sub r1, r9, r1
- cmp r1, #0x27
- ble _0209BDA0
- ldr r1, [r0, #0x4]
- cmp r1, #0x1
- bne _0209BDA0
- strb r4, [r0, #0x8]
- str r4, [r0, #0x4]
- ldr r0, [r0, #0x0]
- bl OS_WakeupThreadDirect
-_0209BDA0:
- ldr r7, [r7, #0x68]
- cmp r7, #0x0
- bne _0209BD20
-_0209BDAC:
- ldr r7, [sp, #0x48]
- ldr r8, _0209BE6C ; =UNK_021C9520
-_0209BDB4:
- ldrh r0, [r8, #0x4]
- cmp r0, #0x0
- beq _0209BDE4
- ldr r0, [r8, #0x2c]
- sub r0, r9, r0
- cmp r0, #0xef
- ble _0209BDE4
- ldr r1, _0209BE70 ; =CPSiFree
- ldr r0, [r8, #0x34]
- ldr r1, [r1, #0x0]
- blx r1
- strh r10, [r8, #0x4]
-_0209BDE4:
- add r8, r8, #0x38
- add r7, r7, #0x1
- cmp r7, #0x8
- blt _0209BDB4
- mov r0, r9
- bl CPSi_SslPeriodical
- ldr r0, _0209BE74 ; =UNK_021C8EF0
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _0209BB50
- blx r0
- b _0209BB50
-_0209BE14:
- ldr r0, _0209BE58 ; =UNK_021C8EC4
- ldr r0, [r0, #0x0]
- ands r0, r0, #0x1
- bne _0209BE30
- cmp r11, #0x3
- beq _0209BE30
- bl FUN_0209B100
-_0209BE30:
- bl FUN_0209CC10
- add sp, sp, #0x54
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_0209BE40: .word UNK_021C8EF8
-_0209BE44: .word UNK_021C8FD8
-_0209BE48: .word UNK_021C93A0
-_0209BE4C: .word UNK_021C9220
-_0209BE50: .word UNK_021C8EC0
-_0209BE54: .word UNK_021C8EFC
-_0209BE58: .word UNK_021C8EC4
-_0209BE5C: .word UNK_021C8F78
-_0209BE60: .word 0x000003BD
-_0209BE64: .word UNK_021C8EE0
-_0209BE68: .word OSi_ThreadInfo
-_0209BE6C: .word UNK_021C9520
-_0209BE70: .word CPSiFree
-_0209BE74: .word UNK_021C8EF0
-
- arm_func_start FUN_0209BE78
-FUN_0209BE78: ; 0x0209BE78
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr r0, _0209BF3C ; =UNK_021C8ECC
- ldr r0, [r0, #0x0]
- blx r0
- ldr r0, _0209BF40 ; =UNK_021C8F04
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- bl FUN_0209F338
- mov r0, #0x64
- bl OS_Sleep
- ldr r0, _0209BF40 ; =UNK_021C8F04
- ldr r0, [r0, #0x0]
- bl FUN_0209F338
- bl OS_GetTick
- mov r4, r0, lsr #0x10
- orr r4, r4, r1, lsl #0x10
- ldr r6, _0209BF44 ; =UNK_021C8EAC
- mov r7, #0x64
- ldr r5, _0209BF48 ; =UNK_021C8EFC
- b _0209BF00
-_0209BED8:
- ldrb r0, [r6, #0x0]
- cmp r0, #0x0
- beq _0209BEF8
- mov r0, #0x4
- bl FUN_020A0098
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_0209BEF8:
- mov r0, r7
- bl OS_Sleep
-_0209BF00:
- ldr r0, [r5, #0x0]
- blx r0
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- bl OS_GetTick
- mov r0, r0, lsr #0x10
- orr r0, r0, r1, lsl #0x10
- sub r0, r0, r4
- cmp r0, #0x17
- blt _0209BED8
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_0209BF3C: .word UNK_021C8ECC
-_0209BF40: .word UNK_021C8F04
-_0209BF44: .word UNK_021C8EAC
-_0209BF48: .word UNK_021C8EFC
-
- arm_func_start FUN_0209BF4C
-FUN_0209BF4C: ; 0x0209BF4C
- stmdb sp!, {r4,lr}
- ldr r0, _0209BF98 ; =OSi_ThreadInfo
- ldr r0, [r0, #0x4]
- ldr r4, [r0, #0xa4]
- cmp r4, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldr r1, [r4, #0x60]
- cmp r1, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- mov r2, #0x0
- ldr r0, [r4, #0x5c]
- mov r3, r2
- bl FUN_0209C0E8
- mov r0, #0x0
- str r0, [r4, #0x60]
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_0209BF98: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209BF9C
-FUN_0209BF9C:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _0209C02C ; =OSi_ThreadInfo
- ldr r0, [r0, #0x4]
- ldr r0, [r0, #0xa4]
- cmp r0, #0x0
- beq _0209C01C
- ldrb r1, [r0, #0x9]
- cmp r1, #0x0
- beq _0209BFD4
- bl CPSi_SslGetLength
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_0209BFD4:
- ldr r1, [r0, #0x44]
- cmp r1, #0x0
- bne _0209BFFC
- ldrb r0, [r0, #0x8]
- cmp r0, #0x4
- beq _0209BFFC
- add r0, r0, #0xf6
- and r0, r0, #0xff
- cmp r0, #0x1
- bhi _0209C00C
-_0209BFFC:
- add sp, sp, #0x4
- mov r0, r1
- ldmia sp!, {lr}
- bx lr
-_0209C00C:
- add sp, sp, #0x4
- mvn r0, #0x0
- ldmia sp!, {lr}
- bx lr
-_0209C01C:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_0209C02C: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209C030
-FUN_0209C030:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r3, _0209C0E4 ; =OSi_ThreadInfo
- mov r2, r0
- ldr r4, [r3, #0x4]
- mov r3, r1
- ldr r5, [r4, #0xa4]
- cmp r5, #0x0
- beq _0209C0D4
- ldr r4, [r5, #0x60]
- cmp r4, #0x0
- beq _0209C0BC
- ldr r0, [r5, #0x5c]
- mov r1, r4
- bl FUN_0209C0E8
- ldr r1, [r5, #0x60]
- mov r4, r0
- cmp r4, r1
- movcs r0, #0x0
- strcs r0, [r5, #0x60]
- addcs sp, sp, #0x4
- subcs r0, r4, r1
- ldmcsia sp!, {r4-r5,lr}
- bxcs lr
- ldr r0, [r5, #0x5c]
- sub r2, r1, r4
- add r1, r0, r4
- bl memmove
- ldr r1, [r5, #0x60]
- add sp, sp, #0x4
- sub r1, r1, r4
- mov r0, #0x0
- str r1, [r5, #0x60]
- ldmia sp!, {r4-r5,lr}
- bx lr
-_0209C0BC:
- mov r2, #0x0
- mov r3, r2
- bl FUN_0209C0E8
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-_0209C0D4:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_0209C0E4: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209C0E8
-FUN_0209C0E8:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr ip, _0209C1CC ; =OSi_ThreadInfo
- mov r7, r1
- ldr r12, [r12, #0x4]
- mov r6, r2
- ldr r4, [r12, #0xa4]
- mov r5, r3
- cmp r4, #0x0
- beq _0209C1BC
- ldrb r12, [r4, #0x8]
- cmp r12, #0xa
- bne _0209C14C
- cmp r7, #0x0
- beq _0209C12C
- mov r2, r4
- bl FUN_0209EB00
-_0209C12C:
- cmp r5, #0x0
- beq _0209C144
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl FUN_0209EB00
-_0209C144:
- add r0, r7, r5
- b _0209C1A4
-_0209C14C:
- cmp r12, #0xb
- bne _0209C184
- cmp r7, #0x0
- beq _0209C164
- mov r2, r4
- bl FUN_0209EC40
-_0209C164:
- cmp r5, #0x0
- beq _0209C17C
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl FUN_0209EC40
-_0209C17C:
- add r0, r7, r5
- b _0209C1A4
-_0209C184:
- ldrb r12, [r4, #0x9]
- cmp r12, #0x0
- beq _0209C19C
- str r4, [sp, #0x0]
- bl CPSi_SslWrite2
- b _0209C1A4
-_0209C19C:
- str r4, [sp, #0x0]
- bl CPSi_TcpWrite2Raw
-_0209C1A4:
- ldr r1, _0209C1D0 ; =UNK_021C8EA8
- ldrb r1, [r1, #0x0]
- cmp r1, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
-_0209C1BC:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_0209C1CC: .word OSi_ThreadInfo
-_0209C1D0: .word UNK_021C8EA8
-
- arm_func_start CPSi_TcpWrite2Raw
-CPSi_TcpWrite2Raw:
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x1c
- mov r4, #0x0
- mov r10, r0
- ldr r8, [sp, #0x40]
- mov r0, r4
- str r4, [sp, #0xc]
- mov r9, r1
- mov r11, r2
- str r3, [sp, #0x8]
- mov r6, r4
- str r0, [r8, #0x34]
- bl OS_GetTick
- mov r0, r0, lsr #0x10
- str r0, [sp, #0x10]
- orr r0, r0, r1, lsl #0x10
- str r0, [sp, #0x10]
- mov r0, r6
- str r0, [sp, #0x18]
- mov r0, #0x1
- ldr r4, _0209C3EC ; =UNK_021C8EFC
- str r0, [sp, #0x14]
- b _0209C39C
-_0209C230:
- ldr r7, [r8, #0x28]
- ldr r3, [sp, #0x8]
- str r8, [sp, #0x0]
- mov r0, r10
- mov r1, r9
- mov r2, r11
- str r6, [sp, #0x4]
- bl FUN_0209C3F0
- bl OS_GetTick
- mov r5, r0, lsr #0x10
- orr r5, r5, r1, lsl #0x10
-_0209C25C:
- bl FUN_020A005C
- ldr r0, [r4, #0x0]
- blx r0
- cmp r0, #0x0
- beq _0209C2B8
- ldrb r0, [r8, #0x8]
- cmp r0, #0x4
- bne _0209C2B8
- ldr r1, [r8, #0x28]
- ldr r0, [r8, #0x30]
- cmp r1, r0
- beq _0209C2B8
- bl OS_GetTick
- mov r0, r0, lsr #0x10
- orr r0, r0, r1, lsl #0x10
- sub r0, r0, r5
- cmp r0, #0xf
- bge _0209C2B8
- cmp r6, #0x0
- beq _0209C25C
- ldrh r0, [r8, #0x2c]
- cmp r0, #0x0
- beq _0209C25C
-_0209C2B8:
- ldr r0, [r8, #0x30]
- subs r7, r0, r7
- ldr r0, [sp, #0xc]
- add r0, r0, r7
- str r0, [sp, #0xc]
- beq _0209C2E4
- bl OS_GetTick
- mov r0, r0, lsr #0x10
- str r0, [sp, #0x10]
- orr r0, r0, r1, lsl #0x10
- str r0, [sp, #0x10]
-_0209C2E4:
- ldr r0, [r8, #0x30]
- str r0, [r8, #0x28]
- ldrb r0, [r8, #0x8]
- cmp r0, #0x4
- bne _0209C36C
- ldrh r0, [r8, #0x2c]
- cmp r0, #0x0
- bne _0209C36C
- cmp r7, #0x0
- bne _0209C36C
- cmp r6, #0x0
- bne _0209C370
- bl OS_GetTick
- mov r5, r0, lsr #0x10
- orr r5, r5, r1, lsl #0x10
- b _0209C334
-_0209C324:
- bl FUN_020A005C
- ldrh r0, [r8, #0x2c]
- cmp r0, #0x0
- bne _0209C35C
-_0209C334:
- ldr r0, [r4, #0x0]
- blx r0
- cmp r0, #0x0
- beq _0209C35C
- bl OS_GetTick
- mov r0, r0, lsr #0x10
- orr r0, r0, r1, lsl #0x10
- sub r0, r0, r5
- cmp r0, #0xf
- blt _0209C324
-_0209C35C:
- ldrh r0, [r8, #0x2c]
- cmp r0, #0x0
- ldreq r6, [sp, #0x14]
- b _0209C370
-_0209C36C:
- ldr r6, [sp, #0x18]
-_0209C370:
- cmp r7, r9
- addcc r10, r10, r7
- subcc r9, r9, r7
- blo _0209C39C
- sub r1, r7, r9
- add r10, r11, r1
- ldr r0, [sp, #0x8]
- ldr r11, [sp, #0x18]
- sub r9, r0, r1
- mov r0, r11
- str r0, [sp, #0x8]
-_0209C39C:
- ldr r0, [r4, #0x0]
- blx r0
- cmp r0, #0x0
- beq _0209C3DC
- cmp r9, #0x0
- beq _0209C3DC
- ldrb r0, [r8, #0x8]
- cmp r0, #0x4
- bne _0209C3DC
- bl OS_GetTick
- mov r2, r0, lsr #0x10
- ldr r0, [sp, #0x10]
- orr r2, r2, r1, lsl #0x10
- sub r0, r2, r0
- cmp r0, #0x9f
- blt _0209C230
-_0209C3DC:
- ldr r0, [sp, #0xc]
- add sp, sp, #0x1c
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_0209C3EC: .word UNK_021C8EFC
-
- arm_func_start FUN_0209C3F0
-FUN_0209C3F0: ; 0x0209C3F0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r2
- mov r4, r3
- ldr r2, [sp, #0x10]
- ldr r3, [sp, #0x14]
- bl FUN_0209C44C
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- cmp r4, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,lr}
- bxeq lr
- ldr r2, [sp, #0x10]
- mov r0, r5
- mov r1, r4
- mov r3, #0x0
- bl FUN_0209C44C
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start FUN_0209C44C
-FUN_0209C44C:
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0xc
- mov r8, r2
- ldr r11, [r8, #0x34]
- mov r10, r0
- movs r0, r3
- mov r0, r11, lsl #0x1
- movne r6, #0x1
- add r5, r0, #0x4
- mov r0, #0x18
- str r3, [sp, #0x4]
- mov r9, r1
- ldreqh r6, [r8, #0x2c]
- mov r4, #0x0
- str r0, [sp, #0x8]
- b _0209C504
-_0209C48C:
- ldr r0, _0209C528 ; =UNK_021C8EB0
- ldrh r7, [r8, #0x2e]
- ldrh r0, [r0, #0x0]
- ldr r1, [r8, #0x34]
- cmp r7, r6
- movcs r7, r6
- cmp r0, r7
- movcc r7, r0
- ldr r0, [sp, #0x4]
- cmp r0, #0x0
- biceq r7, r7, #0x1
- cmp r9, r7
- sub r0, r1, r11
- movcc r7, r9
- adds r0, r5, r0
- moveq r7, r4
- mov r11, r1
- sub r5, r0, #0x1
- cmp r7, #0x0
- beq _0209C518
- ldr r3, [sp, #0x8]
- mov r0, r10
- mov r1, r7
- mov r2, r8
- str r4, [sp, #0x0]
- sub r6, r6, r7
- bl FUN_0209E878
- bl OS_YieldThread
- add r10, r10, r7
- sub r9, r9, r7
-_0209C504:
- cmp r9, #0x0
- beq _0209C518
- ldrb r0, [r8, #0x8]
- cmp r0, #0x4
- beq _0209C48C
-_0209C518:
- mov r0, r7
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_0209C528: .word UNK_021C8EB0
-
- arm_func_start FUN_0209C52C
-FUN_0209C52C: ; 0x0209C52C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _0209C57C ; =OSi_ThreadInfo
- ldr r1, [r1, #0x4]
- ldr r1, [r1, #0xa4]
- cmp r1, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {lr}
- bxeq lr
- ldrb r2, [r1, #0x9]
- cmp r2, #0x0
- beq _0209C56C
- bl CPSi_SslConsume
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_0209C56C:
- bl CPSi_SocConsumeRaw
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_0209C57C: .word OSi_ThreadInfo
-
- arm_func_start CPSi_SocConsumeRaw
-CPSi_SocConsumeRaw:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r4, r1
- mov r7, r0
- bl OS_DisableInterrupts
- ldr r2, [r4, #0x44]
- ldr r1, [r4, #0x3c]
- mov r6, r0
- cmp r2, r1
- mov r5, #0x0
- bne _0209C5B4
- cmp r7, #0x0
- movne r5, #0x1
-_0209C5B4:
- cmp r7, r2
- movcs r0, #0x0
- strcs r0, [r4, #0x44]
- bhs _0209C5D8
- ldr r0, [r4, #0x40]
- sub r2, r2, r7
- add r1, r0, r7
- str r2, [r4, #0x44]
- bl memmove
-_0209C5D8:
- mov r0, r6
- bl OS_RestoreInterrupts
- ldrb r0, [r4, #0x8]
- cmp r0, #0xa
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- cmp r0, #0xb
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- ldr r0, [r4, #0x44]
- cmp r0, #0x0
- beq _0209C620
- cmp r5, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
-_0209C620:
- mov r0, r4
- mov r1, #0x1b
- bl FUN_0209DF84
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start FUN_0209C638
-FUN_0209C638:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _0209C6BC ; =OSi_ThreadInfo
- ldr r1, [r1, #0x4]
- ldr r1, [r1, #0xa4]
- cmp r1, #0x0
- beq _0209C6A4
- ldrb r2, [r1, #0x8]
- add r2, r2, #0xf6
- and r2, r2, #0xff
- cmp r2, #0x1
- bhi _0209C678
- bl FUN_0209C74C
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_0209C678:
- ldrb r2, [r1, #0x9]
- cmp r2, #0x0
- beq _0209C694
- bl CPSi_SslRead
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_0209C694:
- bl CPSi_TcpReadRaw
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_0209C6A4:
- mov r1, #0x0
- str r1, [r0, #0x0]
- mov r0, r1
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_0209C6BC: .word OSi_ThreadInfo
-
- arm_func_start CPSi_TcpReadRaw
-CPSi_TcpReadRaw: ; 0x0209C6C0
- stmdb sp!, {r4-r8,lr}
- mov r4, r1
- ldr r1, [r4, #0x44]
- mov r5, r0
- cmp r1, #0x0
- bne _0209C728
- ldrb r0, [r4, #0x8]
- cmp r0, #0x4
- bne _0209C728
- bl OS_DisableInterrupts
- mov r8, r0
- mov r7, #0x2
- mov r6, #0x0
- b _0209C704
-_0209C6F8:
- mov r0, r6
- str r7, [r4, #0x4]
- bl OS_SleepThread
-_0209C704:
- ldr r0, [r4, #0x44]
- cmp r0, #0x0
- bne _0209C71C
- ldrb r0, [r4, #0x8]
- cmp r0, #0x4
- beq _0209C6F8
-_0209C71C:
- mov r0, r8
- bl OS_RestoreInterrupts
- b _0209C72C
-_0209C728:
- bl OS_YieldThread
-_0209C72C:
- ldr r0, [r4, #0x44]
- str r0, [r5, #0x0]
- ldr r0, [r5, #0x0]
- cmp r0, #0x0
- ldrne r0, [r4, #0x40]
- moveq r0, #0x0
- ldmia sp!, {r4-r8,lr}
- bx lr
-
- arm_func_start FUN_0209C74C
-FUN_0209C74C: ; 0x0209C74C
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r8, r1
- mov r9, r0
- bl OS_DisableInterrupts
- ldr r7, [r8, #0x44]
- mov r6, r0
- cmp r7, #0x0
- bne _0209C790
- mov r5, #0x3
- mov r4, #0x0
-_0209C778:
- mov r0, r4
- str r5, [r8, #0x4]
- bl OS_SleepThread
- ldr r7, [r8, #0x44]
- cmp r7, #0x0
- beq _0209C778
-_0209C790:
- mov r0, r6
- bl OS_RestoreInterrupts
- str r7, [r9, #0x0]
- ldr r0, [r8, #0x40]
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,lr}
- bx lr
-
- arm_func_start FUN_0209C7AC
-FUN_0209C7AC: ; 0x0209C7AC
- stmdb sp!, {r4-r6,lr}
- ldr r0, _0209C838 ; =OSi_ThreadInfo
- ldr r0, [r0, #0x4]
- ldr r4, [r0, #0xa4]
- cmp r4, #0x0
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- ldrb r0, [r4, #0x9]
- cmp r0, #0x0
- beq _0209C7DC
- mov r0, r4
- bl CPSi_SslClose
-_0209C7DC:
- bl OS_GetTick
- mov r6, r0, lsr #0x10
- orr r6, r6, r1, lsl #0x10
- ldr r5, _0209C83C ; =UNK_021C8EFC
- b _0209C7F4
-_0209C7F0:
- bl FUN_020A005C
-_0209C7F4:
- ldr r0, [r5, #0x0]
- blx r0
- cmp r0, #0x0
- beq _0209C828
- ldrb r0, [r4, #0x8]
- cmp r0, #0x0
- beq _0209C828
- bl OS_GetTick
- mov r0, r0, lsr #0x10
- orr r0, r0, r1, lsl #0x10
- sub r0, r0, r6
- cmp r0, #0x27
- blt _0209C7F0
-_0209C828:
- mov r0, #0x0
- strb r0, [r4, #0x8]
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_0209C838: .word OSi_ThreadInfo
-_0209C83C: .word UNK_021C8EFC
-
- arm_func_start FUN_0209C840
-FUN_0209C840:
- stmdb sp!, {r4,lr}
- ldr r0, _0209C880 ; =OSi_ThreadInfo
- ldr r0, [r0, #0x4]
- ldr r4, [r0, #0xa4]
- cmp r4, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldrb r0, [r4, #0x9]
- cmp r0, #0x0
- beq _0209C870
- mov r0, r4
- bl CPSi_SslShutdown
-_0209C870:
- mov r0, r4
- bl CPSi_TcpShutdownRaw
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_0209C880: .word OSi_ThreadInfo
-
- arm_func_start CPSi_TcpShutdownRaw
-CPSi_TcpShutdownRaw: ; 0x0209C884
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl OS_YieldThread
- ldrb r1, [r4, #0x8]
- add r0, r1, #0xfd
- and r0, r0, #0xff
- cmp r0, #0x1
- bhi _0209C8C0
- mov r0, r4
- mov r1, #0x19
- bl FUN_0209DF70
- mov r0, #0x7
- strb r0, [r4, #0x8]
- ldmia sp!, {r4,lr}
- bx lr
-_0209C8C0:
- cmp r1, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- mov r0, r4
- mov r1, #0x1a
- bl FUN_0209DF84
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FUN_0209C8E0
-FUN_0209C8E0: ; 0x0209C8E0
- ldr r2, _0209C930 ; =OSi_ThreadInfo
- ldr r2, [r2, #0x4]
- ldr r3, [r2, #0xa4]
- cmp r3, #0x0
- beq _0209C928
- ldrb r2, [r3, #0x8]
- cmp r2, #0x4
- beq _0209C908
- cmp r2, #0xa
- bne _0209C928
-_0209C908:
- cmp r0, #0x0
- ldrneh r2, [r3, #0x18]
- strneh r2, [r0, #0x0]
- cmp r1, #0x0
- ldrne r0, [r3, #0x14]
- strne r0, [r1, #0x0]
- ldr r0, [r3, #0x1c]
- bx lr
-_0209C928:
- mov r0, #0x0
- bx lr
- .balign 4
-_0209C930: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209C934
-FUN_0209C934: ; 0x0209C934
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _0209C98C ; =OSi_ThreadInfo
- ldr r0, [r0, #0x4]
- ldr r0, [r0, #0xa4]
- cmp r0, #0x0
- beq _0209C97C
- ldrb r1, [r0, #0x9]
- cmp r1, #0x0
- beq _0209C96C
- bl CPSi_SslConnect
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_0209C96C:
- bl CPSi_TcpConnectRaw
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_0209C97C:
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_0209C98C: .word OSi_ThreadInfo
-
- arm_func_start CPSi_TcpConnectRaw
-CPSi_TcpConnectRaw:
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- mov r10, r0
- bl FUN_0209CC3C
- mov r8, r0
- mov r9, #0x0
- mov r11, r9
- mov r4, #0x1
- mov r6, #0x2
- mov r5, #0x18
-_0209C9B8:
- str r8, [r10, #0x28]
- strb r6, [r10, #0x8]
- bl OS_GetTick
- mov r2, r0, lsr #0x10
- orr r2, r2, r1, lsl #0x10
- str r2, [r10, #0x10]
- mov r0, r10
- mov r1, r6
- mov r2, r5
- bl FUN_0209DF98
- bl OS_DisableInterrupts
- mov r7, r0
- ldr r0, _0209CA50 ; =UNK_021C8F04
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _0209CA04
- mov r0, r11
- str r4, [r10, #0x4]
- bl OS_SleepThread
-_0209CA04:
- mov r0, r7
- bl OS_RestoreInterrupts
- ldrb r0, [r10, #0x8]
- cmp r0, #0x4
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r11,lr}
- bxeq lr
- ldr r0, _0209CA50 ; =UNK_021C8F04
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _0209CA40
- add r9, r9, #0x1
- cmp r9, #0x3
- blo _0209C9B8
-_0209CA40:
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_0209CA50: .word UNK_021C8F04
-
- arm_func_start FUN_0209CA54
-FUN_0209CA54: ; 0x0209CA54
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _0209CAA4 ; =OSi_ThreadInfo
- ldr r0, [r0, #0x4]
- ldr r0, [r0, #0xa4]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {lr}
- bxeq lr
- ldrb r1, [r0, #0x9]
- cmp r1, #0x0
- beq _0209CA94
- bl CPSi_SslListen
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_0209CA94:
- bl FUN_0209CAC4
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_0209CAA4: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209CAA8
-FUN_0209CAA8:
- ldr r1, _0209CAC0 ; =OSi_ThreadInfo
- ldr r1, [r1, #0x4]
- ldr r1, [r1, #0xa4]
- cmp r1, #0x0
- strne r0, [r1, #0x38]
- bx lr
- .balign 4
-_0209CAC0: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209CAC4
-FUN_0209CAC4: ; 0x0209CAC4
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl FUN_0209CC3C
- str r0, [r5, #0x28]
- mov r0, #0x1
- strb r0, [r5, #0x8]
- bl OS_DisableInterrupts
- mov r4, r0
- mov r1, #0x1
- mov r0, #0x0
- str r1, [r5, #0x4]
- bl OS_SleepThread
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
-
- arm_func_start FUN_0209CB0C
-FUN_0209CB0C: ; 0x0209CB0C
- ldr r1, _0209CB20 ; =OSi_ThreadInfo
- ldr r1, [r1, #0x4]
- ldr r1, [r1, #0xa4]
- str r1, [r0, #0xa4]
- bx lr
- .balign 4
-_0209CB20: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209CB24
-FUN_0209CB24: ; 0x0209CB24
- ldr r0, _0209CB40 ; =OSi_ThreadInfo
- ldr r0, [r0, #0x4]
- ldr r1, [r0, #0xa4]
- cmp r1, #0x0
- movne r0, #0x0
- strne r0, [r1, #0x0]
- bx lr
- .balign 4
-_0209CB40: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209CB44
-FUN_0209CB44: ; 0x0209CB44
- ldr r0, _0209CB74 ; =OSi_ThreadInfo
- ldr r0, [r0, #0x4]
- ldr r1, [r0, #0xa4]
- cmp r1, #0x0
- bxeq lr
- str r0, [r1, #0x0]
- mov r0, #0x0
- strb r0, [r1, #0x8]
- str r0, [r1, #0x44]
- str r0, [r1, #0x60]
- str r0, [r1, #0x38]
- bx lr
- .balign 4
-_0209CB74: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209CB78
-FUN_0209CB78: ; 0x0209CB78
- stmdb sp!, {r4,lr}
- ldr r3, _0209CBDC ; =OSi_ThreadInfo
- ldr r3, [r3, #0x4]
- ldr r4, [r3, #0xa4]
- cmp r4, #0x0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- ldr r3, _0209CBE0 ; =0x7F000001
- cmp r2, r3
- ldreq r2, _0209CBE4 ; =UNK_021C8F04
- ldreq r2, [r2, #0x0]
- cmp r0, #0x0
- strh r1, [r4, #0x1a]
- ldrh r1, [r4, #0x1a]
- strh r1, [r4, #0x18]
- str r2, [r4, #0x20]
- ldr r1, [r4, #0x20]
- str r1, [r4, #0x1c]
- strneh r0, [r4, #0xa]
- ldmneia sp!, {r4,lr}
- bxne lr
- bl FUN_0209CC8C
- strh r0, [r4, #0xa]
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_0209CBDC: .word OSi_ThreadInfo
-_0209CBE0: .word 0x7F000001
-_0209CBE4: .word UNK_021C8F04
-
- arm_func_start FUN_0209CBE8
-FUN_0209CBE8: ; 0x0209CBE8
- ldr r0, _0209CC0C ; =OSi_ThreadInfo
- ldr r0, [r0, #0x4]
- ldr r1, [r0, #0xa4]
- cmp r1, #0x0
- movne r0, #0xa
- strneb r0, [r1, #0x8]
- movne r0, #0x0
- strne r0, [r1, #0x44]
- bx lr
- .balign 4
-_0209CC0C: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209CC10
-FUN_0209CC10: ; 0x0209CC10
- ldr r0, _0209CC24 ; =OSi_ThreadInfo
- mov r1, #0x0
- ldr r0, [r0, #0x4]
- str r1, [r0, #0xa4]
- bx lr
- .balign 4
-_0209CC24: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209CC28
-FUN_0209CC28: ; 0x0209CC28
- ldr r1, _0209CC38 ; =OSi_ThreadInfo
- ldr r1, [r1, #0x4]
- str r0, [r1, #0xa4]
- bx lr
- .balign 4
-_0209CC38: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209CC3C
-FUN_0209CC3C: ; 0x0209CC3C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _0209CC88 ; =CPSiRand32ctx
- ldr r3, [r1, #0x8]
- ldr r2, [r1, #0x0]
- ldr r0, [r1, #0x4]
- umull lr, r12, r3, r2
- mla r12, r3, r0, r12
- ldr r0, [r1, #0xc]
- ldr r3, [r1, #0x10]
- mla r12, r0, r2, r12
- adds r2, r3, lr
- ldr r0, [r1, #0x14]
- str r2, [r1, #0x0]
- adc r0, r0, r12
- str r0, [r1, #0x4]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_0209CC88: .word CPSiRand32ctx
-
- arm_func_start FUN_0209CC8C
-FUN_0209CC8C: ; 0x0209CC8C
- stmdb sp!, {r4-r8,lr}
- ldr r0, _0209CD30 ; =OSi_ThreadInfo
- ldr r6, [r0, #0x8]
- ldr r2, _0209CD34 ; =UNK_021C8EBC
- mov r4, #0x400
- mov r3, #0x1
- mov r5, #0x0
- ldr r1, _0209CD38 ; =0x00001388
-_0209CCAC:
- ldrh r12, [r2, #0x0]
- mov r0, r5
- add r12, r12, #0x1
- strh r12, [r2, #0x0]
- ldrh r12, [r2, #0x0]
- cmp r12, #0x400
- blo _0209CCD0
- cmp r12, r1
- blo _0209CCD4
-_0209CCD0:
- strh r4, [r2, #0x0]
-_0209CCD4:
- mov r8, r6
- cmp r6, #0x0
- beq _0209CD18
- ldrh r7, [r2, #0x0]
-_0209CCE4:
- ldr lr, [r8, #0xa4]
- cmp lr, #0x0
- beq _0209CD0C
- ldr r12, [lr, #0x0]
- cmp r12, #0x0
- beq _0209CD0C
- ldrh r12, [lr, #0xa]
- cmp r12, r7
- moveq r0, r3
- beq _0209CD18
-_0209CD0C:
- ldr r8, [r8, #0x68]
- cmp r8, #0x0
- bne _0209CCE4
-_0209CD18:
- cmp r0, #0x0
- bne _0209CCAC
- ldr r0, _0209CD34 ; =UNK_021C8EBC
- ldrh r0, [r0, #0x0]
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_0209CD30: .word OSi_ThreadInfo
-_0209CD34: .word UNK_021C8EBC
-_0209CD38: .word 0x00001388
-
- arm_func_start FUN_0209CD3C
-FUN_0209CD3C: ; 0x0209CD3C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r5, _0209CDAC ; =0x00000806
- add r4, sp, #0x0
-_0209CD4C:
- mov r0, r4
- bl FUN_0209F57C
- ldr r3, [sp, #0x0]
- cmp r3, #0x22
- bls _0209CDA4
- ldrh r2, [r0, #0xc]
- mov r1, r2, asr #0x8
- orr r1, r1, r2, lsl #0x8
- mov r1, r1, lsl #0x10
- mov r1, r1, lsr #0x10
- cmp r1, #0x800
- beq _0209CD88
- cmp r1, r5
- beq _0209CD98
- b _0209CDA4
-_0209CD88:
- add r0, r0, #0xe
- sub r1, r3, #0xe
- bl FUN_0209CDB0
- b _0209CDA4
-_0209CD98:
- add r0, r0, #0xe
- sub r1, r3, #0xe
- bl FUN_0209E614
-_0209CDA4:
- bl FUN_0209F51C
- b _0209CD4C
- .balign 4
-_0209CDAC: .word 0x00000806
-
- arm_func_start FUN_0209CDB0
-FUN_0209CDB0: ; 0x0209CDB0
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x8
- mov r4, r0
- ldrh r12, [r4, #0xc]
- ldrh r6, [r4, #0x10]
- ldrh r2, [r4, #0xe]
- ldrh r0, [r4, #0x12]
- mov r5, r6, asr #0x8
- mov r3, r12, asr #0x8
- orr r5, r5, r6, lsl #0x8
- orr r12, r3, r12, lsl #0x8
- mov r3, r5, lsl #0x10
- mov r5, r0, asr #0x8
- mov r12, r12, lsl #0x10
- mov lr, r2, asr #0x8
- mov r6, r3, lsr #0x10
- orr r0, r5, r0, lsl #0x8
- mov r3, r12, lsr #0x10
- orr r2, lr, r2, lsl #0x8
- mov r5, r6, lsl #0x10
- mov r0, r0, lsl #0x10
- mov r3, r3, lsl #0x10
- mov r2, r2, lsl #0x10
- orr r0, r5, r0, lsr #0x10
- orr r2, r3, r2, lsr #0x10
- mov r5, r1
- cmp r0, r2
- beq _0209CEF0
- bl FUN_0209F9CC
- cmp r0, #0x0
- addeq sp, sp, #0x8
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- ldrh r1, [r4, #0x2]
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- mov r0, r0, lsl #0x10
- cmp r5, r0, lsr #0x10
- addcc sp, sp, #0x8
- ldmccia sp!, {r4-r6,lr}
- bxcc lr
- ldrb r1, [r4, #0x0]
- mov r0, r4
- and r1, r1, #0xf
- mov r1, r1, lsl #0x2
- bl FUN_0209FB84
- ldr r1, _0209CFA0 ; =0x0000FFFF
- cmp r0, r1
- addne sp, sp, #0x8
- ldmneia sp!, {r4-r6,lr}
- bxne lr
- ldrh r2, [r4, #0x10]
- ldrh r12, [r4, #0x12]
- ldr r1, _0209CFA4 ; =UNK_021C8F04
- mov r0, r2, asr #0x8
- orr r0, r0, r2, lsl #0x8
- mov r0, r0, lsl #0x10
- mov r2, r12, asr #0x8
- mov r3, r0, lsr #0x10
- orr r0, r2, r12, lsl #0x8
- mov r2, r3, lsl #0x10
- mov r0, r0, lsl #0x10
- ldr r1, [r1, #0x0]
- orr r0, r2, r0, lsr #0x10
- cmp r1, r0
- bne _0209CEF0
- ldrh r2, [r4, #0xc]
- ldrh r12, [r4, #0xe]
- sub r0, r4, #0x8
- mov r1, r2, asr #0x8
- orr r1, r1, r2, lsl #0x8
- mov r1, r1, lsl #0x10
- mov r2, r12, asr #0x8
- mov r3, r1, lsr #0x10
- orr r1, r2, r12, lsl #0x8
- mov r2, r3, lsl #0x10
- mov r1, r1, lsl #0x10
- orr r1, r2, r1, lsr #0x10
- mov r2, #0x1
- bl FUN_0209F12C
-_0209CEF0:
- add r1, sp, #0x0
- mov r0, r4
- bl FUN_0209CFAC
- movs r4, r0
- addeq sp, sp, #0x8
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- ldrh r2, [r4, #0x2]
- ldrb r3, [r4, #0x0]
- ldrb r12, [r4, #0x9]
- mov r1, r2, asr #0x8
- orr r1, r1, r2, lsl #0x8
- mov r1, r1, lsl #0x10
- and r3, r3, #0xf
- mov r2, r1, lsr #0x10
- cmp r12, #0x11
- add r1, r4, r3, lsl #0x2
- sub r2, r2, r3, lsl #0x2
- bne _0209CF44
- bl FUN_0209D2BC
- b _0209CF70
-_0209CF44:
- ldr r3, _0209CFA4 ; =UNK_021C8F04
- ldr r3, [r3, #0x0]
- cmp r3, #0x0
- beq _0209CF70
- cmp r12, #0x1
- bne _0209CF64
- bl FUN_0209E2E0
- b _0209CF70
-_0209CF64:
- cmp r12, #0x6
- bne _0209CF70
- bl FUN_0209D4D8
-_0209CF70:
- ldr r0, [sp, #0x0]
- cmp r0, #0x0
- addeq sp, sp, #0x8
- ldmeqia sp!, {r4-r6,lr}
- bxeq lr
- ldr r1, _0209CFA8 ; =CPSiFree
- sub r0, r4, #0xe
- ldr r1, [r1, #0x0]
- blx r1
- add sp, sp, #0x8
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_0209CFA0: .word 0x0000FFFF
-_0209CFA4: .word UNK_021C8F04
-_0209CFA8: .word CPSiFree
-
- arm_func_start FUN_0209CFAC
-FUN_0209CFAC: ; 0x0209CFAC
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x14
- mov r6, #0x0
- mov r10, r0
- str r6, [r1, #0x0]
- ldrh r3, [r10, #0x6]
- str r1, [sp, #0x0]
- ldr r2, _0209D2A4 ; =0x00003FFF
- mov r1, r3, asr #0x8
- orr r1, r1, r3, lsl #0x8
- mov r1, r1, lsl #0x10
- mov r1, r1, lsr #0x10
- str r1, [sp, #0x4]
- ands r1, r1, r2
- addeq sp, sp, #0x14
- ldmeqia sp!, {r4-r11,lr}
- bxeq lr
- ldrh r1, [r10, #0xc]
- ldrh r3, [r10, #0xe]
- ldrb r4, [r10, #0x0]
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- mov r0, r0, lsl #0x10
- mov r1, r3, asr #0x8
- mov r2, r0, lsr #0x10
- orr r0, r1, r3, lsl #0x8
- and r3, r4, #0xf
- ldrh r9, [r10, #0x4]
- mov r2, r2, lsl #0x10
- mov r1, r0, lsl #0x10
- ldr r5, _0209D2A8 ; =UNK_021C9520
- mov r0, r6
- mov r7, r3, lsl #0x2
- orr r4, r2, r1, lsr #0x10
-_0209D034:
- ldrh r2, [r5, #0x4]
- cmp r2, #0x0
- beq _0209D058
- ldr r1, [r5, #0x0]
- cmp r1, r4
- bne _0209D058
- ldrh r1, [r5, #0x6]
- cmp r1, r9
- beq _0209D078
-_0209D058:
- cmp r2, #0x0
- bne _0209D068
- cmp r6, #0x0
- moveq r6, r5
-_0209D068:
- add r0, r0, #0x1
- cmp r0, #0x8
- add r5, r5, #0x38
- blo _0209D034
-_0209D078:
- ldrh r2, [r10, #0x2]
- cmp r0, #0x8
- ldr r1, _0209D2AC ; =0x00001FFF
- mov r0, r2, asr #0x8
- orr r0, r0, r2, lsl #0x8
- mov r0, r0, lsl #0x10
- mov r2, r0, lsr #0x10
- ldr r0, [sp, #0x4]
- and r8, r0, r1
- sub r0, r2, r7
- str r0, [sp, #0x8]
- mov r0, r8, lsl #0x3
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x8]
- add r11, r0, r8, lsl #0x3
- bne _0209D150
- cmp r6, #0x0
- beq _0209D0C8
- cmp r11, #0x1000
- bls _0209D0D8
-_0209D0C8:
- add sp, sp, #0x14
- mov r0, #0x0
- ldmia sp!, {r4-r11,lr}
- bx lr
-_0209D0D8:
- ldr r1, _0209D2B0 ; =CPSiAlloc
- ldr r0, _0209D2B4 ; =0x0000100E
- ldr r1, [r1, #0x0]
- add r0, r7, r0
- mov r5, r6
- blx r1
- str r0, [r6, #0x34]
- ldr r0, [r6, #0x34]
- cmp r0, #0x0
- addeq sp, sp, #0x14
- moveq r0, #0x0
- ldmeqia sp!, {r4-r11,lr}
- bxeq lr
- str r4, [r6, #0x0]
- strh r9, [r6, #0x6]
- mov r0, #0x0
- strh r0, [r6, #0x8]
- bl OS_GetTick
- mov r0, r0, lsr #0x10
- orr r0, r0, r1, lsl #0x10
- str r0, [r6, #0x2c]
- ldr r1, [r6, #0x34]
- mov r0, r10
- add r1, r1, #0xe
- add r1, r1, r7
- str r1, [r6, #0x30]
- ldr r1, [r6, #0x34]
- mov r2, r7
- add r1, r1, #0xe
- bl MI_CpuCopy8
-_0209D150:
- ldrh r0, [r5, #0x4]
- cmp r0, #0x8
- beq _0209D164
- cmp r11, #0x1000
- bls _0209D18C
-_0209D164:
- mov r0, #0x0
- strh r0, [r5, #0x4]
- ldr r1, _0209D2B8 ; =CPSiFree
- ldr r0, [r5, #0x34]
- ldr r1, [r1, #0x0]
- blx r1
- add sp, sp, #0x14
- mov r0, #0x0
- ldmia sp!, {r4-r11,lr}
- bx lr
-_0209D18C:
- ldr r0, [sp, #0x8]
- ldr r2, [sp, #0x8]
- add r0, r0, #0x7
- add r1, r8, r0, lsr #0x3
- ldr r0, [sp, #0x4]
- ands r0, r0, #0x2000
- streqh r11, [r5, #0xa]
- streqh r1, [r5, #0x8]
- ldrh r3, [r5, #0x4]
- add r0, r10, r7
- add r3, r5, r3, lsl #0x1
- strh r8, [r3, #0xc]
- ldrh r3, [r5, #0x4]
- add r3, r5, r3, lsl #0x1
- strh r1, [r3, #0x1c]
- ldrh r1, [r5, #0x4]
- add r1, r1, #0x1
- strh r1, [r5, #0x4]
- ldr r3, [r5, #0x30]
- ldr r1, [sp, #0xc]
- add r1, r3, r1
- bl MI_CpuCopy8
- ldrh r6, [r5, #0x8]
- cmp r6, #0x0
- addeq sp, sp, #0x14
- moveq r0, #0x0
- ldmeqia sp!, {r4-r11,lr}
- bxeq lr
- ldrh r7, [r5, #0x4]
- mov r3, #0x0
- mov r4, r3
- cmp r7, #0x0
- bls _0209D244
- mov r0, r3
-_0209D214:
- add r2, r5, r4, lsl #0x1
- ldrh r1, [r2, #0xc]
- cmp r1, r3
- bhi _0209D238
- ldrh r1, [r2, #0x1c]
- cmp r3, r1
- movcc r3, r1
- movcc r4, r0
- blo _0209D23C
-_0209D238:
- add r4, r4, #0x1
-_0209D23C:
- cmp r4, r7
- blo _0209D214
-_0209D244:
- cmp r3, r6
- addcc sp, sp, #0x14
- movcc r0, #0x0
- ldmccia sp!, {r4-r11,lr}
- bxcc lr
- ldr r0, [r5, #0x34]
- ldrh r3, [r5, #0xa]
- ldrb r1, [r0, #0xe]
- add r0, r0, #0xe
- mov r2, #0x0
- and r1, r1, #0xf
- add r1, r3, r1, lsl #0x2
- mov r1, r1, lsl #0x10
- mov r3, r1, lsr #0x10
- mov r1, r3, asr #0x8
- orr r1, r1, r3, lsl #0x8
- strh r1, [r0, #0x2]
- strh r2, [r5, #0x4]
- ldr r1, [sp, #0x0]
- mov r2, #0x1
- str r2, [r1, #0x0]
- add sp, sp, #0x14
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_0209D2A4: .word 0x00003FFF
-_0209D2A8: .word UNK_021C9520
-_0209D2AC: .word 0x00001FFF
-_0209D2B0: .word CPSiAlloc
-_0209D2B4: .word 0x0000100E
-_0209D2B8: .word CPSiFree
-
- arm_func_start FUN_0209D2BC
-FUN_0209D2BC: ; 0x0209D2BC
- stmdb sp!, {r4-r8,lr}
- mov r6, r1
- ldrh r1, [r6, #0x6]
- mov r7, r0
- mov r5, r2
- cmp r1, #0x0
- beq _0209D2F8
- mov r0, r6
- mov r1, r5
- mov r2, r7
- mov r3, #0x11
- bl FUN_0209FB28
- cmp r0, #0x0
- ldmneia sp!, {r4-r8,lr}
- bxne lr
-_0209D2F8:
- bl OS_DisableInterrupts
- ldr r1, _0209D4D4 ; =OSi_ThreadInfo
- mov r8, r0
- ldr r2, [r1, #0x8]
- cmp r2, #0x0
- beq _0209D4C4
- mvn r12, #0x0
-_0209D314:
- ldr r4, [r2, #0xa4]
- cmp r4, #0x0
- beq _0209D4B8
- ldr r0, [r4, #0x0]
- cmp r0, #0x0
- beq _0209D4B8
- ldrb r0, [r4, #0x8]
- cmp r0, #0xa
- bne _0209D4B8
- ldrh r3, [r6, #0x2]
- ldrh r1, [r4, #0xa]
- mov r0, r3, asr #0x8
- orr r0, r0, r3, lsl #0x8
- mov r0, r0, lsl #0x10
- cmp r1, r0, lsr #0x10
- bne _0209D4B8
- ldrh r3, [r4, #0x18]
- cmp r3, #0x0
- beq _0209D378
- ldrh r1, [r6, #0x0]
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- mov r0, r0, lsl #0x10
- cmp r3, r0, lsr #0x10
- bne _0209D4B8
-_0209D378:
- ldr r1, [r4, #0x1c]
- cmp r1, #0x0
- beq _0209D3C0
- cmp r1, r12
- beq _0209D3C0
- ldrh lr, [r7, #0xc]
- ldrh r0, [r7, #0xe]
- mov r3, lr, asr #0x8
- orr r3, r3, lr, lsl #0x8
- mov r3, r3, lsl #0x10
- mov lr, r0, asr #0x8
- mov r3, r3, lsr #0x10
- orr r0, lr, r0, lsl #0x8
- mov r3, r3, lsl #0x10
- mov r0, r0, lsl #0x10
- orr r0, r3, r0, lsr #0x10
- cmp r1, r0
- bne _0209D4B8
-_0209D3C0:
- ldrh r1, [r7, #0x10]
- ldrh r3, [r7, #0x12]
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- mov r0, r0, lsl #0x10
- mov r1, r3, asr #0x8
- mov r2, r0, lsr #0x10
- orr r0, r1, r3, lsl #0x8
- mov r1, r2, lsl #0x10
- mov r0, r0, lsl #0x10
- orr r0, r1, r0, lsr #0x10
- str r0, [r4, #0x14]
- ldr r0, [r4, #0x1c]
- cmp r0, #0x0
- bne _0209D43C
- ldrh r1, [r7, #0xc]
- ldrh r3, [r7, #0xe]
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- mov r0, r0, lsl #0x10
- mov r1, r3, asr #0x8
- mov r2, r0, lsr #0x10
- orr r0, r1, r3, lsl #0x8
- mov r1, r2, lsl #0x10
- mov r0, r0, lsl #0x10
- orr r0, r1, r0, lsr #0x10
- str r0, [r4, #0x1c]
- ldrh r1, [r6, #0x0]
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- strh r0, [r4, #0x18]
-_0209D43C:
- ldr r0, [r4, #0x44]
- cmp r0, #0x0
- bne _0209D4C4
- ldr r1, [r4, #0x3c]
- sub r0, r5, #0x8
- cmp r0, r1
- strhi r1, [r4, #0x44]
- strls r0, [r4, #0x44]
- ldr r1, [r4, #0x40]
- ldr r2, [r4, #0x44]
- add r0, r6, #0x8
- bl MI_CpuCopy8
- ldr r0, [r4, #0x4]
- cmp r0, #0x3
- bne _0209D48C
- mov r0, #0x0
- str r0, [r4, #0x4]
- ldr r0, [r4, #0x0]
- bl OS_WakeupThreadDirect
- b _0209D4C4
-_0209D48C:
- ldr r3, [r4, #0x38]
- cmp r3, #0x0
- beq _0209D4C4
- ldr r0, [r4, #0x40]
- ldr r1, [r4, #0x44]
- mov r2, r4
- blx r3
- cmp r0, #0x0
- movne r0, #0x0
- strne r0, [r4, #0x44]
- b _0209D4C4
-_0209D4B8:
- ldr r2, [r2, #0x68]
- cmp r2, #0x0
- bne _0209D314
-_0209D4C4:
- mov r0, r8
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_0209D4D4: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209D4D8
-FUN_0209D4D8:
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- mov r0, r5
- mov r1, r4
- mov r2, r6
- mov r3, #0x6
- bl FUN_0209FB28
- cmp r0, #0x0
- ldmneia sp!, {r4-r6,lr}
- bxne lr
- ldrb r0, [r5, #0xc]
- ldrb r2, [r5, #0xd]
- and r1, r0, #0xf0
- mov r0, r1, asr #0x1
- add r0, r1, r0, lsr #0x1e
- and r1, r2, #0x17
- cmp r1, #0x10
- sub r4, r4, r0, asr #0x2
- bgt _0209D558
- cmp r1, #0x10
- bge _0209D5C4
- cmp r1, #0x2
- bgt _0209D5F4
- cmp r1, #0x1
- blt _0209D5F4
- cmp r1, #0x1
- beq _0209D5DC
- cmp r1, #0x2
- beq _0209D57C
- b _0209D5F4
-_0209D558:
- cmp r1, #0x12
- bgt _0209D5F4
- cmp r1, #0x11
- blt _0209D5F4
- cmp r1, #0x11
- beq _0209D5C4
- cmp r1, #0x12
- beq _0209D5A0
- b _0209D5F4
-_0209D57C:
- ands r0, r2, #0x28
- ldmneia sp!, {r4-r6,lr}
- bxne lr
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl FUN_0209DBB0
- ldmia sp!, {r4-r6,lr}
- bx lr
-_0209D5A0:
- ands r0, r2, #0x28
- ldmneia sp!, {r4-r6,lr}
- bxne lr
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl FUN_0209DA9C
- ldmia sp!, {r4-r6,lr}
- bx lr
-_0209D5C4:
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl FUN_0209D774
- ldmia sp!, {r4-r6,lr}
- bx lr
-_0209D5DC:
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl FUN_0209D674
- ldmia sp!, {r4-r6,lr}
- bx lr
-_0209D5F4:
- ands r0, r2, #0x4
- beq _0209D610
- mov r0, r6
- mov r1, r5
- bl FUN_0209D62C
- ldmia sp!, {r4-r6,lr}
- bx lr
-_0209D610:
- mov r0, r6
- mov r1, r5
- mov r2, r4
- mov r3, #0x0
- bl FUN_0209DE34
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start FUN_0209D62C
-FUN_0209D62C: ; 0x0209D62C
- stmdb sp!, {r4,lr}
- bl FUN_0209E0C8
- movs r4, r0
- ldmeqia sp!, {r4,lr}
- bxeq lr
- bl OS_YieldThread
- mov r1, #0x0
- strb r1, [r4, #0x8]
- ldr r0, [r4, #0x4]
- sub r0, r0, #0x1
- cmp r0, #0x1
- ldmhiia sp!, {r4,lr}
- bxhi lr
- str r1, [r4, #0x4]
- ldr r0, [r4, #0x0]
- bl OS_WakeupThreadDirect
- ldmia sp!, {r4,lr}
- bx lr
-
- arm_func_start FUN_0209D674
-FUN_0209D674: ; 0x0209D674
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- mov r5, r2
- bl FUN_0209E0C8
- movs r4, r0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- ldrb r1, [r4, #0x8]
- cmp r1, #0x4
- beq _0209D72C
- cmp r1, #0x7
- beq _0209D6BC
- cmp r1, #0x8
- beq _0209D6E4
- b _0209D754
-_0209D6BC:
- ldr r2, [r4, #0x24]
- mov r1, #0x0
- add r2, r2, #0x1
- str r2, [r4, #0x24]
- bl FUN_0209DF84
- mov r0, #0x9
- add sp, sp, #0x4
- strb r0, [r4, #0x8]
- ldmia sp!, {r4-r7,lr}
- bx lr
-_0209D6E4:
- ldr r2, [r4, #0x24]
- mov r1, #0x0
- add r2, r2, #0x1
- str r2, [r4, #0x24]
- bl FUN_0209DF84
- mov r1, #0x0
- strb r1, [r4, #0x8]
- ldr r0, [r4, #0x4]
- cmp r0, #0x2
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- str r1, [r4, #0x4]
- ldr r0, [r4, #0x0]
- bl OS_WakeupThreadDirect
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_0209D72C:
- ldr r2, [r4, #0x24]
- mov r1, #0x0
- add r2, r2, #0x1
- str r2, [r4, #0x24]
- bl FUN_0209DF70
- mov r0, #0x6
- add sp, sp, #0x4
- strb r0, [r4, #0x8]
- ldmia sp!, {r4-r7,lr}
- bx lr
-_0209D754:
- mov r0, r7
- mov r1, r6
- mov r2, r5
- mov r3, #0x0
- bl FUN_0209DE34
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start FUN_0209D774
-FUN_0209D774: ; 0x0209D774
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r8, r0
- mov r7, r1
- mov r6, r2
- bl FUN_0209E0C8
- movs r5, r0
- bne _0209D7B4
- mov r0, r8
- mov r1, r7
- mov r2, r6
- mov r3, #0x0
- bl FUN_0209DE34
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,lr}
- bx lr
-_0209D7B4:
- ldrh r3, [r7, #0x8]
- ldrh r1, [r7, #0xa]
- ldrb r4, [r7, #0xd]
- mov r2, r3, asr #0x8
- orr r2, r2, r3, lsl #0x8
- mov r2, r2, lsl #0x10
- mov r3, r1, asr #0x8
- mov r2, r2, lsr #0x10
- orr r1, r3, r1, lsl #0x8
- mov r2, r2, lsl #0x10
- mov r1, r1, lsl #0x10
- orr r1, r2, r1, lsr #0x10
- str r1, [r5, #0x30]
- ldrh r9, [r7, #0x4]
- ldrh r1, [r7, #0x6]
- ldrb r3, [r5, #0x8]
- mov r2, r9, asr #0x8
- orr r2, r2, r9, lsl #0x8
- mov r2, r2, lsl #0x10
- mov r9, r1, asr #0x8
- mov r2, r2, lsr #0x10
- orr r1, r9, r1, lsl #0x8
- mov r2, r2, lsl #0x10
- mov r1, r1, lsl #0x10
- cmp r3, #0x4
- orr r2, r2, r1, lsr #0x10
- bne _0209D840
- ldr r1, [r5, #0x24]
- cmp r1, r2
- beq _0209D840
- mov r1, #0x0
- bl FUN_0209DF84
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,lr}
- bx lr
-_0209D840:
- ldrh r1, [r7, #0xe]
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- strh r0, [r5, #0x2c]
- ldrb r0, [r5, #0x8]
- cmp r0, #0x9
- addls pc, pc, r0, lsl #0x2
- b _0209DA70
-_0209D860:
- b _0209D888
-_0209D864:
- b _0209DA70
-_0209D868:
- b _0209D888
-_0209D86C:
- b _0209D8A0
-_0209D870:
- b _0209D8CC
-_0209D874:
- b _0209DA70
-_0209D878:
- b _0209DA4C
-_0209D87C:
- b _0209D9D8
-_0209D880:
- b _0209D9D8
-_0209D884:
- b _0209DA4C
-_0209D888:
- mov r0, r8
- mov r1, r7
- mov r2, r6
- mov r3, #0x0
- bl FUN_0209DE34
- b _0209DA8C
-_0209D8A0:
- mov r0, #0x4
- strb r0, [r5, #0x8]
- ldr r0, [r5, #0x4]
- cmp r0, #0x1
- bne _0209D8C4
- mov r0, #0x0
- str r0, [r5, #0x4]
- ldr r0, [r5, #0x0]
- bl OS_WakeupThreadDirect
-_0209D8C4:
- cmp r6, #0x0
- beq _0209DA8C
-_0209D8CC:
- ldr r0, [r5, #0x34]
- add r0, r0, #0x1
- str r0, [r5, #0x34]
- ldr r1, [r5, #0x3c]
- ldr r0, [r5, #0x44]
- sub r0, r1, r0
- cmp r6, r0
- movhi r9, #0x0
- movhi r6, r0
- movls r9, #0x1
- cmp r6, #0x0
- beq _0209D968
- bl OS_DisableInterrupts
- ldrb r1, [r7, #0xc]
- ldr r12, [r5, #0x40]
- ldr r3, [r5, #0x44]
- and r2, r1, #0xf0
- mov r1, r2, asr #0x1
- add r1, r2, r1, lsr #0x1e
- mov r8, r0
- mov r2, r6
- add r0, r7, r1, asr #0x2
- add r1, r12, r3
- bl MI_CpuCopy8
- ldr r1, [r5, #0x44]
- mov r0, r8
- add r1, r1, r6
- str r1, [r5, #0x44]
- ldr r1, [r5, #0x24]
- add r1, r1, r6
- str r1, [r5, #0x24]
- bl OS_RestoreInterrupts
- ldr r0, [r5, #0x4]
- cmp r0, #0x2
- bne _0209D968
- mov r0, #0x0
- str r0, [r5, #0x4]
- ldr r0, [r5, #0x0]
- bl OS_WakeupThreadDirect
-_0209D968:
- cmp r9, #0x0
- beq _0209D9C0
- ands r0, r4, #0x1
- beq _0209D9C0
- mov r0, #0x6
- strb r0, [r5, #0x8]
- ldr r1, [r5, #0x24]
- mov r0, r5
- add r2, r1, #0x1
- mov r1, #0x0
- str r2, [r5, #0x24]
- bl FUN_0209DF70
- cmp r6, #0x0
- bne _0209DA8C
- ldr r0, [r5, #0x4]
- cmp r0, #0x2
- bne _0209DA8C
- mov r0, #0x0
- str r0, [r5, #0x4]
- ldr r0, [r5, #0x0]
- bl OS_WakeupThreadDirect
- b _0209DA8C
-_0209D9C0:
- cmp r6, #0x0
- beq _0209DA8C
- mov r0, r5
- mov r1, #0x0
- bl FUN_0209DF84
- b _0209DA8C
-_0209D9D8:
- ands r0, r4, #0x1
- beq _0209DA20
- ldr r1, [r5, #0x24]
- add r0, r6, #0x1
- add r2, r1, r0
- mov r0, r5
- mov r1, #0x0
- str r2, [r5, #0x24]
- bl FUN_0209DF84
- mov r1, #0x0
- strb r1, [r5, #0x8]
- ldr r0, [r5, #0x4]
- cmp r0, #0x2
- bne _0209DA8C
- str r1, [r5, #0x4]
- ldr r0, [r5, #0x0]
- bl OS_WakeupThreadDirect
- b _0209DA8C
-_0209DA20:
- cmp r6, #0x0
- beq _0209DA40
- ldr r1, [r5, #0x24]
- mov r0, r5
- add r2, r1, r6
- mov r1, #0x0
- str r2, [r5, #0x24]
- bl FUN_0209DF84
-_0209DA40:
- mov r0, #0x8
- strb r0, [r5, #0x8]
- b _0209DA8C
-_0209DA4C:
- mov r1, #0x0
- strb r1, [r5, #0x8]
- ldr r0, [r5, #0x4]
- cmp r0, #0x2
- bne _0209DA8C
- str r1, [r5, #0x4]
- ldr r0, [r5, #0x0]
- bl OS_WakeupThreadDirect
- b _0209DA8C
-_0209DA70:
- ands r0, r4, #0x1
- ldrne r0, [r5, #0x24]
- mov r1, #0x0
- addne r0, r0, #0x1
- strne r0, [r5, #0x24]
- mov r0, r5
- bl FUN_0209DF84
-_0209DA8C:
- bl OS_YieldThread
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,lr}
- bx lr
-
- arm_func_start FUN_0209DA9C
-FUN_0209DA9C: ; 0x0209DA9C
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r5, r1
- mov r6, r2
- bl FUN_0209E0C8
- movs r4, r0
- beq _0209DAC8
- ldrb r0, [r4, #0x8]
- cmp r0, #0x2
- beq _0209DAE8
-_0209DAC8:
- mov r0, r7
- mov r1, r5
- mov r2, r6
- mov r3, #0x0
- bl FUN_0209DE34
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_0209DAE8:
- bl OS_YieldThread
- ldrh r2, [r5, #0x4]
- ldrh r12, [r5, #0x6]
- mov r0, r5
- mov r1, r2, asr #0x8
- orr r1, r1, r2, lsl #0x8
- mov r1, r1, lsl #0x10
- mov r2, r12, asr #0x8
- mov r3, r1, lsr #0x10
- orr r1, r2, r12, lsl #0x8
- mov r2, r3, lsl #0x10
- mov r1, r1, lsl #0x10
- orr r1, r2, r1, lsr #0x10
- add r1, r1, #0x1
- str r1, [r4, #0x24]
- ldrh r3, [r5, #0x8]
- ldrh lr, [r5, #0xa]
- mov r1, r4
- mov r2, r3, asr #0x8
- orr r2, r2, r3, lsl #0x8
- mov r2, r2, lsl #0x10
- mov r3, lr, asr #0x8
- mov r12, r2, lsr #0x10
- orr r2, r3, lr, lsl #0x8
- mov r3, r12, lsl #0x10
- mov r2, r2, lsl #0x10
- orr r2, r3, r2, lsr #0x10
- str r2, [r4, #0x30]
- ldrh r3, [r5, #0xe]
- mov r2, r3, asr #0x8
- orr r2, r2, r3, lsl #0x8
- strh r2, [r4, #0x2c]
- bl FUN_0209E044
- mov r0, r4
- mov r1, #0x0
- bl FUN_0209DF84
- mov r0, #0x4
- strb r0, [r4, #0x8]
- ldr r0, [r4, #0x4]
- cmp r0, #0x1
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- mov r0, #0x0
- str r0, [r4, #0x4]
- ldr r0, [r4, #0x0]
- bl OS_WakeupThreadDirect
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start FUN_0209DBB0
-FUN_0209DBB0: ; 0x0209DBB0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r4, r0
- ldrh r12, [r4, #0x10]
- ldrh r7, [r4, #0xc]
- ldrh r3, [r4, #0x12]
- mov r5, r12, asr #0x8
- mov r6, r7, asr #0x8
- orr r5, r5, r12, lsl #0x8
- orr r6, r6, r7, lsl #0x8
- mov r12, r6, lsl #0x10
- ldrh r0, [r4, #0xe]
- mov lr, r5, lsl #0x10
- mov r5, r3, asr #0x8
- mov r6, r0, asr #0x8
- mov r7, r12, lsr #0x10
- orr r0, r6, r0, lsl #0x8
- orr r3, r5, r3, lsl #0x8
- mov r12, lr, lsr #0x10
- mov r6, r7, lsl #0x10
- mov r0, r0, lsl #0x10
- mov r5, r12, lsl #0x10
- mov r3, r3, lsl #0x10
- mov r7, r1
- orr r1, r5, r3, lsr #0x10
- orr r0, r6, r0, lsr #0x10
- mov r5, r2
- bl FUN_0209E3DC
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- mov r0, r4
- mov r1, r7
- mov r2, r5
- bl FUN_0209DCB4
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- mov r0, r4
- mov r1, r7
- bl FUN_0209E200
- movs r2, r0
- beq _0209DC7C
- mov r0, r4
- mov r1, r7
- bl FUN_0209DD44
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_0209DC7C:
- bl OS_YieldThread
- mov r0, r4
- mov r1, r7
- bl FUN_0209E200
- movs r2, r0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- mov r0, r4
- mov r1, r7
- bl FUN_0209DD44
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start FUN_0209DCB4
-FUN_0209DCB4:
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl FUN_0209E0C8
- movs r2, r0
- beq _0209DD38
- ldrb r0, [r2, #0x8]
- cmp r0, #0x1
- bne _0209DCEC
- mov r0, r6
- mov r1, r5
- bl FUN_0209DD44
- b _0209DD2C
-_0209DCEC:
- add r0, r0, #0xfd
- and r0, r0, #0xff
- cmp r0, #0x1
- bhi _0209DD18
- ldr r1, [r2, #0x28]
- mov r0, r6
- sub r3, r1, #0x1
- mov r1, r5
- str r3, [r2, #0x28]
- bl FUN_0209DD44
- b _0209DD2C
-_0209DD18:
- mov r0, r6
- mov r1, r5
- mov r2, r4
- mov r3, #0x0
- bl FUN_0209DE34
-_0209DD2C:
- mov r0, #0x1
- ldmia sp!, {r4-r6,lr}
- bx lr
-_0209DD38:
- mov r0, #0x0
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start FUN_0209DD44
-FUN_0209DD44: ; 0x0209DD44
- stmdb sp!, {r4-r6,lr}
- mov r4, r2
- mov r2, #0x3
- mov r6, r0
- mov r5, r1
- strb r2, [r4, #0x8]
- bl OS_GetTick
- mov r0, r0, lsr #0x10
- orr r0, r0, r1, lsl #0x10
- str r0, [r4, #0x10]
- ldrh r2, [r6, #0x10]
- ldrh r3, [r6, #0x12]
- mov r0, r5
- mov r1, r2, asr #0x8
- orr r1, r1, r2, lsl #0x8
- mov r1, r1, lsl #0x10
- mov r2, r3, asr #0x8
- orr r2, r2, r3, lsl #0x8
- mov r1, r1, lsr #0x10
- mov r3, r1, lsl #0x10
- mov r1, r2, lsl #0x10
- orr r1, r3, r1, lsr #0x10
- str r1, [r4, #0x14]
- ldrh r3, [r5, #0x0]
- mov r1, r4
- mov r2, r3, asr #0x8
- orr r2, r2, r3, lsl #0x8
- strh r2, [r4, #0x18]
- ldrh r3, [r6, #0xc]
- ldrh r6, [r6, #0xe]
- mov r2, r3, asr #0x8
- orr r2, r2, r3, lsl #0x8
- mov r2, r2, lsl #0x10
- mov r3, r6, asr #0x8
- orr r3, r3, r6, lsl #0x8
- mov r2, r2, lsr #0x10
- mov r6, r2, lsl #0x10
- mov r2, r3, lsl #0x10
- orr r2, r6, r2, lsr #0x10
- str r2, [r4, #0x1c]
- ldrh r3, [r5, #0x4]
- ldrh r6, [r5, #0x6]
- mov r2, r3, asr #0x8
- orr r2, r2, r3, lsl #0x8
- mov r2, r2, lsl #0x10
- mov r3, r6, asr #0x8
- mov r5, r2, lsr #0x10
- orr r2, r3, r6, lsl #0x8
- mov r3, r5, lsl #0x10
- mov r2, r2, lsl #0x10
- orr r2, r3, r2, lsr #0x10
- add r2, r2, #0x1
- str r2, [r4, #0x24]
- bl FUN_0209E044
- mov r0, r4
- mov r1, #0x12
- mov r2, #0x0
- bl FUN_0209DF98
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start FUN_0209DE34
-FUN_0209DE34: ; 0x0209DE34
- stmdb sp!, {r4-r8,lr}
- ldr r4, _0209DF6C ; =UNK_021C903C
- mov r8, r0
- mov r7, r1
- mov r6, r2
- mov r0, r4
- mov r1, #0x0
- mov r2, #0x64
- mov r5, r3
- bl MI_CpuFill8
- ldrh r2, [r7, #0x2]
- mov r1, r4
- mov r0, r2, asr #0x8
- orr r0, r0, r2, lsl #0x8
- strh r0, [r1, #0xa]
- ldrh r2, [r7, #0x0]
- mov r0, r2, asr #0x8
- orr r0, r0, r2, lsl #0x8
- strh r0, [r1, #0x18]
- ldrh r2, [r8, #0xc]
- ldrh r8, [r8, #0xe]
- mov r0, r2, asr #0x8
- orr r0, r0, r2, lsl #0x8
- mov r0, r0, lsl #0x10
- mov r2, r8, asr #0x8
- mov r3, r0, lsr #0x10
- orr r0, r2, r8, lsl #0x8
- mov r2, r3, lsl #0x10
- mov r0, r0, lsl #0x10
- orr r0, r2, r0, lsr #0x10
- str r0, [r1, #0x1c]
- ldrb r0, [r7, #0xd]
- ands r0, r0, #0x10
- beq _0209DF04
- ldrh r2, [r7, #0x8]
- ldrh r6, [r7, #0xa]
- mov r0, r4
- mov r1, r2, asr #0x8
- orr r1, r1, r2, lsl #0x8
- mov r1, r1, lsl #0x10
- mov r2, r6, asr #0x8
- mov r3, r1, lsr #0x10
- orr r1, r2, r6, lsl #0x8
- mov r2, r3, lsl #0x10
- mov r1, r1, lsl #0x10
- orr r3, r2, r1, lsr #0x10
- mov r2, r5
- mov r1, #0x4
- str r3, [r4, #0x28]
- bl FUN_0209DF98
- ldmia sp!, {r4-r8,lr}
- bx lr
-_0209DF04:
- mov r0, #0x0
- str r0, [r4, #0x28]
- ldrh r1, [r7, #0x4]
- ldrh r3, [r7, #0x6]
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- mov r0, r0, lsl #0x10
- mov r1, r3, asr #0x8
- mov r2, r0, lsr #0x10
- orr r0, r1, r3, lsl #0x8
- mov r1, r2, lsl #0x10
- mov r0, r0, lsl #0x10
- orr r0, r1, r0, lsr #0x10
- add r0, r6, r0
- str r0, [r4, #0x24]
- ldrb r0, [r7, #0xd]
- mov r2, r5
- mov r1, #0x14
- ands r0, r0, #0x3
- ldrne r0, [r4, #0x24]
- addne r0, r0, #0x1
- strne r0, [r4, #0x24]
- mov r0, r4
- bl FUN_0209DF98
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_0209DF6C: .word UNK_021C903C
-
- arm_func_start FUN_0209DF70
-FUN_0209DF70:
- ldr ip, _0209DF80 ; =FUN_0209DF98
- mov r2, r1
- mov r1, #0x11
- bx r12
- .balign 4
-_0209DF80: .word FUN_0209DF98
-
- arm_func_start FUN_0209DF84
-FUN_0209DF84: ; 0x0209DF84
- ldr ip, _0209DF94 ; =FUN_0209DF98
- mov r2, r1
- mov r1, #0x10
- bx r12
- .balign 4
-_0209DF94: .word FUN_0209DF98
-
- arm_func_start FUN_0209DF98
-FUN_0209DF98: ; 0x0209DF98
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x8
- mov r6, r0
- ldr r0, [r6, #0x1c]
- mov r5, r1
- mov r4, r2
- bl FUN_0209E014
- cmp r0, #0x0
- bne _0209DFD0
- ldr r0, _0209E00C ; =OSi_ThreadInfo
- ldr r1, _0209E010 ; =UNK_021C9160
- ldr r0, [r0, #0x4]
- cmp r0, r1
- beq _0209DFF4
-_0209DFD0:
- mov r0, #0x0
- mov r1, r0
- mov r2, r6
- mov r3, r5
- str r4, [sp, #0x0]
- bl FUN_0209E878
- add sp, sp, #0x8
- ldmia sp!, {r4-r6,lr}
- bx lr
-_0209DFF4:
- ldr r0, [r6, #0x1c]
- bl FUN_0209FAB0
- bl FUN_0209F338
- add sp, sp, #0x8
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_0209E00C: .word OSi_ThreadInfo
-_0209E010: .word UNK_021C9160
-
- arm_func_start FUN_0209E014
-FUN_0209E014:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl FUN_0209FAB0
- cmp r0, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x1
- ldmeqia sp!, {lr}
- bxeq lr
- bl FUN_0209F438
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start FUN_0209E044
-FUN_0209E044: ; 0x0209E044
- mov r2, #0x218
- strh r2, [r1, #0x2e]
- ldrb r2, [r0, #0xc]
- add r3, r0, #0x14
- and r2, r2, #0xf0
- mov r0, r2, asr #0x1
- add r0, r2, r0, lsr #0x1e
- mov r0, r0, asr #0x2
- subs r0, r0, #0x14
- sub r12, r0, #0x1
- bxeq lr
-_0209E070:
- ldrb r0, [r3], #0x1
- cmp r0, #0x0
- bxeq lr
- cmp r0, #0x1
- beq _0209E0B8
- cmp r0, #0x2
- bne _0209E0A8
- ldrb r2, [r3, #0x1]
- ldrb r0, [r3, #0x2]
- add r3, r3, #0x3
- sub r12, r12, #0x3
- orr r0, r0, r2, lsl #0x8
- strh r0, [r1, #0x2e]
- b _0209E0B8
-_0209E0A8:
- ldrb r0, [r3, #0x0]
- sub r0, r0, #0x1
- sub r12, r12, r0
- add r3, r3, r0
-_0209E0B8:
- cmp r12, #0x0
- sub r12, r12, #0x1
- bne _0209E070
- bx lr
-
- arm_func_start FUN_0209E0C8
-FUN_0209E0C8: ; 0x0209E0C8
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr r2, _0209E140 ; =OSi_ThreadInfo
- mov r7, r0
- ldr r4, [r2, #0x8]
- mov r6, r1
- cmp r4, #0x0
- beq _0209E130
-_0209E0E8:
- ldr r5, [r4, #0xa4]
- cmp r5, #0x0
- beq _0209E124
- ldr r0, [r5, #0x0]
- cmp r0, #0x0
- beq _0209E124
- mov r0, r7
- mov r1, r6
- mov r2, r5
- bl FUN_0209E144
- cmp r0, #0x0
- addne sp, sp, #0x4
- movne r0, r5
- ldmneia sp!, {r4-r7,lr}
- bxne lr
-_0209E124:
- ldr r4, [r4, #0x68]
- cmp r4, #0x0
- bne _0209E0E8
-_0209E130:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_0209E140: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209E144
-FUN_0209E144:
- stmdb sp!, {r4-r6,lr}
- ldrb r4, [r2, #0x8]
- mov r12, #0x0
- mov r3, r12
- mov r6, r12
- mov r5, r12
- cmp r4, #0xa
- beq _0209E16C
- cmp r4, #0xb
- movne r5, #0x1
-_0209E16C:
- cmp r5, #0x0
- beq _0209E190
- ldrh lr, [r1, #0x2]
- ldrh r5, [r2, #0xa]
- mov r4, lr, asr #0x8
- orr r4, r4, lr, lsl #0x8
- mov lr, r4, lsl #0x10
- cmp r5, lr, lsr #0x10
- moveq r6, #0x1
-_0209E190:
- cmp r6, #0x0
- beq _0209E1B4
- ldrh r4, [r1, #0x0]
- ldrh lr, [r2, #0x18]
- mov r1, r4, asr #0x8
- orr r1, r1, r4, lsl #0x8
- mov r1, r1, lsl #0x10
- cmp lr, r1, lsr #0x10
- moveq r3, #0x1
-_0209E1B4:
- cmp r3, #0x0
- beq _0209E1F4
- ldrh r1, [r0, #0xc]
- ldrh lr, [r0, #0xe]
- ldr r3, [r2, #0x1c]
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- mov r0, r0, lsl #0x10
- mov r1, lr, asr #0x8
- mov r2, r0, lsr #0x10
- orr r0, r1, lr, lsl #0x8
- mov r1, r2, lsl #0x10
- mov r0, r0, lsl #0x10
- orr r0, r1, r0, lsr #0x10
- cmp r3, r0
- moveq r12, #0x1
-_0209E1F4:
- mov r0, r12
- ldmia sp!, {r4-r6,lr}
- bx lr
-
- arm_func_start FUN_0209E200
-FUN_0209E200: ; 0x0209E200
- stmdb sp!, {r4-r6,lr}
- ldr r2, _0209E2DC ; =OSi_ThreadInfo
- ldr r3, [r2, #0x8]
- cmp r3, #0x0
- beq _0209E2D0
-_0209E214:
- ldr r12, [r3, #0xa4]
- cmp r12, #0x0
- beq _0209E2C4
- ldr r2, [r12, #0x0]
- cmp r2, #0x0
- beq _0209E2C4
- ldrb r2, [r12, #0x8]
- cmp r2, #0x1
- bne _0209E2C4
- ldrh r5, [r1, #0x2]
- ldrh r4, [r12, #0xa]
- mov r2, r5, asr #0x8
- orr r2, r2, r5, lsl #0x8
- mov r2, r2, lsl #0x10
- cmp r4, r2, lsr #0x10
- bne _0209E2C4
- ldrh r5, [r12, #0x18]
- cmp r5, #0x0
- beq _0209E278
- ldrh r4, [r1, #0x0]
- mov r2, r4, asr #0x8
- orr r2, r2, r4, lsl #0x8
- mov r2, r2, lsl #0x10
- cmp r5, r2, lsr #0x10
- bne _0209E2C4
-_0209E278:
- ldr r2, [r12, #0x1c]
- cmp r2, #0x0
- beq _0209E2B8
- ldrh r5, [r0, #0xc]
- ldrh r6, [r0, #0xe]
- mov r4, r5, asr #0x8
- orr r4, r4, r5, lsl #0x8
- mov lr, r4, lsl #0x10
- mov r4, r6, asr #0x8
- mov lr, lr, lsr #0x10
- orr r4, r4, r6, lsl #0x8
- mov r5, lr, lsl #0x10
- mov lr, r4, lsl #0x10
- orr r4, r5, lr, lsr #0x10
- cmp r2, r4
- bne _0209E2C4
-_0209E2B8:
- mov r0, r12
- ldmia sp!, {r4-r6,lr}
- bx lr
-_0209E2C4:
- ldr r3, [r3, #0x68]
- cmp r3, #0x0
- bne _0209E214
-_0209E2D0:
- mov r0, #0x0
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_0209E2DC: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209E2E0
-FUN_0209E2E0: ; 0x0209E2E0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r1
- mov r4, r2
- mov r6, r0
- mov r0, r5
- mov r1, r4
- bl FUN_0209FB84
- ldr r1, _0209E3D8 ; =0x0000FFFF
- cmp r0, r1
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- ldrh r12, [r6, #0x10]
- ldrh r7, [r6, #0xc]
- ldrh r0, [r6, #0xe]
- ldrh r1, [r6, #0x12]
- mov r3, r7, asr #0x8
- mov lr, r0, asr #0x8
- orr r0, lr, r0, lsl #0x8
- mov r2, r12, asr #0x8
- orr r7, r3, r7, lsl #0x8
- orr r3, r2, r12, lsl #0x8
- mov r2, r7, lsl #0x10
- mov r12, r1, asr #0x8
- orr r1, r12, r1, lsl #0x8
- mov r3, r3, lsl #0x10
- mov r7, r2, lsr #0x10
- mov r2, r3, lsr #0x10
- mov r3, r7, lsl #0x10
- mov r0, r0, lsl #0x10
- mov r2, r2, lsl #0x10
- mov r1, r1, lsl #0x10
- orr r0, r3, r0, lsr #0x10
- orr r1, r2, r1, lsr #0x10
- bl FUN_0209E3DC
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- ldrb r0, [r5, #0x0]
- cmp r0, #0x0
- beq _0209E3A0
- cmp r0, #0x8
- beq _0209E3BC
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_0209E3A0:
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl FUN_0209E40C
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_0209E3BC:
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl FUN_0209E524
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_0209E3D8: .word 0x0000FFFF
-
- arm_func_start FUN_0209E3DC
-FUN_0209E3DC:
- cmp r0, #0x0
- beq _0209E404
- mvn r2, #0x0
- cmp r0, r2
- beq _0209E404
- cmp r1, #0x0
- beq _0209E404
- cmp r1, r2
- movne r0, #0x1
- bxne lr
-_0209E404:
- mov r0, #0x0
- bx lr
-
- arm_func_start FUN_0209E40C
-FUN_0209E40C: ; 0x0209E40C
- stmdb sp!, {r4-r8,lr}
- mov r7, r0
- mov r6, r1
- mov r5, r2
- bl OS_DisableInterrupts
- ldr r1, _0209E520 ; =OSi_ThreadInfo
- mov r8, r0
- ldr r2, [r1, #0x8]
- cmp r2, #0x0
- beq _0209E510
-_0209E434:
- ldr r4, [r2, #0xa4]
- cmp r4, #0x0
- beq _0209E504
- ldr r3, [r4, #0x0]
- cmp r3, #0x0
- beq _0209E504
- ldrb r0, [r4, #0x8]
- cmp r0, #0xb
- bne _0209E504
- ldrh r1, [r6, #0x4]
- mov r0, r3, lsl #0x10
- mov r0, r0, lsr #0x10
- cmp r0, r1
- bne _0209E504
- ldrh r1, [r4, #0xa]
- ldrh r0, [r6, #0x6]
- cmp r1, r0
- bne _0209E504
- ldr r0, [r4, #0x44]
- cmp r0, #0x0
- bne _0209E504
- ldrh r12, [r7, #0xc]
- ldrh r1, [r7, #0xe]
- ldr r0, [r4, #0x1c]
- mov r3, r12, asr #0x8
- orr r3, r3, r12, lsl #0x8
- mov r3, r3, lsl #0x10
- mov r12, r1, asr #0x8
- mov r3, r3, lsr #0x10
- orr r1, r12, r1, lsl #0x8
- mov r3, r3, lsl #0x10
- mov r1, r1, lsl #0x10
- orr r1, r3, r1, lsr #0x10
- cmp r0, r1
- bne _0209E504
- ldr r1, [r4, #0x3c]
- sub r0, r5, #0x8
- cmp r0, r1
- strhi r1, [r4, #0x44]
- strls r0, [r4, #0x44]
- ldr r1, [r4, #0x40]
- ldr r2, [r4, #0x44]
- add r0, r6, #0x8
- bl MI_CpuCopy8
- ldr r0, [r4, #0x4]
- cmp r0, #0x3
- bne _0209E510
- mov r0, #0x0
- str r0, [r4, #0x4]
- ldr r0, [r4, #0x0]
- bl OS_WakeupThreadDirect
- b _0209E510
-_0209E504:
- ldr r2, [r2, #0x68]
- cmp r2, #0x0
- bne _0209E434
-_0209E510:
- mov r0, r8
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_0209E520: .word OSi_ThreadInfo
-
- arm_func_start FUN_0209E524
-FUN_0209E524: ; 0x0209E524
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0xc
- mov r6, r0
- ldrh r3, [r6, #0xc]
- ldrh r4, [r6, #0xe]
- mov r5, r1
- mov r0, r3, asr #0x8
- orr r0, r0, r3, lsl #0x8
- mov r0, r0, lsl #0x10
- mov r1, r4, asr #0x8
- mov r3, r0, lsr #0x10
- orr r0, r1, r4, lsl #0x8
- mov r1, r3, lsl #0x10
- mov r0, r0, lsl #0x10
- orr r0, r1, r0, lsr #0x10
- mov r4, r2
- bl FUN_0209FAB0
- movs r7, r0
- addeq sp, sp, #0xc
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- bl FUN_0209F438
- cmp r0, #0x0
- bne _0209E598
- mov r0, r7
- bl FUN_0209F338
- add sp, sp, #0xc
- ldmia sp!, {r4-r7,lr}
- bx lr
-_0209E598:
- mov r2, #0x0
- strb r2, [r5, #0x0]
- mov r0, r5
- mov r1, r4
- strh r2, [r5, #0x2]
- bl FUN_0209FB84
- mov r1, r0, asr #0x8
- orr r0, r1, r0, lsl #0x8
- strh r0, [r5, #0x2]
- ldrh r1, [r6, #0xc]
- ldrh r6, [r6, #0xe]
- mov r2, #0x0
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- mov r0, r0, lsl #0x10
- mov r1, r6, asr #0x8
- mov r3, r0, lsr #0x10
- orr r0, r1, r6, lsl #0x8
- mov r1, r3, lsl #0x10
- mov r0, r0, lsl #0x10
- orr r6, r1, r0, lsr #0x10
- mov r0, r5
- mov r1, r4
- mov r3, r2
- str r6, [sp, #0x0]
- mov r4, #0x1
- str r4, [sp, #0x4]
- bl FUN_0209ECFC
- add sp, sp, #0xc
- ldmia sp!, {r4-r7,lr}
- bx lr
-
- arm_func_start FUN_0209E614
-FUN_0209E614: ; 0x0209E614
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- cmp r1, #0x1c
- mov r6, r0
- addcc sp, sp, #0x4
- ldmccia sp!, {r4-r7,lr}
- bxcc lr
- ldr r1, _0209E7BC ; =UNK_021C8F14
- add r0, r6, #0x8
- bl FUN_0209F9A0
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- ldr r0, _0209E7C0 ; =UNK_021C8F04
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- ldrh r0, [r6, #0x0]
- cmp r0, #0x100
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- ldrh r0, [r6, #0x2]
- cmp r0, #0x8
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- ldrh r1, [r6, #0x4]
- ldr r0, _0209E7C4 ; =0x00000406
- cmp r1, r0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- ldrh r1, [r6, #0x6]
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- mov r0, r0, lsl #0x10
- mov r4, r0, lsr #0x10
- cmp r4, #0x1
- beq _0209E6D0
- cmp r4, #0x2
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
-_0209E6D0:
- ldrh r1, [r6, #0xe]
- ldrh r5, [r6, #0x10]
- ldr r2, _0209E7C0 ; =UNK_021C8F04
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- mov r0, r0, lsl #0x10
- mov r3, r0, lsr #0x10
- mov r1, r5, asr #0x8
- orr r0, r1, r5, lsl #0x8
- mov r1, r0, lsl #0x10
- mov r3, r3, lsl #0x10
- orr r1, r3, r1, lsr #0x10
- ldr r0, [r2, #0x0]
- ldrh r3, [r6, #0x18]
- ldrh lr, [r6, #0x1a]
- cmp r1, r0
- mov r2, r3, asr #0x8
- orr r2, r2, r3, lsl #0x8
- mov r2, r2, lsl #0x10
- moveq r5, #0x1
- mov r3, lr, asr #0x8
- mov r12, r2, lsr #0x10
- orr r2, r3, lr, lsl #0x8
- mov r3, r12, lsl #0x10
- mov r2, r2, lsl #0x10
- orr r2, r3, r2, lsr #0x10
- movne r5, #0x0
- cmp r0, r2
- moveq r7, #0x1
- movne r7, #0x0
- cmp r5, #0x0
- bne _0209E75C
- mov r2, r7
- add r0, r6, #0x8
- bl FUN_0209F12C
-_0209E75C:
- cmp r4, #0x1
- bne _0209E780
- cmp r7, #0x0
- beq _0209E780
- mov r0, r6
- bl FUN_0209E7CC
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_0209E780:
- cmp r4, #0x2
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- cmp r7, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- cmp r5, #0x0
- ldrne r0, _0209E7C8 ; =UNK_021C8EAC
- movne r1, #0x1
- strneb r1, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_0209E7BC: .word UNK_021C8F14
-_0209E7C0: .word UNK_021C8F04
-_0209E7C4: .word 0x00000406
-_0209E7C8: .word UNK_021C8EAC
-
- arm_func_start FUN_0209E7CC
-FUN_0209E7CC: ; 0x0209E7CC
- stmdb sp!, {r4,lr}
- mov r4, r0
- mov r3, #0x200
- add r0, r4, #0x8
- add r1, r4, #0x12
- mov r2, #0xa
- strh r3, [r4, #0x6]
- bl MI_CpuCopy8
- ldr r0, _0209E870 ; =UNK_021C8F14
- add r1, r4, #0x8
- mov r2, #0x6
- bl MI_CpuCopy8
- ldr r3, _0209E874 ; =UNK_021C8F04
- add r0, r4, #0x12
- ldr r2, [r3, #0x0]
- sub r1, r4, #0xe
- mov r2, r2, lsr #0x10
- mov r2, r2, lsl #0x10
- mov r12, r2, lsr #0x10
- mov r2, r12, asr #0x8
- orr r2, r2, r12, lsl #0x8
- strh r2, [r4, #0xe]
- ldr r3, [r3, #0x0]
- mov r2, #0x6
- mov r3, r3, lsl #0x10
- mov r12, r3, lsr #0x10
- mov r3, r12, asr #0x8
- orr r3, r3, r12, lsl #0x8
- strh r3, [r4, #0x10]
- bl MI_CpuCopy8
- ldr r0, _0209E870 ; =UNK_021C8F14
- sub r1, r4, #0x8
- mov r2, #0x6
- bl MI_CpuCopy8
- sub r0, r4, #0xe
- mov r1, #0x2a
- mov r2, #0x0
- mov r3, r2
- bl FUN_0209F930
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_0209E870: .word UNK_021C8F14
-_0209E874: .word UNK_021C8F04
-
- arm_func_start FUN_0209E878
-FUN_0209E878: ; 0x0209E878
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0xc
- mov r7, r2
- ldrb r2, [r7, #0x8]
- mov r9, r0
- mov r8, r1
- cmp r2, #0x0
- mov r6, r3
- addeq sp, sp, #0xc
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- ldr r0, _0209EAEC ; =OSi_ThreadInfo
- ldr r3, _0209EAF0 ; =UNK_021C8F04
- ldr r1, _0209EAF4 ; =UNK_021C9160
- ldr r0, [r0, #0x4]
- ldr r12, [r3, #0x0]
- cmp r0, r1
- ldreq r4, _0209EAF8 ; =UNK_021C8F5E
- ldrne r0, [r7, #0x4c]
- addne r4, r0, #0x22
- ands r0, r6, #0x2
- movne r5, #0x18
- moveq r5, #0x14
- add r1, r5, r8
- mov r2, r1, lsl #0x10
- mov r1, r12, lsr #0x10
- mov r1, r1, lsl #0x10
- mov r12, r1, lsr #0x10
- mov r1, r12, asr #0x8
- orr r1, r1, r12, lsl #0x8
- strh r1, [r4, #-0xc]
- ldr r1, [r3, #0x0]
- mov r12, r2, lsr #0x10
- mov r1, r1, lsl #0x10
- mov r2, r1, lsr #0x10
- mov r1, r2, asr #0x8
- orr r1, r1, r2, lsl #0x8
- strh r1, [r4, #-0xa]
- ldr r1, [r7, #0x1c]
- mov r3, r12, asr #0x8
- mov r1, r1, lsr #0x10
- mov r1, r1, lsl #0x10
- mov r2, r1, lsr #0x10
- mov r1, r2, asr #0x8
- orr r1, r1, r2, lsl #0x8
- strh r1, [r4, #-0x8]
- ldr r1, [r7, #0x1c]
- mov r2, r5, lsr #0x2
- mov r1, r1, lsl #0x10
- mov lr, r1, lsr #0x10
- mov r1, lr, asr #0x8
- orr r1, r1, lr, lsl #0x8
- strh r1, [r4, #-0x6]
- mov r1, #0x600
- strh r1, [r4, #-0x4]
- orr r1, r3, r12, lsl #0x8
- strh r1, [r4, #-0x2]
- ldrh r12, [r7, #0xa]
- cmp r0, #0x0
- mov r2, r2, lsl #0x4
- mov r3, r12, asr #0x8
- orr r3, r3, r12, lsl #0x8
- strh r3, [r4, #0x0]
- ldrh r3, [r7, #0x18]
- mov r1, #0x0
- mov r0, r3, asr #0x8
- orr r0, r0, r3, lsl #0x8
- strh r0, [r4, #0x2]
- ldr r0, [r7, #0x28]
- mov r0, r0, lsr #0x10
- mov r0, r0, lsl #0x10
- mov r3, r0, lsr #0x10
- mov r0, r3, asr #0x8
- orr r0, r0, r3, lsl #0x8
- strh r0, [r4, #0x4]
- ldr r0, [r7, #0x28]
- mov r0, r0, lsl #0x10
- mov r3, r0, lsr #0x10
- mov r0, r3, asr #0x8
- orr r0, r0, r3, lsl #0x8
- strh r0, [r4, #0x6]
- ldr r0, [r7, #0x24]
- mov r0, r0, lsr #0x10
- mov r0, r0, lsl #0x10
- mov r3, r0, lsr #0x10
- mov r0, r3, asr #0x8
- orr r0, r0, r3, lsl #0x8
- strh r0, [r4, #0x8]
- ldr r0, [r7, #0x24]
- mov r0, r0, lsl #0x10
- mov r3, r0, lsr #0x10
- mov r0, r3, asr #0x8
- orr r0, r0, r3, lsl #0x8
- strh r0, [r4, #0xa]
- strb r2, [r4, #0xc]
- strb r6, [r4, #0xd]
- ldr r2, [r7, #0x3c]
- ldr r0, [r7, #0x44]
- sub r0, r2, r0
- mov r0, r0, lsl #0x10
- mov r2, r0, lsr #0x10
- mov r0, r2, asr #0x8
- orr r0, r0, r2, lsl #0x8
- strh r0, [r4, #0xe]
- strh r1, [r4, #0x10]
- strh r1, [r4, #0x12]
- beq _0209EA64
- ldr r1, _0209EAFC ; =UNK_021C8EB0
- ldrh r0, [r1, #0x0]
- add r0, r0, #0x2040000
- mov r0, r0, lsr #0x10
- mov r0, r0, lsl #0x10
- mov r2, r0, lsr #0x10
- mov r0, r2, asr #0x8
- orr r0, r0, r2, lsl #0x8
- strh r0, [r4, #0x14]
- ldrh r0, [r1, #0x0]
- add r0, r0, #0x2040000
- mov r0, r0, lsl #0x10
- mov r1, r0, lsr #0x10
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- strh r0, [r4, #0x16]
-_0209EA64:
- sub r0, r4, #0xc
- add r1, r5, #0xc
- mov r2, #0x0
- bl FUN_0209FBC8
- mov r2, r0
- mov r0, r9
- mov r1, r8
- bl FUN_0209FBC8
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- bl FUN_0209FBAC
- mov r3, r0, asr #0x8
- orr r0, r3, r0, lsl #0x8
- strh r0, [r4, #0x10]
- mov r0, r4
- ldr r4, [r7, #0x1c]
- mov r3, #0x6
- str r4, [sp, #0x0]
- str r3, [sp, #0x4]
- mov r1, r5
- mov r2, r9
- mov r3, r8
- bl FUN_0209ECFC
- ands r0, r6, #0x3
- ldr r0, [r7, #0x28]
- add r1, r7, #0x28
- add r0, r0, r8
- str r0, [r7, #0x28]
- ldrne r0, [r1, #0x0]
- addne r0, r0, #0x1
- strne r0, [r1, #0x0]
- add sp, sp, #0xc
- ldmia sp!, {r4-r9,lr}
- bx lr
- .balign 4
-_0209EAEC: .word OSi_ThreadInfo
-_0209EAF0: .word UNK_021C8F04
-_0209EAF4: .word UNK_021C9160
-_0209EAF8: .word UNK_021C8F5E
-_0209EAFC: .word UNK_021C8EB0
-
- arm_func_start FUN_0209EB00
-FUN_0209EB00:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0xc
- ldr r7, _0209EC3C ; =UNK_021C8F04
- mov r5, r2
- ldr r2, [r7, #0x0]
- mov r6, r1
- mov r1, r2, lsr #0x10
- mov r1, r1, lsl #0x10
- mov r2, r1, lsr #0x10
- ldr r3, [r5, #0x4c]
- mov r1, r2, asr #0x8
- add r4, r3, #0x22
- orr r1, r1, r2, lsl #0x8
- strh r1, [r4, #-0xc]
- ldr r1, [r7, #0x0]
- add r2, r6, #0x8
- mov r1, r1, lsl #0x10
- mov r7, r1, lsr #0x10
- mov r1, r7, asr #0x8
- orr r1, r1, r7, lsl #0x8
- strh r1, [r4, #-0xa]
- ldr r1, [r5, #0x1c]
- mov r2, r2, lsl #0x10
- mov r1, r1, lsr #0x10
- mov r1, r1, lsl #0x10
- mov r7, r1, lsr #0x10
- mov r1, r7, asr #0x8
- orr r1, r1, r7, lsl #0x8
- strh r1, [r4, #-0x8]
- ldr r1, [r5, #0x1c]
- mov r2, r2, lsr #0x10
- mov r1, r1, lsl #0x10
- mov r7, r1, lsr #0x10
- mov r1, r7, asr #0x8
- orr r7, r1, r7, lsl #0x8
- mov r1, r2, asr #0x8
- strh r7, [r4, #-0x6]
- mov r7, #0x1100
- strh r7, [r4, #-0x4]
- orr r1, r1, r2, lsl #0x8
- strh r1, [r4, #0x4]
- ldrh r1, [r4, #0x4]
- mov r7, r0
- sub r0, r4, #0xc
- strh r1, [r4, #-0x2]
- ldrh lr, [r5, #0x18]
- mov r2, #0x0
- mov r1, #0x14
- mov r12, lr, asr #0x8
- orr r12, r12, lr, lsl #0x8
- strh r12, [r4, #0x2]
- ldrh lr, [r5, #0xa]
- mov r12, lr, asr #0x8
- orr r12, r12, lr, lsl #0x8
- strh r12, [r3, #0x22]
- strh r2, [r4, #0x6]
- bl FUN_0209FBC8
- mov r2, r0
- mov r0, r7
- mov r1, r6
- bl FUN_0209FBC8
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- bl FUN_0209FBAC
- mov r2, r7
- mov r3, r6
- mov r1, r0, asr #0x8
- orr r0, r1, r0, lsl #0x8
- strh r0, [r4, #0x6]
- ldr r1, [r5, #0x1c]
- mov r0, r4
- str r1, [sp, #0x0]
- mov r1, #0x11
- str r1, [sp, #0x4]
- mov r1, #0x8
- bl FUN_0209ECFC
- add sp, sp, #0xc
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_0209EC3C: .word UNK_021C8F04
-
- arm_func_start FUN_0209EC40
-FUN_0209EC40:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0xc
- mov r5, r2
- ldr r3, [r5, #0x4c]
- mov r6, r1
- mov r1, #0x8
- ldr r2, _0209ECF4 ; =OSi_ThreadInfo
- strh r1, [r3, #0x22]
- ldr r2, [r2, #0x4]
- add r4, r3, #0x22
- strh r2, [r4, #0x4]
- mov r2, #0x0
- ldr r3, _0209ECF8 ; =UNK_021C8EB4
- strh r2, [r4, #0x2]
- ldrh lr, [r3, #0x0]
- mov r7, r0
- mov r0, r4
- strh lr, [r5, #0xa]
- ldrh r12, [r3, #0x0]
- add r12, r12, #0x1
- strh r12, [r3, #0x0]
- strh lr, [r4, #0x6]
- bl FUN_0209FBC8
- mov r2, r0
- mov r0, r7
- mov r1, r6
- bl FUN_0209FBC8
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- bl FUN_0209FBAC
- mov r2, r7
- mov r3, r6
- mov r1, r0, asr #0x8
- orr r0, r1, r0, lsl #0x8
- strh r0, [r4, #0x2]
- ldr r1, [r5, #0x1c]
- mov r0, r4
- str r1, [sp, #0x0]
- mov r1, #0x1
- str r1, [sp, #0x4]
- mov r1, #0x8
- bl FUN_0209ECFC
- add sp, sp, #0xc
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_0209ECF4: .word OSi_ThreadInfo
-_0209ECF8: .word UNK_021C8EB4
-
- arm_func_start FUN_0209ECFC
-FUN_0209ECFC: ; 0x0209ECFC
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0xc
- mov r10, r0
- mov r0, #0x45
- strb r0, [r10, #-0x14]
- mov r5, #0x0
- ldr r0, _0209EF0C ; =UNK_021C8EB8
- strb r5, [r10, #-0x13]
- ldrh r7, [r0, #0x0]
- ldr r6, [sp, #0x30]
- ldrb r4, [sp, #0x34]
- add r7, r7, #0x1
- strh r7, [r0, #0x0]
- ldrh r9, [r0, #0x0]
- mov r0, r6, lsr #0x10
- mov r7, #0x80
- mov r8, r9, asr #0x8
- orr r8, r8, r9, lsl #0x8
- strh r8, [r10, #-0x10]
- strb r7, [r10, #-0xc]
- ldr r7, _0209EF10 ; =UNK_021C8F04
- strb r4, [r10, #-0xb]
- ldr r8, [r7, #0x0]
- mov r4, r0, lsl #0x10
- mov r0, r8, lsr #0x10
- mov r0, r0, lsl #0x10
- mov r8, r0, lsr #0x10
- mov r0, r8, asr #0x8
- orr r0, r0, r8, lsl #0x8
- strh r0, [r10, #-0x8]
- ldr r0, [r7, #0x0]
- mov r8, r4, lsr #0x10
- mov r0, r0, lsl #0x10
- mov r7, r0, lsr #0x10
- mov r4, r7, asr #0x8
- mov r0, r6, lsl #0x10
- orr r9, r4, r7, lsl #0x8
- mov r7, r8, asr #0x8
- mov r4, r0, lsr #0x10
- mov r0, r4, asr #0x8
- strh r9, [r10, #-0x6]
- orr r7, r7, r8, lsl #0x8
- ldr fp, _0209EF14 ; =0x000005C8
- mov r9, r1
- strh r7, [r10, #-0x4]
- orr r0, r0, r4, lsl #0x8
- mov r8, r2
- mov r7, r3
- strh r0, [r10, #-0x2]
- cmp r9, r11
- bls _0209EE74
- mov r4, r10
- cmp r9, r11
- bls _0209EE14
- str r5, [sp, #0x8]
-_0209EDD8:
- ldr r1, [sp, #0x8]
- mov r0, r10
- mov r2, r4
- mov r3, r11
- str r6, [sp, #0x0]
- orr r12, r5, #0x2000
- str r12, [sp, #0x4]
- bl FUN_0209EF18
- add r0, r5, #0xb9
- sub r9, r9, r11
- mov r0, r0, lsl #0x10
- cmp r9, r11
- add r4, r4, r11
- mov r5, r0, lsr #0x10
- bhi _0209EDD8
-_0209EE14:
- cmp r9, #0x0
- beq _0209EE74
- cmp r7, #0x0
- beq _0209EE48
- mov r0, r10
- mov r2, r4
- mov r3, r9
- str r6, [sp, #0x0]
- orr r4, r5, #0x2000
- mov r1, #0x0
- str r4, [sp, #0x4]
- bl FUN_0209EF18
- b _0209EE64
-_0209EE48:
- str r6, [sp, #0x0]
- mov r0, r10
- mov r2, r4
- mov r3, r9
- mov r1, #0x0
- str r5, [sp, #0x4]
- bl FUN_0209EF18
-_0209EE64:
- add r0, r5, r9, lsr #0x3
- mov r0, r0, lsl #0x10
- mov r5, r0, lsr #0x10
- mov r9, #0x0
-_0209EE74:
- ldr r0, _0209EF14 ; =0x000005C8
- add r1, r9, r7
- cmp r1, r0
- bls _0209EED4
- mov r11, #0x0
-_0209EE88:
- ldr r0, _0209EF14 ; =0x000005C8
- mov r1, r9
- sub r4, r0, r9
- mov r0, r10
- mov r2, r8
- mov r3, r4
- str r6, [sp, #0x0]
- orr r9, r5, #0x2000
- str r9, [sp, #0x4]
- bl FUN_0209EF18
- add r0, r5, #0xb9
- mov r1, r0, lsl #0x10
- ldr r0, _0209EF14 ; =0x000005C8
- sub r7, r7, r4
- mov r9, r11
- cmp r7, r0
- add r8, r8, r4
- mov r5, r1, lsr #0x10
- bhi _0209EE88
-_0209EED4:
- adds r0, r9, r7
- addeq sp, sp, #0xc
- ldmeqia sp!, {r4-r11,lr}
- bxeq lr
- str r6, [sp, #0x0]
- mov r0, r10
- mov r1, r9
- mov r2, r8
- mov r3, r7
- str r5, [sp, #0x4]
- bl FUN_0209EF18
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,lr}
- bx lr
- .balign 4
-_0209EF0C: .word UNK_021C8EB8
-_0209EF10: .word UNK_021C8F04
-_0209EF14: .word 0x000005C8
-
- arm_func_start FUN_0209EF18
-FUN_0209EF18: ; 0x0209EF18
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x8
- mov r7, r1
- mov r5, r3
- add r1, r7, #0x14
- add r1, r1, r5
- ldr r3, [sp, #0x24]
- mov r1, r1, lsl #0x10
- mov r4, r1, lsr #0x10
- mov r1, r3, lsl #0x10
- mov r3, r4, asr #0x8
- mov r1, r1, lsr #0x10
- mov r8, r0
- orr r3, r3, r4, lsl #0x8
- mov r0, r1, asr #0x8
- strh r3, [r8, #-0x12]
- orr r0, r0, r1, lsl #0x8
- strh r0, [r8, #-0xe]
- mov r3, #0x0
- sub r0, r8, #0x14
- mov r1, #0x14
- mov r6, r2
- strh r3, [r8, #-0xa]
- ldr r4, [sp, #0x20]
- bl FUN_0209FB84
- mov r2, r0, asr #0x8
- ldr r1, _0209F040 ; =0x7F000001
- orr r0, r2, r0, lsl #0x8
- strh r0, [r8, #-0xa]
- cmp r4, r1
- beq _0209EFC4
- ldr r0, _0209F044 ; =UNK_021C8F04
- ldr r0, [r0, #0x0]
- cmp r4, r0
- beq _0209EFC4
- mov r2, r6
- mov r3, r5
- str r4, [sp, #0x0]
- mov r12, #0x800
- sub r0, r8, #0x14
- add r1, r7, #0x14
- str r12, [sp, #0x4]
- bl FUN_0209F050
-_0209EFC4:
- ldr r0, _0209F040 ; =0x7F000001
- cmp r4, r0
- beq _0209EFF8
- ldr r0, _0209F044 ; =UNK_021C8F04
- ldr r0, [r0, #0x0]
- cmp r4, r0
- beq _0209EFF8
- mov r0, r4
- bl FUN_0209FA54
- cmp r0, #0x0
- addeq sp, sp, #0x8
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
-_0209EFF8:
- ldr r0, _0209F048 ; =UNK_02106230
- sub r1, r8, #0x1c
- mov r2, #0x8
- bl MI_CpuCopy8
- bl OS_DisableInterrupts
- mov r4, r0
- ldr r0, _0209F04C ; =UNK_021C8F14
- str r6, [sp, #0x0]
- mov r1, r0
- str r5, [sp, #0x4]
- sub r2, r8, #0x1c
- add r3, r7, #0x1c
- bl FUN_0209F6C0
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x8
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_0209F040: .word 0x7F000001
-_0209F044: .word UNK_021C8F04
-_0209F048: .word UNK_02106230
-_0209F04C: .word UNK_021C8F14
-
- arm_func_start FUN_0209F050
-FUN_0209F050: ; 0x0209F050
- stmdb sp!, {r4-r8,lr}
- ldrh r5, [sp, #0x1c]
- ldr r4, [sp, #0x18]
- mov r8, r0
- mov r0, r5, asr #0x8
- orr r12, r0, r5, lsl #0x8
- mov r0, r4
- mov r7, r1
- mov r6, r2
- mov r5, r3
- strh r12, [r8, #-0x2]
- bl FUN_0209FA54
- cmp r0, #0x0
- bne _0209F0CC
- mov r0, r4
- bl FUN_0209FAB0
- movs r4, r0
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- bl FUN_0209F438
- cmp r0, #0x0
- bne _0209F0B0
- mov r0, r4
- bl FUN_0209F2AC
-_0209F0B0:
- cmp r0, #0x0
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- sub r1, r8, #0xe
- mov r2, #0x6
- bl MI_CpuCopy8
- b _0209F0FC
-_0209F0CC:
- mov r0, #0x1
- strb r0, [r8, #-0xe]
- mov r1, #0x0
- mov r0, r4, lsr #0x10
- strb r1, [r8, #-0xd]
- mov r1, #0x5e
- strb r1, [r8, #-0xc]
- and r0, r0, #0x7f
- strb r0, [r8, #-0xb]
- mov r0, r4, lsr #0x8
- strb r0, [r8, #-0xa]
- strb r4, [r8, #-0x9]
-_0209F0FC:
- ldr r0, _0209F128 ; =UNK_021C8F14
- sub r1, r8, #0x8
- mov r2, #0x6
- bl MI_CpuCopy8
- mov r2, r6
- mov r3, r5
- sub r0, r8, #0xe
- add r1, r7, #0xe
- bl FUN_0209F930
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_0209F128: .word UNK_021C8F14
-
- arm_func_start FUN_0209F12C
-FUN_0209F12C: ; 0x0209F12C
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr r3, _0209F29C ; =0x7F000001
- mov r6, r1
- cmp r6, r3
- mov r7, r0
- mov r4, r2
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- ldr r0, _0209F2A0 ; =UNK_021C8F04
- ldr r0, [r0, #0x0]
- cmp r6, r0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- mov r0, r6
- bl FUN_0209FAD8
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- mov r0, r6
- bl FUN_0209FA54
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,lr}
- bxne lr
- bl OS_GetTick
- mov r0, r0, lsr #0x10
- orr r0, r0, r1, lsl #0x10
- mov r0, r0, lsl #0x10
- ldr r1, _0209F2A4 ; =UNK_021C8F78
- mov r5, r0, lsr #0x10
- mov r2, #0x0
-_0209F1B8:
- ldr r0, [r1, #0x0]
- cmp r6, r0
- bne _0209F1F8
- mov r0, #0xc
- mul r4, r2, r0
- ldr r0, _0209F2A4 ; =UNK_021C8F78
- ldr r3, _0209F2A8 ; =UNK_021C8F82
- add r1, r0, r4
- mov r0, r7
- add r1, r1, #0x4
- mov r2, #0x6
- strh r5, [r3, r4]
- bl MI_CpuCopy8
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
-_0209F1F8:
- add r2, r2, #0x1
- cmp r2, #0x8
- add r1, r1, #0xc
- blo _0209F1B8
- cmp r4, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- mov r12, #0x0
- ldr r4, _0209F2A4 ; =UNK_021C8F78
- mov r0, r12
- mov r3, r12
-_0209F228:
- ldr r1, [r4, #0x0]
- cmp r1, #0x0
- moveq r0, r3
- beq _0209F264
- ldrh r1, [r4, #0xa]
- add r4, r4, #0xc
- sub r1, r5, r1
- mov r1, r1, lsl #0x10
- mov r2, r1, asr #0x10
- cmp r2, r12
- movgt r0, r3
- add r3, r3, #0x1
- movgt r12, r1, lsr #0x10
- cmp r3, #0x8
- blo _0209F228
-_0209F264:
- mov r1, #0xc
- mul r4, r0, r1
- ldr r3, _0209F2A4 ; =UNK_021C8F78
- mov r0, r7
- add r1, r3, r4
- add r1, r1, #0x4
- mov r2, #0x6
- str r6, [r3, r4]
- bl MI_CpuCopy8
- ldr r0, _0209F2A8 ; =UNK_021C8F82
- strh r5, [r0, r4]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_0209F29C: .word 0x7F000001
-_0209F2A0: .word UNK_021C8F04
-_0209F2A4: .word UNK_021C8F78
-_0209F2A8: .word UNK_021C8F82
-
- arm_func_start FUN_0209F2AC
-FUN_0209F2AC:
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r9, r0
- mov r8, #0x0
- ldr r4, _0209F334 ; =UNK_021C8F04
- mov r6, r8
- mov r5, #0x64
-_0209F2C8:
- mov r0, r9
- bl FUN_0209F338
- mov r7, r6
-_0209F2D4:
- ldr r0, [r4, #0x0]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r9,lr}
- bxeq lr
- mov r0, r5
- bl OS_Sleep
- mov r0, r9
- bl FUN_0209F438
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r9,lr}
- bxne lr
- add r7, r7, #0x1
- cmp r7, #0x14
- blo _0209F2D4
- add r8, r8, #0x1
- cmp r8, #0x8
- blo _0209F2C8
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,lr}
- bx lr
- .balign 4
-_0209F334: .word UNK_021C8F04
-
- arm_func_start FUN_0209F338
-FUN_0209F338: ; 0x0209F338
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x30
- mov r4, r0
- add r0, sp, #0x0
- mov r1, #0x0
- mov r2, #0x2a
- bl MI_CpuFill8
- add r0, sp, #0x0
- mov r1, #0xff
- mov r2, #0x6
- bl MI_CpuFill8
- ldr r0, _0209F428 ; =UNK_021C8F14
- add r1, sp, #0x6
- mov r2, #0x6
- bl MI_CpuCopy8
- mov r0, #0x1
- ldr r1, _0209F42C ; =0x00000608
- strb r0, [sp, #0xf]
- strh r1, [sp, #0xc]
- strb r0, [sp, #0x15]
- mov r0, #0x8
- ldr r1, _0209F430 ; =0x00000406
- strb r0, [sp, #0x10]
- strh r1, [sp, #0x12]
- ldr r0, _0209F428 ; =UNK_021C8F14
- add r1, sp, #0x16
- mov r2, #0x6
- bl MI_CpuCopy8
- ldr r0, _0209F434 ; =UNK_021C8F04
- mov r1, r4, lsr #0x10
- ldr r3, [r0, #0x0]
- mov r0, r1, lsl #0x10
- mov r2, r0, lsr #0x10
- mov r0, r4, lsl #0x10
- mov r1, r0, lsr #0x10
- mov r0, r3, lsr #0x10
- mov r0, r0, lsl #0x10
- mov r4, r0, lsr #0x10
- mov r0, r3, lsl #0x10
- mov r3, r0, lsr #0x10
- mov r0, r4, asr #0x8
- orr r0, r0, r4, lsl #0x8
- strh r0, [sp, #0x1c]
- mov r0, r3, asr #0x8
- orr r0, r0, r3, lsl #0x8
- strh r0, [sp, #0x1e]
- mov r0, r2, asr #0x8
- orr r0, r0, r2, lsl #0x8
- strh r0, [sp, #0x26]
- mov r0, r1, asr #0x8
- orr r0, r0, r1, lsl #0x8
- mov r2, #0x0
- strh r0, [sp, #0x28]
- add r0, sp, #0x0
- mov r1, #0x2a
- mov r3, r2
- bl FUN_0209F930
- add sp, sp, #0x30
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_0209F428: .word UNK_021C8F14
-_0209F42C: .word 0x00000608
-_0209F430: .word 0x00000406
-_0209F434: .word UNK_021C8F04
-
- arm_func_start FUN_0209F438
-FUN_0209F438:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- bl OS_DisableInterrupts
- ldr r1, _0209F504 ; =0x7F000001
- mov r4, r0
- cmp r7, r1
- mov r5, #0x0
- beq _0209F46C
- ldr r0, _0209F508 ; =UNK_021C8F04
- ldr r0, [r0, #0x0]
- cmp r7, r0
- bne _0209F474
-_0209F46C:
- ldr r5, _0209F50C ; =UNK_021C8F14
- b _0209F4EC
-_0209F474:
- mov r0, r7
- bl FUN_0209FA68
- cmp r0, #0x0
- bne _0209F494
- mov r0, r7
- bl FUN_0209FA54
- cmp r0, #0x0
- beq _0209F49C
-_0209F494:
- ldr r5, _0209F510 ; =UNK_0210621C
- b _0209F4EC
-_0209F49C:
- ldr r1, _0209F514 ; =UNK_021C8F78
- mov r6, r5
-_0209F4A4:
- ldr r0, [r1, #0x0]
- cmp r7, r0
- bne _0209F4DC
- bl OS_GetTick
- mov r2, #0xc
- mul r3, r6, r2
- ldr r2, _0209F514 ; =UNK_021C8F78
- mov r5, r0, lsr #0x10
- add r0, r2, r3
- ldr r2, _0209F518 ; =UNK_021C8F82
- orr r5, r5, r1, lsl #0x10
- strh r5, [r2, r3]
- add r5, r0, #0x4
- b _0209F4EC
-_0209F4DC:
- add r6, r6, #0x1
- cmp r6, #0x8
- add r1, r1, #0xc
- blo _0209F4A4
-_0209F4EC:
- mov r0, r4
- bl OS_RestoreInterrupts
- mov r0, r5
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_0209F504: .word 0x7F000001
-_0209F508: .word UNK_021C8F04
-_0209F50C: .word UNK_021C8F14
-_0209F510: .word UNK_0210621C
-_0209F514: .word UNK_021C8F78
-_0209F518: .word UNK_021C8F82
-
- arm_func_start FUN_0209F51C
-FUN_0209F51C: ; 0x0209F51C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl OS_DisableInterrupts
- ldr r2, _0209F570 ; =UNK_021C8EE4
- ldr r1, _0209F574 ; =UNK_021C8F0C
- ldr lr, [r2, #0x0]
- ldr r12, [r1, #0x0]
- ldr r3, [r2, #0x0]
- ldr r1, _0209F578 ; =UNK_021C8F10
- ldrh r3, [r12, r3]
- add r3, lr, r3
- str r3, [r2, #0x0]
- ldr r3, [r2, #0x0]
- ldr r1, [r1, #0x0]
- cmp r3, r1
- movcs r1, #0x0
- strcs r1, [r2, #0x0]
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_0209F570: .word UNK_021C8EE4
-_0209F574: .word UNK_021C8F0C
-_0209F578: .word UNK_021C8F10
-
- arm_func_start FUN_0209F57C
-FUN_0209F57C: ; 0x0209F57C
- stmdb sp!, {r4-r10,lr}
- mov r6, r0
- bl OS_DisableInterrupts
- ldr sl, _0209F644 ; =UNK_021C8EE4
- ldr sb, _0209F648 ; =UNK_021C8EDC
- ldr r2, [r10, #0x0]
- ldr r1, [r9, #0x0]
- mov r5, r0
- cmp r2, r1
- bne _0209F5D4
- ldr r8, _0209F64C ; =OSi_ThreadInfo
- ldr r7, _0209F650 ; =UNK_021C8F08
- mov r4, #0x0
-_0209F5B0:
- ldr r1, [r8, #0x4]
- mov r0, r4
- str r1, [r7, #0x0]
- bl OS_SleepThread
- str r4, [r7, #0x0]
- ldr r1, [r10, #0x0]
- ldr r0, [r9, #0x0]
- cmp r1, r0
- beq _0209F5B0
-_0209F5D4:
- mov r0, r5
- bl OS_RestoreInterrupts
- ldr r0, _0209F654 ; =UNK_021C8F0C
- ldr r5, [r0, #0x0]
- ldr r0, _0209F644 ; =UNK_021C8EE4
- ldr r1, _0209F658 ; =UNK_021C8F10
- mov r3, #0x0
-_0209F5F0:
- ldr r4, [r1, #0x0]
- ldr r2, [r0, #0x0]
- sub r2, r4, r2
- cmp r2, #0x2
- strcc r3, [r0, #0x0]
- ldr r2, [r0, #0x0]
- ldrh r2, [r5, r2]
- cmp r2, #0x0
- streq r3, [r0, #0x0]
- cmp r2, #0x0
- beq _0209F5F0
- sub r0, r2, #0x2
- ldr r1, _0209F654 ; =UNK_021C8F0C
- str r0, [r6, #0x0]
- ldr r0, _0209F644 ; =UNK_021C8EE4
- ldr r1, [r1, #0x0]
- ldr r0, [r0, #0x0]
- add r0, r1, r0
- add r0, r0, #0x2
- ldmia sp!, {r4-r10,lr}
- bx lr
- .balign 4
-_0209F644: .word UNK_021C8EE4
-_0209F648: .word UNK_021C8EDC
-_0209F64C: .word OSi_ThreadInfo
-_0209F650: .word UNK_021C8F08
-_0209F654: .word UNK_021C8F0C
-_0209F658: .word UNK_021C8F10
-
- arm_func_start FUN_0209F65C
-FUN_0209F65C: ; 0x0209F65C
- stmdb sp!, {lr}
- sub sp, sp, #0xc
- mov r12, #0x0
- str r12, [sp, #0x0]
- str r12, [sp, #0x4]
- bl FUN_0209F6C0
- ldr r0, _0209F6BC ; =UNK_021C8F08
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- addeq sp, sp, #0xc
- ldmeqia sp!, {lr}
- bxeq lr
- ldr r0, [r0, #0x0]
- bl OS_IsThreadTerminated
- cmp r0, #0x0
- addne sp, sp, #0xc
- ldmneia sp!, {lr}
- bxne lr
- ldr r0, _0209F6BC ; =UNK_021C8F08
- ldr r0, [r0, #0x0]
- bl OS_WakeupThreadDirect
- add sp, sp, #0xc
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_0209F6BC: .word UNK_021C8F08
-
- arm_func_start FUN_0209F6C0
-FUN_0209F6C0: ; 0x0209F6C0
- stmdb sp!, {r4-r8,lr}
- ldr r4, _0209F918 ; =UNK_021C8F0C
- mov r7, r0
- ldr r0, [r4, #0x0]
- mov r6, r2
- mov r5, r3
- cmp r0, #0x0
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- ldr r2, _0209F91C ; =UNK_021C8F10
- ldr r2, [r2, #0x0]
- cmp r2, #0x0
- ldmeqia sp!, {r4-r8,lr}
- bxeq lr
- ldr r2, [sp, #0x1c]
- add r2, r5, r2
- cmp r2, #0x8
- ldmccia sp!, {r4-r8,lr}
- bxcc lr
- ldr r3, _0209F920 ; =0x000005E4
- cmp r2, r3
- ldmhiia sp!, {r4-r8,lr}
- bxhi lr
- ldr r3, _0209F924 ; =UNK_02106230
- ldrb r8, [r6, #0x0]
- ldrb r4, [r3, #0x0]
- cmp r8, r4
- ldmneia sp!, {r4-r8,lr}
- bxne lr
- ldrb r8, [r6, #0x1]
- ldrb r4, [r3, #0x1]
- cmp r8, r4
- ldmneia sp!, {r4-r8,lr}
- bxne lr
- ldrb r4, [r6, #0x2]
- ldrb r3, [r3, #0x2]
- cmp r4, r3
- ldmneia sp!, {r4-r8,lr}
- bxne lr
- ldrb r3, [r6, #0x6]
- cmp r3, #0x8
- ldmneia sp!, {r4-r8,lr}
- bxne lr
- ldrb r3, [r6, #0x7]
- cmp r3, #0x0
- beq _0209F784
- cmp r3, #0x6
- ldmneia sp!, {r4-r8,lr}
- bxne lr
-_0209F784:
- ldr r4, _0209F928 ; =UNK_021C8EDC
- add r2, r2, #0x9
- bic r2, r2, #0x1
- ldr lr, [r4, #0x0]
- mov r3, r2, lsl #0x10
- ldr ip, _0209F92C ; =UNK_021C8EE4
- ldr r8, [r4, #0x0]
- ldr r4, [r12, #0x0]
- mov r2, r3, lsr #0x10
- cmp r8, r4
- add r4, lr, r3, lsr #0x10
- bhs _0209F7C4
- ldr r3, [r12, #0x0]
- cmp r3, r4
- ldmlsia sp!, {r4-r8,lr}
- bxls lr
-_0209F7C4:
- ldr r3, _0209F91C ; =UNK_021C8F10
- ldr r8, [r3, #0x0]
- cmp r4, r8
- bne _0209F7F0
- ldr r3, _0209F92C ; =UNK_021C8EE4
- mov r4, #0x0
- ldr r3, [r3, #0x0]
- cmp r3, #0x0
- bne _0209F814
- ldmia sp!, {r4-r8,lr}
- bx lr
-_0209F7F0:
- ldr r3, [r3, #0x0]
- cmp r4, r3
- bls _0209F814
- ldr r3, _0209F92C ; =UNK_021C8EE4
- mov r4, r2
- ldr r3, [r3, #0x0]
- cmp r3, r2
- ldmlsia sp!, {r4-r8,lr}
- bxls lr
-_0209F814:
- ldr ip, _0209F928 ; =UNK_021C8EDC
- ldr r3, _0209F91C ; =UNK_021C8F10
- ldr lr, [r12, #0x0]
- ldr r8, [r3, #0x0]
- add lr, lr, r2
- cmp lr, r8
- bls _0209F858
- ldr r8, [r3, #0x0]
- ldr r3, [r12, #0x0]
- sub r3, r8, r3
- cmp r3, #0x2
- ldrcs r3, [r12, #0x0]
- movcs r8, #0x0
- strcsh r8, [r0, r3]
- ldr r0, _0209F928 ; =UNK_021C8EDC
- mov r3, #0x0
- str r3, [r0, #0x0]
-_0209F858:
- ldr ip, _0209F918 ; =UNK_021C8F0C
- ldr r3, _0209F928 ; =UNK_021C8EDC
- ldr r8, [r12, #0x0]
- ldr lr, [r3, #0x0]
- mov r0, r1
- strh r2, [r8, lr]
- ldr r12, [r12, #0x0]
- ldr r1, [r3, #0x0]
- mov r2, #0x6
- add r1, r12, r1
- add r1, r1, #0x2
- bl MI_CpuCopy8
- ldr r1, _0209F918 ; =UNK_021C8F0C
- ldr r0, _0209F928 ; =UNK_021C8EDC
- ldr r2, [r1, #0x0]
- ldr r1, [r0, #0x0]
- mov r0, r7
- add r1, r2, r1
- add r1, r1, #0x8
- mov r2, #0x6
- bl MI_CpuCopy8
- ldr r1, _0209F918 ; =UNK_021C8F0C
- ldr r0, _0209F928 ; =UNK_021C8EDC
- ldr r2, [r1, #0x0]
- ldr r1, [r0, #0x0]
- add r0, r6, #0x6
- add r1, r2, r1
- add r1, r1, #0xe
- sub r2, r5, #0x6
- bl MI_CpuCopy8
- ldr r0, [sp, #0x18]
- cmp r0, #0x0
- beq _0209F908
- ldr r2, [sp, #0x1c]
- cmp r2, #0x0
- beq _0209F908
- ldr r3, _0209F918 ; =UNK_021C8F0C
- ldr r1, _0209F928 ; =UNK_021C8EDC
- ldr r3, [r3, #0x0]
- ldr r1, [r1, #0x0]
- add r1, r3, r1
- add r1, r1, #0x8
- add r1, r1, r5
- bl MI_CpuCopy8
-_0209F908:
- ldr r0, _0209F928 ; =UNK_021C8EDC
- str r4, [r0, #0x0]
- ldmia sp!, {r4-r8,lr}
- bx lr
- .balign 4
-_0209F918: .word UNK_021C8F0C
-_0209F91C: .word UNK_021C8F10
-_0209F920: .word 0x000005E4
-_0209F924: .word UNK_02106230
-_0209F928: .word UNK_021C8EDC
-_0209F92C: .word UNK_021C8EE4
-
- arm_func_start FUN_0209F930
-FUN_0209F930: ; 0x0209F930
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- add r1, r6, r5
- mov r4, r3
- cmp r1, r2
- beq _0209F958
- mov r0, r2
- mov r2, r4
- bl MI_CpuCopy8
-_0209F958:
- ldr r0, _0209F998 ; =UNK_02106230
- add r1, r6, #0x6
- mov r2, #0x6
- bl MI_CpuCopy8
- add r2, r5, r4
- mov r0, r6
- add r1, r6, #0x6
- sub r2, r2, #0x6
- bl FUN_020A8644
- cmp r0, #0x0
- movlt r1, #0x1
- ldr r0, _0209F99C ; =UNK_021C8EA8
- movge r1, #0x0
- strb r1, [r0, #0x0]
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_0209F998: .word UNK_02106230
-_0209F99C: .word UNK_021C8EA8
-
- arm_func_start FUN_0209F9A0
-FUN_0209F9A0:
- mov r12, #0x0
-_0209F9A4:
- ldrh r3, [r0], #0x2
- ldrh r2, [r1], #0x2
- cmp r3, r2
- movne r0, #0x1
- bxne lr
- add r12, r12, #0x1
- cmp r12, #0x3
- blt _0209F9A4
- mov r0, #0x0
- bx lr
-
- arm_func_start FUN_0209F9CC
-FUN_0209F9CC:
- stmdb sp!, {r4-r6,lr}
- ldr r1, _0209FA4C ; =UNK_021C8F04
- mov r5, #0x1
- ldr r1, [r1, #0x0]
- mov r6, r0
- mov r4, r5
- mov r2, r5
- mov r0, r5
- cmp r1, #0x0
- beq _0209F9FC
- cmp r6, r1
- movne r0, #0x0
-_0209F9FC:
- cmp r0, #0x0
- bne _0209FA10
- ldr r0, _0209FA50 ; =0x7F000001
- cmp r6, r0
- movne r2, #0x0
-_0209FA10:
- cmp r2, #0x0
- bne _0209FA28
- mov r0, r6
- bl FUN_0209FA68
- cmp r0, #0x0
- moveq r4, #0x0
-_0209FA28:
- cmp r4, #0x0
- bne _0209FA40
- mov r0, r6
- bl FUN_0209FA54
- cmp r0, #0x0
- moveq r5, #0x0
-_0209FA40:
- mov r0, r5
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_0209FA4C: .word UNK_021C8F04
-_0209FA50: .word 0x7F000001
-
- arm_func_start FUN_0209FA54
-FUN_0209FA54:
- and r0, r0, #0xf0000000
- cmp r0, #0xe0000000
- moveq r0, #0x1
- movne r0, #0x0
- bx lr
-
- arm_func_start FUN_0209FA68
-FUN_0209FA68:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, #0x0
- bl FUN_0209FAD8
- cmp r0, #0x0
- beq _0209FA9C
- ldr r0, _0209FAAC ; =UNK_021C8ED0
- ldr r0, [r0, #0x0]
- mvn r1, r0
- and r0, r1, r5
- cmp r1, r0
- moveq r4, #0x1
-_0209FA9C:
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_0209FAAC: .word UNK_021C8ED0
-
- arm_func_start FUN_0209FAB0
-FUN_0209FAB0:
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_0209FAD8
- cmp r0, #0x0
- ldreq r0, _0209FAD4 ; =UNK_021C8EE0
- ldreq r4, [r0, #0x0]
- mov r0, r4
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_0209FAD4: .word UNK_021C8EE0
-
- arm_func_start FUN_0209FAD8
-FUN_0209FAD8:
- mvn r1, #0x0
- cmp r0, r1
- mov r12, #0x1
- beq _0209FB14
- ldr r1, _0209FB1C ; =0x7F000001
- cmp r0, r1
- beq _0209FB14
- ldr r2, _0209FB20 ; =UNK_021C8ED0
- ldr r1, _0209FB24 ; =UNK_021C8F04
- ldr r3, [r2, #0x0]
- ldr r1, [r1, #0x0]
- and r2, r0, r3
- and r0, r1, r3
- cmp r2, r0
- movne r12, #0x0
-_0209FB14:
- mov r0, r12
- bx lr
- .balign 4
-_0209FB1C: .word 0x7F000001
-_0209FB20: .word UNK_021C8ED0
-_0209FB24: .word UNK_021C8F04
-
- arm_func_start FUN_0209FB28
-FUN_0209FB28:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r2
- mov r2, r3
- mov r5, r1
- bl FUN_0209FBC8
- mov r2, r0
- add r0, r4, #0xc
- mov r1, #0x8
- bl FUN_0209FBC8
- add r1, r0, r5
- ands r0, r1, #0x10000
- ldrne r0, _0209FB80 ; =0x0000FFFF
- addne r1, r1, #0x1
- andne r1, r1, r0
- ldr r0, _0209FB80 ; =0x0000FFFF
- cmp r1, r0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_0209FB80: .word 0x0000FFFF
-
- arm_func_start FUN_0209FB84
-FUN_0209FB84: ; 0x0209FB84
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, #0x0
- bl FUN_0209FBC8
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- bl FUN_0209FBAC
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-
- arm_func_start FUN_0209FBAC
-FUN_0209FBAC: ; 0x0209FBAC
- ldr r1, _0209FBC4 ; =0x0000FFFF
- eor r0, r0, r1
- mov r0, r0, lsl #0x10
- movs r0, r0, lsr #0x10
- moveq r0, r1
- bx lr
- .balign 4
-_0209FBC4: .word 0x0000FFFF
-
- arm_func_start FUN_0209FBC8
-FUN_0209FBC8: ; 0x0209FBC8
- ands r3, r0, #0x1
- beq _0209FC00
- cmp r1, #0x1
- bls _0209FC54
-_0209FBD8:
- ldrb r12, [r0, #0x0]
- ldrb r3, [r0, #0x1]
- sub r1, r1, #0x2
- cmp r1, #0x1
- orr r3, r3, r12, lsl #0x8
- mov r3, r3, lsl #0x10
- add r2, r2, r3, lsr #0x10
- add r0, r0, #0x2
- bhi _0209FBD8
- b _0209FC54
-_0209FC00:
- mov r2, r2, lsl #0x10
- mov r3, r2, lsr #0x10
- mov r2, r3, asr #0x8
- orr r2, r2, r3, lsl #0x8
- mov r2, r2, lsl #0x10
- cmp r1, #0x1
- mov r2, r2, lsr #0x10
- bls _0209FC38
-_0209FC20:
- ldrh r3, [r0, #0x0]
- sub r1, r1, #0x2
- cmp r1, #0x1
- add r2, r2, r3
- add r0, r0, #0x2
- bhi _0209FC20
-_0209FC38:
- ldr r3, _0209FC7C ; =0x00FF00FF
- ldr ip, _0209FC80 ; =0xFF00FF00
- and r3, r3, r2, lsr #0x8
- and r2, r12, r2, lsl #0x8
- orr r3, r3, r2
- mov r2, r3, lsr #0x10
- orr r2, r2, r3, lsl #0x10
-_0209FC54:
- cmp r1, #0x0
- ldrneb r0, [r0, #0x0]
- addne r2, r2, r0, lsl #0x8
- ldr r0, _0209FC84 ; =0x0000FFFF
- and r0, r2, r0
- add r0, r0, r2, lsr #0x10
- add r0, r0, r0, lsr #0x10
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- bx lr
- .balign 4
-_0209FC7C: .word 0x00FF00FF
-_0209FC80: .word 0xFF00FF00
-_0209FC84: .word 0x0000FFFF
-
- arm_func_start FUN_0209FC88
-FUN_0209FC88: ; 0x0209FC88
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r2, _0209FCB8 ; =UNK_02106218
- ldr r0, _0209FCBC ; =UNK_021C9160
- mov r1, r4
- str r4, [r2, #0x0]
- bl OS_SetThreadPriority
- ldr r0, _0209FCC0 ; =UNK_021C90A0
- mov r1, r4
- bl OS_SetThreadPriority
- ldmia sp!, {r4,lr}
- bx lr
- .balign 4
-_0209FCB8: .word UNK_02106218
-_0209FCBC: .word UNK_021C9160
-_0209FCC0: .word UNK_021C90A0
-
- arm_func_start FUN_0209FCC4
-FUN_0209FCC4:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl FUN_0209FD34
- ldr r0, _0209FD10 ; =UNK_021C90A0
- bl OS_JoinThread
- ldr r0, _0209FD14 ; =UNK_021C9160
- bl OS_DestroyThread
- ldr r1, _0209FD18 ; =UNK_021C8F08
- mov r0, #0x0
- str r0, [r1, #0x0]
- bl FUN_020A0098
- ldr r1, _0209FD1C ; =UNK_021C8F0C
- mov r2, #0x0
- ldr r0, _0209FD20 ; =UNK_021C8F10
- str r2, [r1, #0x0]
- str r2, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_0209FD10: .word UNK_021C90A0
-_0209FD14: .word UNK_021C9160
-_0209FD18: .word UNK_021C8F08
-_0209FD1C: .word UNK_021C8F0C
-_0209FD20: .word UNK_021C8F10
-
- arm_func_start FUN_0209FD24
-FUN_0209FD24: ; 0x0209FD24
- ldr r1, _0209FD30 ; =UNK_021C8EF0
- str r0, [r1, #0x0]
- bx lr
- .balign 4
-_0209FD30: .word UNK_021C8EF0
-
- arm_func_start FUN_0209FD34
-FUN_0209FD34:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- bl OS_DisableInterrupts
- mov r5, r0
- ldr r0, _0209FD8C ; =UNK_021C90A0
- bl OS_IsThreadTerminated
- movs r4, r0
- bne _0209FD74
- ldr r1, _0209FD90 ; =UNK_021C8EF8
- ldr r0, [r1, #0x0]
- cmp r0, #0x0
- bne _0209FD74
- ldr r0, _0209FD8C ; =UNK_021C90A0
- mov r2, #0x1
- str r2, [r1, #0x0]
- bl OS_WakeupThreadDirect
-_0209FD74:
- mov r0, r5
- bl OS_RestoreInterrupts
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,lr}
- bx lr
- .balign 4
-_0209FD8C: .word UNK_021C90A0
-_0209FD90: .word UNK_021C8EF8
-
- .extern _SDK_UbiquitousCPS
-
- arm_func_start FUN_0209FD94
-FUN_0209FD94: ; 0x0209FD94
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x8
- mov r4, r0
- ldr r0, _0209FFD4 ; =_SDK_UbiquitousCPS
- bl OSi_ReferSymbol
- ldr r12, [r4, #0x14]
- ldr r6, [r4, #0x18]
- mov r1, #0x0
- cmp r6, r1
- cmpeq r12, r1
- beq _0209FDEC
- ldr r0, _0209FFD8 ; =CPSiRand32ctx
- ldr r5, _0209FFDC ; =0x6C078965
- ldr r3, _0209FFE0 ; =0x5D588B65
- ldr r2, _0209FFE4 ; =0x00269EC3
- str r12, [r0, #0x0]
- str r6, [r0, #0x4]
- str r5, [r0, #0x8]
- str r3, [r0, #0xc]
- str r2, [r0, #0x10]
- str r1, [r0, #0x14]
- b _0209FE1C
-_0209FDEC:
- bl OS_GetTick
- ldr r2, _0209FFD8 ; =CPSiRand32ctx
- ldr ip, _0209FFDC ; =0x6C078965
- ldr r6, _0209FFE0 ; =0x5D588B65
- ldr r5, _0209FFE4 ; =0x00269EC3
- mov r3, #0x0
- str r0, [r2, #0x0]
- str r1, [r2, #0x4]
- str r12, [r2, #0x8]
- str r6, [r2, #0xc]
- str r5, [r2, #0x10]
- str r3, [r2, #0x14]
-_0209FE1C:
- ldr r2, [r4, #0x4]
- cmp r2, #0x0
- beq _0209FE4C
- ldr r0, [r4, #0x8]
- cmp r0, #0x0
- beq _0209FE4C
- ldr r1, _0209FFE8 ; =CPSiAlloc
- ldr r0, _0209FFEC ; =CPSiFree
- str r2, [r1, #0x0]
- ldr r1, [r4, #0x8]
- str r1, [r0, #0x0]
- b _0209FE60
-_0209FE4C:
- ldr r2, _0209FFF0 ; =FUN_020A0058
- ldr r1, _0209FFE8 ; =CPSiAlloc
- ldr r0, _0209FFEC ; =CPSiFree
- str r2, [r1, #0x0]
- str r2, [r0, #0x0]
-_0209FE60:
- ldr r1, [r4, #0x0]
- ldr r0, _0209FFF4 ; =UNK_021C8EC4
- ldr ip, _0209FFD8 ; =CPSiRand32ctx
- str r1, [r0, #0x0]
- ldr r1, [r4, #0x24]
- ldr r3, [r12, #0x8]
- cmp r1, #0x0
- ldrne r0, _0209FFF8 ; =UNK_021C8EB0
- strneh r1, [r0, #0x0]
- ldreq r1, _0209FFFC ; =0x000005B4
- ldreq r0, _0209FFF8 ; =UNK_021C8EB0
- streqh r1, [r0, #0x0]
- ldr r2, [r4, #0x28]
- ldr r1, _020A0000 ; =UNK_021C8EE8
- ldr r0, _020A0004 ; =UNK_021C8ED8
- str r2, [r1, #0x0]
- ldr r1, [r4, #0x2c]
- ldr r2, [r12, #0x0]
- str r1, [r0, #0x0]
- ldr r1, [r4, #0xc]
- umull lr, r5, r3, r2
- cmp r1, #0x0
- ldrne r0, _020A0008 ; =UNK_021C8ECC
- strne r1, [r0, #0x0]
- ldreq r1, _0209FFF0 ; =FUN_020A0058
- ldreq r0, _020A0008 ; =UNK_021C8ECC
- streq r1, [r0, #0x0]
- ldr r1, [r4, #0x10]
- cmp r1, #0x0
- ldrne r0, _020A000C ; =UNK_021C8EFC
- strne r1, [r0, #0x0]
- ldreq r1, _020A0010 ; =FUN_020A0050
- ldreq r0, _020A000C ; =UNK_021C8EFC
- streq r1, [r0, #0x0]
- ldr r1, [r12, #0x4]
- ldr r0, _020A0014 ; =0x00000F88
- mla r5, r3, r1, r5
- ldr r1, [r12, #0xc]
- ldr r3, [r12, #0x10]
- mla r5, r1, r2, r5
- adds r2, r3, lr
- ldr r1, [r12, #0x14]
- mov r3, #0x0
- adc r1, r1, r5
- umull lr, r5, r1, r0
- mla r5, r1, r3, r5
- mla r5, r3, r0, r5
- ldr r6, [r4, #0x1c]
- ldr r0, _020A0018 ; =UNK_021C8F0C
- ldr lr, _020A001C ; =UNK_021C8F10
- str r6, [r0, #0x0]
- ldr r4, [r4, #0x20]
- ldr r0, _020A0020 ; =UNK_021C8EE4
- str r4, [lr, #0x0]
- str r3, [r0, #0x0]
- ldr lr, _020A0024 ; =UNK_021C8EDC
- ldr r4, _020A0028 ; =UNK_021C8EBC
- add r5, r5, #0x400
- ldr r0, _020A002C ; =UNK_021C8F14
- str r3, [lr, #0x0]
- str r2, [r12, #0x0]
- str r1, [r12, #0x4]
- strh r5, [r4, #0x0]
- bl OS_GetMacAddress
- ldr r0, _020A0030 ; =UNK_021C8EAC
- mov r2, #0x0
- strb r2, [r0, #0x0]
- mov r1, #0x800
- str r1, [sp, #0x0]
- ldr r0, _020A0034 ; =UNK_02106218
- ldr r1, _020A0038 ; =FUN_0209CD3C
- ldr r4, [r0, #0x0]
- ldr r0, _020A003C ; =UNK_021C9160
- ldr r3, _020A0040 ; =pool_initialized
- str r4, [sp, #0x4]
- bl OS_CreateThread
- mov r1, #0x800
- ldr r0, _020A0034 ; =UNK_02106218
- str r1, [sp, #0x0]
- ldr r1, [r0, #0x0]
- ldr r0, _020A0044 ; =UNK_021C90A0
- str r1, [sp, #0x4]
- ldr r1, _020A0048 ; =FUN_0209BA80
- ldr r3, _020A004C ; =UNK_021C9EE0
- mov r2, #0x0
- bl OS_CreateThread
- ldr r0, _020A003C ; =UNK_021C9160
- bl OS_WakeupThreadDirect
- ldr r0, _020A0044 ; =UNK_021C90A0
- bl OS_WakeupThreadDirect
- add sp, sp, #0x8
- ldmia sp!, {r4-r6,lr}
- bx lr
- .balign 4
-_0209FFD4: .word _SDK_UbiquitousCPS
-_0209FFD8: .word CPSiRand32ctx
-_0209FFDC: .word 0x6C078965
-_0209FFE0: .word 0x5D588B65
-_0209FFE4: .word 0x00269EC3
-_0209FFE8: .word CPSiAlloc
-_0209FFEC: .word CPSiFree
-_0209FFF0: .word FUN_020A0058
-_0209FFF4: .word UNK_021C8EC4
-_0209FFF8: .word UNK_021C8EB0
-_0209FFFC: .word 0x000005B4
-_020A0000: .word UNK_021C8EE8
-_020A0004: .word UNK_021C8ED8
-_020A0008: .word UNK_021C8ECC
-_020A000C: .word UNK_021C8EFC
-_020A0010: .word FUN_020A0050
-_020A0014: .word 0x00000F88
-_020A0018: .word UNK_021C8F0C
-_020A001C: .word UNK_021C8F10
-_020A0020: .word UNK_021C8EE4
-_020A0024: .word UNK_021C8EDC
-_020A0028: .word UNK_021C8EBC
-_020A002C: .word UNK_021C8F14
-_020A0030: .word UNK_021C8EAC
-_020A0034: .word UNK_02106218
-_020A0038: .word FUN_0209CD3C
-_020A003C: .word UNK_021C9160
-_020A0040: .word pool_initialized
-_020A0044: .word UNK_021C90A0
-_020A0048: .word FUN_0209BA80
-_020A004C: .word UNK_021C9EE0
-
- ; Ubiquitous SSL (?)
-
- arm_func_start FUN_020A0050
-FUN_020A0050: ; 0x020A0050
- mov r0, #0x1
- bx lr
-
- arm_func_start FUN_020A0058
-FUN_020A0058: ; 0x020A0058
- bx lr
-
- arm_func_start FUN_020A005C
-FUN_020A005C:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020A0094 ; =UNK_021C8ED8
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _020A0084
- bl OS_YieldThread
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
-_020A0084:
- bl OS_Sleep
- add sp, sp, #0x4
- ldmia sp!, {lr}
- bx lr
- .balign 4
-_020A0094: .word UNK_021C8ED8
-
- arm_func_start FUN_020A0098
-FUN_020A0098: ; 0x020A0098
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr r1, _020A01B8 ; =UNK_021C8F04
- ldr r5, _020A01BC ; =UNK_021C8EC0
- ldr r1, [r1, #0x0]
- ldr r3, _020A01C0 ; =UNK_021C8F1C
- cmp r1, #0x0
- mov r1, #0x0
- movne r6, #0x1
- ldr ip, _020A01C4 ; =UNK_021C8ED0
- ldr r2, _020A01C8 ; =UNK_021C8ED4
- moveq r6, #0x0
- ldr lr, _020A01B8 ; =UNK_021C8F04
- ldr r4, _020A01CC ; =UNK_021C8EE0
- cmp r6, #0x0
- str r1, [r12, #0x0]
- str r1, [r3, #0x0]
- str r1, [r3, #0x4]
- str r1, [r2, #0x0]
- addeq sp, sp, #0x4
- str r0, [r5, #0x0]
- str r1, [lr, #0x0]
- str r1, [r4, #0x0]
- ldmeqia sp!, {r4-r7,lr}
- bxeq lr
- ldr r0, _020A01D0 ; =UNK_021C8F78
- mov r2, #0x60
- bl MI_CpuFill8
- ldr r0, _020A01D4 ; =OSi_ThreadInfo
- ldr r5, [r0, #0x8]
- cmp r5, #0x0
- beq _020A016C
- mov r4, #0x0
-_020A011C:
- ldr r1, [r5, #0xa4]
- cmp r1, #0x0
- beq _020A0160
- ldr r0, [r1, #0x0]
- cmp r0, #0x0
- beq _020A0160
- ldrb r0, [r1, #0x8]
- cmp r0, #0xa
- beq _020A0148
- cmp r0, #0xb
- strneb r4, [r1, #0x8]
-_020A0148:
- ldr r0, [r1, #0x4]
- cmp r0, #0x0
- beq _020A0160
- str r4, [r1, #0x4]
- ldr r0, [r1, #0x0]
- bl OS_WakeupThreadDirect
-_020A0160:
- ldr r5, [r5, #0x68]
- cmp r5, #0x0
- bne _020A011C
-_020A016C:
- ldr r6, _020A01D8 ; =UNK_021C9520
- mov r7, #0x0
- ldr r4, _020A01DC ; =CPSiFree
- mov r5, r7
-_020A017C:
- ldrh r0, [r6, #0x4]
- cmp r0, #0x0
- beq _020A0198
- ldr r0, [r6, #0x34]
- ldr r1, [r4, #0x0]
- blx r1
- strh r5, [r6, #0x4]
-_020A0198:
- add r7, r7, #0x1
- cmp r7, #0x8
- add r6, r6, #0x38
- blt _020A017C
- bl CPSi_SslCleanup
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,lr}
- bx lr
- .balign 4
-_020A01B8: .word UNK_021C8F04
-_020A01BC: .word UNK_021C8EC0
-_020A01C0: .word UNK_021C8F1C
-_020A01C4: .word UNK_021C8ED0
-_020A01C8: .word UNK_021C8ED4
-_020A01CC: .word UNK_021C8EE0
-_020A01D0: .word UNK_021C8F78
-_020A01D4: .word OSi_ThreadInfo
-_020A01D8: .word UNK_021C9520
-_020A01DC: .word CPSiFree
diff --git a/arm9/global.inc b/arm9/global.inc
index 1bf30bfc..a7bab851 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -21,6 +21,78 @@
.extern CARDi_SetTask
.extern CARDi_TaskThread
.extern CARDi_WaitAsync
+.extern CPSDnsIp
+.extern CPSGatewayIp
+.extern CPSMyIp
+.extern CPSNetMask
+.extern CPS_CalmDown
+.extern CPS_Cleanup
+.extern CPS_Resolve
+.extern CPS_SetRootCa
+.extern CPS_SetScavengerCallback
+.extern CPS_SetSsl
+.extern CPS_SetSslHandshakePriority
+.extern CPS_SetThreadPriority
+.extern CPS_SetUdpCallback
+.extern CPS_SocConsume
+.extern CPS_SocDatagramMode
+.extern CPS_SocDup
+.extern CPS_SocGetChar
+.extern CPS_SocGetEport
+.extern CPS_SocGetLength
+.extern CPS_SocPingMode
+.extern CPS_SocRead
+.extern CPS_SocRegister
+.extern CPS_SocRelease
+.extern CPS_SocUnRegister
+.extern CPS_SocUse
+.extern CPS_SocWho
+.extern CPS_SocWrite
+.extern CPS_SslAddRandomSeed
+.extern CPS_Startup
+.extern CPS_TcpClose
+.extern CPS_TcpConnect
+.extern CPS_TcpListen
+.extern CPS_TcpShutdown
+.extern CPSiAlloc
+.extern CPSiFree
+.extern CPSiRand32ctx
+.extern CPSi_RecvCallbackFunc
+.extern CPSi_SocConsumeRaw
+.extern CPSi_SslCleanup
+.extern CPSi_SslClose
+.extern CPSi_SslConnect
+.extern CPSi_SslConsume
+.extern CPSi_SslGetLength
+.extern CPSi_SslListen
+.extern CPSi_SslPeriodical
+.extern CPSi_SslRead
+.extern CPSi_SslShutdown
+.extern CPSi_SslWrite2
+.extern CPSi_TcpConnectRaw
+.extern CPSi_TcpListenRaw
+.extern CPSi_TcpReadRaw
+.extern CPSi_TcpShutdownRaw
+.extern CPSi_TcpWrite2Raw
+.extern CPSi_big_add
+.extern CPSi_big_div
+.extern CPSi_big_from_char
+.extern CPSi_big_montpower
+.extern CPSi_big_mult
+.extern CPSi_big_negate
+.extern CPSi_big_power
+.extern CPSi_big_sign
+.extern CPSi_big_sub
+.extern CPSi_char_from_big
+.extern CPSi_md5_calc
+.extern CPSi_md5_init
+.extern CPSi_md5_result
+.extern CPSi_rc4_crypt
+.extern CPSi_rc4_init
+.extern CPSi_sha1_calc
+.extern CPSi_sha1_init
+.extern CPSi_sha1_result
+.extern CPSi_sha1_result_prng
.extern CP_RestoreContext
.extern CP_SaveContext
.extern CTRDG_CpuCopy16
@@ -110,7 +182,6 @@
.extern FSi_SendCommand
.extern FSi_TranslateCommand
.extern FUNRTC_Init
-.extern SVC_CpuSet
.extern FUN_02000DF4
.extern FUN_02000E7C
.extern FUN_02000EE8
@@ -196,7 +267,6 @@
.extern FUN_02003B98
.extern FUN_02003C10
.extern FUN_02003CE8
-.extern GetSoundDataPointer
.extern FUN_02003D38
.extern FUN_02003F3C
.extern FUN_02003F64
@@ -4305,6 +4375,11 @@
.extern FUN_0205C380
.extern FUN_0205C390
.extern FUN_0205C3AC
+.extern FUN_0205C3B0
+.extern FUN_0205C3D0
+.extern FUN_0205C490
+.extern FUN_0205C4A8
+.extern FUN_0205C4D8
.extern FUN_0205C598
.extern FUN_0205C888
.extern FUN_0205C8B4
@@ -5377,14 +5452,23 @@
.extern FUN_0208A334
.extern FUN_0208A338
.extern FUN_0208A9B8
+.extern FUN_0208AC14
+.extern FUN_0208AC58
.extern FUN_0208ACEC
.extern FUN_0208AD80
+.extern FUN_0208AE48
.extern FUN_0208AF80
.extern FUN_0208AF94
.extern FUN_0208AFA8
.extern FUN_0208B05C
.extern FUN_0208B128
.extern FUN_0208B4A0
+.extern FUN_020905D0
+.extern FUN_02090664
+.extern FUN_02090780
+.extern FUN_02090858
+.extern FUN_020908DC
+.extern FUN_020909A4
.extern FUN_02090CC8
.extern FUN_02090DB8
.extern FUN_020910EC
@@ -5454,23 +5538,6 @@
.extern FUN_0209A9A4
.extern FUN_0209A9D0
.extern FUN_0209AAD0
-.extern FUN_0209BF4C
-.extern FUN_0209BF9C
-.extern FUN_0209C030
-.extern FUN_0209C52C
-.extern FUN_0209C638
-.extern FUN_0209C7AC
-.extern FUN_0209C840
-.extern FUN_0209C934
-.extern FUN_0209CB24
-.extern FUN_0209CB44
-.extern FUN_0209CB78
-.extern FUN_0209CC10
-.extern FUN_0209CC28
-.extern CPS_SetSsl
-.extern CPS_SslAddRandomSeed
-.extern CPS_SetRootCa
-.extern CPS_SetSslHandshakePriority
.extern FUN_020A71F8
.extern FUN_020A722C
.extern FUN_020A7488
@@ -5485,6 +5552,7 @@
.extern FUN_020A83D0
.extern FUN_020A846C
.extern FUN_020A84D8
+.extern FUN_020A87BC
.extern FUN_020A87E0
.extern FUN_020A8850
.extern FUN_020A8BA4
@@ -5557,6 +5625,7 @@
.extern FUN_020B0250
.extern FUN_020B02C8
.extern FUN_020B0448
+.extern FUN_020B04FC
.extern FUN_020B0830
.extern FUN_020B0870
.extern FUN_020B0888
@@ -5901,6 +5970,7 @@
.extern GX_SetGraphicsMode
.extern GX_VBlankIntr
.extern GXx_SetMasterBrightness_
+.extern GetSoundDataPointer
.extern HandleLoadOverlay
.extern IC_InvalidateAll
.extern IC_InvalidateRange
@@ -6177,6 +6247,11 @@
.extern MOD05_021DAF78
.extern MOD05_021DAF98
.extern MOD05_021DB030
+.extern MOD05_021DB040
+.extern MOD05_021DB144
+.extern MOD05_021DB1D0
+.extern MOD05_021DB250
+.extern MOD05_021DB380
.extern MOD05_021DB44C
.extern MOD05_021DB4B0
.extern MOD05_021DB52C
@@ -6561,6 +6636,7 @@
.extern MOD06_0224C6F4
.extern MOD06_0224C700
.extern MOD06_0224C8C8
+.extern MOD06_0224C8E8
.extern MOD06_0224CA58
.extern MOD06_0224CA88
.extern MOD06_0224CB30
@@ -7188,9 +7264,9 @@
.extern OS_TryLockCard
.extern OS_TryLockCartridge
.extern OS_TryLockMutex
+.extern OS_UnLockCartridge
.extern OS_UnlockByWord
.extern OS_UnlockCard
-.extern OS_UnLockCartridge
.extern OS_UnlockCartridge
.extern OS_UnlockMutex
.extern OS_WaitIrq
@@ -7453,6 +7529,7 @@
.extern SNDi_SetAlarmHandler
.extern SNDi_UnlockMutex
.extern STD_CopyLString
+.extern SVC_CpuSet
.extern SVC_GetCRC16
.extern SVC_Sqrt
.extern SVC_WaitByLoop
@@ -7484,6 +7561,11 @@
.extern TP_SetCalibrateParam
.extern TP_WaitBusy
.extern TP_WaitRawResult
+.extern UNK05_021F64C8
+.extern UNK05_021F9080
+.extern UNK05_021F9194
+.extern UNK05_021F9494
+.extern UNK63_021DBAB8
.extern UNK_020FB6F8
.extern UNK_020FB704
.extern UNK_020FB710
@@ -7491,6 +7573,37 @@
.extern UNK_020FB740
.extern UNK_020FB764
.extern UNK_020FD144
+.extern UNK_021C8ECC
+.extern UNK_021C8ED0
+.extern UNK_021C8ED4
+.extern UNK_021C8ED8
+.extern UNK_021C8EDC
+.extern UNK_021C8EE0
+.extern UNK_021C8EE4
+.extern UNK_021C8EE8
+.extern UNK_021C8EEC
+.extern UNK_021C8EF0
+.extern UNK_021C8EF8
+.extern UNK_021C8EFC
+.extern UNK_021C8F00
+.extern UNK_021C8F04
+.extern UNK_021C8F08
+.extern UNK_021C8F0C
+.extern UNK_021C8F10
+.extern UNK_021C8F14
+.extern UNK_021C8F1C
+.extern UNK_021C8F5E
+.extern UNK_021C8F78
+.extern UNK_021C8F82
+.extern UNK_021C8FD8
+.extern UNK_021C903C
+.extern UNK_021C90A0
+.extern UNK_021C9160
+.extern UNK_021C9220
+.extern UNK_021C924A
+.extern UNK_021C93A0
+.extern UNK_021C9520
+.extern UNK_021C9EE0
.extern Unk_0210683C
.extern Unk_02106840
.extern Unk_02106900
@@ -7508,6 +7621,7 @@
.extern VEC_MultAdd
.extern VEC_Normalize
.extern VEC_Subtract
+.extern WCM_SendDCFData
.extern WM_Disable
.extern WM_Disconnect
.extern WM_Enable
@@ -7677,6 +7791,7 @@
.extern memmove
.extern memset
.extern nan
+.extern pool_initialized
.extern pow
.extern printf
.extern qsort
@@ -7730,101 +7845,3 @@
.extern wcstombs
.extern wctomb
.extern wmemcpy
-.extern FUN_0208AC14
-.extern FUN_0208AC58
-.extern FUN_0208AE48
-.extern FUN_020905D0
-.extern FUN_02090664
-.extern FUN_02090780
-.extern FUN_02090858
-.extern FUN_020908DC
-.extern FUN_020909A4
-.extern FUN_020B04FC
-.extern UNK63_021DBAB8
-.extern UNK05_021F64C8
-.extern MOD06_0224C8E8
-.extern MOD05_021DB144
-.extern MOD05_021DB1D0
-.extern MOD05_021DB250
-.extern MOD05_021DB380
-.extern MOD05_021DB040
-.extern UNK05_021F9080
-.extern UNK05_021F9194
-.extern UNK05_021F9494
-.extern FUN_0205C3B0
-.extern FUN_0205C3D0
-.extern FUN_0205C490
-.extern FUN_0205C4A8
-.extern FUN_0205C4D8
-.extern CPSiAlloc
-.extern CPSiFree
-.extern CPSiRand32ctx
-.extern CPSi_SslCleanup
-.extern CPSi_SslClose
-.extern CPSi_SslConnect
-.extern CPSi_SslConsume
-.extern CPSi_SslGetLength
-.extern CPSi_SslListen
-.extern CPSi_SslPeriodical
-.extern CPSi_SslRead
-.extern CPSi_SslShutdown
-.extern CPSi_SslWrite2
-.extern FUN_020A8644
-.extern FUN_020A87BC
-.extern UNK_021C8ECC
-.extern UNK_021C8ED0
-.extern UNK_021C8ED4
-.extern UNK_021C8ED8
-.extern UNK_021C8EDC
-.extern UNK_021C8EE0
-.extern UNK_021C8EE4
-.extern UNK_021C8EE8
-.extern UNK_021C8EEC
-.extern UNK_021C8EF0
-.extern UNK_021C8EF8
-.extern UNK_021C8EFC
-.extern UNK_021C8F00
-.extern UNK_021C8F04
-.extern UNK_021C8F08
-.extern UNK_021C8F0C
-.extern UNK_021C8F10
-.extern UNK_021C8F14
-.extern UNK_021C8F1C
-.extern UNK_021C8F5E
-.extern UNK_021C8F78
-.extern UNK_021C8F82
-.extern UNK_021C8FD8
-.extern UNK_021C903C
-.extern UNK_021C90A0
-.extern UNK_021C9160
-.extern UNK_021C9220
-.extern UNK_021C924A
-.extern UNK_021C93A0
-.extern UNK_021C9520
-.extern UNK_021C9EE0
-.extern pool_initialized
-.extern CPSi_SocConsumeRaw
-.extern CPSi_TcpConnectRaw
-.extern CPSi_TcpReadRaw
-.extern CPSi_TcpShutdownRaw
-.extern CPSi_TcpWrite2Raw
-.extern CPSi_big_add
-.extern CPSi_big_div
-.extern CPSi_big_from_char
-.extern CPSi_big_montpower
-.extern CPSi_big_mult
-.extern CPSi_big_negate
-.extern CPSi_big_power
-.extern CPSi_big_sign
-.extern CPSi_big_sub
-.extern CPSi_char_from_big
-.extern CPSi_md5_calc
-.extern CPSi_md5_init
-.extern CPSi_md5_result
-.extern CPSi_rc4_crypt
-.extern CPSi_rc4_init
-.extern CPSi_sha1_calc
-.extern CPSi_sha1_init
-.extern CPSi_sha1_result
-.extern CPSi_sha1_result_prng
-.extern FUN_0209CAC4
diff --git a/arm9/modules/04/asm/arm_04.s b/arm9/modules/04/asm/arm_04.s
index e58f24ed..24fa13fc 100644
--- a/arm9/modules/04/asm/arm_04.s
+++ b/arm9/modules/04/asm/arm_04.s
@@ -2415,7 +2415,7 @@ MOD04_021DAF18: ; 0x021DAF18
streq r1, [r0, #0x20]
addeq sp, sp, #0xc
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
- bl FUN_0209CB44
+ bl CPS_SocUse
add r0, sl, #0x1000
ldr r0, [r0, #0x12c]
cmp r0, #1
@@ -2440,15 +2440,15 @@ _021DAFC8:
ldrh r1, [r0, #0x30]
mov r2, r4
mov r0, #0
- bl FUN_0209CB78
- bl FUN_0209C934
+ bl CPS_SocPingMode
+ bl CPS_TcpConnect
cmp r0, #0
beq _021DB004
add r0, sl, #0x1000
mov r1, #3
str r1, [r0, #0x20]
- bl FUN_0209CB24
- bl FUN_0209CC10
+ bl CPS_SocRelease
+ bl CPS_SocUnRegister
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
_021DB004:
@@ -2458,14 +2458,14 @@ _021DB004:
bl strlen
mov r1, r0
mov r0, r4
- bl FUN_0209C030
+ bl CPS_SocWrite
cmp r0, #0
str r0, [sp, #8]
addle r0, sl, #0x1000
movle r1, #5
strle r1, [r0, #0x20]
ble _021DB20C
- bl FUN_0209BF4C
+ bl CPS_SocGetChar
mov r0, sl
bl MOD04_021DB3B8
cmp r0, #0
@@ -2493,7 +2493,7 @@ _021DB088:
moveq r1, #5
streq r1, [r0, #0x20]
beq _021DB20C
- bl FUN_0209BF9C
+ bl CPS_SocGetLength
str r0, [sp, #8]
cmp r0, #0
blt _021DB1E8
@@ -2503,7 +2503,7 @@ _021DB088:
mov r6, r0
add r0, sp, #8
mov r8, r1
- bl FUN_0209C638
+ bl CPS_SocRead
cmp r0, #0
beq _021DB1E8
ldr r2, [r7, #8]
@@ -2541,11 +2541,11 @@ _021DB150:
ldr r0, [sp, #8]
cmp r0, sb
bls _021DB164
- bl FUN_0209C52C
+ bl CPS_SocConsume
b _021DB1E8
_021DB164:
mov r0, sb
- bl FUN_0209C52C
+ bl CPS_SocConsume
_021DB16C:
add r0, sl, #0x1000
ldr r1, [r0, #0xa2c]
@@ -2580,20 +2580,20 @@ _021DB188:
str r1, [r0, #0x20]
b _021DB20C
_021DB1E8:
- bl FUN_0209C840
- bl FUN_0209C7AC
- bl FUN_0209CB24
- bl FUN_0209CC10
+ bl CPS_TcpShutdown
+ bl CPS_TcpClose
+ bl CPS_SocRelease
+ bl CPS_SocUnRegister
add r0, sl, #0x1000
mov r1, #8
str r1, [r0, #0x20]
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
_021DB20C:
- bl FUN_0209C840
- bl FUN_0209C7AC
- bl FUN_0209CB24
- bl FUN_0209CC10
+ bl CPS_TcpShutdown
+ bl CPS_TcpClose
+ bl CPS_SocRelease
+ bl CPS_SocUnRegister
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
@@ -2704,7 +2704,7 @@ MOD04_021DB35C: ; 0x021DB35C
ldr r2, [r1, #0x9cc]
add r0, r4, r0
str r2, [r1, #0x180]
- bl FUN_0209CC28
+ bl CPS_SocRegister
ldmia sp!, {r4, pc}
.align 2, 0
_021DB3AC: .word 0x00001134