mirror of
https://github.com/pret/pokediamond.git
synced 2026-09-12 11:06:58 -05:00
6411 lines
116 KiB
ArmAsm
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
|