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