mirror of
https://github.com/pret/pokediamond.git
synced 2026-10-05 00:47:32 -04:00
3745 lines
66 KiB
ArmAsm
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
|