diff options
-rw-r--r-- | asm/CARD_arm9.s | 1782 | ||||
-rw-r--r-- | asm/PM_arm9.s | 1125 | ||||
-rw-r--r-- | asm/RTC_arm9.s | 1028 | ||||
-rw-r--r-- | asm/WM_arm9.s | 3744 | ||||
-rw-r--r-- | asm/rom2dism.s (renamed from asm/unk_020D5150.s) | 4840 | ||||
-rw-r--r-- | asm/unk_02000E0C.s | 2 | ||||
-rw-r--r-- | asm/unk_020023C0.s | 4 | ||||
-rw-r--r-- | asm/unk_020C9C0C.s | 503 | ||||
-rw-r--r-- | global.inc | 16 | ||||
-rw-r--r-- | pokediamond.lcf | 6 | ||||
-rw-r--r-- | undefined_syms.txt | 4 |
11 files changed, 7701 insertions, 5353 deletions
diff --git a/asm/CARD_arm9.s b/asm/CARD_arm9.s new file mode 100644 index 00000000..9756ce4b --- /dev/null +++ b/asm/CARD_arm9.s @@ -0,0 +1,1782 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start CARD_UnlockBackup +CARD_UnlockBackup: ; 0x020D66A0 + ldr ip, _020D66AC ; =CARDi_UnlockResource + mov r1, #0x2 + bx r12 + .balign 4 +_020D66AC: .word CARDi_UnlockResource + + arm_func_start CARD_LockBackup +CARD_LockBackup: ; 0x020D66B0 + ldr ip, _020D66BC ; =CARDi_LockResource + mov r1, #0x2 + bx r12 + .balign 4 +_020D66BC: .word CARDi_LockResource + + arm_func_start CARD_UnlockRom +CARD_UnlockRom: ; 0x020D66C0 + stmdb sp!, {r4,lr} + mov r4, r0 + bl OS_UnlockCard + mov r0, r4 + mov r1, #0x1 + bl CARDi_UnlockResource + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CARD_LockRom +CARD_LockRom: ; 0x020D66E0 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r1, #0x1 + bl CARDi_LockResource + mov r0, r4 + bl OS_TryLockCard + ldmia sp!, {r4,lr} + bx lr + + arm_func_start CARD_GetResultCode +CARD_GetResultCode: ; 0x020D6700 + ldr r0, _020D6710 ; =0x021D55C0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D6710: .word 0x021D55C0 + + arm_func_start FUN_020D6714 +FUN_020D6714: ; 0x020D6714 + ldr r0, _020D672C ; =0x021D55C0 + ldr r0, [r0, #0x114] + ands r0, r0, #0x4 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + .balign 4 +_020D672C: .word 0x021D55C0 + + arm_func_start CARDi_WaitAsync +CARDi_WaitAsync: ; 0x020D6730 + stmdb sp!, {r4-r6,lr} + ldr r6, _020D6788 ; =0x021D55C0 + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r5, r0 + ands r0, r1, #0x4 + beq _020D6764 + add r4, r6, #0x10c +_020D6750: + mov r0, r4 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x4 + bne _020D6750 +_020D6764: + mov r0, r5 + bl OS_RestoreInterrupts +_020D676C: ; 0x020D676C + ldr r0, [r6, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D6788: .word 0x021D55C0 + + arm_func_start CARD_Enable +CARD_Enable: ; 0x020D678C + ldr r1, _020D6798 ; =0x021D555C + str r0, [r1, #0x0] + bx lr + .balign 4 +_020D6798: .word 0x021D555C + + arm_func_start CARD_CheckEnabled +CARD_CheckEnabled: ; 0x020D679C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl CARD_IsEnabled +_020D67A8: ; 0x020D67A8 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start CARD_IsEnabled +CARD_IsEnabled: + ldr r0, _020D67D4 ; =0x021D555C + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D67D4: .word 0x021D555C + + arm_func_start CARDi_InitCommon +CARDi_InitCommon: ; 0x020D67D8 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r4, _020D68B8 ; =0x021D55C0 + ldr r1, _020D68BC ; =0x021D5560 + mvn r2, #0x2 + mov r0, #0x0 + str r2, [r4, #0x8] + mov r2, #0x60 + str r0, [r4, #0xc] + str r0, [r4, #0x18] + str r1, [r4, #0x0] + bl MIi_CpuClearFast + ldr r0, _020D68BC ; =0x021D5560 + mov r1, #0x60 + bl DC_FlushRange + ldr r0, _020D68C0 ; =0x027FFC40 + ldrh r0, [r0, #0x0] + cmp r0, #0x2 + beq _020D6834 + ldr r0, _020D68C4 ; =0x027FFE00 + ldr r1, _020D68C8 ; =0x027FFA80 + mov r2, #0x160 + bl MI_CpuCopy8 +_020D6834: + mov r2, #0x0 + str r2, [r4, #0x14] + ldr r0, [r4, #0x14] + mov r1, #0x4 + str r0, [r4, #0x10] + str r2, [r4, #0x110] + ldr r3, [r4, #0x110] + mov r0, #0x400 + str r3, [r4, #0x10c] + str r1, [r4, #0x108] + str r0, [sp, #0x0] + ldr r12, [r4, #0x108] + ldr r1, _020D68CC ; =CARDi_TaskThread + ldr r3, _020D68D0 ; =0x021D5BE0 + add r0, r4, #0x44 + str r12, [sp, #0x4] + bl OS_CreateThread + add r0, r4, #0x44 + bl OS_WakeupThreadDirect + ldr r1, _020D68D4 ; =CARDi_OnFifoRecv + mov r0, #0xb + bl PXI_SetFifoRecvCallback + ldr r0, _020D68C0 ; =0x027FFC40 + ldrh r0, [r0, #0x0] + cmp r0, #0x2 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + mov r0, #0x1 + bl CARD_Enable + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D68B8: .word 0x021D55C0 +_020D68BC: .word 0x021D5560 +_020D68C0: .word 0x027FFC40 +_020D68C4: .word 0x027FFE00 +_020D68C8: .word 0x027FFA80 +_020D68CC: .word CARDi_TaskThread +_020D68D0: .word 0x021D5BE0 +_020D68D4: .word CARDi_OnFifoRecv + + arm_func_start CARDi_UnlockResource +CARDi_UnlockResource: ; 0x020D68D8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r5, _020D6978 ; =0x021D55C0 + mov r7, r0 + mov r6, r1 + bl OS_DisableInterrupts + mov r1, r5 + mov r4, r0 + ldr r0, [r1, #0x8] + cmp r0, r7 + bne _020D6910 + ldr r0, [r5, #0xc] + cmp r0, #0x0 + bne _020D6918 +_020D6910: + bl OS_Terminate + b _020D6958 +_020D6918: + ldr r0, [r5, #0x18] + cmp r0, r6 + beq _020D6928 + bl OS_Terminate +_020D6928: + ldr r0, [r5, #0xc] + sub r0, r0, #0x1 + str r0, [r5, #0xc] + ldr r0, [r5, #0xc] + cmp r0, #0x0 + bne _020D6958 + mvn r0, #0x2 + str r0, [r5, #0x8] + mov r1, #0x0 + add r0, r5, #0x10 + str r1, [r5, #0x18] + bl OS_WakeupThread +_020D6958: + ldr r1, [r5, #0x0] + mov r2, #0x0 + mov r0, r4 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D6978: .word 0x021D55C0 + + arm_func_start CARDi_LockResource +CARDi_LockResource: ; 0x020D697C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r5, _020D6A14 ; =0x021D55C0 + mov r7, r0 + mov r6, r1 + bl OS_DisableInterrupts + ldr r1, [r5, #0x8] + mov r4, r0 + cmp r1, r7 + bne _020D69B8 + ldr r0, [r5, #0x18] + cmp r0, r6 + beq _020D69E8 + bl OS_Terminate + b _020D69E8 +_020D69B8: + ldr r0, [r5, #0x8] + mvn r8, #0x2 + cmp r0, r8 + beq _020D69E0 + add r9, r5, #0x10 +_020D69CC: + mov r0, r9 + bl OS_SleepThread + ldr r0, [r5, #0x8] + cmp r0, r8 + bne _020D69CC +_020D69E0: + str r7, [r5, #0x8] + str r6, [r5, #0x18] +_020D69E8: + ldr r1, [r5, #0xc] + mov r0, r4 + add r1, r1, #0x1 + str r1, [r5, #0xc] + ldr r1, [r5, #0x0] + mov r2, #0x0 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020D6A14: .word 0x021D55C0 + + arm_func_start CARDi_SetTask +CARDi_SetTask: ; 0x020D6A18 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r4, _020D6A5C ; =0x021D55C0 + mov r5, r0 + ldr r1, [r4, #0x108] + add r0, r4, #0x44 + bl OS_SetThreadPriority + add r0, r4, #0x44 + str r0, [r4, #0x104] + str r5, [r4, #0x40] + ldr r1, [r4, #0x114] + orr r1, r1, #0x8 + str r1, [r4, #0x114] + bl OS_WakeupThreadDirect + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D6A5C: .word 0x021D55C0 + + arm_func_start FUN_020D6A60 +FUN_020D6A60: ; 0x020D6A60 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020D6D60 ; =0x021D55C0 + mov r5, r0 + ldr r4, [r1, #0x0] + mov r1, #0x0 + add r0, r4, #0x18 + mov r2, #0x48 + bl MI_CpuFill8 +_020D6A84: ; 0x020D6A84 + cmp r5, #0x0 + str r5, [r4, #0x4] + mov r0, #0x3f + addeq sp, sp, #0x4 + str r0, [r4, #0x4c] + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r0, r5, asr #0x8 + and r0, r0, #0xff + mov r2, #0x1 + mov r3, r2, lsl r0 + and r1, r5, #0xff + str r3, [r4, #0x18] + mov r0, #0xff + strb r0, [r4, #0x48] + cmp r1, #0x1 + bne _020D6B80 + cmp r3, #0x200 + beq _020D6AE4 + cmp r3, #0x2000 + beq _020D6B04 + cmp r3, #0x10000 + beq _020D6B28 + b _020D6D38 +_020D6AE4: + mov r0, #0x10 + str r0, [r4, #0x20] + str r2, [r4, #0x24] + mov r0, #0x5 + str r0, [r4, #0x28] + mov r0, #0xf0 + strb r0, [r4, #0x48] + b _020D6B48 +_020D6B04: + mov r0, #0x20 + str r0, [r4, #0x20] + mov r0, #0x2 + str r0, [r4, #0x24] + mov r0, #0x5 + str r0, [r4, #0x28] + mov r0, #0x0 + strb r0, [r4, #0x48] + b _020D6B48 +_020D6B28: + mov r0, #0x80 + str r0, [r4, #0x20] + mov r0, #0x2 + str r0, [r4, #0x24] + mov r0, #0xa + str r0, [r4, #0x28] + mov r0, #0x0 + strb r0, [r4, #0x48] +_020D6B48: + ldr r0, [r4, #0x20] + add sp, sp, #0x4 + str r0, [r4, #0x1c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x40 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x100 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x200 + str r0, [r4, #0x4c] + ldmia sp!, {r4-r5,lr} + bx lr +_020D6B80: + cmp r1, #0x2 + bne _020D6CD8 + cmp r3, #0x100000 + bhi _020D6BB8 + cmp r3, #0x100000 + bhs _020D6BD8 + cmp r3, #0x40000 + bhi _020D6BAC + cmp r3, #0x40000 + beq _020D6BD8 + b _020D6D38 +_020D6BAC: + cmp r3, #0x80000 + beq _020D6BD8 + b _020D6D38 +_020D6BB8: + cmp r3, #0x200000 + bhi _020D6BCC + cmp r3, #0x200000 + beq _020D6C10 + b _020D6D38 +_020D6BCC: + cmp r3, #0x800000 + beq _020D6C48 + b _020D6D38 +_020D6BD8: + mov r0, #0x19 + str r0, [r4, #0x2c] + mov r1, #0x12c + str r1, [r4, #0x30] + ldr r0, _020D6D64 ; =0x00001388 + str r1, [r4, #0x44] + str r0, [r4, #0x3c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x80 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x400 + str r0, [r4, #0x4c] + b _020D6C7C +_020D6C10: + mov r1, #0x3e8 + ldr r0, _020D6D68 ; =0x00000BB8 + str r1, [r4, #0x3c] + ldr r1, _020D6D6C ; =0x00004268 + str r0, [r4, #0x40] + ldr r0, _020D6D70 ; =0x00009C40 + str r1, [r4, #0x34] + str r0, [r4, #0x38] + mov r0, #0x0 + strb r0, [r4, #0x48] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x1000 + str r0, [r4, #0x4c] + b _020D6C7C +_020D6C48: + mov r1, #0x3e8 + ldr r0, _020D6D68 ; =0x00000BB8 + str r1, [r4, #0x3c] + ldr r1, _020D6D74 ; =0x000109A0 + str r0, [r4, #0x40] + ldr r0, _020D6D78 ; =0x00027100 + str r1, [r4, #0x34] + str r0, [r4, #0x38] + mov r0, #0x0 + strb r0, [r4, #0x48] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x1000 + str r0, [r4, #0x4c] +_020D6C7C: + mov r0, #0x10000 + str r0, [r4, #0x1c] + mov r0, #0x100 + str r0, [r4, #0x20] + mov r0, #0x3 + str r0, [r4, #0x24] + mov r0, #0x5 + str r0, [r4, #0x28] + ldr r0, [r4, #0x4c] + add sp, sp, #0x4 + orr r0, r0, #0x40 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x100 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x200 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x800 + str r0, [r4, #0x4c] + ldmia sp!, {r4-r5,lr} + bx lr +_020D6CD8: + cmp r1, #0x3 + bne _020D6D38 + cmp r3, #0x2000 + beq _020D6CF0 + cmp r3, #0x8000 + bne _020D6D38 +_020D6CF0: + str r3, [r4, #0x20] + str r3, [r4, #0x1c] + mov r0, #0x2 + str r0, [r4, #0x24] + mov r0, #0x0 + strb r0, [r4, #0x48] + ldr r0, [r4, #0x4c] + add sp, sp, #0x4 + orr r0, r0, #0x40 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x100 + str r0, [r4, #0x4c] + ldr r0, [r4, #0x4c] + orr r0, r0, #0x200 + str r0, [r4, #0x4c] + ldmia sp!, {r4-r5,lr} + bx lr +_020D6D38: + mov r1, #0x0 + str r1, [r4, #0x4] + str r1, [r4, #0x18] + ldr r0, _020D6D60 ; =0x021D55C0 + mov r1, #0x3 + ldr r0, [r0, #0x0] + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D6D60: .word 0x021D55C0 +_020D6D64: .word 0x00001388 +_020D6D68: .word 0x00000BB8 +_020D6D6C: .word 0x00004268 +_020D6D70: .word 0x00009C40 +_020D6D74: .word 0x000109A0 +_020D6D78: .word 0x00027100 + + arm_func_start CARD_CancelBackupAsync +CARD_CancelBackupAsync: ; 0x020D6D7C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020D6DA8 ; =0x021D55C0 + ldr r2, [r1, #0x114] + orr r2, r2, #0x40 + str r2, [r1, #0x114] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D6DA8: .word 0x021D55C0 + + arm_func_start CARD_TryWaitBackupAsync +CARD_TryWaitBackupAsync: ; 0x020D6DAC + ldr ip, _020D6DB4 ; =FUN_020D6714 + bx r12 + .balign 4 +_020D6DB4: .word FUN_020D6714 + + arm_func_start CARD_WaitBackupAsync +CARD_WaitBackupAsync: ; 0x020D6DB8 + ldr ip, _020D6DC0 ; =CARDi_WaitAsync + bx r12 + .balign 4 +_020D6DC0: .word CARDi_WaitAsync + + arm_func_start CARD_IdentifyBackup +CARD_IdentifyBackup: ; 0x020D6DC4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, _020D6F00 ; =0x02000C3C + ldr r7, _020D6F04 ; =0x021D55C0 + bl FUN_02000B60 +_020D6DDC: ; 0x020D6DDC + cmp r5, #0x0 + bne _020D6DE8 + bl OS_Terminate +_020D6DE8: + bl CARD_CheckEnabled + bl OS_DisableInterrupts + ldr r1, [r7, #0x114] + mov r4, r0 + ands r0, r1, #0x4 + beq _020D6E18 + add r6, r7, #0x10c +_020D6E04: + mov r0, r6 + bl OS_SleepThread + ldr r0, [r7, #0x114] + ands r0, r0, #0x4 + bne _020D6E04 +_020D6E18: + ldr r0, [r7, #0x114] + mov r1, #0x0 + orr r0, r0, #0x4 + str r0, [r7, #0x114] + str r1, [r7, #0x38] + mov r0, r4 + str r1, [r7, #0x3c] + bl OS_RestoreInterrupts + mov r0, r5 + bl FUN_020D6A60 + ldr r0, _020D6F08 ; =0x021D3498 + ldr r1, _020D6F04 ; =0x021D55C0 + ldr r2, [r0, #0x4] + mov r0, r7 + str r2, [r1, #0x104] + mov r1, #0x2 + mov r2, #0x1 + bl CARDi_Request +_020D6E60: ; 0x020D6E60 + ldr r0, [r7, #0x0] + mov r1, #0x0 + str r1, [r0, #0xc] + ldr r0, [r7, #0x0] + add r1, r7, #0x120 + str r1, [r0, #0x10] + ldr r1, [r7, #0x0] + mov r2, #0x1 + mov r0, r7 + str r2, [r1, #0x14] + mov r1, #0x6 + bl CARDi_Request + ldr r6, [r7, #0x38] + ldr r5, [r7, #0x3c] + bl OS_DisableInterrupts + mov r4, r0 + ldr r1, [r7, #0x114] + add r0, r7, #0x10c + bic r1, r1, #0x4c + str r1, [r7, #0x114] + bl OS_WakeupThread + ldr r0, [r7, #0x114] + ands r0, r0, #0x10 + beq _020D6EC8 + add r0, r7, #0x44 + bl OS_WakeupThreadDirect +_020D6EC8: + mov r0, r4 + bl OS_RestoreInterrupts +_020D6ED0: ; 0x020D6ED0 + cmp r6, #0x0 + beq _020D6EE0 + mov r0, r5 + blx r6 +_020D6EE0: + ldr r0, [r7, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D6F00: .word 0x02000C3C +_020D6F04: .word 0x021D55C0 +_020D6F08: .word 0x021D3498 + + arm_func_start CARD_GetBackupSectorSize +CARD_GetBackupSectorSize: ; 0x020D6F0C + ldr r0, _020D6F1C ; =0x021D55C0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x1c] + bx lr + .balign 4 +_020D6F1C: .word 0x021D55C0 + + arm_func_start CARDi_RequestStreamCommand +CARDi_RequestStreamCommand: ; 0x020D6F20 + stmdb sp!, {r4-r10,lr} + mov r10, r0 + ldr r6, _020D7004 ; =0x021D55C0 + ldr r0, _020D7008 ; =0x02000C3C + mov r9, r1 + mov r8, r2 + mov r7, r3 + bl FUN_02000B60 + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r5, r0 + ands r0, r1, #0x4 + beq _020D6F6C + add r4, r6, #0x10c +_020D6F58: + mov r0, r4 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x4 + bne _020D6F58 +_020D6F6C: + ldr r0, [r6, #0x114] + ldr r1, [sp, #0x20] + orr r0, r0, #0x4 + str r0, [r6, #0x114] + str r7, [r6, #0x38] + mov r0, r5 + str r1, [r6, #0x3c] + bl OS_RestoreInterrupts + str r10, [r6, #0x1c] + str r9, [r6, #0x20] + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + str r8, [r6, #0x24] + ldr r2, [sp, #0x2c] + str r1, [r6, #0x2c] + ldr r1, [sp, #0x30] + str r2, [r6, #0x30] + str r1, [r6, #0x34] + cmp r0, #0x0 + beq _020D6FD0 + ldr r0, _020D700C ; =CARDi_RequestStreamCommandCore + bl CARDi_SetTask + mov r0, #0x1 + ldmia sp!, {r4-r10,lr} + bx lr +_020D6FD0: + ldr r0, _020D7010 ; =0x021D3498 + ldr r1, _020D7004 ; =0x021D55C0 + ldr r2, [r0, #0x4] + mov r0, r6 + str r2, [r1, #0x104] + bl CARDi_RequestStreamCommandCore +_020D6FE8: ; 0x020D6FE8 + ldr r0, [r6, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020D7004: .word 0x021D55C0 +_020D7008: .word 0x02000C3C +_020D700C: .word CARDi_RequestStreamCommandCore +_020D7010: .word 0x021D3498 + + arm_func_start CARDi_RequestStreamCommandCore +CARDi_RequestStreamCommandCore: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r0 + ldr r8, [r9, #0x2c] + ldr r0, _020D720C ; =0x02000C3C + ldr r7, [r9, #0x34] + ldr r10, [r9, #0x30] + mov r6, #0x100 + bl FUN_02000B60 + cmp r8, #0xb + bne _020D7048 + bl CARD_GetBackupSectorSize + mov r6, r0 +_020D7048: + mov r0, #0x1 + add r4, r9, #0x120 + mov r11, #0x9 + str r0, [sp, #0x0] +_020D7058: + ldr r5, [r9, #0x24] + ldr r0, [r9, #0x0] + cmp r6, r5 + movcc r5, r6 + str r5, [r0, #0x14] + ldr r0, [r9, #0x114] + ands r0, r0, #0x40 + beq _020D7094 + ldr r0, [r9, #0x114] + mov r1, #0x7 + bic r0, r0, #0x40 + str r0, [r9, #0x114] + ldr r0, [r9, #0x0] + str r1, [r0, #0x0] + b _020D71A8 +_020D7094: + cmp r7, #0x3 + addls pc, pc, r7, lsl #0x2 + b _020D7124 +_020D70A0: + b _020D70B0 +_020D70A4: + b _020D70D4 +_020D70A8: + b _020D70D4 +_020D70AC: + b _020D710C +_020D70B0: + mov r1, r5 + add r0, r9, #0x120 + bl DC_InvalidateRange + ldr r1, [r9, #0x1c] + ldr r0, [r9, #0x0] + str r1, [r0, #0xc] + ldr r0, [r9, #0x0] + str r4, [r0, #0x10] + b _020D7124 +_020D70D4: + ldr r0, [r9, #0x1c] + mov r1, r4 + mov r2, r5 + bl MI_CpuCopy8 + mov r1, r5 + add r0, r9, #0x120 + bl DC_FlushRange + bl DC_WaitWriteBufferEmpty +_020D70F4: ; 0x020D70F4 + ldr r0, [r9, #0x0] + str r4, [r0, #0xc] + ldr r1, [r9, #0x20] + ldr r0, [r9, #0x0] + str r1, [r0, #0x10] + b _020D7124 +_020D710C: + ldr r1, [r9, #0x1c] + ldr r0, [r9, #0x0] + str r1, [r0, #0xc] + ldr r1, [r9, #0x20] + ldr r0, [r9, #0x0] + str r1, [r0, #0x10] +_020D7124: + mov r0, r9 + mov r1, r8 + mov r2, r10 + bl CARDi_Request +_020D7134: ; 0x020D7134 + cmp r0, #0x0 + beq _020D71A8 + cmp r7, #0x2 + bne _020D7160 + ldr r2, [sp, #0x0] + mov r0, r9 + mov r1, r11 + bl CARDi_Request +_020D7154: ; 0x020D7154 + cmp r0, #0x0 + bne _020D7178 + b _020D71A8 +_020D7160: + cmp r7, #0x0 + bne _020D7178 + ldr r1, [r9, #0x20] + mov r2, r5 + add r0, r9, #0x120 + bl MI_CpuCopy8 +_020D7178: + ldr r0, [r9, #0x1c] + add r0, r0, r5 + str r0, [r9, #0x1c] + ldr r0, [r9, #0x20] + add r0, r0, r5 + str r0, [r9, #0x20] + ldr r0, [r9, #0x24] + sub r0, r0, r5 + str r0, [r9, #0x24] + ldr r0, [r9, #0x24] + cmp r0, #0x0 + bne _020D7058 +_020D71A8: + ldr r6, [r9, #0x38] + ldr r5, [r9, #0x3c] + bl OS_DisableInterrupts + ldr r1, [r9, #0x114] + mov r4, r0 + bic r0, r1, #0x4c + str r0, [r9, #0x114] + add r0, r9, #0x10c + bl OS_WakeupThread + ldr r0, [r9, #0x114] + ands r0, r0, #0x10 + beq _020D71E0 + add r0, r9, #0x44 + bl OS_WakeupThreadDirect +_020D71E0: + mov r0, r4 + bl OS_RestoreInterrupts +_020D71E8: ; 0x020D71E8 + cmp r6, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + mov r0, r5 + blx r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D720C: .word 0x02000C3C + + arm_func_start CARDi_GetRomAccessor +CARDi_GetRomAccessor: ; 0x020D7210 + ldr r0, _020D7218 ; =CARDi_ReadCard + bx lr + .balign 4 +_020D7218: .word CARDi_ReadCard + + arm_func_start CARD_WaitRomAsync +CARD_WaitRomAsync: ; 0x020D721C + ldr ip, _020D7224 ; =CARDi_WaitAsync + bx r12 + .balign 4 +_020D7224: .word CARDi_WaitAsync + + arm_func_start CARD_Init +CARD_Init: ; 0x020D7228 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020D72A0 ; =0x021D55C0 + ldr r0, [r12, #0x114] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + mov r0, #0x1 + str r0, [r12, #0x114] + mov r3, #0x0 + str r3, [r12, #0x24] + ldr r0, [r12, #0x24] + mvn r1, #0x0 + str r0, [r12, #0x20] + ldr r2, [r12, #0x20] + ldr r0, _020D72A4 ; =0x021D5BE0 + str r2, [r12, #0x1c] + str r1, [r12, #0x28] + str r3, [r12, #0x38] + str r3, [r12, #0x3c] + str r3, [r0, #0x0] + bl CARDi_InitCommon + bl CARDi_GetRomAccessor + ldr r1, _020D72A8 ; =0x021D5C00 + str r0, [r1, #0x0] + bl CARD_InitPulledOutCallback + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D72A0: .word 0x021D55C0 +_020D72A4: .word 0x021D5BE0 +_020D72A8: .word 0x021D5C00 + + arm_func_start CARDi_ReadRom +CARDi_ReadRom: ; 0x020D72AC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r6, _020D73C0 ; =0x021D55C0 + mov r10, r0 + mov r9, r1 + mov r8, r2 + mov r7, r3 + ldr fp, _020D73C4 ; =0x021D5C00 + bl CARD_CheckEnabled + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r5, r0 + ands r0, r1, #0x4 + beq _020D72FC + add r4, r6, #0x10c +_020D72E8: + mov r0, r4 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x4 + bne _020D72E8 +_020D72FC: + ldr r1, [r6, #0x114] + ldr r0, [sp, #0x28] + orr r1, r1, #0x4 + str r1, [r6, #0x114] + ldr r1, [sp, #0x2c] + str r0, [r6, #0x38] + mov r0, r5 + str r1, [r6, #0x3c] + bl OS_RestoreInterrupts + ldr r0, _020D73C8 ; =0x021D5BE0 + str r10, [r6, #0x28] + ldr r0, [r0, #0x0] + cmp r10, #0x3 + add r0, r9, r0 + str r0, [r6, #0x1c] + str r8, [r6, #0x20] + str r7, [r6, #0x24] + bhi _020D734C + mov r0, r10 + bl MI_StopDma +_020D734C: + mov r0, r11 + bl CARDi_TryReadCardDma +_020D7354: ; 0x020D7354 + cmp r0, #0x0 + beq _020D7380 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r11,lr} + bxne lr + bl CARD_WaitRomAsync + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr +_020D7380: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + beq _020D73A0 + ldr r0, _020D73CC ; =CARDi_ReadRomSyncCore + bl CARDi_SetTask + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr +_020D73A0: + ldr r1, _020D73D0 ; =0x021D3498 + mov r0, r6 + ldr r1, [r1, #0x4] + str r1, [r6, #0x104] + bl CARDi_ReadRomSyncCore + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D73C0: .word 0x021D55C0 +_020D73C4: .word 0x021D5C00 +_020D73C8: .word 0x021D5BE0 +_020D73CC: .word CARDi_ReadRomSyncCore +_020D73D0: .word 0x021D3498 + + arm_func_start CARDi_ReadRomSyncCore +CARDi_ReadRomSyncCore: ; 0x020D73D4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r4, _020D7478 ; =0x021D5C00 + mov r0, r4 + bl CARDi_ReadFromCache +_020D73E8: ; 0x020D73E8 + cmp r0, #0x0 + beq _020D73FC + ldr r1, [r4, #0x0] + mov r0, r4 + blx r1 +_020D73FC: + ldr r7, _020D747C ; =0x021D55C0 + bl CARDi_ReadRomIDCore + bl CARDi_CheckPulledOutCore +_020D7408: ; 0x020D7408 + ldr r0, [r7, #0x0] + mov r1, #0x0 + str r1, [r0, #0x0] + ldr r6, [r7, #0x38] + ldr r5, [r7, #0x3c] + bl OS_DisableInterrupts + ldr r1, [r7, #0x114] + mov r4, r0 + bic r0, r1, #0x4c + str r0, [r7, #0x114] + add r0, r7, #0x10c + bl OS_WakeupThread + ldr r0, [r7, #0x114] + ands r0, r0, #0x10 + beq _020D744C + add r0, r7, #0x44 + bl OS_WakeupThreadDirect +_020D744C: + mov r0, r4 + bl OS_RestoreInterrupts +_020D7454: ; 0x020D7454 + cmp r6, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r5 + blx r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D7478: .word 0x021D5C00 +_020D747C: .word 0x021D55C0 + + arm_func_start CARDi_ReadRomIDCore +CARDi_ReadRomIDCore: ; 0x020D7480 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, #0xb8000000 + mov r1, #0x0 + bl CARDi_SetRomOp + ldr r1, _020D74DC ; =0x02106A50 + mov r0, #0x2000 + ldr r1, [r1, #0x0] + rsb r0, r0, #0x0 + ldr r2, [r1, #0x60] + ldr r1, _020D74E0 ; =0x040001A4 + bic r2, r2, #0x7000000 + orr r2, r2, #0xa7000000 + and r0, r2, r0 + str r0, [r1, #0x0] +_020D74BC: + ldr r0, [r1, #0x0] + ands r0, r0, #0x800000 + beq _020D74BC + ldr r0, _020D74E4 ; =0x04100010 + ldr r0, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D74DC: .word 0x02106A50 +_020D74E0: .word 0x040001A4 +_020D74E4: .word 0x04100010 + + arm_func_start CARDi_ReadCard +CARDi_ReadCard: ; 0x020D74E8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r10, r0 + ldr sb, _020D75DC ; =0x021D55C0 + add r7, r10, #0x20 + ldr r5, _020D75E0 ; =0x04100010 + ldr r6, _020D75E4 ; =0x040001A4 + mov r11, #0x0 + mov r0, #0x200 + rsb r4, r0, #0x0 +_020D7510: + ldr r0, [r9, #0x1c] + and r1, r0, r4 + cmp r1, r0 + bne _020D7538 + ldr r8, [r9, #0x20] + ands r0, r8, #0x3 + bne _020D7538 + ldr r0, [r9, #0x24] + cmp r0, #0x200 + bhs _020D7540 +_020D7538: + mov r8, r7 + str r1, [r10, #0x8] +_020D7540: + mov r0, r1, lsr #0x8 + orr r0, r0, #0xb7000000 + mov r1, r1, lsl #0x18 + bl CARDi_SetRomOp + ldr r1, [r10, #0x4] + mov r0, r11 + str r1, [r6, #0x0] +_020D755C: + ldr r2, [r6, #0x0] + ands r1, r2, #0x800000 + beq _020D7578 + ldr r1, [r5, #0x0] + cmp r0, #0x200 + strcc r1, [r8, r0, lsl #0x2] + addcc r0, r0, #0x1 +_020D7578: + ands r1, r2, #0x80000000 + bne _020D755C + ldr r0, [r9, #0x20] + cmp r8, r0 + bne _020D75C0 + ldr r2, [r9, #0x1c] + ldr r1, [r9, #0x20] + ldr r0, [r9, #0x24] + add r2, r2, #0x200 + add r1, r1, #0x200 + subs r0, r0, #0x200 + str r2, [r9, #0x1c] + str r1, [r9, #0x20] + str r0, [r9, #0x24] + bne _020D7510 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr +_020D75C0: + mov r0, r10 + bl CARDi_ReadFromCache +_020D75C8: ; 0x020D75C8 + cmp r0, #0x0 + bne _020D7510 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D75DC: .word 0x021D55C0 +_020D75E0: .word 0x04100010 +_020D75E4: .word 0x040001A4 + + arm_func_start CARDi_TryReadCardDma +CARDi_TryReadCardDma: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr fp, _020D7748 ; =0x021D55C0 + mov r7, #0x0 + ldr r9, [r11, #0x20] + mov r10, r0 + mov r6, r7 + mov r5, r7 + mov r1, r7 + ands r4, r9, #0x1f + ldr r8, [r11, #0x24] + bne _020D7624 + ldr r0, [r11, #0x28] + cmp r0, #0x3 + movls r1, #0x1 +_020D7624: + cmp r1, #0x0 + beq _020D7678 + bl OS_GetDTCMAddress + ldr r1, _020D774C ; =0x01FF8000 + add r2, r9, r8 + cmp r2, r1 + mov r3, #0x1 + mov r1, #0x0 + bls _020D7650 + cmp r9, #0x2000000 + movcc r1, r3 +_020D7650: + cmp r1, #0x0 + bne _020D7670 + cmp r0, r2 + bhs _020D766C + add r0, r0, #0x4000 + cmp r0, r9 + bhi _020D7670 +_020D766C: + mov r3, #0x0 +_020D7670: + cmp r3, #0x0 + moveq r5, #0x1 +_020D7678: + cmp r5, #0x0 + beq _020D7694 + ldr r1, [r11, #0x1c] + ldr r0, _020D7750 ; =0x000001FF + orr r1, r1, r8 + ands r0, r1, r0 + moveq r6, #0x1 +_020D7694: + cmp r6, #0x0 + beq _020D76A4 + cmp r8, #0x0 + movne r7, #0x1 +_020D76A4: + ldr r0, _020D7754 ; =0x02106A50 + cmp r7, #0x0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x60] + bic r0, r0, #0x7000000 + orr r0, r0, #0xa1000000 + str r0, [r10, #0x4] + beq _020D7738 + bl OS_DisableInterrupts + mov r5, r0 + mov r0, r9 + mov r1, r8 + bl IC_InvalidateRange +_020D76D8: ; 0x020D76D8 + cmp r4, #0x0 + beq _020D7700 + sub r9, r9, r4 + mov r0, r9 + mov r1, #0x20 + bl DC_StoreRange + add r0, r9, r8 + mov r1, #0x20 + bl DC_StoreRange + add r8, r8, #0x20 +_020D7700: + mov r0, r9 + mov r1, r8 + bl DC_InvalidateRange + bl DC_WaitWriteBufferEmpty + ldr r1, _020D7758 ; =CARDi_OnReadCard + mov r0, #0x80000 + bl OS_SetIrqFunction + mov r0, #0x80000 + bl OS_ResetRequestIrqMask + mov r0, #0x80000 + bl OS_EnableIrqMask + mov r0, r5 + bl OS_RestoreInterrupts + bl CARDi_SetCardDma +_020D7738: + mov r0, r7 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D7748: .word 0x021D55C0 +_020D774C: .word 0x01FF8000 +_020D7750: .word 0x000001FF +_020D7754: .word 0x02106A50 +_020D7758: .word CARDi_OnReadCard + + arm_func_start CARDi_OnReadCard +CARDi_OnReadCard: ; 0x020D775C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r0, _020D7838 ; =0x021D55C0 + ldr r0, [r0, #0x28] + bl MI_StopDma + ldr r0, _020D7838 ; =0x021D55C0 + ldr r3, [r0, #0x1c] + ldr r2, [r0, #0x20] + ldr r1, [r0, #0x24] + add r3, r3, #0x200 + add r2, r2, #0x200 + subs r1, r1, #0x200 + str r3, [r0, #0x1c] + str r2, [r0, #0x20] + str r1, [r0, #0x24] + bne _020D7828 + mov r0, #0x80000 + bl OS_DisableIrqMask + mov r0, #0x80000 + bl OS_ResetRequestIrqMask + ldr r7, _020D7838 ; =0x021D55C0 + bl CARDi_ReadRomIDCore + bl CARDi_CheckPulledOutCore +_020D77B8: ; 0x020D77B8 + ldr r0, [r7, #0x0] + mov r1, #0x0 + str r1, [r0, #0x0] + ldr r6, [r7, #0x38] + ldr r5, [r7, #0x3c] + bl OS_DisableInterrupts + ldr r1, [r7, #0x114] + mov r4, r0 + bic r0, r1, #0x4c + str r0, [r7, #0x114] + add r0, r7, #0x10c + bl OS_WakeupThread + ldr r0, [r7, #0x114] + ands r0, r0, #0x10 + beq _020D77FC + add r0, r7, #0x44 + bl OS_WakeupThreadDirect +_020D77FC: + mov r0, r4 + bl OS_RestoreInterrupts +_020D7804: ; 0x020D7804 + cmp r6, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r5 + blx r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr +_020D7828: + bl CARDi_SetCardDma + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D7838: .word 0x021D55C0 + + arm_func_start CARDi_SetCardDma +CARDi_SetCardDma: ; 0x020D783C + stmdb sp!, {r4,lr} + ldr r4, _020D7884 ; =0x021D55C0 + ldr r1, _020D7888 ; =0x04100010 + ldr r0, [r4, #0x28] + ldr r2, [r4, #0x20] + mov r3, #0x200 + bl MIi_CardDmaCopy32 + ldr r1, [r4, #0x1c] + mov r0, r1, lsr #0x8 + orr r0, r0, #0xb7000000 + mov r1, r1, lsl #0x18 + bl CARDi_SetRomOp + ldr r0, _020D788C ; =0x021D5C00 + ldr r1, _020D7890 ; =0x040001A4 + ldr r0, [r0, #0x4] + str r0, [r1, #0x0] + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7884: .word 0x021D55C0 +_020D7888: .word 0x04100010 +_020D788C: .word 0x021D5C00 +_020D7890: .word 0x040001A4 + + arm_func_start CARDi_SetRomOp +CARDi_SetRomOp: ; 0x020D7894 + ldr r3, _020D790C ; =0x040001A4 +_020D7898: + ldr r2, [r3, #0x0] + ands r2, r2, #0x80000000 + bne _020D7898 + ldr r3, _020D7910 ; =0x040001A1 + mov r12, #0xc0 + ldr r2, _020D7914 ; =0x040001A8 + strb r12, [r3, #0x0] + mov r12, r0, lsr #0x18 + ldr r3, _020D7918 ; =0x040001A9 + strb r12, [r2, #0x0] + mov r12, r0, lsr #0x10 + ldr r2, _020D791C ; =0x040001AA + strb r12, [r3, #0x0] + mov r12, r0, lsr #0x8 + ldr r3, _020D7920 ; =0x040001AB + strb r12, [r2, #0x0] + ldr r2, _020D7924 ; =0x040001AC + strb r0, [r3, #0x0] + mov r3, r1, lsr #0x18 + ldr r0, _020D7928 ; =0x040001AD + strb r3, [r2, #0x0] + mov r3, r1, lsr #0x10 + ldr r2, _020D792C ; =0x040001AE + strb r3, [r0, #0x0] + mov r3, r1, lsr #0x8 + ldr r0, _020D7930 ; =0x040001AF + strb r3, [r2, #0x0] + strb r1, [r0, #0x0] + bx lr + .balign 4 +_020D790C: .word 0x040001A4 +_020D7910: .word 0x040001A1 +_020D7914: .word 0x040001A8 +_020D7918: .word 0x040001A9 +_020D791C: .word 0x040001AA +_020D7920: .word 0x040001AB +_020D7924: .word 0x040001AC +_020D7928: .word 0x040001AD +_020D792C: .word 0x040001AE +_020D7930: .word 0x040001AF + + arm_func_start CARDi_ReadFromCache +CARDi_ReadFromCache: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, _020D79C8 ; =0x021D55C0 + mov r1, #0x200 + ldr r3, [r5, #0x1c] + rsb r1, r1, #0x0 + ldr r2, [r0, #0x8] + and r3, r3, r1 + cmp r3, r2 + bne _020D79AC + ldr r2, [r5, #0x1c] + ldr r1, [r5, #0x24] + sub r3, r2, r3 + rsb r4, r3, #0x200 + cmp r4, r1 + movhi r4, r1 + add r0, r0, #0x20 + ldr r1, [r5, #0x20] + mov r2, r4 + add r0, r0, r3 + bl MI_CpuCopy8 + ldr r0, [r5, #0x1c] + add r0, r0, r4 + str r0, [r5, #0x1c] + ldr r0, [r5, #0x20] + add r0, r0, r4 + str r0, [r5, #0x20] + ldr r0, [r5, #0x24] + sub r0, r0, r4 + str r0, [r5, #0x24] +_020D79AC: + ldr r0, [r5, #0x24] + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D79C8: .word 0x021D55C0 + + arm_func_start CARDi_Request +CARDi_Request: + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r6, r0 + ldr r0, [r6, #0x114] + mov r5, r1 + mov r4, r2 + ands r0, r0, #0x2 + bne _020D7A44 + ldr r1, [r6, #0x114] + mov r0, #0xb + orr r2, r1, #0x2 + mov r1, #0x1 + str r2, [r6, #0x114] + bl PXI_IsCallbackReady +_020D7A04: ; 0x020D7A04 + cmp r0, #0x0 + bne _020D7A34 + mov r9, #0x64 + mov r8, #0xb + mov r7, #0x1 +_020D7A18: + mov r0, r9 + bl OS_SpinWait + mov r0, r8 + mov r1, r7 + bl PXI_IsCallbackReady +_020D7A2C: ; 0x020D7A2C + cmp r0, #0x0 + beq _020D7A18 +_020D7A34: + mov r0, r6 + mov r1, #0x0 + mov r2, #0x1 + bl CARDi_Request +_020D7A44: + ldr r0, [r6, #0x0] + mov r1, #0x60 + bl DC_FlushRange + bl DC_WaitWriteBufferEmpty + mov r9, #0xb + mov r8, #0x1 + mov r7, #0x0 + mov r11, #0x60 +_020D7A64: + str r5, [r6, #0x4] + ldr r0, [r6, #0x114] + orr r0, r0, #0x20 + str r0, [r6, #0x114] +_020D7A74: + mov r0, r9 + mov r1, r5 + mov r2, r8 + bl PXI_SendWordByFifo +_020D7A84: ; 0x020D7A84 + cmp r0, #0x0 + blt _020D7A74 + cmp r5, #0x0 + bne _020D7AB0 + ldr r10, [r6, #0x0] +_020D7A98: + mov r0, r9 + mov r1, r10 + mov r2, r8 + bl PXI_SendWordByFifo +_020D7AA8: ; 0x020D7AA8 + cmp r0, #0x0 + blt _020D7A98 +_020D7AB0: + bl OS_DisableInterrupts + ldr r1, [r6, #0x114] + mov r10, r0 + ands r0, r1, #0x20 + beq _020D7AD8 +_020D7AC4: + mov r0, r7 + bl OS_SleepThread + ldr r0, [r6, #0x114] + ands r0, r0, #0x20 + bne _020D7AC4 +_020D7AD8: + mov r0, r10 + bl OS_RestoreInterrupts +_020D7AE0: ; 0x020D7AE0 + ldr r0, [r6, #0x0] + mov r1, r11 + bl DC_InvalidateRange +_020D7AEC: ; 0x020D7AEC + ldr r0, [r6, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x4 + bne _020D7B08 + sub r4, r4, #0x1 + cmp r4, #0x0 + bgt _020D7A64 +_020D7B08: + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,lr} + bx lr + + arm_func_start CARDi_TaskThread +CARDi_TaskThread: ; 0x020D7B20 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r5, _020D7B78 ; =0x021D55C0 + mov r6, #0x0 + add r7, r5, #0x44 +_020D7B34: + bl OS_DisableInterrupts + ldr r1, [r5, #0x114] + mov r4, r0 + ands r0, r1, #0x8 + bne _020D7B60 +_020D7B48: + mov r0, r6 + str r7, [r5, #0x104] + bl OS_SleepThread + ldr r0, [r5, #0x114] + ands r0, r0, #0x8 + beq _020D7B48 +_020D7B60: + mov r0, r4 + bl OS_RestoreInterrupts + ldr r1, [r5, #0x40] + mov r0, r5 + blx r1 + b _020D7B34 + .balign 4 +_020D7B78: .word 0x021D55C0 + + arm_func_start CARDi_OnFifoRecv +CARDi_OnFifoRecv: ; 0x020D7B7C + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0xb + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + ldr r1, _020D7BC8 ; =0x021D55C0 + ldr r0, [r1, #0x114] + bic r0, r0, #0x20 + str r0, [r1, #0x114] + ldr r0, [r1, #0x104] + bl OS_WakeupThreadDirect + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7BC8: .word 0x021D55C0 + + arm_func_start CARDi_SendtoPxi +CARDi_SendtoPxi: ; 0x020D7BCC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r1, r7 + mov r0, #0xe + mov r2, #0x0 + bl PXI_SendWordByFifo +_020D7BEC: ; 0x020D7BEC + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r5, #0xe + mov r4, #0x0 +_020D7C04: + mov r0, r6 + blx FUN_020005F2 + mov r0, r5 + mov r1, r7 + mov r2, r4 + bl PXI_SendWordByFifo +_020D7C1C: ; 0x020D7C1C + cmp r0, #0x0 + bne _020D7C04 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start CARDi_CheckPulledOutCore +CARDi_CheckPulledOutCore: + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + ldr r1, _020D7C94 ; =0x027FFC10 + ldrh r1, [r1, #0x0] + cmp r1, #0x0 + ldreq r1, _020D7C98 ; =0x027FF800 + ldrne r1, _020D7C9C ; =0x027FFC00 + ldr r1, [r1, #0x0] + str r1, [sp, #0x0] + ldr r1, [sp, #0x0] + cmp r0, r1 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4,lr} + bxeq lr + bl OS_DisableInterrupts + mov r4, r0 + mov r0, #0xe + mov r1, #0x11 + mov r2, #0x0 + bl CARDi_PulledOutCallback + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7C94: .word 0x027FFC10 +_020D7C98: .word 0x027FF800 +_020D7C9C: .word 0x027FFC00 + + arm_func_start CARD_TerminateForPulledOut +CARD_TerminateForPulledOut: ; 0x020D7CA0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020D7D10 ; =0x027FFFA8 + mov r5, #0x1 + ldrh r0, [r0, #0x0] + and r0, r0, #0x8000 + movs r0, r0, asr #0xf + beq _020D7CEC + bl PM_ForceToPowerOff + cmp r0, #0x4 + bne _020D7CE4 + ldr r4, _020D7D14 ; =0x000A3A47 +_020D7CD0: + mov r0, r4 + bl OS_SpinWait + bl PM_ForceToPowerOff + cmp r0, #0x4 + beq _020D7CD0 +_020D7CE4: + cmp r0, #0x0 + moveq r5, #0x0 +_020D7CEC: + cmp r5, #0x0 + beq _020D7D00 + mov r0, #0x1 + mov r1, r0 + bl CARDi_SendtoPxi +_020D7D00: + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D7D10: .word 0x027FFFA8 +_020D7D14: .word 0x000A3A47 + + arm_func_start CARD_IsPulledOut +CARD_IsPulledOut: ; 0x020D7D18 + ldr r0, _020D7D24 ; =0x021D5E20 + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D7D24: .word 0x021D5E20 + + arm_func_start CARDi_PulledOutCallback +CARDi_PulledOutCallback: ; 0x020D7D28 + stmdb sp!, {lr} + sub sp, sp, #0x4 + and r0, r1, #0x3f + cmp r0, #0x11 + bne _020D7D90 + ldr r2, _020D7DA0 ; =0x021D5E20 + ldr r0, [r2, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r1, _020D7DA4 ; =0x021D5E24 + mov r0, #0x1 + ldr r1, [r1, #0x0] + str r0, [r2, #0x0] + cmp r1, #0x0 + beq _020D7D70 + blx r1 +_020D7D70: + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {lr} + bxeq lr + bl CARD_TerminateForPulledOut + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020D7D90: + bl OS_Terminate + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7DA0: .word 0x021D5E20 +_020D7DA4: .word 0x021D5E24 + + arm_func_start CARD_InitPulledOutCallback +CARD_InitPulledOutCallback: ; 0x020D7DA8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl PXI_Init + ldr r1, _020D7DD8 ; =CARDi_PulledOutCallback + mov r0, #0xe + bl PXI_SetFifoRecvCallback + ldr r0, _020D7DDC ; =0x021D5E24 + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7DD8: .word CARDi_PulledOutCallback +_020D7DDC: .word 0x021D5E24 diff --git a/asm/PM_arm9.s b/asm/PM_arm9.s new file mode 100644 index 00000000..0e654689 --- /dev/null +++ b/asm/PM_arm9.s @@ -0,0 +1,1125 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start PM_DeletePostSleepCallback +PM_DeletePostSleepCallback: ; 0x020D4AE8 + ldr ip, _020D4AF8 ; =0x020D4B78 + mov r1, r0 + ldr r0, _020D4AFC ; =0x021D54E0 + bx r12 + .balign 4 +_020D4AF8: .word 0x020D4B78 +_020D4AFC: .word 0x021D54E0 + + arm_func_start PM_DeletePreSleepCallback +PM_DeletePreSleepCallback: ; 0x020D4B00 + ldr ip, _020D4B10 ; =0x020D4B78 + mov r1, r0 + ldr r0, _020D4B14 ; =0x021D54D8 + bx r12 + .balign 4 +_020D4B10: .word 0x020D4B78 +_020D4B14: .word 0x021D54D8 + + arm_func_start PM_AppendPostSleepCallback +PM_AppendPostSleepCallback: ; 0x020D4B18 + ldr ip, _020D4B28 ; =FUN_020D4BC4 + mov r1, r0 + ldr r0, _020D4B2C ; =0x021D54E0 + bx r12 + .balign 4 +_020D4B28: .word FUN_020D4BC4 +_020D4B2C: .word 0x021D54E0 + + arm_func_start PM_PrependPreSleepCallback +PM_PrependPreSleepCallback: ; 0x020D4B30 + ldr ip, _020D4B40 ; =FUN_020D4C0C + mov r1, r0 + ldr r0, _020D4B44 ; =0x021D54D8 + bx r12 + .balign 4 +_020D4B40: .word FUN_020D4C0C +_020D4B44: .word 0x021D54D8 + + arm_func_start PMi_ExecuteList +PMi_ExecuteList: ; 0x020D4B48 + stmdb sp!, {r4,lr} + movs r4, r0 + ldmeqia sp!, {r4,lr} + bxeq lr +_020D4B58: + ldr r0, [r4, #0x4] + ldr r1, [r4, #0x0] + blx r1 + ldr r4, [r4, #0x8] + cmp r4, #0x0 + bne _020D4B58 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start FUN_020D4B78 +FUN_020D4B78: + cmp r0, #0x0 + bxeq lr + ldr r3, [r0] + mov r2, r3 + cmp r3, #0x0 + bxeq lr +_020D4B90: + cmp r3, r1 + bne _020D4BB0 + cmp r3, r2 + ldreq r1, [r3, #0x8] + streq r1, [r0] + ldrne r0, [r3, #0x8] + strne r0, [r2, #0x8] + bx lr +_020D4BB0: + mov r2, r3 + ldr r3, [r3, #0x8] + cmp r3, #0x0 + bne _020D4B90 + bx lr + + arm_func_start FUN_020D4BC4 +FUN_020D4BC4: ; 0x020D4BC4 + cmp r0, #0x0 + bxeq lr + ldr r2, [r0, #0x0] + cmp r2, #0x0 + moveq r2, #0x0 + streq r2, [r1, #0x8] + streq r1, [r0, #0x0] + bxeq lr + ldr r0, [r2, #0x8] + cmp r0, #0x0 + beq _020D4C00 +_020D4BF0: + mov r2, r0 + ldr r0, [r0, #0x8] + cmp r0, #0x0 + bne _020D4BF0 +_020D4C00: + str r0, [r1, #0x8] + str r1, [r2, #0x8] + bx lr + + arm_func_start FUN_020D4C0C +FUN_020D4C0C: ; 0x020D4C0C + cmp r0, #0x0 + ldrne r2, [r0, #0x0] + strne r2, [r1, #0x8] + strne r1, [r0, #0x0] + bx lr + + arm_func_start PM_GetLEDPattern +PM_GetLEDPattern: ; 0x020D4C20 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D4C58 ; =0x020D587C + add r2, sp, #0x0 + bl PM_GetLEDPatternAsync +_020D4C34: + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmnefd sp!, {lr} + bxne lr + bl PMi_WaitBusy + ldr r0, [sp] + add sp, sp, #0x4 + ldmfd sp!, {lr} + bx lr +_020D4C58: .word 0x020D587C + + arm_func_start PM_GetLEDPatternAsync +PM_GetLEDPatternAsync: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl PMi_Lock +_020D4C70: + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r1, _020D4CA4 + ldr r0, _020D4CA8 + str r5, [r1, #0x4] + str r4, [r1, #0x8] + str r6, [r1, #0xC] + bl PMi_SendPxiData + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020D4CA4: .word 0x021D54E4 +_020D4CA8: .word 0x03006700 + + arm_func_start PMi_SendLEDPatternCommand +PMi_SendLEDPatternCommand: ; 0x020D4CAC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D4CE4 ; =0x020D587C + add r2, sp, #0x0 + bl PMi_SendLEDPatternCommandAsync +_020D4CC0: + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmnefd sp!, {lr} + bxne lr + bl PMi_WaitBusy + ldr r0, [sp] + add sp, sp, #0x4 + ldmfd sp!, {lr} + bx lr +_020D4CE4: .word 0x020D587C + + arm_func_start PMi_SendLEDPatternCommandAsync +PMi_SendLEDPatternCommandAsync: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl PMi_Lock +_020D4CFC: + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldr r0, _020D4D34 + ldr r1, _020D4D38 + and r2, r6, #0xff + orr r0, r2, r0 + str r5, [r1, #0x4] + str r4, [r1, #0x8] + bl PMi_SendPxiData + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020D4D34: .word 0x03006600 +_020D4D38: .word 0x021D54E4 + + arm_func_start PM_GetLCDPower +PM_GetLCDPower: ; 0x020D4D3C + ldr r0, _020D4D54 ; =0x04000304 + ldrh r0, [r0, #0x0] + ands r0, r0, #0x1 + movne r0, #0x1 + moveq r0, #0x0 + bx lr + .balign 4 +_020D4D54: .word 0x04000304 + + arm_func_start PM_SetLCDPower +PM_SetLCDPower: ; 0x020D4D58 + ldr ip, _020D4D74 ; =PMi_SetLCDPower + mov r1, #0x0 + cmp r0, #0x1 + movne r0, #0x0 + mov r2, r1 + mov r3, #0x1 + bx r12 + .balign 4 +_020D4D74: .word PMi_SetLCDPower + + arm_func_start PMi_SetLCDPower +PMi_SetLCDPower: ; 0x020D4D78 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + beq _020D4E00 + cmp r0, #0x1 + bne _020D4E4C + cmp r2, #0x0 + bne _020D4DC0 + ldr r2, _020D4E5C ; =0x027FFC3C + ldr r0, _020D4E60 ; =0x021D54DC + ldr r2, [r2, #0x0] + ldr r0, [r0, #0x0] + sub r0, r2, r0 + cmp r0, #0x7 + addls sp, sp, #0x4 + movls r0, #0x0 + ldmlsia sp!, {lr} + bxls lr +_020D4DC0: + cmp r1, #0x0 + beq _020D4DEC + cmp r3, #0x0 + beq _020D4DDC + mov r0, r1 + bl PMi_SetLED + b _020D4DEC +_020D4DDC: + mov r0, r1 + mov r1, #0x0 + mov r2, r1 + bl PMi_SetLEDAsync +_020D4DEC: + ldr r1, _020D4E64 ; =0x04000304 + ldrh r0, [r1, #0x0] + orr r0, r0, #0x1 + strh r0, [r1, #0x0] + b _020D4E4C +_020D4E00: + ldr lr, _020D4E64 ; =0x04000304 + ldr r2, _020D4E5C ; =0x027FFC3C + ldrh r12, [lr, #0x0] + ldr r0, _020D4E60 ; =0x021D54DC + cmp r1, #0x0 + bic r12, r12, #0x1 + strh r12, [lr, #0x0] + ldr r2, [r2, #0x0] + str r2, [r0, #0x0] + beq _020D4E4C + cmp r3, #0x0 + beq _020D4E3C + mov r0, r1 + bl PMi_SetLED + b _020D4E4C +_020D4E3C: + mov r0, r1 + mov r1, #0x0 + mov r2, r1 + bl PMi_SetLEDAsync +_020D4E4C: + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D4E5C: .word 0x027FFC3C +_020D4E60: .word 0x021D54DC +_020D4E64: .word 0x04000304 + + arm_func_start PM_GoSleepMode +PM_GoSleepMode: ; 0x020D4E68 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x1c + ldr r3, _020D5084 ; =0x021D54D8 + mov r10, r0 + ldr r0, [r3, #0x0] + mov r9, r1 + mov r11, r2 + mov r8, #0x0 + bl PMi_ExecuteList + ldr r1, _020D5088 ; =0x04000208 + mov r0, r8 + ldrh r4, [r1, #0x0] + strh r0, [r1, #0x0] + bl OS_DisableInterrupts +_020D4EA0: + str r0, [sp] + ldr r0, _020D508C + bl OS_DisableIrqMask + str r0, [sp, #0x4] + mov r0, #0x40000 + bl OS_SetIrqMask + ldr r0, [sp] + bl OS_RestoreInterrupts + ldr r2, _020D5088 + mov r1, #0x1 + ldrh r0, [r2] + ands r0, sl, #0x8 + strh r1, [r2] + beq _020D4EE8 + ldr r0, _020D5090 + ldrh r0, [r0] + cmp r0, #0x2 + biceq sl, sl, #0x8 +_020D4EE8: + ands r0, sl, #0x10 + beq _020D4EFC + bl CTRDG_IsExisting + cmp r0, #0x0 + biceq sl, sl, #0x10 +_020D4EFC: + ldr r0, _020D5094 + mov r1, #0x4000000 + ldr r7, [r1] + ldr r6, [r0] + bl PM_GetLCDPower + str r0, [sp, #0x8] + add r0, sp, #0xC + add r1, sp, #0x10 + bl PM_GetBackLight + mov r0, #0x2 + mov r1, #0x0 + bl FUN_020D526C + ldr r2, _020D5098 + ldr r0, [r2] + str r0, [sp, #0x14] +_020D4F38: + ldr r1, [r2] + ldr r0, [sp, #0x14] + cmp r0, r1 + beq _020D4F38 + ldr r0, [r2] + mov r2, #0x4000000 + str r0, [sp, #0x14] + ldr r0, [r2] + ldr r1, _020D5094 + bic r0, r0, #0x30000 + str r0, [r2] + ldr r0, [r1] + bic r0, r0, #0x10000 + str r0, [r1] + ldr r2, _020D5098 +_020D4F74: + ldr r1, [r2] + ldr r0, [sp, #0x14] + cmp r0, r1 + beq _020D4F74 + ldr r0, [r2] + str r0, [sp, #0x14] + ldr r2, _020D5098 +_020D4F90: + ldr r1, [r2] + ldr r0, [sp, #0x14] + cmp r0, r1 + beq _020D4F90 + ldr r0, [sp, #0xC] + ldr r1, [sp, #0x10] + orr r0, sl, r0, lsl #0x5 + orr r0, r0, r1, lsl #0x6 + mov r0, r0, lsl #0x10 + mov r5, r0, lsr #0x10 + orr r0, r9, fp + mov r0, r0, lsl #0x10 + mov r9, r0, lsr #0x10 +_020D4FC4: + mov r0, r5 + mov r1, r9 + bl PMi_SendSleepStart + cmp r0, #0x0 + bne _020D4FC4 + bl OS_Halt + ldr r0, _020D509C + bl OS_SpinWait + ands r0, sl, #0x8 + beq _020D4FFC + ldr r0, _020D50A0 + ldr r0, [r0] + ands r0, r0, #0x100000 + movne r8, #0x1 +_020D4FFC: + cmp r8, #0x0 + bne _020D5040 + ldr r0, [sp, #0x8] + cmp r0, #0x1 + bne _020D5028 + mov r0, #0x1 + mov r1, r0 + mov r2, r0 + mov r3, #0x0 + bl PMi_SetLCDPower + b _020D5030 +_020D5028: + mov r0, #0x1 + bl PMi_SetLED +_020D5030: + mov r1, #0x4000000 + ldr r0, _020D5094 + str r7, [r1] + str r6, [r0] +_020D5040: + bl OS_DisableInterrupts + ldr r0, [sp, #0x4] + bl OS_SetIrqMask + ldr r0, [sp] + bl OS_RestoreInterrupts + ldr r1, _020D5088 + cmp r8, #0x0 + ldrh r0, [r1] + strh r4, [r1] + beq _020D506C + bl PM_ForceToPowerOff +_020D506C: + ldr r0, _020D50A4 + ldr r0, [r0] + bl PMi_ExecuteList + add sp, sp, #0x1C + ldmia sp!, {r4-r11, lr} + bx lr +_020D5084: .word 0x021D54D8 +_020D5088: .word 0x04000208 +_020D508C: .word 0x003FFFFF +_020D5090: .word 0x027FFC40 +_020D5094: .word 0x04001000 +_020D5098: .word 0x027FFC3C +_020D509C: .word 0x00996A00 +_020D50A0: .word 0x04000214 +_020D50A4: .word 0x021D54E0 + + + arm_func_start PMi_SendPxiData +PMi_SendPxiData: ; 0x020D50A8 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, #0x8 + mov r4, #0x0 +_020D50B8: + mov r0, r5 + mov r1, r6 + mov r2, r4 + bl PXI_SendWordByFifo +_020D50C8: + cmp r0, #0 + bne _020D50B8 + ldmia sp!, {r4-r6, lr} + bx lr + + arm_func_start PM_GetBackLight +PM_GetBackLight: ; 0x020D50D8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r5, r0 + add r1, sp, #0x0 + mov r0, #0x0 + bl PMi_ReadRegister +_020D50F4: + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r5, #0x0 + beq _020D5120 + ldrh r1, [sp] + ands r1, r1, #0x8 + movne r1, #0x1 + moveq r1, #0x0 + str r1, [r5] +_020D5120: + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrh r1, [sp] + ands r1, r1, #0x4 + movne r1, #0x1 + moveq r1, #0x0 + str r1, [r4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start PM_SetAmpGain +PM_SetAmpGain: ; 0x020D5150 + ldr ip, _020D5164 ; =FUN_020D53DC + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 + mov r0, #0x3 + bx r12 + .balign 4 +_020D5164: .word FUN_020D53DC + + arm_func_start PM_SetAmp +PM_SetAmp: ; 0x020D5168 + ldr ip, _020D517C ; =FUN_020D53DC + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 + mov r0, #0x2 + bx r12 + .balign 4 +_020D517C: .word FUN_020D53DC + + arm_func_start PM_ForceToPowerOff +PM_ForceToPowerOff: ; 0x020D5180 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020D51B8 ; =PMi_DummyCallback + add r1, sp, #0x0 + bl PM_ForceToPowerOffAsync +_020D5194: ; 0x020D5194 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl PMi_WaitBusy +_020D51A8: ; 0x020D51A8 + ldr r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D51B8: .word PMi_DummyCallback + + arm_func_start PM_ForceToPowerOffAsync +PM_ForceToPowerOffAsync: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + ldr r0, _020D5268 ; =0x00996A00 + mov r6, r1 + bl OS_SpinWait + bl PM_GetLCDPower + cmp r0, #0x1 + beq _020D524C + add r0, sp, #0x0 + add r1, sp, #0x4 + bl PM_GetBackLight +_020D51EC: ; 0x020D51EC + ldr r0, [sp, #0x0] + cmp r0, #0x0 + beq _020D5204 + mov r0, #0x0 + mov r1, r0 + bl PM_SetBackLight +_020D5204: + ldr r0, [sp, #0x4] + cmp r0, #0x0 + beq _020D521C + mov r0, #0x1 + mov r1, #0x0 + bl PM_SetBackLight +_020D521C: + mov r0, #0x1 + bl PM_SetLCDPower +_020D5224: ; 0x020D5224 + cmp r0, #0x0 + bne _020D524C + ldr r5, _020D5268 ; =0x00996A00 + mov r4, #0x1 +_020D5234: + mov r0, r5 + bl OS_SpinWait + mov r0, r4 + bl PM_SetLCDPower +_020D5244: ; 0x020D5244 + cmp r0, #0x0 + beq _020D5234 +_020D524C: + mov r1, r7 + mov r2, r6 + mov r0, #0xe + bl PM_SendUtilityCommandAsync + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D5268: .word 0x00996A00 + + arm_func_start PM_SetBackLight +PM_SetBackLight: ; 0x020D526C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020D52A4 ; =PMi_DummyCallback + add r3, sp, #0x0 + bl PM_SetBackLightAsync +_020D5280: ; 0x020D5280 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl PMi_WaitBusy +_020D5294: ; 0x020D5294 + ldr r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D52A4: .word PMi_DummyCallback + + arm_func_start PM_SetBackLightAsync +PM_SetBackLightAsync: + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + mov r12, #0x0 + bne _020D52D0 + cmp r1, #0x1 + moveq r12, #0x6 + cmp r1, #0x0 + moveq r12, #0x7 + b _020D5304 +_020D52D0: + cmp r0, #0x1 + bne _020D52EC + cmp r1, #0x1 + moveq r12, #0x4 + cmp r1, #0x0 + moveq r12, #0x5 + b _020D5304 +_020D52EC: + cmp r0, #0x2 + bne _020D5304 + cmp r1, #0x1 + moveq r12, #0x8 + cmp r1, #0x0 + moveq r12, #0x9 +_020D5304: + cmp r12, #0x0 + addeq sp, sp, #0x4 + ldreq r0, _020D5334 ; =0x0000FFFF + ldmeqia sp!, {lr} + bxeq lr + mov r1, r2 + mov r0, r12 + mov r2, r3 + bl PM_SendUtilityCommandAsync + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5334: .word 0x0000FFFF + + arm_func_start PMi_SetLED +PMi_SetLED: ; 0x020D5338 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D5370 ; =PMi_DummyCallback + add r2, sp, #0x0 + bl PMi_SetLEDAsync +_020D534C: ; 0x020D534C + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl PMi_WaitBusy +_020D5360: ; 0x020D5360 + ldr r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5370: .word PMi_DummyCallback + + arm_func_start PMi_SetLEDAsync +PMi_SetLEDAsync: + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x1 + beq _020D5398 + cmp r0, #0x2 + beq _020D53A8 + cmp r0, #0x3 + beq _020D53A0 + b _020D53B0 +_020D5398: + mov r0, #0x1 + b _020D53B4 +_020D53A0: + mov r0, #0x2 + b _020D53B4 +_020D53A8: + mov r0, #0x3 + b _020D53B4 +_020D53B0: + mov r0, #0x0 +_020D53B4: + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldreq r0, _020D53D8 ; =0x0000FFFF + ldmeqia sp!, {lr} + bxeq lr + bl PM_SendUtilityCommandAsync + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D53D8: .word 0x0000FFFF + + arm_func_start FUN_020D53DC +FUN_020D53DC: ; 0x020D53DC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020D5414 ; =PMi_DummyCallback + add r3, sp, #0x0 + bl PMi_WriteRegisterAsync +_020D53F0: ; 0x020D53F0 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl PMi_WaitBusy +_020D5404: ; 0x020D5404 + ldr r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5414: .word PMi_DummyCallback + + arm_func_start PMi_WriteRegisterAsync +PMi_WriteRegisterAsync: + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r4, r1 + mov r6, r2 + mov r5, r3 + bl PMi_Lock +_020D5434: ; 0x020D5434 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x1 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldr r0, _020D5488 ; =0x02006400 + ldr r1, _020D548C ; =0x021D54E4 + and r2, r7, #0xff + orr r0, r2, r0 + str r6, [r1, #0x4] + str r5, [r1, #0x8] + bl PMi_SendPxiData + ldr r0, _020D5490 ; =0x0000FFFF + ldr r1, _020D5494 ; =0x01010000 + and r0, r4, r0 + orr r0, r0, r1 + bl PMi_SendPxiData +_020D5478: ; 0x020D5478 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D5488: .word 0x02006400 +_020D548C: .word 0x021D54E4 +_020D5490: .word 0x0000FFFF +_020D5494: .word 0x01010000 + + arm_func_start PMi_ReadRegister +PMi_ReadRegister: + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020D54D0 ; =PMi_DummyCallback + add r3, sp, #0x0 + bl PMi_ReadRegisterAsync +_020D54AC: ; 0x020D54AC + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + bl PMi_WaitBusy +_020D54C0: ; 0x020D54C0 + ldr r0, [sp, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D54D0: .word PMi_DummyCallback + + arm_func_start PMi_ReadRegisterAsync +PMi_ReadRegisterAsync: + stmdb sp!, {r4-r8,lr} + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl PMi_Lock +_020D54EC: ; 0x020D54EC + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr ip, _020D553C ; =0x021D550C + ldr r1, _020D5540 ; =0x021D54E4 + ldr r0, _020D5544 ; =0x03006500 + and r2, r7, #0xff + mov lr, r7, lsl #0x3 + mov r8, #0x0 + ldr r3, _020D5548 ; =0x021D5510 + strh r8, [r12, lr] + orr r0, r2, r0 + str r5, [r1, #0x4] + str r4, [r1, #0x8] + str r6, [r3, r7, lsl #0x3] + bl PMi_SendPxiData + mov r0, r8 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D553C: .word 0x021D550C +_020D5540: .word 0x021D54E4 +_020D5544: .word 0x03006500 +_020D5548: .word 0x021D5510 + + arm_func_start PM_SendUtilityCommandAsync +PM_SendUtilityCommandAsync: ; 0x020D554C + stmdb sp!, {r4-r6,lr} + mov r4, r0 + mov r6, r1 + mov r5, r2 + bl PMi_Lock +_020D5560: ; 0x020D5560 + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r2, r4, lsr #0x10 + ldr r1, _020D55B0 ; =0x021D54E4 + ldr r0, _020D55B4 ; =0x02006300 + and r2, r2, #0xff + orr r0, r2, r0 + str r6, [r1, #0x4] + str r5, [r1, #0x8] + bl PMi_SendPxiData + ldr r0, _020D55B8 ; =0x0000FFFF + ldr r1, _020D55BC ; =0x01010000 + and r0, r4, r0 + orr r0, r0, r1 + bl PMi_SendPxiData +_020D55A4: ; 0x020D55A4 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D55B0: .word 0x021D54E4 +_020D55B4: .word 0x02006300 +_020D55B8: .word 0x0000FFFF +_020D55BC: .word 0x01010000 + + arm_func_start PMi_SendSleepStart +PMi_SendSleepStart: ; 0x020D55C0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + bl PMi_Lock +_020D55D4: ; 0x020D55D4 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x1 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, _020D5660 ; =0x021D54D0 + mov r2, #0x0 + ldr r0, _020D5664 ; =0x03006000 + str r2, [r1, #0x0] + bl PMi_SendPxiData + ldr r1, _020D5660 ; =0x021D54D0 +_020D5600: + ldr r0, [r1, #0x0] + cmp r0, #0x0 + beq _020D5600 + mov r0, #0x0 + ldr ip, _020D5668 ; =0x021D54D4 + str r0, [r1, #0x0] + mov r2, r0 + mov r3, r0 + mov r1, #0x2 + str r0, [r12, #0x0] + bl PMi_SetLCDPower + ldr r0, _020D566C ; =0x02006100 + and r1, r5, #0xff + orr r0, r1, r0 + bl PMi_SendPxiData + ldr r0, _020D5670 ; =0x0000FFFF + ldr r1, _020D5674 ; =0x01010000 + and r0, r4, r0 + orr r0, r0, r1 + bl PMi_SendPxiData +_020D5650: ; 0x020D5650 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D5660: .word 0x021D54D0 +_020D5664: .word 0x03006000 +_020D5668: .word 0x021D54D4 +_020D566C: .word 0x02006100 +_020D5670: .word 0x0000FFFF +_020D5674: .word 0x01010000 + + arm_func_start PMi_CommonCallback +PMi_CommonCallback: ; 0x020D5678 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + beq _020D569C + mov r0, #0x2 + bl PMi_CallCallbackAndUnlock + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr +_020D569C: + and r0, r1, #0x7f00 + mov r0, r0, lsl #0x8 + and r1, r1, #0xff + mov r2, r0, lsr #0x10 + mov r0, r1, lsl #0x10 + cmp r2, #0x70 + mov r0, r0, lsr #0x10 + blo _020D56FC + cmp r2, #0x74 + bhi _020D56FC + ldr r1, _020D5750 ; =0x021D5510 + sub r2, r2, #0x70 + and r0, r0, #0xff + ldr r1, [r1, r2, lsl #0x3] + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r1, #0x0 + strneh r0, [r1, #0x0] + mov r1, r2, lsl #0x3 + ldr r0, _020D5754 ; =0x021D550C + mov r2, #0x1 + strh r2, [r0, r1] + mov r0, #0x0 + b _020D5740 +_020D56FC: + cmp r2, #0x60 + ldreq r1, _020D5758 ; =0x021D54D0 + moveq r2, #0x1 + streq r2, [r1, #0x0] + beq _020D5740 + cmp r2, #0x62 + ldreq r1, _020D575C ; =0x021D54D4 + moveq r2, #0x1 + streq r2, [r1, #0x0] + beq _020D5740 + cmp r2, #0x67 + bne _020D5740 + ldr r1, _020D5760 ; =0x021D54E4 + ldr r1, [r1, #0xc] + cmp r1, #0x0 + strne r0, [r1, #0x0] + mov r0, #0x0 +_020D5740: + bl PMi_CallCallbackAndUnlock + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5750: .word 0x021D5510 +_020D5754: .word 0x021D550C +_020D5758: .word 0x021D54D0 +_020D575C: .word 0x021D54D4 +_020D5760: .word 0x021D54E4 + + arm_func_start PM_Init +PM_Init: ; 0x020D5764 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020D580C ; =0x021D54CC + ldrh r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, _020D5810 ; =0x021D54E4 + mov r2, #0x0 + mov r3, #0x1 + strh r3, [r1, #0x0] + str r2, [r0, #0x0] + str r2, [r0, #0x4] + bl PXI_Init + mov r5, #0x8 + mov r4, #0x1 +_020D57A8: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_020D57B4: ; 0x020D57B4 + cmp r0, #0x0 + beq _020D57A8 + ldr r1, _020D5814 ; =PMi_CommonCallback + mov r0, #0x8 + bl PXI_SetFifoRecvCallback + mov r3, #0x0 + ldr r0, _020D5818 ; =0x021D550C + mov r2, r3 +_020D57D4: + mov r1, r3, lsl #0x3 + add r3, r3, #0x1 + strh r2, [r0, r1] + cmp r3, #0x5 + blt _020D57D4 + ldr r0, _020D581C ; =0x021D54F4 + bl OS_InitMutex + ldr r1, _020D5820 ; =0x027FFC3C + ldr r0, _020D5824 ; =0x021D54DC + ldr r1, [r1, #0x0] + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D580C: .word 0x021D54CC +_020D5810: .word 0x021D54E4 +_020D5814: .word PMi_CommonCallback +_020D5818: .word 0x021D550C +_020D581C: .word 0x021D54F4 +_020D5820: .word 0x027FFC3C +_020D5824: .word 0x021D54DC + + arm_func_start PMi_CallCallbackAndUnlock +PMi_CallCallbackAndUnlock: ; 0x020D5828 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020D5878 ; =0x021D54E4 + ldr r1, [r2, #0x0] + ldr r12, [r2, #0x4] + cmp r1, #0x0 + movne r3, #0x0 + strne r3, [r2, #0x0] + cmp r12, #0x0 + addeq sp, sp, #0x4 + ldr r1, [r2, #0x8] + ldmeqia sp!, {lr} + bxeq lr + ldr r2, _020D5878 ; =0x021D54E4 + mov r3, #0x0 + str r3, [r2, #0x4] + blx r12 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5878: .word 0x021D54E4 + + arm_func_start PMi_DummyCallback +PMi_DummyCallback: ; 0x020D587C + str r0, [r1, #0x0] + bx lr + + arm_func_start PMi_WaitBusy +PMi_WaitBusy: + stmdb sp!, {r4,lr} + ldr r4, _020D58C0 ; =0x021D54E4 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr +_020D589C: + bl OS_GetCpsrIrq + cmp r0, #0x80 + bne _020D58AC + bl PXIi_HandlerRecvFifoNotEmpty +_020D58AC: + ldr r0, [r4, #0x0] + cmp r0, #0x0 + bne _020D589C + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D58C0: .word 0x021D54E4 + + arm_func_start PMi_Lock +PMi_Lock: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020D5910 ; =0x021D54E4 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D58F4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {lr} + bx lr +_020D58F4: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D5910: .word 0x021D54E4 diff --git a/asm/RTC_arm9.s b/asm/RTC_arm9.s new file mode 100644 index 00000000..e6f5b4ee --- /dev/null +++ b/asm/RTC_arm9.s @@ -0,0 +1,1028 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start RtcWaitBusy +RtcWaitBusy: ; 0x020D5914 + ldr ip, _020D5928 ; =0x021D5538 +_020D5918: + ldr r0, [r12, #0x0] + cmp r0, #0x1 + beq _020D5918 + bx lr + .balign 4 +_020D5928: .word 0x021D5538 + + arm_func_start RtcGetResultCallback +RtcGetResultCallback: ; 0x020D592C + ldr r1, _020D5938 ; =0x021D5538 + str r0, [r1, #0x20] + bx lr + .balign 4 +_020D5938: .word 0x021D5538 + + arm_func_start RtcBCD2HEX +RtcBCD2HEX: ; 0x020D593C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, #0x0 + mov r3, r5 + mov r2, r5 +_020D5950: + mov r1, r0, lsr r2 + and r1, r1, #0xf + cmp r1, #0xa + addcs sp, sp, #0x4 + movcs r0, #0x0 + ldmcsia sp!, {r4-r5,lr} + bxcs lr + add r3, r3, #0x1 + cmp r3, #0x8 + add r2, r2, #0x4 + blt _020D5950 + mov r12, #0x0 + mov lr, r12 + mov r4, #0x1 + mov r2, #0xa +_020D598C: + mov r1, r0, lsr lr + and r3, r1, #0xf + mul r1, r4, r2 + mla r5, r4, r3, r5 + add r12, r12, #0x1 + mov r4, r1 + cmp r12, #0x8 + add lr, lr, #0x4 + blt _020D598C + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start RtcCommonCallback +RtcCommonCallback: ; 0x020D59C0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + cmp r2, #0x0 + beq _020D5A30 + ldr r0, _020D5F30 ; =0x021D5538 + ldr r2, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x18] + ldr r4, [r2, #0x4] + cmp r1, #0x0 + movne r1, #0x0 + strne r1, [r0, #0x18] + ldr r0, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + movne r1, #0x0 + strne r1, [r0, #0x0] + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, [r2, #0x10] + mov r3, #0x0 + mov r0, #0x6 + str r3, [r2, #0x4] + blx r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020D5A30: + and r0, r1, #0x7f00 + mov r0, r0, lsr #0x8 + and r0, r0, #0xff + cmp r0, #0x30 + and r2, r1, #0xff + bne _020D5A70 + ldr r0, _020D5F30 ; =0x021D5538 + ldr r0, [r0, #0x1c] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + blx r0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr +_020D5A70: + cmp r2, #0x0 + bne _020D5E88 + ldr r0, _020D5F30 ; =0x021D5538 + mov r5, #0x0 + ldr r1, [r0, #0x14] + cmp r1, #0xf + addls pc, pc, r1, lsl #0x2 + b _020D5E74 +_020D5A90: + b _020D5AD0 +_020D5A94: + b _020D5B24 +_020D5A98: + b _020D5B74 +_020D5A9C: + b _020D5ED0 +_020D5AA0: + b _020D5ED0 +_020D5AA4: + b _020D5ED0 +_020D5AA8: + b _020D5C1C +_020D5AAC: + b _020D5C4C +_020D5AB0: + b _020D5C70 +_020D5AB4: + b _020D5D14 +_020D5AB8: + b _020D5DC8 +_020D5ABC: + b _020D5ED0 +_020D5AC0: + b _020D5ED0 +_020D5AC4: + b _020D5ED0 +_020D5AC8: + b _020D5ED0 +_020D5ACC: + b _020D5ED0 +_020D5AD0: + ldr r1, _020D5F34 ; =0x027FFDE8 + ldr r4, [r0, #0x8] + ldrb r0, [r1, #0x0] + bl RtcBCD2HEX + ldr r1, _020D5F34 ; =0x027FFDE8 + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x13 + mov r0, r0, lsr #0x1b + bl RtcBCD2HEX + ldr r1, _020D5F34 ; =0x027FFDE8 + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0xa + mov r0, r0, lsr #0x1a + bl RtcBCD2HEX + str r0, [r4, #0x8] + mov r0, r4 + bl RTC_GetDayOfWeek + str r0, [r4, #0xc] + b _020D5ED0 +_020D5B24: + ldr r1, _020D5F38 ; =0x027FFDEC + ldr r4, [r0, #0x8] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x1a + mov r0, r0, lsr #0x1a + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x11 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x9 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + str r0, [r4, #0x8] + b _020D5ED0 +_020D5B74: + ldr r1, _020D5F34 ; =0x027FFDE8 + ldr r4, [r0, #0x8] + ldr r0, [r1, #0x0] + and r0, r0, #0xff + bl RtcBCD2HEX + ldr r1, _020D5F34 ; =0x027FFDE8 + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x13 + mov r0, r0, lsr #0x1b + bl RtcBCD2HEX + ldr r1, _020D5F34 ; =0x027FFDE8 + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0xa + mov r0, r0, lsr #0x1a + bl RtcBCD2HEX + str r0, [r4, #0x8] + mov r0, r4 + bl RTC_GetDayOfWeek + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0xc] + ldr r0, [r1, #0x0] + ldr r1, _020D5F30 ; =0x021D5538 + mov r0, r0, lsl #0x1a + mov r0, r0, lsr #0x1a + ldr r4, [r1, #0xc] + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x11 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x9 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + str r0, [r4, #0x8] + b _020D5ED0 +_020D5C1C: + ldr r1, _020D5F3C ; =0x027FFDEA + ldr r2, [r0, #0x8] + ldrh r0, [r1, #0x0] + mov r0, r0, lsl #0x1c + mov r0, r0, lsr #0x1c + cmp r0, #0x4 + bne _020D5C44 + mov r0, #0x1 + str r0, [r2, #0x0] + b _020D5ED0 +_020D5C44: + str r5, [r2, #0x0] + b _020D5ED0 +_020D5C4C: + ldr r1, _020D5F3C ; =0x027FFDEA + ldr r2, [r0, #0x8] + ldrh r0, [r1, #0x0] + mov r0, r0, lsl #0x19 + movs r0, r0, lsr #0x1f + movne r0, #0x1 + strne r0, [r2, #0x0] + streq r5, [r2, #0x0] + b _020D5ED0 +_020D5C70: + ldr r1, _020D5F38 ; =0x027FFDEC + ldr r4, [r0, #0x8] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + str r0, [r4, #0x0] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x12 + mov r0, r0, lsr #0x1a + bl RtcBCD2HEX + ldr r1, _020D5F38 ; =0x027FFDEC + str r0, [r4, #0x4] + ldr r0, [r1, #0x0] + mov r0, r0, lsl #0x9 + mov r0, r0, lsr #0x19 + bl RtcBCD2HEX + str r0, [r4, #0x8] + mov r1, r5 + ldr r0, _020D5F38 ; =0x027FFDEC + str r1, [r4, #0xc] + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x18 + movs r0, r0, lsr #0x1f + ldrne r0, [r4, #0xc] + addne r0, r0, #0x1 + strne r0, [r4, #0xc] + ldr r0, _020D5F38 ; =0x027FFDEC + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x10 + movs r0, r0, lsr #0x1f + ldrne r0, [r4, #0xc] + addne r0, r0, #0x2 + strne r0, [r4, #0xc] + ldr r0, _020D5F38 ; =0x027FFDEC + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x8 + movs r0, r0, lsr #0x1f + ldrne r0, [r4, #0xc] + addne r0, r0, #0x4 + strne r0, [r4, #0xc] + b _020D5ED0 +_020D5D14: + ldr r3, [r0, #0x18] + cmp r3, #0x0 + bne _020D5DC0 + ldr r1, [r0, #0x8] + ldr r1, [r1, #0x0] + cmp r1, #0x1 + bne _020D5D7C + ldr r2, _020D5F3C ; =0x027FFDEA + ldrh r1, [r2, #0x0] + mov r1, r1, lsl #0x1c + mov r1, r1, lsr #0x1c + cmp r1, #0x4 + beq _020D5ED0 + add r1, r3, #0x1 + str r1, [r0, #0x18] + ldrh r0, [r2, #0x0] + bic r0, r0, #0xf + orr r0, r0, #0x4 + strh r0, [r2, #0x0] + bl RTCi_WriteRawStatus2Async +_020D5D64: ; 0x020D5D64 + cmp r0, #0x0 + moveq r1, r5 + ldreq r0, _020D5F30 ; =0x021D5538 + moveq r5, #0x3 + streq r1, [r0, #0x18] + b _020D5ED0 +_020D5D7C: + ldr r2, _020D5F3C ; =0x027FFDEA + ldrh r1, [r2, #0x0] + mov r1, r1, lsl #0x1c + movs r1, r1, lsr #0x1c + beq _020D5ED0 + add r1, r3, #0x1 + str r1, [r0, #0x18] + ldrh r0, [r2, #0x0] + bic r0, r0, #0xf + strh r0, [r2, #0x0] + bl RTCi_WriteRawStatus2Async +_020D5DA8: ; 0x020D5DA8 + cmp r0, #0x0 + moveq r1, r5 + ldreq r0, _020D5F30 ; =0x021D5538 + moveq r5, #0x3 + streq r1, [r0, #0x18] + b _020D5ED0 +_020D5DC0: + str r5, [r0, #0x18] + b _020D5ED0 +_020D5DC8: + ldr r3, [r0, #0x18] + cmp r3, #0x0 + bne _020D5E6C + ldr r1, [r0, #0x8] + ldr r1, [r1, #0x0] + cmp r1, #0x1 + bne _020D5E28 + ldr r2, _020D5F3C ; =0x027FFDEA + ldrh r1, [r2, #0x0] + mov r1, r1, lsl #0x19 + movs r1, r1, lsr #0x1f + bne _020D5ED0 + add r1, r3, #0x1 + str r1, [r0, #0x18] + ldrh r0, [r2, #0x0] + orr r0, r0, #0x40 + strh r0, [r2, #0x0] + bl RTCi_WriteRawStatus2Async +_020D5E10: ; 0x020D5E10 + cmp r0, #0x0 + moveq r1, r5 + ldreq r0, _020D5F30 ; =0x021D5538 + moveq r5, #0x3 + streq r1, [r0, #0x18] + b _020D5ED0 +_020D5E28: + ldr r2, _020D5F3C ; =0x027FFDEA + ldrh r1, [r2, #0x0] + mov r1, r1, lsl #0x19 + movs r1, r1, lsr #0x1f + beq _020D5ED0 + add r1, r3, #0x1 + str r1, [r0, #0x18] + ldrh r0, [r2, #0x0] + bic r0, r0, #0x40 + strh r0, [r2, #0x0] + bl RTCi_WriteRawStatus2Async +_020D5E54: ; 0x020D5E54 + cmp r0, #0x0 + moveq r1, r5 + ldreq r0, _020D5F30 ; =0x021D5538 + moveq r5, #0x3 + streq r1, [r0, #0x18] + b _020D5ED0 +_020D5E6C: + str r5, [r0, #0x18] + b _020D5ED0 +_020D5E74: + ldr r0, _020D5F30 ; =0x021D5538 + mov r1, #0x0 + str r1, [r0, #0x18] + mov r5, #0x4 + b _020D5ED0 +_020D5E88: + ldr r0, _020D5F30 ; =0x021D5538 + mov r1, #0x0 + str r1, [r0, #0x18] + cmp r2, #0x4 + addls pc, pc, r2, lsl #0x2 + b _020D5ECC +_020D5EA0: + b _020D5ECC +_020D5EA4: + b _020D5EB4 +_020D5EA8: + b _020D5EBC +_020D5EAC: + b _020D5EC4 +_020D5EB0: + b _020D5ECC +_020D5EB4: + mov r5, #0x4 + b _020D5ED0 +_020D5EBC: + mov r5, #0x5 + b _020D5ED0 +_020D5EC4: + mov r5, #0x1 + b _020D5ED0 +_020D5ECC: + mov r5, #0x6 +_020D5ED0: + ldr r0, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x18] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r2, _020D5F30 ; =0x021D5538 + ldr r1, [r0, #0x0] + ldr r4, [r2, #0x4] + cmp r1, #0x0 + movne r1, #0x0 + strne r1, [r0, #0x0] + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r1, [r2, #0x10] + mov r3, #0x0 + mov r0, r5 + str r3, [r2, #0x4] + blx r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D5F30: .word 0x021D5538 +_020D5F34: .word 0x027FFDE8 +_020D5F38: .word 0x027FFDEC +_020D5F3C: .word 0x027FFDEA + + arm_func_start RTC_GetDateTimeAsync +RTC_GetDateTimeAsync: ; 0x020D5F40 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl OS_DisableInterrupts + ldr r1, _020D5FCC ; =0x021D5538 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D5F80 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r7,lr} + bx lr +_020D5F80: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020D5FCC ; =0x021D5538 + mov r2, #0x2 + mov r1, #0x0 + str r2, [r0, #0x14] + str r1, [r0, #0x18] + str r7, [r0, #0x8] + str r6, [r0, #0xc] + str r5, [r0, #0x4] + str r4, [r0, #0x10] + bl RTCi_ReadRawDateTimeAsync +_020D5FB4: ; 0x020D5FB4 + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D5FCC: .word 0x021D5538 + + arm_func_start RTC_GetTime +RTC_GetTime: ; 0x020D5FD0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D600C ; =RtcGetResultCallback + mov r2, #0x0 + bl RTC_GetTimeAsync + ldr r1, _020D6010 ; =0x021D5538 + cmp r0, #0x0 + str r0, [r1, #0x20] + bne _020D5FF8 + bl RtcWaitBusy +_020D5FF8: + ldr r0, _020D6010 ; =0x021D5538 + ldr r0, [r0, #0x20] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D600C: .word RtcGetResultCallback +_020D6010: .word 0x021D5538 + + arm_func_start RTC_GetTimeAsync +RTC_GetTimeAsync: ; 0x020D6014 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl OS_DisableInterrupts + ldr r1, _020D608C ; =0x021D5538 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D6048 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020D6048: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020D608C ; =0x021D5538 + mov r2, #0x1 + mov r1, #0x0 + str r2, [r0, #0x14] + str r1, [r0, #0x18] + str r6, [r0, #0x8] + str r5, [r0, #0x4] + str r4, [r0, #0x10] + bl RTCi_ReadRawTimeAsync +_020D6078: ; 0x020D6078 + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D608C: .word 0x021D5538 + + arm_func_start RTC_GetDate +RTC_GetDate: ; 0x020D6090 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020D60CC ; =RtcGetResultCallback + mov r2, #0x0 + bl RTC_GetDateAsync + ldr r1, _020D60D0 ; =0x021D5538 + cmp r0, #0x0 + str r0, [r1, #0x20] + bne _020D60B8 + bl RtcWaitBusy +_020D60B8: + ldr r0, _020D60D0 ; =0x021D5538 + ldr r0, [r0, #0x20] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D60CC: .word RtcGetResultCallback +_020D60D0: .word 0x021D5538 + + arm_func_start RTC_GetDateAsync +RTC_GetDateAsync: ; 0x020D60D4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl OS_DisableInterrupts + ldr r1, _020D6148 ; =0x021D5538 + ldr r2, [r1, #0x0] + cmp r2, #0x0 + beq _020D6108 + bl OS_RestoreInterrupts + mov r0, #0x1 + ldmia sp!, {r4-r6,lr} + bx lr +_020D6108: + mov r2, #0x1 + str r2, [r1, #0x0] + bl OS_RestoreInterrupts + ldr r0, _020D6148 ; =0x021D5538 + mov r1, #0x0 + str r1, [r0, #0x14] + str r1, [r0, #0x18] + str r6, [r0, #0x8] + str r5, [r0, #0x4] + str r4, [r0, #0x10] + bl RTCi_ReadRawDateAsync +_020D6134: ; 0x020D6134 + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D6148: .word 0x021D5538 + + arm_func_start RTC_Init +RTC_Init: ; 0x020D614C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020D61C8 ; =0x021D5534 + ldrh r0, [r1, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, _020D61CC ; =0x021D5538 + mov r2, #0x0 + mov r3, #0x1 + strh r3, [r1, #0x0] + str r2, [r0, #0x0] + str r2, [r0, #0x4] + str r2, [r0, #0x1c] + str r2, [r0, #0x8] + str r2, [r0, #0xc] + bl PXI_Init + mov r5, #0x5 + mov r4, #0x1 +_020D619C: + mov r0, r5 + mov r1, r4 + bl PXI_IsCallbackReady +_020D61A8: ; 0x020D61A8 + cmp r0, #0x0 + beq _020D619C + ldr r1, _020D61D0 ; =RtcCommonCallback + mov r0, #0x5 + bl PXI_SetFifoRecvCallback + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D61C8: .word 0x021D5534 +_020D61CC: .word 0x021D5538 +_020D61D0: .word RtcCommonCallback + + arm_func_start FUN_020D61D4 +FUN_020D61D4: ; 0x020D61D4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r0, r0, lsl #0x8 + and r1, r0, #0x7f00 + mov r0, #0x5 + mov r2, #0x0 + bl PXI_SendWordByFifo +_020D61F0: ; 0x020D61F0 + cmp r0, #0x0 + movge r0, #0x1 + movlt r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + + arm_func_start RTCi_WriteRawStatus2Async +RTCi_WriteRawStatus2Async: + ldr ip, _020D6214 ; =FUN_020D61D4 + mov r0, #0x27 + bx r12 + .balign 4 +_020D6214: .word FUN_020D61D4 + + arm_func_start RTCi_ReadRawTimeAsync +RTCi_ReadRawTimeAsync: + ldr ip, _020D6224 ; =FUN_020D61D4 + mov r0, #0x12 + bx r12 + .balign 4 +_020D6224: .word FUN_020D61D4 + + arm_func_start RTCi_ReadRawDateAsync +RTCi_ReadRawDateAsync: + ldr ip, _020D6234 ; =FUN_020D61D4 + mov r0, #0x11 + bx r12 + .balign 4 +_020D6234: .word FUN_020D61D4 + + arm_func_start RTCi_ReadRawDateTimeAsync +RTCi_ReadRawDateTimeAsync: + ldr ip, _020D6244 ; =FUN_020D61D4 + mov r0, #0x10 + bx r12 + .balign 4 +_020D6244: .word FUN_020D61D4 + + arm_func_start RTC_GetDayOfWeek +RTC_GetDayOfWeek: ; 0x020D6248 + stmdb sp!, {r4-r6,lr} + ldr r1, [r0, #0x4] + ldr r2, [r0, #0x0] + sub r3, r1, #0x2 + cmp r3, #0x1 + add lr, r2, #0x7d0 + ldr r4, _020D630C ; =0x51EB851F + sublt lr, lr, #0x1 + ldr r12, [r0, #0x8] + smull r0, r2, r4, lr + addlt r3, r3, #0xc + mov r1, #0x1a + mul r0, r3, r1 + smull r1, r3, r4, lr + ldr r5, _020D6310 ; =0x66666667 + sub r0, r0, #0x2 + smull r4, r1, r5, r0 + mov r4, lr, lsr #0x1f + mov r2, r2, asr #0x5 + mov r3, r3, asr #0x5 + add r3, r4, r3 + ldr r5, _020D6314 ; =0x00000064 + add r2, r4, r2 + smull r2, r4, r5, r2 + sub r2, lr, r2 + mov r1, r1, asr #0x2 + mov r0, r0, lsr #0x1f + add r1, r0, r1 + mov r4, r2, asr #0x1 + add r0, r12, r1 + add r1, r2, r4, lsr #0x1e + add r2, r2, r0 + mov r6, r3, asr #0x1 + add r0, r3, r6, lsr #0x1e + add r1, r2, r1, asr #0x2 + add r1, r1, r0, asr #0x2 + mov r0, #0x5 + mla r4, r3, r0, r1 + ldr r3, _020D6318 ; =0x92492493 + mov r1, r4, lsr #0x1f + smull r2, r0, r3, r4 + add r0, r4, r0 + mov r0, r0, asr #0x2 + ldr r2, _020D631C ; =0x00000007 + add r0, r1, r0 + smull r0, r1, r2, r0 + sub r0, r4, r0 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D630C: .word 0x51EB851F +_020D6310: .word 0x66666667 +_020D6314: .word 0x00000064 +_020D6318: .word 0x92492493 +_020D631C: .word 0x00000007 + + arm_func_start RTC_ConvertSecondToDateTime +RTC_ConvertSecondToDateTime: ; 0x020D6320 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r2 + mov r12, #0x0 + mov r4, r3 + subs r2, r5, r12 + sbcs r2, r4, r12 + mov r7, r0 + mov r6, r1 + movlt r5, r12 + movlt r4, r12 + blt _020D6364 + ldr r1, _020D63B0 ; =0xBC19137F + subs r0, r1, r5 + sbcs r0, r12, r4 + movlt r5, r1 + movlt r4, r12 +_020D6364: + ldr r2, _020D63B4 ; =0x00015180 + mov r0, r5 + mov r1, r4 + mov r3, #0x0 + bl _ll_mod + mov r1, r0 + mov r0, r6 + bl RTCi_ConvertSecondToTime + ldr r2, _020D63B4 ; =0x00015180 + mov r0, r5 + mov r1, r4 + mov r3, #0x0 + bl FUN_020EBA38 + mov r1, r0 + mov r0, r7 + bl RTC_ConvertDayToDate + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020D63B0: .word 0xBC19137F +_020D63B4: .word 0x00015180 + + arm_func_start RTCi_ConvertSecondToTime +RTCi_ConvertSecondToTime: ; 0x020D63B8 + stmdb sp!, {r4-r6,lr} + ldr r2, _020D6448 ; =0x0001517F + cmp r1, #0x0 + movlt r1, #0x0 + cmp r1, r2 + ldr ip, _020D644C ; =0x88888889 + movgt r1, r2 + smull r2, r3, r12, r1 + smull r2, lr, r12, r1 + ldr r5, _020D6450 ; =0x91A2B3C5 + add r3, r1, r3 + smull r4, r2, r5, r1 + mov r5, r1, lsr #0x1f + mov r3, r3, asr #0x5 + add r3, r5, r3 + smull r4, r6, r12, r3 + add lr, r1, lr + mov lr, lr, asr #0x5 + add r6, r3, r6 + add r2, r1, r2 + ldr r4, _020D6454 ; =0x0000003C + add lr, r5, lr + smull r12, lr, r4, lr + sub lr, r1, r12 + mov r2, r2, asr #0xb + mov r6, r6, asr #0x5 + mov r1, r3, lsr #0x1f + add r6, r1, r6 + smull r1, r12, r4, r6 + str lr, [r0, #0x8] + sub r6, r3, r1 + str r6, [r0, #0x4] + add r2, r5, r2 + str r2, [r0, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D6448: .word 0x0001517F +_020D644C: .word 0x88888889 +_020D6450: .word 0x91A2B3C5 +_020D6454: .word 0x0000003C + + arm_func_start RTC_ConvertDayToDate +RTC_ConvertDayToDate: ; 0x020D6458 + stmdb sp!, {r4,lr} + ldr r2, _020D6560 ; =0x00008EAC + cmp r1, #0x0 + movlt r1, #0x0 + cmp r1, r2 + movgt r1, r2 + ldr r3, _020D6564 ; =0x92492493 + add lr, r1, #0x6 + smull r2, r4, r3, lr + add r4, lr, r4 + mov r4, r4, asr #0x2 + mov r2, lr, lsr #0x1f + ldr ip, _020D6568 ; =0x00000007 + add r4, r2, r4 + smull r2, r3, r12, r4 + sub r4, lr, r2 + ldr r2, _020D656C ; =0x0000016D + ldr r3, _020D6570 ; =0x0000016E + str r4, [r0, #0xc] + mov lr, #0x0 +_020D64A8: + ands r12, lr, #0x3 + moveq r12, r3 + movne r12, r2 + mov r4, r1 + subs r1, r1, r12 + movmi r1, r4 + bmi _020D64D0 + add lr, lr, #0x1 + cmp lr, #0x63 + blo _020D64A8 +_020D64D0: + ldr r2, _020D656C ; =0x0000016D + str lr, [r0, #0x0] + cmp r1, r2 + movgt r1, r2 + ands r2, lr, #0x3 + bne _020D6518 + cmp r1, #0x3c + bge _020D6514 + cmp r1, #0x1f + movlt r2, #0x1 + subge r1, r1, #0x1f + movge r2, #0x2 + str r2, [r0, #0x4] + add r1, r1, #0x1 + str r1, [r0, #0x8] + ldmia sp!, {r4,lr} + bx lr +_020D6514: + sub r1, r1, #0x1 +_020D6518: + ldr r3, _020D6574 ; =0x02106A20 + mov r4, #0xb +_020D6520: + ldr r2, [r3, r4, lsl #0x2] + mov r12, r4, lsl #0x2 + cmp r1, r2 + blt _020D6550 + add r2, r4, #0x1 + str r2, [r0, #0x4] + ldr r2, [r3, r12] + sub r1, r1, r2 + add r1, r1, #0x1 + str r1, [r0, #0x8] + ldmia sp!, {r4,lr} + bx lr +_020D6550: + subs r4, r4, #0x1 + bpl _020D6520 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D6560: .word 0x00008EAC +_020D6564: .word 0x92492493 +_020D6568: .word 0x00000007 +_020D656C: .word 0x0000016D +_020D6570: .word 0x0000016E +_020D6574: .word 0x02106A20 + + arm_func_start RTC_ConvertDateTimeToSecond +RTC_ConvertDateTimeToSecond: ; 0x020D6578 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + bl RTC_ConvertDateToDay + mov r4, r0 + mvn r0, #0x0 + cmp r4, r0 + addeq sp, sp, #0x4 + moveq r1, r0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r0, r5 + bl RTCi_ConvertTimeToSecond + mvn r2, #0x0 + cmp r0, r2 + moveq r1, r2 + beq _020D65DC + ldr r1, _020D65EC ; =0x00015180 + mov r2, #0x0 + umull r12, r3, r4, r1 + mla r3, r4, r2, r3 + mov r2, r4, asr #0x1f + mla r3, r2, r1, r3 + adds r2, r0, r12 + adc r1, r3, r0, asr #0x1f +_020D65DC: + mov r0, r2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D65EC: .word 0x00015180 + + arm_func_start RTCi_ConvertTimeToSecond +RTCi_ConvertTimeToSecond: ; 0x020D65F0 + ldr r3, [r0, #0x4] + ldr r2, [r0, #0x0] + mov r1, #0x3c + mla r3, r2, r1, r3 + ldr r0, [r0, #0x8] + mla r0, r3, r1, r0 + bx lr + + arm_func_start RTC_ConvertDateToDay +RTC_ConvertDateToDay: ; 0x020D660C + ldr r3, [r0, #0x0] + cmp r3, #0x64 + bhs _020D665C + ldr r2, [r0, #0x4] + cmp r2, #0x1 + blo _020D665C + cmp r2, #0xc + bhi _020D665C + ldr r1, [r0, #0x8] + cmp r1, #0x1 + blo _020D665C + cmp r1, #0x1f + bhi _020D665C + ldr r0, [r0, #0xc] + cmp r0, #0x7 + bge _020D665C + cmp r2, #0x1 + blo _020D665C + cmp r2, #0xc + bls _020D6664 +_020D665C: + mvn r0, #0x0 + bx lr +_020D6664: + ldr r0, _020D6698 ; =0x02106A1C + sub r1, r1, #0x1 + ldr r0, [r0, r2, lsl #0x2] + cmp r2, #0x3 + add r2, r1, r0 + blo _020D6684 + ands r0, r3, #0x3 + addeq r2, r2, #0x1 +_020D6684: + ldr r0, _020D669C ; =0x0000016D + add r1, r3, #0x3 + mla r0, r3, r0, r2 + add r0, r0, r1, lsr #0x2 + bx lr + .balign 4 +_020D6698: .word 0x02106A1C +_020D669C: .word 0x0000016D diff --git a/asm/WM_arm9.s b/asm/WM_arm9.s new file mode 100644 index 00000000..0e5eb0c5 --- /dev/null +++ b/asm/WM_arm9.s @@ -0,0 +1,3744 @@ + .include "asm/macros.inc" + .include "global.inc" + + .text + + arm_func_start WMi_GetMPReadyAIDs +WMi_GetMPReadyAIDs: ; 0x020D7DE0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl OS_DisableInterrupts + ldr r1, _020D7E30 ; =0x021D5E2C + mov r4, r0 + ldr r0, [r1, #0x0] + cmp r0, #0x0 + moveq r5, #0x0 + beq _020D7E18 + ldr r5, [r0, #0x4] + mov r1, #0x2 + add r0, r5, #0x86 + bl DC_InvalidateRange + ldrh r5, [r5, #0x86] +_020D7E18: + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D7E30: .word 0x021D5E2C + + arm_func_start WM_GetConnectedAIDs +WM_GetConnectedAIDs: ; 0x020D7E34 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020D7E64 ; =0x021D5E2C + ldr r1, [r1, #0x0] + cmp r1, #0x0 + ldrne r4, [r1, #0x14c] + moveq r4, #0x0 + bl OS_RestoreInterrupts + mov r0, r4, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7E64: .word 0x021D5E2C + + arm_func_start WM_GetAID +WM_GetAID: ; 0x020D7E68 + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + ldr r1, _020D7E98 ; =0x021D5E2C + ldr r1, [r1, #0x0] + cmp r1, #0x0 + addne r1, r1, #0x100 + ldrneh r4, [r1, #0x50] + moveq r4, #0x0 + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D7E98: .word 0x021D5E2C + + arm_func_start WMi_GetStatusAddress +WMi_GetStatusAddress: ; 0x020D7E9C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D7EA8: ; 0x020D7EA8 + cmp r0, #0x0 + movne r0, #0x0 + ldreq r0, _020D7EC8 ; =0x021D5E2C + ldreq r0, [r0, #0x0] + ldreq r0, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D7EC8: .word 0x021D5E2C + + arm_func_start WmClearFifoRecvFlag +WmClearFifoRecvFlag: ; 0x020D7ECC + ldr r1, _020D7EE4 ; =0x027FFF96 + ldrh r0, [r1, #0x0] + ands r2, r0, #0x1 + bicne r0, r0, #0x1 + strneh r0, [r1, #0x0] + bx lr + .balign 4 +_020D7EE4: .word 0x027FFF96 + + arm_func_start WmReceiveFifo +WmReceiveFifo: ; 0x020D7EE8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + ldr r0, _020D82B0 ; =0x021D5E2C + cmp r2, #0x0 + ldr r8, [r0, #0x0] + mov r10, r1 + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,lr} + bxne lr + ldr r0, [r8, #0x10] + mov r1, #0x100 + bl DC_InvalidateRange + ldrh r0, [r8, #0x16] + cmp r0, #0x0 + bne _020D7F30 + ldr r0, [r8, #0x4] + mov r1, #0x800 + bl DC_InvalidateRange +_020D7F30: + ldr r0, [r8, #0x10] + cmp r10, r0 + beq _020D7F48 + mov r0, r10 + mov r1, #0x100 + bl DC_InvalidateRange +_020D7F48: + ldrh r0, [r10, #0x0] + cmp r0, #0x2c + blo _020D8000 + cmp r0, #0x80 + bne _020D7F84 + ldrh r0, [r10, #0x2] + cmp r0, #0x13 + bne _020D7F6C + bl OS_Terminate +_020D7F6C: + ldr r1, [r8, #0xc8] + cmp r1, #0x0 + beq _020D8268 + mov r0, r10 + blx r1 + b _020D8268 +_020D7F84: + cmp r0, #0x82 + bne _020D7FD8 + ldrh r0, [r10, #0x6] + add r1, r8, r0, lsl #0x2 + ldr r0, [r1, #0xcc] + cmp r0, #0x0 + beq _020D8268 + ldr r0, [r1, #0x10c] + str r0, [r10, #0x1c] + ldr r0, [r8, #0x14c] + strh r0, [r10, #0x22] + ldr r1, [r8, #0x4] + ldr r0, [r10, #0x8] + ldrh r1, [r1, #0x72] + bl DC_InvalidateRange + ldrh r1, [r10, #0x6] + mov r0, r10 + add r1, r8, r1, lsl #0x2 + ldr r1, [r1, #0xcc] + blx r1 + b _020D8268 +_020D7FD8: + cmp r0, #0x81 + bne _020D8268 + mov r0, #0xf + strh r0, [r10, #0x0] + ldr r1, [r10, #0x1c] + cmp r1, #0x0 + beq _020D8268 + mov r0, r10 + blx r1 + b _020D8268 +_020D8000: + cmp r0, #0xe + bne _020D8040 + ldrh r1, [r10, #0x4] + ldr r0, _020D82B4 ; =0x0000FFF5 + add r0, r1, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #0x1 + bhi _020D8040 + ldrh r0, [r10, #0x2] + cmp r0, #0x0 + bne _020D8040 + ldr r1, [r8, #0x4] + ldr r0, [r10, #0x8] + ldrh r1, [r1, #0x72] + bl DC_InvalidateRange +_020D8040: + ldrh r1, [r10, #0x0] + cmp r1, #0x2 + bne _020D8088 + ldrh r0, [r10, #0x2] + cmp r0, #0x0 + bne _020D8088 + add r0, r8, r1, lsl #0x2 + ldr r4, [r0, #0x18] + bl WM_Finish +_020D8064: ; 0x020D8064 + cmp r4, #0x0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,lr} + bxeq lr + mov r0, r10 + blx r4 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr +_020D8088: + add r0, r8, r1, lsl #0x2 + ldr r1, [r0, #0x18] + cmp r1, #0x0 + beq _020D80B8 + mov r0, r10 + blx r1 + ldr r0, _020D82B8 ; =0x021D5E28 + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,lr} + bxeq lr +_020D80B8: + ldrh r0, [r10, #0x0] + cmp r0, #0x8 + beq _020D80CC + cmp r0, #0xc + bne _020D8268 +_020D80CC: + cmp r0, #0x8 + bne _020D8100 + add r0, r10, #0xa + str r0, [sp, #0x0] + ldrh r0, [r10, #0x2c] + add r11, r10, #0x14 + ldrh r7, [r10, #0x8] + ldrh r6, [r10, #0x10] + ldrh r4, [r10, #0x12] + str r0, [sp, #0x4] + ldrh r9, [r10, #0x2e] + mov r5, #0x0 + b _020D8130 +_020D8100: + cmp r0, #0xc + bne _020D8130 + ldrh r0, [r10, #0x16] + mov r6, #0x0 + ldrh r7, [r10, #0x8] + str r0, [sp, #0x4] + add r0, r10, #0x10 + ldrh r5, [r10, #0xa] + ldrh r4, [r10, #0xc] + ldrh r9, [r10, #0x18] + mov r11, r6 + str r0, [sp, #0x0] +_020D8130: + cmp r7, #0x7 + beq _020D8148 + cmp r7, #0x9 + beq _020D8148 + cmp r7, #0x1a + bne _020D8268 +_020D8148: + cmp r7, #0x7 + ldreq r1, [r8, #0x14c] + moveq r0, #0x1 + orreq r0, r1, r0, lsl r6 + streq r0, [r8, #0x14c] + movne r0, #0x1 + mvnne r0, r0, lsl r6 + ldrne r1, [r8, #0x14c] + add r3, r8, #0x100 + andne r0, r1, r0 + strne r0, [r8, #0x14c] + ldr r0, _020D82BC ; =0x021D5E78 + mov r1, #0x0 + mov r2, #0x44 + strh r5, [r3, #0x50] + bl MI_CpuFill8 + ldr r3, _020D82BC ; =0x021D5E78 + mov r1, #0x0 + mov r2, #0x82 + strh r2, [r3, #0x0] + strh r7, [r3, #0x4] + strh r6, [r3, #0x12] + strh r5, [r3, #0x20] + strh r1, [r3, #0x2] + str r1, [r3, #0x8] + str r1, [r3, #0xc] + strh r1, [r3, #0x10] + ldr r1, [r8, #0x14c] + ldr r2, _020D82C0 ; =0x0000FFFF + strh r1, [r3, #0x22] + strh r2, [r3, #0x1a] + ldr r0, [sp, #0x0] + ldr r1, _020D82C4 ; =0x021D5E8C + mov r2, #0x6 + strh r4, [r3, #0x3c] + bl MI_CpuCopy8 +_020D81D8: ; 0x020D81D8 + cmp r11, #0x0 + beq _020D81F4 + ldr r1, _020D82C8 ; =0x021D5E9C + mov r0, r11 + mov r2, #0x18 + bl MIi_CpuCopy16 + b _020D8204 +_020D81F4: + ldr r1, _020D82C8 ; =0x021D5E9C + mov r0, #0x0 + mov r2, #0x18 + bl MIi_CpuClear16 +_020D8204: + cmp r5, #0x0 + ldreq r1, [sp, #0x4] + ldr r0, _020D82BC ; =0x021D5E78 + movne r1, r9 + cmp r5, #0x0 + ldrne r9, [sp, #0x4] + ldr r5, _020D82BC ; =0x021D5E78 + strh r1, [r0, #0x40] + mov r4, #0x0 + strh r9, [r5, #0x42] +_020D822C: + strh r4, [r5, #0x6] + add r2, r8, r4, lsl #0x2 + ldr r0, [r2, #0xcc] + cmp r0, #0x0 + beq _020D8254 + ldr r1, [r2, #0x10c] + mov r0, r5 + str r1, [r5, #0x1c] + ldr r1, [r2, #0xcc] + blx r1 +_020D8254: + add r0, r4, #0x1 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + cmp r4, #0x10 + blo _020D822C +_020D8268: + ldr r0, [r8, #0x10] + mov r1, #0x100 + bl DC_InvalidateRange + bl WmClearFifoRecvFlag + ldr r0, [r8, #0x10] + cmp r10, r0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,lr} + bxeq lr + ldrh r2, [r10, #0x0] + mov r0, r10 + mov r1, #0x100 + orr r2, r2, #0x8000 + strh r2, [r10, #0x0] + bl DC_StoreRange + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020D82B0: .word 0x021D5E2C +_020D82B4: .word 0x0000FFF5 +_020D82B8: .word 0x021D5E28 +_020D82BC: .word 0x021D5E78 +_020D82C0: .word 0x0000FFFF +_020D82C4: .word 0x021D5E8C +_020D82C8: .word 0x021D5E9C + + arm_func_start WMi_CheckStateEx +WMi_CheckStateEx: + stmdb sp!, {r0-r3} + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D82DC: ; 0x020D82DC + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + addne sp, sp, #0x10 + bxne lr + ldr r0, _020D8370 ; =0x021D5E2C + mov r1, #0x2 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x4] + bl DC_InvalidateRange + ldr r0, _020D8370 ; =0x021D5E2C + add r1, sp, #0x8 + ldr r2, [r0, #0x0] + ldr r0, [sp, #0x8] + ldr r2, [r2, #0x4] + cmp r0, #0x0 + bic r1, r1, #0x3 + addeq sp, sp, #0x4 + add r12, r1, #0x4 + ldrh r3, [r2, #0x0] + mov r0, #0x3 + ldmeqia sp!, {lr} + addeq sp, sp, #0x10 + bxeq lr + mov r2, #0x0 +_020D8340: + add r12, r12, #0x4 + ldr r1, [r12, #-0x4] + cmp r1, r3 + ldr r1, [sp, #0x8] + moveq r0, r2 + subs r1, r1, #0x1 + str r1, [sp, #0x8] + bne _020D8340 + add sp, sp, #0x4 + ldmia sp!, {lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020D8370: .word 0x021D5E2C + + arm_func_start WMi_CheckIdle +WMi_CheckIdle: + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D8380: ; 0x020D8380 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020D83CC ; =0x021D5E2C + mov r1, #0x2 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x4] + bl DC_InvalidateRange + ldr r0, _020D83CC ; =0x021D5E2C + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x4] + ldrh r0, [r0, #0x0] + cmp r0, #0x1 + movls r0, #0x3 + movhi r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D83CC: .word 0x021D5E2C + + arm_func_start WMi_CheckInitialized +WMi_CheckInitialized: + ldr r0, _020D83E8 ; =0x021D5E28 + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + movne r0, #0x0 + moveq r0, #0x3 + bx lr + .balign 4 +_020D83E8: .word 0x021D5E28 + + arm_func_start WMi_GetSystemWork +WMi_GetSystemWork: ; 0x020D83EC + ldr r0, _020D83F8 ; =0x021D5E2C + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020D83F8: .word 0x021D5E2C + + arm_func_start WMi_SendCommandDirect +WMi_SendCommandDirect: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r4, r1 + bl WmGetCommandBuffer4Arm7 + movs r5, r0 + moveq r0, #0x8 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl MI_CpuCopy8 + mov r0, r5 + mov r1, r4 + bl DC_StoreRange + mov r1, r5 + mov r0, #0xa + mov r2, #0x0 + bl PXI_SendWordByFifo + mov r4, r0 + ldr r0, _020D8470 ; =0x021D5E30 + mov r1, r5 + mov r2, #0x1 + bl OS_SendMessage +_020D845C: ; 0x020D845C + cmp r4, #0x0 + movlt r0, #0x8 + movge r0, #0x2 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D8470: .word 0x021D5E30 + + arm_func_start WMi_SendCommand +WMi_SendCommand: + stmdb sp!, {r0-r3} + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + bl WmGetCommandBuffer4Arm7 + movs r5, r0 + addeq sp, sp, #0x4 + moveq r0, #0x8 + ldmeqia sp!, {r4-r5,lr} + addeq sp, sp, #0x10 + bxeq lr + strh r4, [r5, #0x0] + ldrh r2, [sp, #0x14] + add r0, sp, #0x14 + bic r0, r0, #0x3 + mov r3, #0x0 + cmp r2, #0x0 + add r4, r0, #0x4 + ble _020D84DC +_020D84C0: + add r4, r4, #0x4 + ldr r1, [r4, #-0x4] + add r0, r5, r3, lsl #0x2 + add r3, r3, #0x1 + str r1, [r0, #0x4] + cmp r3, r2 + blt _020D84C0 +_020D84DC: + mov r0, r5 + mov r1, #0x100 + bl DC_StoreRange + mov r1, r5 + mov r0, #0xa + mov r2, #0x0 + bl PXI_SendWordByFifo + mov r4, r0 + ldr r0, _020D8528 ; =0x021D5E30 + mov r1, r5 + mov r2, #0x1 + bl OS_SendMessage +_020D850C: ; 0x020D850C + cmp r4, #0x0 + movlt r0, #0x8 + movge r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + add sp, sp, #0x10 + bx lr + .balign 4 +_020D8528: .word 0x021D5E30 + + arm_func_start WmGetCommandBuffer4Arm7 +WmGetCommandBuffer4Arm7: ; 0x020D852C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020D859C ; =0x021D5E30 + add r1, sp, #0x0 + mov r2, #0x0 + bl OS_ReceiveMessage +_020D8544: ; 0x020D8544 + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {lr} + bxeq lr + ldr r0, [sp, #0x0] + mov r1, #0x2 + bl DC_InvalidateRange + ldr r1, [sp, #0x0] + ldrh r0, [r1, #0x0] + ands r0, r0, #0x8000 + addne sp, sp, #0x4 + movne r0, r1 + ldmneia sp!, {lr} + bxne lr + ldr r0, _020D859C ; =0x021D5E30 + mov r2, #0x1 + bl OS_JamMessage +_020D858C: ; 0x020D858C + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D859C: .word 0x021D5E30 + + arm_func_start WMi_SetCallbackTable +WMi_SetCallbackTable: ; 0x020D85A0 + ldr r2, _020D85B4 ; =0x021D5E2C + ldr r2, [r2, #0x0] + add r0, r2, r0, lsl #0x2 + str r1, [r0, #0x18] + bx lr + .balign 4 +_020D85B4: .word 0x021D5E2C + + arm_func_start WM_Finish +WM_Finish: + stmdb sp!, {r4,lr} + bl OS_DisableInterrupts + mov r4, r0 + bl WMi_CheckInitialized +_020D85C8: ; 0x020D85C8 + cmp r0, #0x0 + beq _020D85E4 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4,lr} + bx lr +_020D85E4: + mov r0, #0x1 + mov r1, #0x0 + bl WMi_CheckStateEx +_020D85F0: ; 0x020D85F0 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + bl WmClearFifoRecvFlag + mov r0, #0xa + mov r1, #0x0 + bl PXI_SetFifoRecvCallback + ldr r2, _020D8634 ; =0x021D5E2C + mov r3, #0x0 + ldr r1, _020D8638 ; =0x021D5E28 + mov r0, r4 + str r3, [r2, #0x0] + strh r3, [r1, #0x0] + bl OS_RestoreInterrupts +_020D8628: ; 0x020D8628 + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D8634: .word 0x021D5E2C +_020D8638: .word 0x021D5E28 + + arm_func_start WmInitCore +WmInitCore: + stmdb sp!, {r4-r10,lr} + mov r6, r0 + mov r5, r1 + mov r7, r2 + bl OS_DisableInterrupts + ldr r1, _020D881C ; =0x021D5E28 + mov r4, r0 + ldrh r1, [r1, #0x0] + cmp r1, #0x0 + beq _020D8674 + bl OS_RestoreInterrupts + mov r0, #0x3 + ldmia sp!, {r4-r10,lr} + bx lr +_020D8674: + cmp r6, #0x0 + bne _020D868C + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r10,lr} + bx lr +_020D868C: + cmp r5, #0x3 + bls _020D86A4 + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r10,lr} + bx lr +_020D86A4: + ands r1, r6, #0x1f + beq _020D86BC + bl OS_RestoreInterrupts + mov r0, #0x6 + ldmia sp!, {r4-r10,lr} + bx lr +_020D86BC: + bl PXI_Init + mov r0, #0xa + mov r1, #0x1 + bl PXI_IsCallbackReady +_020D86CC: ; 0x020D86CC + cmp r0, #0x0 + bne _020D86E8 + mov r0, r4 + bl OS_RestoreInterrupts + mov r0, #0x4 + ldmia sp!, {r4-r10,lr} + bx lr +_020D86E8: + mov r0, r6 + mov r1, r7 + bl DC_InvalidateRange + mov r0, r5 + mov r1, r6 + mov r3, r7 + mov r2, #0x0 + bl MI_DmaFill32 + ldr r0, _020D8820 ; =0x021D5E2C + add r1, r6, #0x200 + str r6, [r0, #0x0] + str r1, [r6, #0x0] + ldr r2, [r0, #0x0] + ldr r1, [r2, #0x0] + add r1, r1, #0x300 + str r1, [r2, #0x4] + ldr r2, [r0, #0x0] + ldr r1, [r2, #0x4] + add r1, r1, #0x800 + str r1, [r2, #0xc] + ldr r1, [r0, #0x0] + ldr r0, [r1, #0xc] + add r0, r0, #0x100 + str r0, [r1, #0x10] + bl WmClearFifoRecvFlag + ldr r1, _020D8820 ; =0x021D5E2C + mov r3, #0x0 + ldr r0, [r1, #0x0] + strh r5, [r0, #0x14] + ldr r0, [r1, #0x0] + str r3, [r0, #0x14c] + ldr r0, [r1, #0x0] + add r0, r0, #0x100 + strh r3, [r0, #0x50] + mov r2, r3 +_020D8774: + ldr r0, [r1, #0x0] + add r0, r0, r3, lsl #0x2 + str r2, [r0, #0xcc] + ldr r0, [r1, #0x0] + add r0, r0, r3, lsl #0x2 + add r3, r3, #0x1 + str r2, [r0, #0x10c] + cmp r3, #0x10 + blt _020D8774 + ldr r0, _020D8824 ; =0x021D5E30 + ldr r1, _020D8828 ; =0x021D5E50 + mov r2, #0xa + bl OS_InitMessageQueue + ldr sb, _020D882C ; =0x021D5EC0 + mov r10, #0x0 + ldr r6, _020D8824 ; =0x021D5E30 + mov r8, #0x8000 + mov r7, #0x2 + mov r5, #0x1 +_020D87C0: + mov r0, r9 + mov r1, r7 + strh r8, [r9, #0x0] + bl DC_StoreRange + mov r0, r6 + mov r1, r9 + mov r2, r5 + bl OS_SendMessage + add r10, r10, #0x1 + cmp r10, #0xa + add r9, r9, #0x100 + blt _020D87C0 + ldr r1, _020D8830 ; =WmReceiveFifo + mov r0, #0xa + bl PXI_SetFifoRecvCallback + ldr r1, _020D881C ; =0x021D5E28 + mov r2, #0x1 + mov r0, r4 + strh r2, [r1, #0x0] + bl OS_RestoreInterrupts +_020D8810: ; 0x020D8810 + mov r0, #0x0 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020D881C: .word 0x021D5E28 +_020D8820: .word 0x021D5E2C +_020D8824: .word 0x021D5E30 +_020D8828: .word 0x021D5E50 +_020D882C: .word 0x021D5EC0 +_020D8830: .word WmReceiveFifo + + arm_func_start WM_Init +WM_Init: + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0xf00 + bl WmInitCore +_020D8844: ; 0x020D8844 + cmp r0, #0x0 + ldreq r1, _020D8864 ; =0x021D5E2C + moveq r2, #0x0 + ldreq r1, [r1, #0x0] + streqh r2, [r1, #0x16] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D8864: .word 0x021D5E2C + + arm_func_start WM_GetNextTgid +WM_GetNextTgid: ; 0x020D8868 + stmdb sp!, {lr} + sub sp, sp, #0xc + + arm_func_start FUN_020D8870 +FUN_020D8870: ; 0x020D8870 + ldr r0, _020D88DC ; =0x02106A54 + ldr r0, [r0, #0x0] + cmp r0, #0x10000 + bne _020D88B0 + bl RTC_Init +_020D8884: ; 0x020D8884 + add r0, sp, #0x0 + bl RTC_GetTime +_020D888C: ; 0x020D888C + cmp r0, #0x0 + bne _020D88B0 + ldr r2, [sp, #0x8] + ldr r0, [sp, #0x4] + ldr r1, _020D88DC ; =0x02106A54 + add r0, r2, r0, lsl #0x8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + str r0, [r1, #0x0] +_020D88B0: + ldr r1, _020D88DC ; =0x02106A54 + ldr r0, [r1, #0x0] + add r0, r0, #0x1 + mov r0, r0, lsl #0x10 + mov r2, r0, lsr #0x10 + mov r0, r2, lsl #0x10 + str r2, [r1, #0x0] + mov r0, r0, lsr #0x10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020D88DC: .word 0x02106A54 + + arm_func_start WM_GetOtherElements +WM_GetOtherElements: ; 0x020D88E0 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x88 + ldrh r2, [r1, #0x3c] + mov lr, r0 + cmp r2, #0x0 + beq _020D892C + mov r0, #0x0 + add r5, sp, #0x0 + strb r0, [sp, #0x0] + mov r4, #0x8 +_020D8908: + ldmia r5!, {r0-r3} + stmia lr!, {r0-r3} + subs r4, r4, #0x1 + bne _020D8908 + ldr r0, [r5, #0x0] + add sp, sp, #0x88 + str r0, [lr, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_020D892C: + ldrh r0, [r1, #0x3e] + strb r0, [sp, #0x0] + ldrb r0, [sp, #0x0] + cmp r0, #0x0 + bne _020D896C + add r5, sp, #0x0 + mov r4, #0x8 +_020D8948: + ldmia r5!, {r0-r3} + stmia lr!, {r0-r3} + subs r4, r4, #0x1 + bne _020D8948 + ldr r0, [r5, #0x0] + add sp, sp, #0x88 + str r0, [lr, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_020D896C: + cmp r0, #0x10 + movhi r0, #0x10 + strhib r0, [sp, #0x0] + ldrh r2, [r1, #0x0] + ldrb r3, [sp, #0x0] + mov r0, #0x0 + mov r2, r2, lsl #0x1 + sub r4, r2, #0x40 + cmp r3, #0x0 + add r3, r1, #0x40 + mov r2, r0 + and r1, r4, #0xff + ble _020D8A20 + add r12, sp, #0x0 +_020D89A4: + ldrb r5, [r3, #0x0] + add r6, r12, r2, lsl #0x3 + add r4, r3, #0x2 + strb r5, [r6, #0x4] + ldrb r5, [r3, #0x1] + strb r5, [r6, #0x5] + str r4, [r6, #0x8] + ldrb r4, [r6, #0x5] + add r4, r4, #0x2 + and r5, r4, #0xff + add r0, r0, r5 + and r0, r0, #0xff + cmp r0, r1 + bls _020D8A0C + mov r0, #0x0 + strb r0, [sp, #0x0] + mov r4, #0x8 +_020D89E8: + ldmia r12!, {r0-r3} + stmia lr!, {r0-r3} + subs r4, r4, #0x1 + bne _020D89E8 + ldr r0, [r12, #0x0] + add sp, sp, #0x88 + str r0, [lr, #0x0] + ldmia sp!, {r4-r6,lr} + bx lr +_020D8A0C: + ldrb r4, [sp, #0x0] + add r2, r2, #0x1 + add r3, r3, r5 + cmp r2, r4 + blt _020D89A4 +_020D8A20: + add r4, sp, #0x0 + mov r12, #0x8 +_020D8A28: + ldmia r4!, {r0-r3} + stmia lr!, {r0-r3} + subs r12, r12, #0x1 + bne _020D8A28 + ldr r0, [r4, #0x0] + str r0, [lr, #0x0] + add sp, sp, #0x88 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start WM_GetDispersionScanPeriod +WM_GetDispersionScanPeriod: ; 0x020D8A4C + stmdb sp!, {lr} + sub sp, sp, #0xc + add r0, sp, #0x0 + bl OS_GetMacAddress + mov r2, #0x0 + add r1, sp, #0x0 + mov r3, r2 +_020D8A68: + ldrb r0, [r1, #0x0] + add r2, r2, #0x1 + cmp r2, #0x6 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + add r1, r1, #0x1 + blt _020D8A68 + ldr r0, _020D8AE4 ; =0x027FFC3C + mov r1, #0xd + ldr r0, [r0, #0x0] + ldr r2, _020D8AE8 ; =0x66666667 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + mul r0, r3, r1 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + smull r0, r1, r2, r3 + mov r1, r1, asr #0x2 + mov r0, r3, lsr #0x1f + ldr r2, _020D8AEC ; =0x0000000A + add r1, r0, r1 + smull r0, r1, r2, r1 + sub r1, r3, r0 + add r0, r1, #0x1e + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020D8AE4: .word 0x027FFC3C +_020D8AE8: .word 0x66666667 +_020D8AEC: .word 0x0000000A + + arm_func_start WM_GetDispersionBeaconPeriod +WM_GetDispersionBeaconPeriod: ; 0x020D8AF0 + stmdb sp!, {lr} + sub sp, sp, #0xc + add r0, sp, #0x0 + bl OS_GetMacAddress + mov r2, #0x0 + add r1, sp, #0x0 + mov r3, r2 +_020D8B0C: + ldrb r0, [r1, #0x0] + add r2, r2, #0x1 + cmp r2, #0x6 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + add r1, r1, #0x1 + blt _020D8B0C + ldr r0, _020D8B88 ; =0x027FFC3C + mov r1, #0x7 + ldr r0, [r0, #0x0] + ldr r2, _020D8B8C ; =0x66666667 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + mul r0, r3, r1 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + smull r0, r1, r2, r3 + mov r1, r1, asr #0x3 + mov r0, r3, lsr #0x1f + ldr r2, _020D8B90 ; =0x00000014 + add r1, r0, r1 + smull r0, r1, r2, r1 + sub r1, r3, r0 + add r0, r1, #0xc8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0xc + ldmia sp!, {lr} + bx lr + .balign 4 +_020D8B88: .word 0x027FFC3C +_020D8B8C: .word 0x66666667 +_020D8B90: .word 0x00000014 + + arm_func_start WM_GetLinkLevel +WM_GetLinkLevel: ; 0x020D8B94 + stmdb sp!, {r4,lr} + bl WMi_GetSystemWork + mov r4, r0 + bl WMi_CheckInitialized +_020D8BA4: ; 0x020D8BA4 + cmp r0, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x2 + bl DC_InvalidateRange + ldr r2, [r4, #0x4] + ldrh r0, [r2, #0x0] + cmp r0, #0x9 + beq _020D8BE4 + cmp r0, #0xa + beq _020D8C10 + cmp r0, #0xb + beq _020D8C10 + b _020D8C2C +_020D8BE4: + ldr r0, _020D8C38 ; =0x00000182 + mov r1, #0x2 + add r0, r2, r0 + bl DC_InvalidateRange + ldr r2, [r4, #0x4] + add r0, r2, #0x100 + ldrh r0, [r0, #0x82] + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr +_020D8C10: + add r0, r2, #0xbc + mov r1, #0x2 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldrh r0, [r0, #0xbc] + ldmia sp!, {r4,lr} + bx lr +_020D8C2C: + mov r0, #0x0 + ldmia sp!, {r4,lr} + bx lr + .balign 4 +_020D8C38: .word 0x00000182 + + arm_func_start WM_GetAllowedChannel +WM_GetAllowedChannel: ; 0x020D8C3C + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl WMi_CheckInitialized +_020D8C48: ; 0x020D8C48 + cmp r0, #0x0 + movne r0, #0x8000 + ldreq r0, _020D8C64 ; =0x027FFCFA + ldreqh r0, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020D8C64: .word 0x027FFCFA + + arm_func_start WM_ReadMPData +WM_ReadMPData: ; 0x020D8C68 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x40 + mov r5, r0 + mov r4, r1 + bl WMi_GetSystemWork + mov r6, r0 + bl WMi_CheckInitialized +_020D8C84: ; 0x020D8C84 + cmp r0, #0x0 + addne sp, sp, #0x40 + movne r0, #0x0 + ldmneia sp!, {r4-r6,lr} + bxne lr + cmp r4, #0x1 + blo _020D8CA8 + cmp r4, #0xf + bls _020D8CB8 +_020D8CA8: + add sp, sp, #0x40 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr +_020D8CB8: + ldr r2, [r6, #0x4] + ldr r0, _020D8D68 ; =0x00000182 + mov r1, #0x2 + add r0, r2, r0 + bl DC_InvalidateRange + ldr r0, [r6, #0x4] + mov r1, #0x1 + add r0, r0, #0x100 + ldrh r2, [r0, #0x82] + mov r0, r1, lsl r4 + ands r0, r2, r0 + addeq sp, sp, #0x40 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrh r0, [r5, #0x4] + cmp r0, #0x0 + addeq sp, sp, #0x40 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + add r0, r5, #0xa + str r0, [sp, #0x0] + mov r3, #0x0 + add r2, sp, #0x0 +_020D8D1C: + ldr r0, [r2, r3, lsl #0x2] + ldrh r1, [r0, #0x4] + cmp r4, r1 + addeq sp, sp, #0x40 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + add r3, r3, #0x1 + sub r0, r3, #0x1 + ldrh r1, [r5, #0x6] + ldr r0, [r2, r0, lsl #0x2] + add r0, r1, r0 + str r0, [r2, r3, lsl #0x2] + ldrh r0, [r5, #0x4] + cmp r3, r0 + blt _020D8D1C + mov r0, #0x0 + add sp, sp, #0x40 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D8D68: .word 0x00000182 + + arm_func_start WM_GetMPReceiveBufferSize +WM_GetMPReceiveBufferSize: + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x8 + bl WMi_CheckStateEx +_020D8D8C: ; 0x020D8D8C + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0xc + bl DC_InvalidateRange + ldr r1, [r4, #0x4] + ldr r0, [r1, #0xc] + cmp r0, #0x1 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + add r0, r1, #0x188 + mov r1, #0x2 + bl DC_InvalidateRange + ldr r1, [r4, #0x4] + add r0, r1, #0x100 + ldrh r0, [r0, #0x88] + cmp r0, #0x0 + moveq r5, #0x1 + add r0, r1, #0x3e + mov r1, #0x2 + movne r5, #0x0 + bl DC_InvalidateRange + cmp r5, #0x1 + ldr r0, [r4, #0x4] + addne sp, sp, #0x4 + ldrh r5, [r0, #0x3e] + addne r0, r5, #0x51 + bicne r0, r0, #0x1f + movne r0, r0, lsl #0x1 + ldmneia sp!, {r4-r5,lr} + bxne lr + add r0, r0, #0xf8 + mov r1, #0x2 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + add r1, r5, #0xc + ldrh r0, [r0, #0xf8] + mul r0, r1, r0 + add r0, r0, #0x29 + bic r0, r0, #0x1f + mov r0, r0, lsl #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_GetMPSendBufferSize +WM_GetMPSendBufferSize: + stmdb sp!, {r4,lr} + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x8 + bl WMi_CheckStateEx +_020D8E70: ; 0x020D8E70 + cmp r0, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0xc + bl DC_InvalidateRange + ldr r1, [r4, #0x4] + ldr r0, [r1, #0xc] + cmp r0, #0x1 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + add r0, r1, #0x3c + mov r1, #0x4 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldrh r0, [r0, #0x3c] + add r0, r0, #0x1f + bic r0, r0, #0x1f + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_ReadStatus +WM_ReadStatus: ; 0x020D8ECC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + mov r4, r0 + bl WMi_CheckInitialized +_020D8EE4: ; 0x020D8EE4 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r5, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r4, #0x4] + mov r1, #0x7c0 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + mov r1, r5 + mov r2, #0x7c0 + bl MIi_CpuCopyFast +_020D8F24: ; 0x020D8F24 + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_SetPortCallback +WM_SetPortCallback: + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x48 + movs r5, r1 + mov r6, r0 + mov r4, r2 + beq _020D8F9C + add r0, sp, #0x0 + mov r1, #0x0 + mov r2, #0x44 + bl MI_CpuFill8 + mov r3, #0x0 + ldr r1, _020D9010 ; =0x0000FFFF + mov r7, #0x82 + mov r2, #0x19 + add r0, sp, #0x14 + strh r7, [sp, #0x0] + strh r3, [sp, #0x2] + strh r2, [sp, #0x4] + strh r6, [sp, #0x6] + str r3, [sp, #0x8] + str r3, [sp, #0xc] + strh r3, [sp, #0x10] + strh r1, [sp, #0x1a] + str r4, [sp, #0x1c] + strh r3, [sp, #0x12] + bl OS_GetMacAddress +_020D8F9C: + bl OS_DisableInterrupts + mov r8, r0 + bl WMi_CheckInitialized + movs r7, r0 + beq _020D8FC8 + mov r0, r8 + bl OS_RestoreInterrupts + add sp, sp, #0x48 + mov r0, r7 + ldmia sp!, {r4-r8,lr} + bx lr +_020D8FC8: + bl WMi_GetSystemWork + add r0, r0, r6, lsl #0x2 + str r5, [r0, #0xcc] + str r4, [r0, #0x10c] + cmp r5, #0x0 + beq _020D8FF8 + bl WM_GetConnectedAIDs + strh r0, [sp, #0x22] + bl WM_GetAID + strh r0, [sp, #0x20] + add r0, sp, #0x0 + blx r5 +_020D8FF8: + mov r0, r8 + bl OS_RestoreInterrupts +_020D9000: ; 0x020D9000 + mov r0, #0x0 + add sp, sp, #0x48 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D9010: .word 0x0000FFFF + + arm_func_start WM_SetIndCallback +WM_SetIndCallback: ; 0x020D9014 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + bl OS_DisableInterrupts + mov r5, r0 + bl WMi_CheckInitialized + movs r4, r0 + beq _020D9044 + mov r0, r5 + bl OS_RestoreInterrupts + mov r0, r4 + ldmia sp!, {r4-r6,lr} + bx lr +_020D9044: + bl WMi_GetSystemWork + str r6, [r0, #0xc8] + mov r0, r5 + bl OS_RestoreInterrupts +_020D9054: ; 0x020D9054 + mov r0, #0x0 + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start WM_Disconnect +WM_Disconnect: ; 0x020D9060 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r6, r0 + mov r5, r1 + bl WMi_GetSystemWork + mov r1, #0xa + mov r4, r0 + str r1, [sp, #0x0] + mov r12, #0xb + mov r0, #0x5 + mov r1, #0x7 + mov r2, #0x9 + mov r3, #0x8 + str r12, [sp, #0x4] + bl WMi_CheckStateEx +_020D909C: ; 0x020D909C + cmp r0, #0x0 + addne sp, sp, #0x8 + ldmneia sp!, {r4-r6,lr} + bxne lr + ldr r2, [r4, #0x4] + ldrh r0, [r2, #0x0] + cmp r0, #0x7 + beq _020D90C4 + cmp r0, #0x9 + bne _020D9120 +_020D90C4: + cmp r5, #0x1 + blo _020D90D4 + cmp r5, #0xf + bls _020D90E4 +_020D90D4: + add sp, sp, #0x8 + mov r0, #0x6 + ldmia sp!, {r4-r6,lr} + bx lr +_020D90E4: + ldr r0, _020D9164 ; =0x00000182 + mov r1, #0x2 + add r0, r2, r0 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + mov r1, #0x1 + add r0, r0, #0x100 + ldrh r2, [r0, #0x82] + mov r0, r1, lsl r5 + ands r0, r2, r0 + bne _020D9134 + add sp, sp, #0x8 + mov r0, #0x7 + ldmia sp!, {r4-r6,lr} + bx lr +_020D9120: + cmp r5, #0x0 + addne sp, sp, #0x8 + movne r0, #0x6 + ldmneia sp!, {r4-r6,lr} + bxne lr +_020D9134: + mov r1, r6 + mov r0, #0xd + bl WMi_SetCallbackTable + mov r1, #0x1 + mov r2, r1, lsl r5 + mov r0, #0xd + bl WMi_SendCommand +_020D9150: ; 0x020D9150 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,lr} + bx lr + .balign 4 +_020D9164: .word 0x00000182 + + arm_func_start WM_StartConnectEx +WM_StartConnectEx: ; 0x020D9168 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x2c + mov r7, r0 + mov r6, r1 + mov r0, #0x1 + mov r1, #0x2 + mov r5, r2 + mov r4, r3 + bl WMi_CheckStateEx +_020D918C: ; 0x020D918C + cmp r0, #0x0 + addne sp, sp, #0x2c + ldmneia sp!, {r4-r7,lr} + bxne lr + cmp r6, #0x0 + addeq sp, sp, #0x2c + moveq r0, #0x6 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldrh r1, [r6, #0x0] + mov r0, r6 + mov r1, r1, lsl #0x1 + bl DC_StoreRange + bl WMi_GetSystemWork + add r1, r0, #0x100 + mov r2, #0x0 + strh r2, [r1, #0x50] + str r2, [r0, #0x14c] + mov r1, r7 + mov r0, #0xc + bl WMi_SetCallbackTable + mov r0, #0xc + strh r0, [sp, #0x0] + str r6, [sp, #0x4] + cmp r5, #0x0 + beq _020D9208 + add r1, sp, #0x8 + mov r0, r5 + mov r2, #0x18 + bl MI_CpuCopy8 + b _020D9218 +_020D9208: + add r0, sp, #0x8 + mov r1, #0x0 + mov r2, #0x18 + bl MI_CpuFill8 +_020D9218: + ldrh r2, [sp, #0x40] + add r0, sp, #0x0 + mov r1, #0x28 + str r4, [sp, #0x20] + strh r2, [sp, #0x26] + bl WMi_SendCommandDirect +_020D9230: ; 0x020D9230 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x2c + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_EndScan +WM_EndScan: ; 0x020D9244 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x5 + bl WMi_CheckStateEx +_020D9258: ; 0x020D9258 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0xb + bl WMi_SetCallbackTable + mov r0, #0xb + mov r1, #0x0 + bl WMi_SendCommand +_020D927C: ; 0x020D927C + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_StartScanEx +WM_StartScanEx: ; 0x020D928C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x3c + mov r5, r0 + mov r0, #0x3 + mov r4, r1 + mov r2, r0 + mov r1, #0x2 + mov r3, #0x5 + bl WMi_CheckStateEx +_020D92B0: ; 0x020D92B0 + cmp r0, #0x0 + addne sp, sp, #0x3c + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r4, #0x0 + addeq sp, sp, #0x3c + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r4, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x3c + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrh r0, [r4, #0x4] + cmp r0, #0x400 + addhi sp, sp, #0x3c + movhi r0, #0x6 + ldmhiia sp!, {r4-r5,lr} + bxhi lr + ldrh r0, [r4, #0x12] + cmp r0, #0x20 + addhi sp, sp, #0x3c + movhi r0, #0x6 + ldmhiia sp!, {r4-r5,lr} + bxhi lr + ldrh r1, [r4, #0x10] + cmp r1, #0x0 + beq _020D934C + cmp r1, #0x1 + beq _020D934C + cmp r1, #0x2 + beq _020D934C + cmp r1, #0x3 + addne sp, sp, #0x3c + movne r0, #0x6 + ldmneia sp!, {r4-r5,lr} + bxne lr +_020D934C: + ldr r0, _020D9408 ; =0x0000FFFE + add r0, r1, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #0x1 + bhi _020D937C + ldrh r0, [r4, #0x34] + cmp r0, #0x20 + addhi sp, sp, #0x3c + movhi r0, #0x6 + ldmhiia sp!, {r4-r5,lr} + bxhi lr +_020D937C: + mov r1, r5 + mov r0, #0x26 + bl WMi_SetCallbackTable + mov r0, #0x26 + strh r0, [sp, #0x0] + ldrh r2, [r4, #0x6] + add r1, sp, #0xc + add r0, r4, #0xa + strh r2, [sp, #0x2] + ldr r3, [r4, #0x0] + mov r2, #0x6 + str r3, [sp, #0x4] + ldrh r3, [r4, #0x4] + strh r3, [sp, #0x8] + ldrh r3, [r4, #0x8] + strh r3, [sp, #0xa] + bl MI_CpuCopy8 + ldrh r2, [r4, #0x10] + add r1, sp, #0x16 + add r0, r4, #0x14 + strh r2, [sp, #0x12] + ldrh r3, [r4, #0x34] + mov r2, #0x20 + strh r3, [sp, #0x36] + ldrh r3, [r4, #0x12] + strh r3, [sp, #0x14] + bl MI_CpuCopy8 +_020D93E8: ; 0x020D93E8 + add r0, sp, #0x0 + mov r1, #0x3c + bl WMi_SendCommandDirect +_020D93F4: ; 0x020D93F4 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x3c + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020D9408: .word 0x0000FFFE + + arm_func_start WM_StartScan +WM_StartScan: ; 0x020D940C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x14 + mov r5, r0 + mov r0, #0x3 + mov r4, r1 + mov r2, r0 + mov r1, #0x2 + mov r3, #0x5 + bl WMi_CheckStateEx +_020D9430: ; 0x020D9430 + cmp r0, #0x0 + addne sp, sp, #0x14 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r4, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r4, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrh r0, [r4, #0x4] + cmp r0, #0x1 + blo _020D9480 + cmp r0, #0xe + bls _020D9490 +_020D9480: + add sp, sp, #0x14 + mov r0, #0x6 + ldmia sp!, {r4-r5,lr} + bx lr +_020D9490: + mov r1, r5 + mov r0, #0xa + bl WMi_SetCallbackTable + mov r0, #0xa + strh r0, [sp, #0x0] + ldrh r2, [r4, #0x4] + add r0, sp, #0x0 + mov r1, #0x10 + strh r2, [sp, #0x2] + ldr r2, [r4, #0x0] + str r2, [sp, #0x4] + ldrh r2, [r4, #0x6] + strh r2, [sp, #0x8] + ldrb r2, [r4, #0x8] + strb r2, [sp, #0xa] + ldrb r2, [r4, #0x9] + strb r2, [sp, #0xb] + ldrb r2, [r4, #0xa] + strb r2, [sp, #0xc] + ldrb r2, [r4, #0xb] + strb r2, [sp, #0xd] + ldrb r2, [r4, #0xc] + strb r2, [sp, #0xe] + ldrb r2, [r4, #0xd] + strb r2, [sp, #0xf] + bl WMi_SendCommandDirect +_020D94F8: ; 0x020D94F8 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x14 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_EndParent +WM_EndParent: ; 0x020D950C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x7 + bl WMi_CheckStateEx +_020D9520: ; 0x020D9520 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x9 + bl WMi_SetCallbackTable + mov r0, #0x9 + mov r1, #0x0 + bl WMi_SendCommand +_020D9544: ; 0x020D9544 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_StartParent +WM_StartParent: ; 0x020D9554 + ldr ip, _020D9560 ; =FUN_020D9564 + mov r1, #0x1 + bx r12 + .balign 4 +_020D9560: .word FUN_020D9564 + + arm_func_start FUN_020D9564 +FUN_020D9564: ; 0x020D9564 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9580: ; 0x020D9580 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + bl WMi_GetSystemWork + add r1, r0, #0x100 + mov r2, #0x0 + strh r2, [r1, #0x50] + str r2, [r0, #0x14c] + mov r1, r5 + mov r0, #0x8 + bl WMi_SetCallbackTable + mov r2, r4 + mov r0, #0x8 + mov r1, #0x1 + bl WMi_SendCommand +_020D95C0: ; 0x020D95C0 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WmCheckParentParameter +WmCheckParentParameter: ; 0x020D95D4 + ldrh r1, [r0, #0x4] + cmp r1, #0x70 + movhi r0, #0x0 + bxhi lr + ldrh r1, [r0, #0x18] + cmp r1, #0xa + blo _020D95F8 + cmp r1, #0x3e8 + bls _020D9600 +_020D95F8: + mov r0, #0x0 + bx lr +_020D9600: + ldrh r0, [r0, #0x32] + cmp r0, #0x1 + blo _020D9614 + cmp r0, #0xe + bls _020D961C +_020D9614: + mov r0, #0x0 + bx lr +_020D961C: + mov r0, #0x1 + bx lr + + arm_func_start WM_SetParentParameter +WM_SetParentParameter: ; 0x020D9624 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9640: ; 0x020D9640 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r4, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldrh r0, [r4, #0x4] + cmp r0, #0x0 + beq _020D9688 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r5,lr} + bxeq lr +_020D9688: + ldrh r1, [r4, #0x14] + ldrh r0, [r4, #0x34] + cmp r1, #0x0 + movne r2, #0x2a + moveq r2, #0x0 + add r0, r0, r2 + cmp r0, #0x200 + bgt _020D96C4 + ldrh r0, [r4, #0x36] + cmp r1, #0x0 + movne r1, #0x6 + moveq r1, #0x0 + add r0, r0, r1 + cmp r0, #0x200 + ble _020D96D4 +_020D96C4: + add sp, sp, #0x4 + mov r0, #0x6 + ldmia sp!, {r4-r5,lr} + bx lr +_020D96D4: + mov r0, r4 + bl WmCheckParentParameter + mov r1, r5 + mov r0, #0x7 + bl WMi_SetCallbackTable + mov r0, r4 + mov r1, #0x40 + bl DC_StoreRange + ldrh r1, [r4, #0x4] + cmp r1, #0x0 + beq _020D9708 + ldr r0, [r4, #0x0] + bl DC_StoreRange +_020D9708: + mov r2, r4 + mov r0, #0x7 + mov r1, #0x1 + bl WMi_SendCommand +_020D9718: ; 0x020D9718 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_End +WM_End: ; 0x020D972C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9740: ; 0x020D9740 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x2 + bl WMi_SetCallbackTable + mov r0, #0x2 + mov r1, #0x0 + bl WMi_SendCommand +_020D9764: ; 0x020D9764 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_Reset +WM_Reset: ; 0x020D9774 + stmdb sp!, {r4,lr} + mov r4, r0 + bl WMi_CheckIdle +_020D9780: ; 0x020D9780 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x1 + bl WMi_SetCallbackTable + mov r0, #0x1 + mov r1, #0x0 + bl WMi_SendCommand +_020D97A4: ; 0x020D97A4 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_Initialize +WM_Initialize: ; 0x020D97B4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r4, r1 + mov r1, r2 + bl WM_Init +_020D97C8: ; 0x020D97C8 + cmp r0, #0x0 + addne sp, sp, #0x8 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x0 + bl WMi_SetCallbackTable + bl WMi_GetSystemWork + mov r3, r0 + ldr r1, [r3, #0x10] + mov r0, #0x0 + str r1, [sp, #0x0] + ldr r2, [r3, #0x0] + ldr r3, [r3, #0x4] + mov r1, #0x3 + bl WMi_SendCommand +_020D9808: ; 0x020D9808 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_PowerOff +WM_PowerOff: ; 0x020D981C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020D9830: ; 0x020D9830 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x6 + bl WMi_SetCallbackTable + mov r0, #0x6 + mov r1, #0x0 + bl WMi_SendCommand +_020D9854: ; 0x020D9854 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_PowerOn +WM_PowerOn: ; 0x020D9864 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, r0 + bl WMi_CheckStateEx +_020D9878: ; 0x020D9878 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x5 + bl WMi_SetCallbackTable + mov r0, #0x5 + mov r1, #0x0 + bl WMi_SendCommand +_020D989C: ; 0x020D989C + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_Disable +WM_Disable: ; 0x020D98AC + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r1, r0 + bl WMi_CheckStateEx +_020D98C0: ; 0x020D98C0 + cmp r0, #0x0 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x4 + bl WMi_SetCallbackTable + mov r0, #0x4 + mov r1, #0x0 + bl WMi_SendCommand +_020D98E4: ; 0x020D98E4 + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_Enable +WM_Enable: ; 0x020D98F4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + mov r4, r0 + mov r0, #0x1 + mov r1, #0x0 + bl WMi_CheckStateEx +_020D990C: ; 0x020D990C + cmp r0, #0x0 + addne sp, sp, #0x8 + ldmneia sp!, {r4,lr} + bxne lr + mov r1, r4 + mov r0, #0x3 + bl WMi_SetCallbackTable + bl WMi_GetSystemWork + mov r3, r0 + ldr r1, [r3, #0x10] + mov r0, #0x3 + str r1, [sp, #0x0] + ldr r2, [r3, #0x0] + ldr r3, [r3, #0x4] + mov r1, r0 + bl WMi_SendCommand +_020D994C: ; 0x020D994C + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x8 + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_EndMP +WM_EndMP: ; 0x020D9960 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + bl WMi_CheckStateEx +_020D9984: ; 0x020D9984 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0xc + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldr r0, [r0, #0xc] + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x3 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r1, r5 + mov r0, #0x10 + bl WMi_SetCallbackTable + mov r0, #0x10 + mov r1, #0x0 + bl WMi_SendCommand +_020D99D8: ; 0x020D99D8 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_SetMPDataToPortEx +WM_SetMPDataToPortEx: ; 0x020D99EC + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x14 + mov r9, r0 + mov r8, r1 + mov r7, r2 + mov r6, r3 + mov r5, #0x1 + bl WMi_GetSystemWork + ldr r4, [r0, #0x4] + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + bl WMi_CheckStateEx +_020D9A20: ; 0x020D9A20 + cmp r0, #0x0 + addne sp, sp, #0x14 + ldmneia sp!, {r4-r9,lr} + bxne lr + add r0, r4, #0x3c + mov r1, #0x2 + bl DC_InvalidateRange + add r0, r4, #0x188 + mov r1, #0x2 + bl DC_InvalidateRange + add r0, r4, #0x100 + ldrh r0, [r0, #0x88] + cmp r0, #0x0 + bne _020D9A7C + ldr r0, _020D9B44 ; =0x00000182 + mov r1, #0x2 + add r0, r4, r0 + bl DC_InvalidateRange + add r2, r4, #0x100 + add r0, r4, #0x86 + mov r1, #0x2 + ldrh r5, [r2, #0x82] + bl DC_InvalidateRange +_020D9A7C: + cmp r7, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r5, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x7 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + add r0, r4, #0x7c + mov r1, #0x2 + bl DC_InvalidateRange + ldr r0, [r4, #0x7c] + cmp r7, r0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + cmp r6, #0x200 + addhi sp, sp, #0x14 + movhi r0, #0x6 + ldmhiia sp!, {r4-r9,lr} + bxhi lr + cmp r6, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x6 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + mov r0, r7 + mov r1, r6 + bl DC_StoreRange + ldrh r2, [sp, #0x30] + ldrh r1, [sp, #0x34] + ldrh r0, [sp, #0x38] + str r2, [sp, #0x0] + str r1, [sp, #0x4] + str r0, [sp, #0x8] + str r9, [sp, #0xc] + mov r2, r7 + mov r3, r6 + mov r0, #0xf + mov r1, #0x7 + str r8, [sp, #0x10] + bl WMi_SendCommand +_020D9B30: ; 0x020D9B30 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x14 + ldmia sp!, {r4-r9,lr} + bx lr + .balign 4 +_020D9B44: .word 0x00000182 + + arm_func_start WM_StartMP +WM_StartMP: ; 0x020D9B48 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x24 + mov r6, r1 + mov r7, r0 + mov r5, r2 + add r1, sp, #0x8 + mov r0, #0x0 + mov r2, #0x1c + mov r4, r3 + bl MIi_CpuClear32 + ldrh r12, [sp, #0x3c] + mov r0, #0x3 + str r0, [sp, #0x8] + ldrh lr, [sp, #0x38] + strh r12, [sp, #0xc] + strh r12, [sp, #0xe] + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + add r12, sp, #0x8 + str lr, [sp, #0x0] + str r12, [sp, #0x4] + bl WMi_StartMP + add sp, sp, #0x24 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_StartMPEx +WM_StartMPEx: ; 0x020D9BB4 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x28 + mov r6, r1 + mov r7, r0 + mov r5, r2 + add r1, sp, #0x8 + mov r0, #0x0 + mov r2, #0x1c + mov r4, r3 + bl MIi_CpuClear32 + ldrh lr, [sp, #0x44] + ldr r1, [sp, #0x58] + ldrh r12, [sp, #0x48] + ldr r0, [sp, #0x54] + ldr r8, _020D9C54 ; =0x00001E03 + cmp r0, #0x0 + ldr r3, [sp, #0x4c] + ldr r2, [sp, #0x50] + strb r1, [sp, #0x22] + strh r12, [sp, #0x1e] + strb r3, [sp, #0x20] + strb r2, [sp, #0x21] + ldrh r1, [sp, #0x40] + str r8, [sp, #0x8] + orrne r0, r8, #0x4 + strne r0, [sp, #0x8] + strh lr, [sp, #0xc] + strh lr, [sp, #0xe] + strneh lr, [sp, #0x10] + str r1, [sp, #0x0] + add r12, sp, #0x8 + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + str r12, [sp, #0x4] + bl WMi_StartMP + add sp, sp, #0x28 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D9C54: .word 0x00001E03 + + arm_func_start WMi_StartMP +WMi_StartMP: ; 0x020D9C58 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x34 + mov r9, r0 + mov r8, r1 + mov r7, r2 + mov r6, r3 + bl WMi_GetSystemWork + ldr r5, [r0, #0x4] + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x8 + bl WMi_CheckStateEx +_020D9C88: ; 0x020D9C88 + cmp r0, #0x0 + addne sp, sp, #0x34 + ldmneia sp!, {r4-r9,lr} + bxne lr + add r0, r5, #0x188 + mov r1, #0x2 + bl DC_InvalidateRange + add r0, r5, #0xc6 + mov r1, #0x2 + bl DC_InvalidateRange + add r0, r5, #0x100 + ldrh r0, [r0, #0x88] + cmp r0, #0x0 + beq _020D9CD8 + ldrh r0, [r5, #0xc6] + cmp r0, #0x1 + addne sp, sp, #0x34 + movne r0, #0x3 + ldmneia sp!, {r4-r9,lr} + bxne lr +_020D9CD8: + add r0, r5, #0xc + mov r1, #0x4 + bl DC_InvalidateRange + ldr r0, [r5, #0xc] + cmp r0, #0x1 + addeq sp, sp, #0x34 + moveq r0, #0x3 + ldmeqia sp!, {r4-r9,lr} + bxeq lr + ands r0, r7, #0x3f + addne sp, sp, #0x34 + movne r0, #0x6 + ldmneia sp!, {r4-r9,lr} + bxne lr + ldrh r4, [sp, #0x50] + ands r0, r4, #0x1f + addne sp, sp, #0x34 + movne r0, #0x6 + ldmneia sp!, {r4-r9,lr} + bxne lr + add r0, r5, #0x9c + mov r1, #0x2 + bl DC_InvalidateRange + ldrh r0, [r5, #0x9c] + cmp r0, #0x0 + bne _020D9D70 + bl WM_GetMPReceiveBufferSize +_020D9D44: ; 0x020D9D44 + cmp r7, r0 + addlt sp, sp, #0x34 + movlt r0, #0x6 + ldmltia sp!, {r4-r9,lr} + bxlt lr + bl WM_GetMPSendBufferSize +_020D9D5C: ; 0x020D9D5C + cmp r4, r0 + addlt sp, sp, #0x34 + movlt r0, #0x6 + ldmltia sp!, {r4-r9,lr} + bxlt lr +_020D9D70: + mov r1, r9 + mov r0, #0xe + bl WMi_SetCallbackTable + add r1, sp, #0x0 + mov r0, #0x0 + mov r2, #0x30 + bl MIi_CpuClear32 + ldrh r3, [sp, #0x50] + mov r4, r7, lsr #0x1 + mov r5, #0xe + ldr r0, [sp, #0x54] + add r1, sp, #0x14 + mov r2, #0x1c + strh r5, [sp, #0x0] + str r8, [sp, #0x4] + str r4, [sp, #0x8] + str r6, [sp, #0xc] + str r3, [sp, #0x10] + bl MIi_CpuCopy32 +_020D9DBC: ; 0x020D9DBC + add r0, sp, #0x0 + mov r1, #0x30 + bl WMi_SendCommandDirect +_020D9DC8: ; 0x020D9DC8 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x34 + ldmia sp!, {r4-r9,lr} + bx lr + + arm_func_start WM_EndDCF +WM_EndDCF: ; 0x020D9DDC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x1 + mov r1, #0xb + bl WMi_CheckStateEx +_020D9DFC: ; 0x020D9DFC + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0x10 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldr r0, [r0, #0x10] + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x3 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + mov r1, r5 + mov r0, #0x13 + bl WMi_SetCallbackTable + mov r0, #0x13 + mov r1, #0x0 + bl WMi_SendCommand +_020D9E50: ; 0x020D9E50 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_SetDCFData +WM_SetDCFData: ; 0x020D9E64 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_GetSystemWork + mov r8, r0 + mov r0, #0x1 + mov r1, #0xb + bl WMi_CheckStateEx +_020D9E90: ; 0x020D9E90 + cmp r0, #0x0 + addne sp, sp, #0x10 + ldmneia sp!, {r4-r8,lr} + bxne lr + ldr r0, [r8, #0x4] + mov r1, #0x4 + add r0, r0, #0x10 + bl DC_InvalidateRange + ldr r0, [r8, #0x4] + ldr r0, [r0, #0x10] + cmp r0, #0x0 + addeq sp, sp, #0x10 + moveq r0, #0x3 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldr r0, _020D9F3C ; =0x000005E4 + cmp r4, r0 + addhi sp, sp, #0x10 + movhi r0, #0x6 + ldmhiia sp!, {r4-r8,lr} + bxhi lr + mov r0, r5 + mov r1, r4 + bl DC_StoreRange + mov r1, r7 + mov r0, #0x12 + bl WMi_SetCallbackTable + add r1, sp, #0x8 + mov r0, r6 + mov r2, #0x6 + bl MI_CpuCopy8 + str r5, [sp, #0x0] + str r4, [sp, #0x4] + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + mov r0, #0x12 + mov r1, #0x4 + bl WMi_SendCommand +_020D9F28: ; 0x020D9F28 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,lr} + bx lr + .balign 4 +_020D9F3C: .word 0x000005E4 + + arm_func_start WM_StartDCF +WM_StartDCF: ; 0x020D9F40 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl WMi_GetSystemWork + mov r4, r0 + mov r0, #0x1 + mov r1, #0x8 + bl WMi_CheckStateEx +_020D9F68: ; 0x020D9F68 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + ldr r0, [r4, #0x4] + mov r1, #0x4 + add r0, r0, #0x10 + bl DC_InvalidateRange + ldr r0, [r4, #0x4] + ldr r0, [r0, #0x10] + cmp r0, #0x1 + addeq sp, sp, #0x4 + moveq r0, #0x3 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + cmp r5, #0x10 + addcc sp, sp, #0x4 + movcc r0, #0x6 + ldmccia sp!, {r4-r7,lr} + bxcc lr + cmp r6, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r6 + mov r1, r5 + bl DC_StoreRange + mov r1, r7 + mov r0, #0x11 + bl WMi_SetCallbackTable + mov r2, r6 + mov r3, r5 + mov r0, #0x11 + mov r1, #0x2 + bl WMi_SendCommand +_020D9FF8: ; 0x020D9FF8 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WmGetSharedDataAddress +WmGetSharedDataAddress: ; 0x020DA00C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r12, #0x1 + mov r3, r12, lsl r3 + sub r3, r3, #0x1 + mov r5, r0 + and r0, r1, r3 + mov r4, r2 + bl FUN_020DDC5C + add r1, r5, #0x800 + ldrh r1, [r1, #0x10] + mla r0, r1, r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_GetSharedDataAddress +WM_GetSharedDataAddress: ; 0x020DA048 + stmdb sp!, {r4,lr} + mov r4, r1 + ldrh lr, [r4, #0x2] + cmp r0, #0x0 + mov r3, r2 + mov r1, #0x1 + mov r12, r1, lsl r3 + ldrh r1, [r4, #0x0] + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + cmp r4, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ands r2, r1, r12 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + ands r2, lr, r12 + moveq r0, #0x0 + ldmeqia sp!, {r4,lr} + bxeq lr + add r2, r4, #0x4 + bl WmGetSharedDataAddress + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WmDataSharingSendDataSet +WmDataSharingSendDataSet: + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x10 + mov r10, r0 + mov r9, r1 + bl OS_DisableInterrupts + add r1, r10, #0x800 + ldrh r1, [r1, #0x8] + mov r7, r0 + mov r1, r1, lsl #0x9 + ldrh r1, [r10, r1] + cmp r1, #0x0 + bne _020DA210 + bl WMi_GetMPReadyAIDs + add r1, r10, #0x800 + ldrh r6, [r1, #0x8] + mov r5, r0 + ldrh r1, [r1, #0x18] + add r0, r6, #0x1 + and r0, r0, #0x3 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + cmp r1, #0x1 + addeq r0, r4, #0x1 + andeq r0, r0, #0x3 + moveq r0, r0, lsl #0x10 + moveq r8, r0, lsr #0x10 + movne r8, r4 + add r1, r10, r8, lsl #0x9 + mov r0, #0x0 + mov r2, #0x200 + bl MIi_CpuClear16 + add r0, r10, #0x800 + ldrh r3, [r0, #0xe] + orr r2, r5, #0x1 + mov r1, r8, lsl #0x9 + and r2, r3, r2 + strh r2, [r10, r1] + strh r4, [r0, #0x8] + ldrh r0, [r0, #0xe] + mov r1, r6, lsl #0x9 + cmp r9, #0x1 + strh r0, [r10, r1] + ldreqh r0, [r10, r1] + biceq r0, r0, #0x1 + streqh r0, [r10, r1] + mov r0, r7 + bl OS_RestoreInterrupts + add r3, r10, #0x800 + ldrh r1, [r3, #0xe] + mov r4, #0x1 + ldr r0, _020DA220 ; =WmDataSharingSetDataCallback + and r1, r1, r5 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + str r1, [sp, #0x0] + ldrh r5, [r3, #0x16] + mov r1, r10 + add r2, r10, r6, lsl #0x9 + str r5, [sp, #0x4] + str r4, [sp, #0x8] + ldrh r3, [r3, #0x14] + bl WM_SetMPDataToPortEx + cmp r0, #0x7 + bne _020DA1E4 + add r0, r10, r6, lsl #0x1 + ldr r1, _020DA224 ; =0x0000FFFF + add r0, r0, #0x800 + strh r1, [r0, #0x0] + add r0, r10, #0x800 + ldrh r1, [r0, #0xa] + add sp, sp, #0x10 + add r1, r1, #0x1 + and r1, r1, #0x3 + strh r1, [r0, #0xa] + ldmia sp!, {r4-r10,lr} + bx lr +_020DA1E4: + cmp r0, #0x0 + addeq sp, sp, #0x10 + ldmeqia sp!, {r4-r10,lr} + bxeq lr + cmp r0, #0x2 + addne r0, r10, #0x800 + movne r1, #0x5 + strneh r1, [r0, #0x1c] + add sp, sp, #0x10 + ldmia sp!, {r4-r10,lr} + bx lr +_020DA210: + bl OS_RestoreInterrupts + add sp, sp, #0x10 + ldmia sp!, {r4-r10,lr} + bx lr + .balign 4 +_020DA220: .word WmDataSharingSetDataCallback +_020DA224: .word 0x0000FFFF + + arm_func_start WmDataSharingReceiveData +WmDataSharingReceiveData: ; 0x020DA228 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r3, r1 + mov r0, #0x1 + mov r0, r0, lsl r3 + add r12, r7, #0x800 + mov r0, r0, lsl #0x10 + ldrh r1, [r12, #0xe] + mov r5, r0, lsr #0x10 + mov r6, r2 + ands r0, r1, r5 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + ldrh r4, [r12, #0x8] + mov r0, r4, lsl #0x9 + ldrh r0, [r7, r0] + ands r0, r5, r0 + bne _020DA2B4 + ldrh r0, [r12, #0x18] + cmp r0, #0x1 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + add r0, r4, #0x1 + and r0, r0, #0x3 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + mov r0, r4, lsl #0x9 + ldrh r0, [r7, r0] + ands r0, r5, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,lr} + bxeq lr +_020DA2B4: + add r2, r7, r4, lsl #0x9 + mov r0, r7 + add r2, r2, #0x4 + bl WmGetSharedDataAddress + mov r1, r0 + cmp r6, #0x0 + beq _020DA2E4 + add r0, r7, #0x800 + ldrh r2, [r0, #0x10] + mov r0, r6 + bl MIi_CpuCopy16 + b _020DA2F4 +_020DA2E4: + add r0, r7, #0x800 + ldrh r2, [r0, #0x10] + mov r0, #0x0 + bl MIi_CpuClear16 +_020DA2F4: + bl OS_DisableInterrupts + mov r4, r4, lsl #0x9 + ldrh r3, [r7, r4] + mvn r1, r5 + add r2, r7, #0x2 + and r1, r3, r1 + strh r1, [r7, r4] + ldrh r1, [r2, r4] + orr r1, r1, r5 + strh r1, [r2, r4] + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WmDataSharingReceiveCallback_Child +WmDataSharingReceiveCallback_Child: ; 0x020DA32C + stmdb sp!, {r4-r8,lr} + mov r8, r0 + ldr r7, [r8, #0x1c] + cmp r7, #0x0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + ldrh r0, [r8, #0x2] + cmp r0, #0x0 + bne _020DA458 + ldrh r0, [r8, #0x4] + cmp r0, #0x15 + bgt _020DA394 + cmp r0, #0x15 + bge _020DA3C4 + cmp r0, #0x9 + ldmgtia sp!, {r4-r8,lr} + bxgt lr + cmp r0, #0x7 + ldmltia sp!, {r4-r8,lr} + bxlt lr + cmp r0, #0x7 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + cmp r0, #0x9 + ldmia sp!, {r4-r8,lr} + bx lr +_020DA394: + cmp r0, #0x1a + ldmgtia sp!, {r4-r8,lr} + bxgt lr + cmp r0, #0x19 + ldmltia sp!, {r4-r8,lr} + bxlt lr + cmp r0, #0x19 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + cmp r0, #0x1a + ldmia sp!, {r4-r8,lr} + bx lr +_020DA3C4: + ldr r4, [r8, #0xc] + ldrh r6, [r8, #0x10] + ldrh r5, [r4, #0x0] + bl WM_GetAID + add r1, r7, #0x800 + ldrh r1, [r1, #0x14] + cmp r6, r1 + beq _020DA3EC + cmp r6, #0x200 + movhi r6, #0x200 +_020DA3EC: + cmp r6, #0x4 + ldmccia sp!, {r4-r8,lr} + bxcc lr + mov r1, #0x1 + mov r0, r1, lsl r0 + ands r0, r5, r0 + ldmeqia sp!, {r4-r8,lr} + bxeq lr + add r0, r7, #0x800 + ldrh r1, [r0, #0x8] + mov r0, r4 + mov r2, r6 + add r1, r7, r1, lsl #0x9 + bl MIi_CpuCopy16 + add r1, r7, #0x800 + ldrh r0, [r1, #0x8] + ldrh r2, [r8, #0x1a] + add r0, r7, r0, lsl #0x1 + mov r2, r2, asr #0x1 + add r0, r0, #0x800 + strh r2, [r0, #0x0] + ldrh r0, [r1, #0x8] + add r0, r0, #0x1 + and r0, r0, #0x3 + strh r0, [r1, #0x8] + ldmia sp!, {r4-r8,lr} + bx lr +_020DA458: + add r0, r7, #0x800 + mov r1, #0x5 + strh r1, [r0, #0x1c] + ldmia sp!, {r4-r8,lr} + bx lr + + arm_func_start WmDataSharingReceiveCallback_Parent +WmDataSharingReceiveCallback_Parent: ; 0x020DA46C + stmdb sp!, {r4-r6,lr} + ldr r4, [r0, #0x1c] + cmp r4, #0x0 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + ldrh r1, [r0, #0x2] + cmp r1, #0x0 + bne _020DA5C4 + ldrh r1, [r0, #0x4] + cmp r1, #0x15 + bgt _020DA4D0 + cmp r1, #0x15 + bge _020DA504 + cmp r1, #0x9 + ldmgtia sp!, {r4-r6,lr} + bxgt lr + cmp r1, #0x7 + ldmltia sp!, {r4-r6,lr} + bxlt lr + cmp r1, #0x7 + beq _020DA528 + cmp r1, #0x9 + beq _020DA53C + ldmia sp!, {r4-r6,lr} + bx lr +_020DA4D0: + cmp r1, #0x1a + ldmgtia sp!, {r4-r6,lr} + bxgt lr + cmp r1, #0x19 + ldmltia sp!, {r4-r6,lr} + bxlt lr + cmp r1, #0x19 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + cmp r1, #0x1a + beq _020DA53C + ldmia sp!, {r4-r6,lr} + bx lr +_020DA504: + ldrh r1, [r0, #0x12] + ldr r2, [r0, #0xc] + mov r0, r4 + bl WmDataSharingReceiveData + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + ldmia sp!, {r4-r6,lr} + bx lr +_020DA528: + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + ldmia sp!, {r4-r6,lr} + bx lr +_020DA53C: + ldrh r5, [r0, #0x12] + mov r6, #0x1 + bl OS_DisableInterrupts + add r1, r4, #0x800 + ldrh lr, [r1, #0x8] + mvn r12, r6, lsl r5 + mov r3, lr, lsl #0x9 + ldrh r2, [r4, r3] + and r2, r2, r12 + strh r2, [r4, r3] + ldrh r1, [r1, #0x18] + cmp r1, #0x1 + bne _020DA58C + add r1, lr, #0x1 + and r1, r1, #0x3 + mov r1, r1, lsl #0x10 + mov r2, r1, lsr #0x7 + ldrh r1, [r4, r2] + and r1, r1, r12 + strh r1, [r4, r2] +_020DA58C: + bl OS_RestoreInterrupts + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + add r0, r4, #0x800 + ldrh r0, [r0, #0x18] + cmp r0, #0x1 + ldmneia sp!, {r4-r6,lr} + bxne lr + mov r0, r4 + mov r1, #0x0 + bl WmDataSharingSendDataSet + ldmia sp!, {r4-r6,lr} + bx lr +_020DA5C4: + add r0, r4, #0x800 + mov r1, #0x5 + strh r1, [r0, #0x1c] + ldmia sp!, {r4-r6,lr} + bx lr + + arm_func_start WmDataSharingSetDataCallback +WmDataSharingSetDataCallback: ; 0x020DA5D8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl WMi_GetSystemWork + ldrh r2, [r5, #0xa] + ldr r1, _020DA6E4 ; =WmDataSharingReceiveCallback_Parent + add r0, r0, r2, lsl #0x2 + ldr r2, [r0, #0xcc] + ldr r4, [r0, #0x10c] + cmp r2, r1 + beq _020DA618 + ldr r0, _020DA6E8 ; =WmDataSharingReceiveCallback_Child + cmp r2, r0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr +_020DA618: + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,lr} + bxeq lr + ldr r0, [r5, #0x20] + cmp r4, r0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + bl WM_GetAID + ldrh r1, [r5, #0x2] + cmp r1, #0x0 + bne _020DA694 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + add r1, r4, #0x800 + ldrh r0, [r1, #0xa] + ldrh r2, [r5, #0x1a] + add sp, sp, #0x4 + add r0, r4, r0, lsl #0x1 + mov r2, r2, asr #0x1 + add r0, r0, #0x800 + strh r2, [r0, #0x0] + ldrh r0, [r1, #0xa] + add r0, r0, #0x1 + and r0, r0, #0x3 + strh r0, [r1, #0xa] + ldmia sp!, {r4-r5,lr} + bx lr +_020DA694: + cmp r1, #0xa + bne _020DA6CC + cmp r0, #0x0 + addne r0, r4, #0x800 + ldrneh r1, [r0, #0xa] + add sp, sp, #0x4 + addne r1, r1, #0x3 + andne r1, r1, #0x3 + strneh r1, [r0, #0xa] + add r0, r4, #0x800 + mov r1, #0x4 + strh r1, [r0, #0x1c] + ldmia sp!, {r4-r5,lr} + bx lr +_020DA6CC: + add r0, r4, #0x800 + mov r1, #0x5 + strh r1, [r0, #0x1c] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + .balign 4 +_020DA6E4: .word WmDataSharingReceiveCallback_Parent +_020DA6E8: .word WmDataSharingReceiveCallback_Child + + arm_func_start WM_StepDataSharing +WM_StepDataSharing: ; 0x020DA6EC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r10, r0 + mov r9, r1 + mov r8, r2 + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + bl WMi_CheckStateEx +_020DA710: ; 0x020DA710 + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,lr} + bxne lr + cmp r10, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + cmp r9, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + cmp r8, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + bl WM_GetAID + movs r4, r0 + bne _020DA770 + bl WMi_GetMPReadyAIDs + mov r7, r0 +_020DA770: + add r0, r10, #0x800 + ldrh r0, [r0, #0x1c] + cmp r0, #0x5 + addeq sp, sp, #0xc + moveq r0, #0x1 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + cmp r0, #0x1 + beq _020DA7A8 + cmp r0, #0x4 + addne sp, sp, #0xc + movne r0, #0x3 + ldmneia sp!, {r4-r11,lr} + bxne lr +_020DA7A8: + cmp r4, #0x0 + mov r4, #0x5 + bne _020DA94C + mov r6, #0x0 + mov r11, r6 + cmp r0, #0x4 + bne _020DA870 + add r1, r10, #0x800 + mov r3, #0x1 + strh r3, [r1, #0x1c] + ldrh r5, [r1, #0xe] + ldrh r2, [r1, #0x8] + ldr r0, _020DAA64 ; =WmDataSharingSetDataCallback + and r5, r5, r7 + mov r5, r5, lsl #0x10 + mov r5, r5, lsr #0x10 + str r5, [sp, #0x0] + ldrh r5, [r1, #0x16] + add r2, r2, #0x3 + and r2, r2, #0x3 + str r5, [sp, #0x4] + str r3, [sp, #0x8] + mov r2, r2, lsl #0x10 + mov r5, r2, lsr #0x10 + ldrh r3, [r1, #0x14] + mov r1, r10 + add r2, r10, r5, lsl #0x9 + bl WM_SetMPDataToPortEx + cmp r0, #0x7 + bne _020DA848 + add r0, r10, r5, lsl #0x1 + ldr r1, _020DAA68 ; =0x0000FFFF + add r0, r0, #0x800 + strh r1, [r0, #0x0] + add r0, r10, #0x800 + ldrh r1, [r0, #0xa] + add r1, r1, #0x1 + and r1, r1, #0x3 + strh r1, [r0, #0xa] + b _020DA870 +_020DA848: + cmp r0, #0x0 + beq _020DA870 + cmp r0, #0x2 + addne r0, r10, #0x800 + movne r1, r4 + strneh r1, [r0, #0x1c] + addne sp, sp, #0xc + movne r0, #0x1 + ldmneia sp!, {r4-r11,lr} + bxne lr +_020DA870: + add r0, r10, #0x800 + ldrh r2, [r0, #0xc] + ldrh r1, [r0, #0xa] + cmp r2, r1 + beq _020DA908 + mov r4, r2, lsl #0x9 + ldrh r3, [r10, r4] + mov r1, r8 + mov r2, #0x200 + orr r3, r3, #0x1 + strh r3, [r10, r4] + ldrh r0, [r0, #0xc] + add r0, r10, r0, lsl #0x9 + bl MIi_CpuCopy16 + add r1, r10, #0x800 + ldrh r0, [r1, #0xc] + mov r6, #0x1 + mov r4, #0x0 + add r0, r10, r0, lsl #0x1 + add r0, r0, #0x800 + ldrh r0, [r0, #0x0] + strh r0, [r1, #0x1a] + ldrh r0, [r1, #0xc] + add r0, r0, #0x1 + and r0, r0, #0x3 + strh r0, [r1, #0xc] + ldrh r0, [r1, #0x18] + cmp r0, #0x0 + bne _020DA904 + cmp r7, #0x0 + beq _020DA904 + ldrh r0, [r1, #0x8] + mov r0, r0, lsl #0x9 + ldrh r0, [r10, r0] + cmp r0, #0x1 + moveq r11, r6 + beq _020DA908 +_020DA904: + mov r11, #0x0 +_020DA908: + mov r0, r10 + mov r1, #0x0 + bl WmDataSharingSendDataSet +_020DA914: ; 0x020DA914 + cmp r6, #0x0 + beq _020DAA54 + mov r0, r10 + mov r2, r9 + mov r1, #0x0 + bl WmDataSharingReceiveData + add r0, r10, #0x800 + ldrh r0, [r0, #0x18] + cmp r0, #0x0 + bne _020DAA54 + mov r0, r10 + mov r1, r11 + bl WmDataSharingSendDataSet + b _020DAA54 +_020DA94C: + cmp r0, #0x4 + mov r0, #0x0 + addeq r1, r10, #0x800 + moveq r0, #0x1 + streqh r0, [r1, #0x1c] + beq _020DA9D0 + add r1, r10, #0x800 + ldrh r2, [r1, #0xc] + ldrh r1, [r1, #0x8] + cmp r2, r1 + beq _020DA9D0 + mov r2, r2, lsl #0x9 + ldrh r1, [r10, r2] + ands r3, r1, #0x1 + orreq r1, r1, #0x1 + streqh r1, [r10, r2] + beq _020DA9D0 + mov r1, r8 + add r0, r10, r2 + mov r2, #0x200 + bl MIi_CpuCopy16 + add r2, r10, #0x800 + ldrh r1, [r2, #0xc] + mov r0, #0x1 + mov r4, #0x0 + add r1, r10, r1, lsl #0x1 + add r1, r1, #0x800 + ldrh r1, [r1, #0x0] + strh r1, [r2, #0x1a] + ldrh r1, [r2, #0xc] + add r1, r1, #0x1 + and r1, r1, #0x3 + strh r1, [r2, #0xc] +_020DA9D0: + cmp r0, #0x0 + beq _020DAA54 + add r0, r10, #0x800 + ldrh r1, [r0, #0xa] + ldrh r2, [r0, #0x10] + mov r0, r9 + add r1, r10, r1, lsl #0x9 + add r7, r1, #0x20 + mov r1, r7 + bl MIi_CpuCopy16 + add r3, r10, #0x800 + ldrh r1, [r3, #0xe] + mov r5, #0x1 + ldr r0, _020DAA64 ; =WmDataSharingSetDataCallback + str r1, [sp, #0x0] + ldrh r6, [r3, #0x16] + mov r1, r10 + mov r2, r7 + str r6, [sp, #0x4] + str r5, [sp, #0x8] + ldrh r3, [r3, #0x10] + bl WM_SetMPDataToPortEx + add r1, r10, #0x800 + ldrh r2, [r1, #0xa] + cmp r0, #0x2 + add r2, r2, #0x1 + and r2, r2, #0x3 + strh r2, [r1, #0xa] + beq _020DAA54 + cmp r0, #0x0 + movne r0, #0x5 + strneh r0, [r1, #0x1c] + movne r4, r5 +_020DAA54: + mov r0, r4 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020DAA64: .word WmDataSharingSetDataCallback +_020DAA68: .word 0x0000FFFF + + arm_func_start WM_EndDataSharing +WM_EndDataSharing: ; 0x020DAA6C + stmdb sp!, {r4,lr} + movs r4, r0 + moveq r0, #0x6 + ldmeqia sp!, {r4,lr} + bxeq lr + add r0, r4, #0x800 + ldrh r1, [r0, #0xe] + cmp r1, #0x0 + moveq r0, #0x3 + ldmeqia sp!, {r4,lr} + bxeq lr + ldrh r0, [r0, #0x16] + mov r1, #0x0 + mov r2, r1 + bl WM_SetPortCallback + add r1, r4, #0x800 + mov r0, #0x0 + strh r0, [r1, #0xe] + strh r0, [r1, #0x1c] + ldmia sp!, {r4,lr} + bx lr + + arm_func_start WM_StartDataSharing +WM_StartDataSharing: ; 0x020DAAC0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r10, r0 + mov r7, r1 + mov r6, r2 + mov r0, #0x2 + mov r1, #0x9 + mov r2, #0xa + mov r5, r3 + mov r9, #0x1 + bl WMi_CheckStateEx +_020DAAEC: ; 0x020DAAEC + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,lr} + bxne lr + cmp r10, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + cmp r7, #0x10 + addcs sp, sp, #0xc + movcs r0, #0x6 + ldmcsia sp!, {r4-r11,lr} + bxcs lr + cmp r6, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r11,lr} + bxeq lr + bl WM_GetAID + movs r4, r0 + bne _020DAB4C + bl WMi_GetMPReadyAIDs + mov r9, r0 +_020DAB4C: + mov r1, r10 + mov r0, #0x0 + mov r2, #0x820 + bl MIi_CpuClearFast + add r0, r10, #0x800 + mov r2, #0x0 + strh r2, [r0, #0x8] + strh r2, [r0, #0xa] + strh r2, [r0, #0xc] + strh r5, [r0, #0x10] + strh r7, [r0, #0x16] + strh r2, [r0, #0xe] + mov r0, #0x1 + ldr r1, [sp, #0x30] + orr r0, r6, r0, lsl r4 + cmp r1, #0x0 + mov r0, r0, lsl #0x10 + movne r2, #0x1 + add r1, r10, #0x800 + strh r2, [r1, #0x18] + mov r0, r0, lsr #0x10 + strh r0, [r1, #0xe] + bl FUN_020DDC5C + add r3, r10, #0x800 + mul r1, r5, r0 + strh r0, [r3, #0x12] + strh r1, [r3, #0x14] + ldrh r0, [r3, #0x14] + cmp r0, #0x1fc + movhi r0, #0x0 + strhih r0, [r3, #0xe] + addhi sp, sp, #0xc + movhi r0, #0x6 + ldmhiia sp!, {r4-r11,lr} + bxhi lr + add r0, r0, #0x4 + strh r0, [r3, #0x14] + mov r0, #0x1 + strh r0, [r3, #0x1c] + cmp r4, #0x0 + bne _020DAD04 + orr r2, r9, #0x1 + mov r4, #0x0 +_020DABF8: + ldrh r1, [r3, #0xe] + mov r0, r4, lsl #0x9 + add r4, r4, #0x1 + and r1, r1, r2 + strh r1, [r10, r0] + cmp r4, #0x4 + blt _020DABF8 + ldr r1, _020DAD2C ; =WmDataSharingReceiveCallback_Parent + mov r0, r7 + mov r2, r10 + bl WM_SetPortCallback + mov r8, r10 + mov r7, #0x0 + mov r4, #0x2 + mov r6, #0x1 + ldr fp, _020DAD30 ; =WmDataSharingSetDataCallback + ldr r5, _020DAD34 ; =0x0000FFFF + b _020DACE4 +_020DAC40: + add r12, r10, #0x800 + ldrh r2, [r12, #0x8] + mov r0, r11 + mov r1, r10 + add r2, r2, #0x1 + and r2, r2, #0x3 + strh r2, [r12, #0x8] + ldrh r3, [r12, #0xe] + mov r2, r8 + and r3, r3, r9 + mov r3, r3, lsl #0x10 + mov r3, r3, lsr #0x10 + str r3, [sp, #0x0] + ldrh r3, [r12, #0x16] + str r3, [sp, #0x4] + str r6, [sp, #0x8] + ldrh r3, [r12, #0x14] + bl WM_SetMPDataToPortEx + cmp r0, #0x7 + bne _020DACB4 + add r0, r10, r7, lsl #0x1 + add r0, r0, #0x800 + strh r5, [r0, #0x0] + add r0, r10, #0x800 + ldrh r1, [r0, #0xa] + add r1, r1, #0x1 + and r1, r1, #0x3 + strh r1, [r0, #0xa] + b _020DACDC +_020DACB4: + cmp r0, #0x0 + beq _020DACDC + cmp r0, #0x2 + addne r0, r10, #0x800 + movne r1, #0x5 + strneh r1, [r0, #0x1c] + addne sp, sp, #0xc + movne r0, #0x1 + ldmneia sp!, {r4-r11,lr} + bxne lr +_020DACDC: + add r8, r8, #0x200 + add r7, r7, #0x1 +_020DACE4: + add r0, r10, #0x800 + ldrh r0, [r0, #0x18] + cmp r0, #0x1 + movne r0, r6 + moveq r0, r4 + cmp r7, r0 + blt _020DAC40 + b _020DAD1C +_020DAD04: + ldr r1, _020DAD38 ; =WmDataSharingReceiveCallback_Child + mov r4, #0x3 + mov r0, r7 + mov r2, r10 + strh r4, [r3, #0xa] + bl WM_SetPortCallback +_020DAD1C: + mov r0, #0x0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,lr} + bx lr + .balign 4 +_020DAD2C: .word WmDataSharingReceiveCallback_Parent +_020DAD30: .word WmDataSharingSetDataCallback +_020DAD34: .word 0x0000FFFF +_020DAD38: .word WmDataSharingReceiveCallback_Child + + arm_func_start WM_EndKeySharing +WM_EndKeySharing: ; 0x020DAD3C + ldr ip, _020DAD44 ; =WM_EndDataSharing + bx r12 + .balign 4 +_020DAD44: .word WM_EndDataSharing + + arm_func_start WM_StartKeySharing +WM_StartKeySharing: ; 0x020DAD48 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020DAD70 ; =0x0000FFFF + mov r12, #0x1 + mov r3, #0x2 + str r12, [sp, #0x0] + bl WM_StartDataSharing + add sp, sp, #0x4 + ldmia sp!, {lr} + bx lr + .balign 4 +_020DAD70: .word 0x0000FFFF + + arm_func_start WM_SetEntry +WM_SetEntry: ; 0x020DAD74 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x9 + bl WMi_CheckStateEx +_020DAD94: ; 0x020DAD94 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + mov r1, r5 + mov r0, #0x21 + bl WMi_SetCallbackTable + mov r2, r4 + mov r0, #0x21 + mov r1, #0x1 + bl WMi_SendCommand +_020DADC0: ; 0x020DADC0 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_MeasureChannel +WM_MeasureChannel: ; 0x020DADD4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_GetSystemWork + mov r0, #0x1 + mov r1, #0x2 + bl WMi_CheckStateEx +_020DADFC: ; 0x020DADFC + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r7,lr} + bxne lr + mov r1, r7 + mov r0, #0x1e + bl WMi_SetCallbackTable + ldrh r2, [sp, #0x20] + mov r3, #0x1e + add r0, sp, #0x0 + mov r1, #0xa + strh r3, [sp, #0x0] + strh r6, [sp, #0x2] + strh r5, [sp, #0x4] + strh r4, [sp, #0x6] + strh r2, [sp, #0x8] + bl WMi_SendCommandDirect +_020DAE40: ; 0x020DAE40 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_SetLifeTime +WM_SetLifeTime: ; 0x020DAE54 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_CheckIdle +_020DAE70: ; 0x020DAE70 + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r7,lr} + bxne lr + mov r1, r7 + mov r0, #0x1d + bl WMi_SetCallbackTable + ldrh r12, [sp, #0x20] + str r4, [sp, #0x0] + mov r2, r6 + mov r3, r5 + mov r0, #0x1d + mov r1, #0x4 + str r12, [sp, #0x4] + bl WMi_SendCommand +_020DAEAC: ; 0x020DAEAC + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_SetBeaconIndication +WM_SetBeaconIndication: ; 0x020DAEC0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 +_020DAECC: ; 0x020DAECC + mov r4, r1 + bl WMi_CheckIdle +_020DAED4: ; 0x020DAED4 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,lr} + bxne lr + cmp r4, #0x0 + beq _020DAF00 + cmp r4, #0x1 + addne sp, sp, #0x4 + movne r0, #0x6 + ldmneia sp!, {r4-r5,lr} + bxne lr +_020DAF00: + mov r1, r5 + mov r0, #0x19 + bl WMi_SetCallbackTable + mov r2, r4 + mov r0, #0x19 + mov r1, #0x1 + bl WMi_SendCommand +_020DAF1C: ; 0x020DAF1C + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,lr} + bx lr + + arm_func_start WM_SetGameInfo +WM_SetGameInfo: ; 0x020DAF30 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r0, #0x2 + mov r1, #0x7 + mov r2, #0x9 + mov r4, r3 + bl WMi_CheckStateEx +_020DAF58: ; 0x020DAF58 + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r7,lr} + bxne lr + cmp r6, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x6 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + cmp r5, #0x70 + addhi sp, sp, #0xc + movhi r0, #0x6 + ldmhiia sp!, {r4-r7,lr} + bxhi lr + ldr r1, _020DAFF4 ; =0x021D68C0 + mov r0, r6 + mov r2, r5 + bl MIi_CpuCopy16 + ldr r0, _020DAFF4 ; =0x021D68C0 + mov r1, r5 + bl DC_StoreRange + mov r1, r7 + mov r0, #0x18 + bl WMi_SetCallbackTable + ldrh r0, [sp, #0x20] + str r4, [sp, #0x0] + ldrb r1, [sp, #0x24] + str r0, [sp, #0x4] + ldr r2, _020DAFF4 ; =0x021D68C0 + str r1, [sp, #0x8] + mov r3, r5 + mov r0, #0x18 + mov r1, #0x5 + bl WMi_SendCommand +_020DAFE0: ; 0x020DAFE0 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0xc + ldmia sp!, {r4-r7,lr} + bx lr + .balign 4 +_020DAFF4: .word 0x021D68C0 + + arm_func_start WM_SetWEPKeyEx +WM_SetWEPKeyEx: ; 0x020DAFF8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl WMi_CheckIdle +_020DB014: ; 0x020DB014 + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,lr} + bxne lr + cmp r6, #0x3 + addhi sp, sp, #0x4 + movhi r0, #0x6 + ldmhiia sp!, {r4-r7,lr} + bxhi lr + cmp r6, #0x0 + beq _020DB060 + cmp r4, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x6 + ldmeqia sp!, {r4-r7,lr} + bxeq lr + mov r0, r4 + mov r1, #0x50 + bl DC_StoreRange +_020DB060: + mov r1, r7 + mov r0, #0x27 + bl WMi_SetCallbackTable + mov r2, r6 + mov r3, r4 + mov r0, #0x27 + mov r1, #0x3 + str r5, [sp, #0x0] + bl WMi_SendCommand +_020DB084: ; 0x020DB084 + cmp r0, #0x0 + moveq r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,lr} + bx lr + + arm_func_start WM_SetWEPKeyEx2 +WM_SetWEPKeyEx2: ; 0x020DB098 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl WMi_CheckIdle +_020DB0AC: ; 0x020DB0AC + cmp r0, #0x0 + ldmneia sp!, {r4-r6,lr} + bxne lr + cmp r5, #0x3 + movhi r0, #0x6 + ldmhiia sp!, {r4-r6,lr} + bxhi lr + cmp r5, #0x0 + beq _020DB0EC + cmp r4, #0x0 + moveq r0, #0x6 + ldmeqia sp!, {r4-r6,lr} + bxeq lr + mov r0, r4 + mov r1, #0x50 + bl DC_StoreRange +_020DB0EC: + mov r1, r6 + mov r0, #0x14 + bl WMi_SetCallbackTable + mov r2, r5 + mov r3, r4 + mov r0, #0x14 + mov r1, #0x2 + bl WMi_SendCommand +_020DB10C: ; 0x020DB10C + cmp r0, #0x0 + moveq r0, #0x2 + ldmia sp!, {r4-r6,lr} + bx lr diff --git a/asm/unk_020D5150.s b/asm/rom2dism.s index ed1fb8b6..051a235d 100644 --- a/asm/unk_020D5150.s +++ b/asm/rom2dism.s @@ -5,4846 +5,6 @@ .text - arm_func_start PM_SetAmpGain -PM_SetAmpGain: - ldr ip, _020D5164 ; =0x020D53DC - mov r0, r0, lsl #0x10 - mov r1, r0, lsr #0x10 - mov r0, #0x3 - bx r12 - .balign 4 -_020D5164: .word 0x020D53DC - - arm_func_start PM_SetAmp -PM_SetAmp: ; 0x020D5168 - ldr ip, _020D517C ; =0x020D53DC - mov r0, r0, lsl #0x10 - mov r1, r0, lsr #0x10 - mov r0, #0x2 - bx r12 - .balign 4 -_020D517C: .word 0x020D53DC - - arm_func_start PM_ForceToPowerOff -PM_ForceToPowerOff: ; 0x020D5180 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020D51B8 ; =PMi_DummyCallback - add r1, sp, #0x0 - bl PM_ForceToPowerOffAsync -_020D5194: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0xB6, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D51B8: .word PMi_DummyCallback - - arm_func_start PM_ForceToPowerOffAsync -PM_ForceToPowerOffAsync: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - mov r7, r0 - ldr r0, _020D5268 ; =0x00996A00 - mov r6, r1 - bl OS_SpinWait - bl PM_GetLCDPower - cmp r0, #0x1 - beq _020D524C - add r0, sp, #0x0 - add r1, sp, #0x4 - bl PM_GetBackLight -_020D51EC: - .byte 0x00, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x19, 0x00, 0x00, 0xEB, 0x04, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x0A - .byte 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x13, 0x00, 0x00, 0xEB, 0x01, 0x00, 0xA0, 0xE3 - .byte 0xCC, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x34, 0x50, 0x9F, 0xE5 - .byte 0x01, 0x40, 0xA0, 0xE3, 0x05, 0x00, 0xA0, 0xE1, 0x50, 0xE0, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1 - .byte 0xC4, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0x0A -_020D524C: - mov r1, r7 - mov r2, r6 - mov r0, #0xe - bl PM_SendUtilityCommandAsync - add sp, sp, #0xc - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D5268: .word 0x00996A00 - - arm_func_start PM_SetBackLight -PM_SetBackLight: ; 0x020D526C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020D52A4 ; =PMi_DummyCallback - add r3, sp, #0x0 - bl PM_SetBackLightAsync -_020D5280: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x7B, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 -_020D52A4: .word PMi_DummyCallback - - arm_func_start PM_SetBackLightAsync -PM_SetBackLightAsync: - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0x0 - mov r12, #0x0 - bne _020D52D0 - cmp r1, #0x1 - moveq r12, #0x6 - cmp r1, #0x0 - moveq r12, #0x7 - b _020D5304 -_020D52D0: - cmp r0, #0x1 - bne _020D52EC - cmp r1, #0x1 - moveq r12, #0x4 - cmp r1, #0x0 - moveq r12, #0x5 - b _020D5304 -_020D52EC: - cmp r0, #0x2 - bne _020D5304 - cmp r1, #0x1 - moveq r12, #0x8 - cmp r1, #0x0 - moveq r12, #0x9 -_020D5304: - cmp r12, #0x0 - addeq sp, sp, #0x4 - ldreq r0, _020D5334 ; =0x0000FFFF - ldmeqia sp!, {lr} - bxeq lr - mov r1, r2 - mov r0, r12 - mov r2, r3 - bl PM_SendUtilityCommandAsync - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D5334: .word 0x0000FFFF - - arm_func_start PMi_SetLED -PMi_SetLED: ; 0x020D5338 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D5370 ; =PMi_DummyCallback - add r2, sp, #0x0 - bl PMi_SetLEDAsync -_020D534C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x48, 0x01, 0x00, 0xEB - .byte 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D5370: .word PMi_DummyCallback - - arm_func_start PMi_SetLEDAsync -PMi_SetLEDAsync: - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0x1 - beq _020D5398 - cmp r0, #0x2 - beq _020D53A8 - cmp r0, #0x3 - beq _020D53A0 - b _020D53B0 -_020D5398: - mov r0, #0x1 - b _020D53B4 -_020D53A0: - mov r0, #0x2 - b _020D53B4 -_020D53A8: - mov r0, #0x3 - b _020D53B4 -_020D53B0: - mov r0, #0x0 -_020D53B4: - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldreq r0, _020D53D8 ; =0x0000FFFF - ldmeqia sp!, {lr} - bxeq lr - bl PM_SendUtilityCommandAsync - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D53D8: .word 0x0000FFFF -_020D53DC: - .byte 0x00, 0x40, 0x2D, 0xE9 - .byte 0x04, 0xD0, 0x4D, 0xE2, 0x28, 0x20, 0x9F, 0xE5, 0x00, 0x30, 0x8D, 0xE2, 0x09, 0x00, 0x00, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x1F, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x7C, 0x58, 0x0D, 0x02 - - arm_func_start PMi_WriteRegisterAsync -PMi_WriteRegisterAsync: ; 0x020D5418 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r4, r1 - mov r6, r2 - mov r5, r3 - bl PMi_Lock -_020D5434: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x01, 0x00, 0xA0, 0x03 - .byte 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x38, 0x00, 0x9F, 0xE5, 0x38, 0x10, 0x9F, 0xE5 - .byte 0xFF, 0x20, 0x07, 0xE2, 0x00, 0x00, 0x82, 0xE1, 0x04, 0x60, 0x81, 0xE5, 0x08, 0x50, 0x81, 0xE5 - .byte 0x10, 0xFF, 0xFF, 0xEB, 0x24, 0x00, 0x9F, 0xE5, 0x24, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x04, 0xE0 - .byte 0x01, 0x00, 0x80, 0xE1, 0x0B, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x64, 0x00, 0x02, 0xE4, 0x54, 0x1D, 0x02 - .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01 - - arm_func_start PMi_ReadRegister -PMi_ReadRegister: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020D54D0 ; =PMi_DummyCallback - add r3, sp, #0x0 - bl PMi_ReadRegisterAsync -_020D54AC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xF0, 0x00, 0x00, 0xEB - .byte 0x00, 0x00, 0x9D, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D54D0: .word PMi_DummyCallback - - arm_func_start PMi_ReadRegisterAsync -PMi_ReadRegisterAsync: - stmdb sp!, {r4-r8,lr} - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl PMi_Lock -_020D54EC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x03, 0xF0, 0x41, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x38, 0xC0, 0x9F, 0xE5 - .byte 0x38, 0x10, 0x9F, 0xE5, 0x38, 0x00, 0x9F, 0xE5, 0xFF, 0x20, 0x07, 0xE2, 0x87, 0xE1, 0xA0, 0xE1 - .byte 0x00, 0x80, 0xA0, 0xE3, 0x2C, 0x30, 0x9F, 0xE5, 0xBE, 0x80, 0x8C, 0xE1, 0x00, 0x00, 0x82, 0xE1 - .byte 0x04, 0x50, 0x81, 0xE5, 0x08, 0x40, 0x81, 0xE5, 0x87, 0x61, 0x83, 0xE7, 0xDD, 0xFE, 0xFF, 0xEB - .byte 0x08, 0x00, 0xA0, 0xE1, 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x0C, 0x55, 0x1D, 0x02 - .byte 0xE4, 0x54, 0x1D, 0x02, 0x00, 0x65, 0x00, 0x03, 0x10, 0x55, 0x1D, 0x02 - - arm_func_start PM_SendUtilityCommandAsync -PM_SendUtilityCommandAsync: ; 0x020D554C - stmdb sp!, {r4-r6,lr} - mov r4, r0 - mov r6, r1 - mov r5, r2 - bl PMi_Lock -_020D5560: - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x24, 0x28, 0xA0, 0xE1, 0x34, 0x10, 0x9F, 0xE5, 0x34, 0x00, 0x9F, 0xE5, 0xFF, 0x20, 0x02, 0xE2 - .byte 0x00, 0x00, 0x82, 0xE1, 0x04, 0x60, 0x81, 0xE5, 0x08, 0x50, 0x81, 0xE5, 0xC5, 0xFE, 0xFF, 0xEB - .byte 0x20, 0x00, 0x9F, 0xE5, 0x20, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x04, 0xE0, 0x01, 0x00, 0x80, 0xE1 - .byte 0xC0, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xE4, 0x54, 0x1D, 0x02, 0x00, 0x63, 0x00, 0x02, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01 - - arm_func_start PMi_SendSleepStart -PMi_SendSleepStart: ; 0x020D55C0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - bl PMi_Lock -_020D55D4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x01, 0x00, 0xA0, 0x03 - .byte 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x70, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3 - .byte 0x6C, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0x81, 0xE5, 0xAA, 0xFE, 0xFF, 0xEB, 0x5C, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x91, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x50, 0xC0, 0x9F, 0xE5, 0x00, 0x00, 0x81, 0xE5, 0x00, 0x20, 0xA0, 0xE1, 0x00, 0x30, 0xA0, 0xE1 - .byte 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x8C, 0xE5, 0xD2, 0xFD, 0xFF, 0xEB, 0x38, 0x00, 0x9F, 0xE5 - .byte 0xFF, 0x10, 0x05, 0xE2, 0x00, 0x00, 0x81, 0xE1, 0x9A, 0xFE, 0xFF, 0xEB, 0x2C, 0x00, 0x9F, 0xE5 - .byte 0x2C, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x04, 0xE0, 0x01, 0x00, 0x80, 0xE1, 0x95, 0xFE, 0xFF, 0xEB - .byte 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xD0, 0x54, 0x1D, 0x02, 0x00, 0x60, 0x00, 0x03, 0xD4, 0x54, 0x1D, 0x02, 0x00, 0x61, 0x00, 0x02 - .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01 - - arm_func_start PMi_CommonCallback -PMi_CommonCallback: ; 0x020D5678 - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r2, #0x0 - beq _020D569C - mov r0, #0x2 - bl PMi_CallCallbackAndUnlock - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020D569C: - and r0, r1, #0x7f00 - mov r0, r0, lsl #0x8 - and r1, r1, #0xff - mov r2, r0, lsr #0x10 - mov r0, r1, lsl #0x10 - cmp r2, #0x70 - mov r0, r0, lsr #0x10 - blo _020D56FC - cmp r2, #0x74 - bhi _020D56FC - ldr r1, _020D5750 ; =0x021D5510 - sub r2, r2, #0x70 - and r0, r0, #0xff - ldr r1, [r1, r2, lsl #0x3] - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r1, #0x0 - strneh r0, [r1, #0x0] - mov r1, r2, lsl #0x3 - ldr r0, _020D5754 ; =0x021D550C - mov r2, #0x1 - strh r2, [r0, r1] - mov r0, #0x0 - b _020D5740 -_020D56FC: - cmp r2, #0x60 - ldreq r1, _020D5758 ; =0x021D54D0 - moveq r2, #0x1 - streq r2, [r1, #0x0] - beq _020D5740 - cmp r2, #0x62 - ldreq r1, _020D575C ; =0x021D54D4 - moveq r2, #0x1 - streq r2, [r1, #0x0] - beq _020D5740 - cmp r2, #0x67 - bne _020D5740 - ldr r1, _020D5760 ; =0x021D54E4 - ldr r1, [r1, #0xc] - cmp r1, #0x0 - strne r0, [r1, #0x0] - mov r0, #0x0 -_020D5740: - bl PMi_CallCallbackAndUnlock - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D5750: .word 0x021D5510 -_020D5754: .word 0x021D550C -_020D5758: .word 0x021D54D0 -_020D575C: .word 0x021D54D4 -_020D5760: .word 0x021D54E4 - - arm_func_start PM_Init -PM_Init: ; 0x020D5764 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r1, _020D580C ; =0x021D54CC - ldrh r0, [r1, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r0, _020D5810 ; =0x021D54E4 - mov r2, #0x0 - mov r3, #0x1 - strh r3, [r1, #0x0] - str r2, [r0, #0x0] - str r2, [r0, #0x4] - bl PXI_Init - mov r5, #0x8 - mov r4, #0x1 - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady -_020D57B4: - .byte 0x00, 0x00, 0x50, 0xE3, 0xFA, 0xFF, 0xFF, 0x0A, 0x50, 0x10, 0x9F, 0xE5 - .byte 0x08, 0x00, 0xA0, 0xE3, 0x7C, 0xE9, 0xFF, 0xEB, 0x00, 0x30, 0xA0, 0xE3, 0x44, 0x00, 0x9F, 0xE5 - .byte 0x03, 0x20, 0xA0, 0xE1, 0x83, 0x11, 0xA0, 0xE1, 0x01, 0x30, 0x83, 0xE2, 0xB1, 0x20, 0x80, 0xE1 - .byte 0x05, 0x00, 0x53, 0xE3, 0xFA, 0xFF, 0xFF, 0xBA, 0x2C, 0x00, 0x9F, 0xE5, 0x2A, 0xDA, 0xFF, 0xEB - .byte 0x28, 0x10, 0x9F, 0xE5, 0x28, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x91, 0xE5, 0x00, 0x10, 0x80, 0xE5 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D580C: .word 0x021D54CC -_020D5810: .word 0x021D54E4 -_020D5814: - .byte 0x78, 0x56, 0x0D, 0x02, 0x0C, 0x55, 0x1D, 0x02, 0xF4, 0x54, 0x1D, 0x02 - .byte 0x3C, 0xFC, 0x7F, 0x02, 0xDC, 0x54, 0x1D, 0x02 - - arm_func_start PMi_CallCallbackAndUnlock -PMi_CallCallbackAndUnlock: ; 0x020D5828 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020D5878 ; =0x021D54E4 - ldr r1, [r2, #0x0] - ldr r12, [r2, #0x4] - cmp r1, #0x0 - movne r3, #0x0 - strne r3, [r2, #0x0] - cmp r12, #0x0 - addeq sp, sp, #0x4 - ldr r1, [r2, #0x8] - ldmeqia sp!, {lr} - bxeq lr - ldr r2, _020D5878 ; =0x021D54E4 - mov r3, #0x0 - str r3, [r2, #0x4] - blx r12 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D5878: .word 0x021D54E4 - - arm_func_start PMi_DummyCallback -PMi_DummyCallback: ; 0x020D587C - str r0, [r1, #0x0] - bx lr - - arm_func_start PMi_WaitBusy -PMi_WaitBusy: ; 0x020D5884 - stmdb sp!, {r4,lr} - ldr r4, _020D58C0 ; =0x021D54E4 - ldr r0, [r4, #0x0] - cmp r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr -_020D589C: - bl OS_GetCpsrIrq - cmp r0, #0x80 - bne _020D58AC - bl PXIi_HandlerRecvFifoNotEmpty -_020D58AC: - ldr r0, [r4, #0x0] - cmp r0, #0x0 - bne _020D589C - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D58C0: .word 0x021D54E4 - - arm_func_start PMi_Lock -PMi_Lock: - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r1, _020D5910 ; =0x021D54E4 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - beq _020D58F4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {lr} - bx lr -_020D58F4: - mov r2, #0x1 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D5910: .word 0x021D54E4 - - arm_func_start RtcWaitBusy -RtcWaitBusy: ; 0x020D5914 - ldr ip, _020D5928 ; =0x021D5538 -_020D5918: - ldr r0, [r12, #0x0] - cmp r0, #0x1 - beq _020D5918 - bx lr - .balign 4 -_020D5928: .word 0x021D5538 - - arm_func_start RtcGetResultCallback -RtcGetResultCallback: ; 0x020D592C - ldr r1, _020D5938 ; =0x021D5538 - str r0, [r1, #0x20] - bx lr - .balign 4 -_020D5938: .word 0x021D5538 - - arm_func_start RtcBCD2HEX -RtcBCD2HEX: ; 0x020D593C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, #0x0 - mov r3, r5 - mov r2, r5 -_020D5950: - mov r1, r0, lsr r2 - and r1, r1, #0xf - cmp r1, #0xa - addcs sp, sp, #0x4 - movcs r0, #0x0 - ldmcsia sp!, {r4-r5,lr} - bxcs lr - add r3, r3, #0x1 - cmp r3, #0x8 - add r2, r2, #0x4 - blt _020D5950 - mov r12, #0x0 - mov lr, r12 - mov r4, #0x1 - mov r2, #0xa -_020D598C: - mov r1, r0, lsr lr - and r3, r1, #0xf - mul r1, r4, r2 - mla r5, r4, r3, r5 - add r12, r12, #0x1 - mov r4, r1 - cmp r12, #0x8 - add lr, lr, #0x4 - blt _020D598C - mov r0, r5 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start RtcCommonCallback -RtcCommonCallback: ; 0x020D59C0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - cmp r2, #0x0 - beq _020D5A30 - ldr r0, _020D5F30 ; =0x021D5538 - ldr r2, _020D5F30 ; =0x021D5538 - ldr r1, [r0, #0x18] - ldr r4, [r2, #0x4] - cmp r1, #0x0 - movne r1, #0x0 - strne r1, [r0, #0x18] - ldr r0, _020D5F30 ; =0x021D5538 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - movne r1, #0x0 - strne r1, [r0, #0x0] - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r1, [r2, #0x10] - mov r3, #0x0 - mov r0, #0x6 - str r3, [r2, #0x4] - blx r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr -_020D5A30: - and r0, r1, #0x7f00 - mov r0, r0, lsr #0x8 - and r0, r0, #0xff - cmp r0, #0x30 - and r2, r1, #0xff - bne _020D5A70 - ldr r0, _020D5F30 ; =0x021D5538 - ldr r0, [r0, #0x1c] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - blx r0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr -_020D5A70: - cmp r2, #0x0 - bne _020D5E88 - ldr r0, _020D5F30 ; =0x021D5538 - mov r5, #0x0 - ldr r1, [r0, #0x14] - cmp r1, #0xf - addls pc, pc, r1, lsl #0x2 - b _020D5E74 -_020D5A90: - .byte 0x0E, 0x00, 0x00, 0xEA, 0x22, 0x00, 0x00, 0xEA, 0x35, 0x00, 0x00, 0xEA, 0x0B, 0x01, 0x00, 0xEA - .byte 0x0A, 0x01, 0x00, 0xEA, 0x09, 0x01, 0x00, 0xEA, 0x5B, 0x00, 0x00, 0xEA, 0x66, 0x00, 0x00, 0xEA - .byte 0x6E, 0x00, 0x00, 0xEA, 0x96, 0x00, 0x00, 0xEA, 0xC2, 0x00, 0x00, 0xEA, 0x03, 0x01, 0x00, 0xEA - .byte 0x02, 0x01, 0x00, 0xEA, 0x01, 0x01, 0x00, 0xEA, 0x00, 0x01, 0x00, 0xEA, 0xFF, 0x00, 0x00, 0xEA - .byte 0x5C, 0x14, 0x9F, 0xE5, 0x08, 0x40, 0x90, 0xE5, 0x00, 0x00, 0xD1, 0xE5, 0x96, 0xFF, 0xFF, 0xEB - .byte 0x4C, 0x14, 0x9F, 0xE5, 0x00, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x80, 0x09, 0xA0, 0xE1 - .byte 0xA0, 0x0D, 0xA0, 0xE1, 0x90, 0xFF, 0xFF, 0xEB, 0x34, 0x14, 0x9F, 0xE5, 0x04, 0x00, 0x84, 0xE5 - .byte 0x00, 0x00, 0x91, 0xE5, 0x00, 0x05, 0xA0, 0xE1, 0x20, 0x0D, 0xA0, 0xE1, 0x8A, 0xFF, 0xFF, 0xEB - .byte 0x08, 0x00, 0x84, 0xE5, 0x04, 0x00, 0xA0, 0xE1, 0xCA, 0x01, 0x00, 0xEB, 0x0C, 0x00, 0x84, 0xE5 - .byte 0xEA, 0x00, 0x00, 0xEA, 0x0C, 0x14, 0x9F, 0xE5, 0x08, 0x40, 0x90, 0xE5, 0x00, 0x00, 0x91, 0xE5 - .byte 0x00, 0x0D, 0xA0, 0xE1, 0x20, 0x0D, 0xA0, 0xE1, 0x7F, 0xFF, 0xFF, 0xEB, 0xF4, 0x13, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x80, 0x08, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1 - .byte 0x79, 0xFF, 0xFF, 0xEB, 0xDC, 0x13, 0x9F, 0xE5, 0x04, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5 - .byte 0x80, 0x04, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1, 0x73, 0xFF, 0xFF, 0xEB, 0x08, 0x00, 0x84, 0xE5 - .byte 0xD6, 0x00, 0x00, 0xEA, 0xB8, 0x13, 0x9F, 0xE5, 0x08, 0x40, 0x90, 0xE5, 0x00, 0x00, 0x91, 0xE5 - .byte 0xFF, 0x00, 0x00, 0xE2, 0x6C, 0xFF, 0xFF, 0xEB, 0xA4, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0x84, 0xE5 - .byte 0x00, 0x00, 0x91, 0xE5, 0x80, 0x09, 0xA0, 0xE1, 0xA0, 0x0D, 0xA0, 0xE1, 0x66, 0xFF, 0xFF, 0xEB - .byte 0x8C, 0x13, 0x9F, 0xE5, 0x04, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x00, 0x05, 0xA0, 0xE1 - .byte 0x20, 0x0D, 0xA0, 0xE1, 0x60, 0xFF, 0xFF, 0xEB, 0x08, 0x00, 0x84, 0xE5, 0x04, 0x00, 0xA0, 0xE1 - .byte 0xA0, 0x01, 0x00, 0xEB, 0x6C, 0x13, 0x9F, 0xE5, 0x0C, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5 - .byte 0x58, 0x13, 0x9F, 0xE5, 0x00, 0x0D, 0xA0, 0xE1, 0x20, 0x0D, 0xA0, 0xE1, 0x0C, 0x40, 0x91, 0xE5 - .byte 0x55, 0xFF, 0xFF, 0xEB, 0x4C, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5 - .byte 0x80, 0x08, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1, 0x4F, 0xFF, 0xFF, 0xEB, 0x34, 0x13, 0x9F, 0xE5 - .byte 0x04, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x80, 0x04, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1 - .byte 0x49, 0xFF, 0xFF, 0xEB, 0x08, 0x00, 0x84, 0xE5, 0xAC, 0x00, 0x00, 0xEA, 0x18, 0x13, 0x9F, 0xE5 - .byte 0x08, 0x20, 0x90, 0xE5, 0xB0, 0x00, 0xD1, 0xE1, 0x00, 0x0E, 0xA0, 0xE1, 0x20, 0x0E, 0xA0, 0xE1 - .byte 0x04, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x82, 0xE5 - .byte 0xA2, 0x00, 0x00, 0xEA, 0x00, 0x50, 0x82, 0xE5, 0xA0, 0x00, 0x00, 0xEA, 0xE8, 0x12, 0x9F, 0xE5 - .byte 0x08, 0x20, 0x90, 0xE5, 0xB0, 0x00, 0xD1, 0xE1, 0x80, 0x0C, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1 - .byte 0x01, 0x00, 0xA0, 0x13, 0x00, 0x00, 0x82, 0x15, 0x00, 0x50, 0x82, 0x05, 0x97, 0x00, 0x00, 0xEA - .byte 0xC0, 0x12, 0x9F, 0xE5, 0x08, 0x40, 0x90, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x80, 0x0E, 0xA0, 0xE1 - .byte 0xA0, 0x0E, 0xA0, 0xE1, 0x00, 0x00, 0x84, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x00, 0x09, 0xA0, 0xE1 - .byte 0x20, 0x0D, 0xA0, 0xE1, 0x28, 0xFF, 0xFF, 0xEB, 0x98, 0x12, 0x9F, 0xE5, 0x04, 0x00, 0x84, 0xE5 - .byte 0x00, 0x00, 0x91, 0xE5, 0x80, 0x04, 0xA0, 0xE1, 0xA0, 0x0C, 0xA0, 0xE1, 0x22, 0xFF, 0xFF, 0xEB - .byte 0x08, 0x00, 0x84, 0xE5, 0x05, 0x10, 0xA0, 0xE1, 0x78, 0x02, 0x9F, 0xE5, 0x0C, 0x10, 0x84, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0x00, 0x0C, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x0C, 0x00, 0x94, 0x15 - .byte 0x01, 0x00, 0x80, 0x12, 0x0C, 0x00, 0x84, 0x15, 0x58, 0x02, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5 - .byte 0x00, 0x08, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x0C, 0x00, 0x94, 0x15, 0x02, 0x00, 0x80, 0x12 - .byte 0x0C, 0x00, 0x84, 0x15, 0x3C, 0x02, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x00, 0x04, 0xA0, 0xE1 - .byte 0xA0, 0x0F, 0xB0, 0xE1, 0x0C, 0x00, 0x94, 0x15, 0x04, 0x00, 0x80, 0x12, 0x0C, 0x00, 0x84, 0x15 - .byte 0x6E, 0x00, 0x00, 0xEA, 0x18, 0x30, 0x90, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x27, 0x00, 0x00, 0x1A - .byte 0x08, 0x10, 0x90, 0xE5, 0x00, 0x10, 0x91, 0xE5, 0x01, 0x00, 0x51, 0xE3, 0x12, 0x00, 0x00, 0x1A - .byte 0x04, 0x22, 0x9F, 0xE5, 0xB0, 0x10, 0xD2, 0xE1, 0x01, 0x1E, 0xA0, 0xE1, 0x21, 0x1E, 0xA0, 0xE1 - .byte 0x04, 0x00, 0x51, 0xE3, 0x61, 0x00, 0x00, 0x0A, 0x01, 0x10, 0x83, 0xE2, 0x18, 0x10, 0x80, 0xE5 - .byte 0xB0, 0x00, 0xD2, 0xE1, 0x0F, 0x00, 0xC0, 0xE3, 0x04, 0x00, 0x80, 0xE3, 0xB0, 0x00, 0xC2, 0xE1 - .byte 0x28, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x10, 0xA0, 0x01, 0xBC, 0x01, 0x9F, 0x05 - .byte 0x03, 0x50, 0xA0, 0x03, 0x18, 0x10, 0x80, 0x05, 0x54, 0x00, 0x00, 0xEA, 0xB8, 0x21, 0x9F, 0xE5 - .byte 0xB0, 0x10, 0xD2, 0xE1, 0x01, 0x1E, 0xA0, 0xE1, 0x21, 0x1E, 0xB0, 0xE1, 0x4F, 0x00, 0x00, 0x0A - .byte 0x01, 0x10, 0x83, 0xE2, 0x18, 0x10, 0x80, 0xE5, 0xB0, 0x00, 0xD2, 0xE1, 0x0F, 0x00, 0xC0, 0xE3 - .byte 0xB0, 0x00, 0xC2, 0xE1, 0x17, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x10, 0xA0, 0x01 - .byte 0x78, 0x01, 0x9F, 0x05, 0x03, 0x50, 0xA0, 0x03, 0x18, 0x10, 0x80, 0x05, 0x43, 0x00, 0x00, 0xEA - .byte 0x18, 0x50, 0x80, 0xE5, 0x41, 0x00, 0x00, 0xEA, 0x18, 0x30, 0x90, 0xE5, 0x00, 0x00, 0x53, 0xE3 - .byte 0x25, 0x00, 0x00, 0x1A, 0x08, 0x10, 0x90, 0xE5, 0x00, 0x10, 0x91, 0xE5, 0x01, 0x00, 0x51, 0xE3 - .byte 0x10, 0x00, 0x00, 0x1A, 0x50, 0x21, 0x9F, 0xE5, 0xB0, 0x10, 0xD2, 0xE1, 0x81, 0x1C, 0xA0, 0xE1 - .byte 0xA1, 0x1F, 0xB0, 0xE1, 0x35, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x83, 0xE2, 0x18, 0x10, 0x80, 0xE5 - .byte 0xB0, 0x00, 0xD2, 0xE1, 0x40, 0x00, 0x80, 0xE3, 0xB0, 0x00, 0xC2, 0xE1, 0xFD, 0x00, 0x00, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x10, 0xA0, 0x01, 0x10, 0x01, 0x9F, 0x05, 0x03, 0x50, 0xA0, 0x03 - .byte 0x18, 0x10, 0x80, 0x05, 0x29, 0x00, 0x00, 0xEA, 0x0C, 0x21, 0x9F, 0xE5, 0xB0, 0x10, 0xD2, 0xE1 - .byte 0x81, 0x1C, 0xA0, 0xE1, 0xA1, 0x1F, 0xB0, 0xE1, 0x24, 0x00, 0x00, 0x0A, 0x01, 0x10, 0x83, 0xE2 - .byte 0x18, 0x10, 0x80, 0xE5, 0xB0, 0x00, 0xD2, 0xE1, 0x40, 0x00, 0xC0, 0xE3, 0xB0, 0x00, 0xC2, 0xE1 - .byte 0xEC, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x10, 0xA0, 0x01, 0xCC, 0x00, 0x9F, 0x05 - .byte 0x03, 0x50, 0xA0, 0x03, 0x18, 0x10, 0x80, 0x05, 0x18, 0x00, 0x00, 0xEA, 0x18, 0x50, 0x80, 0xE5 - .byte 0x16, 0x00, 0x00, 0xEA -_020D5E74: - ldr r0, _020D5F30 ; =0x021D5538 - mov r1, #0x0 - str r1, [r0, #0x18] - mov r5, #0x4 - b _020D5ED0 -_020D5E88: - ldr r0, _020D5F30 ; =0x021D5538 - mov r1, #0x0 - str r1, [r0, #0x18] - cmp r2, #0x4 - addls pc, pc, r2, lsl #0x2 - b _020D5ECC -_020D5EA0: - .byte 0x09, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x03, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x00, 0xEA - .byte 0x05, 0x00, 0x00, 0xEA, 0x04, 0x50, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0xEA, 0x05, 0x50, 0xA0, 0xE3 - .byte 0x02, 0x00, 0x00, 0xEA, 0x01, 0x50, 0xA0, 0xE3, 0x00, 0x00, 0x00, 0xEA -_020D5ECC: - mov r5, #0x6 -_020D5ED0: - ldr r0, _020D5F30 ; =0x021D5538 - ldr r1, [r0, #0x18] - cmp r1, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r2, _020D5F30 ; =0x021D5538 - ldr r1, [r0, #0x0] - ldr r4, [r2, #0x4] - cmp r1, #0x0 - movne r1, #0x0 - strne r1, [r0, #0x0] - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r1, [r2, #0x10] - mov r3, #0x0 - mov r0, r5 - str r3, [r2, #0x4] - blx r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D5F30: .word 0x021D5538 -_020D5F34: - .byte 0xE8, 0xFD, 0x7F, 0x02, 0xEC, 0xFD, 0x7F, 0x02, 0xEA, 0xFD, 0x7F, 0x02 - - arm_func_start RTC_GetDateTimeAsync -RTC_GetDateTimeAsync: ; 0x020D5F40 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl OS_DisableInterrupts - ldr r1, _020D5FCC ; =0x021D5538 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - beq _020D5F80 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r7,lr} - bx lr -_020D5F80: - mov r2, #0x1 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - ldr r0, _020D5FCC ; =0x021D5538 - mov r2, #0x2 - mov r1, #0x0 - str r2, [r0, #0x14] - str r1, [r0, #0x18] - str r7, [r0, #0x8] - str r6, [r0, #0xc] - str r5, [r0, #0x4] - str r4, [r0, #0x10] - bl RTCi_ReadRawDateTimeAsync -_020D5FB4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xA0, 0x03 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D5FCC: .word 0x021D5538 - - arm_func_start RTC_GetTime -RTC_GetTime: ; 0x020D5FD0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D600C ; =RtcGetResultCallback - mov r2, #0x0 - bl RTC_GetTimeAsync - ldr r1, _020D6010 ; =0x021D5538 - cmp r0, #0x0 - str r0, [r1, #0x20] - bne _020D5FF8 - bl RtcWaitBusy -_020D5FF8: - ldr r0, _020D6010 ; =0x021D5538 - ldr r0, [r0, #0x20] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D600C: .word RtcGetResultCallback -_020D6010: .word 0x021D5538 - - arm_func_start RTC_GetTimeAsync -RTC_GetTimeAsync: ; 0x020D6014 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl OS_DisableInterrupts - ldr r1, _020D608C ; =0x021D5538 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - beq _020D6048 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020D6048: - mov r2, #0x1 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - ldr r0, _020D608C ; =0x021D5538 - mov r2, #0x1 - mov r1, #0x0 - str r2, [r0, #0x14] - str r1, [r0, #0x18] - str r6, [r0, #0x8] - str r5, [r0, #0x4] - str r4, [r0, #0x10] - bl RTCi_ReadRawTimeAsync -_020D6078: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13 - .byte 0x03, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D608C: .word 0x021D5538 - - arm_func_start RTC_GetDate -RTC_GetDate: ; 0x020D6090 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D60CC ; =RtcGetResultCallback - mov r2, #0x0 - bl RTC_GetDateAsync - ldr r1, _020D60D0 ; =0x021D5538 - cmp r0, #0x0 - str r0, [r1, #0x20] - bne _020D60B8 - bl RtcWaitBusy -_020D60B8: - ldr r0, _020D60D0 ; =0x021D5538 - ldr r0, [r0, #0x20] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D60CC: .word RtcGetResultCallback -_020D60D0: .word 0x021D5538 - - arm_func_start RTC_GetDateAsync -RTC_GetDateAsync: ; 0x020D60D4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl OS_DisableInterrupts - ldr r1, _020D6148 ; =0x021D5538 - ldr r2, [r1, #0x0] - cmp r2, #0x0 - beq _020D6108 - bl OS_RestoreInterrupts - mov r0, #0x1 - ldmia sp!, {r4-r6,lr} - bx lr -_020D6108: - mov r2, #0x1 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - ldr r0, _020D6148 ; =0x021D5538 - mov r1, #0x0 - str r1, [r0, #0x14] - str r1, [r0, #0x18] - str r6, [r0, #0x8] - str r5, [r0, #0x4] - str r4, [r0, #0x10] - bl RTCi_ReadRawDateAsync -_020D6134: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xA0, 0x03 - .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D6148: .word 0x021D5538 - - arm_func_start RTC_Init -RTC_Init: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r1, _020D61C8 ; =0x021D5534 - ldrh r0, [r1, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - ldr r0, _020D61CC ; =0x021D5538 - mov r2, #0x0 - mov r3, #0x1 - strh r3, [r1, #0x0] - str r2, [r0, #0x0] - str r2, [r0, #0x4] - str r2, [r0, #0x1c] - str r2, [r0, #0x8] - str r2, [r0, #0xc] - bl PXI_Init - mov r5, #0x5 - mov r4, #0x1 - mov r0, r5 - mov r1, r4 - bl PXI_IsCallbackReady -_020D61A8: - .byte 0x00, 0x00, 0x50, 0xE3, 0xFA, 0xFF, 0xFF, 0x0A - .byte 0x18, 0x10, 0x9F, 0xE5, 0x05, 0x00, 0xA0, 0xE3, 0xFF, 0xE6, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D61C8: .word 0x021D5534 -_020D61CC: .word 0x021D5538 -_020D61D0: - .byte 0xC0, 0x59, 0x0D, 0x02, 0x00, 0x40, 0x2D, 0xE9, 0x04, 0xD0, 0x4D, 0xE2, 0x00, 0x04, 0xA0, 0xE1 - .byte 0x7F, 0x1C, 0x00, 0xE2, 0x05, 0x00, 0xA0, 0xE3, 0x00, 0x20, 0xA0, 0xE3, 0xBB, 0xE6, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0xA3, 0x00, 0x00, 0xA0, 0xB3, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start RTCi_WriteRawStatus2Async -RTCi_WriteRawStatus2Async: ; 0x020D6208 - ldr ip, _020D6214 ; =0x020D61D4 - mov r0, #0x27 - bx r12 - .balign 4 -_020D6214: .word 0x020D61D4 - - arm_func_start RTCi_ReadRawTimeAsync -RTCi_ReadRawTimeAsync: - ldr ip, _020D6224 ; =0x020D61D4 - mov r0, #0x12 - bx r12 - .balign 4 -_020D6224: .word 0x020D61D4 - - arm_func_start RTCi_ReadRawDateAsync -RTCi_ReadRawDateAsync: - ldr ip, _020D6234 ; =0x020D61D4 - mov r0, #0x11 - bx r12 - .balign 4 -_020D6234: .word 0x020D61D4 - - arm_func_start RTCi_ReadRawDateTimeAsync -RTCi_ReadRawDateTimeAsync: - ldr ip, _020D6244 ; =0x020D61D4 - mov r0, #0x10 - bx r12 - .balign 4 -_020D6244: .word 0x020D61D4 - - arm_func_start RTC_GetDayOfWeek -RTC_GetDayOfWeek: ; 0x020D6248 - stmdb sp!, {r4-r6,lr} - ldr r1, [r0, #0x4] - ldr r2, [r0, #0x0] - sub r3, r1, #0x2 - cmp r3, #0x1 - add lr, r2, #0x7d0 - ldr r4, _020D630C ; =0x51EB851F - sublt lr, lr, #0x1 - ldr r12, [r0, #0x8] - smull r0, r2, r4, lr - addlt r3, r3, #0xc - mov r1, #0x1a - mul r0, r3, r1 - smull r1, r3, r4, lr - ldr r5, _020D6310 ; =0x66666667 - sub r0, r0, #0x2 - smull r4, r1, r5, r0 - mov r4, lr, lsr #0x1f - mov r2, r2, asr #0x5 - mov r3, r3, asr #0x5 - add r3, r4, r3 - ldr r5, _020D6314 ; =0x00000064 - add r2, r4, r2 - smull r2, r4, r5, r2 - sub r2, lr, r2 - mov r1, r1, asr #0x2 - mov r0, r0, lsr #0x1f - add r1, r0, r1 - mov r4, r2, asr #0x1 - add r0, r12, r1 - add r1, r2, r4, lsr #0x1e - add r2, r2, r0 - mov r6, r3, asr #0x1 - add r0, r3, r6, lsr #0x1e - add r1, r2, r1, asr #0x2 - add r1, r1, r0, asr #0x2 - mov r0, #0x5 - mla r4, r3, r0, r1 - ldr r3, _020D6318 ; =0x92492493 - mov r1, r4, lsr #0x1f - smull r2, r0, r3, r4 - add r0, r4, r0 - mov r0, r0, asr #0x2 - ldr r2, _020D631C ; =0x00000007 - add r0, r1, r0 - smull r0, r1, r2, r0 - sub r0, r4, r0 - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D630C: .word 0x51EB851F -_020D6310: .word 0x66666667 -_020D6314: .word 0x00000064 -_020D6318: .word 0x92492493 -_020D631C: .word 0x00000007 - - arm_func_start RTC_ConvertSecondToDateTime -RTC_ConvertSecondToDateTime: ; 0x020D6320 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r2 - mov r12, #0x0 - mov r4, r3 - subs r2, r5, r12 - sbcs r2, r4, r12 - mov r7, r0 - mov r6, r1 - movlt r5, r12 - movlt r4, r12 - blt _020D6364 - ldr r1, _020D63B0 ; =0xBC19137F - subs r0, r1, r5 - sbcs r0, r12, r4 - movlt r5, r1 - movlt r4, r12 -_020D6364: - ldr r2, _020D63B4 ; =0x00015180 - mov r0, r5 - mov r1, r4 - mov r3, #0x0 - bl _ll_mod - mov r1, r0 - mov r0, r6 - bl RTCi_ConvertSecondToTime - ldr r2, _020D63B4 ; =0x00015180 - mov r0, r5 - mov r1, r4 - mov r3, #0x0 - bl _ll_sdiv - mov r1, r0 - mov r0, r7 - bl RTC_ConvertDayToDate - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D63B0: .word 0xBC19137F -_020D63B4: .word 0x00015180 - - arm_func_start RTCi_ConvertSecondToTime -RTCi_ConvertSecondToTime: ; 0x020D63B8 - stmdb sp!, {r4-r6,lr} - ldr r2, _020D6448 ; =0x0001517F - cmp r1, #0x0 - movlt r1, #0x0 - cmp r1, r2 - ldr ip, _020D644C ; =0x88888889 - movgt r1, r2 - smull r2, r3, r12, r1 - smull r2, lr, r12, r1 - ldr r5, _020D6450 ; =0x91A2B3C5 - add r3, r1, r3 - smull r4, r2, r5, r1 - mov r5, r1, lsr #0x1f - mov r3, r3, asr #0x5 - add r3, r5, r3 - smull r4, r6, r12, r3 - add lr, r1, lr - mov lr, lr, asr #0x5 - add r6, r3, r6 - add r2, r1, r2 - ldr r4, _020D6454 ; =0x0000003C - add lr, r5, lr - smull r12, lr, r4, lr - sub lr, r1, r12 - mov r2, r2, asr #0xb - mov r6, r6, asr #0x5 - mov r1, r3, lsr #0x1f - add r6, r1, r6 - smull r1, r12, r4, r6 - str lr, [r0, #0x8] - sub r6, r3, r1 - str r6, [r0, #0x4] - add r2, r5, r2 - str r2, [r0, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr - .balign 4 -_020D6448: .word 0x0001517F -_020D644C: .word 0x88888889 -_020D6450: .word 0x91A2B3C5 -_020D6454: .word 0x0000003C - - arm_func_start RTC_ConvertDayToDate -RTC_ConvertDayToDate: ; 0x020D6458 - stmdb sp!, {r4,lr} - ldr r2, _020D6560 ; =0x00008EAC - cmp r1, #0x0 - movlt r1, #0x0 - cmp r1, r2 - movgt r1, r2 - ldr r3, _020D6564 ; =0x92492493 - add lr, r1, #0x6 - smull r2, r4, r3, lr - add r4, lr, r4 - mov r4, r4, asr #0x2 - mov r2, lr, lsr #0x1f - ldr ip, _020D6568 ; =0x00000007 - add r4, r2, r4 - smull r2, r3, r12, r4 - sub r4, lr, r2 - ldr r2, _020D656C ; =0x0000016D - ldr r3, _020D6570 ; =0x0000016E - str r4, [r0, #0xc] - mov lr, #0x0 -_020D64A8: - ands r12, lr, #0x3 - moveq r12, r3 - movne r12, r2 - mov r4, r1 - subs r1, r1, r12 - movmi r1, r4 - bmi _020D64D0 - add lr, lr, #0x1 - cmp lr, #0x63 - blo _020D64A8 -_020D64D0: - ldr r2, _020D656C ; =0x0000016D - str lr, [r0, #0x0] - cmp r1, r2 - movgt r1, r2 - ands r2, lr, #0x3 - bne _020D6518 - cmp r1, #0x3c - bge _020D6514 - cmp r1, #0x1f - movlt r2, #0x1 - subge r1, r1, #0x1f - movge r2, #0x2 - str r2, [r0, #0x4] - add r1, r1, #0x1 - str r1, [r0, #0x8] - ldmia sp!, {r4,lr} - bx lr -_020D6514: - sub r1, r1, #0x1 -_020D6518: - ldr r3, _020D6574 ; =0x02106A20 - mov r4, #0xb -_020D6520: - ldr r2, [r3, r4, lsl #0x2] - mov r12, r4, lsl #0x2 - cmp r1, r2 - blt _020D6550 - add r2, r4, #0x1 - str r2, [r0, #0x4] - ldr r2, [r3, r12] - sub r1, r1, r2 - add r1, r1, #0x1 - str r1, [r0, #0x8] - ldmia sp!, {r4,lr} - bx lr -_020D6550: - subs r4, r4, #0x1 - bpl _020D6520 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D6560: .word 0x00008EAC -_020D6564: .word 0x92492493 -_020D6568: .word 0x00000007 -_020D656C: .word 0x0000016D -_020D6570: .word 0x0000016E -_020D6574: .word 0x02106A20 - - arm_func_start RTC_ConvertDateTimeToSecond -RTC_ConvertDateTimeToSecond: ; 0x020D6578 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r1 - bl RTC_ConvertDateToDay - mov r4, r0 - mvn r0, #0x0 - cmp r4, r0 - addeq sp, sp, #0x4 - moveq r1, r0 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - mov r0, r5 - bl RTCi_ConvertTimeToSecond - mvn r2, #0x0 - cmp r0, r2 - moveq r1, r2 - beq _020D65DC - ldr r1, _020D65EC ; =0x00015180 - mov r2, #0x0 - umull r12, r3, r4, r1 - mla r3, r4, r2, r3 - mov r2, r4, asr #0x1f - mla r3, r2, r1, r3 - adds r2, r0, r12 - adc r1, r3, r0, asr #0x1f -_020D65DC: - mov r0, r2 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D65EC: .word 0x00015180 - - arm_func_start RTCi_ConvertTimeToSecond -RTCi_ConvertTimeToSecond: ; 0x020D65F0 - ldr r3, [r0, #0x4] - ldr r2, [r0, #0x0] - mov r1, #0x3c - mla r3, r2, r1, r3 - ldr r0, [r0, #0x8] - mla r0, r3, r1, r0 - bx lr - - arm_func_start RTC_ConvertDateToDay -RTC_ConvertDateToDay: ; 0x020D660C - ldr r3, [r0, #0x0] - cmp r3, #0x64 - bhs _020D665C - ldr r2, [r0, #0x4] - cmp r2, #0x1 - blo _020D665C - cmp r2, #0xc - bhi _020D665C - ldr r1, [r0, #0x8] - cmp r1, #0x1 - blo _020D665C - cmp r1, #0x1f - bhi _020D665C - ldr r0, [r0, #0xc] - cmp r0, #0x7 - bge _020D665C - cmp r2, #0x1 - blo _020D665C - cmp r2, #0xc - bls _020D6664 -_020D665C: - mvn r0, #0x0 - bx lr -_020D6664: - ldr r0, _020D6698 ; =0x02106A1C - sub r1, r1, #0x1 - ldr r0, [r0, r2, lsl #0x2] - cmp r2, #0x3 - add r2, r1, r0 - blo _020D6684 - ands r0, r3, #0x3 - addeq r2, r2, #0x1 -_020D6684: - ldr r0, _020D669C ; =0x0000016D - add r1, r3, #0x3 - mla r0, r3, r0, r2 - add r0, r0, r1, lsr #0x2 - bx lr - .balign 4 -_020D6698: .word 0x02106A1C -_020D669C: .word 0x0000016D - - arm_func_start CARD_UnlockBackup -CARD_UnlockBackup: ; 0x020D66A0 - ldr ip, _020D66AC ; =CARDi_UnlockResource - mov r1, #0x2 - bx r12 - .balign 4 -_020D66AC: .word CARDi_UnlockResource - - arm_func_start CARD_LockBackup -CARD_LockBackup: ; 0x020D66B0 - ldr ip, _020D66BC ; =CARDi_LockResource - mov r1, #0x2 - bx r12 - .balign 4 -_020D66BC: .word CARDi_LockResource - - arm_func_start CARD_UnlockRom -CARD_UnlockRom: ; 0x020D66C0 - stmdb sp!, {r4,lr} - mov r4, r0 - bl OS_UnlockCard - mov r0, r4 - mov r1, #0x1 - bl CARDi_UnlockResource - ldmia sp!, {r4,lr} - bx lr - - arm_func_start CARD_LockRom -CARD_LockRom: ; 0x020D66E0 - stmdb sp!, {r4,lr} - mov r4, r0 - mov r1, #0x1 - bl CARDi_LockResource - mov r0, r4 - bl OS_TryLockCard - ldmia sp!, {r4,lr} - bx lr - - arm_func_start CARD_GetResultCode -CARD_GetResultCode: ; 0x020D6700 - ldr r0, _020D6710 ; =0x021D55C0 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020D6710: .word 0x021D55C0 - - arm_func_start FUN_020d6714 -FUN_020d6714: ; 0x020D6714 - ldr r0, _020D672C ; =0x021D55C0 - ldr r0, [r0, #0x114] - ands r0, r0, #0x4 - moveq r0, #0x1 - movne r0, #0x0 - bx lr - .balign 4 -_020D672C: .word 0x021D55C0 - - arm_func_start CARDi_WaitAsync -CARDi_WaitAsync: ; 0x020D6730 - stmdb sp!, {r4-r6,lr} - ldr r6, _020D6788 ; =0x021D55C0 - bl OS_DisableInterrupts - ldr r1, [r6, #0x114] - mov r5, r0 - ands r0, r1, #0x4 - beq _020D6764 - add r4, r6, #0x10c -_020D6750: - mov r0, r4 - bl OS_SleepThread - ldr r0, [r6, #0x114] - ands r0, r0, #0x4 - bne _020D6750 -_020D6764: - mov r0, r5 - bl OS_RestoreInterrupts -_020D676C: - .byte 0x00, 0x00, 0x96, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03, 0x00, 0x00, 0xA0, 0x13 - .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D6788: .word 0x021D55C0 - - arm_func_start CARD_Enable -CARD_Enable: ; 0x020D678C - ldr r1, _020D6798 ; =0x021D555C - str r0, [r1, #0x0] - bx lr - .balign 4 -_020D6798: .word 0x021D555C - - arm_func_start CARD_CheckEnabled -CARD_CheckEnabled: ; 0x020D679C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl CARD_IsEnabled -_020D67A8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12 - .byte 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x24, 0xDC, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CARD_IsEnabled -CARD_IsEnabled: - ldr r0, _020D67D4 ; =0x021D555C - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020D67D4: .word 0x021D555C - - arm_func_start CARDi_InitCommon -CARDi_InitCommon: ; 0x020D67D8 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r4, _020D68B8 ; =0x021D55C0 - ldr r1, _020D68BC ; =0x021D5560 - mvn r2, #0x2 - mov r0, #0x0 - str r2, [r4, #0x8] - mov r2, #0x60 - str r0, [r4, #0xc] - str r0, [r4, #0x18] - str r1, [r4, #0x0] - bl MIi_CpuClearFast - ldr r0, _020D68BC ; =0x021D5560 - mov r1, #0x60 - bl DC_FlushRange - ldr r0, _020D68C0 ; =0x027FFC40 - ldrh r0, [r0, #0x0] - cmp r0, #0x2 - beq _020D6834 - ldr r0, _020D68C4 ; =0x027FFE00 - ldr r1, _020D68C8 ; =0x027FFA80 - mov r2, #0x160 - bl MI_CpuCopy8 -_020D6834: - mov r2, #0x0 - str r2, [r4, #0x14] - ldr r0, [r4, #0x14] - mov r1, #0x4 - str r0, [r4, #0x10] - str r2, [r4, #0x110] - ldr r3, [r4, #0x110] - mov r0, #0x400 - str r3, [r4, #0x10c] - str r1, [r4, #0x108] - str r0, [sp, #0x0] - ldr r12, [r4, #0x108] - ldr r1, _020D68CC ; =CARDi_TaskThread - ldr r3, _020D68D0 ; =0x021D5BE0 - add r0, r4, #0x44 - str r12, [sp, #0x4] - bl OS_CreateThread - add r0, r4, #0x44 - bl OS_WakeupThreadDirect - ldr r1, _020D68D4 ; =CARDi_OnFifoRecv - mov r0, #0xb - bl PXI_SetFifoRecvCallback - ldr r0, _020D68C0 ; =0x027FFC40 - ldrh r0, [r0, #0x0] - cmp r0, #0x2 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4,lr} - bxeq lr - mov r0, #0x1 - bl CARD_Enable - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D68B8: .word 0x021D55C0 -_020D68BC: .word 0x021D5560 -_020D68C0: .word 0x027FFC40 -_020D68C4: .word 0x027FFE00 -_020D68C8: .word 0x027FFA80 -_020D68CC: .word CARDi_TaskThread -_020D68D0: .word 0x021D5BE0 -_020D68D4: .word CARDi_OnFifoRecv - - arm_func_start CARDi_UnlockResource -CARDi_UnlockResource: ; 0x020D68D8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r5, _020D6978 ; =0x021D55C0 - mov r7, r0 - mov r6, r1 - bl OS_DisableInterrupts - mov r1, r5 - mov r4, r0 - ldr r0, [r1, #0x8] - cmp r0, r7 - bne _020D6910 - ldr r0, [r5, #0xc] - cmp r0, #0x0 - bne _020D6918 -_020D6910: - bl OS_Terminate - b _020D6958 -_020D6918: - ldr r0, [r5, #0x18] - cmp r0, r6 - beq _020D6928 - bl OS_Terminate -_020D6928: - ldr r0, [r5, #0xc] - sub r0, r0, #0x1 - str r0, [r5, #0xc] - ldr r0, [r5, #0xc] - cmp r0, #0x0 - bne _020D6958 - mvn r0, #0x2 - str r0, [r5, #0x8] - mov r1, #0x0 - add r0, r5, #0x10 - str r1, [r5, #0x18] - bl OS_WakeupThread -_020D6958: - ldr r1, [r5, #0x0] - mov r2, #0x0 - mov r0, r4 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D6978: .word 0x021D55C0 - - arm_func_start CARDi_LockResource -CARDi_LockResource: ; 0x020D697C - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - ldr r5, _020D6A14 ; =0x021D55C0 - mov r7, r0 - mov r6, r1 - bl OS_DisableInterrupts - ldr r1, [r5, #0x8] - mov r4, r0 - cmp r1, r7 - bne _020D69B8 - ldr r0, [r5, #0x18] - cmp r0, r6 - beq _020D69E8 - bl OS_Terminate - b _020D69E8 -_020D69B8: - ldr r0, [r5, #0x8] - mvn r8, #0x2 - cmp r0, r8 - beq _020D69E0 - add r9, r5, #0x10 -_020D69CC: - mov r0, r9 - bl OS_SleepThread - ldr r0, [r5, #0x8] - cmp r0, r8 - bne _020D69CC -_020D69E0: - str r7, [r5, #0x8] - str r6, [r5, #0x18] -_020D69E8: - ldr r1, [r5, #0xc] - mov r0, r4 - add r1, r1, #0x1 - str r1, [r5, #0xc] - ldr r1, [r5, #0x0] - mov r2, #0x0 - str r2, [r1, #0x0] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r9,lr} - bx lr - .balign 4 -_020D6A14: .word 0x021D55C0 - - arm_func_start CARDi_SetTask -CARDi_SetTask: ; 0x020D6A18 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r4, _020D6A5C ; =0x021D55C0 - mov r5, r0 - ldr r1, [r4, #0x108] - add r0, r4, #0x44 - bl OS_SetThreadPriority - add r0, r4, #0x44 - str r0, [r4, #0x104] - str r5, [r4, #0x40] - ldr r1, [r4, #0x114] - orr r1, r1, #0x8 - str r1, [r4, #0x114] - bl OS_WakeupThreadDirect - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D6A5C: .word 0x021D55C0 - - arm_func_start FUN_020d6a60 -FUN_020d6a60: ; 0x020D6A60 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r1, _020D6D60 ; =0x021D55C0 - mov r5, r0 - ldr r4, [r1, #0x0] - mov r1, #0x0 - add r0, r4, #0x18 - mov r2, #0x48 - bl MI_CpuFill8 -_020D6A84: - .byte 0x00, 0x00, 0x55, 0xE3, 0x04, 0x50, 0x84, 0xE5, 0x3F, 0x00, 0xA0, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x02, 0x4C, 0x00, 0x84, 0xE5, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x45, 0x04, 0xA0, 0xE1, 0xFF, 0x00, 0x00, 0xE2, 0x01, 0x20, 0xA0, 0xE3, 0x12, 0x30, 0xA0, 0xE1 - .byte 0xFF, 0x10, 0x05, 0xE2, 0x18, 0x30, 0x84, 0xE5, 0xFF, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5 - .byte 0x01, 0x00, 0x51, 0xE3, 0x2D, 0x00, 0x00, 0x1A, 0x02, 0x0C, 0x53, 0xE3, 0x04, 0x00, 0x00, 0x0A - .byte 0x02, 0x0A, 0x53, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x01, 0x08, 0x53, 0xE3, 0x11, 0x00, 0x00, 0x0A - .byte 0x94, 0x00, 0x00, 0xEA, 0x10, 0x00, 0xA0, 0xE3, 0x20, 0x00, 0x84, 0xE5, 0x24, 0x20, 0x84, 0xE5 - .byte 0x05, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x84, 0xE5, 0xF0, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5 - .byte 0x10, 0x00, 0x00, 0xEA, 0x20, 0x00, 0xA0, 0xE3, 0x20, 0x00, 0x84, 0xE5, 0x02, 0x00, 0xA0, 0xE3 - .byte 0x24, 0x00, 0x84, 0xE5, 0x05, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x84, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x48, 0x00, 0xC4, 0xE5, 0x07, 0x00, 0x00, 0xEA, 0x80, 0x00, 0xA0, 0xE3, 0x20, 0x00, 0x84, 0xE5 - .byte 0x02, 0x00, 0xA0, 0xE3, 0x24, 0x00, 0x84, 0xE5, 0x0A, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x84, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5, 0x20, 0x00, 0x94, 0xE5, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x1C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x40, 0x00, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5 - .byte 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0C, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5 - .byte 0x02, 0x0C, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x02, 0x00, 0x51, 0xE3, 0x53, 0x00, 0x00, 0x1A, 0x01, 0x06, 0x53, 0xE3, 0x09, 0x00, 0x00, 0x8A - .byte 0x01, 0x06, 0x53, 0xE3, 0x0F, 0x00, 0x00, 0x2A, 0x01, 0x07, 0x53, 0xE3, 0x02, 0x00, 0x00, 0x8A - .byte 0x01, 0x07, 0x53, 0xE3, 0x0B, 0x00, 0x00, 0x0A, 0x62, 0x00, 0x00, 0xEA, 0x02, 0x07, 0x53, 0xE3 - .byte 0x08, 0x00, 0x00, 0x0A, 0x5F, 0x00, 0x00, 0xEA, 0x02, 0x06, 0x53, 0xE3, 0x02, 0x00, 0x00, 0x8A - .byte 0x02, 0x06, 0x53, 0xE3, 0x11, 0x00, 0x00, 0x0A, 0x5A, 0x00, 0x00, 0xEA, 0x02, 0x05, 0x53, 0xE3 - .byte 0x1C, 0x00, 0x00, 0x0A, 0x57, 0x00, 0x00, 0xEA, 0x19, 0x00, 0xA0, 0xE3, 0x2C, 0x00, 0x84, 0xE5 - .byte 0x4B, 0x1F, 0xA0, 0xE3, 0x30, 0x10, 0x84, 0xE5, 0x74, 0x01, 0x9F, 0xE5, 0x44, 0x10, 0x84, 0xE5 - .byte 0x3C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x80, 0x00, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5 - .byte 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0B, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x1A, 0x00, 0x00, 0xEA - .byte 0xFA, 0x1F, 0xA0, 0xE3, 0x4C, 0x01, 0x9F, 0xE5, 0x3C, 0x10, 0x84, 0xE5, 0x48, 0x11, 0x9F, 0xE5 - .byte 0x40, 0x00, 0x84, 0xE5, 0x44, 0x01, 0x9F, 0xE5, 0x34, 0x10, 0x84, 0xE5, 0x38, 0x00, 0x84, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0A, 0x80, 0xE3 - .byte 0x4C, 0x00, 0x84, 0xE5, 0x0C, 0x00, 0x00, 0xEA, 0xFA, 0x1F, 0xA0, 0xE3, 0x14, 0x01, 0x9F, 0xE5 - .byte 0x3C, 0x10, 0x84, 0xE5, 0x18, 0x11, 0x9F, 0xE5, 0x40, 0x00, 0x84, 0xE5, 0x14, 0x01, 0x9F, 0xE5 - .byte 0x34, 0x10, 0x84, 0xE5, 0x38, 0x00, 0x84, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5 - .byte 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0A, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x01, 0x08, 0xA0, 0xE3 - .byte 0x1C, 0x00, 0x84, 0xE5, 0x01, 0x0C, 0xA0, 0xE3, 0x20, 0x00, 0x84, 0xE5, 0x03, 0x00, 0xA0, 0xE3 - .byte 0x24, 0x00, 0x84, 0xE5, 0x05, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x40, 0x00, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5 - .byte 0x01, 0x0C, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x02, 0x0C, 0x80, 0xE3 - .byte 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x02, 0x0B, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5 - .byte 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x03, 0x00, 0x51, 0xE3, 0x15, 0x00, 0x00, 0x1A - .byte 0x02, 0x0A, 0x53, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x02, 0x09, 0x53, 0xE3, 0x11, 0x00, 0x00, 0x1A - .byte 0x20, 0x30, 0x84, 0xE5, 0x1C, 0x30, 0x84, 0xE5, 0x02, 0x00, 0xA0, 0xE3, 0x24, 0x00, 0x84, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x48, 0x00, 0xC4, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x40, 0x00, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x01, 0x0C, 0x80, 0xE3 - .byte 0x4C, 0x00, 0x84, 0xE5, 0x4C, 0x00, 0x94, 0xE5, 0x02, 0x0C, 0x80, 0xE3, 0x4C, 0x00, 0x84, 0xE5 - .byte 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x10, 0x84, 0xE5 - .byte 0x18, 0x10, 0x84, 0xE5, 0x14, 0x00, 0x9F, 0xE5, 0x03, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x90, 0xE5 - .byte 0x00, 0x10, 0x80, 0xE5, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D6D60: .word 0x021D55C0 -_020D6D64: - .byte 0x88, 0x13, 0x00, 0x00, 0xB8, 0x0B, 0x00, 0x00, 0x68, 0x42, 0x00, 0x00 - .byte 0x40, 0x9C, 0x00, 0x00, 0xA0, 0x09, 0x01, 0x00, 0x00, 0x71, 0x02, 0x00 - - arm_func_start CARD_CancelBackupAsync -CARD_CancelBackupAsync: ; 0x020D6D7C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r1, _020D6DA8 ; =0x021D55C0 - ldr r2, [r1, #0x114] - orr r2, r2, #0x40 - str r2, [r1, #0x114] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D6DA8: .word 0x021D55C0 - - arm_func_start CARD_TryWaitBackupAsync -CARD_TryWaitBackupAsync: ; 0x020D6DAC - ldr ip, _020D6DB4 ; =FUN_020d6714 - bx r12 - .balign 4 -_020D6DB4: .word FUN_020d6714 - - arm_func_start CARD_WaitBackupAsync -CARD_WaitBackupAsync: ; 0x020D6DB8 - ldr ip, _020D6DC0 ; =CARDi_WaitAsync - bx r12 - .balign 4 -_020D6DC0: .word CARDi_WaitAsync - - arm_func_start CARD_IdentifyBackup -CARD_IdentifyBackup: ; 0x020D6DC4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r0, _020D6F00 ; =0x02000C3C - ldr r7, _020D6F04 ; =0x021D55C0 - bl FUN_02000B60 -_020D6DDC: - .byte 0x00, 0x00, 0x55, 0xE3 - .byte 0x00, 0x00, 0x00, 0x1A, 0x99, 0xDA, 0xFF, 0xEB, 0x6B, 0xFE, 0xFF, 0xEB, 0x47, 0xD9, 0xFF, 0xEB - .byte 0x14, 0x11, 0x97, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0x11, 0xE2, 0x05, 0x00, 0x00, 0x0A - .byte 0x43, 0x6F, 0x87, 0xE2, 0x06, 0x00, 0xA0, 0xE1, 0x35, 0xD1, 0xFF, 0xEB, 0x14, 0x01, 0x97, 0xE5 - .byte 0x04, 0x00, 0x10, 0xE2, 0xFA, 0xFF, 0xFF, 0x1A, 0x14, 0x01, 0x97, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x04, 0x00, 0x80, 0xE3, 0x14, 0x01, 0x87, 0xE5, 0x38, 0x10, 0x87, 0xE5, 0x04, 0x00, 0xA0, 0xE1 - .byte 0x3C, 0x10, 0x87, 0xE5, 0x3A, 0xD9, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0x07, 0xFF, 0xFF, 0xEB - .byte 0xC0, 0x00, 0x9F, 0xE5, 0xB8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x04, 0x21, 0x81, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0xDA, 0x02, 0x00, 0xEB - .byte 0x00, 0x00, 0x97, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x0C, 0x10, 0x80, 0xE5, 0x00, 0x00, 0x97, 0xE5 - .byte 0x12, 0x1E, 0x87, 0xE2, 0x10, 0x10, 0x80, 0xE5, 0x00, 0x10, 0x97, 0xE5, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x07, 0x00, 0xA0, 0xE1, 0x14, 0x20, 0x81, 0xE5, 0x06, 0x10, 0xA0, 0xE3, 0xCE, 0x02, 0x00, 0xEB - .byte 0x38, 0x60, 0x97, 0xE5, 0x3C, 0x50, 0x97, 0xE5, 0x1C, 0xD9, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1 - .byte 0x14, 0x11, 0x97, 0xE5, 0x43, 0x0F, 0x87, 0xE2, 0x4C, 0x10, 0xC1, 0xE3, 0x14, 0x11, 0x87, 0xE5 - .byte 0xEB, 0xD0, 0xFF, 0xEB, 0x14, 0x01, 0x97, 0xE5, 0x10, 0x00, 0x10, 0xE2, 0x01, 0x00, 0x00, 0x0A - .byte 0x44, 0x00, 0x87, 0xE2, 0xD9, 0xD0, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x14, 0xD9, 0xFF, 0xEB - .byte 0x00, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x05, 0x00, 0xA0, 0xE1, 0x36, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 - .byte 0x00, 0x00, 0xA0, 0x13, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D6F00: .word 0x02000C3C -_020D6F04: .word 0x021D55C0 -_020D6F08: - .byte 0x98, 0x34, 0x1D, 0x02 - - arm_func_start CARD_GetBackupSectorSize -CARD_GetBackupSectorSize: ; 0x020D6F0C - ldr r0, _020D6F1C ; =0x021D55C0 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x1c] - bx lr - .balign 4 -_020D6F1C: .word 0x021D55C0 - - arm_func_start CARDi_RequestStreamCommand -CARDi_RequestStreamCommand: ; 0x020D6F20 - stmdb sp!, {r4-r10,lr} - mov r10, r0 - ldr r6, _020D7004 ; =0x021D55C0 - ldr r0, _020D7008 ; =0x02000C3C - mov r9, r1 - mov r8, r2 - mov r7, r3 - bl FUN_02000B60 - bl OS_DisableInterrupts - ldr r1, [r6, #0x114] - mov r5, r0 - ands r0, r1, #0x4 - beq _020D6F6C - add r4, r6, #0x10c -_020D6F58: - mov r0, r4 - bl OS_SleepThread - ldr r0, [r6, #0x114] - ands r0, r0, #0x4 - bne _020D6F58 -_020D6F6C: - ldr r0, [r6, #0x114] - ldr r1, [sp, #0x20] - orr r0, r0, #0x4 - str r0, [r6, #0x114] - str r7, [r6, #0x38] - mov r0, r5 - str r1, [r6, #0x3c] - bl OS_RestoreInterrupts - str r10, [r6, #0x1c] - str r9, [r6, #0x20] - ldr r0, [sp, #0x24] - ldr r1, [sp, #0x28] - str r8, [r6, #0x24] - ldr r2, [sp, #0x2c] - str r1, [r6, #0x2c] - ldr r1, [sp, #0x30] - str r2, [r6, #0x30] - str r1, [r6, #0x34] - cmp r0, #0x0 - beq _020D6FD0 - ldr r0, _020D700C ; =CARDi_RequestStreamCommandCore - bl CARDi_SetTask - mov r0, #0x1 - ldmia sp!, {r4-r10,lr} - bx lr -_020D6FD0: - ldr r0, _020D7010 ; =0x021D3498 - ldr r1, _020D7004 ; =0x021D55C0 - ldr r2, [r0, #0x4] - mov r0, r6 - str r2, [r1, #0x104] - bl CARDi_RequestStreamCommandCore -_020D6FE8: - .byte 0x00, 0x00, 0x96, 0xE5, 0x00, 0x00, 0x90, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03, 0x00, 0x00, 0xA0, 0x13, 0xF0, 0x47, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 -_020D7004: .word 0x021D55C0 -_020D7008: .word 0x02000C3C -_020D700C: .word CARDi_RequestStreamCommandCore -_020D7010: .word 0x021D3498 - - arm_func_start CARDi_RequestStreamCommandCore -CARDi_RequestStreamCommandCore: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r9, r0 - ldr r8, [r9, #0x2c] - ldr r0, _020D720C ; =0x02000C3C - ldr r7, [r9, #0x34] - ldr r10, [r9, #0x30] - mov r6, #0x100 - bl FUN_02000B60 - cmp r8, #0xb - bne _020D7048 - bl CARD_GetBackupSectorSize - mov r6, r0 -_020D7048: - mov r0, #0x1 - add r4, r9, #0x120 - mov r11, #0x9 - str r0, [sp, #0x0] - ldr r5, [r9, #0x24] - ldr r0, [r9, #0x0] - cmp r6, r5 - movcc r5, r6 - str r5, [r0, #0x14] - ldr r0, [r9, #0x114] - ands r0, r0, #0x40 - beq _020D7094 - ldr r0, [r9, #0x114] - mov r1, #0x7 - bic r0, r0, #0x40 - str r0, [r9, #0x114] - ldr r0, [r9, #0x0] - str r1, [r0, #0x0] - b _020D71A8 -_020D7094: - cmp r7, #0x3 - addls pc, pc, r7, lsl #0x2 - b _020D7124 -_020D70A0: - .byte 0x02, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA - .byte 0x05, 0x10, 0xA0, 0xE1, 0x12, 0x0E, 0x89, 0xE2, 0x19, 0xD4, 0xFF, 0xEB, 0x1C, 0x10, 0x99, 0xE5 - .byte 0x00, 0x00, 0x99, 0xE5, 0x0C, 0x10, 0x80, 0xE5, 0x00, 0x00, 0x99, 0xE5, 0x10, 0x40, 0x80, 0xE5 - .byte 0x13, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x99, 0xE5, 0x04, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1 - .byte 0xBE, 0xDC, 0xFF, 0xEB, 0x05, 0x10, 0xA0, 0xE1, 0x12, 0x0E, 0x89, 0xE2, 0x1A, 0xD4, 0xFF, 0xEB - .byte 0x22, 0xD4, 0xFF, 0xEB, 0x00, 0x00, 0x99, 0xE5, 0x0C, 0x40, 0x80, 0xE5, 0x20, 0x10, 0x99, 0xE5 - .byte 0x00, 0x00, 0x99, 0xE5, 0x10, 0x10, 0x80, 0xE5, 0x05, 0x00, 0x00, 0xEA, 0x1C, 0x10, 0x99, 0xE5 - .byte 0x00, 0x00, 0x99, 0xE5, 0x0C, 0x10, 0x80, 0xE5, 0x20, 0x10, 0x99, 0xE5, 0x00, 0x00, 0x99, 0xE5 - .byte 0x10, 0x10, 0x80, 0xE5 -_020D7124: - mov r0, r9 - mov r1, r8 - mov r2, r10 - bl CARDi_Request -_020D7134: - .byte 0x00, 0x00, 0x50, 0xE3, 0x1A, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x57, 0xE3 - .byte 0x06, 0x00, 0x00, 0x1A, 0x00, 0x20, 0x9D, 0xE5, 0x09, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1 - .byte 0x1D, 0x02, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x11, 0x00, 0x00, 0xEA - .byte 0x00, 0x00, 0x57, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x20, 0x10, 0x99, 0xE5, 0x05, 0x20, 0xA0, 0xE1 - .byte 0x12, 0x0E, 0x89, 0xE2, 0x99, 0xDC, 0xFF, 0xEB, 0x1C, 0x00, 0x99, 0xE5, 0x05, 0x00, 0x80, 0xE0 - .byte 0x1C, 0x00, 0x89, 0xE5, 0x20, 0x00, 0x99, 0xE5, 0x05, 0x00, 0x80, 0xE0, 0x20, 0x00, 0x89, 0xE5 - .byte 0x24, 0x00, 0x99, 0xE5, 0x05, 0x00, 0x40, 0xE0, 0x24, 0x00, 0x89, 0xE5, 0x24, 0x00, 0x99, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0xAB, 0xFF, 0xFF, 0x1A -_020D71A8: - ldr r6, [r9, #0x38] - ldr r5, [r9, #0x3c] - bl OS_DisableInterrupts - ldr r1, [r9, #0x114] - mov r4, r0 - bic r0, r1, #0x4c - str r0, [r9, #0x114] - add r0, r9, #0x10c - bl OS_WakeupThread - ldr r0, [r9, #0x114] - ands r0, r0, #0x10 - beq _020D71E0 - add r0, r9, #0x44 - bl OS_WakeupThreadDirect -_020D71E0: - mov r0, r4 - bl OS_RestoreInterrupts -_020D71E8: - .byte 0x00, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x02 - .byte 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x05, 0x00, 0xA0, 0xE1, 0x36, 0xFF, 0x2F, 0xE1 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D720C: .word 0x02000C3C - - arm_func_start CARDi_GetRomAccessor -CARDi_GetRomAccessor: ; 0x020D7210 - ldr r0, _020D7218 ; =CARDi_ReadCard - bx lr - .balign 4 -_020D7218: .word CARDi_ReadCard - - arm_func_start CARD_WaitRomAsync -CARD_WaitRomAsync: ; 0x020D721C - ldr ip, _020D7224 ; =CARDi_WaitAsync - bx r12 - .balign 4 -_020D7224: .word CARDi_WaitAsync - - arm_func_start CARD_Init -CARD_Init: ; 0x020D7228 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr ip, _020D72A0 ; =0x021D55C0 - ldr r0, [r12, #0x114] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - mov r0, #0x1 - str r0, [r12, #0x114] - mov r3, #0x0 - str r3, [r12, #0x24] - ldr r0, [r12, #0x24] - mvn r1, #0x0 - str r0, [r12, #0x20] - ldr r2, [r12, #0x20] - ldr r0, _020D72A4 ; =0x021D5BE0 - str r2, [r12, #0x1c] - str r1, [r12, #0x28] - str r3, [r12, #0x38] - str r3, [r12, #0x3c] - str r3, [r0, #0x0] - bl CARDi_InitCommon - bl CARDi_GetRomAccessor - ldr r1, _020D72A8 ; =0x021D5C00 - str r0, [r1, #0x0] - bl CARD_InitPulledOutCallback - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D72A0: .word 0x021D55C0 -_020D72A4: .word 0x021D5BE0 -_020D72A8: .word 0x021D5C00 - - arm_func_start CARDi_ReadRom -CARDi_ReadRom: ; 0x020D72AC - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - ldr r6, _020D73C0 ; =0x021D55C0 - mov r10, r0 - mov r9, r1 - mov r8, r2 - mov r7, r3 - ldr fp, _020D73C4 ; =0x021D5C00 - bl CARD_CheckEnabled - bl OS_DisableInterrupts - ldr r1, [r6, #0x114] - mov r5, r0 - ands r0, r1, #0x4 - beq _020D72FC - add r4, r6, #0x10c -_020D72E8: - mov r0, r4 - bl OS_SleepThread - ldr r0, [r6, #0x114] - ands r0, r0, #0x4 - bne _020D72E8 -_020D72FC: - ldr r1, [r6, #0x114] - ldr r0, [sp, #0x28] - orr r1, r1, #0x4 - str r1, [r6, #0x114] - ldr r1, [sp, #0x2c] - str r0, [r6, #0x38] - mov r0, r5 - str r1, [r6, #0x3c] - bl OS_RestoreInterrupts - ldr r0, _020D73C8 ; =0x021D5BE0 - str r10, [r6, #0x28] - ldr r0, [r0, #0x0] - cmp r10, #0x3 - add r0, r9, r0 - str r0, [r6, #0x1c] - str r8, [r6, #0x20] - str r7, [r6, #0x24] - bhi _020D734C - mov r0, r10 - bl MI_StopDma -_020D734C: - mov r0, r11 - bl CARDi_TryReadCardDma -_020D7354: - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0x30, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0xA9, 0xFF, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x38, 0x00, 0x9F, 0xE5 - .byte 0xA0, 0xFD, 0xFF, 0xEB, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x28, 0x10, 0x9F, 0xE5, 0x06, 0x00, 0xA0, 0xE1, 0x04, 0x10, 0x91, 0xE5, 0x04, 0x11, 0x86, 0xE5 - .byte 0x07, 0x00, 0x00, 0xEB, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D73C0: .word 0x021D55C0 -_020D73C4: .word 0x021D5C00 -_020D73C8: .word 0x021D5BE0 -_020D73CC: - .byte 0xD4, 0x73, 0x0D, 0x02 - .byte 0x98, 0x34, 0x1D, 0x02 - - arm_func_start CARDi_ReadRomSyncCore -CARDi_ReadRomSyncCore: ; 0x020D73D4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r4, _020D7478 ; =0x021D5C00 - mov r0, r4 - bl CARDi_ReadFromCache -_020D73E8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x0A - .byte 0x00, 0x10, 0x94, 0xE5, 0x04, 0x00, 0xA0, 0xE1, 0x31, 0xFF, 0x2F, 0xE1, 0x78, 0x70, 0x9F, 0xE5 - .byte 0x1E, 0x00, 0x00, 0xEB, 0x09, 0x02, 0x00, 0xEB, 0x00, 0x00, 0x97, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x10, 0x80, 0xE5, 0x38, 0x60, 0x97, 0xE5, 0x3C, 0x50, 0x97, 0xE5, 0xBB, 0xD7, 0xFF, 0xEB - .byte 0x14, 0x11, 0x97, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x4C, 0x00, 0xC1, 0xE3, 0x14, 0x01, 0x87, 0xE5 - .byte 0x43, 0x0F, 0x87, 0xE2, 0x8A, 0xCF, 0xFF, 0xEB, 0x14, 0x01, 0x97, 0xE5, 0x10, 0x00, 0x10, 0xE2 - .byte 0x01, 0x00, 0x00, 0x0A, 0x44, 0x00, 0x87, 0xE2, 0x78, 0xCF, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1 - .byte 0xB3, 0xD7, 0xFF, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x05, 0x00, 0xA0, 0xE1, 0x36, 0xFF, 0x2F, 0xE1, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D7478: .word 0x021D5C00 -_020D747C: - .byte 0xC0, 0x55, 0x1D, 0x02 - - arm_func_start CARDi_ReadRomIDCore -CARDi_ReadRomIDCore: ; 0x020D7480 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r0, #0xb8000000 - mov r1, #0x0 - bl CARDi_SetRomOp - ldr r1, _020D74DC ; =0x02106A50 - mov r0, #0x2000 - ldr r1, [r1, #0x0] - rsb r0, r0, #0x0 - ldr r2, [r1, #0x60] - ldr r1, _020D74E0 ; =0x040001A4 - bic r2, r2, #0x7000000 - orr r2, r2, #0xa7000000 - and r0, r2, r0 - str r0, [r1, #0x0] -_020D74BC: - ldr r0, [r1, #0x0] - ands r0, r0, #0x800000 - beq _020D74BC - ldr r0, _020D74E4 ; =0x04100010 - ldr r0, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D74DC: .word 0x02106A50 -_020D74E0: .word 0x040001A4 -_020D74E4: .word 0x04100010 - - arm_func_start CARDi_ReadCard -CARDi_ReadCard: ; 0x020D74E8 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r10, r0 - ldr sb, _020D75DC ; =0x021D55C0 - add r7, r10, #0x20 - ldr r5, _020D75E0 ; =0x04100010 - ldr r6, _020D75E4 ; =0x040001A4 - mov r11, #0x0 - mov r0, #0x200 - rsb r4, r0, #0x0 -_020D7510: - ldr r0, [r9, #0x1c] - and r1, r0, r4 - cmp r1, r0 - bne _020D7538 - ldr r8, [r9, #0x20] - ands r0, r8, #0x3 - bne _020D7538 - ldr r0, [r9, #0x24] - cmp r0, #0x200 - bhs _020D7540 -_020D7538: - mov r8, r7 - str r1, [r10, #0x8] -_020D7540: - mov r0, r1, lsr #0x8 - orr r0, r0, #0xb7000000 - mov r1, r1, lsl #0x18 - bl CARDi_SetRomOp - ldr r1, [r10, #0x4] - mov r0, r11 - str r1, [r6, #0x0] -_020D755C: - ldr r2, [r6, #0x0] - ands r1, r2, #0x800000 - beq _020D7578 - ldr r1, [r5, #0x0] - cmp r0, #0x200 - strcc r1, [r8, r0, lsl #0x2] - addcc r0, r0, #0x1 -_020D7578: - ands r1, r2, #0x80000000 - bne _020D755C - ldr r0, [r9, #0x20] - cmp r8, r0 - bne _020D75C0 - ldr r2, [r9, #0x1c] - ldr r1, [r9, #0x20] - ldr r0, [r9, #0x24] - add r2, r2, #0x200 - add r1, r1, #0x200 - subs r0, r0, #0x200 - str r2, [r9, #0x1c] - str r1, [r9, #0x20] - str r0, [r9, #0x24] - bne _020D7510 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr -_020D75C0: - mov r0, r10 - bl CARDi_ReadFromCache -_020D75C8: - .byte 0x00, 0x00, 0x50, 0xE3, 0xCF, 0xFF, 0xFF, 0x1A - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D75DC: .word 0x021D55C0 -_020D75E0: .word 0x04100010 -_020D75E4: .word 0x040001A4 - - arm_func_start CARDi_TryReadCardDma -CARDi_TryReadCardDma: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - ldr fp, _020D7748 ; =0x021D55C0 - mov r7, #0x0 - ldr r9, [r11, #0x20] - mov r10, r0 - mov r6, r7 - mov r5, r7 - mov r1, r7 - ands r4, r9, #0x1f - ldr r8, [r11, #0x24] - bne _020D7624 - ldr r0, [r11, #0x28] - cmp r0, #0x3 - movls r1, #0x1 -_020D7624: - cmp r1, #0x0 - beq _020D7678 - bl OS_GetDTCMAddress - ldr r1, _020D774C ; =0x01FF8000 - add r2, r9, r8 - cmp r2, r1 - mov r3, #0x1 - mov r1, #0x0 - bls _020D7650 - cmp r9, #0x2000000 - movcc r1, r3 -_020D7650: - cmp r1, #0x0 - bne _020D7670 - cmp r0, r2 - bhs _020D766C - add r0, r0, #0x4000 - cmp r0, r9 - bhi _020D7670 -_020D766C: - mov r3, #0x0 -_020D7670: - cmp r3, #0x0 - moveq r5, #0x1 -_020D7678: - cmp r5, #0x0 - beq _020D7694 - ldr r1, [r11, #0x1c] - ldr r0, _020D7750 ; =0x000001FF - orr r1, r1, r8 - ands r0, r1, r0 - moveq r6, #0x1 -_020D7694: - cmp r6, #0x0 - beq _020D76A4 - cmp r8, #0x0 - movne r7, #0x1 -_020D76A4: - ldr r0, _020D7754 ; =0x02106A50 - cmp r7, #0x0 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x60] - bic r0, r0, #0x7000000 - orr r0, r0, #0xa1000000 - str r0, [r10, #0x4] - beq _020D7738 - bl OS_DisableInterrupts - mov r5, r0 - mov r0, r9 - mov r1, r8 - bl IC_InvalidateRange -_020D76D8: - .byte 0x00, 0x00, 0x54, 0xE3, 0x07, 0x00, 0x00, 0x0A - .byte 0x04, 0x90, 0x49, 0xE0, 0x09, 0x00, 0xA0, 0xE1, 0x20, 0x10, 0xA0, 0xE3, 0x93, 0xD2, 0xFF, 0xEB - .byte 0x08, 0x00, 0x89, 0xE0, 0x20, 0x10, 0xA0, 0xE3, 0x90, 0xD2, 0xFF, 0xEB, 0x20, 0x80, 0x88, 0xE2 - .byte 0x09, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0xA0, 0xE1, 0x85, 0xD2, 0xFF, 0xEB, 0x9B, 0xD2, 0xFF, 0xEB - .byte 0x40, 0x10, 0x9F, 0xE5, 0x02, 0x07, 0xA0, 0xE3, 0x33, 0xCA, 0xFF, 0xEB, 0x02, 0x07, 0xA0, 0xE3 - .byte 0xAE, 0xC9, 0xFF, 0xEB, 0x02, 0x07, 0xA0, 0xE3, 0xCB, 0xC9, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1 - .byte 0xFB, 0xD6, 0xFF, 0xEB, 0x40, 0x00, 0x00, 0xEB -_020D7738: - mov r0, r7 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020D7748: .word 0x021D55C0 -_020D774C: .word 0x01FF8000 -_020D7750: .word 0x000001FF -_020D7754: .word 0x02106A50 -_020D7758: - .byte 0x5C, 0x77, 0x0D, 0x02 - - arm_func_start CARDi_OnReadCard -CARDi_OnReadCard: ; 0x020D775C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r0, _020D7838 ; =0x021D55C0 - ldr r0, [r0, #0x28] - bl MI_StopDma - ldr r0, _020D7838 ; =0x021D55C0 - ldr r3, [r0, #0x1c] - ldr r2, [r0, #0x20] - ldr r1, [r0, #0x24] - add r3, r3, #0x200 - add r2, r2, #0x200 - subs r1, r1, #0x200 - str r3, [r0, #0x1c] - str r2, [r0, #0x20] - str r1, [r0, #0x24] - bne _020D7828 - mov r0, #0x80000 - bl OS_DisableIrqMask - mov r0, #0x80000 - bl OS_ResetRequestIrqMask - ldr r7, _020D7838 ; =0x021D55C0 - bl CARDi_ReadRomIDCore - bl CARDi_CheckPulledOutCore -_020D77B8: - .byte 0x00, 0x00, 0x97, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x10, 0x80, 0xE5, 0x38, 0x60, 0x97, 0xE5, 0x3C, 0x50, 0x97, 0xE5, 0xCF, 0xD6, 0xFF, 0xEB - .byte 0x14, 0x11, 0x97, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x4C, 0x00, 0xC1, 0xE3, 0x14, 0x01, 0x87, 0xE5 - .byte 0x43, 0x0F, 0x87, 0xE2, 0x9E, 0xCE, 0xFF, 0xEB, 0x14, 0x01, 0x97, 0xE5, 0x10, 0x00, 0x10, 0xE2 - .byte 0x01, 0x00, 0x00, 0x0A, 0x44, 0x00, 0x87, 0xE2, 0x8C, 0xCE, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1 - .byte 0xC7, 0xD6, 0xFF, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x05, 0x00, 0xA0, 0xE1, 0x36, 0xFF, 0x2F, 0xE1, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D7828: - bl CARDi_SetCardDma - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - .balign 4 -_020D7838: .word 0x021D55C0 - - arm_func_start CARDi_SetCardDma -CARDi_SetCardDma: ; 0x020D783C - stmdb sp!, {r4,lr} - ldr r4, _020D7884 ; =0x021D55C0 - ldr r1, _020D7888 ; =0x04100010 - ldr r0, [r4, #0x28] - ldr r2, [r4, #0x20] - mov r3, #0x200 - bl MIi_CardDmaCopy32 - ldr r1, [r4, #0x1c] - mov r0, r1, lsr #0x8 - orr r0, r0, #0xb7000000 - mov r1, r1, lsl #0x18 - bl CARDi_SetRomOp - ldr r0, _020D788C ; =0x021D5C00 - ldr r1, _020D7890 ; =0x040001A4 - ldr r0, [r0, #0x4] - str r0, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D7884: .word 0x021D55C0 -_020D7888: .word 0x04100010 -_020D788C: .word 0x021D5C00 -_020D7890: .word 0x040001A4 - - arm_func_start CARDi_SetRomOp -CARDi_SetRomOp: ; 0x020D7894 - ldr r3, _020D790C ; =0x040001A4 -_020D7898: - ldr r2, [r3, #0x0] - ands r2, r2, #0x80000000 - bne _020D7898 - ldr r3, _020D7910 ; =0x040001A1 - mov r12, #0xc0 - ldr r2, _020D7914 ; =0x040001A8 - strb r12, [r3, #0x0] - mov r12, r0, lsr #0x18 - ldr r3, _020D7918 ; =0x040001A9 - strb r12, [r2, #0x0] - mov r12, r0, lsr #0x10 - ldr r2, _020D791C ; =0x040001AA - strb r12, [r3, #0x0] - mov r12, r0, lsr #0x8 - ldr r3, _020D7920 ; =0x040001AB - strb r12, [r2, #0x0] - ldr r2, _020D7924 ; =0x040001AC - strb r0, [r3, #0x0] - mov r3, r1, lsr #0x18 - ldr r0, _020D7928 ; =0x040001AD - strb r3, [r2, #0x0] - mov r3, r1, lsr #0x10 - ldr r2, _020D792C ; =0x040001AE - strb r3, [r0, #0x0] - mov r3, r1, lsr #0x8 - ldr r0, _020D7930 ; =0x040001AF - strb r3, [r2, #0x0] - strb r1, [r0, #0x0] - bx lr - .balign 4 -_020D790C: .word 0x040001A4 -_020D7910: .word 0x040001A1 -_020D7914: .word 0x040001A8 -_020D7918: .word 0x040001A9 -_020D791C: .word 0x040001AA -_020D7920: .word 0x040001AB -_020D7924: .word 0x040001AC -_020D7928: .word 0x040001AD -_020D792C: .word 0x040001AE -_020D7930: .word 0x040001AF - - arm_func_start CARDi_ReadFromCache -CARDi_ReadFromCache: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r5, _020D79C8 ; =0x021D55C0 - mov r1, #0x200 - ldr r3, [r5, #0x1c] - rsb r1, r1, #0x0 - ldr r2, [r0, #0x8] - and r3, r3, r1 - cmp r3, r2 - bne _020D79AC - ldr r2, [r5, #0x1c] - ldr r1, [r5, #0x24] - sub r3, r2, r3 - rsb r4, r3, #0x200 - cmp r4, r1 - movhi r4, r1 - add r0, r0, #0x20 - ldr r1, [r5, #0x20] - mov r2, r4 - add r0, r0, r3 - bl MI_CpuCopy8 - ldr r0, [r5, #0x1c] - add r0, r0, r4 - str r0, [r5, #0x1c] - ldr r0, [r5, #0x20] - add r0, r0, r4 - str r0, [r5, #0x20] - ldr r0, [r5, #0x24] - sub r0, r0, r4 - str r0, [r5, #0x24] -_020D79AC: - ldr r0, [r5, #0x24] - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D79C8: .word 0x021D55C0 - - arm_func_start CARDi_Request -CARDi_Request: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r6, r0 - ldr r0, [r6, #0x114] - mov r5, r1 - mov r4, r2 - ands r0, r0, #0x2 - bne _020D7A44 - ldr r1, [r6, #0x114] - mov r0, #0xb - orr r2, r1, #0x2 - mov r1, #0x1 - str r2, [r6, #0x114] - bl PXI_IsCallbackReady -_020D7A04: - .byte 0x00, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x1A, 0x64, 0x90, 0xA0, 0xE3 - .byte 0x0B, 0x80, 0xA0, 0xE3, 0x01, 0x70, 0xA0, 0xE3, 0x09, 0x00, 0xA0, 0xE1, 0x57, 0xD6, 0xFF, 0xEB - .byte 0x08, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0xD9, 0xE0, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0xF8, 0xFF, 0xFF, 0x0A, 0x06, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3 - .byte 0xE1, 0xFF, 0xFF, 0xEB -_020D7A44: - ldr r0, [r6, #0x0] - mov r1, #0x60 - bl DC_FlushRange - bl DC_WaitWriteBufferEmpty - mov r9, #0xb - mov r8, #0x1 - mov r7, #0x0 - mov r11, #0x60 - str r5, [r6, #0x4] - ldr r0, [r6, #0x114] - orr r0, r0, #0x20 - str r0, [r6, #0x114] - mov r0, r9 - mov r1, r5 - mov r2, r8 - bl PXI_SendWordByFifo -_020D7A84: - .byte 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0xBA, 0x00, 0x00, 0x55, 0xE3 - .byte 0x06, 0x00, 0x00, 0x1A, 0x00, 0xA0, 0x96, 0xE5, 0x09, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 - .byte 0x08, 0x20, 0xA0, 0xE1, 0x8D, 0xE0, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0xBA - .byte 0x16, 0xD6, 0xFF, 0xEB, 0x14, 0x11, 0x96, 0xE5, 0x00, 0xA0, 0xA0, 0xE1, 0x20, 0x00, 0x11, 0xE2 - .byte 0x04, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xA0, 0xE1, 0x05, 0xCE, 0xFF, 0xEB, 0x14, 0x01, 0x96, 0xE5 - .byte 0x20, 0x00, 0x10, 0xE2, 0xFA, 0xFF, 0xFF, 0x1A, 0x0A, 0x00, 0xA0, 0xE1, 0x10, 0xD6, 0xFF, 0xEB - .byte 0x00, 0x00, 0x96, 0xE5, 0x0B, 0x10, 0xA0, 0xE1, 0x8D, 0xD1, 0xFF, 0xEB, 0x00, 0x00, 0x96, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0x04, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x01, 0x40, 0x44, 0xE2 - .byte 0x00, 0x00, 0x54, 0xE3, 0xD6, 0xFF, 0xFF, 0xCA, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 - .byte 0x00, 0x00, 0xA0, 0x13, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CARDi_TaskThread -CARDi_TaskThread: ; 0x020D7B20 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r5, _020D7B78 ; =0x021D55C0 - mov r6, #0x0 - add r7, r5, #0x44 -_020D7B34: - bl OS_DisableInterrupts - ldr r1, [r5, #0x114] - mov r4, r0 - ands r0, r1, #0x8 - bne _020D7B60 -_020D7B48: - mov r0, r6 - str r7, [r5, #0x104] - bl OS_SleepThread - ldr r0, [r5, #0x114] - ands r0, r0, #0x8 - beq _020D7B48 -_020D7B60: - mov r0, r4 - bl OS_RestoreInterrupts - ldr r1, [r5, #0x40] - mov r0, r5 - blx r1 - b _020D7B34 - .balign 4 -_020D7B78: .word 0x021D55C0 - - arm_func_start CARDi_OnFifoRecv -CARDi_OnFifoRecv: ; 0x020D7B7C - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0xb - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - cmp r2, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - ldr r1, _020D7BC8 ; =0x021D55C0 - ldr r0, [r1, #0x114] - bic r0, r0, #0x20 - str r0, [r1, #0x114] - ldr r0, [r1, #0x104] - bl OS_WakeupThreadDirect - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D7BC8: .word 0x021D55C0 - - arm_func_start CARDi_SendtoPxi -CARDi_SendtoPxi: ; 0x020D7BCC - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r1, r7 - mov r0, #0xe - mov r2, #0x0 - bl PXI_SendWordByFifo -_020D7BEC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x02, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x0E, 0x50, 0xA0, 0xE3 - .byte 0x00, 0x40, 0xA0, 0xE3, 0x06, 0x00, 0xA0, 0xE1, 0x78, 0xA2, 0xFC, 0xFB, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x07, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x30, 0xE0, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0xF7, 0xFF, 0xFF, 0x1A, 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start CARDi_CheckPulledOutCore -CARDi_CheckPulledOutCore: - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - ldr r1, _020D7C94 ; =0x027FFC10 - ldrh r1, [r1, #0x0] - cmp r1, #0x0 - ldreq r1, _020D7C98 ; =0x027FF800 - ldrne r1, _020D7C9C ; =0x027FFC00 - ldr r1, [r1, #0x0] - str r1, [sp, #0x0] - ldr r1, [sp, #0x0] - cmp r0, r1 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4,lr} - bxeq lr - bl OS_DisableInterrupts - mov r4, r0 - mov r0, #0xe - mov r1, #0x11 - mov r2, #0x0 - bl CARDi_PulledOutCallback - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x8 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D7C94: .word 0x027FFC10 -_020D7C98: .word 0x027FF800 -_020D7C9C: .word 0x027FFC00 - - arm_func_start CARD_TerminateForPulledOut -CARD_TerminateForPulledOut: ; 0x020D7CA0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020D7D10 ; =0x027FFFA8 - mov r5, #0x1 - ldrh r0, [r0, #0x0] - and r0, r0, #0x8000 - movs r0, r0, asr #0xf - beq _020D7CEC - bl PM_ForceToPowerOff - cmp r0, #0x4 - bne _020D7CE4 - ldr r4, _020D7D14 ; =0x000A3A47 -_020D7CD0: - mov r0, r4 - bl OS_SpinWait - bl PM_ForceToPowerOff - cmp r0, #0x4 - beq _020D7CD0 -_020D7CE4: - cmp r0, #0x0 - moveq r5, #0x0 -_020D7CEC: - cmp r5, #0x0 - beq _020D7D00 - mov r0, #0x1 - mov r1, r0 - bl CARDi_SendtoPxi -_020D7D00: - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D7D10: .word 0x027FFFA8 -_020D7D14: .word 0x000A3A47 - - arm_func_start CARD_IsPulledOut -CARD_IsPulledOut: ; 0x020D7D18 - ldr r0, _020D7D24 ; =0x021D5E20 - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020D7D24: .word 0x021D5E20 - - arm_func_start CARDi_PulledOutCallback -CARDi_PulledOutCallback: ; 0x020D7D28 - stmdb sp!, {lr} - sub sp, sp, #0x4 - and r0, r1, #0x3f - cmp r0, #0x11 - bne _020D7D90 - ldr r2, _020D7DA0 ; =0x021D5E20 - ldr r0, [r2, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {lr} - bxne lr - ldr r1, _020D7DA4 ; =0x021D5E24 - mov r0, #0x1 - ldr r1, [r1, #0x0] - str r0, [r2, #0x0] - cmp r1, #0x0 - beq _020D7D70 - blx r1 -_020D7D70: - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {lr} - bxeq lr - bl CARD_TerminateForPulledOut - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr -_020D7D90: - bl OS_Terminate - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D7DA0: .word 0x021D5E20 -_020D7DA4: .word 0x021D5E24 - - arm_func_start CARD_InitPulledOutCallback -CARD_InitPulledOutCallback: ; 0x020D7DA8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl PXI_Init - ldr r1, _020D7DD8 ; =CARDi_PulledOutCallback - mov r0, #0xe - bl PXI_SetFifoRecvCallback - ldr r0, _020D7DDC ; =0x021D5E24 - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D7DD8: .word CARDi_PulledOutCallback -_020D7DDC: .word 0x021D5E24 - - arm_func_start WMi_GetMPReadyAIDs -WMi_GetMPReadyAIDs: ; 0x020D7DE0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl OS_DisableInterrupts - ldr r1, _020D7E30 ; =0x021D5E2C - mov r4, r0 - ldr r0, [r1, #0x0] - cmp r0, #0x0 - moveq r5, #0x0 - beq _020D7E18 - ldr r5, [r0, #0x4] - mov r1, #0x2 - add r0, r5, #0x86 - bl DC_InvalidateRange - ldrh r5, [r5, #0x86] -_020D7E18: - mov r0, r4 - bl OS_RestoreInterrupts - mov r0, r5 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020D7E30: .word 0x021D5E2C - - arm_func_start WM_GetConnectedAIDs -WM_GetConnectedAIDs: ; 0x020D7E34 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020D7E64 ; =0x021D5E2C - ldr r1, [r1, #0x0] - cmp r1, #0x0 - ldrne r4, [r1, #0x14c] - moveq r4, #0x0 - bl OS_RestoreInterrupts - mov r0, r4, lsl #0x10 - mov r0, r0, lsr #0x10 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D7E64: .word 0x021D5E2C - - arm_func_start WM_GetAID -WM_GetAID: ; 0x020D7E68 - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - ldr r1, _020D7E98 ; =0x021D5E2C - ldr r1, [r1, #0x0] - cmp r1, #0x0 - addne r1, r1, #0x100 - ldrneh r4, [r1, #0x50] - moveq r4, #0x0 - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4,lr} - bx lr - .balign 4 -_020D7E98: .word 0x021D5E2C - - arm_func_start WMi_GetStatusAddress -WMi_GetStatusAddress: ; 0x020D7E9C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl WMi_CheckInitialized -_020D7EA8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13 - .byte 0x10, 0x00, 0x9F, 0x05, 0x00, 0x00, 0x90, 0x05, 0x04, 0x00, 0x90, 0x05, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x2C, 0x5E, 0x1D, 0x02 - - arm_func_start WmClearFifoRecvFlag -WmClearFifoRecvFlag: ; 0x020D7ECC - ldr r1, _020D7EE4 ; =0x027FFF96 - ldrh r0, [r1, #0x0] - ands r2, r0, #0x1 - bicne r0, r0, #0x1 - strneh r0, [r1, #0x0] - bx lr - .balign 4 -_020D7EE4: .word 0x027FFF96 - - arm_func_start WmReceiveFifo -WmReceiveFifo: ; 0x020D7EE8 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - ldr r0, _020D82B0 ; =0x021D5E2C - cmp r2, #0x0 - ldr r8, [r0, #0x0] - mov r10, r1 - addne sp, sp, #0xc - ldmneia sp!, {r4-r11,lr} - bxne lr - ldr r0, [r8, #0x10] - mov r1, #0x100 - bl DC_InvalidateRange - ldrh r0, [r8, #0x16] - cmp r0, #0x0 - bne _020D7F30 - ldr r0, [r8, #0x4] - mov r1, #0x800 - bl DC_InvalidateRange -_020D7F30: - ldr r0, [r8, #0x10] - cmp r10, r0 - beq _020D7F48 - mov r0, r10 - mov r1, #0x100 - bl DC_InvalidateRange -_020D7F48: - ldrh r0, [r10, #0x0] - cmp r0, #0x2c - blo _020D8000 - cmp r0, #0x80 - bne _020D7F84 - ldrh r0, [r10, #0x2] - cmp r0, #0x13 - bne _020D7F6C - bl OS_Terminate -_020D7F6C: - ldr r1, [r8, #0xc8] - cmp r1, #0x0 - beq _020D8268 - mov r0, r10 - blx r1 - b _020D8268 -_020D7F84: - cmp r0, #0x82 - bne _020D7FD8 - ldrh r0, [r10, #0x6] - add r1, r8, r0, lsl #0x2 - ldr r0, [r1, #0xcc] - cmp r0, #0x0 - beq _020D8268 - ldr r0, [r1, #0x10c] - str r0, [r10, #0x1c] - ldr r0, [r8, #0x14c] - strh r0, [r10, #0x22] - ldr r1, [r8, #0x4] - ldr r0, [r10, #0x8] - ldrh r1, [r1, #0x72] - bl DC_InvalidateRange - ldrh r1, [r10, #0x6] - mov r0, r10 - add r1, r8, r1, lsl #0x2 - ldr r1, [r1, #0xcc] - blx r1 - b _020D8268 -_020D7FD8: - cmp r0, #0x81 - bne _020D8268 - mov r0, #0xf - strh r0, [r10, #0x0] - ldr r1, [r10, #0x1c] - cmp r1, #0x0 - beq _020D8268 - mov r0, r10 - blx r1 - b _020D8268 -_020D8000: - cmp r0, #0xe - bne _020D8040 - ldrh r1, [r10, #0x4] - ldr r0, _020D82B4 ; =0x0000FFF5 - add r0, r1, r0 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #0x1 - bhi _020D8040 - ldrh r0, [r10, #0x2] - cmp r0, #0x0 - bne _020D8040 - ldr r1, [r8, #0x4] - ldr r0, [r10, #0x8] - ldrh r1, [r1, #0x72] - bl DC_InvalidateRange -_020D8040: - ldrh r1, [r10, #0x0] - cmp r1, #0x2 - bne _020D8088 - ldrh r0, [r10, #0x2] - cmp r0, #0x0 - bne _020D8088 - add r0, r8, r1, lsl #0x2 - ldr r4, [r0, #0x18] - bl WM_Finish -_020D8064: - .byte 0x00, 0x00, 0x54, 0xE3, 0x0C, 0xD0, 0x8D, 0x02, 0xF0, 0x4F, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x0A, 0x00, 0xA0, 0xE1, 0x34, 0xFF, 0x2F, 0xE1, 0x0C, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D8088: - add r0, r8, r1, lsl #0x2 - ldr r1, [r0, #0x18] - cmp r1, #0x0 - beq _020D80B8 - mov r0, r10 - blx r1 - ldr r0, _020D82B8 ; =0x021D5E28 - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4-r11,lr} - bxeq lr -_020D80B8: - ldrh r0, [r10, #0x0] - cmp r0, #0x8 - beq _020D80CC - cmp r0, #0xc - bne _020D8268 -_020D80CC: - cmp r0, #0x8 - bne _020D8100 - add r0, r10, #0xa - str r0, [sp, #0x0] - ldrh r0, [r10, #0x2c] - add r11, r10, #0x14 - ldrh r7, [r10, #0x8] - ldrh r6, [r10, #0x10] - ldrh r4, [r10, #0x12] - str r0, [sp, #0x4] - ldrh r9, [r10, #0x2e] - mov r5, #0x0 - b _020D8130 -_020D8100: - cmp r0, #0xc - bne _020D8130 - ldrh r0, [r10, #0x16] - mov r6, #0x0 - ldrh r7, [r10, #0x8] - str r0, [sp, #0x4] - add r0, r10, #0x10 - ldrh r5, [r10, #0xa] - ldrh r4, [r10, #0xc] - ldrh r9, [r10, #0x18] - mov r11, r6 - str r0, [sp, #0x0] -_020D8130: - cmp r7, #0x7 - beq _020D8148 - cmp r7, #0x9 - beq _020D8148 - cmp r7, #0x1a - bne _020D8268 -_020D8148: - cmp r7, #0x7 - ldreq r1, [r8, #0x14c] - moveq r0, #0x1 - orreq r0, r1, r0, lsl r6 - streq r0, [r8, #0x14c] - movne r0, #0x1 - mvnne r0, r0, lsl r6 - ldrne r1, [r8, #0x14c] - add r3, r8, #0x100 - andne r0, r1, r0 - strne r0, [r8, #0x14c] - ldr r0, _020D82BC ; =0x021D5E78 - mov r1, #0x0 - mov r2, #0x44 - strh r5, [r3, #0x50] - bl MI_CpuFill8 - ldr r3, _020D82BC ; =0x021D5E78 - mov r1, #0x0 - mov r2, #0x82 - strh r2, [r3, #0x0] - strh r7, [r3, #0x4] - strh r6, [r3, #0x12] - strh r5, [r3, #0x20] - strh r1, [r3, #0x2] - str r1, [r3, #0x8] - str r1, [r3, #0xc] - strh r1, [r3, #0x10] - ldr r1, [r8, #0x14c] - ldr r2, _020D82C0 ; =0x0000FFFF - strh r1, [r3, #0x22] - strh r2, [r3, #0x1a] - ldr r0, [sp, #0x0] - ldr r1, _020D82C4 ; =0x021D5E8C - mov r2, #0x6 - strh r4, [r3, #0x3c] - bl MI_CpuCopy8 -_020D81D8: - .byte 0x00, 0x00, 0x5B, 0xE3, 0x04, 0x00, 0x00, 0x0A - .byte 0xE0, 0x10, 0x9F, 0xE5, 0x0B, 0x00, 0xA0, 0xE1, 0x18, 0x20, 0xA0, 0xE3, 0xFB, 0xD7, 0xFF, 0xEB - .byte 0x03, 0x00, 0x00, 0xEA, 0xCC, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x18, 0x20, 0xA0, 0xE3 - .byte 0xF0, 0xD7, 0xFF, 0xEB, 0x00, 0x00, 0x55, 0xE3, 0x04, 0x10, 0x9D, 0x05, 0xA8, 0x00, 0x9F, 0xE5 - .byte 0x09, 0x10, 0xA0, 0x11, 0x00, 0x00, 0x55, 0xE3, 0x04, 0x90, 0x9D, 0x15, 0x98, 0x50, 0x9F, 0xE5 - .byte 0xB0, 0x14, 0xC0, 0xE1, 0x00, 0x40, 0xA0, 0xE3, 0xB2, 0x94, 0xC5, 0xE1, 0xB6, 0x40, 0xC5, 0xE1 - .byte 0x04, 0x21, 0x88, 0xE0, 0xCC, 0x00, 0x92, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A - .byte 0x0C, 0x11, 0x92, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x1C, 0x10, 0x85, 0xE5, 0xCC, 0x10, 0x92, 0xE5 - .byte 0x31, 0xFF, 0x2F, 0xE1, 0x01, 0x00, 0x84, 0xE2, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x48, 0xA0, 0xE1 - .byte 0x10, 0x00, 0x54, 0xE3, 0xF0, 0xFF, 0xFF, 0x3A -_020D8268: - ldr r0, [r8, #0x10] - mov r1, #0x100 - bl DC_InvalidateRange - bl WmClearFifoRecvFlag - ldr r0, [r8, #0x10] - cmp r10, r0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4-r11,lr} - bxeq lr - ldrh r2, [r10, #0x0] - mov r0, r10 - mov r1, #0x100 - orr r2, r2, #0x8000 - strh r2, [r10, #0x0] - bl DC_StoreRange - add sp, sp, #0xc - ldmia sp!, {r4-r11,lr} - bx lr - .balign 4 -_020D82B0: .word 0x021D5E2C -_020D82B4: .word 0x0000FFF5 -_020D82B8: .word 0x021D5E28 -_020D82BC: .word 0x021D5E78 -_020D82C0: .word 0x0000FFFF -_020D82C4: .word 0x021D5E8C -_020D82C8: - .byte 0x9C, 0x5E, 0x1D, 0x02 - - arm_func_start WMi_CheckStateEx -WMi_CheckStateEx: - stmdb sp!, {r0-r3} - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl WMi_CheckInitialized -_020D82DC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x10, 0xD0, 0x8D, 0x12, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x78, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x90, 0xE5, 0x04, 0x00, 0x90, 0xE5 - .byte 0x87, 0xCF, 0xFF, 0xEB, 0x64, 0x00, 0x9F, 0xE5, 0x08, 0x10, 0x8D, 0xE2, 0x00, 0x20, 0x90, 0xE5 - .byte 0x08, 0x00, 0x9D, 0xE5, 0x04, 0x20, 0x92, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x10, 0xC1, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x02, 0x04, 0xC0, 0x81, 0xE2, 0xB0, 0x30, 0xD2, 0xE1, 0x03, 0x00, 0xA0, 0xE3 - .byte 0x00, 0x40, 0xBD, 0x08, 0x10, 0xD0, 0x8D, 0x02, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x20, 0xA0, 0xE3 - .byte 0x04, 0xC0, 0x8C, 0xE2, 0x04, 0x10, 0x1C, 0xE5, 0x03, 0x00, 0x51, 0xE1, 0x08, 0x10, 0x9D, 0xE5 - .byte 0x02, 0x00, 0xA0, 0x01, 0x01, 0x10, 0x51, 0xE2, 0x08, 0x10, 0x8D, 0xE5, 0xF7, 0xFF, 0xFF, 0x1A - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x10, 0xD0, 0x8D, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x2C, 0x5E, 0x1D, 0x02 - - arm_func_start WMi_CheckIdle -WMi_CheckIdle: - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl WMi_CheckInitialized -_020D8380: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x34, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x90, 0xE5, 0x04, 0x00, 0x90, 0xE5 - .byte 0x5F, 0xCF, 0xFF, 0xEB, 0x20, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x04, 0x00, 0x90, 0xE5 - .byte 0xB0, 0x00, 0xD0, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x03, 0x00, 0xA0, 0x93, 0x00, 0x00, 0xA0, 0x83 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x2C, 0x5E, 0x1D, 0x02 - - arm_func_start WMi_CheckInitialized -WMi_CheckInitialized: - ldr r0, _020D83E8 ; =0x021D5E28 - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - movne r0, #0x0 - moveq r0, #0x3 - bx lr - .balign 4 -_020D83E8: .word 0x021D5E28 - - arm_func_start WMi_GetSystemWork -WMi_GetSystemWork: ; 0x020D83EC - ldr r0, _020D83F8 ; =0x021D5E2C - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020D83F8: .word 0x021D5E2C - - arm_func_start WMi_SendCommandDirect -WMi_SendCommandDirect: ; 0x020D83FC - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r4, r1 - bl WmGetCommandBuffer4Arm7 - movs r5, r0 - moveq r0, #0x8 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl MI_CpuCopy8 - mov r0, r5 - mov r1, r4 - bl DC_StoreRange - mov r1, r5 - mov r0, #0xa - mov r2, #0x0 - bl PXI_SendWordByFifo - mov r4, r0 - ldr r0, _020D8470 ; =0x021D5E30 - mov r1, r5 - mov r2, #0x1 - bl OS_SendMessage -_020D845C: - .byte 0x00, 0x00, 0x54, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xB3, 0x02, 0x00, 0xA0, 0xA3, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D8470: .word 0x021D5E30 - - arm_func_start WMi_SendCommand -WMi_SendCommand: ; 0x020D8474 - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r0 - bl WmGetCommandBuffer4Arm7 - movs r5, r0 - addeq sp, sp, #0x4 - moveq r0, #0x8 - ldmeqia sp!, {r4-r5,lr} - addeq sp, sp, #0x10 - bxeq lr - strh r4, [r5, #0x0] - ldrh r2, [sp, #0x14] - add r0, sp, #0x14 - bic r0, r0, #0x3 - mov r3, #0x0 - cmp r2, #0x0 - add r4, r0, #0x4 - ble _020D84DC -_020D84C0: - add r4, r4, #0x4 - ldr r1, [r4, #-0x4] - add r0, r5, r3, lsl #0x2 - add r3, r3, #0x1 - str r1, [r0, #0x4] - cmp r3, r2 - blt _020D84C0 -_020D84DC: - mov r0, r5 - mov r1, #0x100 - bl DC_StoreRange - mov r1, r5 - mov r0, #0xa - mov r2, #0x0 - bl PXI_SendWordByFifo - mov r4, r0 - ldr r0, _020D8528 ; =0x021D5E30 - mov r1, r5 - mov r2, #0x1 - bl OS_SendMessage -_020D850C: - .byte 0x00, 0x00, 0x54, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xB3, 0x02, 0x00, 0xA0, 0xA3, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x10, 0xD0, 0x8D, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1 -_020D8528: .word 0x021D5E30 - - arm_func_start WmGetCommandBuffer4Arm7 -WmGetCommandBuffer4Arm7: ; 0x020D852C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020D859C ; =0x021D5E30 - add r1, sp, #0x0 - mov r2, #0x0 - bl OS_ReceiveMessage -_020D8544: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03 - .byte 0x00, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x9D, 0xE5, 0x02, 0x10, 0xA0, 0xE3 - .byte 0xEF, 0xCE, 0xFF, 0xEB, 0x00, 0x10, 0x9D, 0xE5, 0xB0, 0x00, 0xD1, 0xE1, 0x02, 0x09, 0x10, 0xE2 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x01, 0x00, 0xA0, 0x11, 0x00, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x14, 0x00, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0xB5, 0xCD, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D859C: .word 0x021D5E30 - - arm_func_start WMi_SetCallbackTable -WMi_SetCallbackTable: ; 0x020D85A0 - ldr r2, _020D85B4 ; =0x021D5E2C - ldr r2, [r2, #0x0] - add r0, r2, r0, lsl #0x2 - str r1, [r0, #0x18] - bx lr - .balign 4 -_020D85B4: .word 0x021D5E2C - - arm_func_start WM_Finish -WM_Finish: - stmdb sp!, {r4,lr} - bl OS_DisableInterrupts - mov r4, r0 - bl WMi_CheckInitialized -_020D85C8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A - .byte 0x04, 0x00, 0xA0, 0xE1, 0x52, 0xD3, 0xFF, 0xEB, 0x03, 0x00, 0xA0, 0xE3, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x36, 0xFF, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x32, 0xFE, 0xFF, 0xEB - .byte 0x0A, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0xEB, 0xDD, 0xFF, 0xEB, 0x20, 0x20, 0x9F, 0xE5 - .byte 0x00, 0x30, 0xA0, 0xE3, 0x1C, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0xA0, 0xE1, 0x00, 0x30, 0x82, 0xE5 - .byte 0xB0, 0x30, 0xC1, 0xE1, 0x3E, 0xD3, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x2C, 0x5E, 0x1D, 0x02, 0x28, 0x5E, 0x1D, 0x02 - - arm_func_start WmInitCore -WmInitCore: - stmdb sp!, {r4-r10,lr} - mov r6, r0 - mov r5, r1 - mov r7, r2 - bl OS_DisableInterrupts - ldr r1, _020D881C ; =0x021D5E28 - mov r4, r0 - ldrh r1, [r1, #0x0] - cmp r1, #0x0 - beq _020D8674 - bl OS_RestoreInterrupts - mov r0, #0x3 - ldmia sp!, {r4-r10,lr} - bx lr -_020D8674: - cmp r6, #0x0 - bne _020D868C - bl OS_RestoreInterrupts - mov r0, #0x6 - ldmia sp!, {r4-r10,lr} - bx lr -_020D868C: - cmp r5, #0x3 - bls _020D86A4 - bl OS_RestoreInterrupts - mov r0, #0x6 - ldmia sp!, {r4-r10,lr} - bx lr -_020D86A4: - ands r1, r6, #0x1f - beq _020D86BC - bl OS_RestoreInterrupts - mov r0, #0x6 - ldmia sp!, {r4-r10,lr} - bx lr -_020D86BC: - bl PXI_Init - mov r0, #0xa - mov r1, #0x1 - bl PXI_IsCallbackReady -_020D86CC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0x00, 0x1A, 0x04, 0x00, 0xA0, 0xE1, 0x11, 0xD3, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE3 - .byte 0xF0, 0x47, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x06, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1 - .byte 0x8B, 0xCE, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x07, 0x30, 0xA0, 0xE1 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x7D, 0xD5, 0xFF, 0xEB, 0x10, 0x01, 0x9F, 0xE5, 0x02, 0x1C, 0x86, 0xE2 - .byte 0x00, 0x60, 0x80, 0xE5, 0x00, 0x10, 0x86, 0xE5, 0x00, 0x20, 0x90, 0xE5, 0x00, 0x10, 0x92, 0xE5 - .byte 0x03, 0x1C, 0x81, 0xE2, 0x04, 0x10, 0x82, 0xE5, 0x00, 0x20, 0x90, 0xE5, 0x04, 0x10, 0x92, 0xE5 - .byte 0x02, 0x1B, 0x81, 0xE2, 0x0C, 0x10, 0x82, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x0C, 0x00, 0x91, 0xE5 - .byte 0x01, 0x0C, 0x80, 0xE2, 0x10, 0x00, 0x81, 0xE5, 0xDF, 0xFD, 0xFF, 0xEB, 0xCC, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x30, 0xA0, 0xE3, 0x00, 0x00, 0x91, 0xE5, 0xB4, 0x51, 0xC0, 0xE1, 0x00, 0x00, 0x91, 0xE5 - .byte 0x4C, 0x31, 0x80, 0xE5, 0x00, 0x00, 0x91, 0xE5, 0x01, 0x0C, 0x80, 0xE2, 0xB0, 0x35, 0xC0, 0xE1 - .byte 0x03, 0x20, 0xA0, 0xE1, 0x00, 0x00, 0x91, 0xE5, 0x03, 0x01, 0x80, 0xE0, 0xCC, 0x20, 0x80, 0xE5 - .byte 0x00, 0x00, 0x91, 0xE5, 0x03, 0x01, 0x80, 0xE0, 0x01, 0x30, 0x83, 0xE2, 0x0C, 0x21, 0x80, 0xE5 - .byte 0x10, 0x00, 0x53, 0xE3, 0xF6, 0xFF, 0xFF, 0xBA, 0x84, 0x00, 0x9F, 0xE5, 0x84, 0x10, 0x9F, 0xE5 - .byte 0x0A, 0x20, 0xA0, 0xE3, 0xB0, 0xCD, 0xFF, 0xEB, 0x7C, 0x90, 0x9F, 0xE5, 0x00, 0xA0, 0xA0, 0xE3 - .byte 0x6C, 0x60, 0x9F, 0xE5, 0x02, 0x89, 0xA0, 0xE3, 0x02, 0x70, 0xA0, 0xE3, 0x01, 0x50, 0xA0, 0xE3 - .byte 0x09, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0xB0, 0x80, 0xC9, 0xE1, 0x5B, 0xCE, 0xFF, 0xEB - .byte 0x06, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x78, 0xCD, 0xFF, 0xEB - .byte 0x01, 0xA0, 0x8A, 0xE2, 0x0A, 0x00, 0x5A, 0xE3, 0x01, 0x9C, 0x89, 0xE2, 0xF3, 0xFF, 0xFF, 0xBA - .byte 0x38, 0x10, 0x9F, 0xE5, 0x0A, 0x00, 0xA0, 0xE3, 0x6F, 0xDD, 0xFF, 0xEB, 0x18, 0x10, 0x9F, 0xE5 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x04, 0x00, 0xA0, 0xE1, 0xB0, 0x20, 0xC1, 0xE1, 0xC4, 0xD2, 0xFF, 0xEB - .byte 0x00, 0x00, 0xA0, 0xE3, 0xF0, 0x47, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D881C: .word 0x021D5E28 -_020D8820: - .byte 0x2C, 0x5E, 0x1D, 0x02, 0x30, 0x5E, 0x1D, 0x02, 0x50, 0x5E, 0x1D, 0x02, 0xC0, 0x5E, 0x1D, 0x02 - .byte 0xE8, 0x7E, 0x0D, 0x02 - - arm_func_start WM_Init -WM_Init: - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, #0xf00 - bl WmInitCore -_020D8844: - .byte 0x00, 0x00, 0x50, 0xE3, 0x14, 0x10, 0x9F, 0x05, 0x00, 0x20, 0xA0, 0x03 - .byte 0x00, 0x10, 0x91, 0x05, 0xB6, 0x21, 0xC1, 0x01, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x2C, 0x5E, 0x1D, 0x02 - - arm_func_start WM_GetNextTgid -WM_GetNextTgid: ; 0x020D8868 - stmdb sp!, {lr} - sub sp, sp, #0xc - - arm_func_start FUN_020d8870 -FUN_020d8870: ; 0x020D8870 - ldr r0, _020D88DC ; =0x02106A54 - ldr r0, [r0, #0x0] - cmp r0, #0x10000 - bne _020D88B0 - bl RTC_Init -_020D8884: - .byte 0x00, 0x00, 0x8D, 0xE2, 0xD0, 0xF5, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0x00, 0x1A, 0x08, 0x20, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0x38, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x04, 0x82, 0xE0, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0x00, 0x00, 0x81, 0xE5 -_020D88B0: - ldr r1, _020D88DC ; =0x02106A54 - ldr r0, [r1, #0x0] - add r0, r0, #0x1 - mov r0, r0, lsl #0x10 - mov r2, r0, lsr #0x10 - mov r0, r2, lsl #0x10 - str r2, [r1, #0x0] - mov r0, r0, lsr #0x10 - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_020D88DC: .word 0x02106A54 - - arm_func_start WM_GetOtherElements -WM_GetOtherElements: ; 0x020D88E0 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x88 - ldrh r2, [r1, #0x3c] - mov lr, r0 - cmp r2, #0x0 - beq _020D892C - mov r0, #0x0 - add r5, sp, #0x0 - strb r0, [sp, #0x0] - mov r4, #0x8 -_020D8908: - ldmia r5!, {r0-r3} - stmia lr!, {r0-r3} - subs r4, r4, #0x1 - bne _020D8908 - ldr r0, [r5, #0x0] - add sp, sp, #0x88 - str r0, [lr, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr -_020D892C: - ldrh r0, [r1, #0x3e] - strb r0, [sp, #0x0] - ldrb r0, [sp, #0x0] - cmp r0, #0x0 - bne _020D896C - add r5, sp, #0x0 - mov r4, #0x8 -_020D8948: - ldmia r5!, {r0-r3} - stmia lr!, {r0-r3} - subs r4, r4, #0x1 - bne _020D8948 - ldr r0, [r5, #0x0] - add sp, sp, #0x88 - str r0, [lr, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr -_020D896C: - cmp r0, #0x10 - movhi r0, #0x10 - strhib r0, [sp, #0x0] - ldrh r2, [r1, #0x0] - ldrb r3, [sp, #0x0] - mov r0, #0x0 - mov r2, r2, lsl #0x1 - sub r4, r2, #0x40 - cmp r3, #0x0 - add r3, r1, #0x40 - mov r2, r0 - and r1, r4, #0xff - ble _020D8A20 - add r12, sp, #0x0 -_020D89A4: - ldrb r5, [r3, #0x0] - add r6, r12, r2, lsl #0x3 - add r4, r3, #0x2 - strb r5, [r6, #0x4] - ldrb r5, [r3, #0x1] - strb r5, [r6, #0x5] - str r4, [r6, #0x8] - ldrb r4, [r6, #0x5] - add r4, r4, #0x2 - and r5, r4, #0xff - add r0, r0, r5 - and r0, r0, #0xff - cmp r0, r1 - bls _020D8A0C - mov r0, #0x0 - strb r0, [sp, #0x0] - mov r4, #0x8 -_020D89E8: - ldmia r12!, {r0-r3} - stmia lr!, {r0-r3} - subs r4, r4, #0x1 - bne _020D89E8 - ldr r0, [r12, #0x0] - add sp, sp, #0x88 - str r0, [lr, #0x0] - ldmia sp!, {r4-r6,lr} - bx lr -_020D8A0C: - ldrb r4, [sp, #0x0] - add r2, r2, #0x1 - add r3, r3, r5 - cmp r2, r4 - blt _020D89A4 -_020D8A20: - add r4, sp, #0x0 - mov r12, #0x8 -_020D8A28: - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - subs r12, r12, #0x1 - bne _020D8A28 - ldr r0, [r4, #0x0] - str r0, [lr, #0x0] - add sp, sp, #0x88 - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start WM_GetDispersionScanPeriod -WM_GetDispersionScanPeriod: ; 0x020D8A4C - stmdb sp!, {lr} - sub sp, sp, #0xc - add r0, sp, #0x0 - bl OS_GetMacAddress - mov r2, #0x0 - add r1, sp, #0x0 - mov r3, r2 -_020D8A68: - ldrb r0, [r1, #0x0] - add r2, r2, #0x1 - cmp r2, #0x6 - add r0, r3, r0 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - add r1, r1, #0x1 - blt _020D8A68 - ldr r0, _020D8AE4 ; =0x027FFC3C - mov r1, #0xd - ldr r0, [r0, #0x0] - ldr r2, _020D8AE8 ; =0x66666667 - add r0, r3, r0 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - mul r0, r3, r1 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - smull r0, r1, r2, r3 - mov r1, r1, asr #0x2 - mov r0, r3, lsr #0x1f - ldr r2, _020D8AEC ; =0x0000000A - add r1, r0, r1 - smull r0, r1, r2, r1 - sub r1, r3, r0 - add r0, r1, #0x1e - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_020D8AE4: .word 0x027FFC3C -_020D8AE8: .word 0x66666667 -_020D8AEC: .word 0x0000000A - - arm_func_start WM_GetDispersionBeaconPeriod -WM_GetDispersionBeaconPeriod: ; 0x020D8AF0 - stmdb sp!, {lr} - sub sp, sp, #0xc - add r0, sp, #0x0 - bl OS_GetMacAddress - mov r2, #0x0 - add r1, sp, #0x0 - mov r3, r2 -_020D8B0C: - ldrb r0, [r1, #0x0] - add r2, r2, #0x1 - cmp r2, #0x6 - add r0, r3, r0 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - add r1, r1, #0x1 - blt _020D8B0C - ldr r0, _020D8B88 ; =0x027FFC3C - mov r1, #0x7 - ldr r0, [r0, #0x0] - ldr r2, _020D8B8C ; =0x66666667 - add r0, r3, r0 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - mul r0, r3, r1 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - smull r0, r1, r2, r3 - mov r1, r1, asr #0x3 - mov r0, r3, lsr #0x1f - ldr r2, _020D8B90 ; =0x00000014 - add r1, r0, r1 - smull r0, r1, r2, r1 - sub r1, r3, r0 - add r0, r1, #0xc8 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0xc - ldmia sp!, {lr} - bx lr - .balign 4 -_020D8B88: .word 0x027FFC3C -_020D8B8C: .word 0x66666667 -_020D8B90: .word 0x00000014 - - arm_func_start WM_GetLinkLevel -WM_GetLinkLevel: ; 0x020D8B94 - stmdb sp!, {r4,lr} - bl WMi_GetSystemWork - mov r4, r0 - bl WMi_CheckInitialized -_020D8BA4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x10, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x00, 0x94, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x58, 0xCD, 0xFF, 0xEB - .byte 0x04, 0x20, 0x94, 0xE5, 0xB0, 0x00, 0xD2, 0xE1, 0x09, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A - .byte 0x0A, 0x00, 0x50, 0xE3, 0x0D, 0x00, 0x00, 0x0A, 0x0B, 0x00, 0x50, 0xE3, 0x0B, 0x00, 0x00, 0x0A - .byte 0x11, 0x00, 0x00, 0xEA, 0x4C, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x82, 0xE0 - .byte 0x4B, 0xCD, 0xFF, 0xEB, 0x04, 0x20, 0x94, 0xE5, 0x01, 0x0C, 0x82, 0xE2, 0xB2, 0x08, 0xD0, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0xBC, 0x00, 0x82, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0x41, 0xCD, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5 - .byte 0xBC, 0x0B, 0xD0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x82, 0x01, 0x00, 0x00 - - arm_func_start WM_GetAllowedChannel -WM_GetAllowedChannel: ; 0x020D8C3C - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl WMi_CheckInitialized -_020D8C48: - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x09, 0xA0, 0x13 - .byte 0x0C, 0x00, 0x9F, 0x05, 0xB0, 0x00, 0xD0, 0x01, 0x04, 0xD0, 0x8D, 0xE2, 0x00, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xFA, 0xFC, 0x7F, 0x02 - - arm_func_start WM_ReadMPData -WM_ReadMPData: ; 0x020D8C68 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x40 - mov r5, r0 - mov r4, r1 - bl WMi_GetSystemWork - mov r6, r0 - bl WMi_CheckInitialized -_020D8C84: - .byte 0x00, 0x00, 0x50, 0xE3, 0x40, 0xD0, 0x8D, 0x12, 0x00, 0x00, 0xA0, 0x13 - .byte 0x70, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x01, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x3A - .byte 0x0F, 0x00, 0x54, 0xE3, 0x03, 0x00, 0x00, 0x9A, 0x40, 0xD0, 0x8D, 0xE2, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x04, 0x20, 0x96, 0xE5, 0xA4, 0x00, 0x9F, 0xE5 - .byte 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x82, 0xE0, 0x15, 0xCD, 0xFF, 0xEB, 0x04, 0x00, 0x96, 0xE5 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x01, 0x0C, 0x80, 0xE2, 0xB2, 0x28, 0xD0, 0xE1, 0x11, 0x04, 0xA0, 0xE1 - .byte 0x00, 0x00, 0x12, 0xE0, 0x40, 0xD0, 0x8D, 0x02, 0x00, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x00, 0xD5, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x40, 0xD0, 0x8D, 0x02 - .byte 0x00, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x0A, 0x00, 0x85, 0xE2 - .byte 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0xA0, 0xE3, 0x00, 0x20, 0x8D, 0xE2, 0x03, 0x01, 0x92, 0xE7 - .byte 0xB4, 0x10, 0xD0, 0xE1, 0x01, 0x00, 0x54, 0xE1, 0x40, 0xD0, 0x8D, 0x02, 0x70, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x30, 0x83, 0xE2, 0x01, 0x00, 0x43, 0xE2, 0xB6, 0x10, 0xD5, 0xE1 - .byte 0x00, 0x01, 0x92, 0xE7, 0x00, 0x00, 0x81, 0xE0, 0x03, 0x01, 0x82, 0xE7, 0xB4, 0x00, 0xD5, 0xE1 - .byte 0x00, 0x00, 0x53, 0xE1, 0xF0, 0xFF, 0xFF, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x40, 0xD0, 0x8D, 0xE2 - .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x82, 0x01, 0x00, 0x00 - - arm_func_start WM_GetMPReceiveBufferSize -WM_GetMPReceiveBufferSize: ; 0x020D8D6C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x8 - bl WMi_CheckStateEx -_020D8D8C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x00, 0x00, 0xA0, 0x13, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x04, 0x00, 0x94, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x0C, 0x00, 0x80, 0xE2, 0xDC, 0xCC, 0xFF, 0xEB - .byte 0x04, 0x10, 0x94, 0xE5, 0x0C, 0x00, 0x91, 0xE5, 0x01, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02 - .byte 0x00, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x62, 0x0F, 0x81, 0xE2 - .byte 0x02, 0x10, 0xA0, 0xE3, 0xD2, 0xCC, 0xFF, 0xEB, 0x04, 0x10, 0x94, 0xE5, 0x01, 0x0C, 0x81, 0xE2 - .byte 0xB8, 0x08, 0xD0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x50, 0xA0, 0x03, 0x3E, 0x00, 0x81, 0xE2 - .byte 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x50, 0xA0, 0x13, 0xC9, 0xCC, 0xFF, 0xEB, 0x01, 0x00, 0x55, 0xE3 - .byte 0x04, 0x00, 0x94, 0xE5, 0x04, 0xD0, 0x8D, 0x12, 0xBE, 0x53, 0xD0, 0xE1, 0x51, 0x00, 0x85, 0x12 - .byte 0x1F, 0x00, 0xC0, 0x13, 0x80, 0x00, 0xA0, 0x11, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0xF8, 0x00, 0x80, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0xBD, 0xCC, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5 - .byte 0x0C, 0x10, 0x85, 0xE2, 0xB8, 0x0F, 0xD0, 0xE1, 0x91, 0x00, 0x00, 0xE0, 0x29, 0x00, 0x80, 0xE2 - .byte 0x1F, 0x00, 0xC0, 0xE3, 0x80, 0x00, 0xA0, 0xE1, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_GetMPSendBufferSize -WM_GetMPSendBufferSize: ; 0x020D8E54 - stmdb sp!, {r4,lr} - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x8 - bl WMi_CheckStateEx -_020D8E70: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x04, 0x00, 0x94, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x0C, 0x00, 0x80, 0xE2, 0xA4, 0xCC, 0xFF, 0xEB - .byte 0x04, 0x10, 0x94, 0xE5, 0x0C, 0x00, 0x91, 0xE5, 0x01, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x03 - .byte 0x10, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x3C, 0x00, 0x81, 0xE2, 0x04, 0x10, 0xA0, 0xE3 - .byte 0x9B, 0xCC, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0xBC, 0x03, 0xD0, 0xE1, 0x1F, 0x00, 0x80, 0xE2 - .byte 0x1F, 0x00, 0xC0, 0xE3, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_ReadStatus -WM_ReadStatus: ; 0x020D8ECC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl WMi_GetSystemWork - mov r4, r0 - bl WMi_CheckInitialized -_020D8EE4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x55, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 - .byte 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x04, 0x00, 0x94, 0xE5, 0x1F, 0x1D, 0xA0, 0xE3 - .byte 0x83, 0xCC, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x05, 0x10, 0xA0, 0xE1, 0x1F, 0x2D, 0xA0, 0xE3 - .byte 0xD9, 0xD4, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_SetPortCallback -WM_SetPortCallback: ; 0x020D8F34 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x48 - movs r5, r1 - mov r6, r0 - mov r4, r2 - beq _020D8F9C - add r0, sp, #0x0 - mov r1, #0x0 - mov r2, #0x44 - bl MI_CpuFill8 - mov r3, #0x0 - ldr r1, _020D9010 ; =0x0000FFFF - mov r7, #0x82 - mov r2, #0x19 - add r0, sp, #0x14 - strh r7, [sp, #0x0] - strh r3, [sp, #0x2] - strh r2, [sp, #0x4] - strh r6, [sp, #0x6] - str r3, [sp, #0x8] - str r3, [sp, #0xc] - strh r3, [sp, #0x10] - strh r1, [sp, #0x1a] - str r4, [sp, #0x1c] - strh r3, [sp, #0x12] - bl OS_GetMacAddress -_020D8F9C: - bl OS_DisableInterrupts - mov r8, r0 - bl WMi_CheckInitialized - movs r7, r0 - beq _020D8FC8 - mov r0, r8 - bl OS_RestoreInterrupts - add sp, sp, #0x48 - mov r0, r7 - ldmia sp!, {r4-r8,lr} - bx lr -_020D8FC8: - bl WMi_GetSystemWork - add r0, r0, r6, lsl #0x2 - str r5, [r0, #0xcc] - str r4, [r0, #0x10c] - cmp r5, #0x0 - beq _020D8FF8 - bl WM_GetConnectedAIDs - strh r0, [sp, #0x22] - bl WM_GetAID - strh r0, [sp, #0x20] - add r0, sp, #0x0 - blx r5 -_020D8FF8: - mov r0, r8 - bl OS_RestoreInterrupts -_020D9000: - .byte 0x00, 0x00, 0xA0, 0xE3, 0x48, 0xD0, 0x8D, 0xE2, 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 -_020D9010: .word 0x0000FFFF - - arm_func_start WM_SetIndCallback -WM_SetIndCallback: ; 0x020D9014 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - bl OS_DisableInterrupts - mov r5, r0 - bl WMi_CheckInitialized - movs r4, r0 - beq _020D9044 - mov r0, r5 - bl OS_RestoreInterrupts - mov r0, r4 - ldmia sp!, {r4-r6,lr} - bx lr -_020D9044: - bl WMi_GetSystemWork - str r6, [r0, #0xc8] - mov r0, r5 - bl OS_RestoreInterrupts -_020D9054: - .byte 0x00, 0x00, 0xA0, 0xE3, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_Disconnect -WM_Disconnect: ; 0x020D9060 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x8 - mov r6, r0 - mov r5, r1 - bl WMi_GetSystemWork - mov r1, #0xa - mov r4, r0 - str r1, [sp, #0x0] - mov r12, #0xb - mov r0, #0x5 - mov r1, #0x7 - mov r2, #0x9 - mov r3, #0x8 - str r12, [sp, #0x4] - bl WMi_CheckStateEx -_020D909C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0xD0, 0x8D, 0x12, 0x70, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x20, 0x94, 0xE5 - .byte 0xB0, 0x00, 0xD2, 0xE1, 0x07, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x09, 0x00, 0x50, 0xE3 - .byte 0x16, 0x00, 0x00, 0x1A, 0x01, 0x00, 0x55, 0xE3, 0x01, 0x00, 0x00, 0x3A, 0x0F, 0x00, 0x55, 0xE3 - .byte 0x03, 0x00, 0x00, 0x9A, 0x08, 0xD0, 0x8D, 0xE2, 0x06, 0x00, 0xA0, 0xE3, 0x70, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x78, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x82, 0xE0 - .byte 0x0B, 0xCC, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x01, 0x0C, 0x80, 0xE2 - .byte 0xB2, 0x28, 0xD0, 0xE1, 0x11, 0x05, 0xA0, 0xE1, 0x00, 0x00, 0x12, 0xE0, 0x08, 0x00, 0x00, 0x1A - .byte 0x08, 0xD0, 0x8D, 0xE2, 0x07, 0x00, 0xA0, 0xE3, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x00, 0x55, 0xE3, 0x08, 0xD0, 0x8D, 0x12, 0x06, 0x00, 0xA0, 0x13, 0x70, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x06, 0x10, 0xA0, 0xE1, 0x0D, 0x00, 0xA0, 0xE3, 0x17, 0xFD, 0xFF, 0xEB - .byte 0x01, 0x10, 0xA0, 0xE3, 0x11, 0x25, 0xA0, 0xE1, 0x0D, 0x00, 0xA0, 0xE3, 0xC8, 0xFC, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x08, 0xD0, 0x8D, 0xE2, 0x70, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x82, 0x01, 0x00, 0x00 - - arm_func_start WM_StartConnectEx -WM_StartConnectEx: ; 0x020D9168 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x2c - mov r7, r0 - mov r6, r1 - mov r0, #0x1 - mov r1, #0x2 - mov r5, r2 - mov r4, r3 - bl WMi_CheckStateEx -_020D918C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x2C, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x56, 0xE3 - .byte 0x2C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0xB0, 0x10, 0xD6, 0xE1, 0x06, 0x00, 0xA0, 0xE1, 0x81, 0x10, 0xA0, 0xE1, 0xDF, 0xCB, 0xFF, 0xEB - .byte 0x89, 0xFC, 0xFF, 0xEB, 0x01, 0x1C, 0x80, 0xE2, 0x00, 0x20, 0xA0, 0xE3, 0xB0, 0x25, 0xC1, 0xE1 - .byte 0x4C, 0x21, 0x80, 0xE5, 0x07, 0x10, 0xA0, 0xE1, 0x0C, 0x00, 0xA0, 0xE3, 0xEF, 0xFC, 0xFF, 0xEB - .byte 0x0C, 0x00, 0xA0, 0xE3, 0xB0, 0x00, 0xCD, 0xE1, 0x04, 0x60, 0x8D, 0xE5, 0x00, 0x00, 0x55, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x08, 0x10, 0x8D, 0xE2, 0x05, 0x00, 0xA0, 0xE1, 0x18, 0x20, 0xA0, 0xE3 - .byte 0x76, 0xD4, 0xFF, 0xEB, 0x03, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x8D, 0xE2, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x18, 0x20, 0xA0, 0xE3, 0x4C, 0xD4, 0xFF, 0xEB, 0xB0, 0x24, 0xDD, 0xE1, 0x00, 0x00, 0x8D, 0xE2 - .byte 0x28, 0x10, 0xA0, 0xE3, 0x20, 0x40, 0x8D, 0xE5, 0xB6, 0x22, 0xCD, 0xE1, 0x72, 0xFC, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x2C, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_EndScan -WM_EndScan: ; 0x020D9244 - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, #0x5 - bl WMi_CheckStateEx -_020D9258: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1, 0x0B, 0x00, 0xA0, 0xE3, 0xCB, 0xFC, 0xFF, 0xEB - .byte 0x0B, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x7D, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_StartScanEx -WM_StartScanEx: ; 0x020D928C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x3c - mov r5, r0 - mov r0, #0x3 - mov r4, r1 - mov r2, r0 - mov r1, #0x2 - mov r3, #0x5 - bl WMi_CheckStateEx -_020D92B0: - .byte 0x00, 0x00, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x00, 0x00, 0x54, 0xE3, 0x3C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x02 - .byte 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x00, 0xD4, 0xE1 - .byte 0x01, 0x0B, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83, 0x30, 0x40, 0xBD, 0x88 - .byte 0x1E, 0xFF, 0x2F, 0x81, 0xB2, 0x01, 0xD4, 0xE1, 0x20, 0x00, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x82 - .byte 0x06, 0x00, 0xA0, 0x83, 0x30, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0xB0, 0x11, 0xD4, 0xE1 - .byte 0x00, 0x00, 0x51, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x51, 0xE3, 0x06, 0x00, 0x00, 0x0A - .byte 0x02, 0x00, 0x51, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x51, 0xE3, 0x3C, 0xD0, 0x8D, 0x12 - .byte 0x06, 0x00, 0xA0, 0x13, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0xB4, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x81, 0xE0, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0x01, 0x00, 0x50, 0xE3 - .byte 0x05, 0x00, 0x00, 0x8A, 0xB4, 0x03, 0xD4, 0xE1, 0x20, 0x00, 0x50, 0xE3, 0x3C, 0xD0, 0x8D, 0x82 - .byte 0x06, 0x00, 0xA0, 0x83, 0x30, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x05, 0x10, 0xA0, 0xE1 - .byte 0x26, 0x00, 0xA0, 0xE3, 0x85, 0xFC, 0xFF, 0xEB, 0x26, 0x00, 0xA0, 0xE3, 0xB0, 0x00, 0xCD, 0xE1 - .byte 0xB6, 0x20, 0xD4, 0xE1, 0x0C, 0x10, 0x8D, 0xE2, 0x0A, 0x00, 0x84, 0xE2, 0xB2, 0x20, 0xCD, 0xE1 - .byte 0x00, 0x30, 0x94, 0xE5, 0x06, 0x20, 0xA0, 0xE3, 0x04, 0x30, 0x8D, 0xE5, 0xB4, 0x30, 0xD4, 0xE1 - .byte 0xB8, 0x30, 0xCD, 0xE1, 0xB8, 0x30, 0xD4, 0xE1, 0xBA, 0x30, 0xCD, 0xE1, 0x07, 0xD4, 0xFF, 0xEB - .byte 0xB0, 0x21, 0xD4, 0xE1, 0x16, 0x10, 0x8D, 0xE2, 0x14, 0x00, 0x84, 0xE2, 0xB2, 0x21, 0xCD, 0xE1 - .byte 0xB4, 0x33, 0xD4, 0xE1, 0x20, 0x20, 0xA0, 0xE3, 0xB6, 0x33, 0xCD, 0xE1, 0xB2, 0x31, 0xD4, 0xE1 - .byte 0xB4, 0x31, 0xCD, 0xE1, 0xFD, 0xD3, 0xFF, 0xEB, 0x00, 0x00, 0x8D, 0xE2, 0x3C, 0x10, 0xA0, 0xE3 - .byte 0x01, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x3C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xFE, 0xFF, 0x00, 0x00 - - arm_func_start WM_StartScan -WM_StartScan: ; 0x020D940C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x14 - mov r5, r0 - mov r0, #0x3 - mov r4, r1 - mov r2, r0 - mov r1, #0x2 - mov r3, #0x5 - bl WMi_CheckStateEx -_020D9430: - .byte 0x00, 0x00, 0x50, 0xE3, 0x14, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x00, 0x00, 0x54, 0xE3, 0x14, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x14, 0xD0, 0x8D, 0x02 - .byte 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x00, 0xD4, 0xE1 - .byte 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0x3A, 0x0E, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x9A - .byte 0x14, 0xD0, 0x8D, 0xE2, 0x06, 0x00, 0xA0, 0xE3, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x0A, 0x00, 0xA0, 0xE3, 0x40, 0xFC, 0xFF, 0xEB, 0x0A, 0x00, 0xA0, 0xE3 - .byte 0xB0, 0x00, 0xCD, 0xE1, 0xB4, 0x20, 0xD4, 0xE1, 0x00, 0x00, 0x8D, 0xE2, 0x10, 0x10, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xCD, 0xE1, 0x00, 0x20, 0x94, 0xE5, 0x04, 0x20, 0x8D, 0xE5, 0xB6, 0x20, 0xD4, 0xE1 - .byte 0xB8, 0x20, 0xCD, 0xE1, 0x08, 0x20, 0xD4, 0xE5, 0x0A, 0x20, 0xCD, 0xE5, 0x09, 0x20, 0xD4, 0xE5 - .byte 0x0B, 0x20, 0xCD, 0xE5, 0x0A, 0x20, 0xD4, 0xE5, 0x0C, 0x20, 0xCD, 0xE5, 0x0B, 0x20, 0xD4, 0xE5 - .byte 0x0D, 0x20, 0xCD, 0xE5, 0x0C, 0x20, 0xD4, 0xE5, 0x0E, 0x20, 0xCD, 0xE5, 0x0D, 0x20, 0xD4, 0xE5 - .byte 0x0F, 0x20, 0xCD, 0xE5, 0xC0, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 - .byte 0x14, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_EndParent -WM_EndParent: ; 0x020D950C - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, #0x7 - bl WMi_CheckStateEx -_020D9520: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 - .byte 0x09, 0x00, 0xA0, 0xE3, 0x19, 0xFC, 0xFF, 0xEB, 0x09, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0xCB, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_StartParent -WM_StartParent: ; 0x020D9554 - ldr ip, _020D9560 ; =0x020D9564 - mov r1, #0x1 - bx r12 - .balign 4 -_020D9560: .word 0x020D9564 -_020D9564: - .byte 0x30, 0x40, 0x2D, 0xE9, 0x04, 0xD0, 0x4D, 0xE2, 0x00, 0x50, 0xA0, 0xE1 - .byte 0x01, 0x40, 0xA0, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x02, 0x10, 0xA0, 0xE3, 0x52, 0xFB, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x95, 0xFB, 0xFF, 0xEB, 0x01, 0x1C, 0x80, 0xE2, 0x00, 0x20, 0xA0, 0xE3, 0xB0, 0x25, 0xC1, 0xE1 - .byte 0x4C, 0x21, 0x80, 0xE5, 0x05, 0x10, 0xA0, 0xE1, 0x08, 0x00, 0xA0, 0xE3, 0xFB, 0xFB, 0xFF, 0xEB - .byte 0x04, 0x20, 0xA0, 0xE1, 0x08, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0xA0, 0xE3, 0xAC, 0xFB, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WmCheckParentParameter -WmCheckParentParameter: ; 0x020D95D4 - ldrh r1, [r0, #0x4] - cmp r1, #0x70 - movhi r0, #0x0 - bxhi lr - ldrh r1, [r0, #0x18] - cmp r1, #0xa - blo _020D95F8 - cmp r1, #0x3e8 - bls _020D9600 -_020D95F8: - mov r0, #0x0 - bx lr -_020D9600: - ldrh r0, [r0, #0x32] - cmp r0, #0x1 - blo _020D9614 - cmp r0, #0xe - bls _020D961C -_020D9614: - mov r0, #0x0 - bx lr -_020D961C: - mov r0, #0x1 - bx lr - - arm_func_start WM_SetParentParameter -WM_SetParentParameter: ; 0x020D9624 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - mov r0, #0x1 - mov r1, #0x2 - bl WMi_CheckStateEx -_020D9640: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x00, 0x00, 0x54, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x00, 0xD4, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 - .byte 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xB4, 0x11, 0xD4, 0xE1, 0xB4, 0x03, 0xD4, 0xE1 - .byte 0x00, 0x00, 0x51, 0xE3, 0x2A, 0x20, 0xA0, 0x13, 0x00, 0x20, 0xA0, 0x03, 0x02, 0x00, 0x80, 0xE0 - .byte 0x02, 0x0C, 0x50, 0xE3, 0x06, 0x00, 0x00, 0xCA, 0xB6, 0x03, 0xD4, 0xE1, 0x00, 0x00, 0x51, 0xE3 - .byte 0x06, 0x10, 0xA0, 0x13, 0x00, 0x10, 0xA0, 0x03, 0x01, 0x00, 0x80, 0xE0, 0x02, 0x0C, 0x50, 0xE3 - .byte 0x03, 0x00, 0x00, 0xDA, 0x04, 0xD0, 0x8D, 0xE2, 0x06, 0x00, 0xA0, 0xE3, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0xBD, 0xFF, 0xFF, 0xEB, 0x05, 0x10, 0xA0, 0xE1 - .byte 0x07, 0x00, 0xA0, 0xE3, 0xAD, 0xFB, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x40, 0x10, 0xA0, 0xE3 - .byte 0x92, 0xCA, 0xFF, 0xEB, 0xB4, 0x10, 0xD4, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x94, 0xE5, 0x8D, 0xCA, 0xFF, 0xEB, 0x04, 0x20, 0xA0, 0xE1, 0x07, 0x00, 0xA0, 0xE3 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x56, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_End -WM_End: ; 0x020D972C - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, #0x2 - bl WMi_CheckStateEx -_020D9740: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 - .byte 0x02, 0x00, 0xA0, 0xE3, 0x91, 0xFB, 0xFF, 0xEB, 0x02, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x43, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_Reset -WM_Reset: ; 0x020D9774 - stmdb sp!, {r4,lr} - mov r4, r0 - bl WMi_CheckIdle -_020D9780: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 - .byte 0x01, 0x00, 0xA0, 0xE3, 0x81, 0xFB, 0xFF, 0xEB, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x33, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_Initialize -WM_Initialize: ; 0x020D97B4 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - mov r4, r1 - mov r1, r2 - bl WM_Init -_020D97C8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0xD0, 0x8D, 0x12 - .byte 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x6E, 0xFB, 0xFF, 0xEB, 0x00, 0xFB, 0xFF, 0xEB, 0x00, 0x30, 0xA0, 0xE1, 0x10, 0x10, 0x93, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0x8D, 0xE5, 0x00, 0x20, 0x93, 0xE5, 0x04, 0x30, 0x93, 0xE5 - .byte 0x03, 0x10, 0xA0, 0xE3, 0x1A, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 - .byte 0x08, 0xD0, 0x8D, 0xE2, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_PowerOff -WM_PowerOff: ; 0x020D981C - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, #0x2 - bl WMi_CheckStateEx -_020D9830: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 - .byte 0x06, 0x00, 0xA0, 0xE3, 0x55, 0xFB, 0xFF, 0xEB, 0x06, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x07, 0xFB, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_PowerOn -WM_PowerOn: ; 0x020D9864 - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, r0 - bl WMi_CheckStateEx -_020D9878: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1, 0x05, 0x00, 0xA0, 0xE3, 0x43, 0xFB, 0xFF, 0xEB - .byte 0x05, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0xF5, 0xFA, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_Disable -WM_Disable: ; 0x020D98AC - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r1, r0 - bl WMi_CheckStateEx -_020D98C0: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 - .byte 0x04, 0x00, 0xA0, 0xE3, 0x31, 0xFB, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0xE3, 0xFA, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_Enable -WM_Enable: ; 0x020D98F4 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - mov r4, r0 - mov r0, #0x1 - mov r1, #0x0 - bl WMi_CheckStateEx -_020D990C: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0xD0, 0x8D, 0x12, 0x10, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x10, 0xA0, 0xE1 - .byte 0x03, 0x00, 0xA0, 0xE3, 0x1D, 0xFB, 0xFF, 0xEB, 0xAF, 0xFA, 0xFF, 0xEB, 0x00, 0x30, 0xA0, 0xE1 - .byte 0x10, 0x10, 0x93, 0xE5, 0x03, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0x8D, 0xE5, 0x00, 0x20, 0x93, 0xE5 - .byte 0x04, 0x30, 0x93, 0xE5, 0x00, 0x10, 0xA0, 0xE1, 0xC9, 0xFA, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0xA0, 0x03, 0x08, 0xD0, 0x8D, 0xE2, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_EndMP -WM_EndMP: ; 0x020D9960 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x2 - mov r1, #0x9 - mov r2, #0xa - bl WMi_CheckStateEx -_020D9984: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x00, 0x94, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x0C, 0x00, 0x80, 0xE2 - .byte 0xDF, 0xC9, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x0C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x02, 0x03, 0x00, 0xA0, 0x03, 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x10, 0x00, 0xA0, 0xE3, 0xF4, 0xFA, 0xFF, 0xEB, 0x10, 0x00, 0xA0, 0xE3 - .byte 0x00, 0x10, 0xA0, 0xE3, 0xA6, 0xFA, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_SetMPDataToPortEx -WM_SetMPDataToPortEx: ; 0x020D99EC - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x14 - mov r9, r0 - mov r8, r1 - mov r7, r2 - mov r6, r3 - mov r5, #0x1 - bl WMi_GetSystemWork - ldr r4, [r0, #0x4] - mov r0, #0x2 - mov r1, #0x9 - mov r2, #0xa - bl WMi_CheckStateEx -_020D9A20: - .byte 0x00, 0x00, 0x50, 0xE3, 0x14, 0xD0, 0x8D, 0x12, 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x3C, 0x00, 0x84, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0xB9, 0xC9, 0xFF, 0xEB, 0x62, 0x0F, 0x84, 0xE2 - .byte 0x02, 0x10, 0xA0, 0xE3, 0xB6, 0xC9, 0xFF, 0xEB, 0x01, 0x0C, 0x84, 0xE2, 0xB8, 0x08, 0xD0, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0xE4, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x84, 0xE0, 0xAE, 0xC9, 0xFF, 0xEB, 0x01, 0x2C, 0x84, 0xE2, 0x86, 0x00, 0x84, 0xE2 - .byte 0x02, 0x10, 0xA0, 0xE3, 0xB2, 0x58, 0xD2, 0xE1, 0xA9, 0xC9, 0xFF, 0xEB, 0x00, 0x00, 0x57, 0xE3 - .byte 0x14, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x43, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x00, 0x00, 0x55, 0xE3, 0x14, 0xD0, 0x8D, 0x02, 0x07, 0x00, 0xA0, 0x03, 0xF0, 0x43, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x7C, 0x00, 0x84, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0x9C, 0xC9, 0xFF, 0xEB - .byte 0x7C, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x57, 0xE1, 0x14, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 - .byte 0xF0, 0x43, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x02, 0x0C, 0x56, 0xE3, 0x14, 0xD0, 0x8D, 0x82 - .byte 0x06, 0x00, 0xA0, 0x83, 0xF0, 0x43, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x00, 0x00, 0x56, 0xE3 - .byte 0x14, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x43, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x90, 0xC9, 0xFF, 0xEB, 0xB0, 0x23, 0xDD, 0xE1 - .byte 0xB4, 0x13, 0xDD, 0xE1, 0xB8, 0x03, 0xDD, 0xE1, 0x00, 0x20, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5 - .byte 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x90, 0x8D, 0xE5, 0x07, 0x20, 0xA0, 0xE1, 0x06, 0x30, 0xA0, 0xE1 - .byte 0x0F, 0x00, 0xA0, 0xE3, 0x07, 0x10, 0xA0, 0xE3, 0x10, 0x80, 0x8D, 0xE5, 0x50, 0xFA, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x14, 0xD0, 0x8D, 0xE2, 0xF0, 0x43, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x82, 0x01, 0x00, 0x00 - - arm_func_start WM_StartMP -WM_StartMP: ; 0x020D9B48 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x24 - mov r6, r1 - mov r7, r0 - mov r5, r2 - add r1, sp, #0x8 - mov r0, #0x0 - mov r2, #0x1c - mov r4, r3 - bl MIi_CpuClear32 - ldrh r12, [sp, #0x3c] - mov r0, #0x3 - str r0, [sp, #0x8] - ldrh lr, [sp, #0x38] - strh r12, [sp, #0xc] - strh r12, [sp, #0xe] - mov r0, r7 - mov r1, r6 - mov r2, r5 - mov r3, r4 - add r12, sp, #0x8 - str lr, [sp, #0x0] - str r12, [sp, #0x4] - bl WMi_StartMP - add sp, sp, #0x24 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start WM_StartMPEx -WM_StartMPEx: ; 0x020D9BB4 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x28 - mov r6, r1 - mov r7, r0 - mov r5, r2 - add r1, sp, #0x8 - mov r0, #0x0 - mov r2, #0x1c - mov r4, r3 - bl MIi_CpuClear32 - ldrh lr, [sp, #0x44] - ldr r1, [sp, #0x58] - ldrh r12, [sp, #0x48] - ldr r0, [sp, #0x54] - ldr r8, _020D9C54 ; =0x00001E03 - cmp r0, #0x0 - ldr r3, [sp, #0x4c] - ldr r2, [sp, #0x50] - strb r1, [sp, #0x22] - strh r12, [sp, #0x1e] - strb r3, [sp, #0x20] - strb r2, [sp, #0x21] - ldrh r1, [sp, #0x40] - str r8, [sp, #0x8] - orrne r0, r8, #0x4 - strne r0, [sp, #0x8] - strh lr, [sp, #0xc] - strh lr, [sp, #0xe] - strneh lr, [sp, #0x10] - str r1, [sp, #0x0] - add r12, sp, #0x8 - mov r0, r7 - mov r1, r6 - mov r2, r5 - mov r3, r4 - str r12, [sp, #0x4] - bl WMi_StartMP - add sp, sp, #0x28 - ldmia sp!, {r4-r8,lr} - bx lr - .balign 4 -_020D9C54: .word 0x00001E03 - - arm_func_start WMi_StartMP -WMi_StartMP: ; 0x020D9C58 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x34 - mov r9, r0 - mov r8, r1 - mov r7, r2 - mov r6, r3 - bl WMi_GetSystemWork - ldr r5, [r0, #0x4] - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x8 - bl WMi_CheckStateEx -_020D9C88: - .byte 0x00, 0x00, 0x50, 0xE3, 0x34, 0xD0, 0x8D, 0x12 - .byte 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x62, 0x0F, 0x85, 0xE2, 0x02, 0x10, 0xA0, 0xE3 - .byte 0x1F, 0xC9, 0xFF, 0xEB, 0xC6, 0x00, 0x85, 0xE2, 0x02, 0x10, 0xA0, 0xE3, 0x1C, 0xC9, 0xFF, 0xEB - .byte 0x01, 0x0C, 0x85, 0xE2, 0xB8, 0x08, 0xD0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A - .byte 0xB6, 0x0C, 0xD5, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x34, 0xD0, 0x8D, 0x12, 0x03, 0x00, 0xA0, 0x13 - .byte 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x0C, 0x00, 0x85, 0xE2, 0x04, 0x10, 0xA0, 0xE3 - .byte 0x0F, 0xC9, 0xFF, 0xEB, 0x0C, 0x00, 0x95, 0xE5, 0x01, 0x00, 0x50, 0xE3, 0x34, 0xD0, 0x8D, 0x02 - .byte 0x03, 0x00, 0xA0, 0x03, 0xF0, 0x43, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x3F, 0x00, 0x17, 0xE2 - .byte 0x34, 0xD0, 0x8D, 0x12, 0x06, 0x00, 0xA0, 0x13, 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0xB0, 0x45, 0xDD, 0xE1, 0x1F, 0x00, 0x14, 0xE2, 0x34, 0xD0, 0x8D, 0x12, 0x06, 0x00, 0xA0, 0x13 - .byte 0xF0, 0x43, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x9C, 0x00, 0x85, 0xE2, 0x02, 0x10, 0xA0, 0xE3 - .byte 0xFB, 0xC8, 0xFF, 0xEB, 0xBC, 0x09, 0xD5, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x0B, 0x00, 0x00, 0x1A - .byte 0x09, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x57, 0xE1, 0x34, 0xD0, 0x8D, 0xB2, 0x06, 0x00, 0xA0, 0xB3 - .byte 0xF0, 0x43, 0xBD, 0xB8, 0x1E, 0xFF, 0x2F, 0xB1, 0x3D, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x54, 0xE1 - .byte 0x34, 0xD0, 0x8D, 0xB2, 0x06, 0x00, 0xA0, 0xB3, 0xF0, 0x43, 0xBD, 0xB8, 0x1E, 0xFF, 0x2F, 0xB1 - .byte 0x09, 0x10, 0xA0, 0xE1, 0x0E, 0x00, 0xA0, 0xE3, 0x08, 0xFA, 0xFF, 0xEB, 0x00, 0x10, 0x8D, 0xE2 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x30, 0x20, 0xA0, 0xE3, 0x1B, 0xD1, 0xFF, 0xEB, 0xB0, 0x35, 0xDD, 0xE1 - .byte 0xA7, 0x40, 0xA0, 0xE1, 0x0E, 0x50, 0xA0, 0xE3, 0x54, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x8D, 0xE2 - .byte 0x1C, 0x20, 0xA0, 0xE3, 0xB0, 0x50, 0xCD, 0xE1, 0x04, 0x80, 0x8D, 0xE5, 0x08, 0x40, 0x8D, 0xE5 - .byte 0x0C, 0x60, 0x8D, 0xE5, 0x10, 0x30, 0x8D, 0xE5, 0x14, 0xD1, 0xFF, 0xEB, 0x00, 0x00, 0x8D, 0xE2 - .byte 0x30, 0x10, 0xA0, 0xE3, 0x8C, 0xF9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 - .byte 0x34, 0xD0, 0x8D, 0xE2, 0xF0, 0x43, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_EndDCF -WM_EndDCF: ; 0x020D9DDC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x1 - mov r1, #0xb - bl WMi_CheckStateEx -_020D9DFC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x00, 0x94, 0xE5 - .byte 0x04, 0x10, 0xA0, 0xE3, 0x10, 0x00, 0x80, 0xE2, 0xC1, 0xC8, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5 - .byte 0x10, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x03, 0x00, 0xA0, 0x03 - .byte 0x30, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x05, 0x10, 0xA0, 0xE1, 0x13, 0x00, 0xA0, 0xE3 - .byte 0xD6, 0xF9, 0xFF, 0xEB, 0x13, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x88, 0xF9, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_SetDCFData -WM_SetDCFData: ; 0x020D9E64 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl WMi_GetSystemWork - mov r8, r0 - mov r0, #0x1 - mov r1, #0xb - bl WMi_CheckStateEx -_020D9E90: - .byte 0x00, 0x00, 0x50, 0xE3, 0x10, 0xD0, 0x8D, 0x12, 0xF0, 0x41, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x04, 0x00, 0x98, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x10, 0x00, 0x80, 0xE2, 0x9C, 0xC8, 0xFF, 0xEB - .byte 0x04, 0x00, 0x98, 0xE5, 0x10, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x10, 0xD0, 0x8D, 0x02 - .byte 0x03, 0x00, 0xA0, 0x03, 0xF0, 0x41, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x68, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x54, 0xE1, 0x10, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83, 0xF0, 0x41, 0xBD, 0x88 - .byte 0x1E, 0xFF, 0x2F, 0x81, 0x05, 0x00, 0xA0, 0xE1, 0x04, 0x10, 0xA0, 0xE1, 0x93, 0xC8, 0xFF, 0xEB - .byte 0x07, 0x10, 0xA0, 0xE1, 0x12, 0x00, 0xA0, 0xE3, 0xA8, 0xF9, 0xFF, 0xEB, 0x08, 0x10, 0x8D, 0xE2 - .byte 0x06, 0x00, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE3, 0x34, 0xD1, 0xFF, 0xEB, 0x00, 0x50, 0x8D, 0xE5 - .byte 0x04, 0x40, 0x8D, 0xE5, 0x08, 0x20, 0x9D, 0xE5, 0x0C, 0x30, 0x9D, 0xE5, 0x12, 0x00, 0xA0, 0xE3 - .byte 0x04, 0x10, 0xA0, 0xE3, 0x52, 0xF9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 - .byte 0x10, 0xD0, 0x8D, 0xE2, 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xE4, 0x05, 0x00, 0x00 - - arm_func_start WM_StartDCF -WM_StartDCF: ; 0x020D9F40 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - bl WMi_GetSystemWork - mov r4, r0 - mov r0, #0x1 - mov r1, #0x8 - bl WMi_CheckStateEx -_020D9F68: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12 - .byte 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x04, 0x00, 0x94, 0xE5, 0x04, 0x10, 0xA0, 0xE3 - .byte 0x10, 0x00, 0x80, 0xE2, 0x66, 0xC8, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x10, 0x00, 0x90, 0xE5 - .byte 0x01, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x03, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x10, 0x00, 0x55, 0xE3, 0x04, 0xD0, 0x8D, 0x32, 0x06, 0x00, 0xA0, 0x33 - .byte 0xF0, 0x40, 0xBD, 0x38, 0x1E, 0xFF, 0x2F, 0x31, 0x00, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x02 - .byte 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x59, 0xC8, 0xFF, 0xEB, 0x07, 0x10, 0xA0, 0xE1, 0x11, 0x00, 0xA0, 0xE3 - .byte 0x6E, 0xF9, 0xFF, 0xEB, 0x06, 0x20, 0xA0, 0xE1, 0x05, 0x30, 0xA0, 0xE1, 0x11, 0x00, 0xA0, 0xE3 - .byte 0x02, 0x10, 0xA0, 0xE3, 0x1E, 0xF9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WmGetSharedDataAddress -WmGetSharedDataAddress: ; 0x020DA00C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r12, #0x1 - mov r3, r12, lsl r3 - sub r3, r3, #0x1 - mov r5, r0 - and r0, r1, r3 - mov r4, r2 - bl MATH_CountPopulation - add r1, r5, #0x800 - ldrh r1, [r1, #0x10] - mla r0, r1, r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start WM_GetSharedDataAddress -WM_GetSharedDataAddress: ; 0x020DA048 - stmdb sp!, {r4,lr} - mov r4, r1 - ldrh lr, [r4, #0x2] - cmp r0, #0x0 - mov r3, r2 - mov r1, #0x1 - mov r12, r1, lsl r3 - ldrh r1, [r4, #0x0] - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - cmp r4, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ands r2, r1, r12 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - ands r2, lr, r12 - moveq r0, #0x0 - ldmeqia sp!, {r4,lr} - bxeq lr - add r2, r4, #0x4 - bl WmGetSharedDataAddress - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WmDataSharingSendDataSet -WmDataSharingSendDataSet: ; 0x020DA0B4 - stmdb sp!, {r4-r10,lr} - sub sp, sp, #0x10 - mov r10, r0 - mov r9, r1 - bl OS_DisableInterrupts - add r1, r10, #0x800 - ldrh r1, [r1, #0x8] - mov r7, r0 - mov r1, r1, lsl #0x9 - ldrh r1, [r10, r1] - cmp r1, #0x0 - bne _020DA210 - bl WMi_GetMPReadyAIDs - add r1, r10, #0x800 - ldrh r6, [r1, #0x8] - mov r5, r0 - ldrh r1, [r1, #0x18] - add r0, r6, #0x1 - and r0, r0, #0x3 - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0x10 - cmp r1, #0x1 - addeq r0, r4, #0x1 - andeq r0, r0, #0x3 - moveq r0, r0, lsl #0x10 - moveq r8, r0, lsr #0x10 - movne r8, r4 - add r1, r10, r8, lsl #0x9 - mov r0, #0x0 - mov r2, #0x200 - bl MIi_CpuClear16 - add r0, r10, #0x800 - ldrh r3, [r0, #0xe] - orr r2, r5, #0x1 - mov r1, r8, lsl #0x9 - and r2, r3, r2 - strh r2, [r10, r1] - strh r4, [r0, #0x8] - ldrh r0, [r0, #0xe] - mov r1, r6, lsl #0x9 - cmp r9, #0x1 - strh r0, [r10, r1] - ldreqh r0, [r10, r1] - biceq r0, r0, #0x1 - streqh r0, [r10, r1] - mov r0, r7 - bl OS_RestoreInterrupts - add r3, r10, #0x800 - ldrh r1, [r3, #0xe] - mov r4, #0x1 - ldr r0, _020DA220 ; =WmDataSharingSetDataCallback - and r1, r1, r5 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - str r1, [sp, #0x0] - ldrh r5, [r3, #0x16] - mov r1, r10 - add r2, r10, r6, lsl #0x9 - str r5, [sp, #0x4] - str r4, [sp, #0x8] - ldrh r3, [r3, #0x14] - bl WM_SetMPDataToPortEx - cmp r0, #0x7 - bne _020DA1E4 - add r0, r10, r6, lsl #0x1 - ldr r1, _020DA224 ; =0x0000FFFF - add r0, r0, #0x800 - strh r1, [r0, #0x0] - add r0, r10, #0x800 - ldrh r1, [r0, #0xa] - add sp, sp, #0x10 - add r1, r1, #0x1 - and r1, r1, #0x3 - strh r1, [r0, #0xa] - ldmia sp!, {r4-r10,lr} - bx lr -_020DA1E4: - cmp r0, #0x0 - addeq sp, sp, #0x10 - ldmeqia sp!, {r4-r10,lr} - bxeq lr - cmp r0, #0x2 - addne r0, r10, #0x800 - movne r1, #0x5 - strneh r1, [r0, #0x1c] - add sp, sp, #0x10 - ldmia sp!, {r4-r10,lr} - bx lr -_020DA210: - bl OS_RestoreInterrupts - add sp, sp, #0x10 - ldmia sp!, {r4-r10,lr} - bx lr - .balign 4 -_020DA220: .word WmDataSharingSetDataCallback -_020DA224: .word 0x0000FFFF - - arm_func_start WmDataSharingReceiveData -WmDataSharingReceiveData: ; 0x020DA228 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r3, r1 - mov r0, #0x1 - mov r0, r0, lsl r3 - add r12, r7, #0x800 - mov r0, r0, lsl #0x10 - ldrh r1, [r12, #0xe] - mov r5, r0, lsr #0x10 - mov r6, r2 - ands r0, r1, r5 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr - ldrh r4, [r12, #0x8] - mov r0, r4, lsl #0x9 - ldrh r0, [r7, r0] - ands r0, r5, r0 - bne _020DA2B4 - ldrh r0, [r12, #0x18] - cmp r0, #0x1 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,lr} - bxne lr - add r0, r4, #0x1 - and r0, r0, #0x3 - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0x10 - mov r0, r4, lsl #0x9 - ldrh r0, [r7, r0] - ands r0, r5, r0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,lr} - bxeq lr -_020DA2B4: - add r2, r7, r4, lsl #0x9 - mov r0, r7 - add r2, r2, #0x4 - bl WmGetSharedDataAddress - mov r1, r0 - cmp r6, #0x0 - beq _020DA2E4 - add r0, r7, #0x800 - ldrh r2, [r0, #0x10] - mov r0, r6 - bl MIi_CpuCopy16 - b _020DA2F4 -_020DA2E4: - add r0, r7, #0x800 - ldrh r2, [r0, #0x10] - mov r0, #0x0 - bl MIi_CpuClear16 -_020DA2F4: - bl OS_DisableInterrupts - mov r4, r4, lsl #0x9 - ldrh r3, [r7, r4] - mvn r1, r5 - add r2, r7, #0x2 - and r1, r3, r1 - strh r1, [r7, r4] - ldrh r1, [r2, r4] - orr r1, r1, r5 - strh r1, [r2, r4] - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r7,lr} - bx lr - - arm_func_start WmDataSharingReceiveCallback_Child -WmDataSharingReceiveCallback_Child: ; 0x020DA32C - stmdb sp!, {r4-r8,lr} - mov r8, r0 - ldr r7, [r8, #0x1c] - cmp r7, #0x0 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - ldrh r0, [r8, #0x2] - cmp r0, #0x0 - bne _020DA458 - ldrh r0, [r8, #0x4] - cmp r0, #0x15 - bgt _020DA394 - cmp r0, #0x15 - bge _020DA3C4 - cmp r0, #0x9 - ldmgtia sp!, {r4-r8,lr} - bxgt lr - cmp r0, #0x7 - ldmltia sp!, {r4-r8,lr} - bxlt lr - cmp r0, #0x7 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - cmp r0, #0x9 - ldmia sp!, {r4-r8,lr} - bx lr -_020DA394: - cmp r0, #0x1a - ldmgtia sp!, {r4-r8,lr} - bxgt lr - cmp r0, #0x19 - ldmltia sp!, {r4-r8,lr} - bxlt lr - cmp r0, #0x19 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - cmp r0, #0x1a - ldmia sp!, {r4-r8,lr} - bx lr -_020DA3C4: - ldr r4, [r8, #0xc] - ldrh r6, [r8, #0x10] - ldrh r5, [r4, #0x0] - bl WM_GetAID - add r1, r7, #0x800 - ldrh r1, [r1, #0x14] - cmp r6, r1 - beq _020DA3EC - cmp r6, #0x200 - movhi r6, #0x200 -_020DA3EC: - cmp r6, #0x4 - ldmccia sp!, {r4-r8,lr} - bxcc lr - mov r1, #0x1 - mov r0, r1, lsl r0 - ands r0, r5, r0 - ldmeqia sp!, {r4-r8,lr} - bxeq lr - add r0, r7, #0x800 - ldrh r1, [r0, #0x8] - mov r0, r4 - mov r2, r6 - add r1, r7, r1, lsl #0x9 - bl MIi_CpuCopy16 - add r1, r7, #0x800 - ldrh r0, [r1, #0x8] - ldrh r2, [r8, #0x1a] - add r0, r7, r0, lsl #0x1 - mov r2, r2, asr #0x1 - add r0, r0, #0x800 - strh r2, [r0, #0x0] - ldrh r0, [r1, #0x8] - add r0, r0, #0x1 - and r0, r0, #0x3 - strh r0, [r1, #0x8] - ldmia sp!, {r4-r8,lr} - bx lr -_020DA458: - add r0, r7, #0x800 - mov r1, #0x5 - strh r1, [r0, #0x1c] - ldmia sp!, {r4-r8,lr} - bx lr - - arm_func_start WmDataSharingReceiveCallback_Parent -WmDataSharingReceiveCallback_Parent: ; 0x020DA46C - stmdb sp!, {r4-r6,lr} - ldr r4, [r0, #0x1c] - cmp r4, #0x0 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - ldrh r1, [r0, #0x2] - cmp r1, #0x0 - bne _020DA5C4 - ldrh r1, [r0, #0x4] - cmp r1, #0x15 - bgt _020DA4D0 - cmp r1, #0x15 - bge _020DA504 - cmp r1, #0x9 - ldmgtia sp!, {r4-r6,lr} - bxgt lr - cmp r1, #0x7 - ldmltia sp!, {r4-r6,lr} - bxlt lr - cmp r1, #0x7 - beq _020DA528 - cmp r1, #0x9 - beq _020DA53C - ldmia sp!, {r4-r6,lr} - bx lr -_020DA4D0: - cmp r1, #0x1a - ldmgtia sp!, {r4-r6,lr} - bxgt lr - cmp r1, #0x19 - ldmltia sp!, {r4-r6,lr} - bxlt lr - cmp r1, #0x19 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - cmp r1, #0x1a - beq _020DA53C - ldmia sp!, {r4-r6,lr} - bx lr -_020DA504: - ldrh r1, [r0, #0x12] - ldr r2, [r0, #0xc] - mov r0, r4 - bl WmDataSharingReceiveData - mov r0, r4 - mov r1, #0x0 - bl WmDataSharingSendDataSet - ldmia sp!, {r4-r6,lr} - bx lr -_020DA528: - mov r0, r4 - mov r1, #0x0 - bl WmDataSharingSendDataSet - ldmia sp!, {r4-r6,lr} - bx lr -_020DA53C: - ldrh r5, [r0, #0x12] - mov r6, #0x1 - bl OS_DisableInterrupts - add r1, r4, #0x800 - ldrh lr, [r1, #0x8] - mvn r12, r6, lsl r5 - mov r3, lr, lsl #0x9 - ldrh r2, [r4, r3] - and r2, r2, r12 - strh r2, [r4, r3] - ldrh r1, [r1, #0x18] - cmp r1, #0x1 - bne _020DA58C - add r1, lr, #0x1 - and r1, r1, #0x3 - mov r1, r1, lsl #0x10 - mov r2, r1, lsr #0x7 - ldrh r1, [r4, r2] - and r1, r1, r12 - strh r1, [r4, r2] -_020DA58C: - bl OS_RestoreInterrupts - mov r0, r4 - mov r1, #0x0 - bl WmDataSharingSendDataSet - add r0, r4, #0x800 - ldrh r0, [r0, #0x18] - cmp r0, #0x1 - ldmneia sp!, {r4-r6,lr} - bxne lr - mov r0, r4 - mov r1, #0x0 - bl WmDataSharingSendDataSet - ldmia sp!, {r4-r6,lr} - bx lr -_020DA5C4: - add r0, r4, #0x800 - mov r1, #0x5 - strh r1, [r0, #0x1c] - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start WmDataSharingSetDataCallback -WmDataSharingSetDataCallback: ; 0x020DA5D8 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl WMi_GetSystemWork - ldrh r2, [r5, #0xa] - ldr r1, _020DA6E4 ; =WmDataSharingReceiveCallback_Parent - add r0, r0, r2, lsl #0x2 - ldr r2, [r0, #0xcc] - ldr r4, [r0, #0x10c] - cmp r2, r1 - beq _020DA618 - ldr r0, _020DA6E8 ; =WmDataSharingReceiveCallback_Child - cmp r2, r0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr -_020DA618: - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldr r0, [r5, #0x20] - cmp r4, r0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - bl WM_GetAID - ldrh r1, [r5, #0x2] - cmp r1, #0x0 - bne _020DA694 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - add r1, r4, #0x800 - ldrh r0, [r1, #0xa] - ldrh r2, [r5, #0x1a] - add sp, sp, #0x4 - add r0, r4, r0, lsl #0x1 - mov r2, r2, asr #0x1 - add r0, r0, #0x800 - strh r2, [r0, #0x0] - ldrh r0, [r1, #0xa] - add r0, r0, #0x1 - and r0, r0, #0x3 - strh r0, [r1, #0xa] - ldmia sp!, {r4-r5,lr} - bx lr -_020DA694: - cmp r1, #0xa - bne _020DA6CC - cmp r0, #0x0 - addne r0, r4, #0x800 - ldrneh r1, [r0, #0xa] - add sp, sp, #0x4 - addne r1, r1, #0x3 - andne r1, r1, #0x3 - strneh r1, [r0, #0xa] - add r0, r4, #0x800 - mov r1, #0x4 - strh r1, [r0, #0x1c] - ldmia sp!, {r4-r5,lr} - bx lr -_020DA6CC: - add r0, r4, #0x800 - mov r1, #0x5 - strh r1, [r0, #0x1c] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - .balign 4 -_020DA6E4: .word WmDataSharingReceiveCallback_Parent -_020DA6E8: .word WmDataSharingReceiveCallback_Child - - arm_func_start WM_StepDataSharing -WM_StepDataSharing: ; 0x020DA6EC - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - mov r10, r0 - mov r9, r1 - mov r8, r2 - mov r0, #0x2 - mov r1, #0x9 - mov r2, #0xa - bl WMi_CheckStateEx -_020DA710: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x12, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x00, 0x00, 0x5A, 0xE3, 0x0C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x4F, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x59, 0xE3, 0x0C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 - .byte 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x00, 0x00, 0x58, 0xE3, 0x0C, 0xD0, 0x8D, 0x02 - .byte 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xC1, 0xF5, 0xFF, 0xEB - .byte 0x00, 0x40, 0xB0, 0xE1, 0x01, 0x00, 0x00, 0x1A, 0x9C, 0xF5, 0xFF, 0xEB, 0x00, 0x70, 0xA0, 0xE1 - .byte 0x02, 0x0B, 0x8A, 0xE2, 0xBC, 0x01, 0xD0, 0xE1, 0x05, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x02 - .byte 0x01, 0x00, 0xA0, 0x03, 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x04, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x12, 0x03, 0x00, 0xA0, 0x13 - .byte 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x54, 0xE3, 0x05, 0x40, 0xA0, 0xE3 - .byte 0x65, 0x00, 0x00, 0x1A, 0x00, 0x60, 0xA0, 0xE3, 0x06, 0xB0, 0xA0, 0xE1, 0x04, 0x00, 0x50, 0xE3 - .byte 0x2A, 0x00, 0x00, 0x1A, 0x02, 0x1B, 0x8A, 0xE2, 0x01, 0x30, 0xA0, 0xE3, 0xBC, 0x31, 0xC1, 0xE1 - .byte 0xBE, 0x50, 0xD1, 0xE1, 0xB8, 0x20, 0xD1, 0xE1, 0x84, 0x02, 0x9F, 0xE5, 0x07, 0x50, 0x05, 0xE0 - .byte 0x05, 0x58, 0xA0, 0xE1, 0x25, 0x58, 0xA0, 0xE1, 0x00, 0x50, 0x8D, 0xE5, 0xB6, 0x51, 0xD1, 0xE1 - .byte 0x03, 0x20, 0x82, 0xE2, 0x03, 0x20, 0x02, 0xE2, 0x04, 0x50, 0x8D, 0xE5, 0x08, 0x30, 0x8D, 0xE5 - .byte 0x02, 0x28, 0xA0, 0xE1, 0x22, 0x58, 0xA0, 0xE1, 0xB4, 0x31, 0xD1, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 - .byte 0x85, 0x24, 0x8A, 0xE0, 0x74, 0xFC, 0xFF, 0xEB, 0x07, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x1A - .byte 0x85, 0x00, 0x8A, 0xE0, 0x3C, 0x12, 0x9F, 0xE5, 0x02, 0x0B, 0x80, 0xE2, 0xB0, 0x10, 0xC0, 0xE1 - .byte 0x02, 0x0B, 0x8A, 0xE2, 0xBA, 0x10, 0xD0, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x03, 0x10, 0x01, 0xE2 - .byte 0xBA, 0x10, 0xC0, 0xE1, 0x09, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A - .byte 0x02, 0x00, 0x50, 0xE3, 0x02, 0x0B, 0x8A, 0x12, 0x04, 0x10, 0xA0, 0x11, 0xBC, 0x11, 0xC0, 0x11 - .byte 0x0C, 0xD0, 0x8D, 0x12, 0x01, 0x00, 0xA0, 0x13, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x02, 0x0B, 0x8A, 0xE2, 0xBC, 0x20, 0xD0, 0xE1, 0xBA, 0x10, 0xD0, 0xE1, 0x01, 0x00, 0x52, 0xE1 - .byte 0x20, 0x00, 0x00, 0x0A, 0x82, 0x44, 0xA0, 0xE1, 0xB4, 0x30, 0x9A, 0xE1, 0x08, 0x10, 0xA0, 0xE1 - .byte 0x02, 0x2C, 0xA0, 0xE3, 0x01, 0x30, 0x83, 0xE3, 0xB4, 0x30, 0x8A, 0xE1, 0xBC, 0x00, 0xD0, 0xE1 - .byte 0x80, 0x04, 0x8A, 0xE0, 0x4D, 0xCE, 0xFF, 0xEB, 0x02, 0x1B, 0x8A, 0xE2, 0xBC, 0x00, 0xD1, 0xE1 - .byte 0x01, 0x60, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3, 0x80, 0x00, 0x8A, 0xE0, 0x02, 0x0B, 0x80, 0xE2 - .byte 0xB0, 0x00, 0xD0, 0xE1, 0xBA, 0x01, 0xC1, 0xE1, 0xBC, 0x00, 0xD1, 0xE1, 0x01, 0x00, 0x80, 0xE2 - .byte 0x03, 0x00, 0x00, 0xE2, 0xBC, 0x00, 0xC1, 0xE1, 0xB8, 0x01, 0xD1, 0xE1, 0x00, 0x00, 0x50, 0xE3 - .byte 0x07, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x57, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0xB8, 0x00, 0xD1, 0xE1 - .byte 0x80, 0x04, 0xA0, 0xE1, 0xB0, 0x00, 0x9A, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x06, 0xB0, 0xA0, 0x01 - .byte 0x00, 0x00, 0x00, 0x0A, 0x00, 0xB0, 0xA0, 0xE3, 0x0A, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 - .byte 0xE7, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x4D, 0x00, 0x00, 0x0A, 0x0A, 0x00, 0xA0, 0xE1 - .byte 0x09, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x3E, 0xFE, 0xFF, 0xEB, 0x02, 0x0B, 0x8A, 0xE2 - .byte 0xB8, 0x01, 0xD0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x45, 0x00, 0x00, 0x1A, 0x0A, 0x00, 0xA0, 0xE1 - .byte 0x0B, 0x10, 0xA0, 0xE1, 0xDA, 0xFD, 0xFF, 0xEB, 0x41, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x50, 0xE3 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x02, 0x1B, 0x8A, 0x02, 0x01, 0x00, 0xA0, 0x03, 0xBC, 0x01, 0xC1, 0x01 - .byte 0x1A, 0x00, 0x00, 0x0A, 0x02, 0x1B, 0x8A, 0xE2, 0xBC, 0x20, 0xD1, 0xE1, 0xB8, 0x10, 0xD1, 0xE1 - .byte 0x01, 0x00, 0x52, 0xE1, 0x15, 0x00, 0x00, 0x0A, 0x82, 0x24, 0xA0, 0xE1, 0xB2, 0x10, 0x9A, 0xE1 - .byte 0x01, 0x30, 0x11, 0xE2, 0x01, 0x10, 0x81, 0x03, 0xB2, 0x10, 0x8A, 0x01, 0x0F, 0x00, 0x00, 0x0A - .byte 0x08, 0x10, 0xA0, 0xE1, 0x02, 0x00, 0x8A, 0xE0, 0x02, 0x2C, 0xA0, 0xE3, 0x0F, 0xCE, 0xFF, 0xEB - .byte 0x02, 0x2B, 0x8A, 0xE2, 0xBC, 0x10, 0xD2, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3 - .byte 0x81, 0x10, 0x8A, 0xE0, 0x02, 0x1B, 0x81, 0xE2, 0xB0, 0x10, 0xD1, 0xE1, 0xBA, 0x11, 0xC2, 0xE1 - .byte 0xBC, 0x10, 0xD2, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x03, 0x10, 0x01, 0xE2, 0xBC, 0x10, 0xC2, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x1E, 0x00, 0x00, 0x0A, 0x02, 0x0B, 0x8A, 0xE2, 0xBA, 0x10, 0xD0, 0xE1 - .byte 0xB0, 0x21, 0xD0, 0xE1, 0x09, 0x00, 0xA0, 0xE1, 0x81, 0x14, 0x8A, 0xE0, 0x20, 0x70, 0x81, 0xE2 - .byte 0x07, 0x10, 0xA0, 0xE1, 0xF9, 0xCD, 0xFF, 0xEB, 0x02, 0x3B, 0x8A, 0xE2, 0xBE, 0x10, 0xD3, 0xE1 - .byte 0x01, 0x50, 0xA0, 0xE3, 0x58, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x8D, 0xE5, 0xB6, 0x61, 0xD3, 0xE1 - .byte 0x0A, 0x10, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x04, 0x60, 0x8D, 0xE5, 0x08, 0x50, 0x8D, 0xE5 - .byte 0xB0, 0x31, 0xD3, 0xE1, 0xF0, 0xFB, 0xFF, 0xEB, 0x02, 0x1B, 0x8A, 0xE2, 0xBA, 0x20, 0xD1, 0xE1 - .byte 0x02, 0x00, 0x50, 0xE3, 0x01, 0x20, 0x82, 0xE2, 0x03, 0x20, 0x02, 0xE2, 0xBA, 0x20, 0xC1, 0xE1 - .byte 0x03, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x13, 0xBC, 0x01, 0xC1, 0x11 - .byte 0x05, 0x40, 0xA0, 0x11, 0x04, 0x00, 0xA0, 0xE1, 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xD8, 0xA5, 0x0D, 0x02, 0xFF, 0xFF, 0x00, 0x00 - - arm_func_start WM_EndDataSharing -WM_EndDataSharing: ; 0x020DAA6C - stmdb sp!, {r4,lr} - movs r4, r0 - moveq r0, #0x6 - ldmeqia sp!, {r4,lr} - bxeq lr - add r0, r4, #0x800 - ldrh r1, [r0, #0xe] - cmp r1, #0x0 - moveq r0, #0x3 - ldmeqia sp!, {r4,lr} - bxeq lr - ldrh r0, [r0, #0x16] - mov r1, #0x0 - mov r2, r1 - bl WM_SetPortCallback - add r1, r4, #0x800 - mov r0, #0x0 - strh r0, [r1, #0xe] - strh r0, [r1, #0x1c] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start WM_StartDataSharing -WM_StartDataSharing: ; 0x020DAAC0 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - mov r10, r0 - mov r7, r1 - mov r6, r2 - mov r0, #0x2 - mov r1, #0x9 - mov r2, #0xa - mov r5, r3 - mov r9, #0x1 - bl WMi_CheckStateEx -_020DAAEC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x0C, 0xD0, 0x8D, 0x12, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x5A, 0xE3 - .byte 0x0C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x10, 0x00, 0x57, 0xE3, 0x0C, 0xD0, 0x8D, 0x22, 0x06, 0x00, 0xA0, 0x23, 0xF0, 0x4F, 0xBD, 0x28 - .byte 0x1E, 0xFF, 0x2F, 0x21, 0x00, 0x00, 0x56, 0xE3, 0x0C, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03 - .byte 0xF0, 0x4F, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0xCA, 0xF4, 0xFF, 0xEB, 0x00, 0x40, 0xB0, 0xE1 - .byte 0x01, 0x00, 0x00, 0x1A, 0xA5, 0xF4, 0xFF, 0xEB, 0x00, 0x90, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x82, 0x2E, 0xA0, 0xE3, 0xB8, 0xCD, 0xFF, 0xEB, 0x02, 0x0B, 0x8A, 0xE2 - .byte 0x00, 0x20, 0xA0, 0xE3, 0xB8, 0x20, 0xC0, 0xE1, 0xBA, 0x20, 0xC0, 0xE1, 0xBC, 0x20, 0xC0, 0xE1 - .byte 0xB0, 0x51, 0xC0, 0xE1, 0xB6, 0x71, 0xC0, 0xE1, 0xBE, 0x20, 0xC0, 0xE1, 0x01, 0x00, 0xA0, 0xE3 - .byte 0x30, 0x10, 0x9D, 0xE5, 0x10, 0x04, 0x86, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x00, 0x08, 0xA0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0x13, 0x02, 0x1B, 0x8A, 0xE2, 0xB8, 0x21, 0xC1, 0xE1, 0x20, 0x08, 0xA0, 0xE1 - .byte 0xBE, 0x00, 0xC1, 0xE1, 0x2C, 0x0C, 0x00, 0xEB, 0x02, 0x3B, 0x8A, 0xE2, 0x95, 0x00, 0x01, 0xE0 - .byte 0xB2, 0x01, 0xC3, 0xE1, 0xB4, 0x11, 0xC3, 0xE1, 0xB4, 0x01, 0xD3, 0xE1, 0x7F, 0x0F, 0x50, 0xE3 - .byte 0x00, 0x00, 0xA0, 0x83, 0xBE, 0x00, 0xC3, 0x81, 0x0C, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83 - .byte 0xF0, 0x4F, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x04, 0x00, 0x80, 0xE2, 0xB4, 0x01, 0xC3, 0xE1 - .byte 0x01, 0x00, 0xA0, 0xE3, 0xBC, 0x01, 0xC3, 0xE1, 0x00, 0x00, 0x54, 0xE3, 0x44, 0x00, 0x00, 0x1A - .byte 0x01, 0x20, 0x89, 0xE3, 0x00, 0x40, 0xA0, 0xE3, 0xBE, 0x10, 0xD3, 0xE1, 0x84, 0x04, 0xA0, 0xE1 - .byte 0x01, 0x40, 0x84, 0xE2, 0x02, 0x10, 0x01, 0xE0, 0xB0, 0x10, 0x8A, 0xE1, 0x04, 0x00, 0x54, 0xE3 - .byte 0xF8, 0xFF, 0xFF, 0xBA, 0x10, 0x11, 0x9F, 0xE5, 0x07, 0x00, 0xA0, 0xE1, 0x0A, 0x20, 0xA0, 0xE1 - .byte 0xC3, 0xF8, 0xFF, 0xEB, 0x0A, 0x80, 0xA0, 0xE1, 0x00, 0x70, 0xA0, 0xE3, 0x02, 0x40, 0xA0, 0xE3 - .byte 0x01, 0x60, 0xA0, 0xE3, 0xF4, 0xB0, 0x9F, 0xE5, 0xF4, 0x50, 0x9F, 0xE5, 0x28, 0x00, 0x00, 0xEA - .byte 0x02, 0xCB, 0x8A, 0xE2, 0xB8, 0x20, 0xDC, 0xE1, 0x0B, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 - .byte 0x01, 0x20, 0x82, 0xE2, 0x03, 0x20, 0x02, 0xE2, 0xB8, 0x20, 0xCC, 0xE1, 0xBE, 0x30, 0xDC, 0xE1 - .byte 0x08, 0x20, 0xA0, 0xE1, 0x09, 0x30, 0x03, 0xE0, 0x03, 0x38, 0xA0, 0xE1, 0x23, 0x38, 0xA0, 0xE1 - .byte 0x00, 0x30, 0x8D, 0xE5, 0xB6, 0x31, 0xDC, 0xE1, 0x04, 0x30, 0x8D, 0xE5, 0x08, 0x60, 0x8D, 0xE5 - .byte 0xB4, 0x31, 0xDC, 0xE1, 0x58, 0xFB, 0xFF, 0xEB, 0x07, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0x87, 0x00, 0x8A, 0xE0, 0x02, 0x0B, 0x80, 0xE2, 0xB0, 0x50, 0xC0, 0xE1, 0x02, 0x0B, 0x8A, 0xE2 - .byte 0xBA, 0x10, 0xD0, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x03, 0x10, 0x01, 0xE2, 0xBA, 0x10, 0xC0, 0xE1 - .byte 0x09, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x50, 0xE3 - .byte 0x02, 0x0B, 0x8A, 0x12, 0x05, 0x10, 0xA0, 0x13, 0xBC, 0x11, 0xC0, 0x11, 0x0C, 0xD0, 0x8D, 0x12 - .byte 0x01, 0x00, 0xA0, 0x13, 0xF0, 0x4F, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x02, 0x8C, 0x88, 0xE2 - .byte 0x01, 0x70, 0x87, 0xE2, 0x02, 0x0B, 0x8A, 0xE2, 0xB8, 0x01, 0xD0, 0xE1, 0x01, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0xA0, 0x11, 0x04, 0x00, 0xA0, 0x01, 0x00, 0x00, 0x57, 0xE1, 0xCF, 0xFF, 0xFF, 0xBA - .byte 0x05, 0x00, 0x00, 0xEA, 0x2C, 0x10, 0x9F, 0xE5, 0x03, 0x40, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x0A, 0x20, 0xA0, 0xE1, 0xBA, 0x40, 0xC3, 0xE1, 0x85, 0xF8, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x6C, 0xA4, 0x0D, 0x02 - .byte 0xD8, 0xA5, 0x0D, 0x02, 0xFF, 0xFF, 0x00, 0x00, 0x2C, 0xA3, 0x0D, 0x02 - - arm_func_start WM_EndKeySharing -WM_EndKeySharing: ; 0x020DAD3C - ldr ip, _020DAD44 ; =WM_EndDataSharing - bx r12 - .balign 4 -_020DAD44: .word WM_EndDataSharing - - arm_func_start WM_StartKeySharing -WM_StartKeySharing: ; 0x020DAD48 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020DAD70 ; =0x0000FFFF - mov r12, #0x1 - mov r3, #0x2 - str r12, [sp, #0x0] - bl WM_StartDataSharing - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DAD70: .word 0x0000FFFF - - arm_func_start WM_SetEntry -WM_SetEntry: ; 0x020DAD74 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x9 - bl WMi_CheckStateEx -_020DAD94: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x05, 0x10, 0xA0, 0xE1, 0x21, 0x00, 0xA0, 0xE3, 0xFB, 0xF5, 0xFF, 0xEB - .byte 0x04, 0x20, 0xA0, 0xE1, 0x21, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0xA0, 0xE3, 0xAC, 0xF5, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_MeasureChannel -WM_MeasureChannel: ; 0x020DADD4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl WMi_GetSystemWork - mov r0, #0x1 - mov r1, #0x2 - bl WMi_CheckStateEx -_020DADFC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x0C, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x07, 0x10, 0xA0, 0xE1 - .byte 0x1E, 0x00, 0xA0, 0xE3, 0xE1, 0xF5, 0xFF, 0xEB, 0xB0, 0x22, 0xDD, 0xE1, 0x1E, 0x30, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x8D, 0xE2, 0x0A, 0x10, 0xA0, 0xE3, 0xB0, 0x30, 0xCD, 0xE1, 0xB2, 0x60, 0xCD, 0xE1 - .byte 0xB4, 0x50, 0xCD, 0xE1, 0xB6, 0x40, 0xCD, 0xE1, 0xB8, 0x20, 0xCD, 0xE1, 0x6E, 0xF5, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_SetLifeTime -WM_SetLifeTime: ; 0x020DAE54 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl WMi_CheckIdle -_020DAE70: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x07, 0x10, 0xA0, 0xE1, 0x1D, 0x00, 0xA0, 0xE3, 0xC4, 0xF5, 0xFF, 0xEB, 0xB0, 0xC2, 0xDD, 0xE1 - .byte 0x00, 0x40, 0x8D, 0xE5, 0x06, 0x20, 0xA0, 0xE1, 0x05, 0x30, 0xA0, 0xE1, 0x1D, 0x00, 0xA0, 0xE3 - .byte 0x04, 0x10, 0xA0, 0xE3, 0x04, 0xC0, 0x8D, 0xE5, 0x71, 0xF5, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0xA0, 0x03, 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_SetBeaconIndication -WM_SetBeaconIndication: ; 0x020DAEC0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - - arm_func_start FUN_020daecc -FUN_020daecc: ; 0x020DAECC - mov r4, r1 - bl WMi_CheckIdle -_020DAED4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0x30, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x54, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x54, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0x12, 0x06, 0x00, 0xA0, 0x13, 0x30, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x19, 0x00, 0xA0, 0xE3, 0xA4, 0xF5, 0xFF, 0xEB, 0x04, 0x20, 0xA0, 0xE1 - .byte 0x19, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0xA0, 0xE3, 0x55, 0xF5, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2, 0x30, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_SetGameInfo -WM_SetGameInfo: ; 0x020DAF30 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r0, #0x2 - mov r1, #0x7 - mov r2, #0x9 - mov r4, r3 - bl WMi_CheckStateEx -_020DAF58: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0x12 - .byte 0xF0, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x00, 0x00, 0x56, 0xE3, 0x0C, 0xD0, 0x8D, 0x02 - .byte 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01, 0x70, 0x00, 0x55, 0xE3 - .byte 0x0C, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83, 0xF0, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81 - .byte 0x5C, 0x10, 0x9F, 0xE5, 0x06, 0x00, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x8F, 0xCC, 0xFF, 0xEB - .byte 0x4C, 0x00, 0x9F, 0xE5, 0x05, 0x10, 0xA0, 0xE1, 0x64, 0xC4, 0xFF, 0xEB, 0x07, 0x10, 0xA0, 0xE1 - .byte 0x18, 0x00, 0xA0, 0xE3, 0x79, 0xF5, 0xFF, 0xEB, 0xB0, 0x02, 0xDD, 0xE1, 0x00, 0x40, 0x8D, 0xE5 - .byte 0x24, 0x10, 0xDD, 0xE5, 0x04, 0x00, 0x8D, 0xE5, 0x24, 0x20, 0x9F, 0xE5, 0x08, 0x10, 0x8D, 0xE5 - .byte 0x05, 0x30, 0xA0, 0xE1, 0x18, 0x00, 0xA0, 0xE3, 0x05, 0x10, 0xA0, 0xE3, 0x24, 0xF5, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x0C, 0xD0, 0x8D, 0xE2, 0xF0, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xC0, 0x68, 0x1D, 0x02 - - arm_func_start WM_SetWEPKeyEx -WM_SetWEPKeyEx: ; 0x020DAFF8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl WMi_CheckIdle -_020DB014: - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0xD0, 0x8D, 0x12, 0xF0, 0x40, 0xBD, 0x18 - .byte 0x1E, 0xFF, 0x2F, 0x11, 0x03, 0x00, 0x56, 0xE3, 0x04, 0xD0, 0x8D, 0x82, 0x06, 0x00, 0xA0, 0x83 - .byte 0xF0, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x00, 0x00, 0x56, 0xE3, 0x07, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x54, 0xE3, 0x04, 0xD0, 0x8D, 0x02, 0x06, 0x00, 0xA0, 0x03, 0xF0, 0x40, 0xBD, 0x08 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x04, 0x00, 0xA0, 0xE1, 0x50, 0x10, 0xA0, 0xE3, 0x37, 0xC4, 0xFF, 0xEB - .byte 0x07, 0x10, 0xA0, 0xE1, 0x27, 0x00, 0xA0, 0xE3, 0x4C, 0xF5, 0xFF, 0xEB, 0x06, 0x20, 0xA0, 0xE1 - .byte 0x04, 0x30, 0xA0, 0xE1, 0x27, 0x00, 0xA0, 0xE3, 0x03, 0x10, 0xA0, 0xE3, 0x00, 0x50, 0x8D, 0xE5 - .byte 0xFB, 0xF4, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0xA0, 0x03, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - - arm_func_start WM_SetWEPKeyEx2 -WM_SetWEPKeyEx2: ; 0x020DB098 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl WMi_CheckIdle -_020DB0AC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x70, 0x40, 0xBD, 0x18, 0x1E, 0xFF, 0x2F, 0x11, 0x03, 0x00, 0x55, 0xE3, 0x06, 0x00, 0xA0, 0x83 - .byte 0x70, 0x40, 0xBD, 0x88, 0x1E, 0xFF, 0x2F, 0x81, 0x00, 0x00, 0x55, 0xE3, 0x06, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x54, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0x08, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x04, 0x00, 0xA0, 0xE1, 0x50, 0x10, 0xA0, 0xE3, 0x14, 0xC4, 0xFF, 0xEB, 0x06, 0x10, 0xA0, 0xE1 - .byte 0x14, 0x00, 0xA0, 0xE3, 0x29, 0xF5, 0xFF, 0xEB, 0x05, 0x20, 0xA0, 0xE1, 0x04, 0x30, 0xA0, 0xE1 - .byte 0x14, 0x00, 0xA0, 0xE3, 0x02, 0x10, 0xA0, 0xE3, 0xD9, 0xF4, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0xA0, 0x03, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - arm_func_start CTRDG_CheckEnabled CTRDG_CheckEnabled: ; 0x020DB11C stmdb sp!, {lr} diff --git a/asm/unk_02000E0C.s b/asm/unk_02000E0C.s index 506ff81a..93c07623 100644 --- a/asm/unk_02000E0C.s +++ b/asm/unk_02000E0C.s @@ -286,7 +286,7 @@ _02001032: blx CARD_IsPulledOut cmp r0, #0x0 beq _02001048 - blx FUN_020D5180 + blx PM_ForceToPowerOff b _0200105C _02001048: ldrh r1, [r4, #0x0] diff --git a/asm/unk_020023C0.s b/asm/unk_020023C0.s index 6bcd42ad..ab564a3f 100644 --- a/asm/unk_020023C0.s +++ b/asm/unk_020023C0.s @@ -3893,7 +3893,7 @@ FUN_020040C8: ; 0x020040C8 push {r3, lr} blx MIC_Init mov r0, #0x1 - blx FUN_020D5168 + blx PM_SetAmp mov r0, #0x2 blx FUN_020D5150 pop {r3, pc} @@ -34136,7 +34136,7 @@ _02012598: .word 0x020ED3C8 thumb_func_start FUN_0201259C FUN_0201259C: ; 0x0201259C push {r3, lr} - blx FUN_020D614C + blx FUNRTC_Init ldr r3, _020125CC ; =0x021C4808 mov r0, #0x0 add r2, r3, #0x0 diff --git a/asm/unk_020C9C0C.s b/asm/unk_020C9C0C.s index b5fab565..c6cdac46 100644 --- a/asm/unk_020C9C0C.s +++ b/asm/unk_020C9C0C.s @@ -13261,506 +13261,3 @@ _020D4AD8: .word 0x021D54AC _020D4ADC: .word 0x021D54B0 _020D4AE0: .word 0x027FFF90 _020D4AE4: .word MicCommonCallback - - arm_func_start PM_DeletePostSleepCallback -PM_DeletePostSleepCallback: ; 0x020D4AE8 - ldr ip, _020D4AF8 ; =0x020D4B78 - mov r1, r0 - ldr r0, _020D4AFC ; =0x021D54E0 - bx r12 - .balign 4 -_020D4AF8: .word 0x020D4B78 -_020D4AFC: .word 0x021D54E0 - - arm_func_start PM_DeletePreSleepCallback -PM_DeletePreSleepCallback: ; 0x020D4B00 - ldr ip, _020D4B10 ; =0x020D4B78 - mov r1, r0 - ldr r0, _020D4B14 ; =0x021D54D8 - bx r12 - .balign 4 -_020D4B10: .word 0x020D4B78 -_020D4B14: .word 0x021D54D8 - - arm_func_start PM_AppendPostSleepCallback -PM_AppendPostSleepCallback: ; 0x020D4B18 - ldr ip, _020D4B28 ; =FUN_020D4BC4 - mov r1, r0 - ldr r0, _020D4B2C ; =0x021D54E0 - bx r12 - .balign 4 -_020D4B28: .word FUN_020D4BC4 -_020D4B2C: .word 0x021D54E0 - - arm_func_start PM_PrependPreSleepCallback -PM_PrependPreSleepCallback: ; 0x020D4B30 - ldr ip, _020D4B40 ; =FUN_020D4C0C - mov r1, r0 - ldr r0, _020D4B44 ; =0x021D54D8 - bx r12 - .balign 4 -_020D4B40: .word FUN_020D4C0C -_020D4B44: .word 0x021D54D8 - - arm_func_start PMi_ExecuteList -PMi_ExecuteList: ; 0x020D4B48 - stmdb sp!, {r4,lr} - movs r4, r0 - ldmeqia sp!, {r4,lr} - bxeq lr -_020D4B58: - ldr r0, [r4, #0x4] - ldr r1, [r4, #0x0] - blx r1 - ldr r4, [r4, #0x8] - cmp r4, #0x0 - bne _020D4B58 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start FUN_020D4B78 -FUN_020D4B78: - cmp r0, #0x0 - bxeq lr - ldr r3, [r0] - mov r2, r3 - cmp r3, #0x0 - bxeq lr -_020D4B90: - cmp r3, r1 - bne _020D4BB0 - cmp r3, r2 - ldreq r1, [r3, #0x8] - streq r1, [r0] - ldrne r0, [r3, #0x8] - strne r0, [r2, #0x8] - bx lr -_020D4BB0: - mov r2, r3 - ldr r3, [r3, #0x8] - cmp r3, #0x0 - bne _020D4B90 - bx lr - - arm_func_start FUN_020D4BC4 -FUN_020D4BC4: ; 0x020D4BC4 - cmp r0, #0x0 - bxeq lr - ldr r2, [r0, #0x0] - cmp r2, #0x0 - moveq r2, #0x0 - streq r2, [r1, #0x8] - streq r1, [r0, #0x0] - bxeq lr - ldr r0, [r2, #0x8] - cmp r0, #0x0 - beq _020D4C00 -_020D4BF0: - mov r2, r0 - ldr r0, [r0, #0x8] - cmp r0, #0x0 - bne _020D4BF0 -_020D4C00: - str r0, [r1, #0x8] - str r1, [r2, #0x8] - bx lr - - arm_func_start FUN_020D4C0C -FUN_020D4C0C: ; 0x020D4C0C - cmp r0, #0x0 - ldrne r2, [r0, #0x0] - strne r2, [r1, #0x8] - strne r1, [r0, #0x0] - bx lr - - arm_func_start PM_GetLEDPattern -PM_GetLEDPattern: ; 0x020D4C20 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D4C58 ; =0x020D587C - add r2, sp, #0x0 - bl PM_GetLEDPatternAsync -_020D4C34: - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmnefd sp!, {lr} - bxne lr - bl PMi_WaitBusy - ldr r0, [sp] - add sp, sp, #0x4 - ldmfd sp!, {lr} - bx lr -_020D4C58: .word 0x020D587C - - arm_func_start PM_GetLEDPatternAsync -PM_GetLEDPatternAsync: - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl PMi_Lock -_020D4C70: - cmp r0, #0x0 - moveq r0, #0x1 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - ldr r1, _020D4CA4 - ldr r0, _020D4CA8 - str r5, [r1, #0x4] - str r4, [r1, #0x8] - str r6, [r1, #0xC] - bl PMi_SendPxiData - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020D4CA4: .word 0x021D54E4 -_020D4CA8: .word 0x03006700 - - arm_func_start PMi_SendLEDPatternCommand -PMi_SendLEDPatternCommand: ; 0x020D4CAC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020D4CE4 ; =0x020D587C - add r2, sp, #0x0 - bl PMi_SendLEDPatternCommandAsync -_020D4CC0: - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmnefd sp!, {lr} - bxne lr - bl PMi_WaitBusy - ldr r0, [sp] - add sp, sp, #0x4 - ldmfd sp!, {lr} - bx lr -_020D4CE4: .word 0x020D587C - - arm_func_start PMi_SendLEDPatternCommandAsync -PMi_SendLEDPatternCommandAsync: - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl PMi_Lock -_020D4CFC: - cmp r0, #0x0 - moveq r0, #0x1 - ldmeqia sp!, {r4-r6,lr} - bxeq lr - ldr r0, _020D4D34 - ldr r1, _020D4D38 - and r2, r6, #0xff - orr r0, r2, r0 - str r5, [r1, #0x4] - str r4, [r1, #0x8] - bl PMi_SendPxiData - mov r0, #0x0 - ldmia sp!, {r4-r6,lr} - bx lr -_020D4D34: .word 0x03006600 -_020D4D38: .word 0x021D54E4 - - arm_func_start PM_GetLCDPower -PM_GetLCDPower: ; 0x020D4D3C - ldr r0, _020D4D54 ; =0x04000304 - ldrh r0, [r0, #0x0] - ands r0, r0, #0x1 - movne r0, #0x1 - moveq r0, #0x0 - bx lr - .balign 4 -_020D4D54: .word 0x04000304 - - arm_func_start PM_SetLCDPower -PM_SetLCDPower: ; 0x020D4D58 - ldr ip, _020D4D74 ; =PMi_SetLCDPower - mov r1, #0x0 - cmp r0, #0x1 - movne r0, #0x0 - mov r2, r1 - mov r3, #0x1 - bx r12 - .balign 4 -_020D4D74: .word PMi_SetLCDPower - - arm_func_start PMi_SetLCDPower -PMi_SetLCDPower: ; 0x020D4D78 - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0x0 - beq _020D4E00 - cmp r0, #0x1 - bne _020D4E4C - cmp r2, #0x0 - bne _020D4DC0 - ldr r2, _020D4E5C ; =0x027FFC3C - ldr r0, _020D4E60 ; =0x021D54DC - ldr r2, [r2, #0x0] - ldr r0, [r0, #0x0] - sub r0, r2, r0 - cmp r0, #0x7 - addls sp, sp, #0x4 - movls r0, #0x0 - ldmlsia sp!, {lr} - bxls lr -_020D4DC0: - cmp r1, #0x0 - beq _020D4DEC - cmp r3, #0x0 - beq _020D4DDC - mov r0, r1 - bl PMi_SetLED - b _020D4DEC -_020D4DDC: - mov r0, r1 - mov r1, #0x0 - mov r2, r1 - bl PMi_SetLEDAsync -_020D4DEC: - ldr r1, _020D4E64 ; =0x04000304 - ldrh r0, [r1, #0x0] - orr r0, r0, #0x1 - strh r0, [r1, #0x0] - b _020D4E4C -_020D4E00: - ldr lr, _020D4E64 ; =0x04000304 - ldr r2, _020D4E5C ; =0x027FFC3C - ldrh r12, [lr, #0x0] - ldr r0, _020D4E60 ; =0x021D54DC - cmp r1, #0x0 - bic r12, r12, #0x1 - strh r12, [lr, #0x0] - ldr r2, [r2, #0x0] - str r2, [r0, #0x0] - beq _020D4E4C - cmp r3, #0x0 - beq _020D4E3C - mov r0, r1 - bl PMi_SetLED - b _020D4E4C -_020D4E3C: - mov r0, r1 - mov r1, #0x0 - mov r2, r1 - bl PMi_SetLEDAsync -_020D4E4C: - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020D4E5C: .word 0x027FFC3C -_020D4E60: .word 0x021D54DC -_020D4E64: .word 0x04000304 - - arm_func_start PM_GoSleepMode -PM_GoSleepMode: ; 0x020D4E68 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x1c - ldr r3, _020D5084 ; =0x021D54D8 - mov r10, r0 - ldr r0, [r3, #0x0] - mov r9, r1 - mov r11, r2 - mov r8, #0x0 - bl PMi_ExecuteList - ldr r1, _020D5088 ; =0x04000208 - mov r0, r8 - ldrh r4, [r1, #0x0] - strh r0, [r1, #0x0] - bl OS_DisableInterrupts -_020D4EA0: - str r0, [sp] - ldr r0, _020D508C - bl OS_DisableIrqMask - str r0, [sp, #0x4] - mov r0, #0x40000 - bl OS_SetIrqMask - ldr r0, [sp] - bl OS_RestoreInterrupts - ldr r2, _020D5088 - mov r1, #0x1 - ldrh r0, [r2] - ands r0, sl, #0x8 - strh r1, [r2] - beq _020D4EE8 - ldr r0, _020D5090 - ldrh r0, [r0] - cmp r0, #0x2 - biceq sl, sl, #0x8 -_020D4EE8: - ands r0, sl, #0x10 - beq _020D4EFC - bl CTRDG_IsExisting - cmp r0, #0x0 - biceq sl, sl, #0x10 -_020D4EFC: - ldr r0, _020D5094 - mov r1, #0x4000000 - ldr r7, [r1] - ldr r6, [r0] - bl PM_GetLCDPower - str r0, [sp, #0x8] - add r0, sp, #0xC - add r1, sp, #0x10 - bl PM_GetBackLight - mov r0, #0x2 - mov r1, #0x0 - bl FUN_020D526C - ldr r2, _020D5098 - ldr r0, [r2] - str r0, [sp, #0x14] -_020D4F38: - ldr r1, [r2] - ldr r0, [sp, #0x14] - cmp r0, r1 - beq _020D4F38 - ldr r0, [r2] - mov r2, #0x4000000 - str r0, [sp, #0x14] - ldr r0, [r2] - ldr r1, _020D5094 - bic r0, r0, #0x30000 - str r0, [r2] - ldr r0, [r1] - bic r0, r0, #0x10000 - str r0, [r1] - ldr r2, _020D5098 -_020D4F74: - ldr r1, [r2] - ldr r0, [sp, #0x14] - cmp r0, r1 - beq _020D4F74 - ldr r0, [r2] - str r0, [sp, #0x14] - ldr r2, _020D5098 -_020D4F90: - ldr r1, [r2] - ldr r0, [sp, #0x14] - cmp r0, r1 - beq _020D4F90 - ldr r0, [sp, #0xC] - ldr r1, [sp, #0x10] - orr r0, sl, r0, lsl #0x5 - orr r0, r0, r1, lsl #0x6 - mov r0, r0, lsl #0x10 - mov r5, r0, lsr #0x10 - orr r0, r9, fp - mov r0, r0, lsl #0x10 - mov r9, r0, lsr #0x10 -_020D4FC4: - mov r0, r5 - mov r1, r9 - bl PMi_SendSleepStart - cmp r0, #0x0 - bne _020D4FC4 - bl OS_Halt - ldr r0, _020D509C - bl OS_SpinWait - ands r0, sl, #0x8 - beq _020D4FFC - ldr r0, _020D50A0 - ldr r0, [r0] - ands r0, r0, #0x100000 - movne r8, #0x1 -_020D4FFC: - cmp r8, #0x0 - bne _020D5040 - ldr r0, [sp, #0x8] - cmp r0, #0x1 - bne _020D5028 - mov r0, #0x1 - mov r1, r0 - mov r2, r0 - mov r3, #0x0 - bl PMi_SetLCDPower - b _020D5030 -_020D5028: - mov r0, #0x1 - bl PMi_SetLED -_020D5030: - mov r1, #0x4000000 - ldr r0, _020D5094 - str r7, [r1] - str r6, [r0] -_020D5040: - bl OS_DisableInterrupts - ldr r0, [sp, #0x4] - bl OS_SetIrqMask - ldr r0, [sp] - bl OS_RestoreInterrupts - ldr r1, _020D5088 - cmp r8, #0x0 - ldrh r0, [r1] - strh r4, [r1] - beq _020D506C - bl FUN_020D5180 -_020D506C: - ldr r0, _020D50A4 - ldr r0, [r0] - bl PMi_ExecuteList - add sp, sp, #0x1C - ldmia sp!, {r4-r11, lr} - bx lr -_020D5084: .word 0x021D54D8 -_020D5088: .word 0x04000208 -_020D508C: .word 0x003FFFFF -_020D5090: .word 0x027FFC40 -_020D5094: .word 0x04001000 -_020D5098: .word 0x027FFC3C -_020D509C: .word 0x00996A00 -_020D50A0: .word 0x04000214 -_020D50A4: .word 0x021D54E0 - - - arm_func_start PMi_SendPxiData -PMi_SendPxiData: ; 0x020D50A8 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, #0x8 - mov r4, #0x0 -_020D50B8: - mov r0, r5 - mov r1, r6 - mov r2, r4 - bl PXI_SendWordByFifo -_020D50C8: - cmp r0, #0 - bne _020D50B8 - ldmia sp!, {r4-r6, lr} - bx lr - - arm_func_start PM_GetBackLight -PM_GetBackLight: ; 0x020D50D8 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r1 - mov r5, r0 - add r1, sp, #0x0 - mov r0, #0x0 - bl PMi_ReadRegister -_020D50F4: - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,lr} - bxne lr - cmp r5, #0x0 - beq _020D5120 - ldrh r1, [sp] - ands r1, r1, #0x8 - movne r1, #0x1 - moveq r1, #0x0 - str r1, [r5] -_020D5120: - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,lr} - bxeq lr - ldrh r1, [sp] - ands r1, r1, #0x4 - movne r1, #0x1 - moveq r1, #0x0 - str r1, [r4] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr @@ -397,11 +397,11 @@ .extern PM_GoSleepMode
.extern PM_GetBackLight
.extern FUN_020D5150
-.extern FUN_020D5168
-.extern FUN_020D5180
+.extern PM_SetAmp
+.extern PM_ForceToPowerOff
.extern FUN_020D526C
.extern FUN_020D5F40
-.extern FUN_020D614C
+.extern FUNRTC_Init
.extern FUN_020D6320
.extern FUN_020D6578
.extern FUN_020D660C
@@ -1036,3 +1036,13 @@ .extern _ddiv
.extern _s32_div_f
.extern _u32_div_not_0_f
+.extern OS_Halt
+.extern OS_InitMutex
+.extern PM_SetLCDPower
+.extern PMi_SendPxiData
+.extern _ll_mod
+.extern RTC_Init
+.extern OS_JamMessage
+.extern MI_DmaFill32
+.extern OS_InitMessageQueue
+.extern RTC_GetTime
diff --git a/pokediamond.lcf b/pokediamond.lcf index b3c98bb9..bfbb2669 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -383,7 +383,11 @@ SECTIONS { unk_020023C0.o (.text) rom1.5.o (.text) unk_020C9C0C.o (.text) - unk_020D5150.o (.text) + PM_arm9.o (.text) + RTC_arm9.o (.text) + CARD_arm9.o (.text) + WM_arm9.o (.text) + rom2dism.o (.text) rom2.o (.data) string_util.o (.data) rom2_2.o (.text) diff --git a/undefined_syms.txt b/undefined_syms.txt index a5a51eb5..d5641e7f 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -291,8 +291,6 @@ FUN_020C94E8 = 0x020C94E8; FUN_020C9550 = 0x020C9550; OS_SpinWait = 0x020CD380; FUN_020D5150 = 0x020D5150; -FUN_020D5168 = 0x020D5168; -FUN_020D5180 = 0x020D5180; FUN_020D526C = 0x020D526C; PMi_SetLED = 0x020D5338; PMi_SetLEDAsync = 0x020D5374; @@ -302,7 +300,7 @@ PM_Init = 0x020D5764; PMi_WaitBusy = 0x020D5884; PMi_Lock = 0x020D58C4; FUN_020D5F40 = 0x020D5F40; -FUN_020D614C = 0x020D614C; +FUNRTC_Init = 0x020D614C; FUN_020D6320 = 0x020D6320; FUN_020D6578 = 0x020D6578; FUN_020D660C = 0x020D660C; |