.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