.include "asm/macros.inc" .include "global.inc" .section .text .balign 4, 0 arm_func_start MOD04_021DEB90 MOD04_021DEB90: ; 0x021DEB90 stmdb sp!, {lr} sub sp, sp, #4 bl MOD04_021FD43C bl MOD04_021EFB28 ldr r2, _021DEBCC ; =UNK04_02210540 ldr r1, _021DEBD0 ; =0xFFFE8515 str r0, [r2] mov r0, #9 bl MOD04_021DD6B0 ldr r0, _021DEBD4 ; =UNK04_0221053C mov r1, #0 ldr r0, [r0] str r1, [r0] add sp, sp, #4 ldmfd sp!, {pc} .align 2, 0 _021DEBCC: .word UNK04_02210540 _021DEBD0: .word 0xFFFE8515 _021DEBD4: .word UNK04_0221053C arm_func_end MOD04_021DEB90 arm_func_start MOD04_021DEBD8 MOD04_021DEBD8: ; 0x021DEBD8 ldr ip, _021DEBE0 ; =MOD04_021EAC1C bx ip .align 2, 0 _021DEBE0: .word MOD04_021EAC1C arm_func_end MOD04_021DEBD8 arm_func_start MOD04_021DEBE4 MOD04_021DEBE4: ; 0x021DEBE4 stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} sub sp, sp, #0xc mov r7, #0 mov fp, r0 mov sb, r1 mov sl, r7 bl MOD04_021E852C cmp r0, #0 addne sp, sp, #0xc ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} cmp sb, #4 addls pc, pc, sb, lsl #2 b _021DEC48 _021DEC18: ; jump table b _021DEC2C ; case 0 b _021DEC2C ; case 1 b _021DEC34 ; case 2 b _021DEC34 ; case 3 b _021DEC40 ; case 4 _021DEC2C: mov r4, r7 b _021DEC48 _021DEC34: mov r4, #6 ldr r6, _021DEF4C ; =0xFFFFE250 b _021DEC48 _021DEC40: ldr r6, _021DEF50 ; =0xFFFFE24F mov r4, #9 _021DEC48: cmp r4, #0 bne _021DED00 mov r0, fp bl MOD04_021FD3C4 movs r7, r0 addeq sp, sp, #0xc ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} ldr r0, _021DEF54 ; =UNK04_0221053C ldrb r8, [r7, #1] ldr r1, [r0] mov r5, #1 mov r0, r5,lsl r8 ldr r1, [r1, #0x644] ands r0, r1, r0 mov r0, r8 moveq r5, #0 bl MOD04_021EA9D8 ldr r0, _021DEF54 ; =UNK04_0221053C ldr r1, [r0] ldrb r0, [r1, #0x369] cmp r0, #2 bne _021DECA8 cmp sb, #0 beq _021DECBC _021DECA8: ldrb r0, [r1, #0x369] cmp r0, #3 bne _021DECC0 cmp r8, #0 bne _021DECC0 _021DECBC: mov sl, #1 _021DECC0: mov r0, r8 bl MOD04_021DF56C ldr r1, _021DEF54 ; =UNK04_0221053C ldrb r7, [r7] ldr r2, _021DEF58 ; =UNK04_02210544 mov fp, #0 ldr r3, [r1] str fp, [r2, r7, lsl #2] ldrb r2, [r3, #0x361] mov r7, r0 sub r0, r2, #1 strb r0, [r3, #0x361] ldr r1, [r1] ldrb r0, [r1, #0x368] sub r0, r0, #1 strb r0, [r1, #0x368] _021DED00: ldr r0, _021DEF54 ; =UNK04_0221053C ldr r1, [r0] ldrb r0, [r1, #0x2d] cmp r0, #0 bne _021DED58 ldr r0, [r1, #0x24] cmp r0, #6 bne _021DED58 cmp r5, #0 bne _021DED58 ldrb r0, [r1, #0x369] cmp r0, #2 addne sp, sp, #0xc ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} cmp r4, #0 addne sp, sp, #0xc ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} bl MOD04_021E85D4 mov r0, r7 bl MOD04_021E8A50 add sp, sp, #0xc ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} _021DED58: mov r0, r4 mov r1, r6 mov r2, r7 bl MOD04_021E8A74 cmp r0, #0 addne sp, sp, #0xc ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} cmp r4, #0 beq _021DED90 mov r0, r4 mov r1, r6 bl MOD04_021DD6B0 add sp, sp, #0xc ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} _021DED90: ldr r0, _021DEF54 ; =UNK04_0221053C ldr r1, [r0] ldrb r0, [r1, #0x2d] cmp r0, #0 bne _021DEE04 ldrb r0, [r1, #0x369] cmp r0, #2 beq _021DEDBC ldrb r0, [r1, #0x369] cmp r0, #3 bne _021DEE04 _021DEDBC: ldr r2, _021DEF54 ; =UNK04_0221053C ldr r1, [r2] ldrb r0, [r1, #0x361] add r6, r0, #2 add r3, r1, r6, lsl #2 ldr r3, [r3, #0x448] cmp r3, #0 beq _021DEE04 add r3, r1, r6 ldrb r3, [r3, #0x624] add r0, r0, #1 add r0, r1, r0 strb r3, [r0, #0x624] ldr r0, [r2] ldrb r1, [r0, #0x361] add r0, r1, #1 add r1, r1, #3 bl MOD04_021E8830 _021DEE04: ldr r0, _021DEF54 ; =UNK04_0221053C ldr r1, [r0] ldrb r0, [r1, #0x369] cmp r0, #2 bne _021DEE4C ldrb r0, [r1, #0x2d] cmp r0, #0 bne _021DEE2C bl MOD04_021E85D4 b _021DEE68 _021DEE2C: ldrb r0, [r1, #0x361] cmp r0, #0 bne _021DEE68 ldr r1, _021DEF5C ; =UNK04_0220D334 mov r0, #1 mov r2, #0 bl MOD04_021E1E30 b _021DEE68 _021DEE4C: ldrb r0, [r1, #0x361] cmp r0, #0 bne _021DEE68 ldr r1, _021DEF5C ; =UNK04_0220D334 mov r0, #1 mov r2, #0 bl MOD04_021E1E30 _021DEE68: ldr r0, _021DEF54 ; =UNK04_0221053C ldr r1, [r0] ldrb r0, [r1, #0x369] cmp r0, #0 beq _021DEE88 ldrb r0, [r1, #0x369] cmp r0, #1 bne _021DEEA4 _021DEE88: ldr r0, _021DEF54 ; =UNK04_0221053C ldr r2, [r0] ldrb r1, [r2, #0x368] strb r1, [r2, #0x36a] ldr r0, [r0] ldr r0, [r0, #0x364] bl MOD04_02202308 _021DEEA4: ldr r0, _021DEF54 ; =UNK04_0221053C ldr r6, [r0] ldr r0, [r6, #0x90] cmp r0, #0 beq _021DEF00 cmp r5, #0 beq _021DEF00 cmp sb, #0 moveq r5, #1 mov r0, r7 movne r5, #0 bl MOD04_021E1F18 str r0, [sp] ldr r1, [r6, #0x94] ldr r0, _021DEF54 ; =UNK04_0221053C str r1, [sp, #4] ldr r1, [r0] mov r0, r4 ldr r4, [r1, #0x90] mov r1, r5 mov r2, sl mov r3, r8 blx r4 _021DEF00: ldr r0, _021DEF54 ; =UNK04_0221053C ldr r1, [r0] ldrb r0, [r1, #0x2d] cmp r0, #0 bne _021DEF24 ldrb r0, [r1, #0x369] cmp r0, #2 addeq sp, sp, #0xc ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} _021DEF24: ldrb r0, [r1, #0x361] cmp r0, #0 addne sp, sp, #0xc ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} bl MOD04_02200D6C bl MOD04_021E8DC0 mov r0, #3 bl MOD04_021DF5CC add sp, sp, #0xc ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} .align 2, 0 _021DEF4C: .word 0xFFFFE250 _021DEF50: .word 0xFFFFE24F _021DEF54: .word UNK04_0221053C _021DEF58: .word UNK04_02210544 _021DEF5C: .word UNK04_0220D334 arm_func_end MOD04_021DEBE4 arm_func_start MOD04_021DEF60 MOD04_021DEF60: ; 0x021DEF60 ldr ip, _021DEF68 ; =MOD04_021EAC5C bx ip .align 2, 0 _021DEF68: .word MOD04_021EAC5C arm_func_end MOD04_021DEF60 arm_func_start MOD04_021DEF6C MOD04_021DEF6C: ; 0x021DEF6C stmdb sp!, {r4, r5, r6, r7, lr} sub sp, sp, #0xc add r4, sp, #0 mov r3, #0 strb r3, [r4] strb r3, [r4, #1] strb r3, [r4, #2] strb r3, [r4, #3] strb r3, [r4, #4] strb r3, [r4, #5] strb r3, [r4, #6] strb r3, [r4, #7] strb r3, [r4, #8] strb r3, [r4, #9] strb r3, [r4, #0xa] mov r5, r1 strb r3, [r4, #0xb] ldr r4, [r5, #8] mov r6, r0 bl MOD04_021E2068 cmp r0, #0 addne sp, sp, #0xc ldmneia sp!, {r4, r5, r6, r7, pc} ldr r0, _021DF0C8 ; =UNK04_0220D338 bl strlen mov r2, r0 ldr r1, _021DF0C8 ; =UNK04_0220D338 mov r0, r4 bl memcmp cmp r0, #0 addne sp, sp, #0xc ldmneia sp!, {r4, r5, r6, r7, pc} ldr r0, _021DF0C8 ; =UNK04_0220D338 bl strlen add r4, r4, r0 mov r0, r4 mov r1, #0x76 bl strchr sub r7, r0, r4 add r0, sp, #0 mov r1, r4 mov r2, r7 bl strncpy cmp r7, #0xa addhi sp, sp, #0xc ldmhiia sp!, {r4, r5, r6, r7, pc} add r0, sp, #0 mov r1, #0 mov r2, #0xa bl strtoul cmp r0, #3 addne sp, sp, #0xc ldmneia sp!, {r4, r5, r6, r7, pc} ldr r0, _021DF0CC ; =UNK04_0220D340 add r1, r7, #1 add r4, r4, r1 bl strlen mov r2, r0 ldr r1, _021DF0CC ; =UNK04_0220D340 mov r0, r4 bl memcmp cmp r0, #0 addne sp, sp, #0xc ldmneia sp!, {r4, r5, r6, r7, pc} ldr r0, _021DF0D0 ; =UNK04_0221053C ldr r1, [r0] ldr r0, [r1, #0x24] cmp r0, #5 beq _021DF0A8 cmp r0, #6 addne sp, sp, #0xc ldmneia sp!, {r4, r5, r6, r7, pc} ldrb r0, [r1, #0x369] cmp r0, #2 beq _021DF0A8 ldrb r0, [r1, #0x369] cmp r0, #3 addne sp, sp, #0xc ldmneia sp!, {r4, r5, r6, r7, pc} _021DF0A8: ldr r0, _021DF0CC ; =UNK04_0220D340 bl strlen add r2, r4, r0 ldr r1, [r5] mov r0, r6 bl MOD04_021E8EF4 add sp, sp, #0xc ldmia sp!, {r4, r5, r6, r7, pc} .align 2, 0 _021DF0C8: .word UNK04_0220D338 _021DF0CC: .word UNK04_0220D340 _021DF0D0: .word UNK04_0221053C arm_func_end MOD04_021DEF6C arm_func_start MOD04_021DF0D4 MOD04_021DF0D4: ; 0x021DF0D4 stmdb sp!, {lr} sub sp, sp, #4 ldr r1, [r1, #4] ldr r0, _021DF120 ; =0x00000603 cmp r1, r0 addeq sp, sp, #4 ldmeqia sp!, {pc} ldr r0, _021DF124 ; =0x00000901 cmp r1, r0 addeq sp, sp, #4 ldmeqia sp!, {pc} ldr r0, _021DF128 ; =0x00000B01 cmp r1, r0 addeq sp, sp, #4 ldmeqia sp!, {pc} mov r0, #3 bl MOD04_021DF414 add sp, sp, #4 ldmfd sp!, {pc} .align 2, 0 _021DF120: .word 0x00000603 _021DF124: .word 0x00000901 _021DF128: .word 0x00000B01 arm_func_end MOD04_021DF0D4 arm_func_start MOD04_021DF12C MOD04_021DF12C: ; 0x021DF12C stmdb sp!, {r4, r5, r6, r7, lr} sub sp, sp, #0xc movs r7, r0 mov r6, r1 mov r5, r2 mov r4, r3 bne _021DF174 cmp r6, #0 beq _021DF174 ldr r0, _021DF2AC ; =UNK04_0221053C ldr r0, [r0] ldr r0, [r0, #0x4f4] cmp r0, #0 bne _021DF1D8 bl MOD04_021E8DC0 mov r0, #3 bl MOD04_021DF5CC b _021DF1D8 _021DF174: cmp r7, #0 bne _021DF1D8 mov r0, #6 bl MOD04_021DF5CC ldr r1, _021DF2AC ; =UNK04_0221053C mov r0, #0 ldr r3, [r1] ldrb r1, [r3, #0x361] cmp r1, #0 blt _021DF1D8 ldr r2, [r3, #0x64] _021DF1A0: add r1, r3, r0, lsl #2 ldr r1, [r1, #0x448] cmp r2, r1 bne _021DF1C8 ldr r1, _021DF2AC ; =UNK04_0221053C ldr r1, [r1] add r0, r1, r0 ldrb r0, [r0, #0x624] strb r0, [r1, #0x2c] b _021DF1D8 _021DF1C8: ldrb r1, [r3, #0x361] add r0, r0, #1 cmp r0, r1 ble _021DF1A0 _021DF1D8: ldr r1, _021DF2AC ; =UNK04_0221053C ldr r0, _021DF2B0 ; =0x00000624 ldr r2, [r1] ldrb r1, [r2, #0x361] add r0, r2, r0 add r1, r1, #1 bl MOD04_021DF530 ldr r1, _021DF2AC ; =UNK04_0221053C ldr r1, [r1] str r0, [r1, #0x644] bl MOD04_021E8780 ldr r0, _021DF2AC ; =UNK04_0221053C ldr r1, [r0] ldrb r0, [r1, #0x369] cmp r0, #2 beq _021DF224 ldrb r0, [r1, #0x369] cmp r0, #3 bne _021DF258 _021DF224: ldr r0, _021DF2AC ; =UNK04_0221053C ldr r1, [sp, #0x20] ldr r3, [r0] mov r0, r7 str r1, [sp] ldr r2, [r3, #0x8c] mov r1, r6 str r2, [sp, #4] ldr r6, [r3, #0x88] mov r2, r5 mov r3, r4 blx r6 b _021DF26C _021DF258: ldr r2, [r1, #0x84] ldr r3, [r1, #0x80] mov r0, r7 mov r1, r6 blx r3 _021DF26C: cmp r7, #0 addeq sp, sp, #0xc ldmeqia sp!, {r4, r5, r6, r7, pc} ldr r0, _021DF2AC ; =UNK04_0221053C ldr r0, [r0] cmp r0, #0 addeq sp, sp, #0xc ldmeqia sp!, {r4, r5, r6, r7, pc} ldr r0, [r0, #0x24] cmp r0, #5 addne sp, sp, #0xc ldmneia sp!, {r4, r5, r6, r7, pc} mov r0, #3 bl MOD04_021DF5CC add sp, sp, #0xc ldmia sp!, {r4, r5, r6, r7, pc} .align 2, 0 _021DF2AC: .word UNK04_0221053C _021DF2B0: .word 0x00000624 arm_func_end MOD04_021DF12C arm_func_start MOD04_021DF2B4 MOD04_021DF2B4: ; 0x021DF2B4 stmdb sp!, {r4, r5, lr} sub sp, sp, #4 ldr r2, _021DF300 ; =UNK04_0221053C mov r5, r0 ldr r0, [r2] mov r4, r1 ldr r0, [r0, #0x28] cmp r0, #4 beq _021DF2DC bl MOD04_021DF5CC _021DF2DC: ldr r1, _021DF300 ; =UNK04_0221053C mov r0, r5 ldr r3, [r1] mov r1, r4 ldr r2, [r3, #0x7c] ldr r3, [r3, #0x78] blx r3 add sp, sp, #4 ldmia sp!, {r4, r5, pc} .align 2, 0 _021DF300: .word UNK04_0221053C arm_func_end MOD04_021DF2B4 arm_func_start MOD04_021DF304 MOD04_021DF304: ; 0x021DF304 stmdb sp!, {r4, r5, lr} sub sp, sp, #4 movs r5, r0 mov r4, r1 bne _021DF334 ldr r1, _021DF36C ; =UNK04_0221053C mov r0, #3 ldr r1, [r1] str r4, [r1, #0x64] bl MOD04_021DF5CC bl MOD04_021E1ED4 b _021DF33C _021DF334: mov r0, #0 bl MOD04_021DF5CC _021DF33C: ldr r0, _021DF36C ; =UNK04_0221053C ldr r0, [r0] ldr r3, [r0, #0x70] cmp r3, #0 addeq sp, sp, #4 ldmeqia sp!, {r4, r5, pc} ldr r2, [r0, #0x74] mov r0, r5 mov r1, r4 blx r3 add sp, sp, #4 ldmia sp!, {r4, r5, pc} .align 2, 0 _021DF36C: .word UNK04_0221053C arm_func_end MOD04_021DF304 arm_func_start MOD04_021DF370 MOD04_021DF370: ; 0x021DF370 stmdb sp!, {r4, lr} movs r4, r0 moveq r0, #0 ldmeqia sp!, {r4, pc} cmp r4, #7 addls pc, pc, r4, lsl #2 b _021DF3F4 _021DF38C: ; jump table b _021DF3F4 ; case 0 b _021DF3AC ; case 1 b _021DF3B8 ; case 2 b _021DF3C8 ; case 3 b _021DF3D4 ; case 4 b _021DF3B8 ; case 5 b _021DF3E0 ; case 6 b _021DF3EC ; case 7 _021DF3AC: mov r0, #9 mvn r2, #0 b _021DF3F4 _021DF3B8: mov r0, #0 mov r2, r0 mov r4, r0 b _021DF3F4 _021DF3C8: mov r0, #6 mvn r2, #9 b _021DF3F4 _021DF3D4: mov r0, #6 mvn r2, #0x1d b _021DF3F4 _021DF3E0: mov r0, #6 mvn r2, #0x45 b _021DF3F4 _021DF3EC: mov r0, #6 mvn r2, #0x4f _021DF3F4: cmp r0, #0 beq _021DF408 ldr r1, _021DF410 ; =0xFFFEFA48 add r1, r2, r1 bl MOD04_021E0EAC _021DF408: mov r0, r4 ldmia sp!, {r4, pc} .align 2, 0 _021DF410: .word 0xFFFEFA48 arm_func_end MOD04_021DF370 arm_func_start MOD04_021DF414 MOD04_021DF414: ; 0x021DF414 stmdb sp!, {r4, r5, r6, lr} movs r6, r0 moveq r0, #0 ldmeqia sp!, {r4, r5, r6, pc} cmp r6, #4 addls pc, pc, r6, lsl #2 b _021DF470 _021DF430: ; jump table b _021DF470 ; case 0 b _021DF444 ; case 1 b _021DF450 ; case 2 b _021DF45C ; case 3 b _021DF468 ; case 4 _021DF444: mov r4, #9 mvn r5, #0 b _021DF470 _021DF450: mov r4, #9 mvn r5, #1 b _021DF470 _021DF45C: mov r4, #6 mvn r5, #9 b _021DF470 _021DF468: mov r4, #6 mvn r5, #0x13 _021DF470: ldr r0, _021DF51C ; =UNK04_0221053C ldr r1, [r0] ldr r0, [r1, #0x24] cmp r0, #5 addls pc, pc, r0, lsl #2 b _021DF500 _021DF488: ; jump table b _021DF500 ; case 0 b _021DF4A0 ; case 1 b _021DF4B8 ; case 2 b _021DF500 ; case 3 b _021DF4F4 ; case 4 b _021DF4DC ; case 5 _021DF4A0: ldr r1, _021DF520 ; =0xFFFF11B8 mov r0, r4 add r5, r5, r1 mov r1, r5 bl MOD04_021E0EAC b _021DF508 _021DF4B8: ldr r1, [r1, #0x9c] ldr r0, _021DF520 ; =0xFFFF11B8 cmp r1, #1 add r5, r5, r0 bge _021DF508 mov r0, r4 mov r1, r5 bl MOD04_021E0EAC b _021DF508 _021DF4DC: ldr r1, _021DF524 ; =0xFFFEC398 mov r0, r4 add r5, r5, r1 mov r1, r5 bl MOD04_021E8E08 b _021DF508 _021DF4F4: ldr r0, _021DF528 ; =0xFFFEEAA8 add r5, r5, r0 b _021DF508 _021DF500: ldr r0, _021DF52C ; =0xFFFE9C88 add r5, r5, r0 _021DF508: mov r0, r4 mov r1, r5 bl MOD04_021E2114 mov r0, r6 ldmia sp!, {r4, r5, r6, pc} .align 2, 0 _021DF51C: .word UNK04_0221053C _021DF520: .word 0xFFFF11B8 _021DF524: .word 0xFFFEC398 _021DF528: .word 0xFFFEEAA8 _021DF52C: .word 0xFFFE9C88 arm_func_end MOD04_021DF414 arm_func_start MOD04_021DF530 MOD04_021DF530: ; 0x021DF530 stmdb sp!, {lr} sub sp, sp, #4 mov lr, #0 mov ip, lr cmp r1, #0 ble _021DF560 mov r3, #1 _021DF54C: ldrb r2, [r0, ip] add ip, ip, #1 cmp ip, r1 orr lr, lr, r3, lsl r2 blt _021DF54C _021DF560: mov r0, lr add sp, sp, #4 ldmfd sp!, {pc} arm_func_end MOD04_021DF530 arm_func_start MOD04_021DF56C MOD04_021DF56C: ; 0x021DF56C stmdb sp!, {r4, lr} sub sp, sp, #8 mov r4, r0 add r0, sp, #0 bl MOD04_021E874C mov r1, r0 cmp r1, #0 mov r0, #0 ble _021DF5B0 ldr r3, [sp] _021DF594: ldrb r2, [r3] cmp r4, r2 beq _021DF5B0 add r0, r0, #1 cmp r0, r1 add r3, r3, #1 blt _021DF594 _021DF5B0: cmp r0, r1 addeq sp, sp, #8 moveq r0, #0 ldmeqia sp!, {r4, pc} bl MOD04_021E8830 add sp, sp, #8 ldmia sp!, {r4, pc} arm_func_end MOD04_021DF56C arm_func_start MOD04_021DF5CC MOD04_021DF5CC: ; 0x021DF5CC ldr r1, _021DF5E8 ; =UNK04_0221053C ldr r3, [r1] ldr r2, [r3, #0x24] str r2, [r3, #0x28] ldr r1, [r1] str r0, [r1, #0x24] bx lr .align 2, 0 _021DF5E8: .word UNK04_0221053C arm_func_end MOD04_021DF5CC arm_func_start MOD04_021DF5EC MOD04_021DF5EC: ; 0x021DF5EC bx lr arm_func_end MOD04_021DF5EC arm_func_start MOD04_021DF5F0 MOD04_021DF5F0: ; 0x021DF5F0 stmdb sp!, {r4, r5, r6, lr} mov r6, r0 mov r5, #0 ldr r4, _021DF634 ; =UNK04_02210544 _021DF600: ldr r0, [r4, r5, lsl #2] cmp r0, #0 beq _021DF620 bl MOD04_021FD3C4 ldrb r0, [r0, #1] cmp r6, r0 moveq r0, #1 ldmeqia sp!, {r4, r5, r6, pc} _021DF620: add r5, r5, #1 cmp r5, #0x20 blt _021DF600 mov r0, #0 ldmia sp!, {r4, r5, r6, pc} .align 2, 0 _021DF634: .word UNK04_02210544 arm_func_end MOD04_021DF5F0 arm_func_start MOD04_021DF638 MOD04_021DF638: ; 0x021DF638 ldr r1, _021DF644 ; =UNK04_022105C4 add r0, r1, r0, lsl #3 bx lr .align 2, 0 _021DF644: .word UNK04_022105C4 arm_func_end MOD04_021DF638 arm_func_start MOD04_021DF648 MOD04_021DF648: ; 0x021DF648 stmdb sp!, {lr} sub sp, sp, #4 cmp r1, #0 mov ip, #0 ble _021DF684 ldr r2, _021DF6B8 ; =UNK04_0221053C ldr r3, [r2] _021DF664: add r2, r3, ip, lsl #2 ldr r2, [r2, #0x448] cmp r0, r2 beq _021DF684 add r2, ip, #1 and ip, r2, #0xff cmp ip, r1 blt _021DF664 _021DF684: cmp ip, r1 addge sp, sp, #4 movge r0, #0 ldmgeia sp!, {pc} ldr r0, _021DF6B8 ; =UNK04_0221053C ldr r0, [r0] add r0, r0, ip ldrb r0, [r0, #0x624] bl MOD04_021DF760 bl MOD04_021DF730 bl MOD04_021DF6BC add sp, sp, #4 ldmfd sp!, {pc} .align 2, 0 _021DF6B8: .word UNK04_0221053C arm_func_end MOD04_021DF648 arm_func_start MOD04_021DF6BC MOD04_021DF6BC: ; 0x021DF6BC ldr r1, _021DF6C8 ; =UNK04_02210544 add r0, r1, r0, lsl #2 bx lr .align 2, 0 _021DF6C8: .word UNK04_02210544 arm_func_end MOD04_021DF6BC arm_func_start MOD04_021DF6CC MOD04_021DF6CC: ; 0x021DF6CC stmdb sp!, {lr} sub sp, sp, #4 ldr r1, _021DF6FC ; =UNK04_02210544 mov r0, #0 mov r2, #0x80 bl MIi_CpuClear32 ldr r1, _021DF700 ; =UNK04_022105C4 mov r0, #0 mov r2, #0x100 bl MIi_CpuClear32 add sp, sp, #4 ldmfd sp!, {pc} .align 2, 0 _021DF6FC: .word UNK04_02210544 _021DF700: .word UNK04_022105C4 arm_func_end MOD04_021DF6CC arm_func_start MOD04_021DF704 MOD04_021DF704: ; 0x021DF704 ldr r2, _021DF72C ; =UNK04_02210544 mov r0, #0 _021DF70C: ldr r1, [r2, r0, lsl #2] cmp r1, #0 bxeq lr add r0, r0, #1 cmp r0, #0x20 blt _021DF70C mvn r0, #0 bx lr .align 2, 0 _021DF72C: .word UNK04_02210544 arm_func_end MOD04_021DF704 arm_func_start MOD04_021DF730 MOD04_021DF730: ; 0x021DF730 stmdb sp!, {lr} sub sp, sp, #4 bl MOD04_021FD3C4 ldrb r0, [r0] add sp, sp, #4 ldmfd sp!, {pc} arm_func_end MOD04_021DF730 arm_func_start MOD04_021DF748 MOD04_021DF748: ; 0x021DF748 stmdb sp!, {lr} sub sp, sp, #4 bl MOD04_021FD3C4 ldrb r0, [r0, #1] add sp, sp, #4 ldmfd sp!, {pc} arm_func_end MOD04_021DF748 arm_func_start MOD04_021DF760 MOD04_021DF760: ; 0x021DF760 stmdb sp!, {r4, r5, r6, lr} ldr r1, _021DF7BC ; =UNK04_0221053C mov r6, r0 ldr r0, [r1] cmp r0, #0 moveq r0, #0 ldmeqia sp!, {r4, r5, r6, pc} ldr r4, _021DF7C0 ; =UNK04_02210544 mov r5, #0 _021DF784: ldr r0, [r4, r5, lsl #2] cmp r0, #0 beq _021DF7A8 bl MOD04_021FD3C4 ldrb r0, [r0, #1] cmp r6, r0 ldreq r0, _021DF7C0 ; =UNK04_02210544 ldreq r0, [r0, r5, lsl #2] ldmeqia sp!, {r4, r5, r6, pc} _021DF7A8: add r5, r5, #1 cmp r5, #0x20 blt _021DF784 mov r0, #0 ldmia sp!, {r4, r5, r6, pc} .align 2, 0 _021DF7BC: .word UNK04_0221053C _021DF7C0: .word UNK04_02210544 arm_func_end MOD04_021DF760 arm_func_start MOD04_021DF7C4 MOD04_021DF7C4: ; 0x021DF7C4 stmdb sp!, {r4, lr} sub sp, sp, #8 ldr r0, _021DF87C ; =UNK04_0221053C ldr r0, [r0] ldr r0, [r0] cmp r0, #0 addne sp, sp, #8 movne r0, #0 ldmneia sp!, {r4, pc} mov r0, #0x4000 bl MOD04_021DE8C8 add r0, r0, #0xc000 mov r1, r0, lsl #0x10 ldr r3, _021DF87C ; =UNK04_0221053C mov r0, #0 mov r2, r0 mov r1, r1, lsr #0x10 ldr r4, [r3] bl MOD04_021FFEB0 ldr r1, _021DF880 ; =MOD04_021DEB90 ldr r2, _021DF87C ; =UNK04_0221053C str r1, [sp] mov r1, r0 ldr r0, [r2] ldr r2, [r4, #0x14] ldr r3, [r4, #0x18] bl MOD04_021FD71C mov r4, r0 bl MOD04_021DF370 cmp r0, #0 addne sp, sp, #8 movne r0, r4 ldmneia sp!, {r4, pc} ldr r0, _021DF87C ; =UNK04_0221053C ldr r1, _021DF884 ; =MOD04_021E9204 ldr r0, [r0] ldr r0, [r0] bl MOD04_021FD6C8 ldr r0, _021DF87C ; =UNK04_0221053C ldr r1, _021DF888 ; =MOD04_021E9464 ldr r0, [r0] ldr r0, [r0] bl MOD04_021FD434 mov r0, r4 add sp, sp, #8 ldmia sp!, {r4, pc} .align 2, 0 _021DF87C: .word UNK04_0221053C _021DF880: .word MOD04_021DEB90 _021DF884: .word MOD04_021E9204 _021DF888: .word MOD04_021E9464 arm_func_end MOD04_021DF7C4 arm_func_start MOD04_021DF88C MOD04_021DF88C: ; 0x021DF88C ldr r0, _021DF8A4 ; =UNK04_0221053C ldr r0, [r0] cmp r0, #0 ldrne r0, [r0, #0x24] moveq r0, #0 bx lr .align 2, 0 _021DF8A4: .word UNK04_0221053C arm_func_end MOD04_021DF88C arm_func_start MOD04_021DF8A8 MOD04_021DF8A8: ; 0x021DF8A8 stmdb sp!, {lr} sub sp, sp, #4 ldr r1, _021DF8F0 ; =UNK04_0221053C ldr r2, [r1] cmp r2, #0 addeq sp, sp, #4 moveq r0, #0 ldmeqia sp!, {pc} mov r1, #1 mov r1, r1,lsl r0 ldr r2, [r2, #0x644] ands r1, r2, r1 addeq sp, sp, #4 moveq r0, #0 ldmeqia sp!, {pc} bl MOD04_021DF5F0 add sp, sp, #4 ldmfd sp!, {pc} .align 2, 0 _021DF8F0: .word UNK04_0221053C arm_func_end MOD04_021DF8A8 arm_func_start MOD04_021DF8F4 MOD04_021DF8F4: ; 0x021DF8F4 stmdb sp!, {lr} sub sp, sp, #4 ldr r2, _021DF954 ; =UNK04_0221053C ldr r3, [r2] cmp r3, #0 addeq sp, sp, #4 moveq r0, #0 ldmeqia sp!, {pc} ldr r1, _021DF958 ; =0x00000624 add r1, r3, r1 str r1, [r0] ldr r2, [r2] ldrb r1, [r2, #0x369] cmp r1, #2 beq _021DF93C ldrb r1, [r2, #0x369] cmp r1, #3 bne _021DF948 _021DF93C: bl MOD04_021E86A4 add sp, sp, #4 ldmfd sp!, {pc} _021DF948: bl MOD04_021E874C add sp, sp, #4 ldmfd sp!, {pc} .align 2, 0 _021DF954: .word UNK04_0221053C _021DF958: .word 0x00000624 arm_func_end MOD04_021DF8F4 arm_func_start MOD04_021DF95C MOD04_021DF95C: ; 0x021DF95C ldr r0, _021DF974 ; =UNK04_0221053C ldr r0, [r0] cmp r0, #0 ldrneb r0, [r0, #0x2c] moveq r0, #0 bx lr .align 2, 0 _021DF974: .word UNK04_0221053C arm_func_end MOD04_021DF95C arm_func_start MOD04_021DF978 MOD04_021DF978: ; 0x021DF978 stmdb sp!, {lr} sub sp, sp, #4 ldr r0, _021DF9D0 ; =UNK04_0221053C ldr r1, [r0] cmp r1, #0 addeq sp, sp, #4 moveq r0, #0 ldmeqia sp!, {pc} ldrb r0, [r1, #0x369] cmp r0, #2 beq _021DF9B0 ldrb r0, [r1, #0x369] cmp r0, #3 bne _021DF9C0 _021DF9B0: bl MOD04_021E87D8 add sp, sp, #4 add r0, r0, #1 ldmfd sp!, {pc} _021DF9C0: bl MOD04_021E8804 add r0, r0, #1 add sp, sp, #4 ldmfd sp!, {pc} .align 2, 0 _021DF9D0: .word UNK04_0221053C arm_func_end MOD04_021DF978 arm_func_start MOD04_021DF9D4 MOD04_021DF9D4: ; 0x021DF9D4 stmdb sp!, {r4, lr} ldr r1, _021DFA3C ; =UNK04_0221053C mov r4, r0 ldr r0, [r1] cmp r0, #0 beq _021DFA14 bl MOD04_021DD6D4 cmp r0, #0 bne _021DFA14 ldr r0, _021DFA3C ; =UNK04_0221053C ldr r0, [r0] ldr r0, [r0, #0x24] cmp r0, #5 beq _021DFA1C cmp r0, #6 beq _021DFA1C _021DFA14: mvn r0, #0 ldmia sp!, {r4, pc} _021DFA1C: mov r0, r4 bl MOD04_021DF760 cmp r0, #0 mvneq r0, #1 ldmeqia sp!, {r4, pc} bl MOD04_021FD488 mov r0, #0 ldmia sp!, {r4, pc} .align 2, 0 _021DFA3C: .word UNK04_0221053C arm_func_end MOD04_021DF9D4 arm_func_start MOD04_021DFA40 MOD04_021DFA40: ; 0x021DFA40 stmdb sp!, {lr} sub sp, sp, #4 ldr r0, _021DFAF0 ; =UNK04_0221053C ldr r0, [r0] cmp r0, #0 beq _021DFA80 bl MOD04_021DD6D4 cmp r0, #0 bne _021DFA80 ldr r0, _021DFAF0 ; =UNK04_0221053C ldr r2, [r0] ldr r0, [r2, #0x24] cmp r0, #5 beq _021DFA8C cmp r0, #6 beq _021DFA8C _021DFA80: add sp, sp, #4 mvn r0, #0 ldmfd sp!, {pc} _021DFA8C: ldrb r0, [r2, #0x361] cmp r0, #0 bne _021DFAC0 ldr r1, _021DFAF4 ; =UNK04_0220D334 mov r0, #1 mov r2, #0 bl MOD04_021E1E30 bl MOD04_02200D6C mov r0, #3 bl MOD04_021DF5CC add sp, sp, #4 mov r0, #1 ldmfd sp!, {pc} _021DFAC0: mov r1, #1 ldr r0, _021DFAF0 ; =UNK04_0221053C strb r1, [r2, #0x2d] ldr r0, [r0] ldr r0, [r0] bl MOD04_021FD45C ldr r1, _021DFAF0 ; =UNK04_0221053C mov r0, #0 ldr r1, [r1] strb r0, [r1, #0x2d] add sp, sp, #4 ldmfd sp!, {pc} .align 2, 0 _021DFAF0: .word UNK04_0221053C _021DFAF4: .word UNK04_0220D334 arm_func_end MOD04_021DFA40 arm_func_start MOD04_021DFAF8 MOD04_021DFAF8: ; 0x021DFAF8 ldr r2, _021DFB1C ; =UNK04_0221053C ldr r3, [r2] cmp r3, #0 moveq r0, #0 strne r0, [r3, #0x90] ldrne r2, [r2] movne r0, #1 strne r1, [r2, #0x94] bx lr .align 2, 0 _021DFB1C: .word UNK04_0221053C arm_func_end MOD04_021DFAF8 arm_func_start MOD04_021DFB20 MOD04_021DFB20: ; 0x021DFB20 stmdb sp!, {r4, r5, r6, r7, lr} sub sp, sp, #0x224 mvn ip, #0 mov r7, r0 mov r6, r1 mov r4, r2 mov r5, r3 str ip, [sp, #8] bl MOD04_021DD6D4 cmp r0, #0 bne _021DFB60 ldr r0, _021DFD04 ; =UNK04_0221053C ldr r0, [r0] ldr r0, [r0, #0x24] cmp r0, #3 beq _021DFB6C _021DFB60: add sp, sp, #0x224 mov r0, #0 ldmia sp!, {r4, r5, r6, r7, pc} _021DFB6C: bl MOD04_021DF6CC ldr r1, _021DFD04 ; =UNK04_0221053C mov r0, #5 ldr r2, [r1] str r6, [r2, #0x88] ldr r1, [r1] str r4, [r1, #0x8c] bl MOD04_021DF5CC mov r0, r7 bl MOD04_021E1F84 movs r4, r0 beq _021DFBB8 ldr r0, _021DFD04 ; =UNK04_0221053C mov r1, r4 ldr r0, [r0] add r0, r0, #0x1c bl MOD04_021F05F4 cmp r0, #0 bne _021DFBC0 _021DFBB8: mov r5, #0xb b _021DFC8C _021DFBC0: ldr r0, _021DFD04 ; =UNK04_0221053C add r2, sp, #8 ldr r0, [r0] mov r1, r4 add r0, r0, #0x1c bl MOD04_021F0664 ldr r0, _021DFD04 ; =UNK04_0221053C ldr r1, [sp, #8] ldr r0, [r0] add r2, sp, #0x10 add r0, r0, #0x1c bl MOD04_021F06E4 ldr r0, [sp, #0x14] cmp r0, #6 movne r5, #0xb bne _021DFC8C ldr r0, _021DFD08 ; =UNK04_0220D344 mov r6, #0x30 add r1, sp, #0xc add r2, sp, #0x18 mov r3, #0x2f strb r6, [sp, #0xc] bl MOD04_021DE9F4 add r0, sp, #0xc mov r1, #0 mov r2, #0xa bl strtoul and r6, r0, #0xff ldr r0, _021DFD0C ; =UNK04_0220D348 add r1, sp, #0xc add r2, sp, #0x18 mov r3, #0x2f bl MOD04_021DE9F4 add r0, sp, #0xc mov r1, #0 mov r2, #0xa bl strtoul and r0, r0, #0xff cmp r0, r6 moveq r5, #0xd beq _021DFC8C ldr r6, [sp, #0x238] ldr r1, _021DFD10 ; =MOD04_021DF12C mov r0, r4 mov r3, r5 mov r2, #0 str r6, [sp] bl MOD04_021E9FD0 add sp, sp, #0x224 mov r0, #1 ldmia sp!, {r4, r5, r6, r7, pc} _021DFC8C: mov r0, r5 mov r1, #0 bl MOD04_021DD6B0 ldr r0, _021DFD04 ; =UNK04_0221053C mov r1, #0 ldr r4, [r0] mov r0, r5 str r1, [sp] ldr r2, [r4, #0x8c] mov r3, r1 str r2, [sp, #4] ldr r4, [r4, #0x88] mov r2, #1 blx r4 ldr r0, _021DFD04 ; =UNK04_0221053C ldr r0, [r0] cmp r0, #0 beq _021DFCF8 ldr r0, [r0, #0x24] cmp r0, #5 bne _021DFCF8 mov r0, #3 bl MOD04_021DF5CC ldr r1, _021DFD14 ; =UNK04_0220D334 mov r0, #1 mov r2, #0 bl MOD04_021E1E30 _021DFCF8: mov r0, #1 add sp, sp, #0x224 ldmia sp!, {r4, r5, r6, r7, pc} .align 2, 0 _021DFD04: .word UNK04_0221053C _021DFD08: .word UNK04_0220D344 _021DFD0C: .word UNK04_0220D348 _021DFD10: .word MOD04_021DF12C _021DFD14: .word UNK04_0220D334 arm_func_end MOD04_021DFB20 arm_func_start MOD04_021DFD18 MOD04_021DFD18: ; 0x021DFD18 stmdb sp!, {r4, r5, r6, r7, lr} sub sp, sp, #4 mov r7, r0 mov r6, r1 mov r5, r2 mov r4, r3 bl MOD04_021DD6D4 cmp r0, #0 bne _021DFD50 ldr r0, _021DFDB4 ; =UNK04_0221053C ldr r0, [r0] ldr r0, [r0, #0x24] cmp r0, #3 beq _021DFD5C _021DFD50: add sp, sp, #4 mov r0, #0 ldmia sp!, {r4, r5, r6, r7, pc} _021DFD5C: bl MOD04_021DF6CC ldr r1, _021DFDB4 ; =UNK04_0221053C mov r2, #0 ldr r3, [r1] mov r0, #5 str r6, [r3, #0x88] ldr r3, [r1] str r5, [r3, #0x8c] ldr r1, [r1] strb r2, [r1, #0x2c] bl MOD04_021DF5CC sub r0, r7, #1 ldr r5, [sp, #0x18] ldr r1, _021DFDB8 ; =MOD04_021DF12C mov r3, r4 and r0, r0, #0xff mov r2, #0 str r5, [sp] bl MOD04_021EA138 mov r0, #1 add sp, sp, #4 ldmia sp!, {r4, r5, r6, r7, pc} .align 2, 0 _021DFDB4: .word UNK04_0221053C _021DFDB8: .word MOD04_021DF12C arm_func_end MOD04_021DFD18 arm_func_start MOD04_021DFDBC MOD04_021DFDBC: ; 0x021DFDBC stmdb sp!, {r4, r5, r6, lr} sub sp, sp, #0x10 mov r6, r1 mov r5, r2 mov r4, r3 bl MOD04_021DD6D4 cmp r0, #0 bne _021DFDF8 ldr r0, _021DFE5C ; =UNK04_0221053C ldr r2, [r0] ldr r1, [r2, #0x24] cmp r1, #3 blt _021DFDF8 cmp r1, #4 bne _021DFE04 _021DFDF8: add sp, sp, #0x10 mov r0, #0 ldmia sp!, {r4, r5, r6, pc} _021DFE04: str r6, [r2, #0x78] ldr r1, [r0] mov r0, #4 str r5, [r1, #0x7c] bl MOD04_021DF5CC ldr r0, _021DFE5C ; =UNK04_0221053C ldr r1, [sp, #0x20] ldr r3, [r0] ldr r0, [sp, #0x24] str r4, [sp] str r1, [sp, #4] ldr r4, [sp, #0x28] str r0, [sp, #8] ldr r2, _021DFE60 ; =MOD04_021DF2B4 add r0, r3, #0xe0 add r1, r3, #0x1e0 mov r3, #0 str r4, [sp, #0xc] bl MOD04_021E2174 mov r0, #1 add sp, sp, #0x10 ldmia sp!, {r4, r5, r6, pc} .align 2, 0 _021DFE5C: .word UNK04_0221053C _021DFE60: .word MOD04_021DF2B4 arm_func_end MOD04_021DFDBC arm_func_start MOD04_021DFE64 MOD04_021DFE64: ; 0x021DFE64 stmdb sp!, {r4, r5, r6, lr} movs r4, r0 mov r6, r2 mov r5, r3 moveq r0, #0 ldmeqia sp!, {r4, r5, r6, pc} bl MOD04_021DD6D4 cmp r0, #0 bne _021DFE9C ldr r0, _021DFF6C ; =UNK04_0221053C ldr r2, [r0] ldr r1, [r2, #0x24] cmp r1, #0 beq _021DFEA4 _021DFE9C: mov r0, #0 ldmia sp!, {r4, r5, r6, pc} _021DFEA4: str r6, [r2, #0x70] ldr r1, [r0] cmp r4, #0 str r5, [r1, #0x74] beq _021DFEC4 ldrh r1, [r4] cmp r1, #0 bne _021DFECC _021DFEC4: mov r5, #0 b _021DFF18 _021DFECC: ldr r1, [r0] mov r0, #0 add r1, r1, #0x2e mov r2, #0x34 bl MIi_CpuClear16 mov r0, r4 bl MOD04_021DE89C cmp r0, #0x19 movhi r5, #0x19 bhi _021DFF00 mov r0, r4 bl MOD04_021DE89C mov r5, r0 _021DFF00: ldr r1, _021DFF6C ; =UNK04_0221053C mov r0, r4 ldr r1, [r1] mov r2, r5, lsl #1 add r1, r1, #0x2e bl MIi_CpuCopy16 _021DFF18: ldr r0, _021DFF6C ; =UNK04_0221053C mov r1, #0 ldr r0, [r0] add r0, r0, r5, lsl #1 strh r1, [r0, #0x2e] bl MOD04_021DDC1C cmp r0, #4 beq _021DFF4C ldr r1, _021DFF70 ; =0xFFFF1596 mov r0, #2 bl MOD04_021E0EAC mov r0, #1 ldmia sp!, {r4, r5, r6, pc} _021DFF4C: mov r0, #1 bl MOD04_021DF5CC ldr r0, _021DFF6C ; =UNK04_0221053C ldr r0, [r0] ldr r0, [r0, #0x68] bl MOD04_021EE898 mov r0, #1 ldmia sp!, {r4, r5, r6, pc} .align 2, 0 _021DFF6C: .word UNK04_0221053C _021DFF70: .word 0xFFFF1596 arm_func_end MOD04_021DFE64 arm_func_start MOD04_021DFF74 MOD04_021DFF74: ; 0x021DFF74 stmdb sp!, {lr} sub sp, sp, #4 bl MOD04_021DD984 cmp r0, #0 beq _021DFF8C bl MOD04_021DF5EC _021DFF8C: ldr r0, _021E01E4 ; =UNK04_0221053C ldr r0, [r0] cmp r0, #0 addeq sp, sp, #4 ldmeqia sp!, {pc} ldr r0, [r0, #0x24] cmp r0, #0 addeq sp, sp, #4 ldmeqia sp!, {pc} bl MOD04_021DD6D4 cmp r0, #0 addne sp, sp, #4 ldmneia sp!, {pc} ldr r0, _021E01E4 ; =UNK04_0221053C ldr r0, [r0] ldr r0, [r0, #0x24] cmp r0, #6 addls pc, pc, r0, lsl #2 b _021E0194 _021DFFD8: ; jump table b _021E0194 ; case 0 b _021DFFF4 ; case 1 b _021E0124 ; case 2 b _021E012C ; case 3 b _021E012C ; case 4 b _021E013C ; case 5 b _021E014C ; case 6 _021DFFF4: bl MOD04_021EE6A0 cmp r0, #1 beq _021E0014 cmp r0, #2 beq _021E00FC cmp r0, #3 beq _021E0110 b _021E0194 _021E0014: ldr r0, _021E01E4 ; =UNK04_0221053C mov r2, #0 ldr r0, [r0] ldr r1, [r0, #0xa0] add r0, r0, #0x1c bl MOD04_021F0F94 bl MOD04_021DF414 cmp r0, #0 addne sp, sp, #4 ldmneia sp!, {pc} ldr r0, _021E01E4 ; =UNK04_0221053C mov r1, #0 ldr r0, [r0] ldr r2, _021E01E8 ; =MOD04_021DF0D4 mov r3, r1 add r0, r0, #0x1c bl MOD04_021F0EB0 bl MOD04_021DF414 cmp r0, #0 addne sp, sp, #4 ldmneia sp!, {pc} ldr r0, _021E01E4 ; =UNK04_0221053C ldr r2, _021E01EC ; =MOD04_021DEF6C ldr r0, [r0] mov r1, #3 add r0, r0, #0x1c mov r3, #0 bl MOD04_021F0EB0 bl MOD04_021DF414 cmp r0, #0 addne sp, sp, #4 ldmneia sp!, {pc} ldr r0, _021E01E4 ; =UNK04_0221053C ldr r2, _021E01F0 ; =MOD04_021E20C8 ldr r0, [r0] mov r1, #1 add r0, r0, #0x1c mov r3, #0 bl MOD04_021F0EB0 bl MOD04_021DF414 cmp r0, #0 addne sp, sp, #4 ldmneia sp!, {pc} ldr r0, _021E01E4 ; =UNK04_0221053C ldr r2, _021E01F4 ; =MOD04_021E1FE4 ldr r0, [r0] mov r1, #2 add r0, r0, #0x1c mov r3, #0 bl MOD04_021F0EB0 bl MOD04_021DF414 cmp r0, #0 addne sp, sp, #4 ldmneia sp!, {pc} mov r0, #2 bl MOD04_021DF5CC bl MOD04_021E1034 b _021E0194 _021E00FC: ldr r1, _021E01F8 ; =0xFFFFB172 mov r0, #3 bl MOD04_021E0EAC add sp, sp, #4 ldmfd sp!, {pc} _021E0110: ldr r1, _021E01FC ; =0xFFFFB17B mov r0, #4 bl MOD04_021E0EAC add sp, sp, #4 ldmfd sp!, {pc} _021E0124: bl MOD04_021E0F1C b _021E0194 _021E012C: bl MOD04_021E2228 mov r0, #0 bl MOD04_021E9568 b _021E0194 _021E013C: mov r0, #1 bl MOD04_021E9568 bl MOD04_021E2228 b _021E0194 _021E014C: bl MOD04_021EAA64 bl MOD04_021E2228 ldr r0, _021E01E4 ; =UNK04_0221053C ldr r1, [r0] ldrb r0, [r1, #0x369] cmp r0, #2 beq _021E0174 ldrb r0, [r1, #0x369] cmp r0, #3 bne _021E0180 _021E0174: mov r0, #1 bl MOD04_021E9568 b _021E0194 _021E0180: ldr r0, [r1] cmp r0, #0 beq _021E0194 mov r0, #0 bl MOD04_021E9568 _021E0194: ldr r0, _021E01E4 ; =UNK04_0221053C ldr r1, [r0] ldrb r0, [r1, #0x36c] cmp r0, #1 addne sp, sp, #4 ldmneia sp!, {pc} ldr r0, [r1, #0x364] cmp r0, #0 beq _021E01CC bl MOD04_02202280 ldr r0, _021E01E4 ; =UNK04_0221053C mov r1, #0 ldr r0, [r0] str r1, [r0, #0x364] _021E01CC: ldr r0, _021E01E4 ; =UNK04_0221053C mov r1, #0 ldr r0, [r0] strb r1, [r0, #0x36c] add sp, sp, #4 ldmfd sp!, {pc} .align 2, 0 _021E01E4: .word UNK04_0221053C _021E01E8: .word MOD04_021DF0D4 _021E01EC: .word MOD04_021DEF6C _021E01F0: .word MOD04_021E20C8 _021E01F4: .word MOD04_021E1FE4 _021E01F8: .word 0xFFFFB172 _021E01FC: .word 0xFFFFB17B arm_func_end MOD04_021DFF74 arm_func_start MOD04_021E0200 MOD04_021E0200: ; 0x021E0200 stmdb sp!, {lr} sub sp, sp, #4 ldr r0, _021E0370 ; =UNK04_0221053C ldr r0, [r0] cmp r0, #0 addeq sp, sp, #4 ldmeqia sp!, {pc} ldr r0, [r0, #0x364] cmp r0, #0 beq _021E023C bl MOD04_02202280 ldr r0, _021E0370 ; =UNK04_0221053C mov r1, #0 ldr r0, [r0] str r1, [r0, #0x364] _021E023C: ldr r0, _021E0370 ; =UNK04_0221053C mov r2, #0 ldr r1, [r0] strb r2, [r1, #0x36c] ldr r0, [r0] ldr r0, [r0, #0x438] cmp r0, #0 beq _021E0270 bl MOD04_02203E80 ldr r0, _021E0370 ; =UNK04_0221053C mov r1, #0 ldr r0, [r0] str r1, [r0, #0x438] _021E0270: bl MOD04_02200D6C bl MOD04_021FBE7C ldr r0, _021E0370 ; =UNK04_0221053C ldr ip, [r0] ldr r0, [ip, #0x1c] cmp r0, #0 beq _021E0324 mov r1, #0 mov r2, r1 mov r3, r1 add r0, ip, #0x1c bl MOD04_021F0EB0 ldr r0, _021E0370 ; =UNK04_0221053C mov r2, #0 ldr r0, [r0] mov r3, r2 add r0, r0, #0x1c mov r1, #3 bl MOD04_021F0EB0 ldr r0, _021E0370 ; =UNK04_0221053C mov r2, #0 ldr r0, [r0] mov r3, r2 add r0, r0, #0x1c mov r1, #1 bl MOD04_021F0EB0 ldr r0, _021E0370 ; =UNK04_0221053C mov r2, #0 ldr r0, [r0] mov r1, #2 add r0, r0, #0x1c mov r3, r2 bl MOD04_021F0EB0 ldr r0, _021E0370 ; =UNK04_0221053C ldr r0, [r0] add r0, r0, #0x1c bl MOD04_021F0F18 ldr r0, _021E0370 ; =UNK04_0221053C ldr r0, [r0] add r0, r0, #0x1c bl MOD04_021F0F64 mov r1, #0 ldr r0, _021E0370 ; =UNK04_0221053C ldr r0, [r0] str r1, [r0, #0x1c] _021E0324: bl MOD04_021E0E48 bl MOD04_021E1D90 bl MOD04_021E854C bl MOD04_021EA9C4 ldr r0, _021E0370 ; =UNK04_0221053C ldr r0, [r0] ldr r0, [r0] cmp r0, #0 beq _021E035C bl MOD04_021FD704 ldr r0, _021E0370 ; =UNK04_0221053C mov r1, #0 ldr r0, [r0] str r1, [r0] _021E035C: ldr r0, _021E0370 ; =UNK04_0221053C mov r1, #0 str r1, [r0] add sp, sp, #4 ldmfd sp!, {pc} .align 2, 0 _021E0370: .word UNK04_0221053C arm_func_end MOD04_021E0200 arm_func_start MOD04_021E0374 MOD04_021E0374: ; 0x021E0374 stmdb sp!, {r4, r5, r6, lr} sub sp, sp, #0x10 ldr ip, _021E05D8 ; =UNK04_0221053C mov r6, r1 mov r5, r2 mov r4, r3 str r0, [ip] bl MOD04_021DD6F0 ldr r0, _021E05D8 ; =UNK04_0221053C mov r2, #0 ldr r1, [r0] ldr r3, _021E05DC ; =MOD04_021E8F80 str r2, [r1] ldr r1, [r0] ldr r2, _021E05E0 ; =MOD04_021DEF60 str r3, [r1, #4] ldr r1, [r0] ldr ip, [sp, #0x24] str r2, [r1, #8] cmp ip, #0 ldr r2, [r0] ldr r3, _021E05E4 ; =MOD04_021DEBE4 ldr r1, _021E05E8 ; =MOD04_021DEBD8 str r3, [r2, #0xc] ldr r0, [r0] ldr r3, [sp, #0x28] str r1, [r0, #0x10] ldr r0, _021E05D8 ; =UNK04_0221053C moveq ip, #0x2000 ldr r0, [r0] cmp r3, #0 str ip, [r0, #0x14] moveq r3, #0x2000 ldr r1, _021E05D8 ; =UNK04_0221053C mov r0, #0 ldr r2, [r1] ldr ip, _021E05EC ; =UNK04_02210F94 str r3, [r2, #0x18] ldr r2, [r1] ldr r3, _021E05F0 ; =UNK04_02211094 str r0, [r2, #0x1c] ldr r2, [r1] str r6, [r2, #0x20] ldr r2, [r1] str r0, [r2, #0x24] ldr r2, [r1] str r0, [r2, #0x28] ldr r2, [r1] strb r0, [r2, #0x2c] ldr r2, [r1] strb r0, [r2, #0x2d] ldr r2, [r1] str r0, [r2, #0x64] ldr r2, [r1] str ip, [r2, #0x68] ldr r2, [r1] str r3, [r2, #0x6c] ldr r2, [r1] str r0, [r2, #0x70] ldr r2, [r1] str r0, [r2, #0x74] ldr r2, [r1] str r0, [r2, #0x78] ldr r2, [r1] str r0, [r2, #0x7c] ldr r2, [r1] str r0, [r2, #0x80] ldr r2, [r1] str r0, [r2, #0x84] ldr r2, [r1] str r0, [r2, #0x88] ldr r2, [r1] str r0, [r2, #0x8c] ldr r2, [r1] str r0, [r2, #0x90] ldr r1, [r1] str r0, [r1, #0x94] bl MOD04_021DF6CC ldr r0, _021E05D8 ; =UNK04_0221053C mov r3, r5 ldr r2, [r0] ldr r1, [r6, #0x24] ldr r0, _021E05F4 ; =MOD04_021DF304 str r1, [sp] add r1, r2, #0x2e str r1, [sp, #4] str r0, [sp, #8] mov r5, #0 add r0, r2, #0x98 mov r1, r6 add r2, r2, #0x1c str r5, [sp, #0xc] bl MOD04_021E1074 ldr r0, _021E05D8 ; =UNK04_0221053C ldr r2, [sp, #0x30] ldr r5, [r0] ldr r3, [sp, #0x2c] str r2, [sp] add r0, r5, #0x2f8 add r1, r5, #0x1c add r2, r5, #0x2e bl MOD04_021E234C ldr r0, _021E05D8 ; =UNK04_0221053C ldr r1, _021E05EC ; =UNK04_02210F94 ldr r2, [r0] ldr r0, _021E05F0 ; =UNK04_02211094 str r1, [sp] str r0, [sp, #4] ldr r1, [sp, #0x2c] ldr r0, [sp, #0x30] str r1, [sp, #8] str r0, [sp, #0xc] add r0, r2, #0x354 add r1, r2, #0x1c add r3, r2, #4 bl MOD04_021EA368 ldr r1, _021E05D8 ; =UNK04_0221053C ldr r0, _021E05F8 ; =0x000007D8 ldr r1, [r1] add r0, r1, r0 bl MOD04_021EACB4 mov r0, r4 bl strlen cmp r0, #0x100 movhs r5, #0xff bhs _021E0578 mov r0, r4 bl strlen mov r5, r0 _021E0578: ldr r1, _021E05EC ; =UNK04_02210F94 mov r0, r4 mov r2, r5 bl MI_CpuCopy8 ldr r0, [sp, #0x20] ldr r1, _021E05EC ; =UNK04_02210F94 mov r2, #0 strb r2, [r1, r5] bl strlen cmp r0, #0x100 movhs r4, #0xff bhs _021E05B4 ldr r0, [sp, #0x20] bl strlen mov r4, r0 _021E05B4: ldr r0, [sp, #0x20] ldr r1, _021E05F0 ; =UNK04_02211094 mov r2, r4 bl MI_CpuCopy8 ldr r0, _021E05F0 ; =UNK04_02211094 mov r1, #0 strb r1, [r0, r4] add sp, sp, #0x10 ldmia sp!, {r4, r5, r6, pc} .align 2, 0 _021E05D8: .word UNK04_0221053C _021E05DC: .word MOD04_021E8F80 _021E05E0: .word MOD04_021DEF60 _021E05E4: .word MOD04_021DEBE4 _021E05E8: .word MOD04_021DEBD8 _021E05EC: .word UNK04_02210F94 _021E05F0: .word UNK04_02211094 _021E05F4: .word MOD04_021DF304 _021E05F8: .word 0x000007D8 arm_func_end MOD04_021E0374 .section .data .global UNK04_0220D334 UNK04_0220D334: ; 0x0220D334 .byte 0x00, 0x00, 0x00, 0x00 .global UNK04_0220D338 UNK04_0220D338: ; 0x0220D338 .asciz "GPCM" .balign 4, 0 .global UNK04_0220D340 UNK04_0220D340: ; 0x0220D340 .asciz "MAT" .balign 4, 0 .global UNK04_0220D344 UNK04_0220D344: ; 0x0220D344 .asciz "SCM" .balign 4, 0 .global UNK04_0220D348 UNK04_0220D348: ; 0x0220D348 .asciz "SCN" .balign 4, 0 .section .bss .global UNK04_0221053C UNK04_0221053C: ; 0x0221053C .space 0x4 .global UNK04_02210540 UNK04_02210540: ; 0x02210540 .space 0x4 .global UNK04_02210544 UNK04_02210544: ; 0x02210544 .space 0x80 .global UNK04_022105C4 UNK04_022105C4: ; 0x022105C4 .space 0x100