.include "asm/macros.inc" .include "global.inc" .section .text .balign 4, 0 arm_func_start MOD13_02211EA4 MOD13_02211EA4: ; 0x02211EA4 stmdb sp!, {lr} sub sp, sp, #4 strh r1, [sp] add r2, sp, #0 mov r1, #0xd bl MOD13_022130E8 add sp, sp, #4 ldmia sp!, {lr} bx lr arm_func_start MOD13_02211EC8 MOD13_02211EC8: ; 0x02211EC8 cmp r0, #1 blo _02211EDC cmp r0, #0xf movls r0, #1 bxls lr _02211EDC: mov r0, #0 bx lr arm_func_start MOD13_02211EE4 MOD13_02211EE4: ; 0x02211EE4 cmp r1, r0 movls r1, r0 mov r0, r1 bx lr arm_func_start MOD13_02211EF4 MOD13_02211EF4: ; 0x02211EF4 ldr r1, _02211F6C ; =0x02240A40 mov r2, #1 mov r2, r2, lsl r0 ldr r1, [r1] ands r1, r1, r2 bxeq lr ldr r2, _02211F70 ; =0x02240AFC ldr r1, _02211F74 ; =0x000005D4 ldr r2, [r2] mla r3, r0, r1, r2 add r0, r3, #0x1000 ldrb r0, [r0, #0xd52] cmp r0, #0 bxeq lr add r0, r3, #0x1d00 ldrh r1, [r0, #0x4c] cmp r1, #0 bxeq lr ldrh r2, [r0, #0x48] ldrh ip, [r0, #0x4a] cmp ip, r2 bhi _02211F60 add r1, ip, #2 cmp r2, r1 addle r1, r2, #1 strleh r1, [r0, #0x48] bxle lr _02211F60: add r0, r3, #0x1d00 strh ip, [r0, #0x48] bx lr .align 2, 0 _02211F6C: .word 0x02240A40 _02211F70: .word 0x02240AFC _02211F74: .word 0x000005D4 arm_func_start MOD13_02211F78 MOD13_02211F78: ; 0x02211F78 stmdb sp!, {r4, r5, lr} sub sp, sp, #0xc add r1, sp, #0 mov r0, #0 mov r2, #0xa bl MIi_CpuClear16 mov ip, #1 ldr r0, _022120FC ; =0x02240AFC mov r4, ip ldr r3, [r0] mov r5, ip mov r0, ip mov r1, ip mov r2, ip _02211FB0: sub lr, ip, #1 add lr, r3, lr, lsl #2 add lr, lr, #0x1000 ldr lr, [lr, #0x4e8] cmp lr, #0xb addls pc, pc, lr, lsl #2 b _02212048 _02211FCC: ; jump table b _02212048 ; case 0 b _02212048 ; case 1 b _02211FFC ; case 2 b _02212048 ; case 3 b _0221201C ; case 4 b _0221200C ; case 5 b _02212048 ; case 6 b _02212048 ; case 7 b _0221202C ; case 8 b _02212048 ; case 9 b _02212048 ; case 10 b _0221203C ; case 11 _02211FFC: ldrh lr, [sp] orr lr, lr, r2, lsl ip strh lr, [sp] b _02212048 _0221200C: ldrh lr, [sp, #2] orr lr, lr, r1, lsl ip strh lr, [sp, #2] b _02212048 _0221201C: ldrh lr, [sp, #4] orr lr, lr, r0, lsl ip strh lr, [sp, #4] b _02212048 _0221202C: ldrh lr, [sp, #6] orr lr, lr, r5, lsl ip strh lr, [sp, #6] b _02212048 _0221203C: ldrh lr, [sp, #8] orr lr, lr, r4, lsl ip strh lr, [sp, #8] _02212048: add ip, ip, #1 mov ip, ip, lsl #0x10 mov ip, ip, lsr #0x10 cmp ip, #0xf bls _02211FB0 ldrh r1, [sp, #6] cmp r1, #0 beq _02212074 mov r0, #5 bl MOD13_02212614 b _022120D4 _02212074: ldrh r1, [sp] cmp r1, #0 beq _0221208C mov r0, #1 bl MOD13_02212614 b _022120D4 _0221208C: ldrh r1, [sp, #8] cmp r1, #0 beq _022120A4 mov r0, #6 bl MOD13_02212614 b _022120D4 _022120A4: ldrh r1, [sp, #4] cmp r1, #0 beq _022120BC mov r0, #2 bl MOD13_02212614 b _022120D4 _022120BC: ldrh r0, [sp, #2] cmp r0, #0 beq _022120D0 bl MOD13_02212464 b _022120D4 _022120D0: bl MOD13_02212104 _022120D4: cmp r0, #0x15 addne sp, sp, #0xc ldmneia sp!, {r4, r5, lr} bxne lr ldr r1, _02212100 ; =0x0000FFFF mov r0, #0 bl MOD13_02212614 add sp, sp, #0xc ldmia sp!, {r4, r5, lr} bx lr .align 2, 0 _022120FC: .word 0x02240AFC _02212100: .word 0x0000FFFF arm_func_start MOD13_02212104 MOD13_02212104: ; 0x02212104 stmdb sp!, {r4, r5, r6, r7, lr} sub sp, sp, #0x1c ldr r5, _022123B0 ; =0x02240AFC ldr r0, [r5] add r0, r0, #0x1000 ldrb r0, [r0, #0x524] cmp r0, #0 addeq sp, sp, #0x1c moveq r0, #0x15 ldmeqia sp!, {r4, r5, r6, r7, lr} bxeq lr ldr r4, _022123B4 ; =0x000005D4 mov r1, #0 _02212138: ldr r0, [r5] add r3, r0, #0x1000 ldrb r0, [r3, #0x525] add r0, r0, #1 mov r2, r0, lsr #0x1f rsb r0, r2, r0, lsl #28 add r0, r2, r0, ror #28 strb r0, [r3, #0x525] ldr r2, [r5] add r0, r2, #0x1000 ldrb r0, [r0, #0x525] mla r3, r0, r4, r2 add r2, r3, #0x1000 ldrb r2, [r2, #0xd52] cmp r2, #0 beq _02212188 add r2, r3, #0x1d00 ldrh r2, [r2, #0x4c] cmp r2, #0 bne _02212198 _02212188: add r1, r1, #1 and r1, r1, #0xff cmp r1, #0x10 blo _02212138 _02212198: cmp r1, #0x10 addeq sp, sp, #0x1c moveq r0, #0x15 ldmeqia sp!, {r4, r5, r6, r7, lr} bxeq lr bl MOD13_02211EF4 ldr r0, _022123B0 ; =0x02240AFC ldr r1, _022123B4 ; =0x000005D4 ldr r6, [r0] ldr r2, _022123B8 ; =0x00001D2C add r0, r6, #0x1000 ldrb r0, [r0, #0x525] ldr r3, _022123BC ; =0x00001788 add r4, r6, r2 mul r5, r0, r1 add r0, r6, r5 add r0, r0, #0x1d00 ldrh r2, [r0, #0x48] add r3, r6, r3 add r0, sp, #8 add r1, r4, r5 add r3, r3, r5 bl MOD13_02213558 cmp r0, #0 addeq sp, sp, #0x1c moveq r0, #0x15 ldmeqia sp!, {r4, r5, r6, r7, lr} bxeq lr ldr r0, _022123B0 ; =0x02240AFC mov r2, #4 ldr r1, [r0] strb r2, [sp] add r2, r1, #0x1000 ldrb r4, [r2, #0x525] ldr r3, _022123B4 ; =0x000005D4 add r0, sp, #0 strh r4, [sp, #2] ldrb r4, [r2, #0x525] mla r2, r4, r3, r1 add r2, r2, #0x1d00 ldrh r2, [r2, #0x48] strh r2, [sp, #4] bl MOD13_022171AC ldr r1, _022123B0 ; =0x02240AFC ldr r4, _022123B4 ; =0x000005D4 ldr r5, [r1] ldrb r1, [sp, #0x14] add r2, r5, #0x1000 ldrb r2, [r2, #0x525] ldr r6, [sp, #0x10] ldr r3, [sp, #0xc] mla r5, r2, r4, r5 add r2, r5, r1, lsl #2 add r4, r5, #0x1000 add r2, r2, #0x1000 ldr r5, [r4, #0xd58] ldr r2, [r2, #0xd2c] ldr r1, [r5, r1, lsl #2] sub r2, r6, r2 add r7, r2, r1 ldr r6, [r4, #0xd54] mov r2, r0 mov r0, r6 mov r1, r7 bl MOD13_02216A68 cmp r0, #0 bne _02212378 ldr r1, _022123B0 ; =0x02240AFC ldr r0, _022123C0 ; =0x00007CE0 ldr r1, [r1] add r5, r1, r0 mov r0, r5 bl MOD13_02216D78 cmp r0, #0 bne _02212368 ldr r0, [r6] cmp r0, #0 subne r0, r0, #1 strne r0, [r6] bne _02212368 add lr, r6, #0x30 mov r4, #0 mov ip, r4 mov r3, lr _022122E8: add r0, lr, ip, lsl #4 ldr r0, [r0, #0xc] mov r2, ip, lsl #4 cmp r0, #2 bne _02212318 cmp r4, #0 beq _02212314 ldr r1, [r4] ldr r0, [lr, r2] cmp r1, r0 bls _02212318 _02212314: mov r4, r3 _02212318: add ip, ip, #1 cmp ip, #4 add r3, r3, #0x10 blt _022122E8 cmp r4, #0 bne _02212334 bl OS_Terminate _02212334: mov r0, #2 str r0, [r6] mov r0, #1 str r0, [r4, #0xc] bic r0, r7, #0x1f str r0, [r4] str r4, [r5, #0x10] ldr r1, _022123C4 ; =MOD13_022123C8 mov r0, r5 mov r2, #0 mov r3, #4 str r6, [r5, #0x14] bl MOD13_02216BE8 _02212368: add sp, sp, #0x1c mov r0, #0x15 ldmia sp!, {r4, r5, r6, r7, lr} bx lr _02212378: ldr r0, _022123B0 ; =0x02240AFC ldr r4, [sp, #0xc] ldr r2, [r0] ldr r1, _022123B4 ; =0x000005D4 add r0, r2, #0x1000 ldrb r3, [r0, #0x525] add r0, r4, #6 mla r1, r3, r1, r2 add r1, r1, #0x1d00 ldrh r1, [r1, #0x4c] bl MOD13_022141E8 add sp, sp, #0x1c ldmia sp!, {r4, r5, r6, r7, lr} bx lr .align 2, 0 _022123B0: .word 0x02240AFC _022123B4: .word 0x000005D4 _022123B8: .word 0x00001D2C _022123BC: .word 0x00001788 _022123C0: .word 0x00007CE0 _022123C4: .word MOD13_022123C8 arm_func_start MOD13_022123C8 MOD13_022123C8: ; 0x022123C8 stmdb sp!, {r4, r5, lr} sub sp, sp, #0x4c ldr r5, [r0, #0x14] ldr r4, [r0, #0x10] add r0, sp, #4 bl FS_InitFile ldr r1, [r5, #0x14] add r0, r5, #0x10 ldr r5, [r4] bl FS_FindArchive mvn r1, #0 str r1, [sp] ldr r2, [r4, #4] mov r1, r0 add r3, r5, r2 add r0, sp, #4 mov r2, r5 bl FS_OpenFileDirect cmp r0, #0 beq _02212440 ldr r1, [r4, #8] ldr r2, [r4, #4] add r0, sp, #4 bl FS_ReadFile ldr r1, [r4, #4] cmp r1, r0 moveq r0, #2 streq r0, [r4, #0xc] add r0, sp, #4 bl FS_CloseFile _02212440: ldr r0, [r4, #0xc] cmp r0, #2 movne r0, #0 strne r0, [r4] movne r0, #2 strne r0, [r4, #0xc] add sp, sp, #0x4c ldmia sp!, {r4, r5, lr} bx lr arm_func_start MOD13_02212464 MOD13_02212464: ; 0x02212464 stmdb sp!, {r4, r5, lr} sub sp, sp, #0x1c mov r4, #0 add r0, sp, #6 mov r1, r4 mov r2, #0x10 mvn r5, #0 bl MI_CpuFill8 ldr r1, _02212604 ; =0x02240AFC mov r0, #1 ldr r1, [r1] add ip, sp, #6 _02212494: sub r3, r0, #1 add r2, r1, r3, lsl #2 add r2, r2, #0x1000 ldr r2, [r2, #0x4e8] cmp r2, #5 bne _022124C4 add r2, r1, r3 add r2, r2, #0x1500 ldrsb r3, [r2, #0x26] ldrb r2, [ip, r3] add r2, r2, #1 strb r2, [ip, r3] _022124C4: add r0, r0, #1 mov r0, r0, lsl #0x10 mov r0, r0, lsr #0x10 cmp r0, #0xf bls _02212494 ldr r2, _02212608 ; =0x0223F780 mov r0, #0 ldrb r3, [r2] add lr, sp, #6 ldr ip, _0221260C ; =0x000005D4 _022124EC: add r2, r3, #1 mov r3, r2, lsr #0x1f rsb r2, r3, r2, lsl #28 add r2, r3, r2, ror #28 and r3, r2, #0xff mla r2, r3, ip, r1 add r2, r2, #0x1000 ldrb r2, [r2, #0xd52] cmp r2, #0 beq _02212528 ldrb r2, [lr, r3] cmp r2, #0 movne r0, r3, lsl #0x18 movne r5, r0, asr #0x18 bne _02212538 _02212528: add r0, r0, #1 and r0, r0, #0xff cmp r0, #0x10 blo _022124EC _02212538: mvn r0, #0 cmp r5, r0 addeq sp, sp, #0x1c moveq r0, #0x15 ldmeqia sp!, {r4, r5, lr} bxeq lr ldr r2, _02212608 ; =0x0223F780 mov r0, #1 strb r5, [r2] mov r3, r0 _02212560: sub ip, r0, #1 add r2, r1, ip, lsl #2 add r2, r2, #0x1000 ldr r2, [r2, #0x4e8] cmp r2, #5 bne _02212594 add r2, r1, ip add r2, r2, #0x1500 ldrsb r2, [r2, #0x26] cmp r5, r2 orreq r2, r4, r3, lsl r0 moveq r2, r2, lsl #0x10 moveq r4, r2, lsr #0x10 _02212594: add r0, r0, #1 mov r0, r0, lsl #0x10 mov r0, r0, lsr #0x10 cmp r0, #0xf bls _02212560 mov r2, #3 add r0, sp, #0 strb r2, [sp] strh r5, [sp, #2] bl MOD13_022171AC movs r1, r0 beq _022125E4 ldr r2, _02212604 ; =0x02240AFC ldr r0, _02212610 ; =0x00001788 ldr r3, [r2] ldr r2, _0221260C ; =0x000005D4 add r0, r3, r0 mla r0, r5, r2, r0 mov r2, #0xe4 bl MI_CpuCopy8 _022125E4: ldr r0, _02212604 ; =0x02240AFC mov r1, r4 ldr r2, [r0] mov r0, #0xea bl MOD13_022141E8 add sp, sp, #0x1c ldmia sp!, {r4, r5, lr} bx lr .align 2, 0 _02212604: .word 0x02240AFC _02212608: .word 0x0223F780 _0221260C: .word 0x000005D4 _02212610: .word 0x00001788 arm_func_start MOD13_02212614 MOD13_02212614: ; 0x02212614 stmdb sp!, {r4, lr} sub sp, sp, #8 ldr r2, _02212654 ; =0x02240AFC mov r4, r1 ldr r1, [r2] strb r0, [sp] add r0, sp, #0 bl MOD13_022171AC ldr r0, _02212654 ; =0x02240AFC mov r1, r4 ldr r2, [r0] mov r0, #6 bl MOD13_022141E8 add sp, sp, #8 ldmia sp!, {r4, lr} bx lr .align 2, 0 _02212654: .word 0x02240AFC arm_func_start MOD13_02212658 MOD13_02212658: ; 0x02212658 stmdb sp!, {r4, r5, r6, lr} mov r4, r0 mov r6, #0 ldr r2, _02212700 ; =0x02240AFC mov r3, r6 ldr r1, _02212704 ; =0x000005D4 _02212670: ldr r0, [r2] mla r5, r6, r1, r0 add r0, r5, #0x1000 ldrb r0, [r0, #0xd52] cmp r0, #0 addne r0, r5, #0x1d00 strneh r3, [r0, #0x4a] add r0, r6, #1 mov r0, r0, lsl #0x10 mov r6, r0, lsr #0x10 cmp r6, #0x10 blo _02212670 ldr r0, _02212708 ; =0x02240A40 mov r1, #0 str r1, [r0] mov r6, #1 ldr r5, _0221270C ; =0x0000FFFF _022126B4: mov r0, r4 mov r1, r6 bl WM_ReadMPData cmp r0, #0 beq _022126E4 ldrh r1, [r0] cmp r1, r5 beq _022126E4 cmp r1, #0 beq _022126E4 mov r1, r6 bl MOD13_02212710 _022126E4: add r0, r6, #1 mov r0, r0, lsl #0x10 mov r6, r0, lsr #0x10 cmp r6, #0xf bls _022126B4 ldmia sp!, {r4, r5, r6, lr} bx lr .align 2, 0 _02212700: .word 0x02240AFC _02212704: .word 0x000005D4 _02212708: .word 0x02240A40 _0221270C: .word 0x0000FFFF arm_func_start MOD13_02212710 MOD13_02212710: ; 0x02212710 stmdb sp!, {r4, r5, r6, r7, r8, lr} sub sp, sp, #0x38 movs r7, r1 addeq sp, sp, #0x38 ldmeqia sp!, {r4, r5, r6, r7, r8, lr} bxeq lr cmp r7, #0xf addhi sp, sp, #0x38 ldmhiia sp!, {r4, r5, r6, r7, r8, lr} bxhi lr add r1, sp, #0 mov r2, r7 add r0, r0, #0xa bl MOD13_02217070 ldr r3, _02212C14 ; =0x02240AFC ldrb r8, [sp] ldr r2, [r3] sub r4, r7, #1 add r1, r2, r4, lsl #2 add r1, r1, #0x1000 ldr r6, [r1, #0x4e8] mov r5, r0 cmp r8, #0xb addls pc, pc, r8, lsl #2 b _02212C08 _02212774: ; jump table b _02212C08 ; case 0 b _02212C08 ; case 1 b _02212C08 ; case 2 b _02212C08 ; case 3 b _02212C08 ; case 4 b _02212C08 ; case 5 b _02212C08 ; case 6 b _022127A4 ; case 7 b _02212A30 ; case 8 b _02212AEC ; case 9 b _02212B68 ; case 10 b _02212C08 ; case 11 _022127A4: cmp r6, #2 bne _02212848 cmp r5, #0 addeq sp, sp, #0x38 ldmeqia sp!, {r4, r5, r6, r7, r8, lr} bxeq lr add r1, sp, #0x14 mov r2, #0x1d bl MI_CpuCopy8 ldr r3, _02212C14 ; =0x02240AFC mov r0, r4 ldr r1, [r3] ldr r2, [sp, #0x14] add r1, r1, r0, lsl #2 add r1, r1, #0x1000 str r2, [r1, #0x4a8] ldr r1, [r3] mov r2, #0x16 add r1, r1, r0, lsl #1 mul r8, r0, r2 ldrh ip, [sp, #0x2e] add r1, r1, #0x1400 add r0, sp, #0x18 strh ip, [r1, #0x8a] ldr r1, [r3] add r1, r1, #0x1340 add r1, r1, r8 bl MI_CpuCopy8 ldr r0, _02212C14 ; =0x02240AFC and r1, r7, #0xff ldr r0, [r0] and r2, r1, #0xf add ip, r0, #0x1340 ldrb r3, [ip, r8] mov r0, r7 mov r1, #0xa bic r3, r3, #0xf0 orr r2, r3, r2, lsl #4 strb r2, [ip, r8] add r2, sp, #0x18 bl MOD13_02213124 _02212848: cmp r6, #0xa addne sp, sp, #0x38 ldmneia sp!, {r4, r5, r6, r7, r8, lr} bxne lr ldrb r8, [r5, #0x1c] mov r2, #0 cmp r8, #0x10 bhs _022128A4 ldr r0, _02212C14 ; =0x02240AFC ldr r1, _02212C18 ; =0x000005D4 ldr r0, [r0] mla r6, r8, r1, r0 add r1, r6, #0x1000 ldrb r3, [r1, #0xd52] cmp r3, #0 beq _022128A4 add r3, r0, r4, lsl #2 ldr r1, [r1, #0xd40] add r3, r3, #0x1000 ldr r5, [r3, #0x4a8] ldr r3, [r1, #0x14] cmp r5, r3 beq _022128C0 _022128A4: ldr r0, _02212C14 ; =0x02240AFC mov r1, #4 ldr r0, [r0] add r0, r0, r4, lsl #1 add r0, r0, #0x1700 strh r1, [r0, #0x54] b _02212924 _022128C0: add r3, r6, #0x1d00 ldrh r6, [r3, #0x4e] mov ip, r2 mov r5, #1 _022128D0: mov r3, r5, lsl ip ands r3, r3, r6 add r3, ip, #1 addne r2, r2, #1 and ip, r3, #0xff andne r2, r2, #0xff cmp ip, #0x10 blo _022128D0 ldrb r1, [r1, #0x18] cmp r2, r1 blo _02212924 add r1, r0, r4, lsl #1 add r3, r1, #0x1700 mov r2, #0 mov r0, r7 mov r1, #0xb strh r2, [r3, #0x54] bl MOD13_02213124 add sp, sp, #0x38 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02212924: ldr r3, _02212C14 ; =0x02240AFC ldr r2, [r3] add r0, r2, r4, lsl #1 add r4, r0, #0x1700 ldrh r0, [r4, #0x54] cmp r0, #3 beq _02212954 cmp r0, #4 beq _02212A10 add sp, sp, #0x38 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02212954: add r0, r2, #0x1500 mov r1, #1 ldrh r0, [r0, #0x36] mov r6, r1, lsl r7 ands r0, r0, r6 addne sp, sp, #0x38 ldmneia sp!, {r4, r5, r6, r7, r8, lr} bxne lr add r0, r2, #0x1000 ldrb r2, [r0, #0x535] ldr r1, _02212C18 ; =0x000005D4 sub r5, r7, #1 add r2, r2, #1 strb r2, [r0, #0x535] ldr r0, [r3] mul r4, r8, r1 add r1, r0, #0x1500 ldrh ip, [r1, #0x36] mov r0, r7 mov r2, #0 orr r7, ip, r6 strh r7, [r1, #0x36] ldr r7, [r3] mov r1, #5 add r7, r7, r5 add r7, r7, #0x1000 strb r8, [r7, #0x526] ldr r7, [r3] add r7, r7, r4 add r7, r7, #0x1d00 ldrh r8, [r7, #0x4e] orr r8, r8, r6 strh r8, [r7, #0x4e] ldr r7, [r3] add r4, r7, r4 add r4, r4, #0x1d00 ldrh r7, [r4, #0x50] orr r6, r7, r6 strh r6, [r4, #0x50] ldr r3, [r3] add r3, r3, r5, lsl #1 add r3, r3, #0x1700 strh r2, [r3, #0x54] bl MOD13_02213124 add sp, sp, #0x38 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02212A10: mov r2, #0 mov r0, r7 mov r1, #4 strh r2, [r4, #0x54] bl MOD13_02213124 add sp, sp, #0x38 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02212A30: cmp r6, #5 bne _02212A54 mov r0, r7 mov r1, #0xe mov r2, #0 bl MOD13_02213124 add sp, sp, #0x38 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02212A54: cmp r6, #0xe addne sp, sp, #0x38 ldmneia sp!, {r4, r5, r6, r7, r8, lr} bxne lr add r0, r2, r4, lsl #1 add r0, r0, #0x1700 ldrh r0, [r0, #0x54] mov r5, r4, lsl #1 cmp r0, #2 addne sp, sp, #0x38 ldmneia sp!, {r4, r5, r6, r7, r8, lr} bxne lr add r0, r2, r4 add r0, r0, #0x1000 ldrb r1, [r0, #0x526] ldr r0, _02212C18 ; =0x000005D4 mov r6, #1 mul r4, r1, r0 add r0, r2, r4 add r1, r0, #0x1d00 ldrh r8, [r1, #0x4c] mov r2, #0 mov r0, r7 orr r6, r8, r6, lsl r7 strh r6, [r1, #0x4c] ldr r6, [r3] mov r1, #6 add r4, r6, r4 add r4, r4, #0x1d00 strh r2, [r4, #0x48] ldr r3, [r3] add r3, r3, r5 add r3, r3, #0x1700 strh r2, [r3, #0x54] bl MOD13_02213124 add sp, sp, #0x38 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02212AEC: cmp r6, #6 addne sp, sp, #0x38 ldmneia sp!, {r4, r5, r6, r7, r8, lr} bxne lr add r0, r2, r4 add r0, r0, #0x1000 ldrb r5, [r0, #0x526] cmp r5, #0xff addeq sp, sp, #0x38 ldmeqia sp!, {r4, r5, r6, r7, r8, lr} bxeq lr ldr r0, _02212C18 ; =0x000005D4 ldrh r1, [sp, #2] mul r4, r5, r0 add r0, r2, r4 add r0, r0, #0x1d00 ldrh r0, [r0, #0x4a] bl MOD13_02211EE4 ldr r1, _02212C14 ; =0x02240AFC ldr r2, _02212C1C ; =0x02240A40 ldr r1, [r1] mov r3, #1 add r1, r1, r4 add r1, r1, #0x1d00 strh r0, [r1, #0x4a] ldr r0, [r2] add sp, sp, #0x38 orr r0, r0, r3, lsl r5 str r0, [r2] ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02212B68: cmp r6, #6 bne _02212BC8 add r0, r2, r4 add r0, r0, #0x1000 ldrb r3, [r0, #0x526] cmp r3, #0xff addeq sp, sp, #0x38 ldmeqia sp!, {r4, r5, r6, r7, r8, lr} bxeq lr ldr r0, _02212C18 ; =0x000005D4 mov r1, #1 mla r0, r3, r0, r2 add r3, r0, #0x1d00 ldrh r2, [r3, #0x4c] mvn r0, r1, lsl r7 and r4, r2, r0 mov r0, r7 mov r1, #7 mov r2, #0 strh r4, [r3, #0x4c] bl MOD13_02213124 add sp, sp, #0x38 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02212BC8: cmp r6, #7 addne sp, sp, #0x38 ldmneia sp!, {r4, r5, r6, r7, r8, lr} bxne lr add r0, r2, r4, lsl #1 add r3, r0, #0x1700 ldrh r0, [r3, #0x54] cmp r0, #5 addne sp, sp, #0x38 ldmneia sp!, {r4, r5, r6, r7, r8, lr} bxne lr mov r2, #0 mov r0, r7 mov r1, #8 strh r2, [r3, #0x54] bl MOD13_02213124 _02212C08: add sp, sp, #0x38 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr .align 2, 0 _02212C14: .word 0x02240AFC _02212C18: .word 0x000005D4 _02212C1C: .word 0x02240A40 arm_func_start MOD13_02212C20 MOD13_02212C20: ; 0x02212C20 stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} mov r6, r0 mov r4, r1 cmp r6, #0x19 bgt _02212C84 cmp r6, #0x19 bge _02212ECC cmp r6, #0x11 bgt _02212C78 cmp r6, #0x11 bge _02213084 cmp r6, #3 bgt _02213084 cmp r6, #0 blt _02213084 cmp r6, #0 beq _02212CC0 cmp r6, #1 beq _02212CE4 cmp r6, #3 beq _02212EC0 b _02213084 _02212C78: cmp r6, #0x15 beq _02212CAC b _02213084 _02212C84: cmp r6, #0xff bgt _02212CA0 cmp r6, #0xff bge _02212F70 cmp r6, #0x1c beq _02212ED4 b _02213084 _02212CA0: cmp r6, #0x100 beq _02212FE0 b _02213084 _02212CAC: mov r2, r4 mov r0, #0 mov r1, #1 bl MOD13_02213124 b _02213084 _02212CC0: ldrh r0, [r4, #0x10] cmp r0, #0 beq _02213084 cmp r0, #0x10 bhs _02213084 mov r2, r4 mov r1, #2 bl MOD13_02213124 b _02213084 _02212CE4: ldrh r0, [r4, #0x10] cmp r0, #0 beq _02213084 cmp r0, #0x10 bhs _02213084 ldr r2, _022130D8 ; =0x02240AFC sub r0, r0, #1 ldr r3, [r2] mov r1, #0 add r0, r3, r0, lsl #1 add r0, r0, #0x1400 strh r1, [r0, #0x8a] ldrh r3, [r4, #0x10] ldr r5, [r2] ldr r0, _022130DC ; =0x000014A8 sub r2, r3, #1 add r0, r5, r0 add r0, r0, r2, lsl #2 mov r2, #4 bl MI_CpuFill8 ldr r0, _022130D8 ; =0x02240AFC ldrh r1, [r4, #0x10] ldr r0, [r0] mov r2, #0x16 add r0, r0, #0x1340 sub r1, r1, #1 mla r0, r1, r2, r0 mov r1, #0 bl MI_CpuFill8 ldrh r0, [r4, #0x10] bl MOD13_02217234 ldrh r1, [r4, #0x10] ldr r0, _022130D8 ; =0x02240AFC mov r3, #0 ldr r2, [r0] sub r1, r1, #1 add r1, r2, r1, lsl #1 add r1, r1, #0x1700 strh r3, [r1, #0x54] ldrh r8, [r4, #0x10] ldr r5, [r0] mvn r1, #0 sub r7, r8, #1 add r2, r5, r7 add r2, r2, #0x1500 ldrsb r3, [r2, #0x26] cmp r3, r1 beq _02212E0C ldr r2, _022130E0 ; =0x000005D4 and r3, r3, #0xff mul r2, r3, r2 add r3, r5, r2 add sb, r3, #0x1d00 mov r5, #1 ldrh sl, [sb, #0x4e] mvn r3, r5, lsl r8 and sl, sl, r3 strh sl, [sb, #0x4e] ldr sb, [r0] add sb, sb, r2 add sb, sb, #0x1d00 ldrh sl, [sb, #0x50] orr r5, sl, r5, lsl r8 strh r5, [sb, #0x50] ldr r5, [r0] add r5, r5, r7 add r5, r5, #0x1000 strb r1, [r5, #0x526] ldr r0, [r0] add r0, r0, r2 add r0, r0, #0x1d00 ldrh r1, [r0, #0x4c] and r1, r1, r3 strh r1, [r0, #0x4c] _02212E0C: ldr r1, _022130D8 ; =0x02240AFC ldrh r2, [r4, #0x10] ldr r7, [r1] mov r3, #1 add r0, r7, #0x1500 ldrh r5, [r0, #0x36] mov r0, r3, lsl r2 ands r0, r5, r0 beq _02212E5C add r0, r7, #0x1000 ldrb r2, [r0, #0x535] sub r2, r2, #1 strb r2, [r0, #0x535] ldr r0, [r1] ldrh r1, [r4, #0x10] add r0, r0, #0x1500 ldrh r2, [r0, #0x36] mvn r1, r3, lsl r1 and r1, r2, r1 strh r1, [r0, #0x36] _02212E5C: ldrh r0, [r4, #0x10] ldr r1, _022130D8 ; =0x02240AFC ldr r2, [r1] sub r1, r0, #1 add r1, r2, r1, lsl #2 add r1, r1, #0x1000 ldr r1, [r1, #0x4e8] cmp r1, #8 bne _02212E8C mov r1, #9 mov r2, #0 bl MOD13_02213124 _02212E8C: ldrh r0, [r4, #0x10] mov r2, r4 mov r1, #3 bl MOD13_02213124 ldrh r1, [r4, #0x10] ldr r0, _022130D8 ; =0x02240AFC mov r3, #0 ldr r2, [r0] sub r0, r1, #1 add r0, r2, r0, lsl #2 add r0, r0, #0x1000 str r3, [r0, #0x4e8] b _02213084 _02212EC0: mov r0, r4 bl MOD13_02212658 b _02213084 _02212ECC: bl MOD13_02211F78 b _02213084 _02212ED4: mov r5, #0 ldr sb, _022130D8 ; =0x02240AFC ldr r7, _022130E4 ; =0x0000186C ldr r8, _022130E0 ; =0x000005D4 mov sl, r5 _02212EE8: mul r4, r5, r8 ldr r1, [sb] add r2, r1, r4 add r0, r2, #0x1000 ldrb r0, [r0, #0xd52] cmp r0, #0 beq _02212F38 add r0, r2, #0x1d00 ldrh r3, [r0, #0x50] cmp r3, #0 beq _02212F38 ldrh r2, [r0, #0x4e] add r0, r1, r7 add r0, r0, r4 add r1, r1, #0x1340 bl MOD13_022148D4 ldr r0, [sb] add r0, r0, r4 add r0, r0, #0x1d00 strh sl, [r0, #0x50] _02212F38: add r0, r5, #1 and r5, r0, #0xff cmp r5, #0x10 blo _02212EE8 bl MOD13_02214BF4 mov r5, r0 bl MOD13_02214BE0 mov r4, r0 bl MOD13_02214B80 mov r2, r0 mov r0, r5 mov r1, r4 bl MOD13_02214768 b _02213084 _02212F70: ldrh r0, [r4, #2] cmp r0, #0xf addls pc, pc, r0, lsl #2 b _02212FD0 _02212F80: ; jump table b _02212FD0 ; case 0 b _02212FC0 ; case 1 b _02212FD0 ; case 2 b _02212FD0 ; case 3 b _02212FC0 ; case 4 b _02212FC0 ; case 5 b _02212FC0 ; case 6 b _02212FD0 ; case 7 b _02212FC0 ; case 8 b _02212FC0 ; case 9 b _02212FD0 ; case 10 b _02212FD0 ; case 11 b _02212FD0 ; case 12 b _02212FD0 ; case 13 b _02212FD0 ; case 14 b _02212FD0 ; case 15 _02212FC0: mov r0, #0 mov r1, #9 bl MOD13_02211EA4 b _02213084 _02212FD0: mov r0, #0 mov r1, #8 bl MOD13_02211EA4 b _02213084 _02212FE0: ldrh r0, [r4] cmp r0, #0x1d addls pc, pc, r0, lsl #2 b _02213078 _02212FF0: ; jump table b _02213068 ; case 0 b _02213078 ; case 1 b _02213078 ; case 2 b _02213078 ; case 3 b _02213078 ; case 4 b _02213078 ; case 5 b _02213078 ; case 6 b _02213068 ; case 7 b _02213068 ; case 8 b _02213078 ; case 9 b _02213078 ; case 10 b _02213078 ; case 11 b _02213078 ; case 12 b _02213068 ; case 13 b _02213068 ; case 14 b _02213068 ; case 15 b _02213078 ; case 16 b _02213068 ; case 17 b _02213068 ; case 18 b _02213078 ; case 19 b _02213078 ; case 20 b _02213068 ; case 21 b _02213078 ; case 22 b _02213078 ; case 23 b _02213078 ; case 24 b _02213068 ; case 25 b _02213078 ; case 26 b _02213078 ; case 27 b _02213078 ; case 28 b _02213068 ; case 29 _02213068: mov r0, #0 mov r1, #9 bl MOD13_02211EA4 b _02213084 _02213078: mov r0, #0 mov r1, #8 bl MOD13_02211EA4 _02213084: cmp r6, #0x11 ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, lr} bxne lr ldr r1, _022130D8 ; =0x02240AFC mov r0, #0 ldr r1, [r1] mov r2, #0x7d00 add r3, r1, #0x1000 ldr r4, [r3, #0x4e4] bl MIi_CpuClearFast ldr r1, _022130D8 ; =0x02240AFC mov r0, #0 str r0, [r1] cmp r4, #0 ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, lr} bxeq lr mov r2, r0 mov r1, #0xc blx r4 ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr} bx lr .align 2, 0 _022130D8: .word 0x02240AFC _022130DC: .word 0x000014A8 _022130E0: .word 0x000005D4 _022130E4: .word 0x0000186C arm_func_start MOD13_022130E8 MOD13_022130E8: ; 0x022130E8 stmdb sp!, {lr} sub sp, sp, #4 ldr r3, _02213120 ; =0x02240AFC ldr r3, [r3] add r3, r3, #0x1000 ldr r3, [r3, #0x4e4] cmp r3, #0 addeq sp, sp, #4 ldmeqia sp!, {lr} bxeq lr blx r3 add sp, sp, #4 ldmia sp!, {lr} bx lr .align 2, 0 _02213120: .word 0x02240AFC arm_func_start MOD13_02213124 MOD13_02213124: ; 0x02213124 stmdb sp!, {r4, r5, r6, lr} mov r6, r0 mov r5, r1 mov r4, r2 bl MOD13_02211EC8 cmp r0, #0 beq _02213158 ldr r0, _02213170 ; =0x02240AFC sub r1, r6, #1 ldr r0, [r0] add r0, r0, r1, lsl #2 add r0, r0, #0x1000 str r5, [r0, #0x4e8] _02213158: mov r0, r6 mov r1, r5 mov r2, r4 bl MOD13_022130E8 ldmia sp!, {r4, r5, r6, lr} bx lr .align 2, 0 _02213170: .word 0x02240AFC arm_func_start MOD13_02213174 MOD13_02213174: ; 0x02213174 stmdb sp!, {r4, r5, r6, r7, lr} sub sp, sp, #4 mov r5, r1 mov r7, r0 bl OS_DisableInterrupts mov r4, r0 cmp r5, #3 addls pc, pc, r5, lsl #2 b _022131D8 _02213198: ; jump table b _022131A8 ; case 0 b _022131B4 ; case 1 b _022131C0 ; case 2 b _022131CC ; case 3 _022131A8: mov r5, #0xa mov r6, #4 b _022131F0 _022131B4: mov r5, #0xa mov r6, #3 b _022131F0 _022131C0: mov r5, #0xe mov r6, #2 b _022131F0 _022131CC: mov r5, #7 mov r6, #5 b _022131F0 _022131D8: mov r0, r4 bl OS_RestoreInterrupts add sp, sp, #4 mov r0, #0 ldmia sp!, {r4, r5, r6, r7, lr} bx lr _022131F0: ldr r0, _0221326C ; =0x02240AFC ldr r0, [r0] cmp r0, #0 beq _02213254 mov r0, r7 bl MOD13_02211EC8 cmp r0, #0 beq _02213254 ldr r0, _0221326C ; =0x02240AFC sub r2, r7, #1 ldr r1, [r0] add r0, r1, r2, lsl #2 add r0, r0, #0x1000 ldr r0, [r0, #0x4e8] cmp r5, r0 bne _02213254 add r0, r1, r2, lsl #1 add r1, r0, #0x1700 mov r0, r4 strh r6, [r1, #0x54] bl OS_RestoreInterrupts add sp, sp, #4 mov r0, #1 ldmia sp!, {r4, r5, r6, r7, lr} bx lr _02213254: mov r0, r4 bl OS_RestoreInterrupts mov r0, #0 add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, lr} bx lr .align 2, 0 _0221326C: .word 0x02240AFC arm_func_start MOD13_02213270 MOD13_02213270: ; 0x02213270 stmdb sp!, {r4, lr} ldr r1, _022132C8 ; =0x02240AFC mov r4, r0 ldr r1, [r1] cmp r1, #0 beq _022132BC bl MOD13_02211EC8 cmp r0, #0 beq _022132BC ldr r0, _022132C8 ; =0x02240AFC sub r1, r4, #1 ldr r0, [r0] add r0, r0, r1, lsl #2 add r0, r0, #0x1000 ldr r0, [r0, #0x4e8] cmp r0, #7 moveq r0, #1 ldmeqia sp!, {r4, lr} bxeq lr _022132BC: mov r0, #0 ldmia sp!, {r4, lr} bx lr .align 2, 0 _022132C8: .word 0x02240AFC arm_func_start MOD13_022132CC MOD13_022132CC: ; 0x022132CC stmdb sp!, {r4, r5, lr} sub sp, sp, #4 mov r5, r0 bl OS_DisableInterrupts ldr r1, _02213360 ; =0x02240AFC mov r4, r0 ldr r0, [r1] cmp r0, #0 beq _02213348 mov r0, r5 bl MOD13_02211EC8 cmp r0, #0 beq _02213348 ldr r0, _02213360 ; =0x02240AFC sub r3, r5, #1 ldr ip, [r0] ldr r1, _02213364 ; =0x00001772 add r0, ip, #0x1340 mov r2, #0x16 mla r0, r3, r2, r0 add r1, ip, r1 bl MI_CpuCopy8 mov r0, r4 bl OS_RestoreInterrupts ldr r1, _02213360 ; =0x02240AFC ldr r0, _02213364 ; =0x00001772 ldr r1, [r1] add sp, sp, #4 add r0, r1, r0 ldmia sp!, {r4, r5, lr} bx lr _02213348: mov r0, r4 bl OS_RestoreInterrupts mov r0, #0 add sp, sp, #4 ldmia sp!, {r4, r5, lr} bx lr .align 2, 0 _02213360: .word 0x02240AFC _02213364: .word 0x00001772 arm_func_start MOD13_02213368 MOD13_02213368: ; 0x02213368 stmdb sp!, {r4, lr} mov r4, r0 bl OS_DisableInterrupts ldr r1, _02213390 ; =0x02240AFC ldr r1, [r1] add r1, r1, #0x1000 str r4, [r1, #0x4e4] bl OS_RestoreInterrupts ldmia sp!, {r4, lr} bx lr .align 2, 0 _02213390: .word 0x02240AFC arm_func_start MOD13_02213394 MOD13_02213394: ; 0x02213394 stmdb sp!, {lr} sub sp, sp, #4 ldr r3, _02213498 ; =0x0223C420 ldr r3, [r3, r0, lsl #2] cmp r3, #0 beq _022133BC cmp r3, #1 beq _022133CC cmp r3, #2 bne _02213478 _022133BC: bl MOD13_022134A8 add sp, sp, #4 ldmia sp!, {lr} bx lr _022133CC: cmp r1, #0x2000000 blo _02213444 ldr r0, _0221349C ; =0x023FE800 cmp r1, r0 bhs _02213444 cmp r1, #0x2300000 add r1, r1, r2 bhs _02213400 cmp r1, #0x2300000 addhi sp, sp, #4 movhi r0, #0 ldmhiia sp!, {lr} bxhi lr _02213400: cmp r1, #0x2300000 addls sp, sp, #4 movls r0, #1 ldmlsia sp!, {lr} bxls lr ldr r0, _0221349C ; =0x023FE800 cmp r1, r0 bhs _02213434 cmp r2, #0x40000 addls sp, sp, #4 movls r0, #1 ldmlsia sp!, {lr} bxls lr _02213434: add sp, sp, #4 mov r0, #0 ldmia sp!, {lr} bx lr _02213444: ldr r0, _022134A0 ; =0x037F8000 cmp r1, r0 blo _02213488 ldr r0, _022134A4 ; =0x0380F000 cmp r1, r0 bhs _02213488 add r1, r1, r2 cmp r1, r0 movls r0, #1 add sp, sp, #4 movhi r0, #0 ldmia sp!, {lr} bx lr _02213478: add sp, sp, #4 mov r0, #0 ldmia sp!, {lr} bx lr _02213488: mov r0, #0 add sp, sp, #4 ldmia sp!, {lr} bx lr .align 2, 0 _02213498: .word 0x0223C420 _0221349C: .word 0x023FE800 _022134A0: .word 0x037F8000 _022134A4: .word 0x0380F000 arm_func_start MOD13_022134A8 MOD13_022134A8: ; 0x022134A8 ldr r3, _0221354C ; =0x0223C420 ldr r0, [r3, r0, lsl #2] cmp r0, #0 beq _022134EC cmp r0, #1 beq _02213508 cmp r0, #2 bne _0221353C ldr r0, _02213550 ; =0x027FFE00 cmp r1, r0 blo _02213544 ldr r0, _02213554 ; =0x027FFF60 add r1, r1, r2 cmp r1, r0 bhi _02213544 mov r0, #1 bx lr _022134EC: cmp r1, #0x2000000 blo _02213544 add r0, r1, r2 cmp r0, #0x22c0000 bhi _02213544 mov r0, #1 bx lr _02213508: cmp r1, #0x22c0000 blo _02213520 add r0, r1, r2 cmp r0, #0x2300000 movls r0, #1 bxls lr _02213520: cmp r1, #0x2000000 blo _02213544 add r0, r1, r2 cmp r0, #0x2300000 bhi _02213544 mov r0, #1 bx lr _0221353C: mov r0, #0 bx lr _02213544: mov r0, #0 bx lr .align 2, 0 _0221354C: .word 0x0223C420 _02213550: .word 0x027FFE00 _02213554: .word 0x027FFF60 arm_func_start MOD13_02213558 MOD13_02213558: ; 0x02213558 stmdb sp!, {r4, r5, lr} sub sp, sp, #4 ldrh r4, [r1, #0x12] cmp r2, r4 addhs sp, sp, #4 movhs r0, #0 ldmhsia sp!, {r4, r5, lr} bxhs lr mov ip, #2 _0221357C: add r4, r1, ip, lsl #1 ldrh r4, [r4, #0xc] cmp r2, r4 bhs _0221359C sub r4, ip, #1 mov ip, r4, lsl #0x18 movs ip, ip, asr #0x18 bpl _0221357C _0221359C: cmp ip, #0 addlt sp, sp, #4 movlt r0, #0 ldmltia sp!, {r4, r5, lr} bxlt lr ldr r4, _02213628 ; =0x02240AFC add r5, r1, ip, lsl #1 ldr lr, [r4] ldrh r5, [r5, #0xc] add lr, lr, #0x1000 ldr lr, [lr, #0x318] sub r5, r2, r5 mul r2, r5, lr add r3, r3, #0xc add r5, r3, ip, lsl #4 ldr r3, [r5, #8] sub r3, r3, r2 str r3, [r0, #4] ldr r3, [r4] ldr r4, [r0, #4] add r3, r3, #0x1000 ldr r3, [r3, #0x318] cmp r4, r3 strhi r3, [r0, #4] ldr r1, [r1, ip, lsl #2] add r1, r2, r1 str r1, [r0, #8] ldr r1, [r5] add r1, r2, r1 str r1, [r0] strb ip, [r0, #0xc] mov r0, #1 add sp, sp, #4 ldmia sp!, {r4, r5, lr} bx lr .align 2, 0 _02213628: .word 0x02240AFC arm_func_start MOD13_0221362C MOD13_0221362C: ; 0x0221362C stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} mov r5, r0 add r4, r5, #0xc cmp r1, #0 mov r0, #0 ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, lr} bxeq lr mov r2, r0 _0221364C: str r0, [r5, r2, lsl #2] add r3, r1, r2, lsl #4 add r2, r2, #1 ldr r3, [r3, #0x14] and r2, r2, #0xff cmp r2, #3 add r0, r0, r3 blo _0221364C mov r8, #0 strh r8, [r4] ldr r6, _02213704 ; =0x02240AFC add r7, r1, #0xc _0221367C: ldr r0, [r6] add sl, r7, r8, lsl #4 add r0, r0, #0x1000 ldr r1, [r0, #0x318] ldr sb, [sl, #8] add r0, sb, r1 sub r0, r0, #1 bl _u32_div_f mov r1, r8, lsl #1 ldrh r3, [r4, r1] mov r2, r0, lsl #0x10 ldr r1, [sl, #4] add r2, r3, r2, lsr #16 mov r3, r2, lsl #0x10 mov r2, sb mov r0, r8 mov sb, r3, lsr #0x10 bl MOD13_02213394 cmp r0, #0 moveq r0, #0 ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, lr} bxeq lr cmp r8, #2 addlo r0, r8, #1 movlo r0, r0, lsl #1 strloh sb, [r4, r0] add r0, r8, #1 and r8, r0, #0xff strhsh sb, [r5, #0x12] cmp r8, #3 blo _0221367C mov r0, #1 ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr} bx lr .align 2, 0 _02213704: .word 0x02240AFC arm_func_start MOD13_02213708 MOD13_02213708: ; 0x02213708 stmdb sp!, {r4, r5, r6, r7, lr} sub sp, sp, #4 ldr r1, [r1] mov r7, r2 mov r6, r3 cmp r1, #0 beq _02213740 cmp r1, #1 beq _022137A4 cmp r1, #2 beq _02213880 add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, lr} bx lr _02213740: ldr r2, [r0, #0x28] add r3, r0, #0x28 cmp r2, #0x2000000 blo _02213794 cmp r2, #0x22c0000 bhs _02213794 ldr r1, [r3, #4] add r0, r2, r1 cmp r0, #0x22c0000 bhi _02213794 str r1, [r7, #8] ldr r0, [r3] add sp, sp, #4 str r0, [r7, #4] ldr r0, [r7, #4] str r0, [r7] ldr r0, [r7, #0xc] bic r0, r0, #1 str r0, [r7, #0xc] ldmia sp!, {r4, r5, r6, r7, lr} bx lr _02213794: bl OS_Terminate add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, lr} bx lr _022137A4: add r4, r0, #0x38 ldr r2, [r0, #0x38] ldr r1, [r4, #4] mov ip, #0 mov r5, ip cmp r2, #0x2000000 add r3, r2, r1 blo _022137F4 ldr r0, _022138B0 ; =0x023FE800 cmp r2, r0 bhs _022137F4 cmp r3, #0x2300000 bls _02213820 cmp r3, r0 bhs _022137EC cmp r1, #0x40000 movls r5, #1 bls _02213820 _022137EC: mov ip, #1 b _02213820 _022137F4: ldr r0, _022138B4 ; =0x037F8000 cmp r2, r0 blo _0221381C ldr r0, _022138B8 ; =0x0380F000 cmp r2, r0 bhs _0221381C cmp r3, r0 movls r5, #1 movhi ip, #1 b _02213820 _0221381C: mov ip, #1 _02213820: cmp ip, #1 bne _0221382C bl OS_Terminate _0221382C: ldr r0, [r4, #4] cmp r5, #0 str r0, [r7, #8] ldr r0, [r4] str r0, [r7, #4] ldreq r0, [r7, #4] streq r0, [r7] beq _02213864 ldr r0, [r6] str r0, [r7] ldr r1, [r6] ldr r0, [r7, #8] add r0, r1, r0 str r0, [r6] _02213864: ldr r0, [r7, #0xc] add sp, sp, #4 bic r0, r0, #1 orr r0, r0, #1 str r0, [r7, #0xc] ldmia sp!, {r4, r5, r6, r7, lr} bx lr _02213880: mov r1, #0x160 ldr r0, _022138BC ; =0x027FFE00 str r1, [r7, #8] str r0, [r7, #4] ldr r0, [r7, #4] str r0, [r7] ldr r0, [r7, #0xc] bic r0, r0, #1 str r0, [r7, #0xc] add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, lr} bx lr .align 2, 0 _022138B0: .word 0x023FE800 _022138B4: .word 0x037F8000 _022138B8: .word 0x0380F000 _022138BC: .word 0x027FFE00 arm_func_start MOD13_022138C0 MOD13_022138C0: ; 0x022138C0 stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} sub sp, sp, #8 mov r2, #0x22c0000 mov r5, r1 str r2, [sp] mov r6, r0 ldr r0, [r5, #0x24] ldr r4, _02213940 ; =0x0223C420 str r0, [r6] ldr r0, [r5, #0x34] add r8, r5, #0x160 str r0, [r6, #4] add sl, r6, #0xc mov sb, #0 add r7, sp, #0 _022138FC: mov r0, r5 mov r1, r4 mov r2, sl mov r3, r7 bl MOD13_02213708 add sb, sb, #1 cmp sb, #3 add sl, sl, #0x10 add r4, r4, #4 blt _022138FC mov r0, r8 add r1, r6, #0x3c mov r2, #0x88 bl MI_CpuCopy8 add sp, sp, #8 ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr} bx lr .align 2, 0 _02213940: .word 0x0223C420 arm_func_start MOD13_02213944 MOD13_02213944: ; 0x02213944 stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} sub sp, sp, #4 mov sb, r0 mov r8, r1 mov r6, #0xff bl OS_DisableInterrupts mov r5, r0 bl MOD13_02214B60 cmp r0, #0 bne _02213984 mov r0, r5 bl OS_RestoreInterrupts add sp, sp, #4 mov r0, #0 ldmia sp!, {r4, r5, r6, r7, r8, sb, lr} bx lr _02213984: ldr r0, _02213BFC ; =0x02240AFC ldr r0, [r0] add r1, r0, #0x1000 ldrb r1, [r1, #0x524] add r1, r1, #1 cmp r1, #0x10 ble _022139B8 mov r0, r5 bl OS_RestoreInterrupts add sp, sp, #4 mov r0, #0 ldmia sp!, {r4, r5, r6, r7, r8, sb, lr} bx lr _022139B8: ldr r1, _02213C00 ; =0x000005D4 mov r4, #0 _022139C0: mla r2, r4, r1, r0 add r2, r2, #0x1000 ldr r3, [r2, #0xd40] cmp r3, sb bne _022139EC mov r0, r5 bl OS_RestoreInterrupts add sp, sp, #4 mov r0, #0 ldmia sp!, {r4, r5, r6, r7, r8, sb, lr} bx lr _022139EC: ldrb r2, [r2, #0xd52] cmp r2, #0 moveq r6, r4 beq _02213A0C add r2, r4, #1 and r4, r2, #0xff cmp r4, #0x10 blo _022139C0 _02213A0C: cmp r4, #0x10 bne _02213A2C mov r0, r5 bl OS_RestoreInterrupts add sp, sp, #4 mov r0, #0 ldmia sp!, {r4, r5, r6, r7, r8, sb, lr} bx lr _02213A2C: ldr r1, _02213C00 ; =0x000005D4 ldr r2, _02213BFC ; =0x02240AFC mul r4, r6, r1 add r0, r0, r4 add r0, r0, #0x1000 str sb, [r0, #0xd40] ldr r2, [r2] ldr r0, _02213C04 ; =0x00001788 mov r1, r8 add r0, r2, r0 add r7, r0, r4 mov r0, r7 bl MOD13_022138C0 add r0, sb, #0x1c add r1, r7, #0xc4 mov r2, #0x20 bl MI_CpuCopy8 ldr r1, _02213BFC ; =0x02240AFC ldr r0, _02213C08 ; =0x00001D2C ldr r2, [r1] mov r1, r7 add r0, r2, r0 add r0, r0, r4 bl MOD13_0221362C cmp r0, #0 bne _02213AAC mov r0, r5 bl OS_RestoreInterrupts add sp, sp, #4 mov r0, #0 ldmia sp!, {r4, r5, r6, r7, r8, sb, lr} bx lr _02213AAC: ldr r1, _02213BFC ; =0x02240AFC ldr r0, _02213C0C ; =0x0000186C ldr r2, [r1] mov r1, sb add r0, r2, r0 add r0, r0, r4 add r2, r2, #0x1300 bl MOD13_02214A0C ldr r2, _02213BFC ; =0x02240AFC ldr r1, _02213C0C ; =0x0000186C ldr r0, [r2] add r0, r0, r4 add r0, r0, #0x1000 strb r6, [r0, #0xd21] ldr r0, [r2] add r0, r0, r1 add r0, r0, r4 bl MOD13_02214868 ldr r0, _02213C10 ; =0x02240A44 ldr r1, _02213BFC ; =0x02240AFC ldrb r7, [r0] ldr r3, [r1] mov r2, #1 add r6, r7, #1 add r3, r3, r4 strb r6, [r0] add r0, r3, #0x1000 strb r7, [r0, #0xd1f] ldr r0, [r1] add r3, r8, #0x1e8 add r0, r0, r4 add r0, r0, #0x1d00 strh r2, [r0, #0x4e] ldr r0, [r1] add r2, r8, #0x258 add r0, r0, r4 add r0, r0, #0x1000 str r8, [r0, #0xd44] ldr r0, [r1] add r0, r0, r4 add r0, r0, #0x1000 str r3, [r0, #0xd54] ldr r0, [r1] add r0, r0, r4 add r0, r0, #0x1000 str r2, [r0, #0xd58] ldr r0, [r1] add r0, r0, r4 add r0, r0, #0x1000 ldr r0, [r0, #0xd54] ldr r0, [r0, #0x6c] cmp r0, #0 beq _02213BB8 bl MOD13_02216DA4 cmp r0, #0 bne _02213BB8 ldr r1, _02213BFC ; =0x02240AFC ldr r0, _02213C14 ; =0x00007CE0 ldr r1, [r1] add r0, r1, r0 bl MOD13_02216D90 ldr r1, _02213BFC ; =0x02240AFC ldr r0, _02213C18 ; =0x000074E0 ldr r2, [r1] mov r1, #0x800 add r0, r2, r0 bl MOD13_02216DC0 _02213BB8: ldr r2, _02213BFC ; =0x02240AFC mov r3, #1 ldr r1, [r2] mov r0, r5 add r1, r1, r4 add r1, r1, #0x1000 strb r3, [r1, #0xd52] ldr r1, [r2] add r1, r1, #0x1000 ldrb r2, [r1, #0x524] add r2, r2, #1 strb r2, [r1, #0x524] bl OS_RestoreInterrupts mov r0, #1 add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, r8, sb, lr} bx lr .align 2, 0 _02213BFC: .word 0x02240AFC _02213C00: .word 0x000005D4 _02213C04: .word 0x00001788 _02213C08: .word 0x00001D2C _02213C0C: .word 0x0000186C _02213C10: .word 0x02240A44 _02213C14: .word 0x00007CE0 _02213C18: .word 0x000074E0 arm_func_start MOD13_02213C1C MOD13_02213C1C: ; 0x02213C1C stmdb sp!, {lr} sub sp, sp, #4 mov lr, r1 ldr ip, [r0] ldr r1, [r0, #0xc] cmp lr, #0x4000 movlo lr, #0x4000 cmp r2, #0x8000 movhi r2, #0x8000 cmp lr, ip add r1, ip, r1 movlo lr, ip cmp r2, r1 movhi r2, r1 cmp lr, r2 addhs sp, sp, #4 ldmhsia sp!, {lr} bxhs lr cmp r3, #0 beq _02213C8C ldr r0, [r0, #8] sub r2, r2, lr add r0, r0, lr mov r1, #0 bl MI_CpuFill8 add sp, sp, #4 ldmia sp!, {lr} bx lr _02213C8C: ldr r3, [r0, #4] ldr r1, [r0, #8] add r0, r3, lr add r1, r1, lr sub r2, r2, lr bl MI_CpuCopy8 add sp, sp, #4 ldmia sp!, {lr} bx lr arm_func_start MOD13_02213CB0 MOD13_02213CB0: ; 0x02213CB0 stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} sub sp, sp, #0x6c str r2, [sp, #4] cmp r2, #0x164 mov r2, #0 mov sl, r0 mov sb, r1 str r2, [sp, #8] blo _022140F4 ldr r8, [sp, #4] mov r7, sb str r2, [sp, #0xc] mov r6, r2 mov r5, r2 cmp sl, #0 add r7, r7, #0x160 sub r8, r8, #0x160 beq _02213D24 ldr r4, [sl, #0x2c] ldr r3, [sl, #0x24] mov r2, #0x160 sub fp, r4, r3 bl FS_ReadFile cmp r0, #0x160 ldr r4, [sb, #0x80] movlt r8, r5 cmp r4, #0 moveq r4, #0x1000000 b _02213D9C _02213D24: ldr r0, _02214104 ; =0x027FFE00 mov r1, #1 ldr r4, [r0, #0x80] add r0, sp, #0x20 cmp r4, #0 moveq r4, #0x1000000 str r1, [sp, #0xc] bl FS_InitFile ldr r0, _02214108 ; =0x0223F788 mov r1, #3 bl FS_FindArchive mov r1, r0 mvn r0, #0 str r0, [sp] add r0, sp, #0x20 mov r2, #0 add r3, r4, #0x88 bl FS_OpenFileDirect ldr r2, [sp, #0x4c] ldr r1, [sp, #0x44] ldr r0, _02214104 ; =0x027FFE00 sub fp, r2, r1 mov r1, sb mov r2, #0x160 add sl, sp, #0x20 bl MI_CpuCopy8 ldr r1, [sb, #0x60] ldr r0, _0221410C ; =0x00406000 orr r0, r1, r0 str r0, [sb, #0x60] _02213D9C: cmp r8, #0x88 movlo r8, #0 blo _02213DD0 mov r0, sl add r1, fp, r4 mov r2, #0 bl FS_SeekFile mov r0, sl mov r1, r7 mov r2, #0x88 bl FS_ReadFile add r7, r7, #0x88 sub r8, r8, #0x88 _02213DD0: cmp r8, #0x70 blo _02213E40 mov r0, r7 mov r6, r7 bl MOD13_02216B80 add r7, r7, #0x70 sub r8, r8, #0x70 mov r0, #3 str r0, [sp] mov r0, r6 mov r1, #0 mov r2, #0x160 mov r3, sb bl MOD13_02216B0C ldr r0, [sl, #8] mov r4, #0 b _02213E18 _02213E14: add r4, r4, #1 _02213E18: cmp r4, #3 bge _02213E2C ldrsb r1, [r0, r4] cmp r1, #0 bne _02213E14 _02213E2C: mov r2, r4 add r1, r6, #0x10 bl MI_CpuCopy8 str r4, [r6, #0x14] b _02213E44 _02213E40: mov r8, #0 _02213E44: cmp r8, #0x10 movlo r8, #0 blo _02213E8C mov r0, #0 str r0, [r7] ldr r0, [sl, #0x24] ldr r1, [sb, #0x20] add r0, fp, r0 add r0, r1, r0 str r0, [r7, #4] ldr r0, [sl, #0x24] ldr r1, [sb, #0x30] add r0, fp, r0 add r0, r1, r0 mov r5, r7 str r0, [r7, #8] add r7, r7, #0x10 sub r8, r8, #0x10 _02213E8C: ldr r1, [sb, #0x2c] ldr r0, [sb, #0x3c] add r0, r1, r0 cmp r8, r0 blo _02213F38 ldr r4, [sl, #0x24] ldr r1, [r5, #4] mov r0, sl sub r1, r1, r4 mov r2, #0 bl FS_SeekFile ldr r2, [sb, #0x2c] mov r0, sl mov r1, r7 bl FS_ReadFile mov r0, #3 str r0, [sp] ldr r1, [r5, #4] ldr r2, [sb, #0x2c] mov r0, r6 mov r3, r7 bl MOD13_02216B0C ldr r1, [sb, #0x2c] mov r0, sl add r7, r7, r1 ldr r1, [r5, #8] mov r2, #0 sub r1, r1, r4 bl FS_SeekFile ldr r2, [sb, #0x3c] mov r0, sl mov r1, r7 bl FS_ReadFile mov r0, #3 str r0, [sp] ldr r1, [r5, #8] ldr r2, [sb, #0x3c] mov r3, r7 mov r0, r6 bl MOD13_02216B0C mov r0, #1 str r0, [sp, #8] b _0221400C _02213F38: cmp r8, #0xcc00 blo _0221400C ldr r4, [sl, #0x24] ldr r5, [r5, #4] mov r0, sl sub r1, r5, r4 mov r2, #0 bl FS_SeekFile mov r0, sl mov r1, r7 mov r2, #0x4400 bl FS_ReadFile mov r0, #3 str r0, [sp] mov r0, r6 mov r1, r5 mov r2, #0x4400 mov r3, r7 bl MOD13_02216B0C add r1, r5, #0x4400 mov r0, sl sub r1, r1, r4 mov r2, #0 bl FS_SeekFile mov r0, sl add r1, r7, #0x4400 mov r2, #0x4400 bl FS_ReadFile mov r0, #2 str r0, [sp] mov r0, r6 add r1, r5, #0x4400 mov r2, #0x4400 add r3, r7, #0x4400 bl MOD13_02216B0C add r1, r5, #0x8800 mov r0, sl sub r1, r1, r4 mov r2, #0 bl FS_SeekFile mov r0, sl add r1, r7, #0x8800 mov r2, #0x4400 bl FS_ReadFile mov r0, #2 str r0, [sp] add r1, r5, #0x8800 add r3, r7, #0x8800 mov r0, r6 mov r2, #0x4400 bl MOD13_02216B0C mov r0, #1 str r0, [sp, #8] _0221400C: mov r0, sl mov r1, fp mov r2, #0 bl FS_SeekFile ldr r0, [sp, #0xc] cmp r0, #0 beq _022140DC add r0, sp, #0x20 bl FS_CloseFile ldr r0, [sp, #8] cmp r0, #0 beq _022140DC ldr r1, [sb, #0x20] ldr r0, _02214110 ; =0x0223F784 str r1, [sp, #0x10] ldr r2, [sb, #0x28] ldr r1, [sb, #0x20] ldr r4, [r0] sub r0, r2, r1 str r0, [sp, #0x14] ldr r2, [r6, #0x48] ldr r1, [sb, #0x20] add r0, sp, #0x10 sub r1, r2, r1 str r1, [sp, #0x18] ldr r1, [sp, #4] mov r2, #0x8000 str r1, [sp, #0x1c] mov r1, #0x4000 mov r3, #1 bl MOD13_02213C1C ldr r0, [r4, #4] cmp r0, #0 beq _022140C4 add r7, sp, #0x10 mov r5, #0 _0221409C: ldr r1, [r4] ldr r2, [r4, #4] mov r0, r7 mov r3, r5 add r2, r1, r2 bl MOD13_02213C1C add r4, r4, #8 ldr r0, [r4, #4] cmp r0, #0 bne _0221409C _022140C4: ldr r1, [sb, #0x28] ldr r2, _02214114 ; =0x02000A74 ldr r3, [r6, #0x48] ldr r0, _02214118 ; =0xE12FFF1E sub r1, r2, r1 str r0, [r3, r1] _022140DC: ldr r0, [sp, #8] cmp r0, #0 beq _022140F4 ldr r1, [sp, #4] mov r0, sb bl DC_FlushRange _022140F4: ldr r0, [sp, #8] add sp, sp, #0x6c ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} bx lr .align 2, 0 _02214104: .word 0x027FFE00 _02214108: .word 0x0223F788 _0221410C: .word 0x00406000 _02214110: .word 0x0223F784 _02214114: .word 0x02000A74 _02214118: .word 0xE12FFF1E arm_func_start MOD13_0221411C MOD13_0221411C: ; 0x0221411C stmdb sp!, {r4, r5, r6, r7, lr} sub sp, sp, #0x64 mov r6, #0 movs r7, r0 mov r5, r6 beq _02214168 ldr ip, [r7, #0x2c] ldr r3, [r7, #0x24] add r1, sp, #0 mov r2, #0x60 sub r4, ip, r3 bl FS_ReadFile cmp r0, #0x60 mov r0, r7 mov r1, r4 mov r2, #0 addhs r6, sp, #0 bl FS_SeekFile b _0221416C _02214168: ldr r6, _0221419C ; =0x027FFE00 _0221416C: cmp r6, #0 beq _0221418C ldr r1, [r6, #0x2c] ldr r0, [r6, #0x3c] add r1, r1, #0x268 add r5, r1, r0 cmp r5, #0x10000 movlo r5, #0x10000 _0221418C: mov r0, r5 add sp, sp, #0x64 ldmia sp!, {r4, r5, r6, r7, lr} bx lr .align 2, 0 _0221419C: .word 0x027FFE00 arm_func_start MOD13_022141A0 MOD13_022141A0: ; 0x022141A0 mov r2, r1, asr #1 cmp r2, #0 mov r3, #0 ble _022141C4 _022141B0: ldrh r1, [r0], #2 sub r2, r2, #1 cmp r2, #0 add r3, r3, r1 bgt _022141B0 _022141C4: ldr r0, _022141E4 ; =0x0000FFFF and r1, r3, r0 add r1, r1, r3, lsr #16 add r1, r1, r1, lsr #16 eor r0, r1, r0 mov r0, r0, lsl #0x10 mov r0, r0, lsr #0x10 bx lr .align 2, 0 _022141E4: .word 0x0000FFFF arm_func_start MOD13_022141E8 MOD13_022141E8: ; 0x022141E8 stmdb sp!, {r4, r5, r6, lr} mov r6, r0 mov r4, r2 add r2, r6, #0x1f mov r5, r1 mov r0, r4 bic r1, r2, #0x1f bl DC_FlushRange bl DC_WaitWriteBufferEmpty mov r0, r4 mov r1, r6 mov r2, r5 bl MOD13_02214C08 ldmia sp!, {r4, r5, r6, lr} bx lr arm_func_start MOD13_02214224 MOD13_02214224: ; 0x02214224 stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} sub sp, sp, #0x14 ldr r3, _022144AC ; =0x02240A50 str r0, [sp, #8] ldr r0, [r3, #4] ldrb r3, [r3, #0xe] ldrb r0, [r0, #0x4b4] str r1, [sp, #0xc] str r2, [sp, #0x10] cmp r3, r0 beq _02214254 bl MOD13_022144C8 _02214254: ldr r3, _022144B0 ; =0x02240A80 ldr r1, _022144AC ; =0x02240A50 ldrb r2, [r3, #4] ldr r0, [r1, #4] ldrb r5, [r1, #0x11] bic r2, r2, #3 orr r2, r2, #2 strb r2, [r3, #4] ldrb r4, [r0, #0x4b3] ldrb r2, [r1, #0xe] ldrb r7, [r3, #4] strb r4, [r3, #5] strb r2, [r3, #6] ldr r4, [r0, #0x4b8] ldr r2, _022144B4 ; =0x02240A48 str r4, [r3] ldrb r6, [r0, #0x4b5] add r4, r5, #1 bic r7, r7, #0xfc and r6, r6, #0x3f orr r6, r7, r6, lsl #2 strb r6, [r3, #4] strb r4, [r1, #0x11] strb r5, [r3, #7] ldrb r4, [r0, #0x358] add r1, r0, #0x300 ldr r2, [r2] strb r4, [r3, #0xa] ldrh r4, [r1, #0x5a] cmp r2, #0 strh r4, [r3, #0xc] ldrh r1, [r1, #0x5c] strh r1, [r3, #0xe] bne _022142F4 ldr r1, _022144B8 ; =0x02240A4C ldr r1, [r1] cmp r1, #0 beq _022142F4 ldr r0, [r0, #0x4b8] blx r1 _022142F4: ldr r0, _022144AC ; =0x02240A50 ldr r1, _022144B0 ; =0x02240A80 ldr r2, [r0, #4] mov r3, #0 _02214304: ldrb r0, [r2, #0x4a8] add r3, r3, #1 cmp r3, #8 strb r0, [r1, #0x68] add r2, r2, #1 add r1, r1, #1 blt _02214304 ldr r1, _022144BC ; =0x02240A90 mov r0, #0 mov r2, #0x58 bl MIi_CpuClear16 ldr r0, _022144AC ; =0x02240A50 mov sl, #0 ldr r1, [r0, #4] ldr sb, _022144BC ; =0x02240A90 add r0, r1, #0x400 add r1, r1, #0x300 ldrh r2, [r0, #0xb0] ldrh r0, [r1, #0x5a] mov r5, sl mov r8, sl eor r0, r2, r0 mov r0, r0, lsl #0x10 mov r7, r0, lsr #0x10 mov fp, #0x16 mov r4, #2 _0221436C: mov r6, r4, lsl r5 ands r0, r7, r6 beq _022143C0 ldr r0, _022144AC ; =0x02240A50 mov r1, sb ldr r2, [r0, #4] ldr r0, _022144C0 ; =0x0000035E add r0, r2, r0 add r0, r0, r8 mov r2, fp bl MIi_CpuCopy16 ldr r0, _022144AC ; =0x02240A50 add sl, sl, #1 ldr r0, [r0, #4] add sb, sb, #0x16 add r0, r0, #0x400 ldrh r1, [r0, #0xb0] cmp sl, #4 orr r1, r1, r6 strh r1, [r0, #0xb0] beq _022143D0 _022143C0: add r5, r5, #1 cmp r5, #0xf add r8, r8, #0x16 blt _0221436C _022143D0: cmp sl, #4 bhs _022143F0 mov r0, #0x16 mul r1, sl, r0 ldr r2, _022144BC ; =0x02240A90 ldrb r0, [r2, r1] bic r0, r0, #0xf0 strb r0, [r2, r1] _022143F0: ldr r2, _022144B0 ; =0x02240A80 mov r3, #0 ldr r0, _022144C4 ; =0x02240A88 mov r1, #0x68 strh r3, [r2, #8] bl MOD13_022141A0 ldr r2, _022144AC ; =0x02240A50 ldr r1, _022144B0 ; =0x02240A80 ldr r3, [r2, #4] strh r0, [r1, #8] add r0, r3, #0x400 add r1, r3, #0x300 ldrh r3, [r0, #0xb0] ldrh r0, [r1, #0x5a] ldr r1, _022144B0 ; =0x02240A80 cmp r3, r0 moveq r0, #1 streqb r0, [r2, #0xc] ldr r0, [sp, #0x10] ldr r3, [sp, #8] orr r2, r0, #3 ldr r0, [sp, #0xc] and r4, r2, #0xff str r0, [sp] mov r0, #0 mov r2, #0x70 str r4, [sp, #4] bl WM_SetGameInfo ldr r0, _022144B4 ; =0x02240A48 ldr r0, [r0] cmp r0, #1 addne sp, sp, #0x14 ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} bxne lr ldr r0, _022144B8 ; =0x02240A4C ldr r1, [r0] cmp r1, #0 addeq sp, sp, #0x14 ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} bxeq lr ldr r0, _022144AC ; =0x02240A50 ldr r0, [r0, #4] ldr r0, [r0, #0x4b8] blx r1 add sp, sp, #0x14 ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} bx lr .align 2, 0 _022144AC: .word 0x02240A50 _022144B0: .word 0x02240A80 _022144B4: .word 0x02240A48 _022144B8: .word 0x02240A4C _022144BC: .word 0x02240A90 _022144C0: .word 0x0000035E _022144C4: .word 0x02240A88 arm_func_start MOD13_022144C8 MOD13_022144C8: ; 0x022144C8 ldr r1, _022144F4 ; =0x02240A50 mov r3, #1 ldr r0, [r1, #4] mov r2, #5 add r0, r0, #0x400 strh r3, [r0, #0xb0] ldr r0, [r1, #4] ldrb r0, [r0, #0x4b4] strb r0, [r1, #0xe] strb r2, [r1, #0xc] bx lr .align 2, 0 _022144F4: .word 0x02240A50 arm_func_start MOD13_022144F8 MOD13_022144F8: ; 0x022144F8 stmdb sp!, {r4, r5, r6, r7, r8, lr} sub sp, sp, #8 ldr r3, _02214660 ; =0x02240A50 mov r6, r0 ldr r0, [r3, #4] ldr r3, [r3, #8] add r7, r0, #0x358 add r0, r3, #0x62 cmp r0, r7 mov r5, r1 ldrls r0, _02214664 ; =0x02240A80 movls r1, #0x62 mov r4, r2 strlsb r1, [r0, #0xc] bls _02214558 ldr r0, _02214664 ; =0x02240A80 sub r1, r7, r3 strb r1, [r0, #0xc] ldrb r2, [r0, #0xc] ldr r1, _02214668 ; =0x02240A8E mov r0, #0 add r1, r1, r2 rsb r2, r2, #0x62 bl MIi_CpuClear16 _02214558: ldr r0, _02214664 ; =0x02240A80 ldr r1, _02214660 ; =0x02240A50 ldrb r2, [r0, #0xc] ldr r0, [r1, #8] ldr r1, _02214668 ; =0x02240A8E bl MIi_CpuCopy16 ldr r3, _02214660 ; =0x02240A50 ldr r2, _02214664 ; =0x02240A80 ldrb r8, [r3, #0xf] ldrb r1, [r3, #0x10] ldrb r7, [r2, #4] strb r8, [r2, #0xa] ldr r0, [r3, #4] strb r1, [r2, #0xb] ldrb r1, [r0, #0x4b2] bic r7, r7, #3 ldrb r8, [r3, #0xe] and r1, r1, #3 orr r1, r7, r1 strb r1, [r2, #4] ldrb ip, [r0, #0x4b3] ldrb r1, [r2, #4] ldrb r7, [r3, #0x11] strb ip, [r2, #5] strb r8, [r2, #6] ldr r8, [r0, #0x4b8] bic r1, r1, #0xfc str r8, [r2] ldrb r0, [r0, #0x4b5] add lr, r7, #1 mov ip, #0 and r0, r0, #0x3f orr r8, r1, r0, lsl #2 ldr r0, _0221466C ; =0x02240A88 mov r1, #0x68 strb r8, [r2, #4] strb lr, [r3, #0x11] strb r7, [r2, #7] strh ip, [r2, #8] bl MOD13_022141A0 ldr r1, _02214660 ; =0x02240A50 ldr r2, _02214664 ; =0x02240A80 ldrb ip, [r1, #0xf] strh r0, [r2, #8] ldrb r3, [r1, #0x10] add r0, ip, #1 strb r0, [r1, #0xf] ldrb r0, [r1, #0xf] mov r2, #0x70 cmp r0, r3 ldrlo r0, [r1, #8] mov r3, r6 addlo r0, r0, #0x62 strlo r0, [r1, #8] movhs r0, #4 strhsb r0, [r1, #0xc] orr r0, r4, #3 and r4, r0, #0xff str r5, [sp] ldr r1, _02214664 ; =0x02240A80 mov r0, #0 str r4, [sp, #4] bl WM_SetGameInfo add sp, sp, #8 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr .align 2, 0 _02214660: .word 0x02240A50 _02214664: .word 0x02240A80 _02214668: .word 0x02240A8E _0221466C: .word 0x02240A88 arm_func_start MOD13_02214670 MOD13_02214670: ; 0x02214670 ldr r0, _022146B8 ; =0x02240A50 ldrb r1, [r0, #0xc] cmp r1, #2 bxne lr ldr r2, [r0, #4] ldrb r1, [r2, #0x4b2] cmp r1, #0 moveq r1, #9 streqb r1, [r0, #0x10] streq r2, [r0, #8] addne r1, r2, #0x220 movne r2, #4 strne r1, [r0, #8] strneb r2, [r0, #0x10] ldr r0, _022146B8 ; =0x02240A50 mov r1, #3 strb r1, [r0, #0xc] bx lr .align 2, 0 _022146B8: .word 0x02240A50 arm_func_start MOD13_022146BC MOD13_022146BC: ; 0x022146BC stmdb sp!, {r4, lr} sub sp, sp, #8 ldr r0, _02214760 ; =0x02240A50 ldr r1, [r0] cmp r1, #0 bne _02214710 bl MOD13_02214BF4 mov r4, r0 bl MOD13_02214BE0 str r0, [sp] mov ip, #8 ldr r1, _02214764 ; =0x02240A80 mov r3, r4 mov r0, #0 mov r2, #0x70 str ip, [sp, #4] bl WM_SetGameInfo add sp, sp, #8 mov r0, #0 ldmia sp!, {r4, lr} bx lr _02214710: ldr r0, [r0, #4] cmp r0, #0 beq _0221472C ldr r0, [r0, #0x4bc] cmp r0, #0 beq _0221472C mov r1, r0 _0221472C: ldr r0, _02214760 ; =0x02240A50 str r1, [r0, #4] bl MOD13_02214810 ldr r1, _02214760 ; =0x02240A50 mov r2, #2 ldr r3, [r1, #4] mov r0, #1 ldrb r3, [r3, #0x4b4] strb r3, [r1, #0xe] strb r2, [r1, #0xc] add sp, sp, #8 ldmia sp!, {r4, lr} bx lr .align 2, 0 _02214760: .word 0x02240A50 _02214764: .word 0x02240A80 arm_func_start MOD13_02214768 MOD13_02214768: ; 0x02214768 stmdb sp!, {r4, r5, r6, r7, lr} sub sp, sp, #4 mov r7, r0 mov r6, r1 mov r5, r2 ldr r4, _0221480C ; =0x02240A50 _02214780: ldrb r0, [r4, #0xc] cmp r0, #6 addls pc, pc, r0, lsl #2 b _02214780 _02214790: ; jump table b _022147AC ; case 0 b _022147AC ; case 1 b _022147C4 ; case 2 b _022147CC ; case 3 b _022147E8 ; case 4 b _022147F0 ; case 5 b _02214780 ; case 6 _022147AC: bl MOD13_022146BC cmp r0, #0 bne _02214780 add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, lr} bx lr _022147C4: bl MOD13_02214670 b _02214780 _022147CC: mov r0, r7 mov r1, r6 mov r2, r5 bl MOD13_022144F8 add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, lr} bx lr _022147E8: bl MOD13_022144C8 b _02214780 _022147F0: mov r0, r7 mov r1, r6 mov r2, r5 bl MOD13_02214224 add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, lr} bx lr .align 2, 0 _0221480C: .word 0x02240A50 arm_func_start MOD13_02214810 MOD13_02214810: ; 0x02214810 ldr r0, _02214830 ; =0x02240A50 mov r1, #0 strb r1, [r0, #0xd] strb r1, [r0, #0xe] strb r1, [r0, #0xf] strb r1, [r0, #0x10] strb r1, [r0, #0x11] bx lr .align 2, 0 _02214830: .word 0x02240A50 arm_func_start MOD13_02214834 MOD13_02214834: ; 0x02214834 ldr r1, _0221485C ; =0x02240A50 mov r3, #0 ldr r0, _02214860 ; =0x02240A4C mov r2, #1 ldr ip, _02214864 ; =MOD13_02214810 str r3, [r1] str r3, [r1, #4] strb r2, [r1, #0xc] str r3, [r0] bx ip .align 2, 0 _0221485C: .word 0x02240A50 _02214860: .word 0x02240A4C _02214864: .word MOD13_02214810 arm_func_start MOD13_02214868 MOD13_02214868: ; 0x02214868 ldr r1, _022148A8 ; =0x02240A50 ldr r2, [r1] cmp r2, #0 streq r0, [r1] beq _0221489C ldr r1, [r2, #0x4bc] cmp r1, #0 beq _02214898 _02214888: mov r2, r1 ldr r1, [r1, #0x4bc] cmp r1, #0 bne _02214888 _02214898: str r0, [r2, #0x4bc] _0221489C: mov r1, #0 str r1, [r0, #0x4bc] bx lr .align 2, 0 _022148A8: .word 0x02240A50 arm_func_start MOD13_022148AC MOD13_022148AC: ; 0x022148AC ldrh r1, [r0], #2 mov r2, #0 cmp r1, #0 beq _022148CC _022148BC: ldrh r1, [r0], #2 add r2, r2, #1 cmp r1, #0 bne _022148BC _022148CC: mov r0, r2 bx lr arm_func_start MOD13_022148D4 MOD13_022148D4: ; 0x022148D4 stmdb sp!, {r4, r5, r6, r7, lr} sub sp, sp, #4 ldr r4, _02214950 ; =0x0000035E mov r6, r0 mov r5, r2 mov r0, r1 ldr r2, _02214954 ; =0x0000014A add r1, r6, r4 mov r4, r3 mov r7, #1 bl MIi_CpuCopy16 mov r2, #0 mov r1, #2 _02214908: mov r0, r1, lsl r2 ands r0, r5, r0 addne r0, r7, #1 add r2, r2, #1 andne r7, r0, #0xff cmp r2, #0xf blt _02214908 strb r7, [r6, #0x358] orr r1, r5, #1 add r0, r6, #0x300 strh r1, [r0, #0x5a] strh r4, [r0, #0x5c] ldrb r0, [r6, #0x4b4] add r0, r0, #1 strb r0, [r6, #0x4b4] add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, lr} bx lr .align 2, 0 _02214950: .word 0x0000035E _02214954: .word 0x0000014A arm_func_start MOD13_02214958 MOD13_02214958: ; 0x02214958 stmdb sp!, {r4, r5, r6, lr} sub sp, sp, #0x48 cmp r2, #0 movne r4, #0x200 moveq r4, #0x20 mov r6, r0 mov r5, r1 cmp r2, #0 addne r5, r5, #0x20 cmp r6, #0 addeq sp, sp, #0x48 moveq r0, #0 ldmeqia sp!, {r4, r5, r6, lr} bxeq lr add r0, sp, #0 bl FS_InitFile add r0, sp, #0 mov r1, r6 bl FS_OpenFile cmp r0, #0 addeq sp, sp, #0x48 moveq r0, #0 ldmeqia sp!, {r4, r5, r6, lr} bxeq lr ldr r1, [sp, #0x28] ldr r0, [sp, #0x24] sub r0, r1, r0 cmp r4, r0 beq _022149E4 add r0, sp, #0 bl FS_CloseFile add sp, sp, #0x48 mov r0, #0 ldmia sp!, {r4, r5, r6, lr} bx lr _022149E4: add r0, sp, #0 mov r1, r5 mov r2, r4 bl FS_ReadFile add r0, sp, #0 bl FS_CloseFile mov r0, #1 add sp, sp, #0x48 ldmia sp!, {r4, r5, r6, lr} bx lr arm_func_start MOD13_02214A0C MOD13_02214A0C: ; 0x02214A0C stmdb sp!, {r4, r5, r6, r7, lr} sub sp, sp, #4 mov r6, r0 mov r5, r1 mov r4, r2 mov r1, r6 mov r0, #0 mov r2, #0x4c0 bl MIi_CpuClear16 mov r0, #0 strb r0, [r6, #0x4b2] ldr r0, [r5, #0xc] mov r1, r6 mov r2, #1 bl MOD13_02214958 cmp r0, #0 moveq r7, #1 ldr r0, [r5, #0x10] mov r1, r6 mov r2, #0 movne r7, #0 bl MOD13_02214958 cmp r0, #0 moveq r0, #1 movne r0, #0 orrs r0, r7, r0 beq _02214A90 mov r3, #1 mov r1, r6 mov r0, #0 mov r2, #0x220 strb r3, [r6, #0x4b2] bl MIi_CpuClearFast _02214A90: ldr r0, [r5, #0x14] cmp r4, #0 str r0, [r6, #0x4b8] beq _02214AB0 mov r0, r4 add r1, r6, #0x220 mov r2, #0x16 bl MIi_CpuCopy16 _02214AB0: ldrb r0, [r5, #0x18] strb r0, [r6, #0x236] ldr r0, [r5, #4] bl MOD13_022148AC mov r2, r0, lsl #0x11 ldr r0, [r5, #4] add r1, r6, #0x238 mov r2, r2, lsr #0x10 bl MIi_CpuCopy16 ldr r0, [r5, #8] add r1, r6, #0x298 mov r2, #0xc0 bl MIi_CpuCopy16 mov r1, #1 strb r1, [r6, #0x358] add r0, r6, #0x300 strh r1, [r0, #0x5a] add r0, r6, #0x400 strh r1, [r0, #0xb0] add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, lr} bx lr arm_func_start MOD13_02214B08 MOD13_02214B08: ; 0x02214B08 stmdb sp!, {lr} sub sp, sp, #4 cmp r1, #2 addeq sp, sp, #4 ldmeqia sp!, {lr} bxeq lr cmp r1, #0 addeq sp, sp, #4 ldmeqia sp!, {lr} bxeq lr ldr r2, _02214B5C ; =0x02240AF8 strh r0, [sp] ldr r0, [r2] strh r1, [sp, #2] ldr r2, [r0, #0x51c] add r1, sp, #0 mov r0, #0xff blx r2 add sp, sp, #4 ldmia sp!, {lr} bx lr .align 2, 0 _02214B5C: .word 0x02240AF8 arm_func_start MOD13_02214B60 MOD13_02214B60: ; 0x02214B60 ldr r0, _02214B7C ; =0x02240AF8 ldr r0, [r0] ldrb r0, [r0, #0x50d] cmp r0, #1 moveq r0, #1 movne r0, #0 bx lr .align 2, 0 _02214B7C: .word 0x02240AF8 arm_func_start MOD13_02214B80 MOD13_02214B80: ; 0x02214B80 ldr r0, _02214BDC ; =0x02240AF8 ldr r1, [r0] ldrh r0, [r1, #0x12] cmp r0, #0 ldrh r0, [r1, #0xe] movne r2, #2 moveq r2, #0 cmp r0, #0 movne r3, #1 ldrh r0, [r1, #0x14] moveq r3, #0 cmp r0, #0 movne ip, #4 ldrh r0, [r1, #0x16] moveq ip, #0 cmp r0, #0 movne r1, #8 orr r0, r3, r2 moveq r1, #0 orr r0, ip, r0 orr r0, r1, r0 and r0, r0, #0xff bx lr .align 2, 0 _02214BDC: .word 0x02240AF8 arm_func_start MOD13_02214BE0 MOD13_02214BE0: ; 0x02214BE0 ldr r0, _02214BF0 ; =0x02240AF8 ldr r0, [r0] ldrh r0, [r0, #0xc] bx lr .align 2, 0 _02214BF0: .word 0x02240AF8 arm_func_start MOD13_02214BF4 MOD13_02214BF4: ; 0x02214BF4 ldr r0, _02214C04 ; =0x02240AF8 ldr r0, [r0] ldr r0, [r0, #8] bx lr .align 2, 0 _02214C04: .word 0x02240AF8 arm_func_start MOD13_02214C08 MOD13_02214C08: ; 0x02214C08 stmdb sp!, {r4, r5, lr} sub sp, sp, #4 ldr ip, _02214D04 ; =0x02240AF8 mov r3, r1, lsl #0x10 ldr r5, [ip] mov ip, r2, lsl #0x10 add lr, r5, #0x500 ldrh r4, [lr, #0x28] mov r1, r0 mov r2, r3, lsr #0x10 cmp r4, #0 mov r4, ip, lsr #0x10 beq _02214C48 ldrh r0, [lr, #0x26] cmp r0, #1 bne _02214C58 _02214C48: add sp, sp, #4 mov r0, #1 ldmia sp!, {r4, r5, lr} bx lr _02214C58: ldrh r0, [lr, #0x24] cmp r0, #1 beq _02214C70 cmp r0, #2 beq _02214CBC b _02214CF4 _02214C70: ldrh r0, [lr, #0x2c] cmp r0, #0 moveq r0, #0x3e8 movne r0, #0 mov r3, r0, lsl #0x10 str r4, [sp] ldr r0, [r5, #0x508] mov r3, r3, lsr #0x10 bl MOD13_02214D0C cmp r0, #2 ldreq r1, _02214D04 ; =0x02240AF8 moveq r2, #1 ldreq r1, [r1] add sp, sp, #4 streqb r2, [r1, #0x50c] cmp r0, #2 moveq r0, #0 ldmia sp!, {r4, r5, lr} bx lr _02214CBC: ldr r0, _02214D08 ; =MOD13_02215724 mov r3, #0 str r4, [sp] bl MOD13_02214D0C cmp r0, #2 ldreq r1, _02214D04 ; =0x02240AF8 moveq r2, #1 ldreq r1, [r1] add sp, sp, #4 streqb r2, [r1, #0x50c] cmp r0, #2 moveq r0, #0 ldmia sp!, {r4, r5, lr} bx lr _02214CF4: mov r0, #1 add sp, sp, #4 ldmia sp!, {r4, r5, lr} bx lr .align 2, 0 _02214D04: .word 0x02240AF8 _02214D08: .word MOD13_02215724 arm_func_start MOD13_02214D0C MOD13_02214D0C: ; 0x02214D0C stmdb sp!, {r4, lr} sub sp, sp, #0x10 ldrh r4, [sp, #0x18] mov r3, r2 mov r2, r1 str r4, [sp] mov r4, #1 str r4, [sp, #4] mov r4, #3 mov r1, #0 str r4, [sp, #8] bl WM_SetMPDataToPortEx mov r4, r0 mov r1, r4 mov r0, #0xf bl MOD13_02214B08 mov r0, r4 add sp, sp, #0x10 ldmia sp!, {r4, lr} bx lr arm_func_start MOD13_02214D5C MOD13_02214D5C: ; 0x02214D5C ldr r1, _02214D68 ; =0x02240B00 strh r0, [r1, #6] bx lr .align 2, 0 _02214D68: .word 0x02240B00 arm_func_start MOD13_02214D6C MOD13_02214D6C: ; 0x02214D6C stmdb sp!, {r4, r5, r6, r7, lr} sub sp, sp, #4 mov r5, r0 ldr r0, _02214F08 ; =MOD13_02216098 mov r1, r5 bl WM_Disconnect cmp r5, #0 addeq sp, sp, #4 ldmeqia sp!, {r4, r5, r6, r7, lr} bxeq lr cmp r5, #0x10 addhs sp, sp, #4 ldmhsia sp!, {r4, r5, r6, r7, lr} bxhs lr ldr r2, _02214F0C ; =0x02240AFC sub r4, r5, #1 ldr r0, [r2] mov r1, #0 add r0, r0, r4, lsl #1 add r0, r0, #0x1400 strh r1, [r0, #0x8a] ldr r3, [r2] ldr r0, _02214F10 ; =0x000014A8 mov r2, #4 add r0, r3, r0 add r0, r0, r4, lsl #2 bl MI_CpuFill8 ldr r0, _02214F0C ; =0x02240AFC mov r2, #0x16 ldr r0, [r0] mov r1, #0 add r0, r0, #0x1340 mla r0, r4, r2, r0 bl MI_CpuFill8 mov r0, r5 bl MOD13_02217234 ldr lr, _02214F0C ; =0x02240AFC mov r2, #0 ldr r1, [lr] mvn r0, #0 add r1, r1, r4, lsl #1 add r1, r1, #0x1700 strh r2, [r1, #0x54] ldr r3, [lr] add r1, r3, r4 add r1, r1, #0x1500 ldrsb r2, [r1, #0x26] cmp r2, r0 beq _02214E9C ldr r1, _02214F14 ; =0x000005D4 and r2, r2, #0xff mul r1, r2, r1 add r2, r3, r1 add ip, r2, #0x1d00 mov r3, #1 ldrh r6, [ip, #0x4e] mvn r2, r3, lsl r5 and r6, r6, r2 strh r6, [ip, #0x4e] ldr r7, [lr] mov r6, r4 add r7, r7, r1 add ip, r7, #0x1d00 ldrh r7, [ip, #0x50] orr r3, r7, r3, lsl r5 strh r3, [ip, #0x50] ldr r3, [lr] add r3, r3, r6 add r3, r3, #0x1000 strb r0, [r3, #0x526] ldr r0, [lr] add r0, r0, r1 add r0, r0, #0x1d00 ldrh r1, [r0, #0x4c] and r1, r1, r2 strh r1, [r0, #0x4c] _02214E9C: ldr r1, _02214F0C ; =0x02240AFC mov r0, #1 ldr r2, [r1] mov r5, r0, lsl r5 add r0, r2, #0x1500 ldrh r0, [r0, #0x36] ands r0, r0, r5 beq _02214EE4 add r0, r2, #0x1000 ldrb r3, [r0, #0x535] mvn r2, r5 sub r3, r3, #1 strb r3, [r0, #0x535] ldr r0, [r1] add r0, r0, #0x1500 ldrh r1, [r0, #0x36] and r1, r1, r2 strh r1, [r0, #0x36] _02214EE4: ldr r0, _02214F0C ; =0x02240AFC mov r1, #0 ldr r0, [r0] add r0, r0, r4, lsl #2 add r0, r0, #0x1000 str r1, [r0, #0x4e8] add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, lr} bx lr .align 2, 0 _02214F08: .word MOD13_02216098 _02214F0C: .word 0x02240AFC _02214F10: .word 0x000014A8 _02214F14: .word 0x000005D4 arm_func_start MOD13_02214F18 MOD13_02214F18: ; 0x02214F18 stmdb sp!, {r4, lr} bl OS_DisableInterrupts ldr r1, _02214F54 ; =0x02240AFC mov r4, r0 ldr r0, [r1] add r0, r0, #0x1000 ldr r0, [r0, #0x320] cmp r0, #0 bne _02214F40 bl OS_Terminate _02214F40: bl MOD13_02214F58 mov r0, r4 bl OS_RestoreInterrupts ldmia sp!, {r4, lr} bx lr .align 2, 0 _02214F54: .word 0x02240AFC arm_func_start MOD13_02214F58 MOD13_02214F58: ; 0x02214F58 stmdb sp!, {r4, r5, lr} sub sp, sp, #4 mov r5, #1 bl OS_DisableInterrupts ldr r1, _02214FD8 ; =0x02240AF8 mov r4, r0 ldr r2, [r1] add r0, r2, #0x500 ldrh r0, [r0, #0x26] cmp r0, #0 bne _02214FC0 mov r0, #0 str r0, [r2, #0x5e4] ldr r0, [r1] mov r1, r5 add r0, r0, #0x500 strh r1, [r0, #0x26] bl MOD13_02216DA4 cmp r0, #0 beq _02214FB8 ldr r0, _02214FDC ; =MOD13_02214FE0 bl MOD13_02216B94 mov r5, #0 b _02214FC0 _02214FB8: bl MOD13_02214FEC mov r5, r0 _02214FC0: mov r0, r4 bl OS_RestoreInterrupts mov r0, r5 add sp, sp, #4 ldmia sp!, {r4, r5, lr} bx lr .align 2, 0 _02214FD8: .word 0x02240AF8 _02214FDC: .word MOD13_02214FE0 arm_func_start MOD13_02214FE0 MOD13_02214FE0: ; 0x02214FE0 ldr ip, _02214FE8 ; =MOD13_02214FEC bx ip .align 2, 0 _02214FE8: .word MOD13_02214FEC arm_func_start MOD13_02214FEC MOD13_02214FEC: ; 0x02214FEC stmdb sp!, {r4, lr} ldr r0, _02215024 ; =0x02240AF8 ldr r0, [r0] ldr r0, [r0, #0x508] bl WM_Reset mov r4, r0 mov r1, r4 mov r0, #1 bl MOD13_02214B08 cmp r4, #2 moveq r4, #0 mov r0, r4 ldmia sp!, {r4, lr} bx lr .align 2, 0 _02215024: .word 0x02240AF8 arm_func_start MOD13_02215028 MOD13_02215028: ; 0x02215028 ldr r1, _02215044 ; =0x02240AFC ldr ip, _02215048 ; =MOD13_0221504C ldr r1, [r1] mov r2, #1 add r1, r1, #0x1000 str r2, [r1, #0x320] bx ip .align 2, 0 _02215044: .word 0x02240AFC _02215048: .word MOD13_0221504C arm_func_start MOD13_0221504C MOD13_0221504C: ; 0x0221504C stmdb sp!, {r4, r5, lr} sub sp, sp, #4 mov r4, r0 bl OS_DisableInterrupts ldr r1, _02215234 ; =0x02240AF8 ldr r2, _02215238 ; =0x02240AFC ldr r3, [r1] ldr r1, _0221523C ; =0x00007D1F strh r4, [r3, #0x32] ldr r3, [r2] ldr r2, _02215240 ; =0x02240AF4 add r1, r3, r1 bic r1, r1, #0x1f mov r4, r0 str r1, [r2] add r0, r3, #0x1000 ldr r5, [r0, #0x4e4] ldr r2, _02215244 ; =0x000069C0 add r1, r3, #0x1340 mov r0, #0 bl MIi_CpuClear16 mov r0, r5 bl MOD13_02213368 ldr r1, _02215234 ; =0x02240AF8 ldr r0, _02215238 ; =0x02240AFC ldr r3, [r1] ldr r2, [r0] add r0, r3, #0x500 ldrh r3, [r0] add r0, r2, #0x1000 sub r2, r3, #6 str r2, [r0, #0x318] ldr r0, [r1] add r0, r0, #0x500 ldrh r0, [r0, #2] bl MOD13_022172A0 ldr r1, _02215238 ; =0x02240AFC ldr r0, _02215248 ; =0x00001538 ldr r1, [r1] add r0, r1, r0 bl MOD13_02217280 mov r5, #0 ldr r2, _02215238 ; =0x02240AFC mov r0, r5 mvn r3, #0 _02215100: ldr r1, [r2] add r1, r1, r5, lsl #2 add r1, r1, #0x1000 str r0, [r1, #0x4e8] ldr r1, [r2] add r1, r1, r5 add r1, r1, #0x1000 add r5, r5, #1 strb r3, [r1, #0x526] cmp r5, #0xf blt _02215100 ldr r1, [r2] ldr r3, _0221524C ; =0x00001788 add r1, r1, #0x1000 strb r0, [r1, #0x524] ldr r1, [r2] ldr r2, _02215250 ; =0x00005D40 add r1, r1, r3 bl MIi_CpuClear16 ldr r1, _02215238 ; =0x02240AFC ldr r0, _02215254 ; =0x00001754 ldr r2, [r1] mov r1, #0 add r0, r2, r0 mov r2, #0x1e bl MI_CpuFill8 ldr r2, _02215234 ; =0x02240AF8 mov r3, #1 ldr r0, [r2] ldr r1, _02215258 ; =MOD13_02212C20 add r0, r0, #0x500 strh r3, [r0, #0x24] ldr r0, [r2] ldr r3, _0221525C ; =MOD13_02216098 str r1, [r0, #0x51c] ldr r0, [r2] mov r1, #0xf str r3, [r0, #0x508] ldr r3, [r2] add r0, r3, #0x500 ldrh r0, [r0] strh r0, [r3, #0x34] ldr r0, [r2] ldrh r3, [r0, #0x34] add r0, r0, #0x500 add r3, r3, #0x23 bic r3, r3, #0x1f strh r3, [r0, #0x18] ldr r3, [r2] add r0, r3, #0x500 ldrh r0, [r0, #2] strh r0, [r3, #0x36] ldr r0, [r2] ldrh r2, [r0, #0x36] add r0, r0, #0x500 add r2, r2, #0xe mul r1, r2, r1 add r1, r1, #0x29 bic r1, r1, #0x1f mov r1, r1, lsl #1 strh r1, [r0, #0x1a] bl MOD13_02214834 bl MOD13_02215260 mov r5, r0 mov r0, r4 bl OS_RestoreInterrupts mov r0, #0xf mov r1, #1 bl PXI_IsCallbackReady ldr r1, _02215238 ; =0x02240AFC ldr r1, [r1] add r1, r1, #0x7000 str r0, [r1, #0x4c8] mov r0, r5 add sp, sp, #4 ldmia sp!, {r4, r5, lr} bx lr .align 2, 0 _02215234: .word 0x02240AF8 _02215238: .word 0x02240AFC _0221523C: .word 0x00007D1F _02215240: .word 0x02240AF4 _02215244: .word 0x000069C0 _02215248: .word 0x00001538 _0221524C: .word 0x00001788 _02215250: .word 0x00005D40 _02215254: .word 0x00001754 _02215258: .word MOD13_02212C20 _0221525C: .word MOD13_02216098 arm_func_start MOD13_02215260 MOD13_02215260: ; 0x02215260 stmdb sp!, {r4, r5, r6, lr} ldr r2, _02215350 ; =0x02240AF8 mov r3, #0 ldr r1, [r2] mov r0, #0xa add r1, r1, #0x500 strh r3, [r1, #0x28] ldr r1, [r2] add r1, r1, #0x500 strh r3, [r1, #0x2a] ldr r1, [r2] add r1, r1, #0x500 strh r3, [r1, #0x26] ldr r1, [r2] add r1, r1, #0x500 strh r3, [r1, #0x48] bl MOD13_02214D5C ldr r0, _02215354 ; =0x02240AFC ldr r0, [r0] add r0, r0, #0x1000 ldr r0, [r0, #0x320] cmp r0, #0 bne _02215320 ldr r6, _02215358 ; =0x02240AF4 ldr r5, _02215350 ; =0x02240AF8 ldr r4, _0221535C ; =0x02240AF0 _022152C8: ldr r1, [r5] ldrh r2, [r4] ldr r0, [r6] ldr r1, [r1, #0x508] bl WM_Initialize cmp r0, #4 beq _022152C8 cmp r0, #2 movne r0, #8 ldmneia sp!, {r4, r5, r6, lr} bxne lr ldr r0, _02215350 ; =0x02240AF8 ldr r0, [r0] ldr r0, [r0, #0x508] bl WM_SetIndCallback ldr r0, _02215350 ; =0x02240AF8 mov r2, #1 ldr r1, [r0] mov r0, #0 strb r2, [r1, #0x50d] ldmia sp!, {r4, r5, r6, lr} bx lr _02215320: ldr r0, _02215350 ; =0x02240AF8 ldr r0, [r0] ldr r0, [r0, #0x508] bl WM_SetIndCallback ldr r0, _02215350 ; =0x02240AF8 mov r1, #1 ldr r0, [r0] strb r1, [r0, #0x50d] bl MOD13_02216910 mov r0, #0 ldmia sp!, {r4, r5, r6, lr} bx lr .align 2, 0 _02215350: .word 0x02240AF8 _02215354: .word 0x02240AFC _02215358: .word 0x02240AF4 _0221535C: .word 0x02240AF0 arm_func_start MOD13_02215360 MOD13_02215360: ; 0x02215360 stmdb sp!, {r4, r5, r6, lr} mov r5, r0 mov r4, r1 bl OS_DisableInterrupts ldr r1, _02215400 ; =0x02240AF8 mov r6, r0 ldr r1, [r1] ldrb r1, [r1, #0x50d] cmp r1, #0 beq _02215398 bl OS_RestoreInterrupts mov r0, #0 ldmia sp!, {r4, r5, r6, lr} bx lr _02215398: mov r0, r5 mov r2, r4 mov r1, #8 bl MOD13_02215404 cmp r0, #0 bne _022153C4 mov r0, r6 bl OS_RestoreInterrupts mov r0, #0 ldmia sp!, {r4, r5, r6, lr} bx lr _022153C4: ldr r2, _02215400 ; =0x02240AF8 mov r0, r6 ldr r1, [r2] mov r3, #8 strh r4, [r1, #0x10] ldr r1, [r2] add r1, r1, #0x500 strh r5, [r1] ldr r1, [r2] add r1, r1, #0x500 strh r3, [r1, #2] bl OS_RestoreInterrupts mov r0, #1 ldmia sp!, {r4, r5, r6, lr} bx lr .align 2, 0 _02215400: .word 0x02240AF8 arm_func_start MOD13_02215404 MOD13_02215404: ; 0x02215404 ldr r3, _02215468 ; =0x000001FE cmp r0, r3 bhi _02215418 cmp r0, #0xe4 bhs _02215420 _02215418: mov r0, #0 bx lr _02215420: cmp r1, #0x10 bhi _02215430 cmp r1, #8 bhs _02215438 _02215430: mov r0, #0 bx lr _02215438: add r1, r1, #0x20 mov r3, r1, lsl #2 ldr r1, _0221546C ; =0x0000014A add r0, r0, #0x26 add r1, r1, r0, lsl #2 add r0, r3, #0x70 mla r1, r2, r0, r1 ldr r0, _02215470 ; =0x000015E0 cmp r1, r0 movlt r0, #1 movge r0, #0 bx lr .align 2, 0 _02215468: .word 0x000001FE _0221546C: .word 0x0000014A _02215470: .word 0x000015E0 arm_func_start MOD13_02215474 MOD13_02215474: ; 0x02215474 stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} sub sp, sp, #4 ldr r4, _0221567C ; =0x02240AFC mov sb, r1 ldr r1, [r4] mov r8, r2 mov r7, r3 cmp r1, #0 beq _022154B4 add r1, r1, #0x1300 ldrh r1, [r1, #0x16] cmp r1, #0 addne sp, sp, #4 movne r0, #2 ldmneia sp!, {r4, r5, r6, r7, r8, sb, lr} bxne lr _022154B4: add r1, r0, #0x1f ldr r0, _02215680 ; =0x00001E1F bic r6, r1, #0x1f add r0, r6, r0 cmp r7, #0x10000 bic r5, r0, #0x1f bne _022154D8 bl WM_GetNextTgid mov r7, r0 _022154D8: bl OS_DisableInterrupts ldr ip, _02215684 ; =0x02240AF8 ldr r3, _0221567C ; =0x02240AFC mov r4, r0 ldr r1, [sp, #0x20] ldr r0, _02215688 ; =0x02240AF0 ldr r2, _0221568C ; =0x0000FFFF strh r1, [r0] ldr r0, _02215690 ; =0x0223F798 ldr r1, _02215694 ; =0x0223F78C strh r2, [r0] mov r2, #5 ldr r0, _02215698 ; =0x0223F790 strh r2, [r1] mov r2, #0x28 ldr r1, _0221569C ; =0x0223F794 strh r2, [r0] ldr r0, _022156A0 ; =0x0223F7A0 strh r2, [r1] mov r2, #1 mov r1, r6 str r2, [r0] mov r0, #0 mov r2, #0x1e00 str r6, [ip] str r5, [r3] bl MIi_CpuClear32 mov r1, r5 mov r0, #0 mov r2, #0x1340 bl MIi_CpuClear16 ldrb r0, [sb, #1] add r1, r6, #0x530 mov r2, #0 cmp r0, #0 ble _02215584 _02215568: add r0, sb, r2, lsl #1 ldrh r0, [r0, #2] add r2, r2, #1 strh r0, [r1], #2 ldrb r0, [sb, #1] cmp r2, r0 blt _02215568 _02215584: ldr r0, _022156A4 ; =0x00000538 mov r3, #0 add ip, r6, r0 ldr r0, _022156A8 ; =0x0223F79C _02215594: ldr r2, [r0] ldrh r1, [r2] cmp r1, #0 beq _022155C0 add r1, r2, #2 str r1, [r0] ldrh r1, [r2] add r3, r3, #1 cmp r3, #0x10 strh r1, [ip], #2 blt _02215594 _022155C0: mov r0, sb add r1, r5, #0x1300 mov r2, #0x16 bl MI_CpuCopy8 ldrb r0, [sb, #1] mov r2, #0 cmp r0, #0xa addlo r0, r5, r0, lsl #1 addlo r0, r0, #0x1300 movlo r1, #0 strloh r1, [r0, #2] add r0, r6, #0x500 mov r1, #0x100 strh r1, [r0] mov r1, #8 strh r1, [r0, #2] strh r2, [r0, #0x18] strh r2, [r0, #0x1a] mov r1, #1 strh r1, [r0, #0x2c] add r0, r5, #0x400 str r0, [r6, #0x504] strh r2, [r6, #0xe] strh r2, [r6, #0x12] strh r1, [r6, #0x16] strh r2, [r6, #0x14] str r8, [r6, #8] strh r7, [r6, #0xc] bl MOD13_022156AC add r0, r0, #0xc8 strh r0, [r6, #0x18] mov r0, #0xf strh r0, [r6, #0x10] mov r3, #0 strb r3, [r6, #0x50c] strb r3, [r6, #0x50d] add r1, r5, #0x1300 mov r2, #1 strh r2, [r1, #0x16] add r1, r5, #0x1000 mov r0, r4 str r3, [r1, #0x31c] bl OS_RestoreInterrupts mov r0, #0 add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, r8, sb, lr} bx lr .align 2, 0 _0221567C: .word 0x02240AFC _02215680: .word 0x00001E1F _02215684: .word 0x02240AF8 _02215688: .word 0x02240AF0 _0221568C: .word 0x0000FFFF _02215690: .word 0x0223F798 _02215694: .word 0x0223F78C _02215698: .word 0x0223F790 _0221569C: .word 0x0223F794 _022156A0: .word 0x0223F7A0 _022156A4: .word 0x00000538 _022156A8: .word 0x0223F79C arm_func_start MOD13_022156AC MOD13_022156AC: ; 0x022156AC stmdb sp!, {lr} sub sp, sp, #0xc add r0, sp, #0 bl OS_GetMacAddress mov r2, #0 add r1, sp, #0 mov r3, r2 _022156C8: ldrb r0, [r1] add r2, r2, #1 cmp r2, #6 add r3, r3, r0 add r1, r1, #1 blt _022156C8 ldr r1, _02215718 ; =0x027FFC3C mov r0, #7 ldr r2, [r1] ldr r1, _0221571C ; =0xCCCCCCCD add r2, r3, r2 mul r3, r2, r0 umull r1, r0, r3, r1 ldr r2, _02215720 ; =0x00000014 mov r0, r0, lsr #4 umull r0, r1, r2, r0 sub r0, r3, r0 add sp, sp, #0xc ldmia sp!, {lr} bx lr .align 2, 0 _02215718: .word 0x027FFC3C _0221571C: .word 0xCCCCCCCD _02215720: .word 0x00000014 arm_func_start MOD13_02215724 MOD13_02215724: ; 0x02215724 stmdb sp!, {r4, r5, r6, r7, r8, lr} sub sp, sp, #0x20 mov r6, r0 ldrh r0, [r6] ldr r1, _02215F98 ; =0x02240AF8 cmp r0, #0x1d ldr r5, [r1] bgt _022157B0 cmp r0, #0x1d bge _02215838 cmp r0, #0x15 addls pc, pc, r0, lsl #2 b _02215F7C _02215758: ; jump table b _022157BC ; case 0 b _02215E4C ; case 1 b _02215EB8 ; case 2 b _02215F7C ; case 3 b _02215F7C ; case 4 b _02215F7C ; case 5 b _02215F7C ; case 6 b _02215F7C ; case 7 b _02215F7C ; case 8 b _02215F7C ; case 9 b _022158DC ; case 10 b _02215B64 ; case 11 b _02215BBC ; case 12 b _02215F7C ; case 13 b _02215D54 ; case 14 b _02215DDC ; case 15 b _02215F7C ; case 16 b _02215F7C ; case 17 b _02215F7C ; case 18 b _02215F7C ; case 19 b _02215F7C ; case 20 b _02215F20 ; case 21 _022157B0: cmp r0, #0x80 beq _02215F50 b _02215F7C _022157BC: ldrh r0, [r6, #2] cmp r0, #0 beq _022157E4 ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0x100 blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _022157E4: ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0x15 blx r2 ldr r0, _02215F9C ; =0x0223F794 ldr r1, _02215FA0 ; =0x0223F798 ldrh r3, [r0] ldr r2, _02215FA4 ; =0x0223F790 ldr r0, _02215FA8 ; =0x0223F78C str r3, [sp] ldrh r3, [r0] ldrh r1, [r1] ldrh r2, [r2] ldr r0, _02215FAC ; =MOD13_02215724 bl WM_SetLifeTime mov r1, r0 mov r0, #0x1d bl MOD13_02214B08 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215838: ldrh r0, [r6, #2] cmp r0, #0 beq _02215860 ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0x100 blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215860: ldr r0, _02215FB0 ; =0x02240B00 add r2, r5, #0x440 ldrh r1, [r0, #4] str r2, [r0] mov r2, #1 cmp r1, #0 moveq r1, #1 streqh r1, [r0, #4] ldr r0, _02215FB0 ; =0x02240B00 ldrh r1, [r0, #6] cmp r1, #0 moveq r1, #0xc8 streqh r1, [r0, #6] ldr r1, _02215FB0 ; =0x02240B00 mov r0, #0xff strb r0, [r1, #8] strb r0, [r1, #9] strb r0, [r1, #0xa] strb r0, [r1, #0xb] strb r0, [r1, #0xc] strb r0, [r1, #0xd] str r2, [r5, #0x5e4] ldr r0, _02215FAC ; =MOD13_02215724 str r2, [r5, #0x5e8] bl WM_StartScan mov r1, r0 mov r0, #0xa bl MOD13_02214B08 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _022158DC: ldrh r0, [r6, #2] cmp r0, #0 beq _02215904 ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0x100 blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215904: ldrh r0, [r6, #8] cmp r0, #3 addeq sp, sp, #0x20 ldmeqia sp!, {r4, r5, r6, r7, r8, lr} bxeq lr cmp r0, #4 beq _02215AE0 cmp r0, #5 bne _02215B48 add r0, r5, #0x500 ldrh r0, [r0, #0xe0] add r3, r5, #0x600 mov r4, #0 cmp r0, #0 ble _02215A18 ldrb r1, [r6, #0xa] mov r2, r3 _02215948: ldrb r7, [r2, #0xca] cmp r1, r7 bne _02215A08 ldrb r8, [r6, #0xb] ldrb r7, [r2, #0xcb] cmp r8, r7 bne _02215A08 ldrb r8, [r6, #0xc] ldrb r7, [r2, #0xcc] cmp r8, r7 bne _02215A08 ldrb r8, [r6, #0xd] ldrb r7, [r2, #0xcd] cmp r8, r7 bne _02215A08 ldrb r8, [r6, #0xe] ldrb r7, [r2, #0xce] cmp r8, r7 bne _02215A08 ldrb r8, [r6, #0xf] ldrb r7, [r2, #0xcf] cmp r8, r7 bne _02215A08 mov r0, #0x180 mul r7, r4, r0 add r0, r3, r7 ldrh r1, [r6, #0x36] add r8, r6, #0x38 add lr, r0, #0xf8 strh r1, [r0, #0xf6] mov ip, #8 _022159C4: ldmia r8!, {r0, r1, r2, r3} stmia lr!, {r0, r1, r2, r3} subs ip, ip, #1 bne _022159C4 add r0, r5, #0x600 add r7, r0, r7 mov r0, r7 mov r1, #0xc0 bl DC_InvalidateRange ldr r0, _02215FB4 ; =0x02240AF0 mov r2, r7 ldrh r0, [r0] add r1, r5, #0x440 mov r3, #0xc0 bl MI_DmaCopy16 str r4, [r5, #0x5ec] b _02215A78 _02215A08: add r4, r4, #1 cmp r4, r0 add r2, r2, #0x180 blt _02215948 _02215A18: cmp r4, #0x10 bge _02215A78 mov r0, #0x180 mul r7, r4, r0 add r1, r3, r7 mov r0, r6 add ip, r4, #1 add r3, r5, #0x500 add r1, r1, #0xc0 mov r2, #0xb8 strh ip, [r3, #0xe0] bl MIi_CpuCopy16 add r0, r5, #0x600 add r7, r0, r7 mov r0, r7 mov r1, #0xc0 bl DC_InvalidateRange ldr r0, _02215FB4 ; =0x02240AF0 mov r2, r7 ldrh r0, [r0] add r1, r5, #0x440 mov r3, #0xc0 bl MI_DmaCopy16 str r4, [r5, #0x5ec] _02215A78: ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #4 blx r2 ldr r0, [r5, #0x5e4] cmp r0, #0 addeq sp, sp, #0x20 ldmeqia sp!, {r4, r5, r6, r7, r8, lr} bxeq lr ldr r0, [r5, #0x5e8] cmp r0, #0 beq _02215ABC ldr r0, _02215FB0 ; =0x02240B00 bl MOD13_022169EC cmp r0, #0 bne _02215ABC bl MOD13_02214F58 _02215ABC: ldr r0, _02215FAC ; =MOD13_02215724 ldr r1, _02215FB0 ; =0x02240B00 bl WM_StartScan mov r1, r0 mov r0, #0xa bl MOD13_02214B08 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215AE0: ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #5 blx r2 ldr r0, [r5, #0x5e4] cmp r0, #0 addeq sp, sp, #0x20 ldmeqia sp!, {r4, r5, r6, r7, r8, lr} bxeq lr ldr r0, [r5, #0x5e8] cmp r0, #0 beq _02215B24 ldr r0, _02215FB0 ; =0x02240B00 bl MOD13_022169EC cmp r0, #0 bne _02215B24 bl MOD13_02214F58 _02215B24: ldr r0, _02215FAC ; =MOD13_02215724 ldr r1, _02215FB0 ; =0x02240B00 bl WM_StartScan mov r1, r0 mov r0, #0xa bl MOD13_02214B08 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215B48: ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0x100 blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215B64: ldrh r0, [r6, #2] cmp r0, #0 beq _02215B8C ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0x100 blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215B8C: mov r2, #0 str r2, [sp] ldr r1, [r5, #0x520] ldr r0, _02215FAC ; =MOD13_02215724 mov r3, #1 bl WM_StartConnectEx mov r1, r0 mov r0, #0xc bl MOD13_02214B08 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215BBC: ldrh r0, [r6, #2] cmp r0, #0 beq _02215BF0 add r0, r5, #0x500 mov r1, #0 strh r1, [r0, #0xe0] ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0xb blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215BF0: ldrh r0, [r6, #8] cmp r0, #9 bgt _02215C20 cmp r0, #6 blt _02215D38 cmp r0, #6 beq _02215C34 cmp r0, #7 beq _02215C54 cmp r0, #9 beq _02215D0C b _02215D38 _02215C20: cmp r0, #0x1a addeq sp, sp, #0x20 ldmeqia sp!, {r4, r5, r6, r7, r8, lr} bxeq lr b _02215D38 _02215C34: add r0, r5, #0x500 mov r1, #0 strh r1, [r0, #0x2a] mov r1, #1 strh r1, [r0, #0x28] add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215C54: ldrh r2, [r6, #0xa] add r0, r5, #0x500 mov r1, r6 strh r2, [r0, #0xe2] ldr r2, [r5, #0x51c] mov r0, #6 blx r2 ldr r1, _02215FB8 ; =MOD13_02215FC0 add r3, r5, #0x500 mov r0, #1 mov r2, #0 strh r0, [r3, #0x2a] bl WM_SetPortCallback cmp r0, #0 addne sp, sp, #0x20 ldmneia sp!, {r4, r5, r6, r7, r8, lr} bxne lr add r0, r5, #0x500 ldrh r0, [r0, #0x2c] add r1, r5, #0x500 ldrh r2, [r1, #0x18] cmp r0, #0 moveq r0, #1 movne r0, #0 mov r0, r0, lsl #0x10 mov r0, r0, lsr #0x10 str r2, [sp] str r0, [sp, #4] mov r0, #0 str r0, [sp, #8] str r0, [sp, #0xc] str r0, [sp, #0x10] mov r0, #1 str r0, [sp, #0x14] str r0, [sp, #0x18] ldrh r2, [r1, #0x1a] ldr r1, [r5, #0x504] ldr r0, _02215FAC ; =MOD13_02215724 add r3, r5, #0x40 bl WM_StartMPEx mov r1, r0 mov r0, #0xe bl MOD13_02214B08 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215D0C: ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0xa blx r2 add r0, r5, #0x500 mov r1, #0 strh r1, [r0, #0x2a] strh r1, [r0, #0x28] add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215D38: ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0x100 blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215D54: ldrh r0, [r6, #4] cmp r0, #0xa beq _02215D84 cmp r0, #0xc addeq sp, sp, #0x20 ldmeqia sp!, {r4, r5, r6, r7, r8, lr} bxeq lr cmp r0, #0xd addeq sp, sp, #0x20 ldmeqia sp!, {r4, r5, r6, r7, r8, lr} bxeq lr b _02215DC0 _02215D84: add r0, r5, #0x500 mov r1, #1 strh r1, [r0, #0x28] bl MOD13_02216984 cmp r0, #0 addeq sp, sp, #0x20 ldmeqia sp!, {r4, r5, r6, r7, r8, lr} bxeq lr ldr r2, [r5, #0x51c] mov r0, #0x19 mov r1, #0 blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215DC0: ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0x100 blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215DDC: mov r0, #0 strb r0, [r5, #0x50c] ldrh r0, [r6, #2] cmp r0, #0 bne _02215E04 ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #8 blx r2 b _02215E30 _02215E04: cmp r0, #9 bne _02215E20 ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0x29 blx r2 b _02215E30 _02215E20: ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0x12 blx r2 _02215E30: ldr r2, [r5, #0x51c] mov r0, #0x19 mov r1, #0 blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215E4C: ldrh r0, [r6, #2] cmp r0, #0 beq _02215E80 add r0, r5, #0x500 mov r1, #0 strh r1, [r0, #0x26] ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0x100 blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215E80: add r0, r5, #0x500 mov r2, #0 strh r2, [r0, #0x2a] ldr r1, [r1] ldr r0, _02215FAC ; =MOD13_02215724 add r1, r1, #0x500 strh r2, [r1, #0x28] bl WM_End mov r1, r0 mov r0, #2 bl MOD13_02214B08 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215EB8: ldrh r0, [r6, #2] cmp r0, #0 beq _02215EEC add r0, r5, #0x500 mov r1, #0 strh r1, [r0, #0x26] ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0x100 blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215EEC: mov r2, #0 ldr r0, _02215FBC ; =0x02240AFC strb r2, [r5, #0x50d] ldr r0, [r0] mov r1, r6 add r0, r0, #0x1300 strh r2, [r0, #0x16] ldr r2, [r5, #0x51c] mov r0, #0x11 blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215F20: bl MOD13_02216984 cmp r0, #0 addeq sp, sp, #0x20 ldmeqia sp!, {r4, r5, r6, r7, r8, lr} bxeq lr ldr r2, [r5, #0x51c] mov r0, #0x19 mov r1, #0 blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215F50: ldrh r0, [r6, #4] cmp r0, #0x16 beq _02215F6C add sp, sp, #0x20 cmp r0, #0x17 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215F6C: bl OS_Terminate add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr _02215F7C: ldr r2, [r5, #0x51c] mov r1, r6 mov r0, #0x100 blx r2 add sp, sp, #0x20 ldmia sp!, {r4, r5, r6, r7, r8, lr} bx lr .align 2, 0 _02215F98: .word 0x02240AF8 _02215F9C: .word 0x0223F794 _02215FA0: .word 0x0223F798 _02215FA4: .word 0x0223F790 _02215FA8: .word 0x0223F78C _02215FAC: .word MOD13_02215724 _02215FB0: .word 0x02240B00 _02215FB4: .word 0x02240AF0 _02215FB8: .word MOD13_02215FC0 _02215FBC: .word 0x02240AFC arm_func_start MOD13_02215FC0 MOD13_02215FC0: ; 0x02215FC0 stmdb sp!, {lr} sub sp, sp, #4 mov r1, r0 ldrh r0, [r1, #2] cmp r0, #0 addne sp, sp, #4 ldmneia sp!, {lr} bxne lr ldrh r0, [r1, #4] cmp r0, #0x15 bgt _02216034 cmp r0, #0x15 bge _02216074 cmp r0, #9 addgt sp, sp, #4 ldmgtia sp!, {lr} bxgt lr cmp r0, #7 addlt sp, sp, #4 ldmltia sp!, {lr} bxlt lr cmp r0, #7 addeq sp, sp, #4 ldmeqia sp!, {lr} bxeq lr add sp, sp, #4 cmp r0, #9 ldmia sp!, {lr} bx lr _02216034: cmp r0, #0x1a addgt sp, sp, #4 ldmgtia sp!, {lr} bxgt lr cmp r0, #0x19 addlt sp, sp, #4 ldmltia sp!, {lr} bxlt lr cmp r0, #0x19 addeq sp, sp, #4 ldmeqia sp!, {lr} bxeq lr add sp, sp, #4 cmp r0, #0x1a ldmia sp!, {lr} bx lr _02216074: ldr r2, _02216094 ; =0x02240AF8 mov r0, #9 ldr r2, [r2] ldr r2, [r2, #0x51c] blx r2 add sp, sp, #4 ldmia sp!, {lr} bx lr .align 2, 0 _02216094: .word 0x02240AF8 arm_func_start MOD13_02216098 MOD13_02216098: ; 0x02216098 stmdb sp!, {r4, lr} sub sp, sp, #0x20 mov r4, r0 ldrh r0, [r4] cmp r0, #0x19 bgt _02216104 cmp r0, #0x19 bge _022161F8 cmp r0, #0xf addls pc, pc, r0, lsl #2 b _022168D8 _022160C4: ; jump table b _02216124 ; case 0 b _02216694 ; case 1 b _02216744 ; case 2 b _022168D8 ; case 3 b _022168D8 ; case 4 b _022168D8 ; case 5 b _022168D8 ; case 6 b _022161BC ; case 7 b _02216250 ; case 8 b _022168D8 ; case 9 b _022168D8 ; case 10 b _022168D8 ; case 11 b _022168D8 ; case 12 b _022167C4 ; case 13 b _022164E0 ; case 14 b _02216584 ; case 15 _02216104: cmp r0, #0x1d bgt _02216118 cmp r0, #0x1d beq _02216164 b _022168D8 _02216118: cmp r0, #0x80 beq _02216804 b _022168D8 _02216124: ldrh r0, [r4, #2] cmp r0, #0 beq _02216154 ldr r0, _022168FC ; =0x02240AF8 mov r1, r4 ldr r2, [r0] mov r0, #0x100 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216154: bl MOD13_02216910 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216164: ldrh r0, [r4, #2] cmp r0, #0 beq _02216194 ldr r0, _022168FC ; =0x02240AF8 mov r1, r4 ldr r2, [r0] mov r0, #0x100 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216194: ldr r1, _022168FC ; =0x02240AF8 ldr r0, _02216900 ; =MOD13_02216098 ldr r1, [r1] bl WM_SetParentParameter mov r1, r0 mov r0, #7 bl MOD13_02214B08 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _022161BC: ldr r0, _022168FC ; =0x02240AF8 mov r1, r4 ldr r2, [r0] mov r0, #0x15 ldr r2, [r2, #0x51c] blx r2 ldr r0, _02216900 ; =MOD13_02216098 mov r1, #1 bl WM_SetBeaconIndication mov r1, r0 mov r0, #0x19 bl MOD13_02214B08 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _022161F8: ldrh r0, [r4, #2] cmp r0, #0 beq _02216228 ldr r0, _022168FC ; =0x02240AF8 mov r1, r4 ldr r2, [r0] mov r0, #0x100 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216228: ldr r1, _02216904 ; =0x0223F7A0 ldr r0, _02216900 ; =MOD13_02216098 ldr r1, [r1] bl FUN_020D9564 mov r1, r0 mov r0, #8 bl MOD13_02214B08 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216250: ldrh r0, [r4, #2] cmp r0, #0 beq _02216280 ldr r0, _022168FC ; =0x02240AF8 mov r1, r4 ldr r2, [r0] mov r0, #0x100 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216280: ldrh r0, [r4, #8] cmp r0, #7 bgt _022162B8 cmp r0, #7 bge _0221630C cmp r0, #2 bgt _022164BC cmp r0, #0 blt _022164BC cmp r0, #0 beq _022162E0 cmp r0, #2 beq _02216480 b _022164BC _022162B8: cmp r0, #9 bgt _022162CC cmp r0, #9 beq _02216440 b _022164BC _022162CC: cmp r0, #0x1a addeq sp, sp, #0x20 ldmeqia sp!, {r4, lr} bxeq lr b _022164BC _022162E0: ldr r1, _022168FC ; =0x02240AF8 mov r2, #0 ldr r0, [r1] add sp, sp, #0x20 add r0, r0, #0x500 strh r2, [r0, #0x2a] ldr r0, [r1] add r0, r0, #0x500 strh r2, [r0, #0x28] ldmia sp!, {r4, lr} bx lr _0221630C: ldr r2, _022168FC ; =0x02240AF8 ldr r0, [r2] add r0, r0, #0x500 ldrh r1, [r0, #0x26] cmp r1, #1 addeq sp, sp, #0x20 ldmeqia sp!, {r4, lr} bxeq lr ldrh lr, [r0, #0x2a] ldrh r3, [r4, #0x10] mov ip, #1 mov r1, r4 orr r3, lr, ip, lsl r3 strh r3, [r0, #0x2a] ldr r2, [r2] mov r0, #0 ldr r2, [r2, #0x51c] blx r2 ldr r1, _022168FC ; =0x02240AF8 ldr r0, [r1] add r0, r0, #0x500 ldrh r0, [r0, #0x28] cmp r0, #0 bne _02216408 ldr r0, _02216908 ; =0x02240AFC ldr r0, [r0] add r0, r0, #0x1000 ldr r2, [r0, #0x31c] cmp r2, #0 bne _02216408 mov r2, #1 str r2, [r0, #0x31c] ldr r0, [r1] ldr r1, _022168FC ; =0x02240AF8 add r0, r0, #0x500 ldrh r0, [r0, #0x2c] ldr ip, [r1] mov r1, #1 cmp r0, #0 movne r2, #0 mov r0, r2, lsl #0x10 mov r3, r0, lsr #0x10 add r0, ip, #0x500 ldrh r4, [r0, #0x18] mov r2, #0 str r4, [sp] str r3, [sp, #4] str r2, [sp, #8] str r2, [sp, #0xc] str r2, [sp, #0x10] str r1, [sp, #0x14] str r1, [sp, #0x18] ldrh r2, [r0, #0x1a] ldr r1, [ip, #0x504] ldr r0, _02216900 ; =MOD13_02216098 add r3, ip, #0x40 bl WM_StartMPEx mov r1, r0 mov r0, #0xe bl MOD13_02214B08 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216408: bl MOD13_02216984 cmp r0, #0 addeq sp, sp, #0x20 ldmeqia sp!, {r4, lr} bxeq lr ldr r1, _022168FC ; =0x02240AF8 mov r0, #0x19 ldr r2, [r1] mov r1, #0 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216440: ldr r2, _022168FC ; =0x02240AF8 ldrh r3, [r4, #0x10] ldr r1, [r2] mov r0, #1 add r1, r1, #0x500 ldrh ip, [r1, #0x2a] mvn r3, r0, lsl r3 and r3, ip, r3 strh r3, [r1, #0x2a] ldr r2, [r2] mov r1, r4 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216480: ldr r0, _022168FC ; =0x02240AF8 ldr r1, [r0] add r0, r1, #0x500 ldrh r0, [r0, #0x26] cmp r0, #1 addeq sp, sp, #0x20 ldmeqia sp!, {r4, lr} bxeq lr ldr r2, [r1, #0x51c] mov r1, r4 mov r0, #0x1c blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _022164BC: ldr r0, _022168FC ; =0x02240AF8 mov r1, r4 ldr r2, [r0] mov r0, #0x100 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _022164E0: ldr r0, _02216908 ; =0x02240AFC mov r1, #0 ldr r0, [r0] add r0, r0, #0x1000 str r1, [r0, #0x31c] ldrh r0, [r4, #4] cmp r0, #0xa beq _0221650C cmp r0, #0xb beq _0221653C b _02216560 _0221650C: ldr r3, _022168FC ; =0x02240AF8 mov r4, #1 ldr r2, [r3] mov r0, #0x19 add r2, r2, #0x500 strh r4, [r2, #0x28] ldr r2, [r3] ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _0221653C: ldr r0, _022168FC ; =0x02240AF8 ldr r1, [r4, #8] ldr r2, [r0] mov r0, #3 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216560: ldr r0, _022168FC ; =0x02240AF8 mov r1, r4 ldr r2, [r0] mov r0, #0x100 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216584: ldr r0, _02216908 ; =0x02240AFC ldr r1, [r0] add r0, r1, #0x7000 ldr r0, [r0, #0x4c8] cmp r0, #0 beq _022165E0 mov r3, #0 mov r2, r3 _022165A4: add r0, r1, r2, lsl #2 add r0, r0, #0x1000 ldr r0, [r0, #0x4e8] cmp r0, #0 beq _022165C4 add r3, r3, #1 cmp r3, #2 bhs _022165D0 _022165C4: add r2, r2, #1 cmp r2, #0xf blo _022165A4 _022165D0: cmp r3, #1 bne _022165E0 ldr r0, _0221690C ; =0x000032C8 bl OS_SpinWait _022165E0: ldr r0, _022168FC ; =0x02240AF8 mov r2, #0 ldr r1, [r0] strb r2, [r1, #0x50c] ldrh r1, [r4, #2] cmp r1, #0 bne _02216634 ldr r0, [r0] mov r1, r4 ldr r2, [r0, #0x51c] mov r0, #2 blx r2 ldr r1, _022168FC ; =0x02240AF8 mov r0, #0x19 ldr r2, [r1] mov r1, #0 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216634: cmp r1, #0xa bne _0221665C ldr r0, [r0] mov r1, r4 ldr r2, [r0, #0x51c] mov r0, #0x2a blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _0221665C: ldr r0, [r0] mov r1, r4 ldr r2, [r0, #0x51c] mov r0, #0x13 blx r2 ldr r1, _022168FC ; =0x02240AF8 mov r0, #0x19 ldr r2, [r1] mov r1, #0 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216694: ldr r0, _02216908 ; =0x02240AFC ldr r0, [r0] add r0, r0, #0x1000 ldr r0, [r0, #0x320] cmp r0, #0 bne _0221672C ldrh r0, [r4, #2] cmp r0, #0 beq _022166EC ldr r2, _022168FC ; =0x02240AF8 mov r3, #0 ldr r0, [r2] mov r1, r4 add r0, r0, #0x500 strh r3, [r0, #0x26] ldr r2, [r2] mov r0, #0x100 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _022166EC: ldr r2, _022168FC ; =0x02240AF8 mov r3, #0 ldr r1, [r2] ldr r0, _02216900 ; =MOD13_02216098 add r1, r1, #0x500 strh r3, [r1, #0x2a] ldr r1, [r2] add r1, r1, #0x500 strh r3, [r1, #0x28] bl WM_End mov r1, r0 mov r0, #2 bl MOD13_02214B08 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _0221672C: mov r1, #0 mov r2, r1 mov r0, #1 bl WM_SetPortCallback mov r0, #0 bl WM_SetIndCallback _02216744: ldrh r0, [r4, #2] cmp r0, #0 beq _02216784 ldr r2, _022168FC ; =0x02240AF8 mov r3, #0 ldr r0, [r2] mov r1, r4 add r0, r0, #0x500 strh r3, [r0, #0x26] ldr r2, [r2] mov r0, #0x100 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216784: ldr r2, _022168FC ; =0x02240AF8 mov r3, #0 ldr r1, [r2] ldr r0, _02216908 ; =0x02240AFC strb r3, [r1, #0x50d] ldr r0, [r0] mov r1, r4 add r0, r0, #0x1300 strh r3, [r0, #0x16] ldr r2, [r2] mov r0, #0x11 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _022167C4: ldrh r0, [r4, #2] cmp r0, #0 addne sp, sp, #0x20 ldmneia sp!, {r4, lr} bxne lr ldr r0, _022168FC ; =0x02240AF8 ldrh r1, [r4, #0xa] ldr r0, [r0] add sp, sp, #0x20 add r0, r0, #0x500 ldrh r2, [r0, #0x2a] mvn r1, r1 and r1, r2, r1 strh r1, [r0, #0x2a] ldmia sp!, {r4, lr} bx lr _02216804: ldrh r0, [r4, #4] sub r0, r0, #0x10 cmp r0, #7 addls pc, pc, r0, lsl #2 b _022168F0 _02216818: ; jump table b _02216838 ; case 0 b _0221685C ; case 1 b _02216880 ; case 2 b _022168A4 ; case 3 b _022168F0 ; case 4 b _022168F0 ; case 5 b _022168C8 ; case 6 b _022168F0 ; case 7 _02216838: ldr r0, _022168FC ; =0x02240AF8 mov r1, r4 ldr r2, [r0] mov r0, #0x1d ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _0221685C: ldr r0, _022168FC ; =0x02240AF8 mov r1, r4 ldr r2, [r0] mov r0, #0x1f ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _02216880: ldr r0, _022168FC ; =0x02240AF8 mov r1, r4 ldr r2, [r0] mov r0, #0x20 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _022168A4: ldr r0, _022168FC ; =0x02240AF8 mov r1, r4 ldr r2, [r0] mov r0, #0x21 ldr r2, [r2, #0x51c] blx r2 add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _022168C8: bl OS_Terminate add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr _022168D8: ldr r0, _022168FC ; =0x02240AF8 mov r1, r4 ldr r2, [r0] mov r0, #0x100 ldr r2, [r2, #0x51c] blx r2 _022168F0: add sp, sp, #0x20 ldmia sp!, {r4, lr} bx lr .align 2, 0 _022168FC: .word 0x02240AF8 _02216900: .word MOD13_02216098 _02216904: .word 0x0223F7A0 _02216908: .word 0x02240AFC _0221690C: .word 0x000032C8 arm_func_start MOD13_02216910 MOD13_02216910: ; 0x02216910 stmdb sp!, {lr} sub sp, sp, #4 ldr r0, _02216970 ; =MOD13_02216098 bl WM_SetIndCallback mov r1, r0 mov r0, #0x80 bl MOD13_02214B08 ldr r0, _02216974 ; =0x0223F794 ldr r1, _02216978 ; =0x0223F798 ldrh r3, [r0] ldr r2, _0221697C ; =0x0223F790 ldr r0, _02216980 ; =0x0223F78C str r3, [sp] ldrh r1, [r1] ldrh r2, [r2] ldrh r3, [r0] ldr r0, _02216970 ; =MOD13_02216098 bl WM_SetLifeTime mov r1, r0 mov r0, #0x1d bl MOD13_02214B08 add sp, sp, #4 ldmia sp!, {lr} bx lr .align 2, 0 _02216970: .word MOD13_02216098 _02216974: .word 0x0223F794 _02216978: .word 0x0223F798 _0221697C: .word 0x0223F790 _02216980: .word 0x0223F78C arm_func_start MOD13_02216984 MOD13_02216984: ; 0x02216984 ldr r1, _022169E8 ; =0x02240AF8 mov r0, #0 ldr r2, [r1] mov ip, r0 add r1, r2, #0x500 ldrh r1, [r1, #0x28] mov r3, r0 cmp r1, #1 bne _022169B4 ldrb r1, [r2, #0x50c] cmp r1, #0 moveq r3, #1 _022169B4: cmp r3, #0 beq _022169CC add r1, r2, #0x500 ldrh r1, [r1, #0x26] cmp r1, #0 moveq ip, #1 _022169CC: cmp ip, #0 bxeq lr add r1, r2, #0x500 ldrh r1, [r1, #0x2a] cmp r1, #0 movne r0, #1 bx lr .align 2, 0 _022169E8: .word 0x02240AF8 arm_func_start MOD13_022169EC MOD13_022169EC: ; 0x022169EC stmdb sp!, {r4, lr} mov r4, r0 bl WM_GetAllowedChannel cmp r0, #0 moveq r0, #0 ldmeqia sp!, {r4, lr} bxeq lr ldrh r3, [r4, #4] mov ip, #0 mov lr, r3 mov r2, #1 _02216A18: sub r1, lr, #1 mov r1, r2, lsl r1 ands r1, r0, r1 beq _02216A34 cmp r3, lr strneh lr, [r4, #4] bne _02216A5C _02216A34: add r1, ip, #1 mov r1, r1, lsl #0x10 cmp lr, #0x10 mov ip, r1, lsr #0x10 moveq r1, r2 addne r1, lr, #1 mov r1, r1, lsl #0x10 cmp ip, #0x10 mov lr, r1, lsr #0x10 blo _02216A18 _02216A5C: mov r0, #1 ldmia sp!, {r4, lr} bx lr arm_func_start MOD13_02216A68 MOD13_02216A68: ; 0x02216A68 stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} sub sp, sp, #4 mov sb, r0 mov r8, r1 mov r7, r2 mov r6, r3 mov r5, #0 bl OS_DisableInterrupts add r2, sb, #0x30 add r1, sb, #0x70 mov r4, r0 cmp r2, r1 bhs _02216AF4 _02216A9C: ldr r0, [r2, #0xc] cmp r0, #2 blo _02216AE8 ldr r0, [r2] subs r0, r8, r0 bmi _02216AE8 ldr r3, [r2, #4] add ip, r0, r6 cmp ip, r3 bhi _02216AE8 ldr r3, [r2, #8] mov r1, r7 mov r2, r6 add r0, r3, r0 bl MI_CpuCopy8 mov r0, #0 str r0, [sb] mov r5, #1 b _02216AF4 _02216AE8: add r2, r2, #0x10 cmp r2, r1 blo _02216A9C _02216AF4: mov r0, r4 bl OS_RestoreInterrupts mov r0, r5 add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, r8, sb, lr} bx lr arm_func_start MOD13_02216B0C MOD13_02216B0C: ; 0x02216B0C stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} sub sp, sp, #4 mov r4, r0 mov sb, r1 mov r8, r2 mov r7, r3 bl OS_DisableInterrupts mov r6, r0 add r5, r4, #0x30 add r4, r4, #0x70 _02216B34: cmp r5, r4 blo _02216B40 bl OS_Terminate _02216B40: ldr r0, [r5, #0xc] cmp r0, #0 bne _02216B64 str sb, [r5] str r8, [r5, #4] ldr r0, [sp, #0x20] str r7, [r5, #8] str r0, [r5, #0xc] b _02216B6C _02216B64: add r5, r5, #0x10 b _02216B34 _02216B6C: mov r0, r6 bl OS_RestoreInterrupts add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, r8, sb, lr} bx lr arm_func_start MOD13_02216B80 MOD13_02216B80: ; 0x02216B80 ldr ip, _02216B90 ; =0x020CE34C mov r1, #0 mov r2, #0x70 bx ip .align 2, 0 _02216B90: .word 0x020CE34C arm_func_start MOD13_02216B94 MOD13_02216B94: ; 0x02216B94 stmdb sp!, {r4, r5, lr} sub sp, sp, #4 mov r5, r0 bl OS_DisableInterrupts mov r4, r0 bl MOD13_02216DA4 cmp r0, #0 beq _02216BD0 ldr r0, _02216BE4 ; =0x02240B20 mov r1, #0 ldr r0, [r0] mov r2, r5 mov r3, r1 add r0, r0, #0xc4 bl MOD13_02216BE8 _02216BD0: mov r0, r4 bl OS_RestoreInterrupts add sp, sp, #4 ldmia sp!, {r4, r5, lr} bx lr .align 2, 0 _02216BE4: .word 0x02240B20 arm_func_start MOD13_02216BE8 MOD13_02216BE8: ; 0x02216BE8 stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} sub sp, sp, #4 ldr r4, _02216D74 ; =0x02240B20 mov sb, r0 mov r8, r1 mov r7, r2 mov r6, r3 ldr r5, [r4] bl MOD13_02216DA4 cmp r0, #0 bne _02216C18 bl OS_Terminate _02216C18: ldr r0, [sb, #4] mov r0, r0, lsl #0x1f movs r0, r0, lsr #0x1f beq _02216C2C bl OS_Terminate _02216C2C: cmp r6, #0x1f bls _02216C78 mov r0, r5 bl OS_GetThreadPriority cmp r6, #0x20 bne _02216C54 cmp r0, #0 subne r6, r0, #1 moveq r6, #0 b _02216C78 _02216C54: cmp r6, #0x21 bne _02216C6C cmp r0, #0x1f addlo r6, r0, #1 movhs r6, #0x1f b _02216C78 _02216C6C: cmp r6, #0x22 moveq r6, r0 movne r6, #0x1f _02216C78: bl OS_DisableInterrupts ldr r2, [sb, #4] bic r1, r6, #0x80000000 bic r2, r2, #1 orr r2, r2, #1 str r2, [sb, #4] ldr r2, [sb, #4] mov r4, r0 and r0, r2, #1 orr r0, r0, r1, lsl #1 str r0, [sb, #4] str r8, [sb, #8] str r7, [sb, #0xc] ldr r0, [r5, #0xc0] cmp r0, #0 bne _02216CDC add r0, r5, #0xc4 cmp sb, r0 ldreq r0, _02216D74 ; =0x02240B20 moveq r1, #0 streq r1, [r0] mov r0, r5 str sb, [r5, #0xc0] bl OS_WakeupThreadDirect b _02216D60 _02216CDC: add r0, r5, #0xc4 cmp sb, r0 ldr r2, [r5, #0xc0] bne _02216D1C ldr r0, [r2] cmp r0, #0 beq _02216D08 _02216CF8: mov r2, r0 ldr r0, [r0] cmp r0, #0 bne _02216CF8 _02216D08: ldr r0, _02216D74 ; =0x02240B20 str sb, [r2] mov r1, #0 str r1, [r0] b _02216D60 _02216D1C: ldr r0, [r2, #4] mov r0, r0, lsr #1 cmp r0, r6 bls _02216D3C str sb, [r5, #0xc0] str r2, [sb] b _02216D60 _02216D38: mov r2, r1 _02216D3C: ldr r1, [r2] cmp r1, #0 beq _02216D58 ldr r0, [r1, #4] mov r0, r0, lsr #1 cmp r0, r6 bls _02216D38 _02216D58: str r1, [sb] str sb, [r2] _02216D60: mov r0, r4 bl OS_RestoreInterrupts add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, r8, sb, lr} bx lr .align 2, 0 _02216D74: .word 0x02240B20 arm_func_start MOD13_02216D78 MOD13_02216D78: ; 0x02216D78 ldr r0, [r0, #4] mov r0, r0, lsl #0x1f movs r0, r0, lsr #0x1f movne r0, #1 moveq r0, #0 bx lr arm_func_start MOD13_02216D90 MOD13_02216D90: ; 0x02216D90 ldr ip, _02216DA0 ; =0x020CE34C mov r1, #0 mov r2, #0x20 bx ip .align 2, 0 _02216DA0: .word 0x020CE34C arm_func_start MOD13_02216DA4 MOD13_02216DA4: ; 0x02216DA4 ldr r0, _02216DBC ; =0x02240B20 ldr r0, [r0] cmp r0, #0 movne r0, #1 moveq r0, #0 bx lr .align 2, 0 _02216DBC: .word 0x02240B20 arm_func_start MOD13_02216DC0 MOD13_02216DC0: ; 0x02216DC0 stmdb sp!, {r4, r5, r6, lr} sub sp, sp, #8 mov r5, r0 mov r6, r1 bl OS_DisableInterrupts ldr r1, _02216E40 ; =0x02240B20 mov r4, r0 ldr r0, [r1] cmp r0, #0 bne _02216E2C add r0, r5, #0xc4 str r5, [r1] bl MOD13_02216D90 sub r0, r6, #0xe4 mov lr, #0 str lr, [r5, #0xc0] bic ip, r0, #3 add r3, r5, #0xe4 str ip, [sp] ldr r1, _02216E44 ; =MOD13_02216E48 mov r0, r5 mov r2, r5 add r3, r3, ip str lr, [sp, #4] bl OS_CreateThread mov r0, r5 bl OS_WakeupThreadDirect _02216E2C: mov r0, r4 bl OS_RestoreInterrupts add sp, sp, #8 ldmia sp!, {r4, r5, r6, lr} bx lr .align 2, 0 _02216E40: .word 0x02240B20 _02216E44: .word MOD13_02216E48 arm_func_start MOD13_02216E48 MOD13_02216E48: ; 0x02216E48 stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} sub sp, sp, #4 mov r8, r0 add sb, r8, #0xc4 mov r4, #0 _02216E5C: bl OS_DisableInterrupts ldr r1, [r8, #0xc0] mov r5, r0 cmp r1, #0 bne _02216E90 _02216E70: mov r0, r8 mov r1, r4 bl OS_SetThreadPriority mov r0, r4 bl OS_SleepThread ldr r0, [r8, #0xc0] cmp r0, #0 beq _02216E70 _02216E90: ldr r7, [r8, #0xc0] ldr r1, [r8, #0xc0] mov r0, r8 ldr r1, [r1] str r1, [r8, #0xc0] ldr r1, [r7, #4] mov r1, r1, lsr #1 bl OS_SetThreadPriority mov r0, r5 bl OS_RestoreInterrupts ldr r1, [r7, #8] cmp r1, #0 beq _02216ECC mov r0, r7 blx r1 _02216ECC: bl OS_DisableInterrupts mov r6, r0 mov r0, r8 ldr r5, [r7, #0xc] bl OS_GetThreadPriority ldr r1, [r8, #0xc0] cmp r1, #0 moveq r1, r4 beq _02216F0C ldr r1, [r8, #0xc0] ldr r1, [r1, #4] cmp r0, r1, lsr #1 ldrlo r1, [r8, #0xc0] ldrlo r1, [r1, #4] movlo r1, r1, lsr #1 movhs r1, r0 _02216F0C: cmp r1, r0 beq _02216F1C mov r0, r8 bl OS_SetThreadPriority _02216F1C: str r4, [r7] ldr r0, [r7, #4] cmp r5, #0 bic r0, r0, #1 str r0, [r7, #4] beq _02216F3C mov r0, r7 blx r5 _02216F3C: cmp r7, sb beq _02216F50 mov r0, r6 bl OS_RestoreInterrupts b _02216E5C _02216F50: bl OS_ExitThread add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, r8, sb, lr} bx lr arm_func_start MOD13_02216F60 MOD13_02216F60: ; 0x02216F60 ldr r1, _02216FB8 ; =0x02240B28 mov ip, #0 ldr r2, [r1, #4] cmp r2, #0 ble _02216FB0 ldr r1, _02216FBC ; =0x02240B24 sub r0, r0, #1 ldr r1, [r1] add r0, r1, r0, lsl #2 ldr r3, [r0, #0x1e0] mov r1, #1 _02216F8C: mov r0, r1, lsl ip ands r0, r0, r3 moveq r0, #0 bxeq lr add r0, ip, #1 mov r0, r0, lsl #0x10 mov ip, r0, lsr #0x10 cmp ip, r2 blt _02216F8C _02216FB0: mov r0, #1 bx lr .align 2, 0 _02216FB8: .word 0x02240B28 _02216FBC: .word 0x02240B24 arm_func_start MOD13_02216FC0 MOD13_02216FC0: ; 0x02216FC0 stmdb sp!, {r4, r5, r6, r7, lr} sub sp, sp, #4 ldr r2, _02217068 ; =0x02240B24 mov r7, r1 ldr r3, [r2] cmp r3, #0 addeq sp, sp, #4 moveq r0, #0 ldmeqia sp!, {r4, r5, r6, r7, lr} bxeq lr ldr r1, _0221706C ; =0x02240B28 ldrb r4, [r0, #2] ldr r2, [r1, #4] cmp r4, r2 addgt sp, sp, #4 movgt r0, #0 ldmgtia sp!, {r4, r5, r6, r7, lr} bxgt lr sub r6, r7, #1 ldr r2, [r1] add r1, r3, r6, lsl #5 mla r1, r4, r2, r1 add r0, r0, #3 mov r5, r6, lsl #5 bl MI_CpuCopy8 ldr r0, _02217068 ; =0x02240B24 mov r1, #1 ldr r2, [r0] mov r0, r7 add r3, r2, #0x1e0 ldr r2, [r3, r6, lsl #2] orr r1, r2, r1, lsl r4 str r1, [r3, r6, lsl #2] bl MOD13_02216F60 cmp r0, #0 ldrne r0, _02217068 ; =0x02240B24 ldrne r0, [r0] addne r0, r0, r5 moveq r0, #0 add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, lr} bx lr .align 2, 0 _02217068: .word 0x02240B24 _0221706C: .word 0x02240B28 arm_func_start MOD13_02217070 MOD13_02217070: ; 0x02217070 stmdb sp!, {r4, r5, r6, lr} mov r6, r0 ldrb r0, [r6] mov r5, r1 mov r4, r2 strb r0, [r5] ldrb r0, [r5] cmp r0, #7 beq _022170A8 cmp r0, #8 beq _02217114 cmp r0, #9 beq _02217140 b _0221718C _022170A8: mov r0, r4 bl MOD13_02216F60 cmp r0, #0 ldrne r0, _022171A4 ; =0x02240B24 subne r1, r4, #1 ldrne r0, [r0] addne r0, r0, r1, lsl #5 ldmneia sp!, {r4, r5, r6, lr} bxne lr ldrb r1, [r6, #1] ldr r0, _022171A8 ; =0x02240B28 strb r1, [r5, #2] ldrb r2, [r5, #2] ldr r1, [r0, #4] cmp r2, r1 movgt r0, #0 ldmgtia sp!, {r4, r5, r6, lr} bxgt lr ldr r2, [r0] add r0, r6, #2 add r1, r5, #3 bl MI_CpuCopy8 mov r0, r5 mov r1, r4 bl MOD13_02216FC0 mov r4, r0 b _02217198 _02217114: ldrb r0, [r6, #1] add r4, r6, #3 and r0, r0, #0xff strh r0, [r5, #2] ldrb r0, [r6, #2] ldrh r1, [r5, #2] mov r0, r0, lsl #8 and r0, r0, #0xff00 orr r0, r1, r0 strh r0, [r5, #2] b _02217198 _02217140: ldrb r0, [r6, #1] add r4, r6, #3 ldr r1, _022171A8 ; =0x02240B28 and r0, r0, #0xff strh r0, [r5, #2] ldrb r2, [r6, #2] ldrh r3, [r5, #2] mov r0, r4 mov r2, r2, lsl #8 and r2, r2, #0xff00 orr r2, r3, r2 strh r2, [r5, #2] ldr r2, [r1] add r1, r5, #4 bl MI_CpuCopy8 ldr r0, _022171A8 ; =0x02240B28 ldr r0, [r0] add r4, r4, r0 b _02217198 _0221718C: mov r0, #0 ldmia sp!, {r4, r5, r6, lr} bx lr _02217198: mov r0, r4 ldmia sp!, {r4, r5, r6, lr} bx lr .align 2, 0 _022171A4: .word 0x02240B24 _022171A8: .word 0x02240B28 arm_func_start MOD13_022171AC MOD13_022171AC: ; 0x022171AC ldrb r3, [r0] mov r2, r1 add r2, r2, #1 strb r3, [r1] ldrb r1, [r0] cmp r1, #6 addls pc, pc, r1, lsl #2 b _02217224 _022171CC: ; jump table b _02217224 ; case 0 b _0221722C ; case 1 b _0221722C ; case 2 b _0221722C ; case 3 b _022171E8 ; case 4 b _0221722C ; case 5 b _0221722C ; case 6 _022171E8: ldrh r3, [r0, #2] add r1, r2, #3 strb r3, [r2] ldrh r3, [r0, #2] and r3, r3, #0xff00 mov r3, r3, asr #8 strb r3, [r2, #1] ldrh r3, [r0, #4] strb r3, [r2, #2] ldrh r0, [r0, #4] add r2, r2, #4 and r0, r0, #0xff00 mov r0, r0, asr #8 strb r0, [r1] b _0221722C _02217224: mov r0, #0 bx lr _0221722C: mov r0, r2 bx lr arm_func_start MOD13_02217234 MOD13_02217234: ; 0x02217234 stmdb sp!, {r4, lr} ldr r1, _0221727C ; =0x02240B24 ldr r1, [r1] cmp r1, #0 ldmeqia sp!, {r4, lr} bxeq lr sub r4, r0, #1 add r0, r1, r4, lsl #5 mov r1, #0 mov r2, #0x1e bl MI_CpuFill8 ldr r0, _0221727C ; =0x02240B24 mov r1, #0 ldr r0, [r0] add r0, r0, r4, lsl #2 str r1, [r0, #0x1e0] ldmia sp!, {r4, lr} bx lr .align 2, 0 _0221727C: .word 0x02240B24 arm_func_start MOD13_02217280 MOD13_02217280: ; 0x02217280 ldr r3, _02217298 ; =0x02240B24 ldr ip, _0221729C ; =0x020CE34C mov r1, #0 mov r2, #0x21c str r0, [r3] bx ip .align 2, 0 _02217298: .word 0x02240B24 _0221729C: .word 0x020CE34C arm_func_start MOD13_022172A0 MOD13_022172A0: ; 0x022172A0 stmdb sp!, {lr} sub sp, sp, #4 ldr r2, _022172D8 ; =0x02240B28 sub r1, r0, #2 mov r0, #0x1e str r1, [r2] bl _s32_div_f ldr r1, _022172D8 ; =0x02240B28 mov r2, #0x1e str r0, [r1, #4] str r2, [r1, #8] add sp, sp, #4 ldmia sp!, {lr} bx lr .align 2, 0 _022172D8: .word 0x02240B28