summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/CARD_arm9.s1782
-rw-r--r--asm/PM_arm9.s1125
-rw-r--r--asm/RTC_arm9.s1028
-rw-r--r--asm/WM_arm9.s3744
-rw-r--r--asm/rom2dism.s (renamed from asm/unk_020D5150.s)4840
-rw-r--r--asm/unk_02000E0C.s2
-rw-r--r--asm/unk_020023C0.s4
-rw-r--r--asm/unk_020C9C0C.s503
-rw-r--r--global.inc16
-rw-r--r--pokediamond.lcf6
-rw-r--r--undefined_syms.txt4
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
diff --git a/global.inc b/global.inc
index dfb91f39..d20893e3 100644
--- a/global.inc
+++ b/global.inc
@@ -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;