From f0dd1eeed8089f27b1960e96e48f28e46d8bb55b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 25 May 2020 16:52:35 -0400 Subject: Split libwcm and name routines --- arm9/arm9.lcf | 12 +- arm9/asm/WCM_aplist.s | 408 ++++ arm9/asm/WCM_cpsif.s | 361 ++++ arm9/asm/WCM_system.s | 2748 ++++++++++++++++++++++++ arm9/asm/WCM_util.s | 156 ++ arm9/asm/libwcm.s | 3751 --------------------------------- arm9/global.inc | 38 +- arm9/modules/04/asm/arm_04.s | 46 +- arm9/modules/13/asm/module_13_thumb.s | 92 +- arm9/modules/80/asm/module_80.s | 2 +- arm9/modules/82/asm/module_82.s | 2 +- 11 files changed, 3775 insertions(+), 3841 deletions(-) create mode 100644 arm9/asm/WCM_aplist.s create mode 100644 arm9/asm/WCM_cpsif.s create mode 100644 arm9/asm/WCM_system.s create mode 100644 arm9/asm/WCM_util.s delete mode 100644 arm9/asm/libwcm.s diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 656f0541..098e71f8 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -451,7 +451,10 @@ SECTIONS { SSL_sha1.o (.text) SSL_rca4.o (.text) SSL_biginteger.o (.text) - libwcm.o (.text) + WCM_system.o (.text) + WCM_aplist.o (.text) + WCM_cpsif.o (.text) + WCM_util.o (.text) libVCT.o (.text) /* Nitro SDK */ FX_mtx22.o (.text) @@ -734,7 +737,7 @@ SECTIONS { SSL_sha1.o (.rodata) SSL_rca4.o (.rodata) SSL_biginteger.o (.rodata) - libwcm.o (.rodata) + WCM_system.o (.rodata) libVCT.o (.rodata) FX_atan.o (.rodata) GX_load3d.o (.rodata) @@ -797,7 +800,6 @@ SECTIONS { SSL_sha1.o (.data) SSL_rca4.o (.data) SSL_biginteger.o (.data) - libwcm.o (.data) libVCT.o (.data) GX.o (.data) OS_irqHandler.o (.data) @@ -889,7 +891,9 @@ SECTIONS { SSL_sha1.o (.bss) SSL_rca4.o (.bss) SSL_biginteger.o (.bss) - libwcm.o (.bss) + WCM_system.o (.bss) + WCM_cpsif.o (.bss) + WCM_util.o (.bss) libVCT.o (.bss) GX.o (.bss) GX_state.o (.bss) diff --git a/arm9/asm/WCM_aplist.s b/arm9/asm/WCM_aplist.s new file mode 100644 index 00000000..69067574 --- /dev/null +++ b/arm9/asm/WCM_aplist.s @@ -0,0 +1,408 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start WcmAppendApList +WcmAppendApList: ; 0x020A7FB0 + stmdb sp!, {r4,lr} + mov r4, r0 + bl WCMi_GetSystemWork + add r1, r0, #0x2000 + cmp r4, #0x0 + ldr r0, [r1, #0x270] + ldmeqia sp!, {r4,lr} + bxeq lr + cmp r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r1, [r1, #0x274] + cmp r1, #0xc + ldmlsia sp!, {r4,lr} + bxls lr + ldr r3, [r0, #0x4] + cmp r3, #0x0 + beq _020A8040 +_020A7FF8: + cmp r3, r4 + bne _020A8034 + ldr r2, [r3, #0x8] + cmp r2, #0x0 + ldrne r1, [r3, #0xc] + strne r1, [r2, #0xc] + ldreq r1, [r3, #0xc] + streq r1, [r0, #0x4] + ldr r2, [r3, #0xc] + cmp r2, #0x0 + ldrne r1, [r3, #0x8] + strne r1, [r2, #0x8] + ldreq r1, [r3, #0x8] + streq r1, [r0, #0x8] + b _020A8040 +_020A8034: + ldr r3, [r3, #0xc] + cmp r3, #0x0 + bne _020A7FF8 +_020A8040: + mov r1, #0x0 + str r1, [r4, #0xc] + ldr r1, [r0, #0x8] + str r1, [r4, #0x8] + str r4, [r0, #0x8] + ldr r1, [r4, #0x8] + cmp r1, #0x0 + strne r4, [r1, #0xc] + streq r4, [r0, #0x4] + cmp r3, #0x0 + ldreq r1, [r0, #0x0] + streq r1, [r4, #0x4] + ldreq r1, [r0, #0x0] + addeq r1, r1, #0x1 + streq r1, [r0, #0x0] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WcmSearchIndexedApList +WcmSearchIndexedApList: ; 0x020A8084 + stmdb sp!, {r4,lr} + mov r4, r0 + bl WCMi_GetSystemWork + add r1, r0, #0x2000 + ldr r2, [r1, #0x270] + mov r0, #0x0 + cmp r2, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r1, [r1, #0x274] + cmp r1, #0xc + ldmlsia sp!, {r4,lr} + bxls lr + ldr r0, [r2, #0x4] + cmp r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr +_020A80C8: + ldr r1, [r0, #0x4] + cmp r1, r4 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, [r0, #0xc] + cmp r0, #0x0 + bne _020A80C8 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WcmSearchApList +WcmSearchApList: ; 0x020A80EC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WCMi_GetSystemWork + add r0, r0, #0x2000 + cmp r5, #0x0 + mov r4, #0x0 + ldr r1, [r0, #0x270] + addeq sp, sp, #0x4 + moveq r0, r4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + cmp r1, #0x0 + beq _020A8160 + ldr r0, [r0, #0x274] + cmp r0, #0xc + bls _020A8160 + ldr r4, [r1, #0x4] + cmp r4, #0x0 + beq _020A8160 +_020A813C: + add r0, r4, #0x10 + mov r1, r5 + add r0, r0, #0x4 + bl WCM_CompareBssID + cmp r0, #0x0 + bne _020A8160 + ldr r4, [r4, #0xc] + cmp r4, #0x0 + bne _020A813C +_020A8160: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WcmGetLastApList +WcmGetLastApList: ; 0x020A8170 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WCMi_GetSystemWork + add r0, r0, #0x2000 + ldr r1, [r0, #0x270] + cmp r1, #0x0 + beq _020A81A4 + ldr r0, [r0, #0x274] + cmp r0, #0xc + addhi sp, sp, #0x4 + ldrhi r0, [r1, #0x4] + ldmhiia sp!, {lr} + bxhi lr +_020A81A4: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start WcmAllocApList +WcmAllocApList: ; 0x020A81B4 + stmdb sp!, {r4,lr} + bl WCMi_GetSystemWork + add r2, r0, #0x2000 + ldr r1, [r2, #0x270] + mov r0, #0x0 + cmp r1, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r3, [r2, #0x274] + cmp r3, #0xc + ldmlsia sp!, {r4,lr} + bxls lr + ldr r2, _020A8294 ; =0x4EC4EC4F + sub r3, r3, #0xc + umull r2, r4, r3, r2 + movs r4, r4, lsr #0x6 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r2, [r1, #0x0] + cmp r4, r2 + ldmlsia sp!, {r4,lr} + bxls lr + mov lr, r0 + cmp r4, #0x0 + bls _020A8240 + add r12, r1, #0xc + mov r2, #0xd0 +_020A8220: + mul r0, lr, r2 + ldrb r3, [r12, r0] + add r0, r12, r0 + cmp r3, #0x0 + beq _020A8240 + add lr, lr, #0x1 + cmp lr, r4 + blo _020A8220 +_020A8240: + cmp lr, r4 + ldmcsia sp!, {r4,lr} + bxcs lr + mov r2, #0x1 + strb r2, [r0, #0x0] + ldr r3, [r1, #0x0] + mov r2, #0x0 + str r3, [r0, #0x4] + str r2, [r0, #0xc] + ldr r2, [r1, #0x8] + str r2, [r0, #0x8] + str r0, [r1, #0x8] + ldr r2, [r0, #0x8] + cmp r2, #0x0 + strne r0, [r2, #0xc] + streq r0, [r1, #0x4] + ldr r2, [r1, #0x0] + add r2, r2, #0x1 + str r2, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A8294: .word 0x4EC4EC4F + + arm_func_start WCMi_EntryApList +WCMi_EntryApList: ; 0x020A8298 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl WCMi_GetSystemWork + movs r7, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + add r0, r7, #0x2000 + ldrb r0, [r0, #0x26a] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldrh r0, [r5, #0x3c] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + add r0, r5, #0x4 + bl WcmSearchApList + movs r6, r0 + bne _020A8300 + bl WcmAllocApList + mov r6, r0 +_020A8300: + cmp r6, #0x0 + bne _020A8320 + add r0, r7, #0x2000 + ldr r0, [r0, #0x278] + cmp r0, #0x1 + bne _020A8320 + bl WcmGetLastApList + mov r6, r0 +_020A8320: + cmp r6, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r5 + add r1, r6, #0x10 + mov r2, #0xc0 + strh r4, [r6, #0x2] + bl MIi_CpuCopyFast + mov r0, r6 + bl WcmAppendApList + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WCM_PointApList +WCM_PointApList: ; 0x020A8358 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + bl OS_DisableInterrupts + mov r5, r0 + bl WCMi_GetSystemWork + cmp r0, #0x0 + bne _020A8390 + mov r0, r5 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_020A8390: + mov r0, r4 + bl WcmSearchIndexedApList + movs r4, r0 + bne _020A83B8 + mov r0, r5 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_020A83B8: + mov r0, r5 + bl OS_RestoreInterrupts + add r0, r4, #0x10 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WCM_LockApList +WCM_LockApList: ; 0x020A83D0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + mov r4, r0 + bl WCMi_GetSystemWork + cmp r0, #0x0 + bne _020A8408 + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_020A8408: + cmp r5, #0x0 + beq _020A8434 + add r1, r0, #0x2000 + ldrb r1, [r1, #0x26a] + add r0, r0, #0x2000 + cmp r1, #0x0 + movne r5, #0x1 + mov r1, #0x1 + moveq r5, #0x0 + strb r1, [r0, #0x26a] + b _020A8454 +_020A8434: + add r1, r0, #0x2000 + ldrb r1, [r1, #0x26a] + add r0, r0, #0x2000 + cmp r1, #0x0 + movne r5, #0x1 + mov r1, #0x0 + moveq r5, #0x0 + strb r1, [r0, #0x26a] +_020A8454: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WCM_CountApList +WCM_CountApList: ; 0x020A846C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + mov r5, r0 + bl WCMi_GetSystemWork + cmp r0, #0x0 + mov r4, #0x0 + bne _020A84A4 + mov r0, r5 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, r4 + ldmia sp!, {r4-r5,lr} + bx lr +_020A84A4: + add r0, r0, #0x2000 + ldr r1, [r0, #0x270] + cmp r1, #0x0 + beq _020A84C0 + ldr r0, [r0, #0x274] + cmp r0, #0xc + ldrhi r4, [r1, #0x0] +_020A84C0: + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WCM_ClearApList +WCM_ClearApList: ; 0x020A84D8 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + mov r4, r0 + bl WCMi_GetSystemWork + cmp r0, #0x0 + bne _020A8500 + mov r0, r4 + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr +_020A8500: + add r1, r0, #0x2000 + ldr r0, [r1, #0x270] + cmp r0, #0x0 + beq _020A8524 + ldr r2, [r1, #0x274] + cmp r2, #0x0 + ble _020A8524 + mov r1, #0x0 + bl MI_CpuFill8 +_020A8524: + mov r0, r4 + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr diff --git a/arm9/asm/WCM_cpsif.s b/arm9/asm/WCM_cpsif.s new file mode 100644 index 00000000..09b72e80 --- /dev/null +++ b/arm9/asm/WCM_cpsif.s @@ -0,0 +1,361 @@ + .include "asm/macros.inc" + .include "global.inc" + + .bss + + .global wcmCpsifw +wcmCpsifw: ; 0x021CA870 + .space 0x2C + + .text + + arm_func_start WcmCpsifUnlockMutexInIRQ +WcmCpsifUnlockMutexInIRQ: ; 0x020A8534 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x8] + ldr r1, _020A858C ; =OS_IrqHandler + cmp r2, r1 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r1, [r0, #0xc] + sub r1, r1, #0x1 + str r1, [r0, #0xc] + ldr r1, [r0, #0xc] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + mov r1, #0x0 + str r1, [r0, #0x8] + bl OS_WakeupThread + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A858C: .word OS_IrqHandler + + arm_func_start WcmCpsifTryLockMutexInIRQ +WcmCpsifTryLockMutexInIRQ: ; 0x020A8590 + ldr r2, [r0, #0x8] + cmp r2, #0x0 + bne _020A85B8 + ldr r1, _020A85D8 ; =OS_IrqHandler + str r1, [r0, #0x8] + ldr r1, [r0, #0xc] + add r1, r1, #0x1 + str r1, [r0, #0xc] + mov r0, #0x1 + bx lr +_020A85B8: + ldr r1, _020A85D8 ; =OS_IrqHandler + cmp r2, r1 + ldreq r1, [r0, #0xc] + addeq r1, r1, #0x1 + streq r1, [r0, #0xc] + moveq r0, #0x1 + movne r0, #0x0 + bx lr + .balign 4 +_020A85D8: .word OS_IrqHandler + + arm_func_start WcmCpsifKACallback +WcmCpsifKACallback: ; 0x020A85DC + ldr ip, _020A85E8 ; =WcmCpsifUnlockMutexInIRQ + ldr r0, _020A85EC ; =wcmCpsifw+0xC + bx r12 + .balign 4 +_020A85E8: .word WcmCpsifUnlockMutexInIRQ +_020A85EC: .word wcmCpsifw+0xC + + arm_func_start WcmCpsifWmCallback +WcmCpsifWmCallback: ; 0x020A85F0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r1, [r0, #0x0] + cmp r1, #0x12 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldrh r2, [r0, #0x2] + ldr r1, _020A863C ; =wcmCpsifw + str r2, [r1, #0x24] + ldrh r0, [r0, #0x2] + cmp r0, #0x0 + bne _020A8628 + bl WCMi_ResetKeepAliveAlarm +_020A8628: + ldr r0, _020A8640 ; =wcmCpsifw+0x4 + bl OS_WakeupThread + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A863C: .word wcmCpsifw +_020A8640: .word wcmCpsifw+0x4 + + arm_func_start WCM_SendDCFData +WCM_SendDCFData: ; 0x020A8644 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + mov r6, r2 + bl OS_DisableInterrupts + mov r5, r0 + bl WCMi_GetSystemWork + cmp r0, #0x0 + bne _020A867C + mov r0, r5 + bl OS_RestoreInterrupts + mvn r0, #0x0 + ldmia sp!, {r4-r8,lr} + bx lr +_020A867C: + ldr r0, _020A87AC ; =wcmCpsifw+0xC + bl OS_LockMutex + bl WCMi_GetSystemWork + movs r4, r0 + bne _020A86AC + ldr r0, _020A87AC ; =wcmCpsifw+0xC + bl OS_UnlockMutex + mov r0, r5 + bl OS_RestoreInterrupts + mvn r0, #0x0 + ldmia sp!, {r4-r8,lr} + bx lr +_020A86AC: + add r0, r4, #0x2000 + ldr r1, [r0, #0x260] + cmp r1, #0x9 + bne _020A86C8 + ldrb r0, [r0, #0x26b] + cmp r0, #0x1 + bne _020A86E4 +_020A86C8: + ldr r0, _020A87AC ; =wcmCpsifw+0xC + bl OS_UnlockMutex + mov r0, r5 + bl OS_RestoreInterrupts + mvn r0, #0x3 + ldmia sp!, {r4-r8,lr} + bx lr +_020A86E4: + mov r0, r7 + mov r2, r6 + add r1, r4, #0xf00 + bl MI_CpuCopy8 + mov r3, r6, lsl #0x10 + ldr r0, _020A87B0 ; =WcmCpsifWmCallback + mov r1, r8 + add r2, r4, #0xf00 + mov r3, r3, lsr #0x10 + bl WM_SetDCFData + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020A873C +_020A8718: ; jump table + b _020A873C ; case 0 + b _020A873C ; case 1 + b _020A8758 ; case 2 + b _020A873C ; case 3 + b _020A873C ; case 4 + b _020A873C ; case 5 + b _020A873C ; case 6 + b _020A873C ; case 7 + b _020A873C ; case 8 +_020A873C: + ldr r0, _020A87AC ; =wcmCpsifw+0xC + bl OS_UnlockMutex + mov r0, r5 + bl OS_RestoreInterrupts + mvn r0, #0x4 + ldmia sp!, {r4-r8,lr} + bx lr +_020A8758: + ldr r0, _020A87B4 ; =wcmCpsifw+0x4 + bl OS_SleepThread + ldr r0, _020A87B8 ; =wcmCpsifw + ldr r0, [r0, #0x24] + cmp r0, #0x0 + beq _020A8790 + cmp r0, #0x1 + ldr r0, _020A87AC ; =wcmCpsifw+0xC + bl OS_UnlockMutex + mov r0, r5 + bl OS_RestoreInterrupts + mvn r0, #0x4 + ldmia sp!, {r4-r8,lr} + bx lr +_020A8790: + ldr r0, _020A87AC ; =wcmCpsifw+0xC + bl OS_UnlockMutex + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r6 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020A87AC: .word wcmCpsifw+0xC +_020A87B0: .word WcmCpsifWmCallback +_020A87B4: .word wcmCpsifw+0x4 +_020A87B8: .word wcmCpsifw + + arm_func_start WCM_SetRecvDCFCallback +WCM_SetRecvDCFCallback: ; 0x020A87BC + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_DisableInterrupts + ldr r1, _020A87DC ; =wcmCpsifw + str r4, [r1, #0x28] + bl OS_RestoreInterrupts + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A87DC: .word wcmCpsifw + + arm_func_start WCM_GetApEssid +WCM_GetApEssid: ; 0x020A87E0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, #0x0 + mov r4, r0 + mov r6, r7 + bl WCMi_GetSystemWork + mov r5, r0 + bl OS_DisableInterrupts + cmp r5, #0x0 + beq _020A8830 + add r1, r5, #0x2000 + ldr r2, [r1, #0x260] + cmp r2, #0x9 + bne _020A8830 + ldrb r1, [r1, #0x26b] + cmp r1, #0x0 + addeq r2, r5, #0x2100 + ldreq r1, _020A884C ; =0x0000214C + ldreqh r6, [r2, #0x4a] + addeq r7, r5, r1 +_020A8830: + bl OS_RestoreInterrupts + cmp r4, #0x0 + strneh r6, [r4, #0x0] + mov r0, r7 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020A884C: .word 0x0000214C + + arm_func_start WCM_GetApMacAddress +WCM_GetApMacAddress: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, #0x0 + bl WCMi_GetSystemWork + mov r4, r0 + bl OS_DisableInterrupts + cmp r4, #0x0 + beq _020A8890 + add r1, r4, #0x2000 + ldr r2, [r1, #0x260] + cmp r2, #0x9 + bne _020A8890 + ldrb r1, [r1, #0x26b] + cmp r1, #0x0 + ldreq r1, _020A88A4 ; =0x00002144 + addeq r5, r4, r1 +_020A8890: + bl OS_RestoreInterrupts + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A88A4: .word 0x00002144 + + arm_func_start WCMi_CpsifSendNullPacket +WCMi_CpsifSendNullPacket: ; 0x020A88A8 + stmdb sp!, {r4,lr} + bl WCMi_GetSystemWork + movs r4, r0 + ldmeqia sp!, {r4,lr} + bxeq lr + add r0, r4, #0x2000 + ldr r1, [r0, #0x260] + cmp r1, #0x9 + ldmneia sp!, {r4,lr} + bxne lr + ldrb r0, [r0, #0x26b] + cmp r0, #0x1 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, _020A8928 ; =wcmCpsifw+0xC + bl WcmCpsifTryLockMutexInIRQ + cmp r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r1, _020A892C ; =0x00002144 + ldr r0, _020A8930 ; =WcmCpsifKACallback + add r1, r4, r1 + add r2, r4, #0xf00 + mov r3, #0x0 + bl WM_SetDCFData + cmp r0, #0x2 + ldmeqia sp!, {r4,lr} + bxeq lr + ldr r0, _020A8928 ; =wcmCpsifw+0xC + bl WcmCpsifUnlockMutexInIRQ + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A8928: .word wcmCpsifw+0xC +_020A892C: .word 0x00002144 +_020A8930: .word WcmCpsifKACallback + + arm_func_start WCMi_CpsifRecvCallback +WCMi_CpsifRecvCallback: ; 0x020A8934 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020A8978 ; =wcmCpsifw + mov r2, r0 + ldr r12, [r1, #0x28] + cmp r12, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + ldrh r3, [r2, #0x6] + add r0, r2, #0x1e + add r1, r2, #0x18 + add r2, r2, #0x2c + blx r12 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A8978: .word wcmCpsifw + + arm_func_start WCMi_InitCpsif +WCMi_InitCpsif: ; 0x020A897C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020A89C8 ; =wcmCpsifw + ldrb r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020A89CC ; =wcmCpsifw+0xC + mov r2, #0x0 + mov r3, #0x1 + strb r3, [r1, #0x0] + str r2, [r1, #0x24] + str r2, [r1, #0x8] + str r2, [r1, #0x4] + bl OS_InitMutex + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A89C8: .word wcmCpsifw +_020A89CC: .word wcmCpsifw+0xC diff --git a/arm9/asm/WCM_system.s b/arm9/asm/WCM_system.s new file mode 100644 index 00000000..ff427b90 --- /dev/null +++ b/arm9/asm/WCM_system.s @@ -0,0 +1,2748 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global WCM_Bssid_Any +WCM_Bssid_Any: ; 0x020FF590 + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00 + + .global WCM_Essid_Any +WCM_Essid_Any: ; 0x020FF598 + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF + + .bss + + .global wcmw +wcmw: ; 0x021CA86C + .space 0x4 + + .text + + arm_func_start WcmCountBits +WcmCountBits: ; 0x020A5A4C + mov r1, r0 + mov r0, #0x0 + mov r3, #0x1 +_020A5A58: + clz r2, r1 + rsbs r2, r2, #0x1f + bxcc lr + bic r1, r1, r3, lsl r2 + add r0, r0, #0x1 + b _020A5A58 + + arm_func_start WcmCountLeadingZero +WcmCountLeadingZero: ; 0x020A5A70 + clz r0, r0 + bx lr + + arm_func_start WcmWcmbReset +WcmWcmbReset: ; 0x020A5A78 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldrh r0, [r0, #0x2] + cmp r0, #0x0 + bne _020A5D80 + ldr r2, _020A5DA8 ; =wcmw + mov r0, #0x0 + ldr r1, [r2, #0x0] + add r1, r1, #0x2000 + strb r0, [r1, #0x26b] + ldr r1, [r2, #0x0] + add r1, r1, #0x2200 + strh r0, [r1, #0x82] + ldr r3, [r2, #0x0] + add r1, r3, #0x2000 + ldr r1, [r1, #0x260] + cmp r1, #0xd + addls pc, pc, r1, lsl #0x2 + b _020A5D4C +_020A5AC4: ; jump table + b _020A5D4C ; case 0 + b _020A5D4C ; case 1 + b _020A5D4C ; case 2 + b _020A5D4C ; case 3 + b _020A5D4C ; case 4 + b _020A5AFC ; case 5 + b _020A5AFC ; case 6 + b _020A5B24 ; case 7 + b _020A5B4C ; case 8 + b _020A5C74 ; case 9 + b _020A5CA4 ; case 10 + b _020A5D4C ; case 11 + b _020A5C74 ; case 12 + b _020A5CD4 ; case 13 +_020A5AFC: + mov r0, #0x3 + bl WcmSetPhase + mov r1, #0x0 + ldr r3, _020A5DAC ; =0x000008F5 + mov r2, r1 + mov r0, #0x1 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5B24: + mov r0, #0x3 + bl WcmSetPhase + mov r0, #0x0 + ldr r3, _020A5DB0 ; =0x000008FB + mov r1, r0 + mov r2, r0 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5B4C: + add r1, r3, #0x2200 + ldrh r4, [r1, #0xf8] + strh r0, [r1, #0xf8] + cmp r4, #0x12 + bne _020A5C44 + ldr r1, [r2, #0x0] + add r1, r1, #0x2100 + ldrh r3, [r1, #0x70] + and r12, r3, #0x24 + cmp r12, #0x24 + beq _020A5C44 + orr r3, r3, #0x24 + strh r3, [r1, #0x70] + ldr r2, [r2, #0x0] + add r1, r2, #0x2000 + ldr r3, [r1, #0x264] + and r1, r3, #0xc0000 + cmp r1, #0xc0000 + moveq r0, #0x1 + mov r0, r0, lsl #0x10 + mov r12, r0, lsr #0x10 + and r1, r3, #0x30000 + cmp r1, #0x30000 + movne r3, #0x1 + add r1, r2, #0x2140 + ldr r0, _020A5DB4 ; =WcmWmcbConnect + moveq r3, #0x0 + mov r2, #0x0 + str r12, [sp, #0x0] + bl WM_StartConnectEx + cmp r0, #0x2 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + cmp r0, #0x3 + beq _020A5C14 + cmp r0, #0x8 + bne _020A5C14 + mov r0, #0xc + bl WcmSetPhase + ldr r0, _020A5DA8 ; =wcmw + ldr r3, _020A5DB8 ; =0x0000091C + ldr r0, [r0, #0x0] + mov r2, r4 + add r1, r0, #0x2140 + mov r0, #0x1 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5C14: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A5DA8 ; =wcmw + ldr r3, _020A5DBC ; =0x00000925 + ldr r0, [r0, #0x0] + mov r2, r4 + add r1, r0, #0x2140 + mov r0, #0x7 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5C44: + mov r0, #0x3 + bl WcmSetPhase + ldr r0, _020A5DA8 ; =wcmw + ldr r3, _020A5DC0 ; =0x0000092D + ldr r0, [r0, #0x0] + mov r2, r4 + add r1, r0, #0x2140 + mov r0, #0x1 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5C74: + mov r0, #0x3 + bl WcmSetPhase + ldr r0, _020A5DA8 ; =wcmw + ldr r3, _020A5DC4 ; =0x00000935 + ldr r1, [r0, #0x0] + mov r0, #0x0 + add r1, r1, #0x2140 + mov r2, #0x1 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5CA4: + mov r0, #0x3 + bl WcmSetPhase + ldr r1, _020A5DA8 ; =wcmw + mov r0, #0x0 + ldr r1, [r1, #0x0] + ldr r3, _020A5DC8 ; =0x0000093C + mov r2, r0 + add r1, r1, #0x2140 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5CD4: + ldr r0, _020A5DCC ; =WcmWmcbCommon + bl WM_PowerOff + cmp r0, #0x2 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + cmp r0, #0x3 + beq _020A5D24 + cmp r0, #0x8 + bne _020A5D24 + mov r0, #0xc + bl WcmSetPhase + mov r1, #0x0 + ldr r3, _020A5DD0 ; =0x0000094A + mov r2, r1 + mov r0, #0x1 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5D24: + mov r0, #0xb + bl WcmSetPhase + mov r1, #0x0 + ldr r3, _020A5DD4 ; =0x00000953 + mov r2, r1 + mov r0, #0x7 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5D4C: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A5DA8 ; =wcmw + ldr r3, _020A5DD8 ; =0x00000959 + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2000 + ldr r2, [r1, #0x260] + mov r1, #0x0 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr +_020A5D80: + mov r0, #0xb + bl WcmSetPhase + mov r1, #0x0 + mov r2, r1 + mov r0, #0x7 + mov r3, #0x960 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A5DA8: .word wcmw +_020A5DAC: .word 0x000008F5 +_020A5DB0: .word 0x000008FB +_020A5DB4: .word WcmWmcbConnect +_020A5DB8: .word 0x0000091C +_020A5DBC: .word 0x00000925 +_020A5DC0: .word 0x0000092D +_020A5DC4: .word 0x00000935 +_020A5DC8: .word 0x0000093C +_020A5DCC: .word WcmWmcbCommon +_020A5DD0: .word 0x0000094A +_020A5DD4: .word 0x00000953 +_020A5DD8: .word 0x00000959 + + arm_func_start WcmWmcbEndDCF +WcmWmcbEndDCF: ; 0x020A5DDC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r0, [r0, #0x2] + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A5EF4 +_020A5DF4: ; jump table + b _020A5E08 ; case 0 + b _020A5EDC ; case 1 + b _020A5EF4 ; case 2 + b _020A5EDC ; case 3 + b _020A5EF4 ; case 4 +_020A5E08: + ldr r0, _020A5F24 ; =wcmw + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0xc + bne _020A5E38 + mov r0, #0xa + bl WcmSetPhase + bl WcmWmReset + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5E38: + ldr r0, _020A5F28 ; =WcmWmcbDisconnect + mov r1, #0x0 + bl WM_Disconnect + cmp r0, #0x2 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + cmp r0, #0x3 + beq _020A5E94 + cmp r0, #0x8 + bne _020A5EAC + mov r0, #0xc + bl WcmSetPhase + ldr r0, _020A5F24 ; =wcmw + ldr r3, _020A5F2C ; =0x000008B4 + ldr r1, [r0, #0x0] + mov r0, #0x1 + add r1, r1, #0x2140 + mov r2, #0x0 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5E94: + mov r0, #0xa + bl WcmSetPhase + bl WcmWmReset + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5EAC: + mov r0, #0xb + bl WcmSetPhase + ldr r1, _020A5F24 ; =wcmw + mov r0, #0x7 + ldr r1, [r1, #0x0] + mov r2, #0x0 + add r1, r1, #0x2140 + mov r3, #0x8c0 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5EDC: + mov r0, #0xa + bl WcmSetPhase + bl WcmWmReset + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A5EF4: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A5F24 ; =wcmw + ldr r3, _020A5F30 ; =0x000008D3 + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A5F24: .word wcmw +_020A5F28: .word WcmWmcbDisconnect +_020A5F2C: .word 0x000008B4 +_020A5F30: .word 0x000008D3 + + arm_func_start WcmWmcbStartDCF +WcmWmcbStartDCF: ; 0x020A5F34 + stmdb sp!, {r4,lr} + mov r4, r0 + ldrh r0, [r4, #0x2] + cmp r0, #0x0 + beq _020A5F50 + cmp r0, #0x4 + b _020A601C +_020A5F50: + ldrh r0, [r4, #0x4] + cmp r0, #0xe + beq _020A5F68 + cmp r0, #0xf + beq _020A5FC0 + b _020A5FF0 +_020A5F68: + ldr r0, _020A6048 ; =wcmw + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0xc + bne _020A5F94 + mov r0, #0x8 + bl WcmSetPhase + bl WcmWmReset + ldmia sp!, {r4,lr} + bx lr +_020A5F94: + mov r0, #0x9 + bl WcmSetPhase + ldr r1, _020A6048 ; =wcmw + mov r0, #0x0 + ldr r1, [r1, #0x0] + ldr r3, _020A604C ; =0x00000872 + mov r2, r0 + add r1, r1, #0x2140 + bl WcmNotify + ldmia sp!, {r4,lr} + bx lr +_020A5FC0: + ldr r0, [r4, #0x8] + ldrh r0, [r0, #0xe] + mov r0, r0, asr #0x8 + and r0, r0, #0xff + bl WCMi_ShelterRssi + ldr r0, [r4, #0x8] + mov r1, #0x620 + bl DC_InvalidateRange + ldr r0, [r4, #0x8] + bl WCMi_CpsifRecvCallback + ldmia sp!, {r4,lr} + bx lr +_020A5FF0: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A6048 ; =wcmw + ldrh r2, [r4, #0x4] + ldr r0, [r0, #0x0] + ldr r3, _020A6050 ; =0x00000881 + add r1, r0, #0x2140 + mov r0, #0x7 + bl WcmNotify + ldmia sp!, {r4,lr} + bx lr +_020A601C: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A6048 ; =wcmw + ldr r3, _020A6054 ; =0x0000088C + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl WcmNotify + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A6048: .word wcmw +_020A604C: .word 0x00000872 +_020A6050: .word 0x00000881 +_020A6054: .word 0x0000088C + + arm_func_start WcmWmcbDisconnect +WcmWmcbDisconnect: ; 0x020A6058 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r0, [r0, #0x2] + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A6108 +_020A6070: ; jump table + b _020A6084 ; case 0 + b _020A60F0 ; case 1 + b _020A6108 ; case 2 + b _020A60F0 ; case 3 + b _020A6108 ; case 4 +_020A6084: + ldr r0, _020A6138 ; =wcmw + ldr r1, [r0, #0x0] + add r0, r1, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0xc + bne _020A60B4 + mov r0, #0xa + bl WcmSetPhase + bl WcmWmReset + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A60B4: + add r1, r1, #0x2200 + mov r2, #0x0 + mov r0, #0x3 + strh r2, [r1, #0x82] + bl WcmSetPhase + ldr r1, _020A6138 ; =wcmw + mov r0, #0x0 + ldr r1, [r1, #0x0] + ldr r3, _020A613C ; =0x0000083D + mov r2, r0 + add r1, r1, #0x2140 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A60F0: + mov r0, #0xa + bl WcmSetPhase + bl WcmWmReset + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6108: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A6138 ; =wcmw + ldr r3, _020A6140 ; =0x0000084F + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6138: .word wcmw +_020A613C: .word 0x0000083D +_020A6140: .word 0x0000084F + + arm_func_start WcmWmcbConnect +WcmWmcbConnect: ; 0x020A6144 + stmdb sp!, {r4,lr} + mov r4, r0 + ldrh r0, [r4, #0x2] + cmp r0, #0xc + addls pc, pc, r0, lsl #0x2 + b _020A638C +_020A615C: ; jump table + b _020A6190 ; case 0 + b _020A6364 ; case 1 + b _020A638C ; case 2 + b _020A638C ; case 3 + b _020A638C ; case 4 + b _020A638C ; case 5 + b _020A6378 ; case 6 + b _020A638C ; case 7 + b _020A638C ; case 8 + b _020A638C ; case 9 + b _020A638C ; case 10 + b _020A6378 ; case 11 + b _020A6378 ; case 12 +_020A6190: + ldrh r0, [r4, #0x8] + cmp r0, #0x9 + bgt _020A61D0 + cmp r0, #0x0 + addge pc, pc, r0, lsl #0x2 + b _020A6338 ; case 0 + b _020A6338 ; case 1 + b _020A6338 ; case 2 + b _020A6338 ; case 3 + b _020A6338 ; case 4 + b _020A6338 ; case 5 + b _020A6338 ; case 6 + b _020A63B0 ; case 7 + b _020A6258 ; case 8 + b _020A61E0 ; case 9 + b _020A61E0 ; case 10 +_020A61D0: + cmp r0, #0x1a + ldmeqia sp!, {r4,lr} + bxeq lr + b _020A6338 +_020A61E0: + ldr r1, _020A63B8 ; =wcmw + ldr r2, [r1, #0x0] + add r0, r2, #0x2000 + ldr r0, [r0, #0x260] + sub r0, r0, #0x8 + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A63B0 +_020A6200: ; jump table + b _020A6220 ; case 0 + b _020A6230 ; case 1 + b _020A6214 ; case 2 + b _020A63B0 ; case 3 + b _020A624C ; case 4 +_020A6214: + add r0, r2, #0x2200 + mov r1, #0x0 + strh r1, [r0, #0x82] +_020A6220: + mov r0, #0xc + bl WcmSetPhase + ldmia sp!, {r4,lr} + bx lr +_020A6230: + add r0, r2, #0x2200 + mov r2, #0x0 + strh r2, [r0, #0x82] + ldr r0, [r1, #0x0] + mov r1, #0x6 + add r0, r0, #0x2200 + strh r1, [r0, #0x80] +_020A624C: + bl WcmWmReset + ldmia sp!, {r4,lr} + bx lr +_020A6258: + ldr r1, _020A63B8 ; =wcmw + ldr r3, [r1, #0x0] + add r0, r3, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0xc + bne _020A6284 + mov r0, #0x8 + bl WcmSetPhase + bl WcmWmReset + ldmia sp!, {r4,lr} + bx lr +_020A6284: + ldrh r2, [r4, #0xa] + cmp r2, #0x1 + blo _020A632C + ldr r0, _020A63BC ; =0x000007D7 + cmp r2, r0 + bhi _020A632C + add r0, r3, #0x2200 + strh r2, [r0, #0x82] + ldr r1, [r1, #0x0] + ldr r0, _020A63C0 ; =WcmWmcbStartDCF + add r1, r1, #0x1500 + mov r2, #0x620 + bl WM_StartDCF + cmp r0, #0x2 + ldmeqia sp!, {r4,lr} + bxeq lr + cmp r0, #0x3 + beq _020A6300 + cmp r0, #0x8 + bne _020A6300 + mov r0, #0xc + bl WcmSetPhase + ldr r0, _020A63B8 ; =wcmw + ldr r3, _020A63C4 ; =0x000007ED + ldr r1, [r0, #0x0] + mov r0, #0x1 + add r1, r1, #0x2140 + mov r2, #0x0 + bl WcmNotify + ldmia sp!, {r4,lr} + bx lr +_020A6300: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A63B8 ; =wcmw + ldr r3, _020A63C8 ; =0x000007F6 + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl WcmNotify + ldmia sp!, {r4,lr} + bx lr +_020A632C: + bl WcmWmReset + ldmia sp!, {r4,lr} + bx lr +_020A6338: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A63B8 ; =wcmw + ldrh r2, [r4, #0x8] + ldr r0, [r0, #0x0] + ldr r3, _020A63CC ; =0x00000804 + add r1, r0, #0x2140 + mov r0, #0x7 + bl WcmNotify + ldmia sp!, {r4,lr} + bx lr +_020A6364: + ldr r0, _020A63B8 ; =wcmw + ldrh r1, [r4, #0xe] + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0xf8] +_020A6378: + mov r0, #0x8 + bl WcmSetPhase + bl WcmWmReset + ldmia sp!, {r4,lr} + bx lr +_020A638C: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A63B8 ; =wcmw + ldr r3, _020A63D0 ; =0x0000081B + ldr r1, [r0, #0x0] + mov r0, #0x7 + add r1, r1, #0x2140 + mov r2, #0x0 + bl WcmNotify +_020A63B0: + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A63B8: .word wcmw +_020A63BC: .word 0x000007D7 +_020A63C0: .word WcmWmcbStartDCF +_020A63C4: .word 0x000007ED +_020A63C8: .word 0x000007F6 +_020A63CC: .word 0x00000804 +_020A63D0: .word 0x0000081B + + arm_func_start WcmWmcbEndScan +WcmWmcbEndScan: ; 0x020A63D4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r0, [r0, #0x2] + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A6438 +_020A63EC: ; jump table + b _020A6400 ; case 0 + b _020A6428 ; case 1 + b _020A6438 ; case 2 + b _020A6438 ; case 3 + b _020A6438 ; case 4 +_020A6400: + mov r0, #0x3 + bl WcmSetPhase + mov r0, #0x0 + ldr r3, _020A6460 ; =0x00000783 + mov r1, r0 + mov r2, r0 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6428: + bl WcmWmReset + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6438: + mov r0, #0xb + bl WcmSetPhase + mov r1, #0x0 + ldr r3, _020A6464 ; =0x00000793 + mov r2, r1 + mov r0, #0x7 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6460: .word 0x00000783 +_020A6464: .word 0x00000793 + + arm_func_start WcmWmcbScanEx +WcmWmcbScanEx: ; 0x020A6468 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + mov r5, r0 + ldrh r0, [r5, #0x2] + mov r4, #0x14 + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A6714 +_020A6488: ; jump table + b _020A649C ; case 0 + b _020A6704 ; case 1 + b _020A6714 ; case 2 + b _020A6714 ; case 3 + b _020A6714 ; case 4 +_020A649C: + ldr r0, _020A673C ; =wcmw + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0x5 + bne _020A64D0 + mov r0, #0x6 + bl WcmSetPhase + mov r0, #0x0 + ldr r3, _020A6740 ; =0x00000704 + mov r1, r0 + mov r2, r0 + bl WcmNotify +_020A64D0: + ldr r1, _020A673C ; =wcmw + ldr r2, [r1, #0x0] + add r0, r2, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0x6 + beq _020A64FC + cmp r0, #0x7 + beq _020A6674 + cmp r0, #0xd + beq _020A6684 + b _020A6694 +_020A64FC: + add r0, r2, #0x2200 + mov r2, #0x7 + strh r2, [r0, #0x80] + ldrh r0, [r5, #0x8] + cmp r0, #0x5 + bne _020A6588 + ldr r0, [r1, #0x0] + add r1, r0, #0x2200 + add r0, r0, #0x2000 + ldrh r1, [r1, #0x8c] + ldr r0, [r0, #0x288] + bl DC_InvalidateRange + ldrh r0, [r5, #0xe] + mov r4, #0x0 + cmp r0, #0x0 + ble _020A6588 + ldr r8, _020A6744 ; =0x0000071A + mov r6, r4 + mov r7, #0x7 +_020A6548: + add r0, r5, r4, lsl #0x1 + add r2, r5, r4, lsl #0x2 + ldrh r1, [r0, #0x50] + ldr r0, [r2, #0x10] + bl WCMi_EntryApList + str r8, [sp, #0x0] + add r0, r5, r4, lsl #0x2 + ldr r2, [r0, #0x10] + mov r0, r7 + mov r1, r6 + mov r3, r5 + bl WcmNotifyEx + ldrh r0, [r5, #0xe] + add r4, r4, #0x1 + cmp r4, r0 + blt _020A6548 +_020A6588: + ldr r0, _020A673C ; =wcmw + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r1, [r0, #0x264] + and r0, r1, #0xc00000 + cmp r0, #0xc00000 + bne _020A65F4 + ldr r0, _020A6748 ; =0x00003FFE + and r0, r1, r0 + bl WcmCountBits + movs r1, r0 + beq _020A65F4 + ldr r0, _020A673C ; =wcmw + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r6, [r0, #0x284] + mov r0, r6 + bl _u32_div_f + cmp r1, #0x0 + bne _020A65F4 + ldr r4, _020A674C ; =0x00000728 + mov r1, #0x0 + mov r2, r6 + mov r3, r1 + mov r0, #0x8 + str r4, [sp, #0x0] + bl WcmNotifyEx +_020A65F4: + ldrh r0, [r5, #0xa] + bl WcmCountLeadingZero + rsb r0, r0, #0x20 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl WcmGetNextScanChannel + ldr r1, _020A673C ; =wcmw + mov r2, #0x1 + mov r2, r2, lsl r0 + ldr r0, [r1, #0x0] + mov r2, r2, asr #0x1 + add r0, r0, #0x2200 + strh r2, [r0, #0x8e] + ldr r0, [r1, #0x0] + add r1, r0, #0x2200 + add r0, r0, #0x2000 + ldrh r1, [r1, #0x8c] + ldr r0, [r0, #0x288] + bl DC_InvalidateRange + ldr r3, _020A673C ; =wcmw + ldr r2, _020A6750 ; =0x00002288 + ldr r1, [r3, #0x0] + ldr r0, _020A6754 ; =WcmWmcbScanEx + add r1, r1, #0x2000 + ldr r4, [r1, #0x284] + add r4, r4, #0x1 + str r4, [r1, #0x284] + ldr r1, [r3, #0x0] + add r1, r1, r2 + bl WM_StartScanEx + mov r4, r0 + b _020A6694 +_020A6674: + ldr r0, _020A6758 ; =WcmWmcbEndScan + bl WM_EndScan + mov r4, r0 + b _020A6694 +_020A6684: + bl WcmWmReset + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr +_020A6694: + cmp r4, #0x2 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + cmp r4, #0x3 + beq _020A66DC + cmp r4, #0x8 + bne _020A66DC + mov r0, #0xc + bl WcmSetPhase + mov r1, #0x0 + ldr r3, _020A675C ; =0x00000753 + mov r2, r1 + mov r0, #0x1 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr +_020A66DC: + mov r0, #0xb + bl WcmSetPhase + mov r1, #0x0 + ldr r3, _020A6760 ; =0x0000075C + mov r2, r1 + mov r0, #0x7 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr +_020A6704: + bl WcmWmReset + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr +_020A6714: + mov r0, #0xb + bl WcmSetPhase + mov r1, #0x0 + ldr r3, _020A6764 ; =0x0000076D + mov r2, r1 + mov r0, #0x7 + bl WcmNotify + add sp, sp, #0x8 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020A673C: .word wcmw +_020A6740: .word 0x00000704 +_020A6744: .word 0x0000071A +_020A6748: .word 0x00003FFE +_020A674C: .word 0x00000728 +_020A6750: .word 0x00002288 +_020A6754: .word WcmWmcbScanEx +_020A6758: .word WcmWmcbEndScan +_020A675C: .word 0x00000753 +_020A6760: .word 0x0000075C +_020A6764: .word 0x0000076D + + arm_func_start WcmWmcbCommon +WcmWmcbCommon: ; 0x020A6768 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r1, [r0, #0x2] + mov r2, #0x14 + cmp r1, #0x4 + addls pc, pc, r1, lsl #0x2 + b _020A6A0C +_020A6784: ; jump table + b _020A6798 ; case 0 + b _020A69CC ; case 1 + b _020A6A0C ; case 2 + b _020A6A0C ; case 3 + b _020A6A0C ; case 4 +_020A6798: + ldrh r0, [r0, #0x0] + cmp r0, #0x19 + bgt _020A67D4 + cmp r0, #0x19 + bge _020A68B4 + cmp r0, #0x6 + addls pc, pc, r0, lsl #0x2 + b _020A692C +_020A67B8: ; jump table + b _020A692C ; case 0 + b _020A692C ; case 1 + b _020A692C ; case 2 + b _020A67F4 ; case 3 + b _020A6804 ; case 4 + b _020A6868 ; case 5 + b _020A6890 ; case 6 +_020A67D4: + cmp r0, #0x1d + bgt _020A67E8 + cmp r0, #0x1d + beq _020A68A0 + b _020A692C +_020A67E8: + cmp r0, #0x27 + beq _020A68DC + b _020A692C +_020A67F4: + ldr r0, _020A6A4C ; =WcmWmcbCommon + bl WM_PowerOn + mov r2, r0 + b _020A692C +_020A6804: + bl WM_Finish + cmp r0, #0x0 + beq _020A6818 + cmp r0, #0x4 + b _020A6840 +_020A6818: + mov r0, #0x1 + bl WcmSetPhase + mov r0, #0x0 + ldr r3, _020A6A50 ; =0x00000663 + mov r1, r0 + mov r2, r0 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6840: + mov r0, #0xb + bl WcmSetPhase + mov r1, #0x0 + ldr r3, _020A6A54 ; =0x0000066C + mov r2, r1 + mov r0, #0x7 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6868: + mov r0, #0x3 + bl WcmSetPhase + mov r0, #0x0 + ldr r3, _020A6A58 ; =0x00000673 + mov r1, r0 + mov r2, r0 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6890: + ldr r0, _020A6A4C ; =WcmWmcbCommon + bl WM_Disable + mov r2, r0 + b _020A692C +_020A68A0: + ldr r0, _020A6A4C ; =WcmWmcbCommon + mov r1, #0x0 + bl WM_SetBeaconIndication + mov r2, r0 + b _020A692C +_020A68B4: + ldr r1, _020A6A5C ; =wcmw + ldr r0, _020A6A4C ; =WcmWmcbCommon + ldr r3, [r1, #0x0] + add r2, r3, #0x2000 + ldrb r1, [r2, #0x250] + ldrb r2, [r2, #0x251] + add r3, r3, #0x2200 + bl WM_SetWEPKeyEx + mov r2, r0 + b _020A692C +_020A68DC: + ldr r0, _020A6A5C ; =wcmw + ldr r2, [r0, #0x0] + add r0, r2, #0x2000 + ldr r1, [r0, #0x264] + and r0, r1, #0xc0000 + cmp r0, #0xc0000 + moveq r0, #0x1 + movne r0, #0x0 + mov r0, r0, lsl #0x10 + mov r12, r0, lsr #0x10 + and r1, r1, #0x30000 + cmp r1, #0x30000 + movne r3, #0x1 + add r1, r2, #0x2140 + ldr r0, _020A6A60 ; =WcmWmcbConnect + moveq r3, #0x0 + mov r2, #0x0 + str r12, [sp, #0x0] + bl WM_StartConnectEx + mov r2, r0 +_020A692C: + cmp r2, #0x2 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + cmp r2, #0x3 + beq _020A698C + cmp r2, #0x8 + bne _020A698C + mov r0, #0xc + bl WcmSetPhase + ldr r0, _020A6A5C ; =wcmw + ldr r3, _020A6A64 ; =0x000006AF + ldr r1, [r0, #0x0] + mov r2, #0x0 + add r0, r1, #0x2200 + ldrsh r0, [r0, #0x80] + cmp r0, #0x5 + addeq r1, r1, #0x2140 + movne r1, #0x0 + mov r0, #0x1 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A698C: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A6A5C ; =wcmw + ldr r3, _020A6A68 ; =0x000006B8 + ldr r1, [r0, #0x0] + mov r2, #0x0 + add r0, r1, #0x2200 + ldrsh r0, [r0, #0x80] + cmp r0, #0x5 + addeq r1, r1, #0x2140 + movne r1, #0x0 + mov r0, #0x7 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A69CC: + mov r0, #0xc + bl WcmSetPhase + ldr r0, _020A6A5C ; =wcmw + ldr r3, _020A6A6C ; =0x000006DE + ldr r1, [r0, #0x0] + mov r2, #0x0 + add r0, r1, #0x2200 + ldrsh r0, [r0, #0x80] + cmp r0, #0x5 + addeq r1, r1, #0x2140 + movne r1, #0x0 + mov r0, #0x1 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6A0C: + mov r0, #0xb + bl WcmSetPhase + ldr r0, _020A6A5C ; =wcmw + ldr r3, _020A6A70 ; =0x000006E8 + ldr r1, [r0, #0x0] + mov r2, #0x0 + add r0, r1, #0x2200 + ldrsh r0, [r0, #0x80] + cmp r0, #0x5 + addeq r1, r1, #0x2140 + movne r1, #0x0 + mov r0, #0x7 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6A4C: .word WcmWmcbCommon +_020A6A50: .word 0x00000663 +_020A6A54: .word 0x0000066C +_020A6A58: .word 0x00000673 +_020A6A5C: .word wcmw +_020A6A60: .word WcmWmcbConnect +_020A6A64: .word 0x000006AF +_020A6A68: .word 0x000006B8 +_020A6A6C: .word 0x000006DE +_020A6A70: .word 0x000006E8 + + arm_func_start WcmWmcbIndication +WcmWmcbIndication: ; 0x020A6A74 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r1, [r0, #0x2] + cmp r1, #0x8 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldrh r1, [r0, #0x4] + cmp r1, #0x16 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldrh r0, [r0, #0x6] + cmp r0, #0x25 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020A6B24 ; =wcmw + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r0, [r0, #0x260] + sub r0, r0, #0x8 + cmp r0, #0x4 + addls pc, pc, r0, lsl #0x2 + b _020A6B18 +_020A6AD8: ; jump table + b _020A6AEC ; case 0 + b _020A6B00 ; case 1 + b _020A6B10 ; case 2 + b _020A6B18 ; case 3 + b _020A6B00 ; case 4 +_020A6AEC: + mov r0, #0xc + bl WcmSetPhase + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6B00: + bl WcmWmReset + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A6B10: + mov r0, #0xc + bl WcmSetPhase +_020A6B18: + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6B24: .word wcmw + + arm_func_start WcmWmReset +WcmWmReset: ; 0x020A6B28 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020A6B98 ; =wcmw + ldr r0, [r0, #0x0] + add r1, r0, #0x2000 + ldrb r0, [r1, #0x26b] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020A6B9C ; =WcmWcmbReset + mov r2, #0x1 + strb r2, [r1, #0x26b] + bl WM_Reset + cmp r0, #0x2 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + mov r0, #0xb + bl WcmSetPhase + mov r1, #0x0 + mov r2, r1 + mov r0, #0x7 + mov r3, #0x610 + bl WcmNotify + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6B98: .word wcmw +_020A6B9C: .word WcmWcmbReset + + arm_func_start WcmKeepAliveAlarm +WcmKeepAliveAlarm: ; 0x020A6BA0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WCMi_CpsifSendNullPacket + bl WCMi_ResetKeepAliveAlarm + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start WCMi_ResetKeepAliveAlarm +WCMi_ResetKeepAliveAlarm: ; 0x020A6BBC + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + bl OS_DisableInterrupts + ldr r2, _020A6C28 ; =wcmw + ldr r1, _020A6C2C ; =0x000022CC + ldr r2, [r2, #0x0] + mov r4, r0 + add r0, r2, r1 + bl OS_CancelAlarm + ldr r0, _020A6C28 ; =wcmw + ldr r12, [r0, #0x0] + add r0, r12, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0x9 + bne _020A6C14 + ldr r0, _020A6C2C ; =0x000022CC + ldr r1, _020A6C30 ; =0x022F5341 + mov r2, #0x0 + ldr r3, _020A6C34 ; =WcmKeepAliveAlarm + add r0, r12, r0 + str r2, [sp, #0x0] + bl OS_SetAlarm +_020A6C14: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A6C28: .word wcmw +_020A6C2C: .word 0x000022CC +_020A6C30: .word 0x022F5341 +_020A6C34: .word WcmKeepAliveAlarm + + arm_func_start WcmSetPhase +WcmSetPhase: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020A6CD0 ; =wcmw + mov r4, r0 + ldr r1, [r1, #0x0] + add r0, r1, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0x9 + bne _020A6C78 + cmp r5, #0x9 + beq _020A6C78 + ldr r0, _020A6CD4 ; =0x000022CC + add r0, r1, r0 + bl OS_CancelAlarm +_020A6C78: + ldr r0, _020A6CD0 ; =wcmw + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + ldr r1, [r0, #0x260] + cmp r1, #0xb + strne r5, [r0, #0x260] + cmp r5, #0x9 + bne _020A6CBC + mov r2, #0x0 + ldr r0, _020A6CD0 ; =wcmw + str r2, [sp, #0x0] + ldr r5, [r0, #0x0] + ldr r0, _020A6CD4 ; =0x000022CC + ldr r1, _020A6CD8 ; =0x022F5341 + ldr r3, _020A6CDC ; =WcmKeepAliveAlarm + add r0, r5, r0 + bl OS_SetAlarm +_020A6CBC: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A6CD0: .word wcmw +_020A6CD4: .word 0x000022CC +_020A6CD8: .word 0x022F5341 +_020A6CDC: .word WcmKeepAliveAlarm + + arm_func_start WcmNotifyEx +WcmNotifyEx: ; 0x020A6CE0 + stmdb sp!, {lr} + sub sp, sp, #0x14 + ldr ip, _020A6D38 ; =wcmw + ldr r12, [r12, #0x0] + add r12, r12, #0x2000 + ldr lr, [r12, #0x27c] + cmp lr, #0x0 + addeq sp, sp, #0x14 + ldmeqia sp!, {lr} + bxeq lr + ldr lr, [sp, #0x18] + strh r0, [sp, #0x0] + str r2, [sp, #0x4] + str r3, [sp, #0x8] + str lr, [sp, #0xc] + strh r1, [sp, #0x2] + ldr r1, [r12, #0x27c] + add r0, sp, #0x0 + blx r1 + add sp, sp, #0x14 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A6D38: .word wcmw + + arm_func_start WcmNotify +WcmNotify: ; 0x020A6D3C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr ip, _020A6D88 ; =wcmw + mov r5, r0 + ldr r0, [r12, #0x0] + mov r4, r1 + add r1, r0, #0x2200 + ldrsh r0, [r1, #0x80] + mov r12, #0x0 + mov lr, r2 + strh r12, [r1, #0x80] + str r3, [sp, #0x0] + mov r1, r5 + mov r2, r4 + mov r3, lr + bl WcmNotifyEx + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A6D88: .word wcmw + + arm_func_start WcmGetNextScanChannel +WcmGetNextScanChannel: ; 0x020A6D8C + stmdb sp!, {r4-r6,lr} + ldr r1, _020A6E24 ; =wcmw + mov r2, r0 + ldr r1, [r1, #0x0] + mov r3, #0x0 + add r1, r1, #0x2000 + ldr r1, [r1, #0x264] + mov r6, #0x1 + ldr r5, _020A6E28 ; =0x4EC4EC4F + ldr r4, _020A6E2C ; =0x0000000D +_020A6DB4: + smull r12, lr, r5, r2 + mov lr, lr, asr #0x2 + mov r12, r2, lsr #0x1f + add lr, r12, lr + smull r12, lr, r4, lr + sub lr, r2, r12 + add r12, lr, #0x1 + mov r12, r6, lsl r12 + ands r12, r1, r12 + bne _020A6DEC + add r3, r3, #0x1 + cmp r3, #0xd + add r2, r2, #0x1 + blt _020A6DB4 +_020A6DEC: + ldr r1, _020A6E28 ; =0x4EC4EC4F + add r3, r0, r3 + smull r0, r4, r1, r3 + mov r4, r4, asr #0x2 + mov r0, r3, lsr #0x1f + ldr r2, _020A6E2C ; =0x0000000D + add r4, r0, r4 + smull r0, r1, r2, r4 + sub r4, r3, r0 + add r0, r4, #0x1 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A6E24: .word wcmw +_020A6E28: .word 0x4EC4EC4F +_020A6E2C: .word 0x0000000D + + arm_func_start WcmInitOption +WcmInitOption: ; 0x020A6E30 + ldr r0, _020A6E48 ; =wcmw + ldr r1, _020A6E4C ; =0x00AAA082 + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + str r1, [r0, #0x264] + bx lr + .balign 4 +_020A6E48: .word wcmw +_020A6E4C: .word 0x00AAA082 + + arm_func_start WcmEditScanExParam +WcmEditScanExParam: ; 0x020A6E50 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r0, r2 + mov r4, r1 + bl WCM_UpdateOption + ldr r2, _020A6FF4 ; =wcmw + mov r3, #0x400 + ldr r1, [r2, #0x0] + mov r0, #0x0 + add r12, r1, #0x1500 + add r1, r1, #0x2000 + str r12, [r1, #0x288] + ldr r1, [r2, #0x0] + add r1, r1, #0x2200 + strh r3, [r1, #0x8c] + bl WcmGetNextScanChannel + ldr r1, _020A6FF4 ; =wcmw + mov r2, #0x1 + mov r2, r2, lsl r0 + ldr r0, [r1, #0x0] + mov r2, r2, asr #0x1 + add r0, r0, #0x2200 + strh r2, [r0, #0x8e] + ldr r0, [r1, #0x0] + add r0, r0, #0x2200 + ldrh r0, [r0, #0x68] + cmp r0, #0x0 + bne _020A6EC8 + bl WM_GetDispersionScanPeriod +_020A6EC8: + ldr r2, _020A6FF4 ; =wcmw + ldr r1, [r2, #0x0] + add r1, r1, #0x2200 + strh r0, [r1, #0x90] + ldr r1, [r2, #0x0] + add r0, r1, #0x2000 + ldr r0, [r0, #0x264] + and r0, r0, #0x300000 + cmp r0, #0x300000 + movne r2, #0x1 + moveq r2, #0x0 + add r0, r1, #0x2200 + strh r2, [r0, #0x98] + cmp r5, #0x0 + bne _020A6F24 + ldr r0, _020A6FF4 ; =wcmw + ldr r1, _020A6FF8 ; =0x00002292 + ldr r2, [r0, #0x0] + ldr r0, _020A6FFC ; =WCM_Bssid_Any + add r1, r2, r1 + mov r2, #0x6 + bl MI_CpuCopy8 + b _020A6F40 +_020A6F24: + ldr r0, _020A6FF4 ; =wcmw + ldr r1, _020A6FF8 ; =0x00002292 + ldr r2, [r0, #0x0] + mov r0, r5 + add r1, r2, r1 + mov r2, #0x6 + bl MI_CpuCopy8 +_020A6F40: + cmp r4, #0x0 + beq _020A6F54 + ldr r0, _020A7000 ; =WCM_Essid_Any + cmp r4, r0 + bne _020A6F88 +_020A6F54: + ldr r0, _020A6FF4 ; =wcmw + ldr r1, _020A7004 ; =0x0000229C + ldr r2, [r0, #0x0] + ldr r0, _020A7000 ; =WCM_Essid_Any + add r1, r2, r1 + mov r2, #0x20 + bl MI_CpuCopy8 + ldr r0, _020A6FF4 ; =wcmw + mov r1, #0x0 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x9a] + b _020A6FD4 +_020A6F88: + ldr r0, _020A6FF4 ; =wcmw + ldr r1, _020A7004 ; =0x0000229C + ldr r2, [r0, #0x0] + mov r0, r4 + add r1, r2, r1 + mov r2, #0x20 + bl MI_CpuCopy8 + mov r1, #0x0 +_020A6FA8: + ldrb r0, [r4, #0x0] + cmp r0, #0x0 + beq _020A6FC4 + add r1, r1, #0x1 + cmp r1, #0x20 + add r4, r4, #0x1 + blt _020A6FA8 +_020A6FC4: + ldr r0, _020A6FF4 ; =wcmw + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x9a] +_020A6FD4: + ldr r0, _020A6FF4 ; =wcmw + mov r1, #0x0 + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + str r1, [r0, #0x284] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A6FF4: .word wcmw +_020A6FF8: .word 0x00002292 +_020A6FFC: .word WCM_Bssid_Any +_020A7000: .word WCM_Essid_Any +_020A7004: .word 0x0000229C + + arm_func_start WcmConfigure +WcmConfigure: ; 0x020A7008 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + movs r5, r0 + mov r4, r1 + bne _020A705C + ldr r1, _020A7134 ; =wcmw + mov r3, #0x3 + ldr r0, [r1, #0x0] + mov r2, #0x0 + add r0, r0, #0x2000 + str r3, [r0, #0x26c] + ldr r0, [r1, #0x0] + add r0, r0, #0x2000 + str r2, [r0, #0x270] + ldr r0, [r1, #0x0] + add r0, r0, #0x2000 + str r2, [r0, #0x274] + ldr r0, [r1, #0x0] + add r0, r0, #0x2000 + str r2, [r0, #0x278] + b _020A7118 +_020A705C: + ldr r1, _020A7134 ; =wcmw + ldr r2, [r5, #0x0] + ldr r0, [r1, #0x0] + and r2, r2, #0x3 + add r0, r0, #0x2000 + str r2, [r0, #0x26c] + ldr r3, [r5, #0x4] + ldr r0, [r5, #0x8] + and r2, r3, #0x3 + rsb r2, r2, #0x4 + and r2, r2, #0x3 + add r2, r2, #0xc + cmp r2, r0 + bls _020A70B4 + ldr r0, [r1, #0x0] + mov r2, #0x0 + add r0, r0, #0x2000 + str r2, [r0, #0x270] + ldr r0, [r1, #0x0] + add r0, r0, #0x2000 + str r2, [r0, #0x274] + b _020A7104 +_020A70B4: + ldr r0, [r1, #0x0] + add r2, r3, #0x3 + bic r2, r2, #0x3 + add r0, r0, #0x2000 + str r2, [r0, #0x270] + ldr r2, [r5, #0x4] + ldr r0, [r1, #0x0] + and r2, r2, #0x3 + rsb r2, r2, #0x4 + ldr r3, [r5, #0x8] + and r2, r2, #0x3 + sub r2, r3, r2 + add r0, r0, #0x2000 + str r2, [r0, #0x274] + ldr r0, [r1, #0x0] + mov r1, #0x0 + add r2, r0, #0x2000 + ldr r0, [r2, #0x270] + ldr r2, [r2, #0x274] + bl MI_CpuFill8 +_020A7104: + ldr r0, _020A7134 ; =wcmw + ldr r1, [r5, #0xc] + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + str r1, [r0, #0x278] +_020A7118: + ldr r0, _020A7134 ; =wcmw + ldr r0, [r0, #0x0] + add r0, r0, #0x2000 + str r4, [r0, #0x27c] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A7134: .word wcmw + + arm_func_start WCMi_GetSystemWork +WCMi_GetSystemWork: + ldr r0, _020A7144 ; =wcmw + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020A7144: .word wcmw + + arm_func_start WCM_UpdateOption +WCM_UpdateOption: ; 0x020A7148 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + ldr r1, _020A71EC ; =wcmw + mov r2, #0x0 + ldr r1, [r1, #0x0] + add r3, r1, #0x2000 + cmp r1, #0x0 + ldr r4, [r3, #0x264] + bne _020A7188 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_020A7188: + ands r3, r5, #0x8000 + beq _020A71A4 + ldr r3, _020A71F0 ; =0x00003FFE + orr r2, r2, r3 + ands r3, r5, r3 + ldreq r3, _020A71F4 ; =0x0000A082 + orreq r5, r5, r3 +_020A71A4: + ands r3, r5, #0x20000 + orrne r2, r2, #0x10000 + ands r3, r5, #0x80000 + orrne r2, r2, #0x40000 + ands r3, r5, #0x200000 + orrne r2, r2, #0x100000 + ands r3, r5, #0x800000 + orrne r2, r2, #0x400000 + mvn r2, r2 + and r2, r4, r2 + orr r2, r5, r2 + add r1, r1, #0x2000 + str r2, [r1, #0x264] + bl OS_RestoreInterrupts + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A71EC: .word wcmw +_020A71F0: .word 0x00003FFE +_020A71F4: .word 0x0000A082 + + arm_func_start WCM_GetPhase +WCM_GetPhase: ; 0x020A71F8 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020A7228 ; =wcmw + mov r4, #0x0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + addne r1, r1, #0x2000 + ldrne r4, [r1, #0x260] + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A7228: .word wcmw + + arm_func_start WCM_TerminateAsync +WCM_TerminateAsync: ; 0x020A722C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020A747C ; =wcmw + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + bne _020A7260 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r5,lr} + bx lr +_020A7260: + add r1, r1, #0x2000 + ldr r2, [r1, #0x260] + cmp r2, #0xd + addls pc, pc, r2, lsl #0x2 + b _020A7308 +_020A7274: ; jump table + b _020A7308 ; case 0 + b _020A72C0 ; case 1 + b _020A7308 ; case 2 + b _020A7320 ; case 3 + b _020A7308 ; case 4 + b _020A7308 ; case 5 + b _020A72D4 ; case 6 + b _020A7308 ; case 7 + b _020A7308 ; case 8 + b _020A7320 ; case 9 + b _020A7308 ; case 10 + b _020A7308 ; case 11 + b _020A7320 ; case 12 + b _020A72AC ; case 13 +_020A72AC: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x2 + ldmia sp!, {r4-r5,lr} + bx lr +_020A72C0: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_020A72D4: + mov r0, #0xd + bl WcmSetPhase + ldr r1, _020A747C ; =wcmw + mov r0, r4 + ldr r1, [r1, #0x0] + mov r2, #0x9 + add r1, r1, #0x2200 + strh r2, [r1, #0x80] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x3 + ldmia sp!, {r4-r5,lr} + bx lr +_020A7308: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r5,lr} + bx lr +_020A7320: + ldrb r0, [r1, #0x26b] + cmp r0, #0x1 + bne _020A734C + mov r0, #0xd + bl WcmSetPhase + ldr r0, _020A747C ; =wcmw + mov r1, #0x9 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A7464 +_020A734C: + bl WMi_GetStatusAddress + mov r5, r0 + mov r1, #0x2 + bl DC_InvalidateRange + ldrh r0, [r5, #0x0] + cmp r0, #0x0 + beq _020A737C + cmp r0, #0x1 + beq _020A73BC + cmp r0, #0x2 + beq _020A73C8 + b _020A73D4 +_020A737C: + bl WM_Finish + cmp r0, #0x0 + bne _020A73F0 + mov r0, #0x1 + bl WcmSetPhase + ldr r1, _020A747C ; =wcmw + mov r0, r4 + ldr r1, [r1, #0x0] + mov r2, #0x0 + add r1, r1, #0x2200 + strh r2, [r1, #0x80] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r5,lr} + bx lr +_020A73BC: + ldr r0, _020A7480 ; =WcmWmcbCommon + bl WM_Disable + b _020A73F0 +_020A73C8: + ldr r0, _020A7480 ; =WcmWmcbCommon + bl WM_PowerOff + b _020A73F0 +_020A73D4: + ldr r1, _020A747C ; =wcmw + ldr r0, _020A7484 ; =WcmWcmbReset + ldr r1, [r1, #0x0] + mov r2, #0x1 + add r1, r1, #0x2000 + strb r2, [r1, #0x26b] + bl WM_Reset +_020A73F0: + cmp r0, #0x2 + beq _020A740C + cmp r0, #0x3 + beq _020A7444 + cmp r0, #0x8 + beq _020A742C + b _020A7444 +_020A740C: + mov r0, #0xd + bl WcmSetPhase + ldr r0, _020A747C ; =wcmw + mov r1, #0x9 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A7464 +_020A742C: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020A7444: + mov r0, #0xb + bl WcmSetPhase + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x7 + ldmia sp!, {r4-r5,lr} + bx lr +_020A7464: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020A747C: .word wcmw +_020A7480: .word WcmWmcbCommon +_020A7484: .word WcmWcmbReset + + arm_func_start WCM_DisconnectAsync +WCM_DisconnectAsync: ; 0x020A7488 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020A75B8 ; =wcmw + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + bne _020A74B4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr +_020A74B4: + add r1, r1, #0x2000 + ldr r2, [r1, #0x260] + cmp r2, #0x3 + beq _020A74E4 + cmp r2, #0x9 + beq _020A7504 + cmp r2, #0xa + bne _020A74F4 + bl OS_RestoreInterrupts + mov r0, #0x2 + ldmia sp!, {r4,lr} + bx lr +_020A74E4: + bl OS_RestoreInterrupts + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020A74F4: + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr +_020A7504: + ldrb r0, [r1, #0x26b] + cmp r0, #0x1 + bne _020A7530 + mov r0, #0xa + bl WcmSetPhase + ldr r0, _020A75B8 ; =wcmw + mov r1, #0x6 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A75A4 +_020A7530: + ldr r0, _020A75BC ; =WcmWmcbEndDCF + bl WM_EndDCF + cmp r0, #0x2 + beq _020A7554 + cmp r0, #0x3 + beq _020A7588 + cmp r0, #0x8 + beq _020A7574 + b _020A7588 +_020A7554: + mov r0, #0xa + bl WcmSetPhase + ldr r0, _020A75B8 ; =wcmw + mov r1, #0x6 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A75A4 +_020A7574: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x4 + ldmia sp!, {r4,lr} + bx lr +_020A7588: + mov r0, #0xb + bl WcmSetPhase + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4,lr} + bx lr +_020A75A4: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A75B8: .word wcmw +_020A75BC: .word WcmWmcbEndDCF + + arm_func_start WCM_ConnectAsync +WCM_ConnectAsync: ; 0x020A75C0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl OS_DisableInterrupts + ldr r2, _020A7814 ; =wcmw + mov r4, r0 + ldr r12, [r2, #0x0] + cmp r12, #0x0 + bne _020A7600 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7600: + add r1, r12, #0x2000 + ldr r3, [r1, #0x260] + cmp r3, #0x3 + beq _020A7624 + cmp r3, #0x8 + beq _020A7734 + cmp r3, #0x9 + beq _020A7748 + b _020A775C +_020A7624: + cmp r7, #0x0 + bne _020A7640 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7640: + ldrh r3, [r7, #0x3c] + cmp r3, #0x0 + beq _020A7660 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7660: + cmp r6, #0x0 + beq _020A76E8 + ldrb r3, [r6, #0x0] + cmp r3, #0x4 + bhs _020A7680 + ldrb r0, [r6, #0x1] + cmp r0, #0x4 + blo _020A7698 +_020A7680: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7698: + strb r3, [r1, #0x250] + ldr r0, [r2, #0x0] + ldrb r1, [r6, #0x1] + add r0, r0, #0x2000 + strb r1, [r0, #0x251] + ldr r1, [r2, #0x0] + add r0, r1, #0x2000 + ldrb r0, [r0, #0x250] + cmp r0, #0x0 + bne _020A76D4 + add r0, r1, #0x2200 + mov r1, #0x0 + mov r2, #0x50 + bl MI_CpuFill8 + b _020A76F8 +_020A76D4: + add r0, r6, #0x2 + add r1, r1, #0x2200 + mov r2, #0x50 + bl MI_CpuCopy8 + b _020A76F8 +_020A76E8: + add r0, r12, #0x2200 + mov r1, #0x0 + mov r2, #0x52 + bl MI_CpuFill8 +_020A76F8: + ldr r1, _020A7814 ; =wcmw + mov r0, r7 + ldr r1, [r1, #0x0] + mov r2, #0xc0 + add r1, r1, #0x2140 + bl MI_CpuCopy8 + ldr r1, _020A7814 ; =wcmw + mov r0, r5 + ldr r1, [r1, #0x0] + add r1, r1, #0x2100 + ldrh r2, [r1, #0x6e] + orr r2, r2, #0x3 + strh r2, [r1, #0x70] + bl WCM_UpdateOption + b _020A7770 +_020A7734: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x2 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7748: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020A775C: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7770: + ldr r1, _020A7818 ; =0x0000FFFF + ldr r0, _020A781C ; =WcmWmcbCommon + mov r3, r1 + mov r2, #0x50 + str r1, [sp, #0x0] + bl WM_SetLifeTime + cmp r0, #0x2 + beq _020A77A4 + cmp r0, #0x3 + beq _020A77DC + cmp r0, #0x8 + beq _020A77C4 + b _020A77DC +_020A77A4: + mov r0, #0x8 + bl WcmSetPhase + ldr r0, _020A7814 ; =wcmw + mov r1, #0x5 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A77FC +_020A77C4: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_020A77DC: + mov r0, #0xb + bl WcmSetPhase + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x7 + ldmia sp!, {r4-r7,lr} + bx lr +_020A77FC: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020A7814: .word wcmw +_020A7818: .word 0x0000FFFF +_020A781C: .word WcmWmcbCommon + + arm_func_start WCM_EndSearchAsync +WCM_EndSearchAsync: ; 0x020A7820 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020A78D4 ; =wcmw + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + bne _020A784C + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr +_020A784C: + add r1, r1, #0x2000 + ldr r1, [r1, #0x260] + cmp r1, #0x3 + beq _020A78A0 + cmp r1, #0x6 + beq _020A7870 + cmp r1, #0x7 + beq _020A7890 + b _020A78B0 +_020A7870: + mov r0, #0x7 + bl WcmSetPhase + ldr r0, _020A78D4 ; =wcmw + mov r1, #0x4 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A78C0 +_020A7890: + bl OS_RestoreInterrupts + mov r0, #0x2 + ldmia sp!, {r4,lr} + bx lr +_020A78A0: + bl OS_RestoreInterrupts + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020A78B0: + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr +_020A78C0: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A78D4: .word wcmw + + arm_func_start WCM_BeginSearchAsync +WCM_BeginSearchAsync: ; 0x020A78D8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl OS_DisableInterrupts + ldr r1, _020A7A84 ; =wcmw + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + bne _020A7918 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7918: + add r1, r1, #0x2000 + ldr r1, [r1, #0x260] + cmp r1, #0x3 + beq _020A79A0 + cmp r1, #0x5 + beq _020A793C + cmp r1, #0x6 + beq _020A7964 + b _020A798C +_020A793C: + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl WcmEditScanExParam + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x2 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7964: + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl WcmEditScanExParam + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,lr} + bx lr +_020A798C: + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020A79A0: + mov r0, r7 + mov r1, r6 + mov r2, r5 + bl WcmEditScanExParam + ldr r0, _020A7A84 ; =wcmw + ldr r0, [r0, #0x0] + add r1, r0, #0x2200 + add r0, r0, #0x2000 + ldrh r1, [r1, #0x8c] + ldr r0, [r0, #0x288] + bl DC_InvalidateRange + ldr r3, _020A7A84 ; =wcmw + ldr r2, _020A7A88 ; =0x00002288 + ldr r1, [r3, #0x0] + ldr r0, _020A7A8C ; =WcmWmcbScanEx + add r1, r1, #0x2000 + ldr r5, [r1, #0x284] + add r5, r5, #0x1 + str r5, [r1, #0x284] + ldr r1, [r3, #0x0] + add r1, r1, r2 + bl WM_StartScanEx + cmp r0, #0x2 + beq _020A7A14 + cmp r0, #0x3 + beq _020A7A4C + cmp r0, #0x8 + beq _020A7A34 + b _020A7A4C +_020A7A14: + mov r0, #0x5 + bl WcmSetPhase + ldr r0, _020A7A84 ; =wcmw + mov r1, #0x3 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A7A6C +_020A7A34: + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7A4C: + mov r0, #0xb + bl WcmSetPhase + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x7 + ldmia sp!, {r4-r7,lr} + bx lr +_020A7A6C: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020A7A84: .word wcmw +_020A7A88: .word 0x00002288 +_020A7A8C: .word WcmWmcbScanEx + + arm_func_start WCM_SearchAsync +WCM_SearchAsync: ; 0x020A7A90 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + beq _020A7AA8 + cmp r1, #0x0 + bne _020A7AB8 +_020A7AA8: + bl WCM_EndSearchAsync + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020A7AB8: + bl WCM_BeginSearchAsync + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start WCM_CleanupAsync +WCM_CleanupAsync: ; 0x020A7AC8 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020A7BCC ; =wcmw + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + bne _020A7AF4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr +_020A7AF4: + add r1, r1, #0x2000 + ldr r1, [r1, #0x260] + cmp r1, #0x1 + beq _020A7B24 + cmp r1, #0x3 + beq _020A7B44 + cmp r1, #0x4 + bne _020A7B34 + bl OS_RestoreInterrupts + mov r0, #0x2 + ldmia sp!, {r4,lr} + bx lr +_020A7B24: + bl OS_RestoreInterrupts + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr +_020A7B34: + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4,lr} + bx lr +_020A7B44: + ldr r0, _020A7BD0 ; =WcmWmcbCommon + bl WM_PowerOff + cmp r0, #0x2 + beq _020A7B68 + cmp r0, #0x3 + beq _020A7B9C + cmp r0, #0x8 + beq _020A7B88 + b _020A7B9C +_020A7B68: + mov r0, #0x4 + bl WcmSetPhase + ldr r0, _020A7BCC ; =wcmw + mov r1, #0x2 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A7BB8 +_020A7B88: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x4 + ldmia sp!, {r4,lr} + bx lr +_020A7B9C: + mov r0, #0xb + bl WcmSetPhase + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4,lr} + bx lr +_020A7BB8: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020A7BCC: .word wcmw +_020A7BD0: .word WcmWmcbCommon + + arm_func_start WCM_StartupAsync +WCM_StartupAsync: ; 0x020A7BD4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + bl OS_DisableInterrupts + ldr r1, _020A7E00 ; =wcmw + mov r4, r0 + ldr r1, [r1, #0x0] + cmp r1, #0x0 + bne _020A7C08 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7C08: + add r1, r1, #0x2000 + ldr r1, [r1, #0x260] + cmp r1, #0x1 + beq _020A7C2C + cmp r1, #0x2 + beq _020A7C3C + cmp r1, #0x3 + beq _020A7C4C + b _020A7C5C +_020A7C2C: + mov r0, r6 + mov r1, r5 + bl WcmConfigure + b _020A7C6C +_020A7C3C: + bl OS_RestoreInterrupts + mov r0, #0x2 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7C4C: + bl OS_RestoreInterrupts + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7C5C: + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7C6C: + ldr r0, _020A7E00 ; =wcmw + ldr r0, [r0, #0x0] + add r1, r0, #0x2000 + ldr r1, [r1, #0x26c] + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + bl WM_Init + cmp r0, #0x6 + addls pc, pc, r0, lsl #0x2 + b _020A7CE0 +_020A7C94: ; jump table + b _020A7CFC ; case 0 + b _020A7CE0 ; case 1 + b _020A7CE0 ; case 2 + b _020A7CB0 ; case 3 + b _020A7CCC ; case 4 + b _020A7CE0 ; case 5 + b _020A7CE0 ; case 6 +_020A7CB0: + mov r0, #0xb + bl WcmSetPhase + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7CCC: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x5 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7CE0: + mov r0, #0xb + bl WcmSetPhase + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7CFC: + bl WM_GetAllowedChannel + cmp r0, #0x0 + bne _020A7D44 + bl WM_Finish + cmp r0, #0x0 + beq _020A7D30 + mov r0, #0xb + bl WcmSetPhase + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7D30: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x5 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7D44: + ldr r0, _020A7E04 ; =WcmWmcbIndication + bl WM_SetIndCallback + cmp r0, #0x0 + beq _020A7D70 + mov r0, #0xb + bl WcmSetPhase + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7D70: + ldr r0, _020A7E08 ; =WcmWmcbCommon + bl WM_Enable + cmp r0, #0x2 + beq _020A7D94 + cmp r0, #0x3 + beq _020A7DD0 + cmp r0, #0x8 + beq _020A7DB4 + b _020A7DD0 +_020A7D94: + mov r0, #0x2 + bl WcmSetPhase + ldr r0, _020A7E00 ; =wcmw + mov r1, #0x1 + ldr r0, [r0, #0x0] + add r0, r0, #0x2200 + strh r1, [r0, #0x80] + b _020A7DEC +_020A7DB4: + mov r0, #0xc + bl WcmSetPhase + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7DD0: + mov r0, #0xb + bl WcmSetPhase + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7DEC: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A7E00: .word wcmw +_020A7E04: .word WcmWmcbIndication +_020A7E08: .word WcmWmcbCommon + + arm_func_start WCM_Finish +WCM_Finish: ; 0x020A7E0C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r2, _020A7E7C ; =wcmw + ldr r1, [r2, #0x0] + cmp r1, #0x0 + bne _020A7E3C + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {lr} + bx lr +_020A7E3C: + add r1, r1, #0x2000 + ldr r1, [r1, #0x260] + cmp r1, #0x1 + beq _020A7E60 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {lr} + bx lr +_020A7E60: + mov r1, #0x0 + str r1, [r2, #0x0] + bl OS_RestoreInterrupts + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A7E7C: .word wcmw + + arm_func_start WCM_Init +WCM_Init: ; 0x020A7E80 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + bl OS_DisableInterrupts + ldr r2, _020A7FA8 ; =wcmw + mov r4, r0 + ldr r1, [r2, #0x0] + cmp r1, #0x0 + beq _020A7EB4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7EB4: + cmp r6, #0x0 + bne _020A7ECC + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7ECC: + ands r1, r6, #0x1f + beq _020A7EE4 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7EE4: + cmp r5, #0x2300 + bhs _020A7EFC + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r6,lr} + bx lr +_020A7EFC: + str r6, [r2, #0x0] + add r0, r6, #0x2000 + mov r1, #0x1 + str r1, [r0, #0x260] + ldr r1, [r2, #0x0] + mov r0, #0x0 + add r1, r1, #0x2200 + strh r0, [r1, #0x80] + ldr r1, [r2, #0x0] + add r1, r1, #0x2200 + strh r0, [r1, #0x68] + ldr r1, [r2, #0x0] + add r1, r1, #0x2000 + strb r0, [r1, #0x26a] + ldr r1, [r2, #0x0] + add r1, r1, #0x2000 + strb r0, [r1, #0x26b] + ldr r1, [r2, #0x0] + add r1, r1, #0x2200 + strh r0, [r1, #0x82] + ldr r1, [r2, #0x0] + add r1, r1, #0x2200 + strh r0, [r1, #0xf8] + bl WcmInitOption + bl WCMi_InitCpsif + bl OS_IsTickAvailable + cmp r0, #0x0 + bne _020A7F70 + bl OS_InitTick +_020A7F70: + bl OS_IsAlarmAvailable + cmp r0, #0x0 + bne _020A7F80 + bl OS_InitAlarm +_020A7F80: + ldr r1, _020A7FA8 ; =wcmw + ldr r0, _020A7FAC ; =0x000022CC + ldr r1, [r1, #0x0] + add r0, r1, r0 + bl OS_CreateAlarm + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020A7FA8: .word wcmw +_020A7FAC: .word 0x000022CC diff --git a/arm9/asm/WCM_util.s b/arm9/asm/WCM_util.s new file mode 100644 index 00000000..e5ba5702 --- /dev/null +++ b/arm9/asm/WCM_util.s @@ -0,0 +1,156 @@ + .include "asm/macros.inc" + .include "global.inc" + + .bss + + .global wcmRssiIndex +wcmRssiIndex: ; 0x021CA89C + .space 0x4 + + .global wcmRssi +wcmRssi: ; 0x021CA8A0 + .space 0x10 + + .text + + arm_func_start WCMi_ShelterRssi +WCMi_ShelterRssi: ; 0x020A89D0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020A8A48 ; =wcmRssiIndex + ands r1, r0, #0x2 + ldrb r12, [r2, #0x0] + movne r0, r0, asr #0x2 + andne lr, r0, #0xff + moveq r0, r0, asr #0x2 + addeq r0, r0, #0x19 + andeq lr, r0, #0xff + mov r1, r12, lsr #0x1f + rsb r0, r1, r12, lsl #0x1c + cmp r12, #0x10 + ldr r3, _020A8A4C ; =wcmRssi + add r0, r1, r0, ror #0x1c + strb lr, [r3, r0] + addcc r0, r12, #0x1 + strccb r0, [r2, #0x0] + addcc sp, sp, #0x4 + ldmccia sp!, {lr} + bxcc lr + add r0, r12, #0x1 + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #0x1c + add r0, r1, r0, ror #0x1c + add r0, r0, #0x10 + strb r0, [r2, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A8A48: .word wcmRssiIndex +_020A8A4C: .word wcmRssi + + arm_func_start WcmGetLinkLevel +WcmGetLinkLevel: ; 0x020A8A50 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WCMi_GetRssiAverage + mov r1, #0x0 + cmp r0, #0x1c + movcs r1, #0x3 + bhs _020A8A80 + cmp r0, #0x16 + movcs r1, #0x2 + bhs _020A8A80 + cmp r0, #0x10 + movcs r1, #0x1 +_020A8A80: + mov r0, r1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start WCMi_GetRssiAverage +WCMi_GetRssiAverage: ; 0x020A8A90 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020A8B20 ; =wcmRssiIndex + mov r0, #0x0 + ldrb r1, [r1, #0x0] + cmp r1, #0x10 + bls _020A8ADC + ldr r2, _020A8B24 ; =wcmRssi + mov r3, r0 +_020A8AB4: + ldrb r1, [r2, #0x0] + add r3, r3, #0x1 + cmp r3, #0x10 + add r0, r0, r1 + add r2, r2, #0x1 + blt _020A8AB4 + mov r1, r0, asr #0x3 + add r0, r0, r1, lsr #0x1c + mov r0, r0, asr #0x4 + b _020A8B10 +_020A8ADC: + cmp r1, #0x0 + beq _020A8B10 + mov r3, r0 + cmp r1, #0x0 + ble _020A8B0C + ldr ip, _020A8B24 ; =wcmRssi +_020A8AF4: + ldrb r2, [r12, #0x0] + add r3, r3, #0x1 + cmp r3, r1 + add r0, r0, r2 + add r12, r12, #0x1 + blt _020A8AF4 +_020A8B0C: + bl _s32_div_f +_020A8B10: + and r0, r0, #0xff + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020A8B20: .word wcmRssiIndex +_020A8B24: .word wcmRssi + + arm_func_start WCM_GetLinkLevel +WCM_GetLinkLevel: ; 0x020A8B28 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + mov r5, r0 + bl WCMi_GetSystemWork + cmp r0, #0x0 + mov r4, #0x0 + beq _020A8B60 + add r0, r0, #0x2000 + ldr r0, [r0, #0x260] + cmp r0, #0x9 + bne _020A8B60 + bl WcmGetLinkLevel + mov r4, r0 +_020A8B60: + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WCM_CompareBssID +WCM_CompareBssID: + mov r12, #0x0 +_020A8B7C: + ldrb r3, [r0, r12] + ldrb r2, [r1, r12] + cmp r3, r2 + movne r0, #0x0 + bxne lr + add r12, r12, #0x1 + cmp r12, #0x6 + blt _020A8B7C + mov r0, #0x1 + bx lr diff --git a/arm9/asm/libwcm.s b/arm9/asm/libwcm.s deleted file mode 100644 index 7583bf9e..00000000 --- a/arm9/asm/libwcm.s +++ /dev/null @@ -1,3751 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .rodata - - .global UNK_020FF590 -UNK_020FF590: ; 0x020FF590 - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00 - - .global UNK_020FF598 -UNK_020FF598: ; 0x020FF598 - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF - - .bss - - .global UNK_021CA86C -UNK_021CA86C: ; 0x021CA86C - .space 0x4 - - .global UNK_021CA870 -UNK_021CA870: ; 0x021CA870 - .space 0x4 - - .global UNK_021CA874 -UNK_021CA874: ; 0x021CA874 - .space 0x8 - - .global UNK_021CA87C -UNK_021CA87C: ; 0x021CA87C - .space 0x20 - - .global UNK_021CA89C -UNK_021CA89C: ; 0x021CA89C - .space 0x4 - - .global UNK_021CA8A0 -UNK_021CA8A0: ; 0x021CA8A0 - .space 0x10 - - .text - - arm_func_start FUN_020A5A4C -FUN_020A5A4C: ; 0x020A5A4C - mov r1, r0 - mov r0, #0x0 - mov r3, #0x1 -_020A5A58: - clz r2, r1 - rsbs r2, r2, #0x1f - bxcc lr - bic r1, r1, r3, lsl r2 - add r0, r0, #0x1 - b _020A5A58 - - arm_func_start FUN_020A5A70 -FUN_020A5A70: ; 0x020A5A70 - clz r0, r0 - bx lr - - arm_func_start FUN_020A5A78 -FUN_020A5A78: ; 0x020A5A78 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldrh r0, [r0, #0x2] - cmp r0, #0x0 - bne _020A5D80 - ldr r2, _020A5DA8 ; =UNK_021CA86C - mov r0, #0x0 - ldr r1, [r2, #0x0] - add r1, r1, #0x2000 - strb r0, [r1, #0x26b] - ldr r1, [r2, #0x0] - add r1, r1, #0x2200 - strh r0, [r1, #0x82] - ldr r3, [r2, #0x0] - add r1, r3, #0x2000 - ldr r1, [r1, #0x260] - cmp r1, #0xd - addls pc, pc, r1, lsl #0x2 - b _020A5D4C -_020A5AC4: - b _020A5D4C -_020A5AC8: - b _020A5D4C -_020A5ACC: - b _020A5D4C -_020A5AD0: - b _020A5D4C -_020A5AD4: - b _020A5D4C -_020A5AD8: - b _020A5AFC -_020A5ADC: - b _020A5AFC -_020A5AE0: - b _020A5B24 -_020A5AE4: - b _020A5B4C -_020A5AE8: - b _020A5C74 -_020A5AEC: - b _020A5CA4 -_020A5AF0: - b _020A5D4C -_020A5AF4: - b _020A5C74 -_020A5AF8: - b _020A5CD4 -_020A5AFC: - mov r0, #0x3 - bl FUN_020A6C38 - mov r1, #0x0 - ldr r3, _020A5DAC ; =0x000008F5 - mov r2, r1 - mov r0, #0x1 - bl FUN_020A6D3C - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020A5B24: - mov r0, #0x3 - bl FUN_020A6C38 - mov r0, #0x0 - ldr r3, _020A5DB0 ; =0x000008FB - mov r1, r0 - mov r2, r0 - bl FUN_020A6D3C - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020A5B4C: - add r1, r3, #0x2200 - ldrh r4, [r1, #0xf8] - strh r0, [r1, #0xf8] - cmp r4, #0x12 - bne _020A5C44 - ldr r1, [r2, #0x0] - add r1, r1, #0x2100 - ldrh r3, [r1, #0x70] - and r12, r3, #0x24 - cmp r12, #0x24 - beq _020A5C44 - orr r3, r3, #0x24 - strh r3, [r1, #0x70] - ldr r2, [r2, #0x0] - add r1, r2, #0x2000 - ldr r3, [r1, #0x264] - and r1, r3, #0xc0000 - cmp r1, #0xc0000 - moveq r0, #0x1 - mov r0, r0, lsl #0x10 - mov r12, r0, lsr #0x10 - and r1, r3, #0x30000 - cmp r1, #0x30000 - movne r3, #0x1 - add r1, r2, #0x2140 - ldr r0, _020A5DB4 ; =FUN_020A6144 - moveq r3, #0x0 - mov r2, #0x0 - str r12, [sp, #0x0] - bl WM_StartConnectEx - cmp r0, #0x2 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4,lr} - bxeq lr - cmp r0, #0x3 - beq _020A5C14 - cmp r0, #0x8 - bne _020A5C14 - mov r0, #0xc - bl FUN_020A6C38 - ldr r0, _020A5DA8 ; =UNK_021CA86C - ldr r3, _020A5DB8 ; =0x0000091C - ldr r0, [r0, #0x0] - mov r2, r4 - add r1, r0, #0x2140 - mov r0, #0x1 - bl FUN_020A6D3C - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020A5C14: - mov r0, #0xb - bl FUN_020A6C38 - ldr r0, _020A5DA8 ; =UNK_021CA86C - ldr r3, _020A5DBC ; =0x00000925 - ldr r0, [r0, #0x0] - mov r2, r4 - add r1, r0, #0x2140 - mov r0, #0x7 - bl FUN_020A6D3C - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020A5C44: - mov r0, #0x3 - bl FUN_020A6C38 - ldr r0, _020A5DA8 ; =UNK_021CA86C - ldr r3, _020A5DC0 ; =0x0000092D - ldr r0, [r0, #0x0] - mov r2, r4 - add r1, r0, #0x2140 - mov r0, #0x1 - bl FUN_020A6D3C - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020A5C74: - mov r0, #0x3 - bl FUN_020A6C38 - ldr r0, _020A5DA8 ; =UNK_021CA86C - ldr r3, _020A5DC4 ; =0x00000935 - ldr r1, [r0, #0x0] - mov r0, #0x0 - add r1, r1, #0x2140 - mov r2, #0x1 - bl FUN_020A6D3C - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020A5CA4: - mov r0, #0x3 - bl FUN_020A6C38 - ldr r1, _020A5DA8 ; =UNK_021CA86C - mov r0, #0x0 - ldr r1, [r1, #0x0] - ldr r3, _020A5DC8 ; =0x0000093C - mov r2, r0 - add r1, r1, #0x2140 - bl FUN_020A6D3C - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020A5CD4: - ldr r0, _020A5DCC ; =FUN_020A6768 - bl WM_PowerOff - cmp r0, #0x2 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4,lr} - bxeq lr - cmp r0, #0x3 - beq _020A5D24 - cmp r0, #0x8 - bne _020A5D24 - mov r0, #0xc - bl FUN_020A6C38 - mov r1, #0x0 - ldr r3, _020A5DD0 ; =0x0000094A - mov r2, r1 - mov r0, #0x1 - bl FUN_020A6D3C - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020A5D24: - mov r0, #0xb - bl FUN_020A6C38 - mov r1, #0x0 - ldr r3, _020A5DD4 ; =0x00000953 - mov r2, r1 - mov r0, #0x7 - bl FUN_020A6D3C - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020A5D4C: - mov r0, #0xb - bl FUN_020A6C38 - ldr r0, _020A5DA8 ; =UNK_021CA86C - ldr r3, _020A5DD8 ; =0x00000959 - ldr r1, [r0, #0x0] - mov r0, #0x7 - add r1, r1, #0x2000 - ldr r2, [r1, #0x260] - mov r1, #0x0 - bl FUN_020A6D3C - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr -_020A5D80: - mov r0, #0xb - bl FUN_020A6C38 - mov r1, #0x0 - mov r2, r1 - mov r0, #0x7 - mov r3, #0x960 - bl FUN_020A6D3C - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020A5DA8: .word UNK_021CA86C -_020A5DAC: .word 0x000008F5 -_020A5DB0: .word 0x000008FB -_020A5DB4: .word FUN_020A6144 -_020A5DB8: .word 0x0000091C -_020A5DBC: .word 0x00000925 -_020A5DC0: .word 0x0000092D -_020A5DC4: .word 0x00000935 -_020A5DC8: .word 0x0000093C -_020A5DCC: .word FUN_020A6768 -_020A5DD0: .word 0x0000094A -_020A5DD4: .word 0x00000953 -_020A5DD8: .word 0x00000959 - - arm_func_start FUN_020A5DDC -FUN_020A5DDC: ; 0x020A5DDC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldrh r0, [r0, #0x2] - cmp r0, #0x4 - addls pc, pc, r0, lsl #0x2 - b _020A5EF4 -_020A5DF4: - b _020A5E08 -_020A5DF8: - b _020A5EDC -_020A5DFC: - b _020A5EF4 -_020A5E00: - b _020A5EDC -_020A5E04: - b _020A5EF4 -_020A5E08: - ldr r0, _020A5F24 ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - ldr r0, [r0, #0x260] - cmp r0, #0xc - bne _020A5E38 - mov r0, #0xa - bl FUN_020A6C38 - bl FUN_020A6B28 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A5E38: - ldr r0, _020A5F28 ; =FUN_020A6058 - mov r1, #0x0 - bl WM_Disconnect - cmp r0, #0x2 - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - cmp r0, #0x3 - beq _020A5E94 - cmp r0, #0x8 - bne _020A5EAC - mov r0, #0xc - bl FUN_020A6C38 - ldr r0, _020A5F24 ; =UNK_021CA86C - ldr r3, _020A5F2C ; =0x000008B4 - ldr r1, [r0, #0x0] - mov r0, #0x1 - add r1, r1, #0x2140 - mov r2, #0x0 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A5E94: - mov r0, #0xa - bl FUN_020A6C38 - bl FUN_020A6B28 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A5EAC: - mov r0, #0xb - bl FUN_020A6C38 - ldr r1, _020A5F24 ; =UNK_021CA86C - mov r0, #0x7 - ldr r1, [r1, #0x0] - mov r2, #0x0 - add r1, r1, #0x2140 - mov r3, #0x8c0 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A5EDC: - mov r0, #0xa - bl FUN_020A6C38 - bl FUN_020A6B28 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A5EF4: - mov r0, #0xb - bl FUN_020A6C38 - ldr r0, _020A5F24 ; =UNK_021CA86C - ldr r3, _020A5F30 ; =0x000008D3 - ldr r1, [r0, #0x0] - mov r0, #0x7 - add r1, r1, #0x2140 - mov r2, #0x0 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A5F24: .word UNK_021CA86C -_020A5F28: .word FUN_020A6058 -_020A5F2C: .word 0x000008B4 -_020A5F30: .word 0x000008D3 - - arm_func_start FUN_020A5F34 -FUN_020A5F34: ; 0x020A5F34 - stmdb sp!, {r4,lr} - mov r4, r0 - ldrh r0, [r4, #0x2] - cmp r0, #0x0 - beq _020A5F50 - cmp r0, #0x4 - b _020A601C -_020A5F50: - ldrh r0, [r4, #0x4] - cmp r0, #0xe - beq _020A5F68 - cmp r0, #0xf - beq _020A5FC0 - b _020A5FF0 -_020A5F68: - ldr r0, _020A6048 ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - ldr r0, [r0, #0x260] - cmp r0, #0xc - bne _020A5F94 - mov r0, #0x8 - bl FUN_020A6C38 - bl FUN_020A6B28 - ldmia sp!, {r4,lr} - bx lr -_020A5F94: - mov r0, #0x9 - bl FUN_020A6C38 - ldr r1, _020A6048 ; =UNK_021CA86C - mov r0, #0x0 - ldr r1, [r1, #0x0] - ldr r3, _020A604C ; =0x00000872 - mov r2, r0 - add r1, r1, #0x2140 - bl FUN_020A6D3C - ldmia sp!, {r4,lr} - bx lr -_020A5FC0: - ldr r0, [r4, #0x8] - ldrh r0, [r0, #0xe] - mov r0, r0, asr #0x8 - and r0, r0, #0xff - bl FUN_020A89D0 - ldr r0, [r4, #0x8] - mov r1, #0x620 - bl DC_InvalidateRange - ldr r0, [r4, #0x8] - bl FUN_020A8934 - ldmia sp!, {r4,lr} - bx lr -_020A5FF0: - mov r0, #0xb - bl FUN_020A6C38 - ldr r0, _020A6048 ; =UNK_021CA86C - ldrh r2, [r4, #0x4] - ldr r0, [r0, #0x0] - ldr r3, _020A6050 ; =0x00000881 - add r1, r0, #0x2140 - mov r0, #0x7 - bl FUN_020A6D3C - ldmia sp!, {r4,lr} - bx lr -_020A601C: - mov r0, #0xb - bl FUN_020A6C38 - ldr r0, _020A6048 ; =UNK_021CA86C - ldr r3, _020A6054 ; =0x0000088C - ldr r1, [r0, #0x0] - mov r0, #0x7 - add r1, r1, #0x2140 - mov r2, #0x0 - bl FUN_020A6D3C - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020A6048: .word UNK_021CA86C -_020A604C: .word 0x00000872 -_020A6050: .word 0x00000881 -_020A6054: .word 0x0000088C - - arm_func_start FUN_020A6058 -FUN_020A6058: ; 0x020A6058 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldrh r0, [r0, #0x2] - cmp r0, #0x4 - addls pc, pc, r0, lsl #0x2 - b _020A6108 -_020A6070: - b _020A6084 -_020A6074: - b _020A60F0 -_020A6078: - b _020A6108 -_020A607C: - b _020A60F0 -_020A6080: - b _020A6108 -_020A6084: - ldr r0, _020A6138 ; =UNK_021CA86C - ldr r1, [r0, #0x0] - add r0, r1, #0x2000 - ldr r0, [r0, #0x260] - cmp r0, #0xc - bne _020A60B4 - mov r0, #0xa - bl FUN_020A6C38 - bl FUN_020A6B28 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A60B4: - add r1, r1, #0x2200 - mov r2, #0x0 - mov r0, #0x3 - strh r2, [r1, #0x82] - bl FUN_020A6C38 - ldr r1, _020A6138 ; =UNK_021CA86C - mov r0, #0x0 - ldr r1, [r1, #0x0] - ldr r3, _020A613C ; =0x0000083D - mov r2, r0 - add r1, r1, #0x2140 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A60F0: - mov r0, #0xa - bl FUN_020A6C38 - bl FUN_020A6B28 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A6108: - mov r0, #0xb - bl FUN_020A6C38 - ldr r0, _020A6138 ; =UNK_021CA86C - ldr r3, _020A6140 ; =0x0000084F - ldr r1, [r0, #0x0] - mov r0, #0x7 - add r1, r1, #0x2140 - mov r2, #0x0 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A6138: .word UNK_021CA86C -_020A613C: .word 0x0000083D -_020A6140: .word 0x0000084F - - arm_func_start FUN_020A6144 -FUN_020A6144: ; 0x020A6144 - stmdb sp!, {r4,lr} - mov r4, r0 - ldrh r0, [r4, #0x2] - cmp r0, #0xc - addls pc, pc, r0, lsl #0x2 - b _020A638C -_020A615C: - b _020A6190 -_020A6160: - b _020A6364 -_020A6164: - b _020A638C -_020A6168: - b _020A638C -_020A616C: - b _020A638C -_020A6170: - b _020A638C -_020A6174: - b _020A6378 -_020A6178: - b _020A638C -_020A617C: - b _020A638C -_020A6180: - b _020A638C -_020A6184: - b _020A638C -_020A6188: - b _020A6378 -_020A618C: - b _020A6378 -_020A6190: - ldrh r0, [r4, #0x8] - cmp r0, #0x9 - bgt _020A61D0 - cmp r0, #0x0 - addge pc, pc, r0, lsl #0x2 - b _020A6338 - b _020A6338 - b _020A6338 - b _020A6338 - b _020A6338 - b _020A6338 - b _020A6338 - b _020A63B0 - b _020A6258 - b _020A61E0 - b _020A61E0 -_020A61D0: - cmp r0, #0x1a - ldmeqia sp!, {r4,lr} - bxeq lr - b _020A6338 -_020A61E0: - ldr r1, _020A63B8 ; =UNK_021CA86C - ldr r2, [r1, #0x0] - add r0, r2, #0x2000 - ldr r0, [r0, #0x260] - sub r0, r0, #0x8 - cmp r0, #0x4 - addls pc, pc, r0, lsl #0x2 - b _020A63B0 -_020A6200: - b _020A6220 -_020A6204: - b _020A6230 -_020A6208: - b _020A6214 -_020A620C: - b _020A63B0 -_020A6210: - b _020A624C -_020A6214: - add r0, r2, #0x2200 - mov r1, #0x0 - strh r1, [r0, #0x82] -_020A6220: - mov r0, #0xc - bl FUN_020A6C38 - ldmia sp!, {r4,lr} - bx lr -_020A6230: - add r0, r2, #0x2200 - mov r2, #0x0 - strh r2, [r0, #0x82] - ldr r0, [r1, #0x0] - mov r1, #0x6 - add r0, r0, #0x2200 - strh r1, [r0, #0x80] -_020A624C: - bl FUN_020A6B28 - ldmia sp!, {r4,lr} - bx lr -_020A6258: - ldr r1, _020A63B8 ; =UNK_021CA86C - ldr r3, [r1, #0x0] - add r0, r3, #0x2000 - ldr r0, [r0, #0x260] - cmp r0, #0xc - bne _020A6284 - mov r0, #0x8 - bl FUN_020A6C38 - bl FUN_020A6B28 - ldmia sp!, {r4,lr} - bx lr -_020A6284: - ldrh r2, [r4, #0xa] - cmp r2, #0x1 - blo _020A632C - ldr r0, _020A63BC ; =0x000007D7 - cmp r2, r0 - bhi _020A632C - add r0, r3, #0x2200 - strh r2, [r0, #0x82] - ldr r1, [r1, #0x0] - ldr r0, _020A63C0 ; =FUN_020A5F34 - add r1, r1, #0x1500 - mov r2, #0x620 - bl WM_StartDCF - cmp r0, #0x2 - ldmeqia sp!, {r4,lr} - bxeq lr - cmp r0, #0x3 - beq _020A6300 - cmp r0, #0x8 - bne _020A6300 - mov r0, #0xc - bl FUN_020A6C38 - ldr r0, _020A63B8 ; =UNK_021CA86C - ldr r3, _020A63C4 ; =0x000007ED - ldr r1, [r0, #0x0] - mov r0, #0x1 - add r1, r1, #0x2140 - mov r2, #0x0 - bl FUN_020A6D3C - ldmia sp!, {r4,lr} - bx lr -_020A6300: - mov r0, #0xb - bl FUN_020A6C38 - ldr r0, _020A63B8 ; =UNK_021CA86C - ldr r3, _020A63C8 ; =0x000007F6 - ldr r1, [r0, #0x0] - mov r0, #0x7 - add r1, r1, #0x2140 - mov r2, #0x0 - bl FUN_020A6D3C - ldmia sp!, {r4,lr} - bx lr -_020A632C: - bl FUN_020A6B28 - ldmia sp!, {r4,lr} - bx lr -_020A6338: - mov r0, #0xb - bl FUN_020A6C38 - ldr r0, _020A63B8 ; =UNK_021CA86C - ldrh r2, [r4, #0x8] - ldr r0, [r0, #0x0] - ldr r3, _020A63CC ; =0x00000804 - add r1, r0, #0x2140 - mov r0, #0x7 - bl FUN_020A6D3C - ldmia sp!, {r4,lr} - bx lr -_020A6364: - ldr r0, _020A63B8 ; =UNK_021CA86C - ldrh r1, [r4, #0xe] - ldr r0, [r0, #0x0] - add r0, r0, #0x2200 - strh r1, [r0, #0xf8] -_020A6378: - mov r0, #0x8 - bl FUN_020A6C38 - bl FUN_020A6B28 - ldmia sp!, {r4,lr} - bx lr -_020A638C: - mov r0, #0xb - bl FUN_020A6C38 - ldr r0, _020A63B8 ; =UNK_021CA86C - ldr r3, _020A63D0 ; =0x0000081B - ldr r1, [r0, #0x0] - mov r0, #0x7 - add r1, r1, #0x2140 - mov r2, #0x0 - bl FUN_020A6D3C -_020A63B0: - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020A63B8: .word UNK_021CA86C -_020A63BC: .word 0x000007D7 -_020A63C0: .word FUN_020A5F34 -_020A63C4: .word 0x000007ED -_020A63C8: .word 0x000007F6 -_020A63CC: .word 0x00000804 -_020A63D0: .word 0x0000081B - - arm_func_start FUN_020A63D4 -FUN_020A63D4: ; 0x020A63D4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldrh r0, [r0, #0x2] - cmp r0, #0x4 - addls pc, pc, r0, lsl #0x2 - b _020A6438 -_020A63EC: - b _020A6400 -_020A63F0: - b _020A6428 -_020A63F4: - b _020A6438 -_020A63F8: - b _020A6438 -_020A63FC: - b _020A6438 -_020A6400: - mov r0, #0x3 - bl FUN_020A6C38 - mov r0, #0x0 - ldr r3, _020A6460 ; =0x00000783 - mov r1, r0 - mov r2, r0 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A6428: - bl FUN_020A6B28 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A6438: - mov r0, #0xb - bl FUN_020A6C38 - mov r1, #0x0 - ldr r3, _020A6464 ; =0x00000793 - mov r2, r1 - mov r0, #0x7 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A6460: .word 0x00000783 -_020A6464: .word 0x00000793 - - arm_func_start FUN_020A6468 -FUN_020A6468: ; 0x020A6468 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x8 - mov r5, r0 - ldrh r0, [r5, #0x2] - mov r4, #0x14 - cmp r0, #0x4 - addls pc, pc, r0, lsl #0x2 - b _020A6714 -_020A6488: - b _020A649C -_020A648C: - b _020A6704 -_020A6490: - b _020A6714 -_020A6494: - b _020A6714 -_020A6498: - b _020A6714 -_020A649C: - ldr r0, _020A673C ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - ldr r0, [r0, #0x260] - cmp r0, #0x5 - bne _020A64D0 - mov r0, #0x6 - bl FUN_020A6C38 - mov r0, #0x0 - ldr r3, _020A6740 ; =0x00000704 - mov r1, r0 - mov r2, r0 - bl FUN_020A6D3C -_020A64D0: - ldr r1, _020A673C ; =UNK_021CA86C - ldr r2, [r1, #0x0] - add r0, r2, #0x2000 - ldr r0, [r0, #0x260] - cmp r0, #0x6 - beq _020A64FC - cmp r0, #0x7 - beq _020A6674 - cmp r0, #0xd - beq _020A6684 - b _020A6694 -_020A64FC: - add r0, r2, #0x2200 - mov r2, #0x7 - strh r2, [r0, #0x80] - ldrh r0, [r5, #0x8] - cmp r0, #0x5 - bne _020A6588 - ldr r0, [r1, #0x0] - add r1, r0, #0x2200 - add r0, r0, #0x2000 - ldrh r1, [r1, #0x8c] - ldr r0, [r0, #0x288] - bl DC_InvalidateRange - ldrh r0, [r5, #0xe] - mov r4, #0x0 - cmp r0, #0x0 - ble _020A6588 - ldr r8, _020A6744 ; =0x0000071A - mov r6, r4 - mov r7, #0x7 -_020A6548: - add r0, r5, r4, lsl #0x1 - add r2, r5, r4, lsl #0x2 - ldrh r1, [r0, #0x50] - ldr r0, [r2, #0x10] - bl FUN_020A8298 - str r8, [sp, #0x0] - add r0, r5, r4, lsl #0x2 - ldr r2, [r0, #0x10] - mov r0, r7 - mov r1, r6 - mov r3, r5 - bl FUN_020A6CE0 - ldrh r0, [r5, #0xe] - add r4, r4, #0x1 - cmp r4, r0 - blt _020A6548 -_020A6588: - ldr r0, _020A673C ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - ldr r1, [r0, #0x264] - and r0, r1, #0xc00000 - cmp r0, #0xc00000 - bne _020A65F4 - ldr r0, _020A6748 ; =0x00003FFE - and r0, r1, r0 - bl FUN_020A5A4C - movs r1, r0 - beq _020A65F4 - ldr r0, _020A673C ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - ldr r6, [r0, #0x284] - mov r0, r6 - bl _u32_div_f - cmp r1, #0x0 - bne _020A65F4 - ldr r4, _020A674C ; =0x00000728 - mov r1, #0x0 - mov r2, r6 - mov r3, r1 - mov r0, #0x8 - str r4, [sp, #0x0] - bl FUN_020A6CE0 -_020A65F4: - ldrh r0, [r5, #0xa] - bl FUN_020A5A70 - rsb r0, r0, #0x20 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl FUN_020A6D8C - ldr r1, _020A673C ; =UNK_021CA86C - mov r2, #0x1 - mov r2, r2, lsl r0 - ldr r0, [r1, #0x0] - mov r2, r2, asr #0x1 - add r0, r0, #0x2200 - strh r2, [r0, #0x8e] - ldr r0, [r1, #0x0] - add r1, r0, #0x2200 - add r0, r0, #0x2000 - ldrh r1, [r1, #0x8c] - ldr r0, [r0, #0x288] - bl DC_InvalidateRange - ldr r3, _020A673C ; =UNK_021CA86C - ldr r2, _020A6750 ; =0x00002288 - ldr r1, [r3, #0x0] - ldr r0, _020A6754 ; =FUN_020A6468 - add r1, r1, #0x2000 - ldr r4, [r1, #0x284] - add r4, r4, #0x1 - str r4, [r1, #0x284] - ldr r1, [r3, #0x0] - add r1, r1, r2 - bl WM_StartScanEx - mov r4, r0 - b _020A6694 -_020A6674: - ldr r0, _020A6758 ; =FUN_020A63D4 - bl WM_EndScan - mov r4, r0 - b _020A6694 -_020A6684: - bl FUN_020A6B28 - add sp, sp, #0x8 - ldmia sp!, {r4-r8,lr} - bx lr -_020A6694: - cmp r4, #0x2 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - cmp r4, #0x3 - beq _020A66DC - cmp r4, #0x8 - bne _020A66DC - mov r0, #0xc - bl FUN_020A6C38 - mov r1, #0x0 - ldr r3, _020A675C ; =0x00000753 - mov r2, r1 - mov r0, #0x1 - bl FUN_020A6D3C - add sp, sp, #0x8 - ldmia sp!, {r4-r8,lr} - bx lr -_020A66DC: - mov r0, #0xb - bl FUN_020A6C38 - mov r1, #0x0 - ldr r3, _020A6760 ; =0x0000075C - mov r2, r1 - mov r0, #0x7 - bl FUN_020A6D3C - add sp, sp, #0x8 - ldmia sp!, {r4-r8,lr} - bx lr -_020A6704: - bl FUN_020A6B28 - add sp, sp, #0x8 - ldmia sp!, {r4-r8,lr} - bx lr -_020A6714: - mov r0, #0xb - bl FUN_020A6C38 - mov r1, #0x0 - ldr r3, _020A6764 ; =0x0000076D - mov r2, r1 - mov r0, #0x7 - bl FUN_020A6D3C - add sp, sp, #0x8 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020A673C: .word UNK_021CA86C -_020A6740: .word 0x00000704 -_020A6744: .word 0x0000071A -_020A6748: .word 0x00003FFE -_020A674C: .word 0x00000728 -_020A6750: .word 0x00002288 -_020A6754: .word FUN_020A6468 -_020A6758: .word FUN_020A63D4 -_020A675C: .word 0x00000753 -_020A6760: .word 0x0000075C -_020A6764: .word 0x0000076D - - arm_func_start FUN_020A6768 -FUN_020A6768: ; 0x020A6768 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldrh r1, [r0, #0x2] - mov r2, #0x14 - cmp r1, #0x4 - addls pc, pc, r1, lsl #0x2 - b _020A6A0C -_020A6784: - b _020A6798 -_020A6788: - b _020A69CC -_020A678C: - b _020A6A0C -_020A6790: - b _020A6A0C -_020A6794: - b _020A6A0C -_020A6798: - ldrh r0, [r0, #0x0] - cmp r0, #0x19 - bgt _020A67D4 - cmp r0, #0x19 - bge _020A68B4 - cmp r0, #0x6 - addls pc, pc, r0, lsl #0x2 - b _020A692C -_020A67B8: - b _020A692C -_020A67BC: - b _020A692C -_020A67C0: - b _020A692C -_020A67C4: - b _020A67F4 -_020A67C8: - b _020A6804 -_020A67CC: - b _020A6868 -_020A67D0: - b _020A6890 -_020A67D4: - cmp r0, #0x1d - bgt _020A67E8 - cmp r0, #0x1d - beq _020A68A0 - b _020A692C -_020A67E8: - cmp r0, #0x27 - beq _020A68DC - b _020A692C -_020A67F4: - ldr r0, _020A6A4C ; =FUN_020A6768 - bl WM_PowerOn - mov r2, r0 - b _020A692C -_020A6804: - bl WM_Finish - cmp r0, #0x0 - beq _020A6818 - cmp r0, #0x4 - b _020A6840 -_020A6818: - mov r0, #0x1 - bl FUN_020A6C38 - mov r0, #0x0 - ldr r3, _020A6A50 ; =0x00000663 - mov r1, r0 - mov r2, r0 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A6840: - mov r0, #0xb - bl FUN_020A6C38 - mov r1, #0x0 - ldr r3, _020A6A54 ; =0x0000066C - mov r2, r1 - mov r0, #0x7 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A6868: - mov r0, #0x3 - bl FUN_020A6C38 - mov r0, #0x0 - ldr r3, _020A6A58 ; =0x00000673 - mov r1, r0 - mov r2, r0 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A6890: - ldr r0, _020A6A4C ; =FUN_020A6768 - bl WM_Disable - mov r2, r0 - b _020A692C -_020A68A0: - ldr r0, _020A6A4C ; =FUN_020A6768 - mov r1, #0x0 - bl WM_SetBeaconIndication - mov r2, r0 - b _020A692C -_020A68B4: - ldr r1, _020A6A5C ; =UNK_021CA86C - ldr r0, _020A6A4C ; =FUN_020A6768 - ldr r3, [r1, #0x0] - add r2, r3, #0x2000 - ldrb r1, [r2, #0x250] - ldrb r2, [r2, #0x251] - add r3, r3, #0x2200 - bl WM_SetWEPKeyEx - mov r2, r0 - b _020A692C -_020A68DC: - ldr r0, _020A6A5C ; =UNK_021CA86C - ldr r2, [r0, #0x0] - add r0, r2, #0x2000 - ldr r1, [r0, #0x264] - and r0, r1, #0xc0000 - cmp r0, #0xc0000 - moveq r0, #0x1 - movne r0, #0x0 - mov r0, r0, lsl #0x10 - mov r12, r0, lsr #0x10 - and r1, r1, #0x30000 - cmp r1, #0x30000 - movne r3, #0x1 - add r1, r2, #0x2140 - ldr r0, _020A6A60 ; =FUN_020A6144 - moveq r3, #0x0 - mov r2, #0x0 - str r12, [sp, #0x0] - bl WM_StartConnectEx - mov r2, r0 -_020A692C: - cmp r2, #0x2 - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - cmp r2, #0x3 - beq _020A698C - cmp r2, #0x8 - bne _020A698C - mov r0, #0xc - bl FUN_020A6C38 - ldr r0, _020A6A5C ; =UNK_021CA86C - ldr r3, _020A6A64 ; =0x000006AF - ldr r1, [r0, #0x0] - mov r2, #0x0 - add r0, r1, #0x2200 - ldrsh r0, [r0, #0x80] - cmp r0, #0x5 - addeq r1, r1, #0x2140 - movne r1, #0x0 - mov r0, #0x1 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A698C: - mov r0, #0xb - bl FUN_020A6C38 - ldr r0, _020A6A5C ; =UNK_021CA86C - ldr r3, _020A6A68 ; =0x000006B8 - ldr r1, [r0, #0x0] - mov r2, #0x0 - add r0, r1, #0x2200 - ldrsh r0, [r0, #0x80] - cmp r0, #0x5 - addeq r1, r1, #0x2140 - movne r1, #0x0 - mov r0, #0x7 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A69CC: - mov r0, #0xc - bl FUN_020A6C38 - ldr r0, _020A6A5C ; =UNK_021CA86C - ldr r3, _020A6A6C ; =0x000006DE - ldr r1, [r0, #0x0] - mov r2, #0x0 - add r0, r1, #0x2200 - ldrsh r0, [r0, #0x80] - cmp r0, #0x5 - addeq r1, r1, #0x2140 - movne r1, #0x0 - mov r0, #0x1 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A6A0C: - mov r0, #0xb - bl FUN_020A6C38 - ldr r0, _020A6A5C ; =UNK_021CA86C - ldr r3, _020A6A70 ; =0x000006E8 - ldr r1, [r0, #0x0] - mov r2, #0x0 - add r0, r1, #0x2200 - ldrsh r0, [r0, #0x80] - cmp r0, #0x5 - addeq r1, r1, #0x2140 - movne r1, #0x0 - mov r0, #0x7 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A6A4C: .word FUN_020A6768 -_020A6A50: .word 0x00000663 -_020A6A54: .word 0x0000066C -_020A6A58: .word 0x00000673 -_020A6A5C: .word UNK_021CA86C -_020A6A60: .word FUN_020A6144 -_020A6A64: .word 0x000006AF -_020A6A68: .word 0x000006B8 -_020A6A6C: .word 0x000006DE -_020A6A70: .word 0x000006E8 - - arm_func_start FUN_020A6A74 -FUN_020A6A74: ; 0x020A6A74 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldrh r1, [r0, #0x2] - cmp r1, #0x8 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldrh r1, [r0, #0x4] - cmp r1, #0x16 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldrh r0, [r0, #0x6] - cmp r0, #0x25 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r0, _020A6B24 ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - ldr r0, [r0, #0x260] - sub r0, r0, #0x8 - cmp r0, #0x4 - addls pc, pc, r0, lsl #0x2 - b _020A6B18 -_020A6AD8: - b _020A6AEC -_020A6ADC: - b _020A6B00 -_020A6AE0: - b _020A6B10 -_020A6AE4: - b _020A6B18 -_020A6AE8: - b _020A6B00 -_020A6AEC: - mov r0, #0xc - bl FUN_020A6C38 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A6B00: - bl FUN_020A6B28 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A6B10: - mov r0, #0xc - bl FUN_020A6C38 -_020A6B18: - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A6B24: .word UNK_021CA86C - - arm_func_start FUN_020A6B28 -FUN_020A6B28: ; 0x020A6B28 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020A6B98 ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r1, r0, #0x2000 - ldrb r0, [r1, #0x26b] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r0, _020A6B9C ; =FUN_020A5A78 - mov r2, #0x1 - strb r2, [r1, #0x26b] - bl WM_Reset - cmp r0, #0x2 - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - mov r0, #0xb - bl FUN_020A6C38 - mov r1, #0x0 - mov r2, r1 - mov r0, #0x7 - mov r3, #0x610 - bl FUN_020A6D3C - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A6B98: .word UNK_021CA86C -_020A6B9C: .word FUN_020A5A78 - - arm_func_start FUN_020A6BA0 -FUN_020A6BA0: ; 0x020A6BA0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl FUN_020A88A8 - bl FUN_020A6BBC - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start FUN_020A6BBC -FUN_020A6BBC: ; 0x020A6BBC - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - bl OS_DisableInterrupts - ldr r2, _020A6C28 ; =UNK_021CA86C - ldr r1, _020A6C2C ; =0x000022CC - ldr r2, [r2, #0x0] - mov r4, r0 - add r0, r2, r1 - bl OS_CancelAlarm - ldr r0, _020A6C28 ; =UNK_021CA86C - ldr r12, [r0, #0x0] - add r0, r12, #0x2000 - ldr r0, [r0, #0x260] - cmp r0, #0x9 - bne _020A6C14 - ldr r0, _020A6C2C ; =0x000022CC - ldr r1, _020A6C30 ; =0x022F5341 - mov r2, #0x0 - ldr r3, _020A6C34 ; =FUN_020A6BA0 - add r0, r12, r0 - str r2, [sp, #0x0] - bl OS_SetAlarm -_020A6C14: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020A6C28: .word UNK_021CA86C -_020A6C2C: .word 0x000022CC -_020A6C30: .word 0x022F5341 -_020A6C34: .word FUN_020A6BA0 - - arm_func_start FUN_020A6C38 -FUN_020A6C38: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020A6CD0 ; =UNK_021CA86C - mov r4, r0 - ldr r1, [r1, #0x0] - add r0, r1, #0x2000 - ldr r0, [r0, #0x260] - cmp r0, #0x9 - bne _020A6C78 - cmp r5, #0x9 - beq _020A6C78 - ldr r0, _020A6CD4 ; =0x000022CC - add r0, r1, r0 - bl OS_CancelAlarm -_020A6C78: - ldr r0, _020A6CD0 ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - ldr r1, [r0, #0x260] - cmp r1, #0xb - strne r5, [r0, #0x260] - cmp r5, #0x9 - bne _020A6CBC - mov r2, #0x0 - ldr r0, _020A6CD0 ; =UNK_021CA86C - str r2, [sp, #0x0] - ldr r5, [r0, #0x0] - ldr r0, _020A6CD4 ; =0x000022CC - ldr r1, _020A6CD8 ; =0x022F5341 - ldr r3, _020A6CDC ; =FUN_020A6BA0 - add r0, r5, r0 - bl OS_SetAlarm -_020A6CBC: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020A6CD0: .word UNK_021CA86C -_020A6CD4: .word 0x000022CC -_020A6CD8: .word 0x022F5341 -_020A6CDC: .word FUN_020A6BA0 - - arm_func_start FUN_020A6CE0 -FUN_020A6CE0: ; 0x020A6CE0 - stmdb sp!, {lr} - sub sp, sp, #0x14 - ldr ip, _020A6D38 ; =UNK_021CA86C - ldr r12, [r12, #0x0] - add r12, r12, #0x2000 - ldr lr, [r12, #0x27c] - cmp lr, #0x0 - addeq sp, sp, #0x14 - ldmeqia sp!, {lr} - bxeq lr - ldr lr, [sp, #0x18] - strh r0, [sp, #0x0] - str r2, [sp, #0x4] - str r3, [sp, #0x8] - str lr, [sp, #0xc] - strh r1, [sp, #0x2] - ldr r1, [r12, #0x27c] - add r0, sp, #0x0 - blx r1 - add sp, sp, #0x14 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A6D38: .word UNK_021CA86C - - arm_func_start FUN_020A6D3C -FUN_020A6D3C: ; 0x020A6D3C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr ip, _020A6D88 ; =UNK_021CA86C - mov r5, r0 - ldr r0, [r12, #0x0] - mov r4, r1 - add r1, r0, #0x2200 - ldrsh r0, [r1, #0x80] - mov r12, #0x0 - mov lr, r2 - strh r12, [r1, #0x80] - str r3, [sp, #0x0] - mov r1, r5 - mov r2, r4 - mov r3, lr - bl FUN_020A6CE0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020A6D88: .word UNK_021CA86C - - arm_func_start FUN_020A6D8C -FUN_020A6D8C: ; 0x020A6D8C - stmdb sp!, {r4-r6,lr} - ldr r1, _020A6E24 ; =UNK_021CA86C - mov r2, r0 - ldr r1, [r1, #0x0] - mov r3, #0x0 - add r1, r1, #0x2000 - ldr r1, [r1, #0x264] - mov r6, #0x1 - ldr r5, _020A6E28 ; =0x4EC4EC4F - ldr r4, _020A6E2C ; =0x0000000D -_020A6DB4: - smull r12, lr, r5, r2 - mov lr, lr, asr #0x2 - mov r12, r2, lsr #0x1f - add lr, r12, lr - smull r12, lr, r4, lr - sub lr, r2, r12 - add r12, lr, #0x1 - mov r12, r6, lsl r12 - ands r12, r1, r12 - bne _020A6DEC - add r3, r3, #0x1 - cmp r3, #0xd - add r2, r2, #0x1 - blt _020A6DB4 -_020A6DEC: - ldr r1, _020A6E28 ; =0x4EC4EC4F - add r3, r0, r3 - smull r0, r4, r1, r3 - mov r4, r4, asr #0x2 - mov r0, r3, lsr #0x1f - ldr r2, _020A6E2C ; =0x0000000D - add r4, r0, r4 - smull r0, r1, r2, r4 - sub r4, r3, r0 - add r0, r4, #0x1 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020A6E24: .word UNK_021CA86C -_020A6E28: .word 0x4EC4EC4F -_020A6E2C: .word 0x0000000D - - arm_func_start FUN_020A6E30 -FUN_020A6E30: ; 0x020A6E30 - ldr r0, _020A6E48 ; =UNK_021CA86C - ldr r1, _020A6E4C ; =0x00AAA082 - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - str r1, [r0, #0x264] - bx lr - .balign 4 -_020A6E48: .word UNK_021CA86C -_020A6E4C: .word 0x00AAA082 - - arm_func_start FUN_020A6E50 -FUN_020A6E50: ; 0x020A6E50 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r0, r2 - mov r4, r1 - bl FUN_020A7148 - ldr r2, _020A6FF4 ; =UNK_021CA86C - mov r3, #0x400 - ldr r1, [r2, #0x0] - mov r0, #0x0 - add r12, r1, #0x1500 - add r1, r1, #0x2000 - str r12, [r1, #0x288] - ldr r1, [r2, #0x0] - add r1, r1, #0x2200 - strh r3, [r1, #0x8c] - bl FUN_020A6D8C - ldr r1, _020A6FF4 ; =UNK_021CA86C - mov r2, #0x1 - mov r2, r2, lsl r0 - ldr r0, [r1, #0x0] - mov r2, r2, asr #0x1 - add r0, r0, #0x2200 - strh r2, [r0, #0x8e] - ldr r0, [r1, #0x0] - add r0, r0, #0x2200 - ldrh r0, [r0, #0x68] - cmp r0, #0x0 - bne _020A6EC8 - bl WM_GetDispersionScanPeriod -_020A6EC8: - ldr r2, _020A6FF4 ; =UNK_021CA86C - ldr r1, [r2, #0x0] - add r1, r1, #0x2200 - strh r0, [r1, #0x90] - ldr r1, [r2, #0x0] - add r0, r1, #0x2000 - ldr r0, [r0, #0x264] - and r0, r0, #0x300000 - cmp r0, #0x300000 - movne r2, #0x1 - moveq r2, #0x0 - add r0, r1, #0x2200 - strh r2, [r0, #0x98] - cmp r5, #0x0 - bne _020A6F24 - ldr r0, _020A6FF4 ; =UNK_021CA86C - ldr r1, _020A6FF8 ; =0x00002292 - ldr r2, [r0, #0x0] - ldr r0, _020A6FFC ; =UNK_020FF590 - add r1, r2, r1 - mov r2, #0x6 - bl MI_CpuCopy8 - b _020A6F40 -_020A6F24: - ldr r0, _020A6FF4 ; =UNK_021CA86C - ldr r1, _020A6FF8 ; =0x00002292 - ldr r2, [r0, #0x0] - mov r0, r5 - add r1, r2, r1 - mov r2, #0x6 - bl MI_CpuCopy8 -_020A6F40: - cmp r4, #0x0 - beq _020A6F54 - ldr r0, _020A7000 ; =UNK_020FF598 - cmp r4, r0 - bne _020A6F88 -_020A6F54: - ldr r0, _020A6FF4 ; =UNK_021CA86C - ldr r1, _020A7004 ; =0x0000229C - ldr r2, [r0, #0x0] - ldr r0, _020A7000 ; =UNK_020FF598 - add r1, r2, r1 - mov r2, #0x20 - bl MI_CpuCopy8 - ldr r0, _020A6FF4 ; =UNK_021CA86C - mov r1, #0x0 - ldr r0, [r0, #0x0] - add r0, r0, #0x2200 - strh r1, [r0, #0x9a] - b _020A6FD4 -_020A6F88: - ldr r0, _020A6FF4 ; =UNK_021CA86C - ldr r1, _020A7004 ; =0x0000229C - ldr r2, [r0, #0x0] - mov r0, r4 - add r1, r2, r1 - mov r2, #0x20 - bl MI_CpuCopy8 - mov r1, #0x0 -_020A6FA8: - ldrb r0, [r4, #0x0] - cmp r0, #0x0 - beq _020A6FC4 - add r1, r1, #0x1 - cmp r1, #0x20 - add r4, r4, #0x1 - blt _020A6FA8 -_020A6FC4: - ldr r0, _020A6FF4 ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r0, r0, #0x2200 - strh r1, [r0, #0x9a] -_020A6FD4: - ldr r0, _020A6FF4 ; =UNK_021CA86C - mov r1, #0x0 - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - str r1, [r0, #0x284] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020A6FF4: .word UNK_021CA86C -_020A6FF8: .word 0x00002292 -_020A6FFC: .word UNK_020FF590 -_020A7000: .word UNK_020FF598 -_020A7004: .word 0x0000229C - - arm_func_start FUN_020A7008 -FUN_020A7008: ; 0x020A7008 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - movs r5, r0 - mov r4, r1 - bne _020A705C - ldr r1, _020A7134 ; =UNK_021CA86C - mov r3, #0x3 - ldr r0, [r1, #0x0] - mov r2, #0x0 - add r0, r0, #0x2000 - str r3, [r0, #0x26c] - ldr r0, [r1, #0x0] - add r0, r0, #0x2000 - str r2, [r0, #0x270] - ldr r0, [r1, #0x0] - add r0, r0, #0x2000 - str r2, [r0, #0x274] - ldr r0, [r1, #0x0] - add r0, r0, #0x2000 - str r2, [r0, #0x278] - b _020A7118 -_020A705C: - ldr r1, _020A7134 ; =UNK_021CA86C - ldr r2, [r5, #0x0] - ldr r0, [r1, #0x0] - and r2, r2, #0x3 - add r0, r0, #0x2000 - str r2, [r0, #0x26c] - ldr r3, [r5, #0x4] - ldr r0, [r5, #0x8] - and r2, r3, #0x3 - rsb r2, r2, #0x4 - and r2, r2, #0x3 - add r2, r2, #0xc - cmp r2, r0 - bls _020A70B4 - ldr r0, [r1, #0x0] - mov r2, #0x0 - add r0, r0, #0x2000 - str r2, [r0, #0x270] - ldr r0, [r1, #0x0] - add r0, r0, #0x2000 - str r2, [r0, #0x274] - b _020A7104 -_020A70B4: - ldr r0, [r1, #0x0] - add r2, r3, #0x3 - bic r2, r2, #0x3 - add r0, r0, #0x2000 - str r2, [r0, #0x270] - ldr r2, [r5, #0x4] - ldr r0, [r1, #0x0] - and r2, r2, #0x3 - rsb r2, r2, #0x4 - ldr r3, [r5, #0x8] - and r2, r2, #0x3 - sub r2, r3, r2 - add r0, r0, #0x2000 - str r2, [r0, #0x274] - ldr r0, [r1, #0x0] - mov r1, #0x0 - add r2, r0, #0x2000 - ldr r0, [r2, #0x270] - ldr r2, [r2, #0x274] - bl MI_CpuFill8 -_020A7104: - ldr r0, _020A7134 ; =UNK_021CA86C - ldr r1, [r5, #0xc] - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - str r1, [r0, #0x278] -_020A7118: - ldr r0, _020A7134 ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r0, r0, #0x2000 - str r4, [r0, #0x27c] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020A7134: .word UNK_021CA86C - - arm_func_start FUN_020A7138 -FUN_020A7138: - ldr r0, _020A7144 ; =UNK_021CA86C - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020A7144: .word UNK_021CA86C - - arm_func_start FUN_020A7148 -FUN_020A7148: ; 0x020A7148 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - ldr r1, _020A71EC ; =UNK_021CA86C - mov r2, #0x0 - ldr r1, [r1, #0x0] - add r3, r1, #0x2000 - cmp r1, #0x0 - ldr r4, [r3, #0x264] - bne _020A7188 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r5,lr} - bx lr -_020A7188: - ands r3, r5, #0x8000 - beq _020A71A4 - ldr r3, _020A71F0 ; =0x00003FFE - orr r2, r2, r3 - ands r3, r5, r3 - ldreq r3, _020A71F4 ; =0x0000A082 - orreq r5, r5, r3 -_020A71A4: - ands r3, r5, #0x20000 - orrne r2, r2, #0x10000 - ands r3, r5, #0x80000 - orrne r2, r2, #0x40000 - ands r3, r5, #0x200000 - orrne r2, r2, #0x100000 - ands r3, r5, #0x800000 - orrne r2, r2, #0x400000 - mvn r2, r2 - and r2, r4, r2 - orr r2, r5, r2 - add r1, r1, #0x2000 - str r2, [r1, #0x264] - bl OS_RestoreInterrupts - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020A71EC: .word UNK_021CA86C -_020A71F0: .word 0x00003FFE -_020A71F4: .word 0x0000A082 - - arm_func_start FUN_020A71F8 -FUN_020A71F8: ; 0x020A71F8 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020A7228 ; =UNK_021CA86C - mov r4, #0x0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - addne r1, r1, #0x2000 - ldrne r4, [r1, #0x260] - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020A7228: .word UNK_021CA86C - - arm_func_start FUN_020A722C -FUN_020A722C: ; 0x020A722C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r1, _020A747C ; =UNK_021CA86C - mov r4, r0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - bne _020A7260 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r5,lr} - bx lr -_020A7260: - add r1, r1, #0x2000 - ldr r2, [r1, #0x260] - cmp r2, #0xd - addls pc, pc, r2, lsl #0x2 - b _020A7308 -_020A7274: - b _020A7308 -_020A7278: - b _020A72C0 -_020A727C: - b _020A7308 -_020A7280: - b _020A7320 -_020A7284: - b _020A7308 -_020A7288: - b _020A7308 -_020A728C: - b _020A72D4 -_020A7290: - b _020A7308 -_020A7294: - b _020A7308 -_020A7298: - b _020A7320 -_020A729C: - b _020A7308 -_020A72A0: - b _020A7308 -_020A72A4: - b _020A7320 -_020A72A8: - b _020A72AC -_020A72AC: - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x2 - ldmia sp!, {r4-r5,lr} - bx lr -_020A72C0: - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r5,lr} - bx lr -_020A72D4: - mov r0, #0xd - bl FUN_020A6C38 - ldr r1, _020A747C ; =UNK_021CA86C - mov r0, r4 - ldr r1, [r1, #0x0] - mov r2, #0x9 - add r1, r1, #0x2200 - strh r2, [r1, #0x80] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x3 - ldmia sp!, {r4-r5,lr} - bx lr -_020A7308: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r5,lr} - bx lr -_020A7320: - ldrb r0, [r1, #0x26b] - cmp r0, #0x1 - bne _020A734C - mov r0, #0xd - bl FUN_020A6C38 - ldr r0, _020A747C ; =UNK_021CA86C - mov r1, #0x9 - ldr r0, [r0, #0x0] - add r0, r0, #0x2200 - strh r1, [r0, #0x80] - b _020A7464 -_020A734C: - bl WMi_GetStatusAddress - mov r5, r0 - mov r1, #0x2 - bl DC_InvalidateRange - ldrh r0, [r5, #0x0] - cmp r0, #0x0 - beq _020A737C - cmp r0, #0x1 - beq _020A73BC - cmp r0, #0x2 - beq _020A73C8 - b _020A73D4 -_020A737C: - bl WM_Finish - cmp r0, #0x0 - bne _020A73F0 - mov r0, #0x1 - bl FUN_020A6C38 - ldr r1, _020A747C ; =UNK_021CA86C - mov r0, r4 - ldr r1, [r1, #0x0] - mov r2, #0x0 - add r1, r1, #0x2200 - strh r2, [r1, #0x80] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r5,lr} - bx lr -_020A73BC: - ldr r0, _020A7480 ; =FUN_020A6768 - bl WM_Disable - b _020A73F0 -_020A73C8: - ldr r0, _020A7480 ; =FUN_020A6768 - bl WM_PowerOff - b _020A73F0 -_020A73D4: - ldr r1, _020A747C ; =UNK_021CA86C - ldr r0, _020A7484 ; =FUN_020A5A78 - ldr r1, [r1, #0x0] - mov r2, #0x1 - add r1, r1, #0x2000 - strb r2, [r1, #0x26b] - bl WM_Reset -_020A73F0: - cmp r0, #0x2 - beq _020A740C - cmp r0, #0x3 - beq _020A7444 - cmp r0, #0x8 - beq _020A742C - b _020A7444 -_020A740C: - mov r0, #0xd - bl FUN_020A6C38 - ldr r0, _020A747C ; =UNK_021CA86C - mov r1, #0x9 - ldr r0, [r0, #0x0] - add r0, r0, #0x2200 - strh r1, [r0, #0x80] - b _020A7464 -_020A742C: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr -_020A7444: - mov r0, #0xb - bl FUN_020A6C38 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x7 - ldmia sp!, {r4-r5,lr} - bx lr -_020A7464: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x3 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020A747C: .word UNK_021CA86C -_020A7480: .word FUN_020A6768 -_020A7484: .word FUN_020A5A78 - - arm_func_start FUN_020A7488 -FUN_020A7488: ; 0x020A7488 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020A75B8 ; =UNK_021CA86C - mov r4, r0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - bne _020A74B4 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4,lr} - bx lr -_020A74B4: - add r1, r1, #0x2000 - ldr r2, [r1, #0x260] - cmp r2, #0x3 - beq _020A74E4 - cmp r2, #0x9 - beq _020A7504 - cmp r2, #0xa - bne _020A74F4 - bl OS_RestoreInterrupts - mov r0, #0x2 - ldmia sp!, {r4,lr} - bx lr -_020A74E4: - bl OS_RestoreInterrupts - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020A74F4: - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4,lr} - bx lr -_020A7504: - ldrb r0, [r1, #0x26b] - cmp r0, #0x1 - bne _020A7530 - mov r0, #0xa - bl FUN_020A6C38 - ldr r0, _020A75B8 ; =UNK_021CA86C - mov r1, #0x6 - ldr r0, [r0, #0x0] - add r0, r0, #0x2200 - strh r1, [r0, #0x80] - b _020A75A4 -_020A7530: - ldr r0, _020A75BC ; =FUN_020A5DDC - bl WM_EndDCF - cmp r0, #0x2 - beq _020A7554 - cmp r0, #0x3 - beq _020A7588 - cmp r0, #0x8 - beq _020A7574 - b _020A7588 -_020A7554: - mov r0, #0xa - bl FUN_020A6C38 - ldr r0, _020A75B8 ; =UNK_021CA86C - mov r1, #0x6 - ldr r0, [r0, #0x0] - add r0, r0, #0x2200 - strh r1, [r0, #0x80] - b _020A75A4 -_020A7574: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x4 - ldmia sp!, {r4,lr} - bx lr -_020A7588: - mov r0, #0xb - bl FUN_020A6C38 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x7 - ldmia sp!, {r4,lr} - bx lr -_020A75A4: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x3 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020A75B8: .word UNK_021CA86C -_020A75BC: .word FUN_020A5DDC - - arm_func_start FUN_020A75C0 -FUN_020A75C0: ; 0x020A75C0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - bl OS_DisableInterrupts - ldr r2, _020A7814 ; =UNK_021CA86C - mov r4, r0 - ldr r12, [r2, #0x0] - cmp r12, #0x0 - bne _020A7600 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020A7600: - add r1, r12, #0x2000 - ldr r3, [r1, #0x260] - cmp r3, #0x3 - beq _020A7624 - cmp r3, #0x8 - beq _020A7734 - cmp r3, #0x9 - beq _020A7748 - b _020A775C -_020A7624: - cmp r7, #0x0 - bne _020A7640 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020A7640: - ldrh r3, [r7, #0x3c] - cmp r3, #0x0 - beq _020A7660 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020A7660: - cmp r6, #0x0 - beq _020A76E8 - ldrb r3, [r6, #0x0] - cmp r3, #0x4 - bhs _020A7680 - ldrb r0, [r6, #0x1] - cmp r0, #0x4 - blo _020A7698 -_020A7680: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020A7698: - strb r3, [r1, #0x250] - ldr r0, [r2, #0x0] - ldrb r1, [r6, #0x1] - add r0, r0, #0x2000 - strb r1, [r0, #0x251] - ldr r1, [r2, #0x0] - add r0, r1, #0x2000 - ldrb r0, [r0, #0x250] - cmp r0, #0x0 - bne _020A76D4 - add r0, r1, #0x2200 - mov r1, #0x0 - mov r2, #0x50 - bl MI_CpuFill8 - b _020A76F8 -_020A76D4: - add r0, r6, #0x2 - add r1, r1, #0x2200 - mov r2, #0x50 - bl MI_CpuCopy8 - b _020A76F8 -_020A76E8: - add r0, r12, #0x2200 - mov r1, #0x0 - mov r2, #0x52 - bl MI_CpuFill8 -_020A76F8: - ldr r1, _020A7814 ; =UNK_021CA86C - mov r0, r7 - ldr r1, [r1, #0x0] - mov r2, #0xc0 - add r1, r1, #0x2140 - bl MI_CpuCopy8 - ldr r1, _020A7814 ; =UNK_021CA86C - mov r0, r5 - ldr r1, [r1, #0x0] - add r1, r1, #0x2100 - ldrh r2, [r1, #0x6e] - orr r2, r2, #0x3 - strh r2, [r1, #0x70] - bl FUN_020A7148 - b _020A7770 -_020A7734: - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x2 - ldmia sp!, {r4-r7,lr} - bx lr -_020A7748: - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020A775C: - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020A7770: - ldr r1, _020A7818 ; =0x0000FFFF - ldr r0, _020A781C ; =FUN_020A6768 - mov r3, r1 - mov r2, #0x50 - str r1, [sp, #0x0] - bl WM_SetLifeTime - cmp r0, #0x2 - beq _020A77A4 - cmp r0, #0x3 - beq _020A77DC - cmp r0, #0x8 - beq _020A77C4 - b _020A77DC -_020A77A4: - mov r0, #0x8 - bl FUN_020A6C38 - ldr r0, _020A7814 ; =UNK_021CA86C - mov r1, #0x5 - ldr r0, [r0, #0x0] - add r0, r0, #0x2200 - strh r1, [r0, #0x80] - b _020A77FC -_020A77C4: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr -_020A77DC: - mov r0, #0xb - bl FUN_020A6C38 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x7 - ldmia sp!, {r4-r7,lr} - bx lr -_020A77FC: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x3 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020A7814: .word UNK_021CA86C -_020A7818: .word 0x0000FFFF -_020A781C: .word FUN_020A6768 - - arm_func_start FUN_020A7820 -FUN_020A7820: ; 0x020A7820 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020A78D4 ; =UNK_021CA86C - mov r4, r0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - bne _020A784C - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4,lr} - bx lr -_020A784C: - add r1, r1, #0x2000 - ldr r1, [r1, #0x260] - cmp r1, #0x3 - beq _020A78A0 - cmp r1, #0x6 - beq _020A7870 - cmp r1, #0x7 - beq _020A7890 - b _020A78B0 -_020A7870: - mov r0, #0x7 - bl FUN_020A6C38 - ldr r0, _020A78D4 ; =UNK_021CA86C - mov r1, #0x4 - ldr r0, [r0, #0x0] - add r0, r0, #0x2200 - strh r1, [r0, #0x80] - b _020A78C0 -_020A7890: - bl OS_RestoreInterrupts - mov r0, #0x2 - ldmia sp!, {r4,lr} - bx lr -_020A78A0: - bl OS_RestoreInterrupts - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020A78B0: - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4,lr} - bx lr -_020A78C0: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x3 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020A78D4: .word UNK_021CA86C - - arm_func_start FUN_020A78D8 -FUN_020A78D8: ; 0x020A78D8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - bl OS_DisableInterrupts - ldr r1, _020A7A84 ; =UNK_021CA86C - mov r4, r0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - bne _020A7918 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020A7918: - add r1, r1, #0x2000 - ldr r1, [r1, #0x260] - cmp r1, #0x3 - beq _020A79A0 - cmp r1, #0x5 - beq _020A793C - cmp r1, #0x6 - beq _020A7964 - b _020A798C -_020A793C: - mov r0, r7 - mov r1, r6 - mov r2, r5 - bl FUN_020A6E50 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x2 - ldmia sp!, {r4-r7,lr} - bx lr -_020A7964: - mov r0, r7 - mov r1, r6 - mov r2, r5 - bl FUN_020A6E50 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r7,lr} - bx lr -_020A798C: - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020A79A0: - mov r0, r7 - mov r1, r6 - mov r2, r5 - bl FUN_020A6E50 - ldr r0, _020A7A84 ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r1, r0, #0x2200 - add r0, r0, #0x2000 - ldrh r1, [r1, #0x8c] - ldr r0, [r0, #0x288] - bl DC_InvalidateRange - ldr r3, _020A7A84 ; =UNK_021CA86C - ldr r2, _020A7A88 ; =0x00002288 - ldr r1, [r3, #0x0] - ldr r0, _020A7A8C ; =FUN_020A6468 - add r1, r1, #0x2000 - ldr r5, [r1, #0x284] - add r5, r5, #0x1 - str r5, [r1, #0x284] - ldr r1, [r3, #0x0] - add r1, r1, r2 - bl WM_StartScanEx - cmp r0, #0x2 - beq _020A7A14 - cmp r0, #0x3 - beq _020A7A4C - cmp r0, #0x8 - beq _020A7A34 - b _020A7A4C -_020A7A14: - mov r0, #0x5 - bl FUN_020A6C38 - ldr r0, _020A7A84 ; =UNK_021CA86C - mov r1, #0x3 - ldr r0, [r0, #0x0] - add r0, r0, #0x2200 - strh r1, [r0, #0x80] - b _020A7A6C -_020A7A34: - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr -_020A7A4C: - mov r0, #0xb - bl FUN_020A6C38 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x7 - ldmia sp!, {r4-r7,lr} - bx lr -_020A7A6C: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x3 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020A7A84: .word UNK_021CA86C -_020A7A88: .word 0x00002288 -_020A7A8C: .word FUN_020A6468 - - arm_func_start FUN_020A7A90 -FUN_020A7A90: ; 0x020A7A90 - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0x0 - beq _020A7AA8 - cmp r1, #0x0 - bne _020A7AB8 -_020A7AA8: - bl FUN_020A7820 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020A7AB8: - bl FUN_020A78D8 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start FUN_020A7AC8 -FUN_020A7AC8: ; 0x020A7AC8 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020A7BCC ; =UNK_021CA86C - mov r4, r0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - bne _020A7AF4 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4,lr} - bx lr -_020A7AF4: - add r1, r1, #0x2000 - ldr r1, [r1, #0x260] - cmp r1, #0x1 - beq _020A7B24 - cmp r1, #0x3 - beq _020A7B44 - cmp r1, #0x4 - bne _020A7B34 - bl OS_RestoreInterrupts - mov r0, #0x2 - ldmia sp!, {r4,lr} - bx lr -_020A7B24: - bl OS_RestoreInterrupts - mov r0, #0x0 - ldmia sp!, {r4,lr} - bx lr -_020A7B34: - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4,lr} - bx lr -_020A7B44: - ldr r0, _020A7BD0 ; =FUN_020A6768 - bl WM_PowerOff - cmp r0, #0x2 - beq _020A7B68 - cmp r0, #0x3 - beq _020A7B9C - cmp r0, #0x8 - beq _020A7B88 - b _020A7B9C -_020A7B68: - mov r0, #0x4 - bl FUN_020A6C38 - ldr r0, _020A7BCC ; =UNK_021CA86C - mov r1, #0x2 - ldr r0, [r0, #0x0] - add r0, r0, #0x2200 - strh r1, [r0, #0x80] - b _020A7BB8 -_020A7B88: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x4 - ldmia sp!, {r4,lr} - bx lr -_020A7B9C: - mov r0, #0xb - bl FUN_020A6C38 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x7 - ldmia sp!, {r4,lr} - bx lr -_020A7BB8: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x3 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020A7BCC: .word UNK_021CA86C -_020A7BD0: .word FUN_020A6768 - - arm_func_start FUN_020A7BD4 -FUN_020A7BD4: ; 0x020A7BD4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - bl OS_DisableInterrupts - ldr r1, _020A7E00 ; =UNK_021CA86C - mov r4, r0 - ldr r1, [r1, #0x0] - cmp r1, #0x0 - bne _020A7C08 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7C08: - add r1, r1, #0x2000 - ldr r1, [r1, #0x260] - cmp r1, #0x1 - beq _020A7C2C - cmp r1, #0x2 - beq _020A7C3C - cmp r1, #0x3 - beq _020A7C4C - b _020A7C5C -_020A7C2C: - mov r0, r6 - mov r1, r5 - bl FUN_020A7008 - b _020A7C6C -_020A7C3C: - bl OS_RestoreInterrupts - mov r0, #0x2 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7C4C: - bl OS_RestoreInterrupts - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7C5C: - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7C6C: - ldr r0, _020A7E00 ; =UNK_021CA86C - ldr r0, [r0, #0x0] - add r1, r0, #0x2000 - ldr r1, [r1, #0x26c] - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - bl WM_Init - cmp r0, #0x6 - addls pc, pc, r0, lsl #0x2 - b _020A7CE0 -_020A7C94: - b _020A7CFC -_020A7C98: - b _020A7CE0 -_020A7C9C: - b _020A7CE0 -_020A7CA0: - b _020A7CB0 -_020A7CA4: - b _020A7CCC -_020A7CA8: - b _020A7CE0 -_020A7CAC: - b _020A7CE0 -_020A7CB0: - mov r0, #0xb - bl FUN_020A6C38 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x7 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7CCC: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x5 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7CE0: - mov r0, #0xb - bl FUN_020A6C38 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x7 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7CFC: - bl WM_GetAllowedChannel - cmp r0, #0x0 - bne _020A7D44 - bl WM_Finish - cmp r0, #0x0 - beq _020A7D30 - mov r0, #0xb - bl FUN_020A6C38 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x7 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7D30: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x5 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7D44: - ldr r0, _020A7E04 ; =FUN_020A6A74 - bl WM_SetIndCallback - cmp r0, #0x0 - beq _020A7D70 - mov r0, #0xb - bl FUN_020A6C38 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x7 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7D70: - ldr r0, _020A7E08 ; =FUN_020A6768 - bl WM_Enable - cmp r0, #0x2 - beq _020A7D94 - cmp r0, #0x3 - beq _020A7DD0 - cmp r0, #0x8 - beq _020A7DB4 - b _020A7DD0 -_020A7D94: - mov r0, #0x2 - bl FUN_020A6C38 - ldr r0, _020A7E00 ; =UNK_021CA86C - mov r1, #0x1 - ldr r0, [r0, #0x0] - add r0, r0, #0x2200 - strh r1, [r0, #0x80] - b _020A7DEC -_020A7DB4: - mov r0, #0xc - bl FUN_020A6C38 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7DD0: - mov r0, #0xb - bl FUN_020A6C38 - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x7 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7DEC: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x3 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020A7E00: .word UNK_021CA86C -_020A7E04: .word FUN_020A6A74 -_020A7E08: .word FUN_020A6768 - - arm_func_start FUN_020A7E0C -FUN_020A7E0C: ; 0x020A7E0C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r2, _020A7E7C ; =UNK_021CA86C - ldr r1, [r2, #0x0] - cmp r1, #0x0 - bne _020A7E3C - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {lr} - bx lr -_020A7E3C: - add r1, r1, #0x2000 - ldr r1, [r1, #0x260] - cmp r1, #0x1 - beq _020A7E60 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {lr} - bx lr -_020A7E60: - mov r1, #0x0 - str r1, [r2, #0x0] - bl OS_RestoreInterrupts - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A7E7C: .word UNK_021CA86C - - arm_func_start FUN_020A7E80 -FUN_020A7E80: ; 0x020A7E80 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - bl OS_DisableInterrupts - ldr r2, _020A7FA8 ; =UNK_021CA86C - mov r4, r0 - ldr r1, [r2, #0x0] - cmp r1, #0x0 - beq _020A7EB4 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7EB4: - cmp r6, #0x0 - bne _020A7ECC - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7ECC: - ands r1, r6, #0x1f - beq _020A7EE4 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7EE4: - cmp r5, #0x2300 - bhs _020A7EFC - bl OS_RestoreInterrupts - mov r0, #0x6 - ldmia sp!, {r4-r6,lr} - bx lr -_020A7EFC: - str r6, [r2, #0x0] - add r0, r6, #0x2000 - mov r1, #0x1 - str r1, [r0, #0x260] - ldr r1, [r2, #0x0] - mov r0, #0x0 - add r1, r1, #0x2200 - strh r0, [r1, #0x80] - ldr r1, [r2, #0x0] - add r1, r1, #0x2200 - strh r0, [r1, #0x68] - ldr r1, [r2, #0x0] - add r1, r1, #0x2000 - strb r0, [r1, #0x26a] - ldr r1, [r2, #0x0] - add r1, r1, #0x2000 - strb r0, [r1, #0x26b] - ldr r1, [r2, #0x0] - add r1, r1, #0x2200 - strh r0, [r1, #0x82] - ldr r1, [r2, #0x0] - add r1, r1, #0x2200 - strh r0, [r1, #0xf8] - bl FUN_020A6E30 - bl FUN_020A897C - bl OS_IsTickAvailable - cmp r0, #0x0 - bne _020A7F70 - bl OS_InitTick -_020A7F70: - bl OS_IsAlarmAvailable - cmp r0, #0x0 - bne _020A7F80 - bl OS_InitAlarm -_020A7F80: - ldr r1, _020A7FA8 ; =UNK_021CA86C - ldr r0, _020A7FAC ; =0x000022CC - ldr r1, [r1, #0x0] - add r0, r1, r0 - bl OS_CreateAlarm - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020A7FA8: .word UNK_021CA86C -_020A7FAC: .word 0x000022CC - - arm_func_start FUN_020A7FB0 -FUN_020A7FB0: ; 0x020A7FB0 - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_020A7138 - add r1, r0, #0x2000 - cmp r4, #0x0 - ldr r0, [r1, #0x270] - ldmeqia sp!, {r4,lr} - bxeq lr - cmp r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ldr r1, [r1, #0x274] - cmp r1, #0xc - ldmlsia sp!, {r4,lr} - bxls lr - ldr r3, [r0, #0x4] - cmp r3, #0x0 - beq _020A8040 -_020A7FF8: - cmp r3, r4 - bne _020A8034 - ldr r2, [r3, #0x8] - cmp r2, #0x0 - ldrne r1, [r3, #0xc] - strne r1, [r2, #0xc] - ldreq r1, [r3, #0xc] - streq r1, [r0, #0x4] - ldr r2, [r3, #0xc] - cmp r2, #0x0 - ldrne r1, [r3, #0x8] - strne r1, [r2, #0x8] - ldreq r1, [r3, #0x8] - streq r1, [r0, #0x8] - b _020A8040 -_020A8034: - ldr r3, [r3, #0xc] - cmp r3, #0x0 - bne _020A7FF8 -_020A8040: - mov r1, #0x0 - str r1, [r4, #0xc] - ldr r1, [r0, #0x8] - str r1, [r4, #0x8] - str r4, [r0, #0x8] - ldr r1, [r4, #0x8] - cmp r1, #0x0 - strne r4, [r1, #0xc] - streq r4, [r0, #0x4] - cmp r3, #0x0 - ldreq r1, [r0, #0x0] - streq r1, [r4, #0x4] - ldreq r1, [r0, #0x0] - addeq r1, r1, #0x1 - streq r1, [r0, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start FUN_020A8084 -FUN_020A8084: ; 0x020A8084 - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_020A7138 - add r1, r0, #0x2000 - ldr r2, [r1, #0x270] - mov r0, #0x0 - cmp r2, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ldr r1, [r1, #0x274] - cmp r1, #0xc - ldmlsia sp!, {r4,lr} - bxls lr - ldr r0, [r2, #0x4] - cmp r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr -_020A80C8: - ldr r1, [r0, #0x4] - cmp r1, r4 - ldmeqia sp!, {r4,lr} - bxeq lr - ldr r0, [r0, #0xc] - cmp r0, #0x0 - bne _020A80C8 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start FUN_020A80EC -FUN_020A80EC: ; 0x020A80EC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl FUN_020A7138 - add r0, r0, #0x2000 - cmp r5, #0x0 - mov r4, #0x0 - ldr r1, [r0, #0x270] - addeq sp, sp, #0x4 - moveq r0, r4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - cmp r1, #0x0 - beq _020A8160 - ldr r0, [r0, #0x274] - cmp r0, #0xc - bls _020A8160 - ldr r4, [r1, #0x4] - cmp r4, #0x0 - beq _020A8160 -_020A813C: - add r0, r4, #0x10 - mov r1, r5 - add r0, r0, #0x4 - bl FUN_020A8B78 - cmp r0, #0x0 - bne _020A8160 - ldr r4, [r4, #0xc] - cmp r4, #0x0 - bne _020A813C -_020A8160: - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start FUN_020A8170 -FUN_020A8170: ; 0x020A8170 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl FUN_020A7138 - add r0, r0, #0x2000 - ldr r1, [r0, #0x270] - cmp r1, #0x0 - beq _020A81A4 - ldr r0, [r0, #0x274] - cmp r0, #0xc - addhi sp, sp, #0x4 - ldrhi r0, [r1, #0x4] - ldmhiia sp!, {lr} - bxhi lr -_020A81A4: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start FUN_020A81B4 -FUN_020A81B4: ; 0x020A81B4 - stmdb sp!, {r4,lr} - bl FUN_020A7138 - add r2, r0, #0x2000 - ldr r1, [r2, #0x270] - mov r0, #0x0 - cmp r1, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ldr r3, [r2, #0x274] - cmp r3, #0xc - ldmlsia sp!, {r4,lr} - bxls lr - ldr r2, _020A8294 ; =0x4EC4EC4F - sub r3, r3, #0xc - umull r2, r4, r3, r2 - movs r4, r4, lsr #0x6 - ldmeqia sp!, {r4,lr} - bxeq lr - ldr r2, [r1, #0x0] - cmp r4, r2 - ldmlsia sp!, {r4,lr} - bxls lr - mov lr, r0 - cmp r4, #0x0 - bls _020A8240 - add r12, r1, #0xc - mov r2, #0xd0 -_020A8220: - mul r0, lr, r2 - ldrb r3, [r12, r0] - add r0, r12, r0 - cmp r3, #0x0 - beq _020A8240 - add lr, lr, #0x1 - cmp lr, r4 - blo _020A8220 -_020A8240: - cmp lr, r4 - ldmcsia sp!, {r4,lr} - bxcs lr - mov r2, #0x1 - strb r2, [r0, #0x0] - ldr r3, [r1, #0x0] - mov r2, #0x0 - str r3, [r0, #0x4] - str r2, [r0, #0xc] - ldr r2, [r1, #0x8] - str r2, [r0, #0x8] - str r0, [r1, #0x8] - ldr r2, [r0, #0x8] - cmp r2, #0x0 - strne r0, [r2, #0xc] - streq r0, [r1, #0x4] - ldr r2, [r1, #0x0] - add r2, r2, #0x1 - str r2, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020A8294: .word 0x4EC4EC4F - - arm_func_start FUN_020A8298 -FUN_020A8298: ; 0x020A8298 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - bl FUN_020A7138 - movs r7, r0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - add r0, r7, #0x2000 - ldrb r0, [r0, #0x26a] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - ldrh r0, [r5, #0x3c] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - add r0, r5, #0x4 - bl FUN_020A80EC - movs r6, r0 - bne _020A8300 - bl FUN_020A81B4 - mov r6, r0 -_020A8300: - cmp r6, #0x0 - bne _020A8320 - add r0, r7, #0x2000 - ldr r0, [r0, #0x278] - cmp r0, #0x1 - bne _020A8320 - bl FUN_020A8170 - mov r6, r0 -_020A8320: - cmp r6, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - mov r0, r5 - add r1, r6, #0x10 - mov r2, #0xc0 - strh r4, [r6, #0x2] - bl MIi_CpuCopyFast - mov r0, r6 - bl FUN_020A7FB0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start FUN_020A8358 -FUN_020A8358: ; 0x020A8358 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r0 - bl OS_DisableInterrupts - mov r5, r0 - bl FUN_020A7138 - cmp r0, #0x0 - bne _020A8390 - mov r0, r5 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r5,lr} - bx lr -_020A8390: - mov r0, r4 - bl FUN_020A8084 - movs r4, r0 - bne _020A83B8 - mov r0, r5 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r5,lr} - bx lr -_020A83B8: - mov r0, r5 - bl OS_RestoreInterrupts - add r0, r4, #0x10 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start FUN_020A83D0 -FUN_020A83D0: ; 0x020A83D0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - mov r4, r0 - bl FUN_020A7138 - cmp r0, #0x0 - bne _020A8408 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r5,lr} - bx lr -_020A8408: - cmp r5, #0x0 - beq _020A8434 - add r1, r0, #0x2000 - ldrb r1, [r1, #0x26a] - add r0, r0, #0x2000 - cmp r1, #0x0 - movne r5, #0x1 - mov r1, #0x1 - moveq r5, #0x0 - strb r1, [r0, #0x26a] - b _020A8454 -_020A8434: - add r1, r0, #0x2000 - ldrb r1, [r1, #0x26a] - add r0, r0, #0x2000 - cmp r1, #0x0 - movne r5, #0x1 - mov r1, #0x0 - moveq r5, #0x0 - strb r1, [r0, #0x26a] -_020A8454: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, r5 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start FUN_020A846C -FUN_020A846C: ; 0x020A846C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - mov r5, r0 - bl FUN_020A7138 - cmp r0, #0x0 - mov r4, #0x0 - bne _020A84A4 - mov r0, r5 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, r4 - ldmia sp!, {r4-r5,lr} - bx lr -_020A84A4: - add r0, r0, #0x2000 - ldr r1, [r0, #0x270] - cmp r1, #0x0 - beq _020A84C0 - ldr r0, [r0, #0x274] - cmp r0, #0xc - ldrhi r4, [r1, #0x0] -_020A84C0: - mov r0, r5 - bl OS_RestoreInterrupts - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start FUN_020A84D8 -FUN_020A84D8: ; 0x020A84D8 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - mov r4, r0 - bl FUN_020A7138 - cmp r0, #0x0 - bne _020A8500 - mov r0, r4 - bl OS_RestoreInterrupts - ldmia sp!, {r4,lr} - bx lr -_020A8500: - add r1, r0, #0x2000 - ldr r0, [r1, #0x270] - cmp r0, #0x0 - beq _020A8524 - ldr r2, [r1, #0x274] - cmp r2, #0x0 - ble _020A8524 - mov r1, #0x0 - bl MI_CpuFill8 -_020A8524: - mov r0, r4 - bl OS_RestoreInterrupts - ldmia sp!, {r4,lr} - bx lr - - arm_func_start FUN_020A8534 -FUN_020A8534: ; 0x020A8534 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, [r0, #0x8] - ldr r1, _020A858C ; =0x01FF8000 - cmp r2, r1 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r1, [r0, #0xc] - sub r1, r1, #0x1 - str r1, [r0, #0xc] - ldr r1, [r0, #0xc] - cmp r1, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - mov r1, #0x0 - str r1, [r0, #0x8] - bl OS_WakeupThread - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A858C: .word 0x01FF8000 - - arm_func_start FUN_020A8590 -FUN_020A8590: - ldr r2, [r0, #0x8] - cmp r2, #0x0 - bne _020A85B8 - ldr r1, _020A85D8 ; =0x01FF8000 - str r1, [r0, #0x8] - ldr r1, [r0, #0xc] - add r1, r1, #0x1 - str r1, [r0, #0xc] - mov r0, #0x1 - bx lr -_020A85B8: - ldr r1, _020A85D8 ; =0x01FF8000 - cmp r2, r1 - ldreq r1, [r0, #0xc] - addeq r1, r1, #0x1 - streq r1, [r0, #0xc] - moveq r0, #0x1 - movne r0, #0x0 - bx lr - .balign 4 -_020A85D8: .word 0x01FF8000 - - arm_func_start FUN_020A85DC -FUN_020A85DC: ; 0x020A85DC - ldr ip, _020A85E8 ; =FUN_020A8534 - ldr r0, _020A85EC ; =UNK_021CA87C - bx r12 - .balign 4 -_020A85E8: .word FUN_020A8534 -_020A85EC: .word UNK_021CA87C - - arm_func_start FUN_020A85F0 -FUN_020A85F0: ; 0x020A85F0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldrh r1, [r0, #0x0] - cmp r1, #0x12 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldrh r2, [r0, #0x2] - ldr r1, _020A863C ; =UNK_021CA870 - str r2, [r1, #0x24] - ldrh r0, [r0, #0x2] - cmp r0, #0x0 - bne _020A8628 - bl FUN_020A6BBC -_020A8628: - ldr r0, _020A8640 ; =UNK_021CA874 - bl OS_WakeupThread - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A863C: .word UNK_021CA870 -_020A8640: .word UNK_021CA874 - - arm_func_start WCM_SendDCFData -WCM_SendDCFData: - stmdb sp!, {r4-r8,lr} - mov r8, r0 - mov r7, r1 - mov r6, r2 - bl OS_DisableInterrupts - mov r5, r0 - bl FUN_020A7138 - cmp r0, #0x0 - bne _020A867C - mov r0, r5 - bl OS_RestoreInterrupts - mvn r0, #0x0 - ldmia sp!, {r4-r8,lr} - bx lr -_020A867C: - ldr r0, _020A87AC ; =UNK_021CA87C - bl OS_LockMutex - bl FUN_020A7138 - movs r4, r0 - bne _020A86AC - ldr r0, _020A87AC ; =UNK_021CA87C - bl OS_UnlockMutex - mov r0, r5 - bl OS_RestoreInterrupts - mvn r0, #0x0 - ldmia sp!, {r4-r8,lr} - bx lr -_020A86AC: - add r0, r4, #0x2000 - ldr r1, [r0, #0x260] - cmp r1, #0x9 - bne _020A86C8 - ldrb r0, [r0, #0x26b] - cmp r0, #0x1 - bne _020A86E4 -_020A86C8: - ldr r0, _020A87AC ; =UNK_021CA87C - bl OS_UnlockMutex - mov r0, r5 - bl OS_RestoreInterrupts - mvn r0, #0x3 - ldmia sp!, {r4-r8,lr} - bx lr -_020A86E4: - mov r0, r7 - mov r2, r6 - add r1, r4, #0xf00 - bl MI_CpuCopy8 - mov r3, r6, lsl #0x10 - ldr r0, _020A87B0 ; =FUN_020A85F0 - mov r1, r8 - add r2, r4, #0xf00 - mov r3, r3, lsr #0x10 - bl WM_SetDCFData - cmp r0, #0x8 - addls pc, pc, r0, lsl #0x2 - b _020A873C -_020A8718: - b _020A873C -_020A871C: - b _020A873C -_020A8720: - b _020A8758 -_020A8724: - b _020A873C -_020A8728: - b _020A873C -_020A872C: - b _020A873C -_020A8730: - b _020A873C -_020A8734: - b _020A873C -_020A8738: - b _020A873C -_020A873C: - ldr r0, _020A87AC ; =UNK_021CA87C - bl OS_UnlockMutex - mov r0, r5 - bl OS_RestoreInterrupts - mvn r0, #0x4 - ldmia sp!, {r4-r8,lr} - bx lr -_020A8758: - ldr r0, _020A87B4 ; =UNK_021CA874 - bl OS_SleepThread - ldr r0, _020A87B8 ; =UNK_021CA870 - ldr r0, [r0, #0x24] - cmp r0, #0x0 - beq _020A8790 - cmp r0, #0x1 - ldr r0, _020A87AC ; =UNK_021CA87C - bl OS_UnlockMutex - mov r0, r5 - bl OS_RestoreInterrupts - mvn r0, #0x4 - ldmia sp!, {r4-r8,lr} - bx lr -_020A8790: - ldr r0, _020A87AC ; =UNK_021CA87C - bl OS_UnlockMutex - mov r0, r5 - bl OS_RestoreInterrupts - mov r0, r6 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020A87AC: .word UNK_021CA87C -_020A87B0: .word FUN_020A85F0 -_020A87B4: .word UNK_021CA874 -_020A87B8: .word UNK_021CA870 - - arm_func_start WCM_SetRecvDCFCallback -WCM_SetRecvDCFCallback: ; 0x020A87BC - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_DisableInterrupts - ldr r1, _020A87DC ; =UNK_021CA870 - str r4, [r1, #0x28] - bl OS_RestoreInterrupts - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020A87DC: .word UNK_021CA870 - - arm_func_start FUN_020A87E0 -FUN_020A87E0: ; 0x020A87E0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, #0x0 - mov r4, r0 - mov r6, r7 - bl FUN_020A7138 - mov r5, r0 - bl OS_DisableInterrupts - cmp r5, #0x0 - beq _020A8830 - add r1, r5, #0x2000 - ldr r2, [r1, #0x260] - cmp r2, #0x9 - bne _020A8830 - ldrb r1, [r1, #0x26b] - cmp r1, #0x0 - addeq r2, r5, #0x2100 - ldreq r1, _020A884C ; =0x0000214C - ldreqh r6, [r2, #0x4a] - addeq r7, r5, r1 -_020A8830: - bl OS_RestoreInterrupts - cmp r4, #0x0 - strneh r6, [r4, #0x0] - mov r0, r7 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020A884C: .word 0x0000214C - - arm_func_start WCM_GetApMacAddress -WCM_GetApMacAddress: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, #0x0 - bl FUN_020A7138 - mov r4, r0 - bl OS_DisableInterrupts - cmp r4, #0x0 - beq _020A8890 - add r1, r4, #0x2000 - ldr r2, [r1, #0x260] - cmp r2, #0x9 - bne _020A8890 - ldrb r1, [r1, #0x26b] - cmp r1, #0x0 - ldreq r1, _020A88A4 ; =0x00002144 - addeq r5, r4, r1 -_020A8890: - bl OS_RestoreInterrupts - mov r0, r5 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020A88A4: .word 0x00002144 - - arm_func_start FUN_020A88A8 -FUN_020A88A8: ; 0x020A88A8 - stmdb sp!, {r4,lr} - bl FUN_020A7138 - movs r4, r0 - ldmeqia sp!, {r4,lr} - bxeq lr - add r0, r4, #0x2000 - ldr r1, [r0, #0x260] - cmp r1, #0x9 - ldmneia sp!, {r4,lr} - bxne lr - ldrb r0, [r0, #0x26b] - cmp r0, #0x1 - ldmeqia sp!, {r4,lr} - bxeq lr - ldr r0, _020A8928 ; =UNK_021CA87C - bl FUN_020A8590 - cmp r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ldr r1, _020A892C ; =0x00002144 - ldr r0, _020A8930 ; =FUN_020A85DC - add r1, r4, r1 - add r2, r4, #0xf00 - mov r3, #0x0 - bl WM_SetDCFData - cmp r0, #0x2 - ldmeqia sp!, {r4,lr} - bxeq lr - ldr r0, _020A8928 ; =UNK_021CA87C - bl FUN_020A8534 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020A8928: .word UNK_021CA87C -_020A892C: .word 0x00002144 -_020A8930: .word FUN_020A85DC - - arm_func_start FUN_020A8934 -FUN_020A8934: ; 0x020A8934 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020A8978 ; =UNK_021CA870 - mov r2, r0 - ldr r12, [r1, #0x28] - cmp r12, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - ldrh r3, [r2, #0x6] - add r0, r2, #0x1e - add r1, r2, #0x18 - add r2, r2, #0x2c - blx r12 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A8978: .word UNK_021CA870 - - arm_func_start FUN_020A897C -FUN_020A897C: ; 0x020A897C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020A89C8 ; =UNK_021CA870 - ldrb r0, [r1, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r0, _020A89CC ; =UNK_021CA87C - mov r2, #0x0 - mov r3, #0x1 - strb r3, [r1, #0x0] - str r2, [r1, #0x24] - str r2, [r1, #0x8] - str r2, [r1, #0x4] - bl OS_InitMutex - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A89C8: .word UNK_021CA870 -_020A89CC: .word UNK_021CA87C - - arm_func_start FUN_020A89D0 -FUN_020A89D0: ; 0x020A89D0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020A8A48 ; =UNK_021CA89C - ands r1, r0, #0x2 - ldrb r12, [r2, #0x0] - movne r0, r0, asr #0x2 - andne lr, r0, #0xff - moveq r0, r0, asr #0x2 - addeq r0, r0, #0x19 - andeq lr, r0, #0xff - mov r1, r12, lsr #0x1f - rsb r0, r1, r12, lsl #0x1c - cmp r12, #0x10 - ldr r3, _020A8A4C ; =UNK_021CA8A0 - add r0, r1, r0, ror #0x1c - strb lr, [r3, r0] - addcc r0, r12, #0x1 - strccb r0, [r2, #0x0] - addcc sp, sp, #0x4 - ldmccia sp!, {lr} - bxcc lr - add r0, r12, #0x1 - mov r1, r0, lsr #0x1f - rsb r0, r1, r0, lsl #0x1c - add r0, r1, r0, ror #0x1c - add r0, r0, #0x10 - strb r0, [r2, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A8A48: .word UNK_021CA89C -_020A8A4C: .word UNK_021CA8A0 - - arm_func_start FUN_020A8A50 -FUN_020A8A50: ; 0x020A8A50 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl FUN_020A8A90 - mov r1, #0x0 - cmp r0, #0x1c - movcs r1, #0x3 - bhs _020A8A80 - cmp r0, #0x16 - movcs r1, #0x2 - bhs _020A8A80 - cmp r0, #0x10 - movcs r1, #0x1 -_020A8A80: - mov r0, r1 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start FUN_020A8A90 -FUN_020A8A90: ; 0x020A8A90 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020A8B20 ; =UNK_021CA89C - mov r0, #0x0 - ldrb r1, [r1, #0x0] - cmp r1, #0x10 - bls _020A8ADC - ldr r2, _020A8B24 ; =UNK_021CA8A0 - mov r3, r0 -_020A8AB4: - ldrb r1, [r2, #0x0] - add r3, r3, #0x1 - cmp r3, #0x10 - add r0, r0, r1 - add r2, r2, #0x1 - blt _020A8AB4 - mov r1, r0, asr #0x3 - add r0, r0, r1, lsr #0x1c - mov r0, r0, asr #0x4 - b _020A8B10 -_020A8ADC: - cmp r1, #0x0 - beq _020A8B10 - mov r3, r0 - cmp r1, #0x0 - ble _020A8B0C - ldr ip, _020A8B24 ; =UNK_021CA8A0 -_020A8AF4: - ldrb r2, [r12, #0x0] - add r3, r3, #0x1 - cmp r3, r1 - add r0, r0, r2 - add r12, r12, #0x1 - blt _020A8AF4 -_020A8B0C: - bl _s32_div_f -_020A8B10: - and r0, r0, #0xff - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020A8B20: .word UNK_021CA89C -_020A8B24: .word UNK_021CA8A0 - - arm_func_start FUN_020A8B28 -FUN_020A8B28: ; 0x020A8B28 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - mov r5, r0 - bl FUN_020A7138 - cmp r0, #0x0 - mov r4, #0x0 - beq _020A8B60 - add r0, r0, #0x2000 - ldr r0, [r0, #0x260] - cmp r0, #0x9 - bne _020A8B60 - bl FUN_020A8A50 - mov r4, r0 -_020A8B60: - mov r0, r5 - bl OS_RestoreInterrupts - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start FUN_020A8B78 -FUN_020A8B78: - mov r12, #0x0 -_020A8B7C: - ldrb r3, [r0, r12] - ldrb r2, [r1, r12] - cmp r3, r2 - movne r0, #0x0 - bxne lr - add r12, r12, #0x1 - cmp r12, #0x6 - blt _020A8B7C - mov r0, #0x1 - bx lr diff --git a/arm9/global.inc b/arm9/global.inc index 62d708f6..12497154 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -5515,21 +5515,21 @@ .extern FUN_02097484 .extern FUN_02097490 .extern FUN_02097508 -.extern FUN_020A71F8 -.extern FUN_020A722C -.extern FUN_020A7488 -.extern FUN_020A75C0 -.extern FUN_020A7820 -.extern FUN_020A7A90 -.extern FUN_020A7AC8 -.extern FUN_020A7BD4 -.extern FUN_020A7E0C -.extern FUN_020A7E80 -.extern FUN_020A8358 -.extern FUN_020A83D0 -.extern FUN_020A846C -.extern FUN_020A84D8 -.extern FUN_020A87E0 +.extern WCM_GetPhase +.extern WCM_TerminateAsync +.extern WCM_DisconnectAsync +.extern WCM_ConnectAsync +.extern WCM_EndSearchAsync +.extern WCM_SearchAsync +.extern WCM_CleanupAsync +.extern WCM_StartupAsync +.extern WCM_Finish +.extern WCM_Init +.extern WCM_PointApList +.extern WCM_LockApList +.extern WCM_CountApList +.extern WCM_ClearApList +.extern WCM_GetApEssid .extern FUN_020A8BA4 .extern FUN_020A8BB0 .extern FUN_020A8BBC @@ -7889,3 +7889,11 @@ .extern wcstombs .extern wctomb .extern wmemcpy +.extern WCMi_GetSystemWork +.extern WCM_CompareBssID +.extern WCMi_ResetKeepAliveAlarm +.extern WCMi_CpsifSendNullPacket +.extern WCMi_InitCpsif +.extern WCMi_EntryApList +.extern WCMi_CpsifRecvCallback +.extern WCMi_ShelterRssi diff --git a/arm9/modules/04/asm/arm_04.s b/arm9/modules/04/asm/arm_04.s index 129acd10..1f9a41fa 100644 --- a/arm9/modules/04/asm/arm_04.s +++ b/arm9/modules/04/asm/arm_04.s @@ -1442,7 +1442,7 @@ _021DA180: mov r1, #0xe bl OS_SNPrintf add r0, sp, #0x14 - bl FUN_020A87E0 + bl WCM_GetApEssid mov r5, r0 mov r1, #0x20 bl DC_InvalidateRange @@ -5473,7 +5473,7 @@ _021DDA4C: cmp r0, #3 bge _021DDAB0 add r0, sp, #0 - bl FUN_020A87E0 + bl WCM_GetApEssid mov r5, r0 mov r1, #0x20 bl DC_InvalidateRange @@ -5686,7 +5686,7 @@ _021DDD28: cmp r0, #0 addeq sp, sp, #4 ldmeqia sp!, {pc} - bl FUN_020A71F8 + bl WCM_GetPhase cmp r0, #9 addeq sp, sp, #4 ldmeqia sp!, {pc} @@ -21692,7 +21692,7 @@ MOD04_021EBA28: ; 0x021EBA28 cmp r0, #4 bne _021EBAA8 mov r0, #0 - bl FUN_020A87E0 + bl WCM_GetApEssid mov r4, r0 mov r1, #0x20 bl DC_InvalidateRange @@ -21928,7 +21928,7 @@ MOD04_021EBC60: ; 0x021EBC60 ldr r0, _021EBE14 ; =0x02210E4C mov r1, #0x2300 ldr r0, [r0] - bl FUN_020A7E80 + bl WCM_Init cmp r0, #1 beq _021EBDF4 cmp r0, #4 @@ -22664,7 +22664,7 @@ _021EC7AC: .word 0x00000D0C MOD04_021EC7B0: ; 0x021EC7B0 stmdb sp!, {r4, r5, r6, lr} mov r6, r0 - bl FUN_020A71F8 + bl WCM_GetPhase ldrb r2, [r6, #0xd13] add r3, r6, #0x470 mov r1, #0xc0 @@ -22731,7 +22731,7 @@ _021EC898: mov r0, r5 add r1, r6, r1 orr r2, r4, r2 - bl FUN_020A75C0 + bl WCM_ConnectAsync b _021EC8E0 _021EC8BC: cmp r0, #9 @@ -22878,7 +22878,7 @@ _021ECA8C: MOD04_021ECA98: ; 0x021ECA98 stmdb sp!, {lr} sub sp, sp, #4 - bl FUN_020A71F8 + bl WCM_GetPhase cmp r0, #0xc addls pc, pc, r0, lsl #2 b _021ECB2C @@ -22901,19 +22901,19 @@ _021ECAE4: mov r0, #1 ldmfd sp!, {pc} _021ECAF0: - bl FUN_020A7E0C + bl WCM_Finish b _021ECB2C _021ECAF8: - bl FUN_020A7AC8 + bl WCM_CleanupAsync b _021ECB2C _021ECB00: - bl FUN_020A7820 + bl WCM_EndSearchAsync b _021ECB2C _021ECB08: - bl FUN_020A7488 + bl WCM_DisconnectAsync b _021ECB2C _021ECB10: - bl FUN_020A722C + bl WCM_TerminateAsync b _021ECB2C _021ECB18: mov r0, #0 @@ -23463,7 +23463,7 @@ MOD04_021ED218: ; 0x021ED218 bl MOD04_021EB798 mov r4, r0 mov r5, #9 - bl FUN_020A71F8 + bl WCM_GetPhase cmp r0, #0xc addls pc, pc, r0, lsl #2 b _021ED2F0 @@ -23503,13 +23503,13 @@ _021ED2A4: bl MOD04_021ED8D4 b _021ED2F0 _021ED2C0: - bl FUN_020A7820 + bl WCM_EndSearchAsync b _021ED2F0 _021ED2C8: - bl FUN_020A7488 + bl WCM_DisconnectAsync b _021ED2F0 _021ED2D0: - bl FUN_020A722C + bl WCM_TerminateAsync mov r0, #4 bl MOD04_021EB6F4 mov r5, #0x11 @@ -23532,7 +23532,7 @@ MOD04_021ED2FC: ; 0x021ED2FC movgt r2, #0xc ldr r2, [ip, r2, lsl #2] orr r2, r3, r2 - bl FUN_020A7A90 + bl WCM_SearchAsync add sp, sp, #4 ldmfd sp!, {pc} .align 2, 0 @@ -23623,7 +23623,7 @@ _021ED410: ldmloia sp!, {r4, r5, pc} _021ED448: strb r2, [r5, #0xd13] - bl FUN_020A7820 + bl WCM_EndSearchAsync cmp r0, #1 strneb r4, [r5, #0xd0e] movne r4, #7 @@ -24080,7 +24080,7 @@ MOD04_021EDA70: ; 0x021EDA70 mov r5, r0 bl MOD04_021EB720 mov r4, r0 - bl FUN_020A71F8 + bl WCM_GetPhase cmp r4, #2 bne _021EDAB0 cmp r0, #3 @@ -24137,7 +24137,7 @@ _021EDB38: MOD04_021EDB44: ; 0x021EDB44 stmdb sp!, {r4, lr} sub sp, sp, #0x10 - bl FUN_020A71F8 + bl WCM_GetPhase mov r4, r0 mov r0, #0x10 bl MOD04_021EB798 @@ -24152,7 +24152,7 @@ MOD04_021EDB44: ; 0x021EDB44 bl MOD04_021ED17C ldr r1, _021EDBC8 ; =MOD04_021EC44C add r0, sp, #0 - bl FUN_020A7BD4 + bl WCM_StartupAsync cmp r0, #1 beq _021EDB9C cmp r0, #4 @@ -24476,7 +24476,7 @@ MOD04_021EDFBC: ; 0x021EDFBC mov r0, #0x10 bl MOD04_021EB798 mov r4, r0 - bl FUN_020A71F8 + bl WCM_GetPhase cmp r0, #9 bne _021EE064 sub r0, r5, #0xa diff --git a/arm9/modules/13/asm/module_13_thumb.s b/arm9/modules/13/asm/module_13_thumb.s index 4eadd8c7..51681246 100644 --- a/arm9/modules/13/asm/module_13_thumb.s +++ b/arm9/modules/13/asm/module_13_thumb.s @@ -4941,7 +4941,7 @@ _0221994E: ldr r2, [sp, #4] ldr r2, [r2, #0x28] bl MI_CpuCopy8 - bl FUN_020A84D8 + bl WCM_ClearApList mov r0, #0 ldr r1, [sp, #4] add r1, r1, #4 @@ -5769,7 +5769,7 @@ MOD13_02219F54: ; 0x02219F54 ldr r0, _0221A030 ; =0x02241A60 ldr r0, [r0] ldr r1, _0221A044 ; =0x00002300 - bl FUN_020A7E80 + bl WCM_Init cmp r0, #0 beq _02219FD4 add r0, r4, #0 @@ -5791,7 +5791,7 @@ _02219FDA: ldr r0, _0221A02C ; =0x02241A68 ldr r0, [r0] ldr r1, _0221A048 ; =MOD13_0221A3CC - bl FUN_020A7BD4 + bl WCM_StartupAsync cmp r0, #3 beq _0221A000 add r0, r4, #0 @@ -5886,7 +5886,7 @@ _0221A0A8: ldr r1, [r1] ldr r2, _0221A0EC ; =0x02241A6C ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 bne _0221A0DA mov r1, #8 @@ -5922,7 +5922,7 @@ MOD13_0221A0FC: ; 0x0221A0FC ldr r0, [r0] cmp r0, #3 bne _0221A136 - bl FUN_020A7AC8 + bl WCM_CleanupAsync cmp r0, #3 beq _0221A122 add r0, r4, #0 @@ -5973,7 +5973,7 @@ MOD13_0221A164: ; 0x0221A164 ldr r0, [r0] cmp r0, #7 bne _0221A190 - bl FUN_020A7488 + bl WCM_DisconnectAsync cmp r0, #3 bne _0221A190 mov r1, #4 @@ -6007,7 +6007,7 @@ MOD13_0221A1A4: ; 0x0221A1A4 mov r0, #0 add r1, r0, #0 add r2, r0, #0 - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221A1D6 mov r1, #4 @@ -6121,7 +6121,7 @@ _0221A27C: ldr r1, [r1] ldr r2, _0221A2DC ; =0x02241A64 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221A2CC mov r1, #6 @@ -6173,8 +6173,8 @@ MOD13_0221A2FC: ; 0x0221A2FC add r5, r0, #0 add r7, r1, #0 mov r0, #1 - bl FUN_020A83D0 - bl FUN_020A846C + bl WCM_LockApList + bl WCM_CountApList add r6, r0, #0 cmp r6, #0 ble _0221A336 @@ -6186,7 +6186,7 @@ _0221A31A: bge _0221A336 lsl r0, r4, #0x10 lsr r0, r0, #0x10 - bl FUN_020A8358 + bl WCM_PointApList add r1, r5, #0 mov r2, #0xc0 bl MIi_CpuCopy32 @@ -6196,7 +6196,7 @@ _0221A31A: blt _0221A31A _0221A336: mov r0, #0 - bl FUN_020A83D0 + bl WCM_LockApList add r0, r6, #0 add sp, #4 pop {r4, r5, r6, r7} @@ -6233,7 +6233,7 @@ _0221A374: mov r0, #0 add r1, r0, #0 add r2, r0, #0 - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 beq _0221A3B8 mov r0, #0 @@ -6241,7 +6241,7 @@ _0221A374: pop {r3} bx r3 _0221A38A: - bl FUN_020A7488 + bl WCM_DisconnectAsync cmp r0, #3 beq _0221A3B8 mov r0, #0 @@ -6252,7 +6252,7 @@ _0221A39A: ldr r0, _0221A3C4 ; =0x02241A68 ldr r0, [r0] ldr r1, _0221A3C8 ; =MOD13_0221A3CC - bl FUN_020A7BD4 + bl WCM_StartupAsync cmp r0, #3 beq _0221A3B8 mov r0, #0 @@ -6335,7 +6335,7 @@ _0221A426: ldr r1, [r1] ldr r2, _0221A768 ; =0x02241A64 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221A440 b _0221A750 @@ -6366,7 +6366,7 @@ _0221A462: ldr r1, [r1] ldr r2, _0221A774 ; =0x02241A6C ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 bne _0221A478 b _0221A750 @@ -6510,7 +6510,7 @@ _0221A55E: ldr r1, [r1] ldr r2, _0221A768 ; =0x02241A64 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221A578 b _0221A750 @@ -6533,7 +6533,7 @@ _0221A588: _0221A594: cmp r2, #2 bne _0221A5BE - bl FUN_020A7AC8 + bl WCM_CleanupAsync cmp r0, #3 bne _0221A5A2 b _0221A750 @@ -6564,7 +6564,7 @@ _0221A5C4: ldr r1, [r1] ldr r2, _0221A774 ; =0x02241A6C ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 bne _0221A5DA b _0221A750 @@ -6630,7 +6630,7 @@ _0221A638: ldr r1, [r1] ldr r2, _0221A768 ; =0x02241A64 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 beq _0221A750 mov r1, #3 @@ -6649,7 +6649,7 @@ _0221A638: _0221A66A: cmp r2, #2 bne _0221A690 - bl FUN_020A7AC8 + bl WCM_CleanupAsync cmp r0, #3 beq _0221A750 mov r1, #3 @@ -6674,7 +6674,7 @@ _0221A690: ldr r1, [r1] ldr r2, _0221A774 ; =0x02241A6C ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 beq _0221A750 mov r1, #3 @@ -6718,7 +6718,7 @@ _0221A6E4: ldr r0, [r0] cmp r0, #2 bne _0221A750 - bl FUN_020A7E0C + bl WCM_Finish mov r1, #0 ldr r0, _0221A758 ; =0x02241A78 str r1, [r0] @@ -13768,7 +13768,7 @@ MOD13_0221DD4C: ; 0x0221DD4C ldr r0, _0221DE28 ; =0x02241AEC ldr r0, [r0] ldr r1, _0221DE3C ; =0x00002300 - bl FUN_020A7E80 + bl WCM_Init cmp r0, #0 beq _0221DDCC add r0, r4, #0 @@ -13790,7 +13790,7 @@ _0221DDD2: ldr r0, _0221DE24 ; =0x02241AB8 ldr r0, [r0] ldr r1, _0221DE40 ; =MOD13_0221E178 - bl FUN_020A7BD4 + bl WCM_StartupAsync cmp r0, #3 beq _0221DDF8 add r0, r4, #0 @@ -13885,7 +13885,7 @@ _0221DEA0: ldr r1, [r1] ldr r2, _0221DEE4 ; =0x02241B08 ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 bne _0221DED2 mov r1, #8 @@ -13921,7 +13921,7 @@ MOD13_0221DEF4: ; 0x0221DEF4 ldr r0, [r0] cmp r0, #3 bne _0221DF2E - bl FUN_020A7AC8 + bl WCM_CleanupAsync cmp r0, #3 beq _0221DF1A add r0, r4, #0 @@ -13972,7 +13972,7 @@ MOD13_0221DF5C: ; 0x0221DF5C ldr r0, [r0] cmp r0, #7 bne _0221DF88 - bl FUN_020A7488 + bl WCM_DisconnectAsync cmp r0, #3 bne _0221DF88 mov r1, #4 @@ -14081,7 +14081,7 @@ _0221E02A: ldr r1, [r1] ldr r2, _0221E088 ; =0x02241B10 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221E078 mov r1, #6 @@ -14133,8 +14133,8 @@ MOD13_0221E0A8: ; 0x0221E0A8 add r5, r0, #0 add r7, r1, #0 mov r0, #1 - bl FUN_020A83D0 - bl FUN_020A846C + bl WCM_LockApList + bl WCM_CountApList add r6, r0, #0 cmp r6, #0 ble _0221E0E2 @@ -14146,7 +14146,7 @@ _0221E0C6: bge _0221E0E2 lsl r0, r4, #0x10 lsr r0, r0, #0x10 - bl FUN_020A8358 + bl WCM_PointApList add r1, r5, #0 mov r2, #0xc0 bl MIi_CpuCopy32 @@ -14156,7 +14156,7 @@ _0221E0C6: blt _0221E0C6 _0221E0E2: mov r0, #0 - bl FUN_020A83D0 + bl WCM_LockApList add r0, r6, #0 add sp, #4 pop {r4, r5, r6, r7} @@ -14193,7 +14193,7 @@ _0221E120: mov r0, #0 add r1, r0, #0 add r2, r0, #0 - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 beq _0221E164 mov r0, #0 @@ -14201,7 +14201,7 @@ _0221E120: pop {r3} bx r3 _0221E136: - bl FUN_020A7488 + bl WCM_DisconnectAsync cmp r0, #3 beq _0221E164 mov r0, #0 @@ -14212,7 +14212,7 @@ _0221E146: ldr r0, _0221E170 ; =0x02241AB8 ldr r0, [r0] ldr r1, _0221E174 ; =MOD13_0221E178 - bl FUN_020A7BD4 + bl WCM_StartupAsync cmp r0, #3 beq _0221E164 mov r0, #0 @@ -14297,7 +14297,7 @@ _0221E1D6: ldr r1, [r1] ldr r2, _0221E528 ; =0x02241B10 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221E1F0 b _0221E556 @@ -14328,7 +14328,7 @@ _0221E212: ldr r1, [r1] ldr r2, _0221E534 ; =0x02241B08 ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 bne _0221E228 b _0221E556 @@ -14472,7 +14472,7 @@ _0221E30E: ldr r1, [r1] ldr r2, _0221E528 ; =0x02241B10 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221E328 b _0221E556 @@ -14495,7 +14495,7 @@ _0221E338: _0221E344: cmp r2, #2 bne _0221E36E - bl FUN_020A7AC8 + bl WCM_CleanupAsync cmp r0, #3 bne _0221E352 b _0221E556 @@ -14526,7 +14526,7 @@ _0221E374: ldr r1, [r1] ldr r2, _0221E534 ; =0x02241B08 ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 bne _0221E38A b _0221E556 @@ -14592,7 +14592,7 @@ _0221E3E8: ldr r1, [r1] ldr r2, _0221E528 ; =0x02241B10 ldr r2, [r2] - bl FUN_020A7A90 + bl WCM_SearchAsync cmp r0, #3 bne _0221E402 b _0221E556 @@ -14615,7 +14615,7 @@ _0221E412: _0221E41E: cmp r2, #2 bne _0221E448 - bl FUN_020A7AC8 + bl WCM_CleanupAsync cmp r0, #3 bne _0221E42C b _0221E556 @@ -14644,7 +14644,7 @@ _0221E448: ldr r1, [r1] ldr r2, _0221E534 ; =0x02241B08 ldr r2, [r2] - bl FUN_020A75C0 + bl WCM_ConnectAsync cmp r0, #3 beq _0221E556 mov r1, #3 @@ -14690,7 +14690,7 @@ _0221E4A0: ldr r0, [r0] cmp r0, #2 bne _0221E556 - bl FUN_020A7E0C + bl WCM_Finish mov r1, #0 ldr r0, _0221E518 ; =0x02241ADC str r1, [r0] diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s index de0e7672..bf202f2f 100644 --- a/arm9/modules/80/asm/module_80.s +++ b/arm9/modules/80/asm/module_80.s @@ -1346,7 +1346,7 @@ _0222DFB4: mvn r0, r0 cmp r4, r0 beq _0222DFCC - bl FUN_020A71F8 + bl WCM_GetPhase cmp r0, #9 beq _0222DFC8 mov r4, #0xd diff --git a/arm9/modules/82/asm/module_82.s b/arm9/modules/82/asm/module_82.s index 73c58a93..18e1984d 100644 --- a/arm9/modules/82/asm/module_82.s +++ b/arm9/modules/82/asm/module_82.s @@ -596,7 +596,7 @@ _0222DA18: mvn r0, r0 cmp r4, r0 beq _0222DA30 - bl FUN_020A71F8 + bl WCM_GetPhase cmp r0, #9 beq _0222DA2C mov r4, #5 -- cgit v1.2.3