summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lcf9
-rw-r--r--arm9/asm/WM_dcf.s160
-rw-r--r--arm9/asm/WM_ds.s920
-rw-r--r--arm9/asm/WM_etc.s278
-rw-r--r--arm9/asm/WM_ks.s26
-rw-r--r--arm9/asm/WM_mp.s320
-rw-r--r--arm9/asm/WM_standard.s684
-rw-r--r--arm9/asm/WM_sync.s593
-rw-r--r--arm9/asm/WM_system.s791
-rw-r--r--arm9/asm/libwm.s3744
-rw-r--r--arm9/global.inc17
-rw-r--r--arm9/modules/13/asm/module_13_arm1.s2
-rw-r--r--arm9/modules/13/asm/module_13_arm2.s2
13 files changed, 3797 insertions, 3749 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
index 6ded2f28..dddd067c 100644
--- a/arm9/arm9.lcf
+++ b/arm9/arm9.lcf
@@ -227,7 +227,14 @@ SECTIONS {
CARD_rom.o (.text)
CARD_request.o (.text)
CARD_pullOut.o (.text)
- libwm.o (.text)
+ WM_system.o (.text)
+ WM_sync.o (.text)
+ WM_standard.o (.text)
+ WM_mp.o (.text)
+ WM_dcf.o (.text)
+ WM_ds.o (.text)
+ WM_ks.o (.text)
+ WM_etc.o (.text)
libctrdg.o (.text)
libmath.o (.text)
libstd.o (.text)
diff --git a/arm9/asm/WM_dcf.s b/arm9/asm/WM_dcf.s
new file mode 100644
index 00000000..eb802550
--- /dev/null
+++ b/arm9/asm/WM_dcf.s
@@ -0,0 +1,160 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ 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
diff --git a/arm9/asm/WM_ds.s b/arm9/asm/WM_ds.s
new file mode 100644
index 00000000..c2a26eb4
--- /dev/null
+++ b/arm9/asm/WM_ds.s
@@ -0,0 +1,920 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ 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:
+ 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 MATH_CountPopulation
+ 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
diff --git a/arm9/asm/WM_etc.s b/arm9/asm/WM_etc.s
new file mode 100644
index 00000000..1e960fab
--- /dev/null
+++ b/arm9/asm/WM_etc.s
@@ -0,0 +1,278 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ 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_SetWEPKey
+WM_SetWEPKey: ; 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/arm9/asm/WM_ks.s b/arm9/asm/WM_ks.s
new file mode 100644
index 00000000..ba5fdb5c
--- /dev/null
+++ b/arm9/asm/WM_ks.s
@@ -0,0 +1,26 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ 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
diff --git a/arm9/asm/WM_mp.s b/arm9/asm/WM_mp.s
new file mode 100644
index 00000000..0c2fca76
--- /dev/null
+++ b/arm9/asm/WM_mp.s
@@ -0,0 +1,320 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ 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
diff --git a/arm9/asm/WM_standard.s b/arm9/asm/WM_standard.s
new file mode 100644
index 00000000..fe00e8fa
--- /dev/null
+++ b/arm9/asm/WM_standard.s
@@ -0,0 +1,684 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ 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 ; =WMi_StartParentEx
+ mov r1, #0x1
+ bx r12
+ .balign 4
+_020D9560: .word WMi_StartParentEx
+
+ arm_func_start WMi_StartParentEx
+WMi_StartParentEx: ; 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
diff --git a/arm9/asm/WM_sync.s b/arm9/asm/WM_sync.s
new file mode 100644
index 00000000..7c8bbc9d
--- /dev/null
+++ b/arm9/asm/WM_sync.s
@@ -0,0 +1,593 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ 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
diff --git a/arm9/asm/WM_system.s b/arm9/asm/WM_system.s
new file mode 100644
index 00000000..1ed5512f
--- /dev/null
+++ b/arm9/asm/WM_system.s
@@ -0,0 +1,791 @@
+ .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
diff --git a/arm9/asm/libwm.s b/arm9/asm/libwm.s
deleted file mode 100644
index cc3e7998..00000000
--- a/arm9/asm/libwm.s
+++ /dev/null
@@ -1,3744 +0,0 @@
- .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 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:
- 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 MATH_CountPopulation
- 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/arm9/global.inc b/arm9/global.inc
index 0f1b50e2..b46c2c88 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -3816,15 +3816,20 @@
.extern WM_Disconnect
.extern WM_Enable
.extern WM_End
+.extern WM_EndDataSharing
.extern WM_EndDCF
.extern WM_EndMP
.extern WM_EndParent
.extern WM_EndScan
.extern WM_Finish
+.extern WM_GetAID
.extern WM_GetAllowedChannel
+.extern WM_GetConnectedAIDs
.extern WM_GetDispersionBeaconPeriod
.extern WM_GetDispersionScanPeriod
.extern WM_GetLinkLevel
+.extern WM_GetMPReceiveBufferSize
+.extern WM_GetMPSendBufferSize
.extern WM_Init
.extern WM_Initialize
.extern WM_MeasureChannel
@@ -3847,7 +3852,15 @@
.extern WM_StartParent
.extern WM_StartScan
.extern WM_StartScanEx
+.extern WMi_CheckIdle
+.extern WMi_CheckInitialized
+.extern WMi_CheckStateEx
+.extern WMi_GetMPReadyAIDs
.extern WMi_GetStatusAddress
+.extern WMi_GetSystemWork
+.extern WMi_SendCommand
+.extern WMi_SendCommandDirect
+.extern WMi_SetCallbackTable
.extern _ExitProcess
.extern __call_static_initializers
.extern __close_console
@@ -5086,7 +5099,7 @@
.extern MOD13_0221A7EC
.extern MOD13_0221A8A4
.extern FS_OpenFileDirect
-.extern FUN_020D9564
+.extern WMi_StartParentEx
.extern WM_GetNextTgid
.extern WM_ReadMPData
.extern WM_StartMPEx
@@ -5262,7 +5275,7 @@
.extern WM_EndKeySharing
.extern WM_GetOtherElements
.extern WM_ReadStatus
-.extern WM_SetWEPKeyEx2
+.extern WM_SetWEPKey
.extern WM_StartDataSharing
.extern WM_StartKeySharing
.extern WM_StepDataSharing
diff --git a/arm9/modules/13/asm/module_13_arm1.s b/arm9/modules/13/asm/module_13_arm1.s
index bd308915..6e644609 100644
--- a/arm9/modules/13/asm/module_13_arm1.s
+++ b/arm9/modules/13/asm/module_13_arm1.s
@@ -4826,7 +4826,7 @@ _02216228:
ldr r1, _02216904 ; =0x0223F7A0
ldr r0, _02216900 ; =MOD13_02216098
ldr r1, [r1]
- bl FUN_020D9564
+ bl WMi_StartParentEx
mov r1, r0
mov r0, #8
bl MOD13_02214B08
diff --git a/arm9/modules/13/asm/module_13_arm2.s b/arm9/modules/13/asm/module_13_arm2.s
index d5e257e5..e69032cc 100644
--- a/arm9/modules/13/asm/module_13_arm2.s
+++ b/arm9/modules/13/asm/module_13_arm2.s
@@ -30397,7 +30397,7 @@ MOD13_02238130: ; 0x02238130
ldr r2, [r2]
ldr r0, _0223819C ; =MOD13_022380E8
add r2, r2, #0x13c0
- bl WM_SetWEPKeyEx2
+ bl WM_SetWEPKey
cmp r0, #2
addeq sp, sp, #4
moveq r0, #1