Files
pokediamond/arm9/asm/WCM_system.s
2020-05-25 16:52:35 -04:00

2749 lines
48 KiB
ArmAsm

.include "asm/macros.inc"
.include "global.inc"
.section .rodata
.global WCM_Bssid_Any
WCM_Bssid_Any: ; 0x020FF590
.byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00
.global WCM_Essid_Any
WCM_Essid_Any: ; 0x020FF598
.byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.bss
.global wcmw
wcmw: ; 0x021CA86C
.space 0x4
.text
arm_func_start WcmCountBits
WcmCountBits: ; 0x020A5A4C
mov r1, r0
mov r0, #0x0
mov r3, #0x1
_020A5A58:
clz r2, r1
rsbs r2, r2, #0x1f
bxcc lr
bic r1, r1, r3, lsl r2
add r0, r0, #0x1
b _020A5A58
arm_func_start WcmCountLeadingZero
WcmCountLeadingZero: ; 0x020A5A70
clz r0, r0
bx lr
arm_func_start WcmWcmbReset
WcmWcmbReset: ; 0x020A5A78
stmdb sp!, {r4,lr}
sub sp, sp, #0x8
ldrh r0, [r0, #0x2]
cmp r0, #0x0
bne _020A5D80
ldr r2, _020A5DA8 ; =wcmw
mov r0, #0x0
ldr r1, [r2, #0x0]
add r1, r1, #0x2000
strb r0, [r1, #0x26b]
ldr r1, [r2, #0x0]
add r1, r1, #0x2200
strh r0, [r1, #0x82]
ldr r3, [r2, #0x0]
add r1, r3, #0x2000
ldr r1, [r1, #0x260]
cmp r1, #0xd
addls pc, pc, r1, lsl #0x2
b _020A5D4C
_020A5AC4: ; jump table
b _020A5D4C ; case 0
b _020A5D4C ; case 1
b _020A5D4C ; case 2
b _020A5D4C ; case 3
b _020A5D4C ; case 4
b _020A5AFC ; case 5
b _020A5AFC ; case 6
b _020A5B24 ; case 7
b _020A5B4C ; case 8
b _020A5C74 ; case 9
b _020A5CA4 ; case 10
b _020A5D4C ; case 11
b _020A5C74 ; case 12
b _020A5CD4 ; case 13
_020A5AFC:
mov r0, #0x3
bl WcmSetPhase
mov r1, #0x0
ldr r3, _020A5DAC ; =0x000008F5
mov r2, r1
mov r0, #0x1
bl WcmNotify
add sp, sp, #0x8
ldmia sp!, {r4,lr}
bx lr
_020A5B24:
mov r0, #0x3
bl WcmSetPhase
mov r0, #0x0
ldr r3, _020A5DB0 ; =0x000008FB
mov r1, r0
mov r2, r0
bl WcmNotify
add sp, sp, #0x8
ldmia sp!, {r4,lr}
bx lr
_020A5B4C:
add r1, r3, #0x2200
ldrh r4, [r1, #0xf8]
strh r0, [r1, #0xf8]
cmp r4, #0x12
bne _020A5C44
ldr r1, [r2, #0x0]
add r1, r1, #0x2100
ldrh r3, [r1, #0x70]
and r12, r3, #0x24
cmp r12, #0x24
beq _020A5C44
orr r3, r3, #0x24
strh r3, [r1, #0x70]
ldr r2, [r2, #0x0]
add r1, r2, #0x2000
ldr r3, [r1, #0x264]
and r1, r3, #0xc0000
cmp r1, #0xc0000
moveq r0, #0x1
mov r0, r0, lsl #0x10
mov r12, r0, lsr #0x10
and r1, r3, #0x30000
cmp r1, #0x30000
movne r3, #0x1
add r1, r2, #0x2140
ldr r0, _020A5DB4 ; =WcmWmcbConnect
moveq r3, #0x0
mov r2, #0x0
str r12, [sp, #0x0]
bl WM_StartConnectEx
cmp r0, #0x2
addeq sp, sp, #0x8
ldmeqia sp!, {r4,lr}
bxeq lr
cmp r0, #0x3
beq _020A5C14
cmp r0, #0x8
bne _020A5C14
mov r0, #0xc
bl WcmSetPhase
ldr r0, _020A5DA8 ; =wcmw
ldr r3, _020A5DB8 ; =0x0000091C
ldr r0, [r0, #0x0]
mov r2, r4
add r1, r0, #0x2140
mov r0, #0x1
bl WcmNotify
add sp, sp, #0x8
ldmia sp!, {r4,lr}
bx lr
_020A5C14:
mov r0, #0xb
bl WcmSetPhase
ldr r0, _020A5DA8 ; =wcmw
ldr r3, _020A5DBC ; =0x00000925
ldr r0, [r0, #0x0]
mov r2, r4
add r1, r0, #0x2140
mov r0, #0x7
bl WcmNotify
add sp, sp, #0x8
ldmia sp!, {r4,lr}
bx lr
_020A5C44:
mov r0, #0x3
bl WcmSetPhase
ldr r0, _020A5DA8 ; =wcmw
ldr r3, _020A5DC0 ; =0x0000092D
ldr r0, [r0, #0x0]
mov r2, r4
add r1, r0, #0x2140
mov r0, #0x1
bl WcmNotify
add sp, sp, #0x8
ldmia sp!, {r4,lr}
bx lr
_020A5C74:
mov r0, #0x3
bl WcmSetPhase
ldr r0, _020A5DA8 ; =wcmw
ldr r3, _020A5DC4 ; =0x00000935
ldr r1, [r0, #0x0]
mov r0, #0x0
add r1, r1, #0x2140
mov r2, #0x1
bl WcmNotify
add sp, sp, #0x8
ldmia sp!, {r4,lr}
bx lr
_020A5CA4:
mov r0, #0x3
bl WcmSetPhase
ldr r1, _020A5DA8 ; =wcmw
mov r0, #0x0
ldr r1, [r1, #0x0]
ldr r3, _020A5DC8 ; =0x0000093C
mov r2, r0
add r1, r1, #0x2140
bl WcmNotify
add sp, sp, #0x8
ldmia sp!, {r4,lr}
bx lr
_020A5CD4:
ldr r0, _020A5DCC ; =WcmWmcbCommon
bl WM_PowerOff
cmp r0, #0x2
addeq sp, sp, #0x8
ldmeqia sp!, {r4,lr}
bxeq lr
cmp r0, #0x3
beq _020A5D24
cmp r0, #0x8
bne _020A5D24
mov r0, #0xc
bl WcmSetPhase
mov r1, #0x0
ldr r3, _020A5DD0 ; =0x0000094A
mov r2, r1
mov r0, #0x1
bl WcmNotify
add sp, sp, #0x8
ldmia sp!, {r4,lr}
bx lr
_020A5D24:
mov r0, #0xb
bl WcmSetPhase
mov r1, #0x0
ldr r3, _020A5DD4 ; =0x00000953
mov r2, r1
mov r0, #0x7
bl WcmNotify
add sp, sp, #0x8
ldmia sp!, {r4,lr}
bx lr
_020A5D4C:
mov r0, #0xb
bl WcmSetPhase
ldr r0, _020A5DA8 ; =wcmw
ldr r3, _020A5DD8 ; =0x00000959
ldr r1, [r0, #0x0]
mov r0, #0x7
add r1, r1, #0x2000
ldr r2, [r1, #0x260]
mov r1, #0x0
bl WcmNotify
add sp, sp, #0x8
ldmia sp!, {r4,lr}
bx lr
_020A5D80:
mov r0, #0xb
bl WcmSetPhase
mov r1, #0x0
mov r2, r1
mov r0, #0x7
mov r3, #0x960
bl WcmNotify
add sp, sp, #0x8
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020A5DA8: .word wcmw
_020A5DAC: .word 0x000008F5
_020A5DB0: .word 0x000008FB
_020A5DB4: .word WcmWmcbConnect
_020A5DB8: .word 0x0000091C
_020A5DBC: .word 0x00000925
_020A5DC0: .word 0x0000092D
_020A5DC4: .word 0x00000935
_020A5DC8: .word 0x0000093C
_020A5DCC: .word WcmWmcbCommon
_020A5DD0: .word 0x0000094A
_020A5DD4: .word 0x00000953
_020A5DD8: .word 0x00000959
arm_func_start WcmWmcbEndDCF
WcmWmcbEndDCF: ; 0x020A5DDC
stmdb sp!, {lr}
sub sp, sp, #0x4
ldrh r0, [r0, #0x2]
cmp r0, #0x4
addls pc, pc, r0, lsl #0x2
b _020A5EF4
_020A5DF4: ; jump table
b _020A5E08 ; case 0
b _020A5EDC ; case 1
b _020A5EF4 ; case 2
b _020A5EDC ; case 3
b _020A5EF4 ; case 4
_020A5E08:
ldr r0, _020A5F24 ; =wcmw
ldr r0, [r0, #0x0]
add r0, r0, #0x2000
ldr r0, [r0, #0x260]
cmp r0, #0xc
bne _020A5E38
mov r0, #0xa
bl WcmSetPhase
bl WcmWmReset
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A5E38:
ldr r0, _020A5F28 ; =WcmWmcbDisconnect
mov r1, #0x0
bl WM_Disconnect
cmp r0, #0x2
addeq sp, sp, #0x4
ldmeqia sp!, {lr}
bxeq lr
cmp r0, #0x3
beq _020A5E94
cmp r0, #0x8
bne _020A5EAC
mov r0, #0xc
bl WcmSetPhase
ldr r0, _020A5F24 ; =wcmw
ldr r3, _020A5F2C ; =0x000008B4
ldr r1, [r0, #0x0]
mov r0, #0x1
add r1, r1, #0x2140
mov r2, #0x0
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A5E94:
mov r0, #0xa
bl WcmSetPhase
bl WcmWmReset
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A5EAC:
mov r0, #0xb
bl WcmSetPhase
ldr r1, _020A5F24 ; =wcmw
mov r0, #0x7
ldr r1, [r1, #0x0]
mov r2, #0x0
add r1, r1, #0x2140
mov r3, #0x8c0
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A5EDC:
mov r0, #0xa
bl WcmSetPhase
bl WcmWmReset
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A5EF4:
mov r0, #0xb
bl WcmSetPhase
ldr r0, _020A5F24 ; =wcmw
ldr r3, _020A5F30 ; =0x000008D3
ldr r1, [r0, #0x0]
mov r0, #0x7
add r1, r1, #0x2140
mov r2, #0x0
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020A5F24: .word wcmw
_020A5F28: .word WcmWmcbDisconnect
_020A5F2C: .word 0x000008B4
_020A5F30: .word 0x000008D3
arm_func_start WcmWmcbStartDCF
WcmWmcbStartDCF: ; 0x020A5F34
stmdb sp!, {r4,lr}
mov r4, r0
ldrh r0, [r4, #0x2]
cmp r0, #0x0
beq _020A5F50
cmp r0, #0x4
b _020A601C
_020A5F50:
ldrh r0, [r4, #0x4]
cmp r0, #0xe
beq _020A5F68
cmp r0, #0xf
beq _020A5FC0
b _020A5FF0
_020A5F68:
ldr r0, _020A6048 ; =wcmw
ldr r0, [r0, #0x0]
add r0, r0, #0x2000
ldr r0, [r0, #0x260]
cmp r0, #0xc
bne _020A5F94
mov r0, #0x8
bl WcmSetPhase
bl WcmWmReset
ldmia sp!, {r4,lr}
bx lr
_020A5F94:
mov r0, #0x9
bl WcmSetPhase
ldr r1, _020A6048 ; =wcmw
mov r0, #0x0
ldr r1, [r1, #0x0]
ldr r3, _020A604C ; =0x00000872
mov r2, r0
add r1, r1, #0x2140
bl WcmNotify
ldmia sp!, {r4,lr}
bx lr
_020A5FC0:
ldr r0, [r4, #0x8]
ldrh r0, [r0, #0xe]
mov r0, r0, asr #0x8
and r0, r0, #0xff
bl WCMi_ShelterRssi
ldr r0, [r4, #0x8]
mov r1, #0x620
bl DC_InvalidateRange
ldr r0, [r4, #0x8]
bl WCMi_CpsifRecvCallback
ldmia sp!, {r4,lr}
bx lr
_020A5FF0:
mov r0, #0xb
bl WcmSetPhase
ldr r0, _020A6048 ; =wcmw
ldrh r2, [r4, #0x4]
ldr r0, [r0, #0x0]
ldr r3, _020A6050 ; =0x00000881
add r1, r0, #0x2140
mov r0, #0x7
bl WcmNotify
ldmia sp!, {r4,lr}
bx lr
_020A601C:
mov r0, #0xb
bl WcmSetPhase
ldr r0, _020A6048 ; =wcmw
ldr r3, _020A6054 ; =0x0000088C
ldr r1, [r0, #0x0]
mov r0, #0x7
add r1, r1, #0x2140
mov r2, #0x0
bl WcmNotify
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020A6048: .word wcmw
_020A604C: .word 0x00000872
_020A6050: .word 0x00000881
_020A6054: .word 0x0000088C
arm_func_start WcmWmcbDisconnect
WcmWmcbDisconnect: ; 0x020A6058
stmdb sp!, {lr}
sub sp, sp, #0x4
ldrh r0, [r0, #0x2]
cmp r0, #0x4
addls pc, pc, r0, lsl #0x2
b _020A6108
_020A6070: ; jump table
b _020A6084 ; case 0
b _020A60F0 ; case 1
b _020A6108 ; case 2
b _020A60F0 ; case 3
b _020A6108 ; case 4
_020A6084:
ldr r0, _020A6138 ; =wcmw
ldr r1, [r0, #0x0]
add r0, r1, #0x2000
ldr r0, [r0, #0x260]
cmp r0, #0xc
bne _020A60B4
mov r0, #0xa
bl WcmSetPhase
bl WcmWmReset
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A60B4:
add r1, r1, #0x2200
mov r2, #0x0
mov r0, #0x3
strh r2, [r1, #0x82]
bl WcmSetPhase
ldr r1, _020A6138 ; =wcmw
mov r0, #0x0
ldr r1, [r1, #0x0]
ldr r3, _020A613C ; =0x0000083D
mov r2, r0
add r1, r1, #0x2140
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A60F0:
mov r0, #0xa
bl WcmSetPhase
bl WcmWmReset
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A6108:
mov r0, #0xb
bl WcmSetPhase
ldr r0, _020A6138 ; =wcmw
ldr r3, _020A6140 ; =0x0000084F
ldr r1, [r0, #0x0]
mov r0, #0x7
add r1, r1, #0x2140
mov r2, #0x0
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020A6138: .word wcmw
_020A613C: .word 0x0000083D
_020A6140: .word 0x0000084F
arm_func_start WcmWmcbConnect
WcmWmcbConnect: ; 0x020A6144
stmdb sp!, {r4,lr}
mov r4, r0
ldrh r0, [r4, #0x2]
cmp r0, #0xc
addls pc, pc, r0, lsl #0x2
b _020A638C
_020A615C: ; jump table
b _020A6190 ; case 0
b _020A6364 ; case 1
b _020A638C ; case 2
b _020A638C ; case 3
b _020A638C ; case 4
b _020A638C ; case 5
b _020A6378 ; case 6
b _020A638C ; case 7
b _020A638C ; case 8
b _020A638C ; case 9
b _020A638C ; case 10
b _020A6378 ; case 11
b _020A6378 ; case 12
_020A6190:
ldrh r0, [r4, #0x8]
cmp r0, #0x9
bgt _020A61D0
cmp r0, #0x0
addge pc, pc, r0, lsl #0x2
b _020A6338 ; case 0
b _020A6338 ; case 1
b _020A6338 ; case 2
b _020A6338 ; case 3
b _020A6338 ; case 4
b _020A6338 ; case 5
b _020A6338 ; case 6
b _020A63B0 ; case 7
b _020A6258 ; case 8
b _020A61E0 ; case 9
b _020A61E0 ; case 10
_020A61D0:
cmp r0, #0x1a
ldmeqia sp!, {r4,lr}
bxeq lr
b _020A6338
_020A61E0:
ldr r1, _020A63B8 ; =wcmw
ldr r2, [r1, #0x0]
add r0, r2, #0x2000
ldr r0, [r0, #0x260]
sub r0, r0, #0x8
cmp r0, #0x4
addls pc, pc, r0, lsl #0x2
b _020A63B0
_020A6200: ; jump table
b _020A6220 ; case 0
b _020A6230 ; case 1
b _020A6214 ; case 2
b _020A63B0 ; case 3
b _020A624C ; case 4
_020A6214:
add r0, r2, #0x2200
mov r1, #0x0
strh r1, [r0, #0x82]
_020A6220:
mov r0, #0xc
bl WcmSetPhase
ldmia sp!, {r4,lr}
bx lr
_020A6230:
add r0, r2, #0x2200
mov r2, #0x0
strh r2, [r0, #0x82]
ldr r0, [r1, #0x0]
mov r1, #0x6
add r0, r0, #0x2200
strh r1, [r0, #0x80]
_020A624C:
bl WcmWmReset
ldmia sp!, {r4,lr}
bx lr
_020A6258:
ldr r1, _020A63B8 ; =wcmw
ldr r3, [r1, #0x0]
add r0, r3, #0x2000
ldr r0, [r0, #0x260]
cmp r0, #0xc
bne _020A6284
mov r0, #0x8
bl WcmSetPhase
bl WcmWmReset
ldmia sp!, {r4,lr}
bx lr
_020A6284:
ldrh r2, [r4, #0xa]
cmp r2, #0x1
blo _020A632C
ldr r0, _020A63BC ; =0x000007D7
cmp r2, r0
bhi _020A632C
add r0, r3, #0x2200
strh r2, [r0, #0x82]
ldr r1, [r1, #0x0]
ldr r0, _020A63C0 ; =WcmWmcbStartDCF
add r1, r1, #0x1500
mov r2, #0x620
bl WM_StartDCF
cmp r0, #0x2
ldmeqia sp!, {r4,lr}
bxeq lr
cmp r0, #0x3
beq _020A6300
cmp r0, #0x8
bne _020A6300
mov r0, #0xc
bl WcmSetPhase
ldr r0, _020A63B8 ; =wcmw
ldr r3, _020A63C4 ; =0x000007ED
ldr r1, [r0, #0x0]
mov r0, #0x1
add r1, r1, #0x2140
mov r2, #0x0
bl WcmNotify
ldmia sp!, {r4,lr}
bx lr
_020A6300:
mov r0, #0xb
bl WcmSetPhase
ldr r0, _020A63B8 ; =wcmw
ldr r3, _020A63C8 ; =0x000007F6
ldr r1, [r0, #0x0]
mov r0, #0x7
add r1, r1, #0x2140
mov r2, #0x0
bl WcmNotify
ldmia sp!, {r4,lr}
bx lr
_020A632C:
bl WcmWmReset
ldmia sp!, {r4,lr}
bx lr
_020A6338:
mov r0, #0xb
bl WcmSetPhase
ldr r0, _020A63B8 ; =wcmw
ldrh r2, [r4, #0x8]
ldr r0, [r0, #0x0]
ldr r3, _020A63CC ; =0x00000804
add r1, r0, #0x2140
mov r0, #0x7
bl WcmNotify
ldmia sp!, {r4,lr}
bx lr
_020A6364:
ldr r0, _020A63B8 ; =wcmw
ldrh r1, [r4, #0xe]
ldr r0, [r0, #0x0]
add r0, r0, #0x2200
strh r1, [r0, #0xf8]
_020A6378:
mov r0, #0x8
bl WcmSetPhase
bl WcmWmReset
ldmia sp!, {r4,lr}
bx lr
_020A638C:
mov r0, #0xb
bl WcmSetPhase
ldr r0, _020A63B8 ; =wcmw
ldr r3, _020A63D0 ; =0x0000081B
ldr r1, [r0, #0x0]
mov r0, #0x7
add r1, r1, #0x2140
mov r2, #0x0
bl WcmNotify
_020A63B0:
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020A63B8: .word wcmw
_020A63BC: .word 0x000007D7
_020A63C0: .word WcmWmcbStartDCF
_020A63C4: .word 0x000007ED
_020A63C8: .word 0x000007F6
_020A63CC: .word 0x00000804
_020A63D0: .word 0x0000081B
arm_func_start WcmWmcbEndScan
WcmWmcbEndScan: ; 0x020A63D4
stmdb sp!, {lr}
sub sp, sp, #0x4
ldrh r0, [r0, #0x2]
cmp r0, #0x4
addls pc, pc, r0, lsl #0x2
b _020A6438
_020A63EC: ; jump table
b _020A6400 ; case 0
b _020A6428 ; case 1
b _020A6438 ; case 2
b _020A6438 ; case 3
b _020A6438 ; case 4
_020A6400:
mov r0, #0x3
bl WcmSetPhase
mov r0, #0x0
ldr r3, _020A6460 ; =0x00000783
mov r1, r0
mov r2, r0
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A6428:
bl WcmWmReset
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A6438:
mov r0, #0xb
bl WcmSetPhase
mov r1, #0x0
ldr r3, _020A6464 ; =0x00000793
mov r2, r1
mov r0, #0x7
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020A6460: .word 0x00000783
_020A6464: .word 0x00000793
arm_func_start WcmWmcbScanEx
WcmWmcbScanEx: ; 0x020A6468
stmdb sp!, {r4-r8,lr}
sub sp, sp, #0x8
mov r5, r0
ldrh r0, [r5, #0x2]
mov r4, #0x14
cmp r0, #0x4
addls pc, pc, r0, lsl #0x2
b _020A6714
_020A6488: ; jump table
b _020A649C ; case 0
b _020A6704 ; case 1
b _020A6714 ; case 2
b _020A6714 ; case 3
b _020A6714 ; case 4
_020A649C:
ldr r0, _020A673C ; =wcmw
ldr r0, [r0, #0x0]
add r0, r0, #0x2000
ldr r0, [r0, #0x260]
cmp r0, #0x5
bne _020A64D0
mov r0, #0x6
bl WcmSetPhase
mov r0, #0x0
ldr r3, _020A6740 ; =0x00000704
mov r1, r0
mov r2, r0
bl WcmNotify
_020A64D0:
ldr r1, _020A673C ; =wcmw
ldr r2, [r1, #0x0]
add r0, r2, #0x2000
ldr r0, [r0, #0x260]
cmp r0, #0x6
beq _020A64FC
cmp r0, #0x7
beq _020A6674
cmp r0, #0xd
beq _020A6684
b _020A6694
_020A64FC:
add r0, r2, #0x2200
mov r2, #0x7
strh r2, [r0, #0x80]
ldrh r0, [r5, #0x8]
cmp r0, #0x5
bne _020A6588
ldr r0, [r1, #0x0]
add r1, r0, #0x2200
add r0, r0, #0x2000
ldrh r1, [r1, #0x8c]
ldr r0, [r0, #0x288]
bl DC_InvalidateRange
ldrh r0, [r5, #0xe]
mov r4, #0x0
cmp r0, #0x0
ble _020A6588
ldr r8, _020A6744 ; =0x0000071A
mov r6, r4
mov r7, #0x7
_020A6548:
add r0, r5, r4, lsl #0x1
add r2, r5, r4, lsl #0x2
ldrh r1, [r0, #0x50]
ldr r0, [r2, #0x10]
bl WCMi_EntryApList
str r8, [sp, #0x0]
add r0, r5, r4, lsl #0x2
ldr r2, [r0, #0x10]
mov r0, r7
mov r1, r6
mov r3, r5
bl WcmNotifyEx
ldrh r0, [r5, #0xe]
add r4, r4, #0x1
cmp r4, r0
blt _020A6548
_020A6588:
ldr r0, _020A673C ; =wcmw
ldr r0, [r0, #0x0]
add r0, r0, #0x2000
ldr r1, [r0, #0x264]
and r0, r1, #0xc00000
cmp r0, #0xc00000
bne _020A65F4
ldr r0, _020A6748 ; =0x00003FFE
and r0, r1, r0
bl WcmCountBits
movs r1, r0
beq _020A65F4
ldr r0, _020A673C ; =wcmw
ldr r0, [r0, #0x0]
add r0, r0, #0x2000
ldr r6, [r0, #0x284]
mov r0, r6
bl _u32_div_f
cmp r1, #0x0
bne _020A65F4
ldr r4, _020A674C ; =0x00000728
mov r1, #0x0
mov r2, r6
mov r3, r1
mov r0, #0x8
str r4, [sp, #0x0]
bl WcmNotifyEx
_020A65F4:
ldrh r0, [r5, #0xa]
bl WcmCountLeadingZero
rsb r0, r0, #0x20
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
bl WcmGetNextScanChannel
ldr r1, _020A673C ; =wcmw
mov r2, #0x1
mov r2, r2, lsl r0
ldr r0, [r1, #0x0]
mov r2, r2, asr #0x1
add r0, r0, #0x2200
strh r2, [r0, #0x8e]
ldr r0, [r1, #0x0]
add r1, r0, #0x2200
add r0, r0, #0x2000
ldrh r1, [r1, #0x8c]
ldr r0, [r0, #0x288]
bl DC_InvalidateRange
ldr r3, _020A673C ; =wcmw
ldr r2, _020A6750 ; =0x00002288
ldr r1, [r3, #0x0]
ldr r0, _020A6754 ; =WcmWmcbScanEx
add r1, r1, #0x2000
ldr r4, [r1, #0x284]
add r4, r4, #0x1
str r4, [r1, #0x284]
ldr r1, [r3, #0x0]
add r1, r1, r2
bl WM_StartScanEx
mov r4, r0
b _020A6694
_020A6674:
ldr r0, _020A6758 ; =WcmWmcbEndScan
bl WM_EndScan
mov r4, r0
b _020A6694
_020A6684:
bl WcmWmReset
add sp, sp, #0x8
ldmia sp!, {r4-r8,lr}
bx lr
_020A6694:
cmp r4, #0x2
addeq sp, sp, #0x8
ldmeqia sp!, {r4-r8,lr}
bxeq lr
cmp r4, #0x3
beq _020A66DC
cmp r4, #0x8
bne _020A66DC
mov r0, #0xc
bl WcmSetPhase
mov r1, #0x0
ldr r3, _020A675C ; =0x00000753
mov r2, r1
mov r0, #0x1
bl WcmNotify
add sp, sp, #0x8
ldmia sp!, {r4-r8,lr}
bx lr
_020A66DC:
mov r0, #0xb
bl WcmSetPhase
mov r1, #0x0
ldr r3, _020A6760 ; =0x0000075C
mov r2, r1
mov r0, #0x7
bl WcmNotify
add sp, sp, #0x8
ldmia sp!, {r4-r8,lr}
bx lr
_020A6704:
bl WcmWmReset
add sp, sp, #0x8
ldmia sp!, {r4-r8,lr}
bx lr
_020A6714:
mov r0, #0xb
bl WcmSetPhase
mov r1, #0x0
ldr r3, _020A6764 ; =0x0000076D
mov r2, r1
mov r0, #0x7
bl WcmNotify
add sp, sp, #0x8
ldmia sp!, {r4-r8,lr}
bx lr
.balign 4
_020A673C: .word wcmw
_020A6740: .word 0x00000704
_020A6744: .word 0x0000071A
_020A6748: .word 0x00003FFE
_020A674C: .word 0x00000728
_020A6750: .word 0x00002288
_020A6754: .word WcmWmcbScanEx
_020A6758: .word WcmWmcbEndScan
_020A675C: .word 0x00000753
_020A6760: .word 0x0000075C
_020A6764: .word 0x0000076D
arm_func_start WcmWmcbCommon
WcmWmcbCommon: ; 0x020A6768
stmdb sp!, {lr}
sub sp, sp, #0x4
ldrh r1, [r0, #0x2]
mov r2, #0x14
cmp r1, #0x4
addls pc, pc, r1, lsl #0x2
b _020A6A0C
_020A6784: ; jump table
b _020A6798 ; case 0
b _020A69CC ; case 1
b _020A6A0C ; case 2
b _020A6A0C ; case 3
b _020A6A0C ; case 4
_020A6798:
ldrh r0, [r0, #0x0]
cmp r0, #0x19
bgt _020A67D4
cmp r0, #0x19
bge _020A68B4
cmp r0, #0x6
addls pc, pc, r0, lsl #0x2
b _020A692C
_020A67B8: ; jump table
b _020A692C ; case 0
b _020A692C ; case 1
b _020A692C ; case 2
b _020A67F4 ; case 3
b _020A6804 ; case 4
b _020A6868 ; case 5
b _020A6890 ; case 6
_020A67D4:
cmp r0, #0x1d
bgt _020A67E8
cmp r0, #0x1d
beq _020A68A0
b _020A692C
_020A67E8:
cmp r0, #0x27
beq _020A68DC
b _020A692C
_020A67F4:
ldr r0, _020A6A4C ; =WcmWmcbCommon
bl WM_PowerOn
mov r2, r0
b _020A692C
_020A6804:
bl WM_Finish
cmp r0, #0x0
beq _020A6818
cmp r0, #0x4
b _020A6840
_020A6818:
mov r0, #0x1
bl WcmSetPhase
mov r0, #0x0
ldr r3, _020A6A50 ; =0x00000663
mov r1, r0
mov r2, r0
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A6840:
mov r0, #0xb
bl WcmSetPhase
mov r1, #0x0
ldr r3, _020A6A54 ; =0x0000066C
mov r2, r1
mov r0, #0x7
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A6868:
mov r0, #0x3
bl WcmSetPhase
mov r0, #0x0
ldr r3, _020A6A58 ; =0x00000673
mov r1, r0
mov r2, r0
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A6890:
ldr r0, _020A6A4C ; =WcmWmcbCommon
bl WM_Disable
mov r2, r0
b _020A692C
_020A68A0:
ldr r0, _020A6A4C ; =WcmWmcbCommon
mov r1, #0x0
bl WM_SetBeaconIndication
mov r2, r0
b _020A692C
_020A68B4:
ldr r1, _020A6A5C ; =wcmw
ldr r0, _020A6A4C ; =WcmWmcbCommon
ldr r3, [r1, #0x0]
add r2, r3, #0x2000
ldrb r1, [r2, #0x250]
ldrb r2, [r2, #0x251]
add r3, r3, #0x2200
bl WM_SetWEPKeyEx
mov r2, r0
b _020A692C
_020A68DC:
ldr r0, _020A6A5C ; =wcmw
ldr r2, [r0, #0x0]
add r0, r2, #0x2000
ldr r1, [r0, #0x264]
and r0, r1, #0xc0000
cmp r0, #0xc0000
moveq r0, #0x1
movne r0, #0x0
mov r0, r0, lsl #0x10
mov r12, r0, lsr #0x10
and r1, r1, #0x30000
cmp r1, #0x30000
movne r3, #0x1
add r1, r2, #0x2140
ldr r0, _020A6A60 ; =WcmWmcbConnect
moveq r3, #0x0
mov r2, #0x0
str r12, [sp, #0x0]
bl WM_StartConnectEx
mov r2, r0
_020A692C:
cmp r2, #0x2
addeq sp, sp, #0x4
ldmeqia sp!, {lr}
bxeq lr
cmp r2, #0x3
beq _020A698C
cmp r2, #0x8
bne _020A698C
mov r0, #0xc
bl WcmSetPhase
ldr r0, _020A6A5C ; =wcmw
ldr r3, _020A6A64 ; =0x000006AF
ldr r1, [r0, #0x0]
mov r2, #0x0
add r0, r1, #0x2200
ldrsh r0, [r0, #0x80]
cmp r0, #0x5
addeq r1, r1, #0x2140
movne r1, #0x0
mov r0, #0x1
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A698C:
mov r0, #0xb
bl WcmSetPhase
ldr r0, _020A6A5C ; =wcmw
ldr r3, _020A6A68 ; =0x000006B8
ldr r1, [r0, #0x0]
mov r2, #0x0
add r0, r1, #0x2200
ldrsh r0, [r0, #0x80]
cmp r0, #0x5
addeq r1, r1, #0x2140
movne r1, #0x0
mov r0, #0x7
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A69CC:
mov r0, #0xc
bl WcmSetPhase
ldr r0, _020A6A5C ; =wcmw
ldr r3, _020A6A6C ; =0x000006DE
ldr r1, [r0, #0x0]
mov r2, #0x0
add r0, r1, #0x2200
ldrsh r0, [r0, #0x80]
cmp r0, #0x5
addeq r1, r1, #0x2140
movne r1, #0x0
mov r0, #0x1
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A6A0C:
mov r0, #0xb
bl WcmSetPhase
ldr r0, _020A6A5C ; =wcmw
ldr r3, _020A6A70 ; =0x000006E8
ldr r1, [r0, #0x0]
mov r2, #0x0
add r0, r1, #0x2200
ldrsh r0, [r0, #0x80]
cmp r0, #0x5
addeq r1, r1, #0x2140
movne r1, #0x0
mov r0, #0x7
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020A6A4C: .word WcmWmcbCommon
_020A6A50: .word 0x00000663
_020A6A54: .word 0x0000066C
_020A6A58: .word 0x00000673
_020A6A5C: .word wcmw
_020A6A60: .word WcmWmcbConnect
_020A6A64: .word 0x000006AF
_020A6A68: .word 0x000006B8
_020A6A6C: .word 0x000006DE
_020A6A70: .word 0x000006E8
arm_func_start WcmWmcbIndication
WcmWmcbIndication: ; 0x020A6A74
stmdb sp!, {lr}
sub sp, sp, #0x4
ldrh r1, [r0, #0x2]
cmp r1, #0x8
addne sp, sp, #0x4
ldmneia sp!, {lr}
bxne lr
ldrh r1, [r0, #0x4]
cmp r1, #0x16
addne sp, sp, #0x4
ldmneia sp!, {lr}
bxne lr
ldrh r0, [r0, #0x6]
cmp r0, #0x25
addne sp, sp, #0x4
ldmneia sp!, {lr}
bxne lr
ldr r0, _020A6B24 ; =wcmw
ldr r0, [r0, #0x0]
add r0, r0, #0x2000
ldr r0, [r0, #0x260]
sub r0, r0, #0x8
cmp r0, #0x4
addls pc, pc, r0, lsl #0x2
b _020A6B18
_020A6AD8: ; jump table
b _020A6AEC ; case 0
b _020A6B00 ; case 1
b _020A6B10 ; case 2
b _020A6B18 ; case 3
b _020A6B00 ; case 4
_020A6AEC:
mov r0, #0xc
bl WcmSetPhase
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A6B00:
bl WcmWmReset
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A6B10:
mov r0, #0xc
bl WcmSetPhase
_020A6B18:
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020A6B24: .word wcmw
arm_func_start WcmWmReset
WcmWmReset: ; 0x020A6B28
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r0, _020A6B98 ; =wcmw
ldr r0, [r0, #0x0]
add r1, r0, #0x2000
ldrb r0, [r1, #0x26b]
cmp r0, #0x0
addne sp, sp, #0x4
ldmneia sp!, {lr}
bxne lr
ldr r0, _020A6B9C ; =WcmWcmbReset
mov r2, #0x1
strb r2, [r1, #0x26b]
bl WM_Reset
cmp r0, #0x2
addeq sp, sp, #0x4
ldmeqia sp!, {lr}
bxeq lr
mov r0, #0xb
bl WcmSetPhase
mov r1, #0x0
mov r2, r1
mov r0, #0x7
mov r3, #0x610
bl WcmNotify
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020A6B98: .word wcmw
_020A6B9C: .word WcmWcmbReset
arm_func_start WcmKeepAliveAlarm
WcmKeepAliveAlarm: ; 0x020A6BA0
stmdb sp!, {lr}
sub sp, sp, #0x4
bl WCMi_CpsifSendNullPacket
bl WCMi_ResetKeepAliveAlarm
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
arm_func_start WCMi_ResetKeepAliveAlarm
WCMi_ResetKeepAliveAlarm: ; 0x020A6BBC
stmdb sp!, {r4,lr}
sub sp, sp, #0x8
bl OS_DisableInterrupts
ldr r2, _020A6C28 ; =wcmw
ldr r1, _020A6C2C ; =0x000022CC
ldr r2, [r2, #0x0]
mov r4, r0
add r0, r2, r1
bl OS_CancelAlarm
ldr r0, _020A6C28 ; =wcmw
ldr r12, [r0, #0x0]
add r0, r12, #0x2000
ldr r0, [r0, #0x260]
cmp r0, #0x9
bne _020A6C14
ldr r0, _020A6C2C ; =0x000022CC
ldr r1, _020A6C30 ; =0x022F5341
mov r2, #0x0
ldr r3, _020A6C34 ; =WcmKeepAliveAlarm
add r0, r12, r0
str r2, [sp, #0x0]
bl OS_SetAlarm
_020A6C14:
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x8
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020A6C28: .word wcmw
_020A6C2C: .word 0x000022CC
_020A6C30: .word 0x022F5341
_020A6C34: .word WcmKeepAliveAlarm
arm_func_start WcmSetPhase
WcmSetPhase:
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
bl OS_DisableInterrupts
ldr r1, _020A6CD0 ; =wcmw
mov r4, r0
ldr r1, [r1, #0x0]
add r0, r1, #0x2000
ldr r0, [r0, #0x260]
cmp r0, #0x9
bne _020A6C78
cmp r5, #0x9
beq _020A6C78
ldr r0, _020A6CD4 ; =0x000022CC
add r0, r1, r0
bl OS_CancelAlarm
_020A6C78:
ldr r0, _020A6CD0 ; =wcmw
ldr r0, [r0, #0x0]
add r0, r0, #0x2000
ldr r1, [r0, #0x260]
cmp r1, #0xb
strne r5, [r0, #0x260]
cmp r5, #0x9
bne _020A6CBC
mov r2, #0x0
ldr r0, _020A6CD0 ; =wcmw
str r2, [sp, #0x0]
ldr r5, [r0, #0x0]
ldr r0, _020A6CD4 ; =0x000022CC
ldr r1, _020A6CD8 ; =0x022F5341
ldr r3, _020A6CDC ; =WcmKeepAliveAlarm
add r0, r5, r0
bl OS_SetAlarm
_020A6CBC:
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020A6CD0: .word wcmw
_020A6CD4: .word 0x000022CC
_020A6CD8: .word 0x022F5341
_020A6CDC: .word WcmKeepAliveAlarm
arm_func_start WcmNotifyEx
WcmNotifyEx: ; 0x020A6CE0
stmdb sp!, {lr}
sub sp, sp, #0x14
ldr ip, _020A6D38 ; =wcmw
ldr r12, [r12, #0x0]
add r12, r12, #0x2000
ldr lr, [r12, #0x27c]
cmp lr, #0x0
addeq sp, sp, #0x14
ldmeqia sp!, {lr}
bxeq lr
ldr lr, [sp, #0x18]
strh r0, [sp, #0x0]
str r2, [sp, #0x4]
str r3, [sp, #0x8]
str lr, [sp, #0xc]
strh r1, [sp, #0x2]
ldr r1, [r12, #0x27c]
add r0, sp, #0x0
blx r1
add sp, sp, #0x14
ldmia sp!, {lr}
bx lr
.balign 4
_020A6D38: .word wcmw
arm_func_start WcmNotify
WcmNotify: ; 0x020A6D3C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
ldr ip, _020A6D88 ; =wcmw
mov r5, r0
ldr r0, [r12, #0x0]
mov r4, r1
add r1, r0, #0x2200
ldrsh r0, [r1, #0x80]
mov r12, #0x0
mov lr, r2
strh r12, [r1, #0x80]
str r3, [sp, #0x0]
mov r1, r5
mov r2, r4
mov r3, lr
bl WcmNotifyEx
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020A6D88: .word wcmw
arm_func_start WcmGetNextScanChannel
WcmGetNextScanChannel: ; 0x020A6D8C
stmdb sp!, {r4-r6,lr}
ldr r1, _020A6E24 ; =wcmw
mov r2, r0
ldr r1, [r1, #0x0]
mov r3, #0x0
add r1, r1, #0x2000
ldr r1, [r1, #0x264]
mov r6, #0x1
ldr r5, _020A6E28 ; =0x4EC4EC4F
ldr r4, _020A6E2C ; =0x0000000D
_020A6DB4:
smull r12, lr, r5, r2
mov lr, lr, asr #0x2
mov r12, r2, lsr #0x1f
add lr, r12, lr
smull r12, lr, r4, lr
sub lr, r2, r12
add r12, lr, #0x1
mov r12, r6, lsl r12
ands r12, r1, r12
bne _020A6DEC
add r3, r3, #0x1
cmp r3, #0xd
add r2, r2, #0x1
blt _020A6DB4
_020A6DEC:
ldr r1, _020A6E28 ; =0x4EC4EC4F
add r3, r0, r3
smull r0, r4, r1, r3
mov r4, r4, asr #0x2
mov r0, r3, lsr #0x1f
ldr r2, _020A6E2C ; =0x0000000D
add r4, r0, r4
smull r0, r1, r2, r4
sub r4, r3, r0
add r0, r4, #0x1
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
ldmia sp!, {r4-r6,lr}
bx lr
.balign 4
_020A6E24: .word wcmw
_020A6E28: .word 0x4EC4EC4F
_020A6E2C: .word 0x0000000D
arm_func_start WcmInitOption
WcmInitOption: ; 0x020A6E30
ldr r0, _020A6E48 ; =wcmw
ldr r1, _020A6E4C ; =0x00AAA082
ldr r0, [r0, #0x0]
add r0, r0, #0x2000
str r1, [r0, #0x264]
bx lr
.balign 4
_020A6E48: .word wcmw
_020A6E4C: .word 0x00AAA082
arm_func_start WcmEditScanExParam
WcmEditScanExParam: ; 0x020A6E50
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
mov r0, r2
mov r4, r1
bl WCM_UpdateOption
ldr r2, _020A6FF4 ; =wcmw
mov r3, #0x400
ldr r1, [r2, #0x0]
mov r0, #0x0
add r12, r1, #0x1500
add r1, r1, #0x2000
str r12, [r1, #0x288]
ldr r1, [r2, #0x0]
add r1, r1, #0x2200
strh r3, [r1, #0x8c]
bl WcmGetNextScanChannel
ldr r1, _020A6FF4 ; =wcmw
mov r2, #0x1
mov r2, r2, lsl r0
ldr r0, [r1, #0x0]
mov r2, r2, asr #0x1
add r0, r0, #0x2200
strh r2, [r0, #0x8e]
ldr r0, [r1, #0x0]
add r0, r0, #0x2200
ldrh r0, [r0, #0x68]
cmp r0, #0x0
bne _020A6EC8
bl WM_GetDispersionScanPeriod
_020A6EC8:
ldr r2, _020A6FF4 ; =wcmw
ldr r1, [r2, #0x0]
add r1, r1, #0x2200
strh r0, [r1, #0x90]
ldr r1, [r2, #0x0]
add r0, r1, #0x2000
ldr r0, [r0, #0x264]
and r0, r0, #0x300000
cmp r0, #0x300000
movne r2, #0x1
moveq r2, #0x0
add r0, r1, #0x2200
strh r2, [r0, #0x98]
cmp r5, #0x0
bne _020A6F24
ldr r0, _020A6FF4 ; =wcmw
ldr r1, _020A6FF8 ; =0x00002292
ldr r2, [r0, #0x0]
ldr r0, _020A6FFC ; =WCM_Bssid_Any
add r1, r2, r1
mov r2, #0x6
bl MI_CpuCopy8
b _020A6F40
_020A6F24:
ldr r0, _020A6FF4 ; =wcmw
ldr r1, _020A6FF8 ; =0x00002292
ldr r2, [r0, #0x0]
mov r0, r5
add r1, r2, r1
mov r2, #0x6
bl MI_CpuCopy8
_020A6F40:
cmp r4, #0x0
beq _020A6F54
ldr r0, _020A7000 ; =WCM_Essid_Any
cmp r4, r0
bne _020A6F88
_020A6F54:
ldr r0, _020A6FF4 ; =wcmw
ldr r1, _020A7004 ; =0x0000229C
ldr r2, [r0, #0x0]
ldr r0, _020A7000 ; =WCM_Essid_Any
add r1, r2, r1
mov r2, #0x20
bl MI_CpuCopy8
ldr r0, _020A6FF4 ; =wcmw
mov r1, #0x0
ldr r0, [r0, #0x0]
add r0, r0, #0x2200
strh r1, [r0, #0x9a]
b _020A6FD4
_020A6F88:
ldr r0, _020A6FF4 ; =wcmw
ldr r1, _020A7004 ; =0x0000229C
ldr r2, [r0, #0x0]
mov r0, r4
add r1, r2, r1
mov r2, #0x20
bl MI_CpuCopy8
mov r1, #0x0
_020A6FA8:
ldrb r0, [r4, #0x0]
cmp r0, #0x0
beq _020A6FC4
add r1, r1, #0x1
cmp r1, #0x20
add r4, r4, #0x1
blt _020A6FA8
_020A6FC4:
ldr r0, _020A6FF4 ; =wcmw
ldr r0, [r0, #0x0]
add r0, r0, #0x2200
strh r1, [r0, #0x9a]
_020A6FD4:
ldr r0, _020A6FF4 ; =wcmw
mov r1, #0x0
ldr r0, [r0, #0x0]
add r0, r0, #0x2000
str r1, [r0, #0x284]
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020A6FF4: .word wcmw
_020A6FF8: .word 0x00002292
_020A6FFC: .word WCM_Bssid_Any
_020A7000: .word WCM_Essid_Any
_020A7004: .word 0x0000229C
arm_func_start WcmConfigure
WcmConfigure: ; 0x020A7008
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
movs r5, r0
mov r4, r1
bne _020A705C
ldr r1, _020A7134 ; =wcmw
mov r3, #0x3
ldr r0, [r1, #0x0]
mov r2, #0x0
add r0, r0, #0x2000
str r3, [r0, #0x26c]
ldr r0, [r1, #0x0]
add r0, r0, #0x2000
str r2, [r0, #0x270]
ldr r0, [r1, #0x0]
add r0, r0, #0x2000
str r2, [r0, #0x274]
ldr r0, [r1, #0x0]
add r0, r0, #0x2000
str r2, [r0, #0x278]
b _020A7118
_020A705C:
ldr r1, _020A7134 ; =wcmw
ldr r2, [r5, #0x0]
ldr r0, [r1, #0x0]
and r2, r2, #0x3
add r0, r0, #0x2000
str r2, [r0, #0x26c]
ldr r3, [r5, #0x4]
ldr r0, [r5, #0x8]
and r2, r3, #0x3
rsb r2, r2, #0x4
and r2, r2, #0x3
add r2, r2, #0xc
cmp r2, r0
bls _020A70B4
ldr r0, [r1, #0x0]
mov r2, #0x0
add r0, r0, #0x2000
str r2, [r0, #0x270]
ldr r0, [r1, #0x0]
add r0, r0, #0x2000
str r2, [r0, #0x274]
b _020A7104
_020A70B4:
ldr r0, [r1, #0x0]
add r2, r3, #0x3
bic r2, r2, #0x3
add r0, r0, #0x2000
str r2, [r0, #0x270]
ldr r2, [r5, #0x4]
ldr r0, [r1, #0x0]
and r2, r2, #0x3
rsb r2, r2, #0x4
ldr r3, [r5, #0x8]
and r2, r2, #0x3
sub r2, r3, r2
add r0, r0, #0x2000
str r2, [r0, #0x274]
ldr r0, [r1, #0x0]
mov r1, #0x0
add r2, r0, #0x2000
ldr r0, [r2, #0x270]
ldr r2, [r2, #0x274]
bl MI_CpuFill8
_020A7104:
ldr r0, _020A7134 ; =wcmw
ldr r1, [r5, #0xc]
ldr r0, [r0, #0x0]
add r0, r0, #0x2000
str r1, [r0, #0x278]
_020A7118:
ldr r0, _020A7134 ; =wcmw
ldr r0, [r0, #0x0]
add r0, r0, #0x2000
str r4, [r0, #0x27c]
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020A7134: .word wcmw
arm_func_start WCMi_GetSystemWork
WCMi_GetSystemWork:
ldr r0, _020A7144 ; =wcmw
ldr r0, [r0, #0x0]
bx lr
.balign 4
_020A7144: .word wcmw
arm_func_start WCM_UpdateOption
WCM_UpdateOption: ; 0x020A7148
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r0
bl OS_DisableInterrupts
ldr r1, _020A71EC ; =wcmw
mov r2, #0x0
ldr r1, [r1, #0x0]
add r3, r1, #0x2000
cmp r1, #0x0
ldr r4, [r3, #0x264]
bne _020A7188
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x0
ldmia sp!, {r4-r5,lr}
bx lr
_020A7188:
ands r3, r5, #0x8000
beq _020A71A4
ldr r3, _020A71F0 ; =0x00003FFE
orr r2, r2, r3
ands r3, r5, r3
ldreq r3, _020A71F4 ; =0x0000A082
orreq r5, r5, r3
_020A71A4:
ands r3, r5, #0x20000
orrne r2, r2, #0x10000
ands r3, r5, #0x80000
orrne r2, r2, #0x40000
ands r3, r5, #0x200000
orrne r2, r2, #0x100000
ands r3, r5, #0x800000
orrne r2, r2, #0x400000
mvn r2, r2
and r2, r4, r2
orr r2, r5, r2
add r1, r1, #0x2000
str r2, [r1, #0x264]
bl OS_RestoreInterrupts
mov r0, r4
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020A71EC: .word wcmw
_020A71F0: .word 0x00003FFE
_020A71F4: .word 0x0000A082
arm_func_start WCM_GetPhase
WCM_GetPhase: ; 0x020A71F8
stmdb sp!, {r4,lr}
bl OS_DisableInterrupts
ldr r1, _020A7228 ; =wcmw
mov r4, #0x0
ldr r1, [r1, #0x0]
cmp r1, #0x0
addne r1, r1, #0x2000
ldrne r4, [r1, #0x260]
bl OS_RestoreInterrupts
mov r0, r4
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020A7228: .word wcmw
arm_func_start WCM_TerminateAsync
WCM_TerminateAsync: ; 0x020A722C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
bl OS_DisableInterrupts
ldr r1, _020A747C ; =wcmw
mov r4, r0
ldr r1, [r1, #0x0]
cmp r1, #0x0
bne _020A7260
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r5,lr}
bx lr
_020A7260:
add r1, r1, #0x2000
ldr r2, [r1, #0x260]
cmp r2, #0xd
addls pc, pc, r2, lsl #0x2
b _020A7308
_020A7274: ; jump table
b _020A7308 ; case 0
b _020A72C0 ; case 1
b _020A7308 ; case 2
b _020A7320 ; case 3
b _020A7308 ; case 4
b _020A7308 ; case 5
b _020A72D4 ; case 6
b _020A7308 ; case 7
b _020A7308 ; case 8
b _020A7320 ; case 9
b _020A7308 ; case 10
b _020A7308 ; case 11
b _020A7320 ; case 12
b _020A72AC ; case 13
_020A72AC:
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x2
ldmia sp!, {r4-r5,lr}
bx lr
_020A72C0:
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x0
ldmia sp!, {r4-r5,lr}
bx lr
_020A72D4:
mov r0, #0xd
bl WcmSetPhase
ldr r1, _020A747C ; =wcmw
mov r0, r4
ldr r1, [r1, #0x0]
mov r2, #0x9
add r1, r1, #0x2200
strh r2, [r1, #0x80]
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x3
ldmia sp!, {r4-r5,lr}
bx lr
_020A7308:
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r5,lr}
bx lr
_020A7320:
ldrb r0, [r1, #0x26b]
cmp r0, #0x1
bne _020A734C
mov r0, #0xd
bl WcmSetPhase
ldr r0, _020A747C ; =wcmw
mov r1, #0x9
ldr r0, [r0, #0x0]
add r0, r0, #0x2200
strh r1, [r0, #0x80]
b _020A7464
_020A734C:
bl WMi_GetStatusAddress
mov r5, r0
mov r1, #0x2
bl DC_InvalidateRange
ldrh r0, [r5, #0x0]
cmp r0, #0x0
beq _020A737C
cmp r0, #0x1
beq _020A73BC
cmp r0, #0x2
beq _020A73C8
b _020A73D4
_020A737C:
bl WM_Finish
cmp r0, #0x0
bne _020A73F0
mov r0, #0x1
bl WcmSetPhase
ldr r1, _020A747C ; =wcmw
mov r0, r4
ldr r1, [r1, #0x0]
mov r2, #0x0
add r1, r1, #0x2200
strh r2, [r1, #0x80]
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x0
ldmia sp!, {r4-r5,lr}
bx lr
_020A73BC:
ldr r0, _020A7480 ; =WcmWmcbCommon
bl WM_Disable
b _020A73F0
_020A73C8:
ldr r0, _020A7480 ; =WcmWmcbCommon
bl WM_PowerOff
b _020A73F0
_020A73D4:
ldr r1, _020A747C ; =wcmw
ldr r0, _020A7484 ; =WcmWcmbReset
ldr r1, [r1, #0x0]
mov r2, #0x1
add r1, r1, #0x2000
strb r2, [r1, #0x26b]
bl WM_Reset
_020A73F0:
cmp r0, #0x2
beq _020A740C
cmp r0, #0x3
beq _020A7444
cmp r0, #0x8
beq _020A742C
b _020A7444
_020A740C:
mov r0, #0xd
bl WcmSetPhase
ldr r0, _020A747C ; =wcmw
mov r1, #0x9
ldr r0, [r0, #0x0]
add r0, r0, #0x2200
strh r1, [r0, #0x80]
b _020A7464
_020A742C:
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
_020A7444:
mov r0, #0xb
bl WcmSetPhase
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x7
ldmia sp!, {r4-r5,lr}
bx lr
_020A7464:
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x3
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020A747C: .word wcmw
_020A7480: .word WcmWmcbCommon
_020A7484: .word WcmWcmbReset
arm_func_start WCM_DisconnectAsync
WCM_DisconnectAsync: ; 0x020A7488
stmdb sp!, {r4,lr}
bl OS_DisableInterrupts
ldr r1, _020A75B8 ; =wcmw
mov r4, r0
ldr r1, [r1, #0x0]
cmp r1, #0x0
bne _020A74B4
bl OS_RestoreInterrupts
mov r0, #0x1
ldmia sp!, {r4,lr}
bx lr
_020A74B4:
add r1, r1, #0x2000
ldr r2, [r1, #0x260]
cmp r2, #0x3
beq _020A74E4
cmp r2, #0x9
beq _020A7504
cmp r2, #0xa
bne _020A74F4
bl OS_RestoreInterrupts
mov r0, #0x2
ldmia sp!, {r4,lr}
bx lr
_020A74E4:
bl OS_RestoreInterrupts
mov r0, #0x0
ldmia sp!, {r4,lr}
bx lr
_020A74F4:
bl OS_RestoreInterrupts
mov r0, #0x1
ldmia sp!, {r4,lr}
bx lr
_020A7504:
ldrb r0, [r1, #0x26b]
cmp r0, #0x1
bne _020A7530
mov r0, #0xa
bl WcmSetPhase
ldr r0, _020A75B8 ; =wcmw
mov r1, #0x6
ldr r0, [r0, #0x0]
add r0, r0, #0x2200
strh r1, [r0, #0x80]
b _020A75A4
_020A7530:
ldr r0, _020A75BC ; =WcmWmcbEndDCF
bl WM_EndDCF
cmp r0, #0x2
beq _020A7554
cmp r0, #0x3
beq _020A7588
cmp r0, #0x8
beq _020A7574
b _020A7588
_020A7554:
mov r0, #0xa
bl WcmSetPhase
ldr r0, _020A75B8 ; =wcmw
mov r1, #0x6
ldr r0, [r0, #0x0]
add r0, r0, #0x2200
strh r1, [r0, #0x80]
b _020A75A4
_020A7574:
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x4
ldmia sp!, {r4,lr}
bx lr
_020A7588:
mov r0, #0xb
bl WcmSetPhase
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x7
ldmia sp!, {r4,lr}
bx lr
_020A75A4:
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x3
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020A75B8: .word wcmw
_020A75BC: .word WcmWmcbEndDCF
arm_func_start WCM_ConnectAsync
WCM_ConnectAsync: ; 0x020A75C0
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
mov r6, r1
mov r5, r2
bl OS_DisableInterrupts
ldr r2, _020A7814 ; =wcmw
mov r4, r0
ldr r12, [r2, #0x0]
cmp r12, #0x0
bne _020A7600
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r7,lr}
bx lr
_020A7600:
add r1, r12, #0x2000
ldr r3, [r1, #0x260]
cmp r3, #0x3
beq _020A7624
cmp r3, #0x8
beq _020A7734
cmp r3, #0x9
beq _020A7748
b _020A775C
_020A7624:
cmp r7, #0x0
bne _020A7640
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r7,lr}
bx lr
_020A7640:
ldrh r3, [r7, #0x3c]
cmp r3, #0x0
beq _020A7660
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r7,lr}
bx lr
_020A7660:
cmp r6, #0x0
beq _020A76E8
ldrb r3, [r6, #0x0]
cmp r3, #0x4
bhs _020A7680
ldrb r0, [r6, #0x1]
cmp r0, #0x4
blo _020A7698
_020A7680:
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r7,lr}
bx lr
_020A7698:
strb r3, [r1, #0x250]
ldr r0, [r2, #0x0]
ldrb r1, [r6, #0x1]
add r0, r0, #0x2000
strb r1, [r0, #0x251]
ldr r1, [r2, #0x0]
add r0, r1, #0x2000
ldrb r0, [r0, #0x250]
cmp r0, #0x0
bne _020A76D4
add r0, r1, #0x2200
mov r1, #0x0
mov r2, #0x50
bl MI_CpuFill8
b _020A76F8
_020A76D4:
add r0, r6, #0x2
add r1, r1, #0x2200
mov r2, #0x50
bl MI_CpuCopy8
b _020A76F8
_020A76E8:
add r0, r12, #0x2200
mov r1, #0x0
mov r2, #0x52
bl MI_CpuFill8
_020A76F8:
ldr r1, _020A7814 ; =wcmw
mov r0, r7
ldr r1, [r1, #0x0]
mov r2, #0xc0
add r1, r1, #0x2140
bl MI_CpuCopy8
ldr r1, _020A7814 ; =wcmw
mov r0, r5
ldr r1, [r1, #0x0]
add r1, r1, #0x2100
ldrh r2, [r1, #0x6e]
orr r2, r2, #0x3
strh r2, [r1, #0x70]
bl WCM_UpdateOption
b _020A7770
_020A7734:
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x2
ldmia sp!, {r4-r7,lr}
bx lr
_020A7748:
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x0
ldmia sp!, {r4-r7,lr}
bx lr
_020A775C:
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r7,lr}
bx lr
_020A7770:
ldr r1, _020A7818 ; =0x0000FFFF
ldr r0, _020A781C ; =WcmWmcbCommon
mov r3, r1
mov r2, #0x50
str r1, [sp, #0x0]
bl WM_SetLifeTime
cmp r0, #0x2
beq _020A77A4
cmp r0, #0x3
beq _020A77DC
cmp r0, #0x8
beq _020A77C4
b _020A77DC
_020A77A4:
mov r0, #0x8
bl WcmSetPhase
ldr r0, _020A7814 ; =wcmw
mov r1, #0x5
ldr r0, [r0, #0x0]
add r0, r0, #0x2200
strh r1, [r0, #0x80]
b _020A77FC
_020A77C4:
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
_020A77DC:
mov r0, #0xb
bl WcmSetPhase
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x7
ldmia sp!, {r4-r7,lr}
bx lr
_020A77FC:
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x3
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
_020A7814: .word wcmw
_020A7818: .word 0x0000FFFF
_020A781C: .word WcmWmcbCommon
arm_func_start WCM_EndSearchAsync
WCM_EndSearchAsync: ; 0x020A7820
stmdb sp!, {r4,lr}
bl OS_DisableInterrupts
ldr r1, _020A78D4 ; =wcmw
mov r4, r0
ldr r1, [r1, #0x0]
cmp r1, #0x0
bne _020A784C
bl OS_RestoreInterrupts
mov r0, #0x1
ldmia sp!, {r4,lr}
bx lr
_020A784C:
add r1, r1, #0x2000
ldr r1, [r1, #0x260]
cmp r1, #0x3
beq _020A78A0
cmp r1, #0x6
beq _020A7870
cmp r1, #0x7
beq _020A7890
b _020A78B0
_020A7870:
mov r0, #0x7
bl WcmSetPhase
ldr r0, _020A78D4 ; =wcmw
mov r1, #0x4
ldr r0, [r0, #0x0]
add r0, r0, #0x2200
strh r1, [r0, #0x80]
b _020A78C0
_020A7890:
bl OS_RestoreInterrupts
mov r0, #0x2
ldmia sp!, {r4,lr}
bx lr
_020A78A0:
bl OS_RestoreInterrupts
mov r0, #0x0
ldmia sp!, {r4,lr}
bx lr
_020A78B0:
bl OS_RestoreInterrupts
mov r0, #0x1
ldmia sp!, {r4,lr}
bx lr
_020A78C0:
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x3
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020A78D4: .word wcmw
arm_func_start WCM_BeginSearchAsync
WCM_BeginSearchAsync: ; 0x020A78D8
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
mov r6, r1
mov r5, r2
bl OS_DisableInterrupts
ldr r1, _020A7A84 ; =wcmw
mov r4, r0
ldr r1, [r1, #0x0]
cmp r1, #0x0
bne _020A7918
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r7,lr}
bx lr
_020A7918:
add r1, r1, #0x2000
ldr r1, [r1, #0x260]
cmp r1, #0x3
beq _020A79A0
cmp r1, #0x5
beq _020A793C
cmp r1, #0x6
beq _020A7964
b _020A798C
_020A793C:
mov r0, r7
mov r1, r6
mov r2, r5
bl WcmEditScanExParam
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x2
ldmia sp!, {r4-r7,lr}
bx lr
_020A7964:
mov r0, r7
mov r1, r6
mov r2, r5
bl WcmEditScanExParam
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x0
ldmia sp!, {r4-r7,lr}
bx lr
_020A798C:
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r7,lr}
bx lr
_020A79A0:
mov r0, r7
mov r1, r6
mov r2, r5
bl WcmEditScanExParam
ldr r0, _020A7A84 ; =wcmw
ldr r0, [r0, #0x0]
add r1, r0, #0x2200
add r0, r0, #0x2000
ldrh r1, [r1, #0x8c]
ldr r0, [r0, #0x288]
bl DC_InvalidateRange
ldr r3, _020A7A84 ; =wcmw
ldr r2, _020A7A88 ; =0x00002288
ldr r1, [r3, #0x0]
ldr r0, _020A7A8C ; =WcmWmcbScanEx
add r1, r1, #0x2000
ldr r5, [r1, #0x284]
add r5, r5, #0x1
str r5, [r1, #0x284]
ldr r1, [r3, #0x0]
add r1, r1, r2
bl WM_StartScanEx
cmp r0, #0x2
beq _020A7A14
cmp r0, #0x3
beq _020A7A4C
cmp r0, #0x8
beq _020A7A34
b _020A7A4C
_020A7A14:
mov r0, #0x5
bl WcmSetPhase
ldr r0, _020A7A84 ; =wcmw
mov r1, #0x3
ldr r0, [r0, #0x0]
add r0, r0, #0x2200
strh r1, [r0, #0x80]
b _020A7A6C
_020A7A34:
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
_020A7A4C:
mov r0, #0xb
bl WcmSetPhase
mov r0, r4
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x7
ldmia sp!, {r4-r7,lr}
bx lr
_020A7A6C:
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x3
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
_020A7A84: .word wcmw
_020A7A88: .word 0x00002288
_020A7A8C: .word WcmWmcbScanEx
arm_func_start WCM_SearchAsync
WCM_SearchAsync: ; 0x020A7A90
stmdb sp!, {lr}
sub sp, sp, #0x4
cmp r0, #0x0
beq _020A7AA8
cmp r1, #0x0
bne _020A7AB8
_020A7AA8:
bl WCM_EndSearchAsync
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
_020A7AB8:
bl WCM_BeginSearchAsync
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
arm_func_start WCM_CleanupAsync
WCM_CleanupAsync: ; 0x020A7AC8
stmdb sp!, {r4,lr}
bl OS_DisableInterrupts
ldr r1, _020A7BCC ; =wcmw
mov r4, r0
ldr r1, [r1, #0x0]
cmp r1, #0x0
bne _020A7AF4
bl OS_RestoreInterrupts
mov r0, #0x1
ldmia sp!, {r4,lr}
bx lr
_020A7AF4:
add r1, r1, #0x2000
ldr r1, [r1, #0x260]
cmp r1, #0x1
beq _020A7B24
cmp r1, #0x3
beq _020A7B44
cmp r1, #0x4
bne _020A7B34
bl OS_RestoreInterrupts
mov r0, #0x2
ldmia sp!, {r4,lr}
bx lr
_020A7B24:
bl OS_RestoreInterrupts
mov r0, #0x0
ldmia sp!, {r4,lr}
bx lr
_020A7B34:
bl OS_RestoreInterrupts
mov r0, #0x1
ldmia sp!, {r4,lr}
bx lr
_020A7B44:
ldr r0, _020A7BD0 ; =WcmWmcbCommon
bl WM_PowerOff
cmp r0, #0x2
beq _020A7B68
cmp r0, #0x3
beq _020A7B9C
cmp r0, #0x8
beq _020A7B88
b _020A7B9C
_020A7B68:
mov r0, #0x4
bl WcmSetPhase
ldr r0, _020A7BCC ; =wcmw
mov r1, #0x2
ldr r0, [r0, #0x0]
add r0, r0, #0x2200
strh r1, [r0, #0x80]
b _020A7BB8
_020A7B88:
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x4
ldmia sp!, {r4,lr}
bx lr
_020A7B9C:
mov r0, #0xb
bl WcmSetPhase
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x7
ldmia sp!, {r4,lr}
bx lr
_020A7BB8:
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x3
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020A7BCC: .word wcmw
_020A7BD0: .word WcmWmcbCommon
arm_func_start WCM_StartupAsync
WCM_StartupAsync: ; 0x020A7BD4
stmdb sp!, {r4-r6,lr}
mov r6, r0
mov r5, r1
bl OS_DisableInterrupts
ldr r1, _020A7E00 ; =wcmw
mov r4, r0
ldr r1, [r1, #0x0]
cmp r1, #0x0
bne _020A7C08
bl OS_RestoreInterrupts
mov r0, #0x1
ldmia sp!, {r4-r6,lr}
bx lr
_020A7C08:
add r1, r1, #0x2000
ldr r1, [r1, #0x260]
cmp r1, #0x1
beq _020A7C2C
cmp r1, #0x2
beq _020A7C3C
cmp r1, #0x3
beq _020A7C4C
b _020A7C5C
_020A7C2C:
mov r0, r6
mov r1, r5
bl WcmConfigure
b _020A7C6C
_020A7C3C:
bl OS_RestoreInterrupts
mov r0, #0x2
ldmia sp!, {r4-r6,lr}
bx lr
_020A7C4C:
bl OS_RestoreInterrupts
mov r0, #0x0
ldmia sp!, {r4-r6,lr}
bx lr
_020A7C5C:
bl OS_RestoreInterrupts
mov r0, #0x1
ldmia sp!, {r4-r6,lr}
bx lr
_020A7C6C:
ldr r0, _020A7E00 ; =wcmw
ldr r0, [r0, #0x0]
add r1, r0, #0x2000
ldr r1, [r1, #0x26c]
mov r1, r1, lsl #0x10
mov r1, r1, lsr #0x10
bl WM_Init
cmp r0, #0x6
addls pc, pc, r0, lsl #0x2
b _020A7CE0
_020A7C94: ; jump table
b _020A7CFC ; case 0
b _020A7CE0 ; case 1
b _020A7CE0 ; case 2
b _020A7CB0 ; case 3
b _020A7CCC ; case 4
b _020A7CE0 ; case 5
b _020A7CE0 ; case 6
_020A7CB0:
mov r0, #0xb
bl WcmSetPhase
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x7
ldmia sp!, {r4-r6,lr}
bx lr
_020A7CCC:
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x5
ldmia sp!, {r4-r6,lr}
bx lr
_020A7CE0:
mov r0, #0xb
bl WcmSetPhase
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x7
ldmia sp!, {r4-r6,lr}
bx lr
_020A7CFC:
bl WM_GetAllowedChannel
cmp r0, #0x0
bne _020A7D44
bl WM_Finish
cmp r0, #0x0
beq _020A7D30
mov r0, #0xb
bl WcmSetPhase
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x7
ldmia sp!, {r4-r6,lr}
bx lr
_020A7D30:
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x5
ldmia sp!, {r4-r6,lr}
bx lr
_020A7D44:
ldr r0, _020A7E04 ; =WcmWmcbIndication
bl WM_SetIndCallback
cmp r0, #0x0
beq _020A7D70
mov r0, #0xb
bl WcmSetPhase
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x7
ldmia sp!, {r4-r6,lr}
bx lr
_020A7D70:
ldr r0, _020A7E08 ; =WcmWmcbCommon
bl WM_Enable
cmp r0, #0x2
beq _020A7D94
cmp r0, #0x3
beq _020A7DD0
cmp r0, #0x8
beq _020A7DB4
b _020A7DD0
_020A7D94:
mov r0, #0x2
bl WcmSetPhase
ldr r0, _020A7E00 ; =wcmw
mov r1, #0x1
ldr r0, [r0, #0x0]
add r0, r0, #0x2200
strh r1, [r0, #0x80]
b _020A7DEC
_020A7DB4:
mov r0, #0xc
bl WcmSetPhase
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x1
ldmia sp!, {r4-r6,lr}
bx lr
_020A7DD0:
mov r0, #0xb
bl WcmSetPhase
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x7
ldmia sp!, {r4-r6,lr}
bx lr
_020A7DEC:
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x3
ldmia sp!, {r4-r6,lr}
bx lr
.balign 4
_020A7E00: .word wcmw
_020A7E04: .word WcmWmcbIndication
_020A7E08: .word WcmWmcbCommon
arm_func_start WCM_Finish
WCM_Finish: ; 0x020A7E0C
stmdb sp!, {lr}
sub sp, sp, #0x4
bl OS_DisableInterrupts
ldr r2, _020A7E7C ; =wcmw
ldr r1, [r2, #0x0]
cmp r1, #0x0
bne _020A7E3C
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {lr}
bx lr
_020A7E3C:
add r1, r1, #0x2000
ldr r1, [r1, #0x260]
cmp r1, #0x1
beq _020A7E60
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {lr}
bx lr
_020A7E60:
mov r1, #0x0
str r1, [r2, #0x0]
bl OS_RestoreInterrupts
mov r0, #0x0
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020A7E7C: .word wcmw
arm_func_start WCM_Init
WCM_Init: ; 0x020A7E80
stmdb sp!, {r4-r6,lr}
mov r6, r0
mov r5, r1
bl OS_DisableInterrupts
ldr r2, _020A7FA8 ; =wcmw
mov r4, r0
ldr r1, [r2, #0x0]
cmp r1, #0x0
beq _020A7EB4
bl OS_RestoreInterrupts
mov r0, #0x1
ldmia sp!, {r4-r6,lr}
bx lr
_020A7EB4:
cmp r6, #0x0
bne _020A7ECC
bl OS_RestoreInterrupts
mov r0, #0x1
ldmia sp!, {r4-r6,lr}
bx lr
_020A7ECC:
ands r1, r6, #0x1f
beq _020A7EE4
bl OS_RestoreInterrupts
mov r0, #0x1
ldmia sp!, {r4-r6,lr}
bx lr
_020A7EE4:
cmp r5, #0x2300
bhs _020A7EFC
bl OS_RestoreInterrupts
mov r0, #0x6
ldmia sp!, {r4-r6,lr}
bx lr
_020A7EFC:
str r6, [r2, #0x0]
add r0, r6, #0x2000
mov r1, #0x1
str r1, [r0, #0x260]
ldr r1, [r2, #0x0]
mov r0, #0x0
add r1, r1, #0x2200
strh r0, [r1, #0x80]
ldr r1, [r2, #0x0]
add r1, r1, #0x2200
strh r0, [r1, #0x68]
ldr r1, [r2, #0x0]
add r1, r1, #0x2000
strb r0, [r1, #0x26a]
ldr r1, [r2, #0x0]
add r1, r1, #0x2000
strb r0, [r1, #0x26b]
ldr r1, [r2, #0x0]
add r1, r1, #0x2200
strh r0, [r1, #0x82]
ldr r1, [r2, #0x0]
add r1, r1, #0x2200
strh r0, [r1, #0xf8]
bl WcmInitOption
bl WCMi_InitCpsif
bl OS_IsTickAvailable
cmp r0, #0x0
bne _020A7F70
bl OS_InitTick
_020A7F70:
bl OS_IsAlarmAvailable
cmp r0, #0x0
bne _020A7F80
bl OS_InitAlarm
_020A7F80:
ldr r1, _020A7FA8 ; =wcmw
ldr r0, _020A7FAC ; =0x000022CC
ldr r1, [r1, #0x0]
add r0, r1, r0
bl OS_CreateAlarm
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0x0
ldmia sp!, {r4-r6,lr}
bx lr
.balign 4
_020A7FA8: .word wcmw
_020A7FAC: .word 0x000022CC