Files
pokediamond/arm9/asm/CPS_network.s
2020-05-25 12:59:52 -04:00

6411 lines
116 KiB
ArmAsm

.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