Files
pokediamond/asm/WM_arm9.s
T
2020-04-23 14:38:30 +03:00

3745 lines
66 KiB
ArmAsm

.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