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