pokediamond/arm9/asm/WM_system.s
2021-06-02 20:37:13 -04:00

826 lines
15 KiB
ArmAsm

.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global UNK_021D5E28
UNK_021D5E28: ; 0x021D5E28
.space 0x4
.global UNK_021D5E2C
UNK_021D5E2C: ; 0x021D5E2C
.space 0x4
.global UNK_021D5E30
UNK_021D5E30: ; 0x021D5E30
.space 0x20
.global UNK_021D5E50
UNK_021D5E50: ; 0x021D5E50
.space 0x28
.global UNK_021D5E78
UNK_021D5E78: ; 0x021D5E78
.space 0x14
.global UNK_021D5E8C
UNK_021D5E8C: ; 0x021D5E8C
.space 0x10
.global UNK_021D5E9C
UNK_021D5E9C: ; 0x021D5E9C
.space 0x24
.global UNK_021D5EC0
UNK_021D5EC0: ; 0x021D5EC0
.space 0xa00
.text
arm_func_start WMi_GetMPReadyAIDs
WMi_GetMPReadyAIDs: ; 0x020D7DE0
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
bl OS_DisableInterrupts
ldr r1, _020D7E30 ; =UNK_021D5E2C
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 UNK_021D5E2C
arm_func_start WM_GetConnectedAIDs
WM_GetConnectedAIDs: ; 0x020D7E34
stmdb sp!, {r4,lr}
bl OS_DisableInterrupts
ldr r1, _020D7E64 ; =UNK_021D5E2C
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 UNK_021D5E2C
arm_func_start WM_GetAID
WM_GetAID: ; 0x020D7E68
stmdb sp!, {r4,lr}
bl OS_DisableInterrupts
ldr r1, _020D7E98 ; =UNK_021D5E2C
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 UNK_021D5E2C
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 ; =UNK_021D5E2C
ldreq r0, [r0, #0x0]
ldreq r0, [r0, #0x4]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020D7EC8: .word UNK_021D5E2C
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 ; =UNK_021D5E2C
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 ; =UNK_021D5E28
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 ; =UNK_021D5E78
mov r1, #0x0
mov r2, #0x44
strh r5, [r3, #0x50]
bl MI_CpuFill8
ldr r3, _020D82BC ; =UNK_021D5E78
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 ; =UNK_021D5E8C
mov r2, #0x6
strh r4, [r3, #0x3c]
bl MI_CpuCopy8
_020D81D8: ; 0x020D81D8
cmp r11, #0x0
beq _020D81F4
ldr r1, _020D82C8 ; =UNK_021D5E9C
mov r0, r11
mov r2, #0x18
bl MIi_CpuCopy16
b _020D8204
_020D81F4:
ldr r1, _020D82C8 ; =UNK_021D5E9C
mov r0, #0x0
mov r2, #0x18
bl MIi_CpuClear16
_020D8204:
cmp r5, #0x0
ldreq r1, [sp, #0x4]
ldr r0, _020D82BC ; =UNK_021D5E78
movne r1, r9
cmp r5, #0x0
ldrne r9, [sp, #0x4]
ldr r5, _020D82BC ; =UNK_021D5E78
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 UNK_021D5E2C
_020D82B4: .word 0x0000FFF5
_020D82B8: .word UNK_021D5E28
_020D82BC: .word UNK_021D5E78
_020D82C0: .word 0x0000FFFF
_020D82C4: .word UNK_021D5E8C
_020D82C8: .word UNK_021D5E9C
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 ; =UNK_021D5E2C
mov r1, #0x2
ldr r0, [r0, #0x0]
ldr r0, [r0, #0x4]
bl DC_InvalidateRange
ldr r0, _020D8370 ; =UNK_021D5E2C
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 UNK_021D5E2C
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 ; =UNK_021D5E2C
mov r1, #0x2
ldr r0, [r0, #0x0]
ldr r0, [r0, #0x4]
bl DC_InvalidateRange
ldr r0, _020D83CC ; =UNK_021D5E2C
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 UNK_021D5E2C
arm_func_start WMi_CheckInitialized
WMi_CheckInitialized:
ldr r0, _020D83E8 ; =UNK_021D5E28
ldrh r0, [r0, #0x0]
cmp r0, #0x0
movne r0, #0x0
moveq r0, #0x3
bx lr
.balign 4
_020D83E8: .word UNK_021D5E28
arm_func_start WMi_GetSystemWork
WMi_GetSystemWork: ; 0x020D83EC
ldr r0, _020D83F8 ; =UNK_021D5E2C
ldr r0, [r0, #0x0]
bx lr
.balign 4
_020D83F8: .word UNK_021D5E2C
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 ; =UNK_021D5E30
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 UNK_021D5E30
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 ; =UNK_021D5E30
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 UNK_021D5E30
arm_func_start WmGetCommandBuffer4Arm7
WmGetCommandBuffer4Arm7: ; 0x020D852C
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, _020D859C ; =UNK_021D5E30
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 ; =UNK_021D5E30
mov r2, #0x1
bl OS_JamMessage
_020D858C: ; 0x020D858C
mov r0, #0x0
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020D859C: .word UNK_021D5E30
arm_func_start WMi_SetCallbackTable
WMi_SetCallbackTable: ; 0x020D85A0
ldr r2, _020D85B4 ; =UNK_021D5E2C
ldr r2, [r2, #0x0]
add r0, r2, r0, lsl #0x2
str r1, [r0, #0x18]
bx lr
.balign 4
_020D85B4: .word UNK_021D5E2C
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 ; =UNK_021D5E2C
mov r3, #0x0
ldr r1, _020D8638 ; =UNK_021D5E28
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 UNK_021D5E2C
_020D8638: .word UNK_021D5E28
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 ; =UNK_021D5E28
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 ; =UNK_021D5E2C
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 ; =UNK_021D5E2C
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 ; =UNK_021D5E30
ldr r1, _020D8828 ; =UNK_021D5E50
mov r2, #0xa
bl OS_InitMessageQueue
ldr sb, _020D882C ; =UNK_021D5EC0
mov r10, #0x0
ldr r6, _020D8824 ; =UNK_021D5E30
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 ; =UNK_021D5E28
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 UNK_021D5E28
_020D8820: .word UNK_021D5E2C
_020D8824: .word UNK_021D5E30
_020D8828: .word UNK_021D5E50
_020D882C: .word UNK_021D5EC0
_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 ; =UNK_021D5E2C
moveq r2, #0x0
ldreq r1, [r1, #0x0]
streqh r2, [r1, #0x16]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020D8864: .word UNK_021D5E2C