diff options
Diffstat (limited to 'arm9/modules/13/asm/module_13_arm1.s')
-rw-r--r-- | arm9/modules/13/asm/module_13_arm1.s | 6051 |
1 files changed, 6051 insertions, 0 deletions
diff --git a/arm9/modules/13/asm/module_13_arm1.s b/arm9/modules/13/asm/module_13_arm1.s new file mode 100644 index 00000000..edb71ead --- /dev/null +++ b/arm9/modules/13/asm/module_13_arm1.s @@ -0,0 +1,6051 @@ + .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 |