diff options
-rw-r--r-- | arm9/arm9.lcf | 34 | ||||
-rw-r--r-- | arm9/global.inc | 37 | ||||
-rw-r--r-- | arm9/modules/79/asm/module_79_arm.s | 4890 | ||||
-rw-r--r-- | arm9/modules/79/asm/module_79_thumb.s | 851 | ||||
-rw-r--r-- | arm9/undefined_syms.txt | 1 |
5 files changed, 5810 insertions, 3 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index f4ba6edf..610a68c2 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -3036,7 +3036,24 @@ SECTIONS { SDK_OVERLAY_MODULE_79_ID = 79; SDK_OVERLAY.MODULE_79.ID = 79; SDK_OVERLAY.MODULE_79.START = .; - FILE_2D9E00.o (.text) /* 0x2D5E00 */ + module_79_thumb.o (.text) + module_79_arm.o (.text) + module_79_thumb.o (.rodata) + module_79_arm.o (.rodata) + module_79_thumb.o (.init) + module_79_arm.o (.init) + SDK_OVERLAY.MODULE_79.SINIT_START = .; + module_79_thumb.o (.ctor) + module_79_arm.o (.ctor) + module_79_thumb.o (.sinit) + module_79_arm.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_79.SINIT_END = .; + . = ALIGN(32); + module_79_thumb.o (.sdata) + module_79_arm.o (.sdata) + module_79_thumb.o (.data) + module_79_arm.o (.data) . = ALIGN(32); SDK_OVERLAY.MODULE_79.END = .; SDK_OVERLAY.MODULE_79.SIZE = SDK_OVERLAY.MODULE_79.END - SDK_OVERLAY.MODULE_79.START; @@ -3046,7 +3063,10 @@ SECTIONS { { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_79.BSS_START = .; - FILE_2D9E00.o (.bss) + module_79_thumb.o (.bss) + module_79_arm.o (.bss) + module_79_thumb.o (.sbss) + module_79_arm.o (.sbss) . = ALIGN(32); SDK_OVERLAY.MODULE_79.BSS_END = .; SDK_OVERLAY.MODULE_79.BSS_SIZE = SDK_OVERLAY.MODULE_79.BSS_END - SDK_OVERLAY.MODULE_79.BSS_START; @@ -4035,7 +4055,15 @@ SECTIONS { WRITEW 78; WRITEW 0; - OVERLAY_TABLE(MODULE_79, 79) + WRITEW 79; + WRITEW ADDR(.MODULE_79); + WRITEW SDK_OVERLAY.MODULE_79.SIZE; + WRITEW SDK_OVERLAY.MODULE_79.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_79.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_79.SINIT_END; + WRITEW 79; + WRITEW 0; + OVERLAY_TABLE(MODULE_80, 80) OVERLAY_TABLE(MODULE_81, 81) OVERLAY_TABLE(MODULE_82, 82) diff --git a/arm9/global.inc b/arm9/global.inc index 9278357b..abbdb3ea 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -5802,6 +5802,43 @@ .extern MOD04_021D8640
.extern MOD04_021D8678
.extern FUN_02029B08
+.extern FUN_021EB550
+.extern MOD04_021DD904
+.extern MOD04_021DD944
+.extern MOD04_021EB3B8
+.extern MOD04_021EB524
+.extern MOD04_021EB59C
+.extern MOD04_021EF820
+.extern strncat
+.extern fclose
+.extern fread
+.extern fseek
+.extern ftell
+.extern MOD04_021DD82C
+.extern MOD04_021DD844
+.extern MOD04_021DD860
+.extern MOD04_021EEFA8
+.extern MOD04_021EEFFC
+.extern MOD04_021EF06C
+.extern MOD04_021EF074
+.extern MOD04_021EF0E4
+.extern MOD04_021EFB28
+.extern MOD04_021EFB38
+.extern MOD04_021EFC24
+.extern MOD04_021EFC78
+.extern MOD04_021EFCE4
+.extern MOD04_021EFD80
+.extern MOD04_021EFD9C
+.extern MOD04_021EFDB8
+.extern MOD04_021EFF5C
+.extern MOD04_021F0130
+.extern MOD04_021F017C
+.extern MOD04_021F0208
+.extern MOD04_021F024C
+.extern MOD04_021F0250
+.extern MOD04_021F025C
+.extern rewind
+.extern strspn
.extern FUN_02029B40
.extern FUN_02029C00
.extern FUN_02088D1C
diff --git a/arm9/modules/79/asm/module_79_arm.s b/arm9/modules/79/asm/module_79_arm.s new file mode 100644 index 00000000..3b45bc8c --- /dev/null +++ b/arm9/modules/79/asm/module_79_arm.s @@ -0,0 +1,4890 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + arm_func_start MOD79_0221248C +MOD79_0221248C: ; 0x0221248C + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r7, r0 + mov r6, r1 + mov r5, r2 + bne _022124B8 + ldr r0, _02212544 ; =0x02216858 + ldr r1, _02212548 ; =0x0221686C + ldr r3, _0221254C ; =0x000001B7 + mov r2, #0 + bl __msl_assertion_failed +_022124B8: + cmp r5, #0 + bne _022124D4 + ldr r0, _02212550 ; =0x0221687C + ldr r1, _02212548 ; =0x0221686C + mov r2, #0 + mov r3, #0x1b8 + bl __msl_assertion_failed +_022124D4: + ldr r4, [r5] + cmp r4, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r3, [r7, #0x10] + ldr r0, [r7, #0xc] + sub r0, r0, r3 + cmp r0, #0 + addle sp, sp, #4 + movle r0, #0 + ldmleia sp!, {r4, r5, r6, r7, pc} + ldr r1, [r7, #4] + cmp r4, r0 + movge r4, r0 + mov r0, r6 + mov r2, r4 + add r1, r1, r3 + bl memcpy + mov r0, #0 + strb r0, [r6, r4] + str r4, [r5] + ldr r1, [r7, #0x10] + mov r0, #1 + add r1, r1, r4 + str r1, [r7, #0x10] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02212544: .word 0x02216858 +_02212548: .word 0x0221686C +_0221254C: .word 0x000001B7 +_02212550: .word 0x0221687C + arm_func_end MOD79_0221248C + + arm_func_start MOD79_02212554 +MOD79_02212554: ; 0x02212554 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0xc + mov r8, r0 + add r6, sp, #0 + add r5, sp, #4 + add r4, r8, #0x60 + mov r7, #0 + mvn sb, #0 +_02212574: + ldr r0, [r8, #0x48] + mov r1, r7 + mov r2, r6 + mov r3, r5 + bl MOD04_021EFF5C + cmp r0, sb + beq _0221259C + ldr r0, [sp, #4] + cmp r0, #0 + beq _022125C4 +_0221259C: + mov r0, #1 + str r0, [r8, #0xfc] + mov r0, #5 + str r0, [r8, #0x38] + ldr r0, [r8, #0x48] + bl MOD04_021EFB28 + str r0, [r8, #0x4c] + add sp, sp, #0xc + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_022125C4: + ldr r0, [sp] + cmp r0, #0 + addeq sp, sp, #0xc + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + ldr r3, [r8, #0x60] + ldr r1, [r8, #0x54] + ldr r2, [r8, #0x5c] + mov r0, r8 + add r1, r1, r3 + sub r2, r2, r3 + bl MOD79_02212F68 + cmp r0, sb + addeq sp, sp, #0xc + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + ldr r1, [r4] + add r0, r1, r0 + str r0, [r4] + ldr r1, [r8, #0x60] + ldr r0, [r8, #0x5c] + cmp r1, r0 + blt _02212574 + mov r0, #1 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + arm_func_end MOD79_02212554 + + arm_func_start MOD79_0221262C +MOD79_0221262C: ; 0x0221262C + stmdb sp!, {r4, lr} + movs r4, r0 + bne _0221264C + ldr r0, _02212664 ; =0x02216888 + ldr r1, _02212668 ; =0x0221686C + mov r2, #0 + mov r3, #0x16c + bl __msl_assertion_failed +_0221264C: + mov r1, #0 + str r1, [r4, #0xc] + str r1, [r4, #0x10] + ldr r0, [r4, #4] + strb r1, [r0] + ldmia sp!, {r4, pc} + .align 2, 0 +_02212664: .word 0x02216888 +_02212668: .word 0x0221686C + arm_func_end MOD79_0221262C + + arm_func_start MOD79_0221266C +MOD79_0221266C: ; 0x0221266C + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r2, r1 + mov r4, r0 + ldr r1, _022126A0 ; =0x02216890 + add r0, sp, #0 + bl sprintf + add r1, sp, #0 + mov r0, r4 + mov r2, #0 + bl MOD79_02212794 + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_022126A0: .word 0x02216890 + arm_func_end MOD79_0221266C + + arm_func_start MOD79_022126A4 +MOD79_022126A4: ; 0x022126A4 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + movs r4, r0 + strb r1, [sp] + bne _022126CC + ldr r0, _022126F4 ; =0x02216888 + ldr r1, _022126F8 ; =0x0221686C + ldr r3, _022126FC ; =0x00000131 + mov r2, #0 + bl __msl_assertion_failed +_022126CC: + cmp r4, #0 + addeq sp, sp, #8 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + add r1, sp, #0 + mov r0, r4 + mov r2, #1 + bl MOD79_02212794 + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_022126F4: .word 0x02216888 +_022126F8: .word 0x0221686C +_022126FC: .word 0x00000131 + arm_func_end MOD79_022126A4 + + arm_func_start MOD79_02212700 +MOD79_02212700: ; 0x02212700 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r4, r2 + mov r2, #0 + mov r5, r0 + bl MOD79_02212794 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + ldr r1, _0221278C ; =0x02216894 + mov r0, r5 + mov r2, #2 + bl MOD79_02212794 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + mov r0, r5 + mov r1, r4 + mov r2, #0 + bl MOD79_02212794 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + ldr r1, _02212790 ; =0x02216898 + mov r0, r5 + mov r2, #2 + bl MOD79_02212794 + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_0221278C: .word 0x02216894 +_02212790: .word 0x02216898 + arm_func_end MOD79_02212700 + + arm_func_start MOD79_02212794 +MOD79_02212794: ; 0x02212794 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #0xc + movs r7, r0 + mov r6, r1 + ldr r5, [r7] + bne _022127C4 + ldr r0, _02212A40 ; =0x02216888 + ldr r1, _02212A44 ; =0x0221686C + mov r2, #0 + mov r3, #0xb7 + bl __msl_assertion_failed +_022127C4: + cmp r6, #0 + bne _022127E0 + ldr r0, _02212A48 ; =0x0221689C + ldr r1, _02212A44 ; =0x0221686C + mov r2, #0 + mov r3, #0xb8 + bl __msl_assertion_failed +_022127E0: + ldr r0, [sp, #0x28] + cmp r0, #0 + bge _02212800 + ldr r0, _02212A4C ; =0x022168A4 + ldr r1, _02212A44 ; =0x0221686C + mov r2, #0 + mov r3, #0xb9 + bl __msl_assertion_failed +_02212800: + cmp r7, #0 + addeq sp, sp, #0xc + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, lr} + addeq sp, sp, #0x10 + bxeq lr + cmp r6, #0 + addeq sp, sp, #0xc + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x28] + cmp r0, #0 + addlt sp, sp, #0xc + movlt r0, #0 + ldmltia sp!, {r4, r5, r6, r7, lr} + addlt sp, sp, #0x10 + bxlt lr + cmp r0, #0 + bne _02212860 + mov r0, r6 + bl strlen + str r0, [sp, #0x28] +_02212860: + ldr r0, [r7, #0x20] + cmp r0, #1 + bne _02212968 + ldr r0, [r5, #0x168] + cmp r0, #0 + bne _0221288C + ldr r0, _02212A50 ; =0x022168B4 + ldr r1, _02212A44 ; =0x0221686C + mov r2, #0 + mov r3, #0xce + bl __msl_assertion_failed +_0221288C: + ldr r2, [r7, #8] + ldr r1, [r7, #0xc] + add r0, sp, #8 + sub r1, r2, r1 + str r1, [sp, #8] + ldr r2, [r7, #4] + ldr r1, [r7, #0xc] + add r3, sp, #0x28 + add r1, r2, r1 + str r1, [sp] + str r0, [sp, #4] + ldr r4, [r5, #0x17c] + mov r0, r5 + mov r2, r6 + add r1, r5, #0x164 + .word 0xE12FFF34 + mov r4, r0 + cmp r4, #2 + bne _0221294C + ldr r0, [r7, #0x18] + cmp r0, #0 + beq _02212910 + ldr r0, [r7] + mov r1, #1 + str r1, [r0, #0xfc] + ldr r0, [r7] + mov r1, #2 + str r1, [r0, #0x38] + add sp, sp, #0xc + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, lr} + add sp, sp, #0x10 + bx lr +_02212910: + ldr r1, [r7, #0x14] + mov r0, r7 + bl MOD79_02212CF0 + cmp r0, #0 + beq _0221295C + ldr r0, [r7] + mov r2, #1 + str r2, [r0, #0xfc] + ldr r1, [r7] + add sp, sp, #0xc + str r2, [r1, #0x38] + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, lr} + add sp, sp, #0x10 + bx lr +_0221294C: + ldr r1, [r7, #0xc] + ldr r0, [sp, #8] + add r0, r1, r0 + str r0, [r7, #0xc] +_0221295C: + cmp r4, #2 + beq _0221288C + b _02212A2C +_02212968: + ldr r2, [r7, #0xc] + ldr r1, [sp, #0x28] + ldr r0, [r7, #8] + add r4, r2, r1 + cmp r4, r0 + blt _02212A00 +_02212980: + ldr r0, [r7, #0x18] + cmp r0, #0 + beq _022129B8 + ldr r0, [r7] + mov r1, #1 + str r1, [r0, #0xfc] + ldr r0, [r7] + mov r1, #2 + str r1, [r0, #0x38] + add sp, sp, #0xc + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, lr} + add sp, sp, #0x10 + bx lr +_022129B8: + ldr r1, [r7, #0x14] + mov r0, r7 + bl MOD79_02212CF0 + cmp r0, #0 + bne _022129F4 + ldr r0, [r7] + mov r2, #1 + str r2, [r0, #0xfc] + ldr r1, [r7] + add sp, sp, #0xc + str r2, [r1, #0x38] + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, lr} + add sp, sp, #0x10 + bx lr +_022129F4: + ldr r0, [r7, #8] + cmp r4, r0 + bge _02212980 +_02212A00: + ldr r3, [r7, #4] + ldr r0, [r7, #0xc] + ldr r2, [sp, #0x28] + mov r1, r6 + add r0, r3, r0 + bl memcpy + str r4, [r7, #0xc] + ldr r1, [r7, #4] + ldr r0, [r7, #0xc] + mov r2, #0 + strb r2, [r1, r0] +_02212A2C: + mov r0, #1 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_02212A40: .word 0x02216888 +_02212A44: .word 0x0221686C +_02212A48: .word 0x0221689C +_02212A4C: .word 0x022168A4 +_02212A50: .word 0x022168B4 + arm_func_end MOD79_02212794 + + arm_func_start MOD79_02212A54 +MOD79_02212A54: ; 0x02212A54 + stmdb sp!, {r4, lr} + movs r4, r0 + bne _02212A74 + ldr r0, _02212AAC ; =0x02216888 + ldr r1, _02212AB0 ; =0x0221686C + mov r2, #0 + mov r3, #0x9b + bl __msl_assertion_failed +_02212A74: + cmp r4, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #4] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r1, [r4, #0x1c] + cmp r1, #0 + bne _02212A98 + bl MOD04_021DD82C +_02212A98: + mov r0, r4 + mov r1, #0 + mov r2, #0x24 + bl Call_FillMemWithValue + ldmia sp!, {r4, pc} + .align 2, 0 +_02212AAC: .word 0x02216888 +_02212AB0: .word 0x0221686C + arm_func_end MOD79_02212A54 + + arm_func_start MOD79_02212AB4 +MOD79_02212AB4: ; 0x02212AB4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bne _02212AE4 + ldr r0, _02212BB0 ; =0x022168F0 + ldr r1, _02212BB4 ; =0x0221686C + mov r2, #0 + mov r3, #0x74 + bl __msl_assertion_failed +_02212AE4: + cmp r6, #0 + bne _02212B00 + ldr r0, _02212BB8 ; =0x02216888 + ldr r1, _02212BB4 ; =0x0221686C + mov r2, #0 + mov r3, #0x75 + bl __msl_assertion_failed +_02212B00: + cmp r5, #0 + bne _02212B1C + ldr r0, _02212BBC ; =0x022168FC + ldr r1, _02212BB4 ; =0x0221686C + mov r2, #0 + mov r3, #0x76 + bl __msl_assertion_failed +_02212B1C: + cmp r4, #0 + bgt _02212B38 + ldr r0, _02212BC0 ; =0x02216908 + ldr r1, _02212BB4 ; =0x0221686C + mov r2, #0 + mov r3, #0x77 + bl __msl_assertion_failed +_02212B38: + cmp r7, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + cmp r6, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + cmp r5, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + cmp r4, #0 + addle sp, sp, #4 + movle r0, #0 + ldmleia sp!, {r4, r5, r6, r7, pc} + str r7, [r6] + str r5, [r6, #4] + str r4, [r6, #8] + mov r2, #0 + str r2, [r6, #0xc] + str r2, [r6, #0x14] + mov r0, #1 + str r0, [r6, #0x18] + str r0, [r6, #0x1c] + str r2, [r6, #0x20] + ldr r1, [r6, #4] + strb r2, [r1] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02212BB0: .word 0x022168F0 +_02212BB4: .word 0x0221686C +_02212BB8: .word 0x02216888 +_02212BBC: .word 0x022168FC +_02212BC0: .word 0x02216908 + arm_func_end MOD79_02212AB4 + + arm_func_start MOD79_02212BC4 +MOD79_02212BC4: ; 0x02212BC4 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bne _02212BF4 + ldr r0, _02212CDC ; =0x022168F0 + ldr r1, _02212CE0 ; =0x0221686C + mov r2, #0 + mov r3, #0x43 + bl __msl_assertion_failed +_02212BF4: + cmp r6, #0 + bne _02212C10 + ldr r0, _02212CE4 ; =0x02216888 + ldr r1, _02212CE0 ; =0x0221686C + mov r2, #0 + mov r3, #0x44 + bl __msl_assertion_failed +_02212C10: + cmp r5, #0 + bgt _02212C2C + ldr r0, _02212CE8 ; =0x02216914 + ldr r1, _02212CE0 ; =0x0221686C + mov r2, #0 + mov r3, #0x45 + bl __msl_assertion_failed +_02212C2C: + cmp r4, #0 + bgt _02212C48 + ldr r0, _02212CEC ; =0x02216924 + ldr r1, _02212CE0 ; =0x0221686C + mov r2, #0 + mov r3, #0x46 + bl __msl_assertion_failed +_02212C48: + cmp r7, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + cmp r6, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, pc} + cmp r5, #0 + addle sp, sp, #4 + movle r0, #0 + ldmleia sp!, {r4, r5, r6, r7, pc} + cmp r4, #0 + addle sp, sp, #4 + movle r0, #0 + ldmleia sp!, {r4, r5, r6, r7, pc} + str r7, [r6] + mov r2, #0 + str r2, [r6, #4] + str r2, [r6, #8] + str r2, [r6, #0xc] + str r2, [r6, #0x10] + str r4, [r6, #0x14] + str r2, [r6, #0x18] + str r2, [r6, #0x1c] + mov r0, r6 + mov r1, r5 + str r2, [r6, #0x20] + bl MOD79_02212CF0 + cmp r0, #0 + moveq r0, #0 + ldrne r0, [r6, #4] + movne r1, #0 + strneb r1, [r0] + movne r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02212CDC: .word 0x022168F0 +_02212CE0: .word 0x0221686C +_02212CE4: .word 0x02216888 +_02212CE8: .word 0x02216914 +_02212CEC: .word 0x02216924 + arm_func_end MOD79_02212BC4 + + arm_func_start MOD79_02212CF0 +MOD79_02212CF0: ; 0x02212CF0 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r5, r0 + mov r4, r1 + bne _02212D18 + ldr r0, _02212D84 ; =0x02216888 + ldr r1, _02212D88 ; =0x0221686C + mov r2, #0 + mov r3, #0x20 + bl __msl_assertion_failed +_02212D18: + cmp r4, #0 + bgt _02212D34 + ldr r0, _02212D8C ; =0x02216924 + ldr r1, _02212D88 ; =0x0221686C + mov r2, #0 + mov r3, #0x21 + bl __msl_assertion_failed +_02212D34: + cmp r5, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + cmp r4, #0 + addle sp, sp, #4 + movle r0, #0 + ldmleia sp!, {r4, r5, pc} + ldr r1, [r5, #8] + ldr r0, [r5, #4] + add r4, r1, r4 + mov r1, r4 + bl MOD04_021DD844 + cmp r0, #0 + moveq r0, #0 + strne r0, [r5, #4] + strne r4, [r5, #8] + movne r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02212D84: .word 0x02216888 +_02212D88: .word 0x0221686C +_02212D8C: .word 0x02216924 + arm_func_end MOD79_02212CF0 + + arm_func_start MOD79_02212D90 +MOD79_02212D90: ; 0x02212D90 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + movs r4, r0 + bne _02212DB4 + ldr r0, _02212DF8 ; =0x02216938 + ldr r1, _02212DFC ; =0x02216944 + mov r2, #0 + mov r3, #0x5e + bl __msl_assertion_failed +_02212DB4: + ldr r0, [r4, #0x150] + cmp r0, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #0x140] + bl MOD04_021EF06C + str r0, [sp] + ldr r0, [r4, #0x44] + str r0, [sp, #4] + ldr r0, [r4, #4] + ldr r1, [r4, #0x148] + ldr r2, [r4, #0x14c] + ldr r3, [r4, #0x144] + ldr ip, [r4, #0x150] + .word 0xE12FFF3C + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_02212DF8: .word 0x02216938 +_02212DFC: .word 0x02216944 + arm_func_end MOD79_02212D90 + + arm_func_start MOD79_02212E00 +MOD79_02212E00: ; 0x02212E00 + stmdb sp!, {r4, r5, r6, lr} + sub sp, sp, #0x10 + movs r6, r0 + mov r5, r1 + mov r4, r2 + bne _02212E2C + ldr r0, _02212E70 ; =0x02216938 + ldr r1, _02212E74 ; =0x02216944 + mov r2, #0 + mov r3, #0x45 + bl __msl_assertion_failed +_02212E2C: + ldr ip, [r6, #0x3c] + cmp ip, #0 + addeq sp, sp, #0x10 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, [r6, #0x100] + mov r2, r5 + str r0, [sp] + ldr r0, [r6, #0x104] + mov r3, r4 + str r0, [sp, #4] + ldr r0, [r6, #0x44] + str r0, [sp, #8] + ldr r0, [r6, #4] + ldr r1, [r6, #0x10] + .word 0xE12FFF3C + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02212E70: .word 0x02216938 +_02212E74: .word 0x02216944 + arm_func_end MOD79_02212E00 + + arm_func_start MOD79_02212E78 +MOD79_02212E78: ; 0x02212E78 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r5, r0 + bne _02212E9C + ldr r0, _02212EFC ; =0x02216938 + ldr r1, _02212F00 ; =0x02216944 + mov r2, #0 + mov r3, #0x1b + bl __msl_assertion_failed +_02212E9C: + ldr ip, [r5, #0x40] + cmp ip, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + ldr r0, [r5, #0xc] + cmp r0, #0 + movne r4, #0 + movne r3, r4 + ldreq r4, [r5, #0xc0] + ldreq r3, [r5, #0x100] + ldr r0, [r5, #0x44] + mov r2, r4 + str r0, [sp] + ldr r0, [r5, #4] + ldr r1, [r5, #0x38] + .word 0xE12FFF3C + cmp r4, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, pc} + cmp r0, #0 + moveq r0, #1 + streq r0, [r5, #0xd8] + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02212EFC: .word 0x02216938 +_02212F00: .word 0x02216944 + arm_func_end MOD79_02212E78 + + arm_func_start MOD79_02212F04 +MOD79_02212F04: ; 0x02212F04 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r3, [r6, #0x5c] + mov r5, r1 + mov r4, r2 + cmp r3, #0 + mov r3, #0 + bne _02212F48 + bl MOD79_02212F68 + mov r3, r0 + mvn r0, #0 + cmp r3, r0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + cmp r3, r4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, pc} +_02212F48: + add r0, r6, #0x50 + add r1, r5, r3 + sub r2, r4, r3 + bl MOD79_02212794 + cmp r0, #0 + moveq r0, #0 + movne r0, #2 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end MOD79_02212F04 + + arm_func_start MOD79_02212F68 +MOD79_02212F68: ; 0x02212F68 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4, #0x48] + mov r3, #0 + bl MOD04_021EFC24 + mvn r1, #0 + cmp r0, r1 + bne _02212FD8 + ldr r0, [r4, #0x48] + bl MOD04_021EFB28 + mvn r1, #5 + cmp r0, r1 + beq _02212FB4 + mvn r1, #0x19 + cmp r0, r1 + beq _02212FB4 + mvn r1, #0x4b + cmp r0, r1 + bne _02212FBC +_02212FB4: + mov r0, #0 + ldmia sp!, {r4, pc} +_02212FBC: + mov r1, #1 + str r1, [r4, #0xfc] + mov r1, #5 + str r1, [r4, #0x38] + str r0, [r4, #0x4c] + mvn r0, #0 + ldmia sp!, {r4, pc} +_02212FD8: + ldr r1, [r4, #0x10] + cmp r1, #4 + ldreq r1, [r4, #0x148] + addeq r1, r1, r0 + streq r1, [r4, #0x148] + ldmia sp!, {r4, pc} + arm_func_end MOD79_02212F68 + + arm_func_start MOD79_02212FF0 +MOD79_02212FF0: ; 0x02212FF0 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + mov r7, r0 + mov r5, r2 + ldr r2, [r5] + ldr r0, [r7, #0x134] + mov r6, r1 + cmp r0, #0 + sub r4, r2, #1 + beq _02213050 + bl MOD04_021F025C + ldr r1, _02213230 ; =0x02216958 + ldr r2, [r7, #0x138] + ldr r1, [r1] + add r1, r2, r1 + cmp r0, r1 + addlo sp, sp, #4 + movlo r0, #1 + ldmloia sp!, {r4, r5, r6, r7, pc} + ldr r1, _02213234 ; =0x0221695C + str r0, [r7, #0x138] + ldr r0, [r1] + cmp r4, r0 + movge r4, r0 +_02213050: + ldr r1, [r7, #0x84] + ldr r0, [r7, #0x80] + cmp r1, r0 + bge _02213098 + mov r1, r6 + mov r2, r5 + add r0, r7, #0x74 + bl MOD79_0221248C + ldr r1, [r7, #0x84] + ldr r0, [r7, #0x80] + add sp, sp, #4 + cmp r1, r0 + ldreq r0, [r7, #0xf8] + streq r0, [r7, #0x80] + ldreq r0, [r7, #0xf8] + streq r0, [r7, #0x84] + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, pc} +_02213098: + ldr r0, [r7, #0x48] + mov r1, r6 + mov r2, r4 + mov r3, #0 + bl MOD04_021EFC78 + mov r2, r0 + mvn r0, #0 + str r2, [sp] + cmp r2, r0 + bne _0221311C + ldr r0, [r7, #0x48] + bl MOD04_021EFB28 + mvn r1, #5 + cmp r0, r1 + beq _022130EC + mvn r1, #0x19 + cmp r0, r1 + beq _022130EC + mvn r1, #0x4b + cmp r0, r1 + bne _022130F8 +_022130EC: + add sp, sp, #4 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, pc} +_022130F8: + mov r2, #1 + str r2, [r7, #0xfc] + mov r1, #5 + str r1, [r7, #0x38] + str r0, [r7, #0x4c] + add sp, sp, #4 + str r2, [r7, #0x130] + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, pc} +_0221311C: + cmp r2, #0 + moveq r0, #1 + streq r0, [r7, #0x130] + addeq sp, sp, #4 + moveq r0, #2 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r7, #0x168] + cmp r0, #0 + beq _0221320C + mov r1, r6 + add r0, r7, #0x98 + bl MOD79_02212794 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #3 + ldmeqia sp!, {r4, r5, r6, r7, pc} + mov r0, r7 + bl MOD79_02213238 + cmp r0, #0 + bne _02213188 + mov r0, #1 + str r0, [r7, #0xfc] + mov r0, #0x11 + str r0, [r7, #0x38] + add sp, sp, #4 + mov r0, #3 + ldmia sp!, {r4, r5, r6, r7, pc} +_02213188: + ldr r1, [r7, #0x80] + ldr r0, [r7, #0x84] + sub r0, r1, r0 + cmp r0, #0 + movle r0, #0 + strleb r0, [r6] + strle r0, [r5] + addle sp, sp, #4 + movle r0, #1 + ldmleia sp!, {r4, r5, r6, r7, pc} + ldr r0, [r5] + add r2, sp, #0 + sub r3, r0, #1 + mov r1, r6 + add r0, r7, #0x74 + str r3, [sp] + bl MOD79_0221248C + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #3 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r1, [r7, #0x84] + ldr r0, [r7, #0x80] + cmp r1, r0 + ldreq r0, [r7, #0xf8] + streq r0, [r7, #0x80] + ldreq r0, [r7, #0xf8] + streq r0, [r7, #0x84] + ldr r2, [sp] + cmp r2, #0 + addle sp, sp, #4 + movle r0, #1 + ldmleia sp!, {r4, r5, r6, r7, pc} +_0221320C: + mov r0, #0 + strb r0, [r6, r2] + ldr r1, [sp] + str r1, [r5] + ldr r1, [sp] + cmp r1, #0 + movle r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02213230: .word 0x02216958 +_02213234: .word 0x0221695C + arm_func_end MOD79_02212FF0 + + arm_func_start MOD79_02213238 +MOD79_02213238: ; 0x02213238 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x14 + mov r1, #0 + mov r4, r0 + str r1, [sp, #8] + str r1, [sp, #0xc] + add r8, sp, #0xc + add r6, sp, #8 + add r5, r4, #0x74 + add r7, r4, #0x164 +_02213260: + ldr ip, [r4, #0xa8] + ldr r0, [r4, #0xa4] + ldr r2, [r4, #0x9c] + sub r0, r0, ip + str r0, [sp, #8] + ldr r3, [r4, #0x80] + ldr r0, [r4, #0x7c] + ldr r1, [r4, #0x78] + sub r0, r0, r3 + str r0, [sp, #0xc] + add r0, r1, r3 + str r0, [sp] + str r8, [sp, #4] + ldr sb, [r4, #0x180] + mov r0, r4 + mov r1, r7 + mov r3, r6 + add r2, r2, ip + .word 0xE12FFF39 + mov sb, r0 + cmp sb, #2 + bne _022132D4 + ldr r1, [r4, #0x88] + mov r0, r5 + bl MOD79_02212CF0 + cmp r0, #0 + addeq sp, sp, #0x14 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +_022132D4: + cmp sb, #2 + bne _022132E8 + ldr r0, [sp, #0xc] + cmp r0, #0 + beq _02213260 +_022132E8: + ldr r1, [r4, #0xa8] + ldr r0, [sp, #8] + add r0, r1, r0 + str r0, [r4, #0xa8] + ldr r1, [r4, #0x80] + ldr r0, [sp, #0xc] + add r0, r1, r0 + str r0, [r4, #0x80] + ldr r1, [r4, #0xa8] + cmp r1, #0xff + ble _02213348 + ldr r0, [r4, #0xa4] + subs r5, r0, r1 + bne _0221332C + add r0, r4, #0x98 + bl MOD79_0221262C + b _02213348 +_0221332C: + ldr r0, [r4, #0x9c] + mov r2, r5 + add r1, r0, r1 + bl memmove + mov r0, #0 + str r0, [r4, #0xa8] + str r5, [r4, #0xa4] +_02213348: + cmp sb, #3 + addne sp, sp, #0x14 + movne r0, #1 + ldmneia sp!, {r4, r5, r6, r7, r8, sb, pc} + mov r0, #1 + str r0, [r4, #0xfc] + mov r0, #0x11 + str r0, [r4, #0x38] + mov r0, #0 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + arm_func_end MOD79_02213238 + + arm_func_start MOD79_02213374 +MOD79_02213374: ; 0x02213374 + bx lr + arm_func_end MOD79_02213374 + + arm_func_start MOD79_02213378 +MOD79_02213378: ; 0x02213378 + bx lr + arm_func_end MOD79_02213378 + + arm_func_start MOD79_0221337C +MOD79_0221337C: ; 0x0221337C + bx lr + arm_func_end MOD79_0221337C + + arm_func_start MOD79_02213380 +MOD79_02213380: ; 0x02213380 + bx lr + arm_func_end MOD79_02213380 + + arm_func_start MOD79_02213384 +MOD79_02213384: ; 0x02213384 + stmdb sp!, {r4, r5, r6, lr} + ldr r0, _02213400 ; =0x02217138 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r0, _02213404 ; =MOD79_02213638 + bl MOD79_02213510 + ldr r5, _02213408 ; =0x0221712C + mov r6, #0 + ldr r0, [r5] + cmp r0, #0 + ble _022133D4 + ldr r4, _02213400 ; =0x02217138 +_022133B8: + ldr r0, [r4] + ldr r0, [r0, r6, lsl #2] + bl MOD04_021DD82C + ldr r0, [r5] + add r6, r6, #1 + cmp r6, r0 + blt _022133B8 +_022133D4: + ldr r0, _02213400 ; =0x02217138 + ldr r0, [r0] + bl MOD04_021DD82C + ldr r2, _02213400 ; =0x02217138 + mov r3, #0 + ldr r1, _02213408 ; =0x0221712C + ldr r0, _0221340C ; =0x02217130 + str r3, [r2] + str r3, [r1] + str r3, [r0] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02213400: .word 0x02217138 +_02213404: .word MOD79_02213638 +_02213408: .word 0x0221712C +_0221340C: .word 0x02217130 + arm_func_end MOD79_02213384 + + arm_func_start MOD79_02213410 +MOD79_02213410: ; 0x02213410 + stmdb sp!, {r4, lr} + movs r4, r0 + bne _02213430 + ldr r0, _022134FC ; =0x02216960 + ldr r1, _02213500 ; =0x0221696C + ldr r3, _02213504 ; =0x00000132 + mov r2, #0 + bl __msl_assertion_failed +_02213430: + ldr r0, [r4, #0x108] + cmp r0, #0 + bne _02213450 + ldr r0, _02213508 ; =0x02216980 + ldr r1, _02213500 ; =0x0221696C + ldr r3, _0221350C ; =0x00000133 + mov r2, #0 + bl __msl_assertion_failed +_02213450: + mov r0, #0 + str r0, [r4, #0x10] + ldr r0, [r4, #0x14] + bl MOD04_021DD82C + ldr r1, [r4, #0x108] + mov r0, #0 + str r1, [r4, #0x14] + str r0, [r4, #0x108] + ldr r0, [r4, #0x18] + bl MOD04_021DD82C + mov r0, #0 + str r0, [r4, #0x18] + str r0, [r4, #0x1c] + strh r0, [r4, #0x20] + ldr r0, [r4, #0x24] + bl MOD04_021DD82C + mov r0, #0 + str r0, [r4, #0x24] + ldr r0, [r4, #0x48] + mov r1, #2 + bl MOD04_021EFD80 + ldr r0, [r4, #0x48] + bl MOD04_021EFD9C + mvn r1, #0 + add r0, r4, #0x50 + str r1, [r4, #0x48] + bl MOD79_0221262C + add r0, r4, #0x74 + bl MOD79_0221262C + add r0, r4, #0x98 + bl MOD79_0221262C + mov r0, #0 + str r0, [r4, #0xe4] + str r0, [r4, #0xe8] + str r0, [r4, #0xec] + str r0, [r4, #0xf0] + str r0, [r4, #0xf4] + str r0, [r4, #0xf8] + str r0, [r4, #0x130] + ldr r0, [r4, #0x10c] + add r0, r0, #1 + str r0, [r4, #0x10c] + ldmia sp!, {r4, pc} + .align 2, 0 +_022134FC: .word 0x02216960 +_02213500: .word 0x0221696C +_02213504: .word 0x00000132 +_02213508: .word 0x02216980 +_0221350C: .word 0x00000133 + arm_func_end MOD79_02213410 + + arm_func_start MOD79_02213510 +MOD79_02213510: ; 0x02213510 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + ldr r1, _02213580 ; =0x02217130 + mov r5, r0 + ldr r0, [r1] + cmp r0, #0 + addle sp, sp, #4 + ldmleia sp!, {r4, r5, r6, r7, pc} + bl MOD79_02213378 + ldr r7, _02213584 ; =0x0221712C + mov r4, #0 + ldr r0, [r7] + cmp r0, #0 + ble _02213574 + ldr r6, _02213588 ; =0x02217138 +_0221354C: + ldr r0, [r6] + ldr r0, [r0, r4, lsl #2] + ldr r1, [r0] + cmp r1, #0 + beq _02213564 + .word 0xE12FFF35 +_02213564: + ldr r0, [r7] + add r4, r4, #1 + cmp r4, r0 + blt _0221354C +_02213574: + bl MOD79_02213374 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_02213580: .word 0x02217130 +_02213584: .word 0x0221712C +_02213588: .word 0x02217138 + arm_func_end MOD79_02213510 + + arm_func_start MOD79_0221358C +MOD79_0221358C: ; 0x0221358C + stmdb sp!, {r4, lr} + movs r4, r0 + bpl _022135AC + ldr r0, _0221361C ; =0x02216998 + ldr r1, _02213620 ; =0x0221696C + ldr r3, _02213624 ; =0x00000101 + mov r2, #0 + bl __msl_assertion_failed +_022135AC: + ldr r0, _02213628 ; =0x0221712C + ldr r0, [r0] + cmp r4, r0 + blt _022135D0 + ldr r0, _0221362C ; =0x022169A8 + ldr r1, _02213620 ; =0x0221696C + ldr r3, _02213630 ; =0x00000102 + mov r2, #0 + bl __msl_assertion_failed +_022135D0: + bl MOD79_02213378 + cmp r4, #0 + blt _022135EC + ldr r0, _02213628 ; =0x0221712C + ldr r0, [r0] + cmp r4, r0 + blt _022135F8 +_022135EC: + bl MOD79_02213374 + mov r0, #0 + ldmia sp!, {r4, pc} +_022135F8: + ldr r0, _02213634 ; =0x02217138 + ldr r0, [r0] + ldr r4, [r0, r4, lsl #2] + ldr r0, [r4] + cmp r0, #0 + moveq r4, #0 + bl MOD79_02213374 + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_0221361C: .word 0x02216998 +_02213620: .word 0x0221696C +_02213624: .word 0x00000101 +_02213628: .word 0x0221712C +_0221362C: .word 0x022169A8 +_02213630: .word 0x00000102 +_02213634: .word 0x02217138 + arm_func_end MOD79_0221358C + + arm_func_start MOD79_02213638 +MOD79_02213638: ; 0x02213638 + stmdb sp!, {r4, lr} + movs r4, r0 + bne _02213658 + ldr r0, _02213800 ; =0x02216960 + ldr r1, _02213804 ; =0x0221696C + mov r2, #0 + mov r3, #0xb3 + bl __msl_assertion_failed +_02213658: + ldr r0, [r4, #4] + cmp r0, #0 + bge _02213678 + ldr r0, _02213808 ; =0x022169C4 + ldr r1, _02213804 ; =0x0221696C + mov r2, #0 + mov r3, #0xb4 + bl __msl_assertion_failed +_02213678: + ldr r0, _0221380C ; =0x0221712C + ldr r1, [r4, #4] + ldr r0, [r0] + cmp r1, r0 + blt _022136A0 + ldr r0, _02213810 ; =0x022169E0 + ldr r1, _02213804 ; =0x0221696C + mov r2, #0 + mov r3, #0xb5 + bl __msl_assertion_failed +_022136A0: + ldr r0, [r4] + cmp r0, #0 + bne _022136C0 + ldr r0, _02213814 ; =0x02216A08 + ldr r1, _02213804 ; =0x0221696C + mov r2, #0 + mov r3, #0xb6 + bl __msl_assertion_failed +_022136C0: + cmp r4, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r4] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r1, [r4, #4] + cmp r1, #0 + movlt r0, #0 + ldmltia sp!, {r4, pc} + ldr r0, _0221380C ; =0x0221712C + ldr r0, [r0] + cmp r1, r0 + movge r0, #0 + ldmgeia sp!, {r4, pc} + bl MOD79_02213378 + ldr r0, [r4, #0x14] + bl MOD04_021DD82C + ldr r0, [r4, #0x18] + bl MOD04_021DD82C + ldr r0, [r4, #0x24] + bl MOD04_021DD82C + ldr r0, [r4, #0x28] + bl MOD04_021DD82C + ldr r0, [r4, #0x108] + bl MOD04_021DD82C + ldr r0, [r4, #0x15c] + bl MOD04_021DD82C + ldr r0, [r4, #0x48] + mvn r1, #0 + cmp r0, r1 + beq _02213754 + mov r1, #2 + bl MOD04_021EFD80 + ldr r0, [r4, #0x48] + bl MOD04_021EFD9C +_02213754: + add r0, r4, #0x50 + bl MOD79_02212A54 + add r0, r4, #0x74 + bl MOD79_02212A54 + add r0, r4, #0x98 + bl MOD79_02212A54 + add r0, r4, #0xbc + bl MOD79_02212A54 + ldr r0, [r4, #0x140] + cmp r0, #0 + beq _02213788 + mov r0, r4 + bl MOD79_022149E4 +_02213788: + ldr r0, [r4, #0x13c] + cmp r0, #0 + beq _022137B0 + bl MOD79_02215074 + cmp r0, #0 + beq _022137B0 + ldr r0, [r4, #0x13c] + bl MOD79_02215058 + mov r0, #0 + str r0, [r4, #0x13c] +_022137B0: + ldr r0, [r4, #0x16c] + cmp r0, #0 + beq _022137DC + ldr r2, [r4, #0x178] + cmp r2, #0 + beq _022137D4 + mov r0, r4 + add r1, r4, #0x164 + .word 0xE12FFF32 +_022137D4: + mov r0, #0 + str r0, [r4, #0x16c] +_022137DC: + mov r1, #0 + ldr r0, _02213818 ; =0x02217130 + str r1, [r4] + ldr r1, [r0] + sub r1, r1, #1 + str r1, [r0] + bl MOD79_02213374 + mov r0, #1 + ldmia sp!, {r4, pc} + .align 2, 0 +_02213800: .word 0x02216960 +_02213804: .word 0x0221696C +_02213808: .word 0x022169C4 +_0221380C: .word 0x0221712C +_02213810: .word 0x022169E0 +_02213814: .word 0x02216A08 +_02213818: .word 0x02217130 + arm_func_end MOD79_02213638 + + arm_func_start MOD79_0221381C +MOD79_0221381C: ; 0x0221381C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + bl MOD79_02213378 + bl MOD79_022139CC + mov r5, r0 + mvn r0, #0 + cmp r5, r0 + bne _0221384C + bl MOD79_02213374 + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_0221384C: + ldr r0, _022139C0 ; =0x02217138 + mov r1, #0 + ldr r0, [r0] + mov r2, #0x184 + ldr r4, [r0, r5, lsl #2] + mov r0, r4 + bl Call_FillMemWithValue + mov r0, #1 + str r0, [r4] + ldr r0, _022139C4 ; =0x02217134 + str r5, [r4, #4] + ldr r2, [r0] + mov ip, #0 + add r1, r2, #1 + str r1, [r0] + str r2, [r4, #8] + str ip, [r4, #0xc] + str ip, [r4, #0x10] + str ip, [r4, #0x14] + str ip, [r4, #0x18] + str ip, [r4, #0x1c] + strh ip, [r4, #0x20] + str ip, [r4, #0x24] + str ip, [r4, #0x28] + str ip, [r4, #0x2c] + str ip, [r4, #0x30] + str ip, [r4, #0x34] + str ip, [r4, #0x38] + str ip, [r4, #0x3c] + str ip, [r4, #0x40] + str ip, [r4, #0x44] + mvn r0, #0 + str r0, [r4, #0x48] + str ip, [r4, #0x4c] + str ip, [r4, #0xe0] + str ip, [r4, #0xe4] + str ip, [r4, #0xe8] + str ip, [r4, #0xec] + str ip, [r4, #0xf0] + str ip, [r4, #0xf4] + str ip, [r4, #0xf8] + str ip, [r4, #0xfc] + str ip, [r4, #0x100] + str r0, [r4, #0x104] + str ip, [r4, #0x108] + str ip, [r4, #0x10c] + str ip, [r4, #0x110] + str ip, [r4, #0x12c] + str ip, [r4, #0x134] + str ip, [r4, #0x138] + str ip, [r4, #0x13c] + mov r0, #0x1f4 + str r0, [r4, #0x158] + add r0, r4, #0x100 + mov r1, #0x50 + strh r1, [r0, #0x60] + str ip, [r4, #0x15c] + mov r0, r4 + add r1, r4, #0x50 + mov r2, #0x800 + mov r3, #0x1000 + str ip, [r4, #0x164] + bl MOD79_02212BC4 + cmp r0, #0 + beq _02213964 + mov r2, #0x800 + mov r0, r4 + mov r3, r2 + add r1, r4, #0x74 + bl MOD79_02212BC4 +_02213964: + cmp r0, #0 + beq _02213980 + mov r0, r4 + add r1, r4, #0x98 + mov r2, #0x800 + mov r3, #0x400 + bl MOD79_02212BC4 +_02213980: + cmp r0, #0 + bne _022139A0 + mov r0, r4 + bl MOD79_02213638 + bl MOD79_02213374 + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_022139A0: + ldr r0, _022139C8 ; =0x02217130 + ldr r1, [r0] + add r1, r1, #1 + str r1, [r0] + bl MOD79_02213374 + mov r0, r4 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_022139C0: .word 0x02217138 +_022139C4: .word 0x02217134 +_022139C8: .word 0x02217130 + arm_func_end MOD79_0221381C + + arm_func_start MOD79_022139CC +MOD79_022139CC: ; 0x022139CC + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + ldr r1, _02213AF4 ; =0x0221712C + mov r0, #0 + ldr r2, [r1] + cmp r2, #0 + ble _02213A10 + ldr r1, _02213AF8 ; =0x02217138 + ldr r3, [r1] +_022139F0: + ldr r1, [r3, r0, lsl #2] + ldr r1, [r1] + cmp r1, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + add r0, r0, #1 + cmp r0, r2 + blt _022139F0 +_02213A10: + ldr r0, _02213AFC ; =0x02217130 + ldr r0, [r0] + cmp r0, r2 + beq _02213A34 + ldr r0, _02213B00 ; =0x02216A1C + ldr r1, _02213B04 ; =0x0221696C + mov r2, #0 + mov r3, #0x33 + bl __msl_assertion_failed +_02213A34: + ldr r1, _02213AF4 ; =0x0221712C + ldr r0, _02213AF8 ; =0x02217138 + ldr r7, [r1] + ldr r0, [r0] + add r6, r7, #4 + mov r1, r6, lsl #2 + bl MOD04_021DD844 + cmp r0, #0 + addeq sp, sp, #4 + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + ldr r8, _02213AF8 ; =0x02217138 + mov r5, r7 + str r0, [r8] + cmp r7, r6 + bge _02213AE0 + mov sb, #0 + mov r4, #0x184 +_02213A7C: + mov r0, r4 + bl MOD04_021DD860 + ldr r1, [r8] + str r0, [r1, r5, lsl #2] + ldr r0, [r8] + ldr r0, [r0, r5, lsl #2] + cmp r0, #0 + bne _02213AD0 + sub r5, r5, #1 + cmp r5, r7 + blt _02213AC4 + ldr r4, _02213AF8 ; =0x02217138 +_02213AAC: + ldr r0, [r4] + ldr r0, [r0, r5, lsl #2] + bl MOD04_021DD82C + sub r5, r5, #1 + cmp r5, r7 + bge _02213AAC +_02213AC4: + add sp, sp, #4 + mvn r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_02213AD0: + add r5, r5, #1 + str sb, [r0] + cmp r5, r6 + blt _02213A7C +_02213AE0: + ldr r1, _02213AF4 ; =0x0221712C + mov r0, r7 + str r6, [r1] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02213AF4: .word 0x0221712C +_02213AF8: .word 0x02217138 +_02213AFC: .word 0x02217130 +_02213B00: .word 0x02216A1C +_02213B04: .word 0x0221696C + arm_func_end MOD79_022139CC + + arm_func_start MOD79_02213B08 +MOD79_02213B08: ; 0x02213B08 + ldr ip, _02213B14 ; =MOD79_02213510 + ldr r0, _02213B18 ; =MOD79_02213E84 + bx ip + .align 2, 0 +_02213B14: .word MOD79_02213510 +_02213B18: .word MOD79_02213E84 + arm_func_end MOD79_02213B08 + + arm_func_start MOD79_02213B1C +MOD79_02213B1C: ; 0x02213B1C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + movs r8, r0 + mov r7, r1 + mov r6, r2 + mov r5, r3 + beq _02213B40 + ldrsb r0, [r8] + cmp r0, #0 + bne _02213B54 +_02213B40: + ldr r0, _02213D64 ; =0x02216A50 + ldr r1, _02213D68 ; =0x02216A44 + mov r2, #0 + mov r3, #0x128 + bl __msl_assertion_failed +_02213B54: + cmp r5, #0 + bge _02213B70 + ldr r0, _02213D6C ; =0x02216A60 + ldr r1, _02213D68 ; =0x02216A44 + ldr r3, _02213D70 ; =0x00000129 + mov r2, #0 + bl __msl_assertion_failed +_02213B70: + cmp r6, #0 + beq _02213B94 + cmp r5, #0 + bne _02213B94 + ldr r0, _02213D74 ; =0x02216A70 + ldr r1, _02213D68 ; =0x02216A44 + ldr r3, _02213D78 ; =0x0000012A + mov r2, #0 + bl __msl_assertion_failed +_02213B94: + cmp r8, #0 + beq _02213BA8 + ldrsb r0, [r8] + cmp r0, #0 + bne _02213BB0 +_02213BA8: + mvn r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02213BB0: + cmp r5, #0 + mvnlt r0, #0 + ldmltia sp!, {r4, r5, r6, r7, r8, pc} + cmp r6, #0 + beq _02213BD0 + cmp r5, #0 + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} +_02213BD0: + ldr r0, _02213D7C ; =0x0221713C + ldr r0, [r0] + cmp r0, #0 + bne _02213BE4 + bl MOD79_02213E24 +_02213BE4: + bl MOD79_0221381C + movs r4, r0 + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r1, #0 + mov r0, r8 + str r1, [r4, #0xc] + bl MOD04_021F0208 + str r0, [r4, #0x14] + ldr r0, [r4, #0x14] + cmp r0, #0 + bne _02213C24 + mov r0, r4 + bl MOD79_02213638 + mvn r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02213C24: + cmp r7, #0 + beq _02213C60 + ldrsb r0, [r7] + cmp r0, #0 + beq _02213C60 + mov r0, r7 + bl MOD04_021F0208 + str r0, [r4, #0x28] + ldr r0, [r4, #0x28] + cmp r0, #0 + bne _02213C60 + mov r0, r4 + bl MOD79_02213638 + mvn r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02213C60: + ldr r1, [sp, #0x18] + ldr r0, [sp, #0x20] + str r1, [r4, #0x13c] + str r0, [r4, #0x30] + ldr r1, [sp, #0x24] + ldr r0, [sp, #0x28] + str r1, [r4, #0x3c] + str r0, [r4, #0x40] + ldr r1, [sp, #0x2c] + ldr r0, [sp, #0x1c] + str r1, [r4, #0x44] + str r0, [r4, #0x134] + cmp r6, #0 + movne r0, #1 + moveq r0, #0 + str r0, [r4, #0xe0] + ldr r0, [r4, #0xe0] + cmp r0, #0 + beq _02213CC4 + mov r0, r4 + mov r2, r6 + mov r3, r5 + add r1, r4, #0xbc + bl MOD79_02212AB4 + b _02213CD8 +_02213CC4: + mov r2, #0x800 + mov r0, r4 + mov r3, r2 + add r1, r4, #0xbc + bl MOD79_02212BC4 +_02213CD8: + cmp r0, #0 + bne _02213CF0 + mov r0, r4 + bl MOD79_02213638 + mvn r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02213CF0: + ldr r0, [sp, #0x18] + cmp r0, #0 + beq _02213D1C + mov r0, r4 + bl MOD79_02214A60 + cmp r0, #0 + bne _02213D1C + mov r0, r4 + bl MOD79_02213638 + mvn r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02213D1C: + ldr r0, [sp, #0x20] + cmp r0, #0 + beq _02213D5C + mov r0, r4 + bl MOD79_02213E84 + cmp r0, #0 + bne _02213D54 + mov r5, #0xa +_02213D3C: + mov r0, r5 + bl MOD04_021F0250 + mov r0, r4 + bl MOD79_02213E84 + cmp r0, #0 + beq _02213D3C +_02213D54: + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02213D5C: + ldr r0, [r4, #4] + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02213D64: .word 0x02216A50 +_02213D68: .word 0x02216A44 +_02213D6C: .word 0x02216A60 +_02213D70: .word 0x00000129 +_02213D74: .word 0x02216A70 +_02213D78: .word 0x0000012A +_02213D7C: .word 0x0221713C + arm_func_end MOD79_02213B1C + + arm_func_start MOD79_02213D80 +MOD79_02213D80: ; 0x02213D80 + stmdb sp!, {lr} + sub sp, sp, #0x1c + mov ip, #0 + str ip, [sp] + str ip, [sp, #4] + str r1, [sp, #8] + str ip, [sp, #0xc] + str r2, [sp, #0x10] + str r3, [sp, #0x14] + mov r1, ip + mov r2, ip + mov r3, ip + bl MOD79_02213B1C + add sp, sp, #0x1c + ldmia sp!, {pc} + arm_func_end MOD79_02213D80 + + arm_func_start MOD79_02213DBC +MOD79_02213DBC: ; 0x02213DBC + stmdb sp!, {lr} + sub sp, sp, #4 + bl MOD79_02213378 + ldr r0, _02213E1C ; =0x0221713C + ldr r1, [r0] + subs r1, r1, #1 + str r1, [r0] + bne _02213E10 + bl MOD79_02213384 + ldr r0, _02213E20 ; =0x02217128 + ldr r0, [r0] + cmp r0, #0 + beq _02213E00 + bl MOD04_021DD82C + ldr r0, _02213E20 ; =0x02217128 + mov r1, #0 + str r1, [r0] +_02213E00: + bl MOD79_02213374 + bl MOD79_0221337C + add sp, sp, #4 + ldmia sp!, {pc} +_02213E10: + bl MOD79_02213374 + add sp, sp, #4 + ldmia sp!, {pc} + .align 2, 0 +_02213E1C: .word 0x0221713C +_02213E20: .word 0x02217128 + arm_func_end MOD79_02213DBC + + arm_func_start MOD79_02213E24 +MOD79_02213E24: ; 0x02213E24 + stmdb sp!, {lr} + sub sp, sp, #4 + bl MOD79_02213378 + ldr r0, _02213E78 ; =0x0221713C + ldr r1, [r0] + add r1, r1, #1 + str r1, [r0] + cmp r1, #1 + bne _02213E6C + bl MOD79_02213380 + ldr r1, _02213E7C ; =0x0221695C + mov r3, #0x7d + ldr r0, _02213E80 ; =0x02216958 + mov r2, #0xfa + str r3, [r1] + str r2, [r0] + add sp, sp, #4 + ldmia sp!, {pc} +_02213E6C: + bl MOD79_02213374 + add sp, sp, #4 + ldmia sp!, {pc} + .align 2, 0 +_02213E78: .word 0x0221713C +_02213E7C: .word 0x0221695C +_02213E80: .word 0x02216958 + arm_func_end MOD79_02213E24 + + arm_func_start MOD79_02213E84 +MOD79_02213E84: ; 0x02213E84 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + movs r4, r0 + bne _02213EA8 + ldr r0, _02213FE8 ; =0x02216A88 + ldr r1, _02213FEC ; =0x02216A44 + mov r2, #0 + mov r3, #0x5b + bl __msl_assertion_failed +_02213EA8: + ldr r0, [r4, #4] + bl MOD79_0221358C + cmp r0, r4 + beq _02213ECC + ldr r0, _02213FF0 ; =0x02216A94 + ldr r1, _02213FEC ; =0x02216A44 + mov r2, #0 + mov r3, #0x5c + bl __msl_assertion_failed +_02213ECC: + ldr r0, [r4, #0x12c] + cmp r0, #0 + addne sp, sp, #4 + movne r0, #0 + ldmneia sp!, {r4, r5, pc} + mov r0, #1 + str r0, [r4, #0x12c] + ldr r0, [r4, #0x10] + cmp r0, #0 + bne _02213EFC + mov r0, r4 + bl MOD79_02216478 +_02213EFC: + ldr r0, [r4, #0x10] + cmp r0, #1 + bne _02213F10 + mov r0, r4 + bl MOD79_0221621C +_02213F10: + ldr r0, [r4, #0x10] + cmp r0, #2 + bne _02213F24 + mov r0, r4 + bl MOD79_022160C0 +_02213F24: + ldr r0, [r4, #0x10] + cmp r0, #3 + bne _02213F38 + mov r0, r4 + bl MOD79_02215E40 +_02213F38: + ldr r0, [r4, #0x10] + cmp r0, #4 + bne _02213F4C + mov r0, r4 + bl MOD79_02215DA8 +_02213F4C: + ldr r0, [r4, #0x10] + cmp r0, #5 + bne _02213F60 + mov r0, r4 + bl MOD79_02215D28 +_02213F60: + ldr r0, [r4, #0x10] + cmp r0, #6 + bne _02213F74 + mov r0, r4 + bl MOD79_02215AA8 +_02213F74: + ldr r0, [r4, #0x10] + cmp r0, #7 + bne _02213F88 + mov r0, r4 + bl MOD79_02215174 +_02213F88: + ldr r0, [r4, #0x10] + cmp r0, #8 + bne _02213F9C + mov r0, r4 + bl MOD79_0221507C +_02213F9C: + ldr r0, [r4, #0x108] + cmp r0, #0 + beq _02213FB0 + mov r0, r4 + bl MOD79_02213410 +_02213FB0: + ldr r5, [r4, #0xfc] + cmp r5, #0 + moveq r0, #0 + streq r0, [r4, #0x12c] + beq _02213FDC + mov r0, r4 + bl MOD79_02213FF4 + mov r0, r4 + bl MOD79_02212E78 + mov r0, r4 + bl MOD79_02213638 +_02213FDC: + mov r0, r5 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02213FE8: .word 0x02216A88 +_02213FEC: .word 0x02216A44 +_02213FF0: .word 0x02216A94 + arm_func_end MOD79_02213E84 + + arm_func_start MOD79_02213FF4 +MOD79_02213FF4: ; 0x02213FF4 + stmdb sp!, {lr} + sub sp, sp, #4 + ldr lr, [r0, #0xec] + ldr r3, _022140CC ; =0x51EB851F + mov r1, lr, lsr #0x1f + smull r2, ip, r3, lr + mov ip, ip, asr #5 + add ip, r1, ip + cmp ip, #5 + addls pc, pc, ip, lsl #2 + b _022140C4 +_02214020: ; jump table + b _022140C4 ; case 0 + b _02214038 ; case 1 + b _02214038 ; case 2 + b _02214038 ; case 3 + b _02214040 ; case 4 + b _022140BC ; case 5 +_02214038: + add sp, sp, #4 + ldmia sp!, {pc} +_02214040: + ldr r1, _022140D0 ; =0x00000191 + sub r1, lr, r1 + cmp r1, #9 + addls pc, pc, r1, lsl #2 + b _022140AC +_02214054: ; jump table + b _0221407C ; case 0 + b _022140AC ; case 1 + b _0221408C ; case 2 + b _0221409C ; case 3 + b _022140AC ; case 4 + b _022140AC ; case 5 + b _022140AC ; case 6 + b _022140AC ; case 7 + b _022140AC ; case 8 + b _0221409C ; case 9 +_0221407C: + mov r1, #9 + str r1, [r0, #0x38] + add sp, sp, #4 + ldmia sp!, {pc} +_0221408C: + mov r1, #0xa + str r1, [r0, #0x38] + add sp, sp, #4 + ldmia sp!, {pc} +_0221409C: + mov r1, #0xb + str r1, [r0, #0x38] + add sp, sp, #4 + ldmia sp!, {pc} +_022140AC: + mov r1, #8 + str r1, [r0, #0x38] + add sp, sp, #4 + ldmia sp!, {pc} +_022140BC: + mov r1, #0xc + str r1, [r0, #0x38] +_022140C4: + add sp, sp, #4 + ldmia sp!, {pc} + .align 2, 0 +_022140CC: .word 0x51EB851F +_022140D0: .word 0x00000191 + arm_func_end MOD79_02213FF4 + + arm_func_start MOD79_022140D4 +MOD79_022140D4: ; 0x022140D4 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + movs sl, r0 + bne _022140F8 + ldr r0, _02214330 ; =0x02216AD0 + ldr r1, _02214334 ; =0x02216ADC + ldr r3, _02214338 ; =0x00000404 + mov r2, #0 + bl __msl_assertion_failed +_022140F8: + ldr r0, [sl, #0x13c] + cmp r0, #0 + bne _02214118 + ldr r0, _0221433C ; =0x02216AE8 + ldr r1, _02214334 ; =0x02216ADC + ldr r3, _02214340 ; =0x00000405 + mov r2, #0 + bl __msl_assertion_failed +_02214118: + ldr r0, [sl, #0x140] + cmp r0, #0 + bne _02214138 + ldr r0, _02214344 ; =0x02216AFC + ldr r1, _02214334 ; =0x02216ADC + ldr r3, _02214348 ; =0x00000406 + mov r2, #0 + bl __msl_assertion_failed +_02214138: + ldr r0, [sl, #0x13c] + ldr r0, [r0] + bl MOD04_021EF06C + mov r4, r0 + ldr r0, [sl, #0x140] + bl MOD04_021EF06C + cmp r4, r0 + beq _0221416C + ldr r0, _0221434C ; =0x02216B1C + ldr r1, _02214334 ; =0x02216ADC + ldr r3, _02214350 ; =0x00000407 + mov r2, #0 + bl __msl_assertion_failed +_0221416C: + ldr r0, [sl, #0x144] + cmp r0, #0 + bge _0221418C + ldr r0, _02214354 ; =0x02216B70 + ldr r1, _02214334 ; =0x02216ADC + ldr r3, _02214358 ; =0x00000408 + mov r2, #0 + bl __msl_assertion_failed +_0221418C: + ldr r0, [sl, #0x140] + bl MOD04_021EF06C + ldr r1, [sl, #0x144] + cmp r1, r0 + ble _022141B4 + ldr r0, _0221435C ; =0x02216B94 + ldr r1, _02214334 ; =0x02216ADC + ldr r3, _02214360 ; =0x00000409 + mov r2, #0 + bl __msl_assertion_failed +_022141B4: + ldr r0, [sl, #0x140] + add sb, sl, #0x140 + bl MOD04_021EF06C + ldr r1, [sl, #0x5c] + mov r7, r0 + cmp r1, #0 + beq _0221421C + mov r0, sl + bl MOD79_02212554 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, [sl, #0x60] + ldr r0, [sl, #0x5c] + cmp r1, r0 + addlt sp, sp, #4 + movlt r0, #2 + ldmltia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + add r0, sl, #0x50 + bl MOD79_0221262C + ldr r0, [sl, #0x144] + cmp r0, r7 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0221421C: + ldr r1, [sb, #4] + cmp r1, r7 + bge _022142E0 + ldr r6, _02214364 ; =0x02216BE4 + ldr fp, _02214334 ; =0x02216ADC + mov r5, #0 + mov r4, #1 +_02214238: + ldr r0, [sb] + bl MOD04_021EEFFC + movs r8, r0 + bne _0221425C + ldr r3, _02214368 ; =0x0000042F + mov r0, r6 + mov r1, fp + mov r2, r5 + bl __msl_assertion_failed +_0221425C: + ldr r0, [sb, #4] + mov r1, sl + cmp r0, #0 + moveq r2, r4 + movne r2, r5 + mov r0, r8 + bl MOD79_02214378 + cmp r0, #0 + bne _022142B8 + ldr r0, [sl, #0xfc] + cmp r0, #0 + beq _02214298 + ldr r0, [sl, #0x38] + cmp r0, #0 + bne _022142AC +_02214298: + ldr r0, _0221436C ; =0x02216BF0 + ldr r1, _02214334 ; =0x02216ADC + ldr r3, _02214370 ; =0x0000043B + mov r2, #0 + bl __msl_assertion_failed +_022142AC: + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_022142B8: + cmp r0, #2 + addeq sp, sp, #4 + moveq r0, #2 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, [sb, #4] + add r0, r0, #1 + str r0, [sb, #4] + ldr r1, [sb, #4] + cmp r1, r7 + blt _02214238 +_022142E0: + ldr r0, [sl, #0x13c] + ldr r0, [r0, #0xc] + cmp r0, #0 + beq _02214318 + ldr r0, _02214374 ; =0x02216C1C + bl strlen + mov r2, r0 + ldr r1, _02214374 ; =0x02216C1C + mov r0, sl + bl MOD79_02212F04 + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02214318: + ldr r0, [sl, #0x5c] + cmp r0, #0 + movne r0, #2 + moveq r0, #1 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02214330: .word 0x02216AD0 +_02214334: .word 0x02216ADC +_02214338: .word 0x00000404 +_0221433C: .word 0x02216AE8 +_02214340: .word 0x00000405 +_02214344: .word 0x02216AFC +_02214348: .word 0x00000406 +_0221434C: .word 0x02216B1C +_02214350: .word 0x00000407 +_02214354: .word 0x02216B70 +_02214358: .word 0x00000408 +_0221435C: .word 0x02216B94 +_02214360: .word 0x00000409 +_02214364: .word 0x02216BE4 +_02214368: .word 0x0000042F +_0221436C: .word 0x02216BF0 +_02214370: .word 0x0000043B +_02214374: .word 0x02216C1C + arm_func_end MOD79_022140D4 + + arm_func_start MOD79_02214378 +MOD79_02214378: ; 0x02214378 + stmdb sp!, {r4, r5, r6, lr} + ldr ip, _02214554 ; =0x00000808 + sub sp, sp, ip + mov r6, r0 + ldr r3, [r6, #4] + mvn r0, #0 + mov r5, r1 + mov r4, r2 + cmp r3, r0 + bne _022144D8 + mov r2, #0 + str r2, [r6, #4] + ldr r0, [r5, #0x13c] + ldr r0, [r0, #0xc] + cmp r0, #0 + bne _02214410 + ldr r0, [r6] + ldr r0, [r0] + cmp r0, #0 + beq _022143D8 + ldr r0, _02214558 ; =0x02216C48 + ldr r1, _0221455C ; =0x02216ADC + ldr r3, _02214560 ; =0x000003A9 + bl __msl_assertion_failed +_022143D8: + cmp r4, #0 + beq _022143F8 + ldr r1, [r6] + add r0, sp, #8 + ldr r2, [r1, #4] + ldr r1, _02214564 ; =0x02216C68 + bl sprintf + b _02214498 +_022143F8: + ldr r1, [r6] + add r0, sp, #8 + ldr r2, [r1, #4] + ldr r1, _02214568 ; =0x02216C6C + bl sprintf + b _02214498 +_02214410: + ldr r3, [r6] + ldr r1, [r3] + cmp r1, #0 + bne _02214440 + cmp r4, #0 + ldrne r2, _0221456C ; =0x02216C74 + ldr r3, [r3, #4] + ldreq r2, _02214570 ; =0x02216C9C + ldr r1, _02214574 ; =0x02216CC8 + add r0, sp, #8 + bl sprintf + b _02214498 +_02214440: + sub r0, r1, #1 + cmp r0, #1 + bhi _02214488 + cmp r1, #1 + ldreq r1, [r3, #0xc] + ldreq r0, [r3, #0x10] + ldrne r1, [r3, #0x10] + ldrne r0, [r3, #0x14] + cmp r4, #0 + str r1, [sp] + str r0, [sp, #4] + ldrne r2, _0221456C ; =0x02216C74 + ldr r3, [r3, #4] + ldreq r2, _02214570 ; =0x02216C9C + ldr r1, _02214578 ; =0x02216CF8 + add r0, sp, #8 + bl sprintf + b _02214498 +_02214488: + ldr r0, _0221457C ; =0x02216D4C + ldr r1, _0221455C ; =0x02216ADC + mov r3, #0x3dc + bl __msl_assertion_failed +_02214498: + add r0, sp, #8 + bl strlen + mov r2, r0 + add r1, sp, #8 + mov r0, r5 + bl MOD79_02212F04 + cmp r0, #0 + ldreq ip, _02214554 ; =0x00000808 + moveq r0, #0 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, r6, pc} + cmp r0, #2 + ldreq ip, _02214554 ; =0x00000808 + moveq r0, #2 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, r6, pc} +_022144D8: + ldr r0, [r6] + ldr r0, [r0] + cmp r0, #0 + bne _02214500 + mov r0, r6 + mov r1, r5 + bl MOD79_022147E8 + ldr ip, _02214554 ; =0x00000808 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, pc} +_02214500: + cmp r0, #1 + bne _02214520 + mov r0, r6 + mov r1, r5 + bl MOD79_0221467C + ldr ip, _02214554 ; =0x00000808 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, pc} +_02214520: + cmp r0, #2 + beq _0221453C + ldr r0, _02214580 ; =0x02216D50 + ldr r1, _0221455C ; =0x02216ADC + ldr r3, _02214584 ; =0x000003F5 + mov r2, #0 + bl __msl_assertion_failed +_0221453C: + mov r0, r6 + mov r1, r5 + bl MOD79_02214588 + ldr ip, _02214554 ; =0x00000808 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02214554: .word 0x00000808 +_02214558: .word 0x02216C48 +_0221455C: .word 0x02216ADC +_02214560: .word 0x000003A9 +_02214564: .word 0x02216C68 +_02214568: .word 0x02216C6C +_0221456C: .word 0x02216C74 +_02214570: .word 0x02216C9C +_02214574: .word 0x02216CC8 +_02214578: .word 0x02216CF8 +_0221457C: .word 0x02216D4C +_02214580: .word 0x02216D50 +_02214584: .word 0x000003F5 + arm_func_end MOD79_02214378 + + arm_func_start MOD79_02214588 +MOD79_02214588: ; 0x02214588 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r0, [r5, #4] + mov r4, r1 + cmp r0, #0 + bge _022145B8 + ldr r0, _02214668 ; =0x02216D74 + ldr r1, _0221466C ; =0x02216ADC + ldr r3, _02214670 ; =0x0000036E + mov r2, #0 + bl __msl_assertion_failed +_022145B8: + ldr r0, [r5] + ldr r1, [r0, #0xc] + cmp r1, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, pc} + ldr r0, [r5, #4] + cmp r0, r1 + blt _022145F0 + ldr r0, _02214674 ; =0x02216D84 + ldr r1, _0221466C ; =0x02216ADC + ldr r3, _02214678 ; =0x00000375 + mov r2, #0 + bl __msl_assertion_failed +_022145F0: + ldr r1, [r5] + ldr r3, [r5, #4] + ldr r0, [r1, #0xc] + ldr r1, [r1, #8] + sub r2, r0, r3 + cmp r2, #0x8000 + movge r2, #0x8000 + mov r0, r4 + add r1, r1, r3 + bl MOD79_02212F68 + mvn r1, #0 + cmp r0, r1 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + ldr r1, [r5, #4] + add r1, r1, r0 + str r1, [r5, #4] + ldr r2, [r5] + ldr r1, [r5, #4] + ldr r2, [r2, #0xc] + cmp r2, r1 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, pc} + cmp r0, #0 + bne _022145F0 + mov r0, #2 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02214668: .word 0x02216D74 +_0221466C: .word 0x02216ADC +_02214670: .word 0x0000036E +_02214674: .word 0x02216D84 +_02214678: .word 0x00000375 + arm_func_end MOD79_02214588 + + arm_func_start MOD79_0221467C +MOD79_0221467C: ; 0x0221467C + stmdb sp!, {r4, r5, lr} + ldr ip, _022147CC ; =0x00001004 + sub sp, sp, ip + mov r5, r0 + ldr r0, [r5, #4] + mov r4, r1 + cmp r0, #0 + bge _022146B0 + ldr r0, _022147D0 ; =0x02216D74 + ldr r1, _022147D4 ; =0x02216ADC + ldr r3, _022147D8 ; =0x00000336 + mov r2, #0 + bl __msl_assertion_failed +_022146B0: + ldr r1, [r5, #4] + ldr r0, [r5, #0xc] + cmp r1, r0 + blt _022146D4 + ldr r0, _022147DC ; =0x02216DB4 + ldr r1, _022147D4 ; =0x02216ADC + ldr r3, _022147E0 ; =0x00000337 + mov r2, #0 + bl __msl_assertion_failed +_022146D4: + ldr r0, [r5, #8] + bl ftell + ldr r1, [r5, #4] + cmp r1, r0 + beq _022146FC + ldr r0, _022147E4 ; =0x02216DDC + ldr r1, _022147D4 ; =0x02216ADC + mov r2, #0 + mov r3, #0x338 + bl __msl_assertion_failed +_022146FC: + ldr r3, [r5, #8] + add r0, sp, #0 + mov r1, #1 + mov r2, #0x1000 + bl fread + mov r2, r0 + cmp r2, #0 + bgt _0221473C + ldr ip, _022147CC ; =0x00001004 + mov r0, #1 + str r0, [r4, #0xfc] + mov r0, #0xe + str r0, [r4, #0x38] + add sp, sp, ip + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_0221473C: + ldr r0, [r5, #4] + add r0, r0, r2 + str r0, [r5, #4] + ldr r1, [r5, #4] + ldr r0, [r5, #0xc] + cmp r1, r0 + ble _02214778 + ldr ip, _022147CC ; =0x00001004 + mov r0, #1 + str r0, [r4, #0xfc] + mov r0, #0xe + str r0, [r4, #0x38] + add sp, sp, ip + mov r0, #0 + ldmia sp!, {r4, r5, pc} +_02214778: + add r1, sp, #0 + mov r0, r4 + bl MOD79_02212F04 + cmp r0, #0 + ldreq ip, _022147CC ; =0x00001004 + moveq r0, #0 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, pc} + ldr r2, [r5, #4] + ldr r1, [r5, #0xc] + cmp r2, r1 + ldreq ip, _022147CC ; =0x00001004 + moveq r0, #1 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, pc} + cmp r0, #1 + beq _022146FC + mov r0, #2 + ldr ip, _022147CC ; =0x00001004 + add sp, sp, ip + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_022147CC: .word 0x00001004 +_022147D0: .word 0x02216D74 +_022147D4: .word 0x02216ADC +_022147D8: .word 0x00000336 +_022147DC: .word 0x02216DB4 +_022147E0: .word 0x00000337 +_022147E4: .word 0x02216DDC + arm_func_end MOD79_0221467C + + arm_func_start MOD79_022147E8 +MOD79_022147E8: ; 0x022147E8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + mov r4, r0 + ldr r0, [r4, #4] + mov sl, r1 + cmp r0, #0 + bge _02214818 + ldr r0, _022149BC ; =0x02216D74 + ldr r1, _022149C0 ; =0x02216ADC + ldr r3, _022149C4 ; =0x000002E7 + mov r2, #0 + bl __msl_assertion_failed +_02214818: + ldr r0, [r4] + ldr r1, [r0, #0xc] + cmp r1, #0 + addeq sp, sp, #4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, [r4, #4] + cmp r0, r1 + blt _02214850 + ldr r0, _022149C8 ; =0x02216E14 + ldr r1, _022149C0 ; =0x02216ADC + ldr r3, _022149CC ; =0x000002EE + mov r2, #0 + bl __msl_assertion_failed +_02214850: + ldr r0, [sl, #0x13c] + ldr r0, [r0, #0xc] + cmp r0, #0 + bne _02214968 + ldr r1, [r4] + ldr r0, [r1, #0x10] + cmp r0, #0 + beq _02214968 + ldr r0, _022149D0 ; =0x02216738 + ldr r7, [r1, #8] + ldrb r3, [r0] + ldrb r2, [r0, #1] + ldrb r1, [r0, #2] + ldrb r0, [r0, #3] + strb r3, [sp] + strb r2, [sp, #1] + strb r1, [sp, #2] + strb r0, [sp, #3] + ldrsb r8, [r7] + mov sb, #0 + cmp r8, #0 + beq _0221495C + mov fp, sb + mov r4, #3 + mov r5, #0x2b +_022148B4: + ldr r0, _022149D4 ; =0x02216E40 + mov r1, r8 + bl strchr + cmp r0, #0 + beq _022148D8 + mov r1, r8 + add r0, sl, #0x50 + bl MOD79_022126A4 + b _0221494C +_022148D8: + cmp r8, #0x20 + bne _022148F0 + mov r1, r5 + add r0, sl, #0x50 + bl MOD79_022126A4 + b _0221494C +_022148F0: + mov r0, r8, asr #3 + add r0, r8, r0, lsr #28 + mov r6, r0, asr #4 + cmp r6, #0x10 + blt _02214918 + ldr r0, _022149D8 ; =0x02216E84 + ldr r1, _022149C0 ; =0x02216ADC + ldr r3, _022149DC ; =0x0000030D + mov r2, fp + bl __msl_assertion_failed +_02214918: + ldr r0, _022149E0 ; =0x02216E94 + mov r1, r8, lsr #0x1f + ldrsb r2, [r0, r6] + rsb r0, r1, r8, lsl #28 + add r1, r1, r0, ror #28 + ldr r0, _022149E0 ; =0x02216E94 + strb r2, [sp, #1] + ldrsb r2, [r0, r1] + add r1, sp, #0 + add r0, sl, #0x50 + strb r2, [sp, #2] + mov r2, r4 + bl MOD79_02212794 +_0221494C: + add sb, sb, #1 + ldrsb r8, [r7, sb] + cmp r8, #0 + bne _022148B4 +_0221495C: + add sp, sp, #4 + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02214968: + ldr r1, [r4] + ldr r0, [r4, #4] + ldr r2, [r1, #0xc] + ldr r1, [r1, #8] + sub r5, r2, r0 + mov r0, sl + mov r2, r5 + bl MOD79_02212F68 + mvn r1, #0 + cmp r0, r1 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r1, [r4, #4] + cmp r0, r5 + add r0, r1, r0 + str r0, [r4, #4] + moveq r0, #1 + movne r0, #2 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_022149BC: .word 0x02216D74 +_022149C0: .word 0x02216ADC +_022149C4: .word 0x000002E7 +_022149C8: .word 0x02216E14 +_022149CC: .word 0x000002EE +_022149D0: .word 0x02216738 +_022149D4: .word 0x02216E40 +_022149D8: .word 0x02216E84 +_022149DC: .word 0x0000030D +_022149E0: .word 0x02216E94 + arm_func_end MOD79_022147E8 + + arm_func_start MOD79_022149E4 +MOD79_022149E4: ; 0x022149E4 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r0, [r6, #0x140] + cmp r0, #0 + beq _02214A38 + bl MOD04_021EF06C + mov r4, r0 + cmp r4, #0 + mov r5, #0 + ble _02214A28 +_02214A0C: + ldr r0, [r6, #0x140] + mov r1, r5 + bl MOD04_021EEFFC + bl MOD79_02214BF4 + add r5, r5, #1 + cmp r5, r4 + blt _02214A0C +_02214A28: + ldr r0, [r6, #0x140] + bl MOD04_021EF074 + mov r0, #0 + str r0, [r6, #0x140] +_02214A38: + ldr r0, [r6, #0x13c] + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldr r1, [r0, #0x10] + cmp r1, #0 + ldmeqia sp!, {r4, r5, r6, pc} + bl MOD79_02215058 + mov r0, #0 + str r0, [r6, #0x13c] + ldmia sp!, {r4, r5, r6, pc} + arm_func_end MOD79_022149E4 + + arm_func_start MOD79_02214A60 +MOD79_02214A60: ; 0x02214A60 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r0, [r4, #0x13c] + cmp r0, #0 + bne _02214A8C + ldr r0, _02214BE4 ; =0x02216AE8 + ldr r1, _02214BE8 ; =0x02216ADC + mov r2, #0 + mov r3, #0x278 + bl __msl_assertion_failed +_02214A8C: + ldr r0, [r4, #0x13c] + cmp r0, #0 + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, #0 + str r0, [r4, #0x144] + str r0, [r4, #0x148] + str r0, [r4, #0x14c] + ldr r0, [r4, #0x13c] + ldr r0, [r0, #4] + str r0, [r4, #0x150] + ldr r0, [r4, #0x13c] + ldr r0, [r0, #8] + str r0, [r4, #0x154] + ldr r0, [r4, #0x13c] + ldr r0, [r0] + bl MOD04_021EF06C + mov r7, r0 + mov r1, r7 + mov r0, #0x10 + mov r2, #0 + bl MOD04_021EF0E4 + str r0, [r4, #0x140] + ldr r0, [r4, #0x140] + cmp r0, #0 + addeq sp, sp, #0x10 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + cmp r7, #0 + mov r8, #0 + ble _02214B98 + add r6, sp, #0 + mov r5, r8 +_02214B14: + ldr r0, [r4, #0x13c] + mov r1, r8 + ldr r0, [r0] + bl MOD04_021EEFFC + str r5, [r6] + str r5, [r6, #4] + str r5, [r6, #8] + str r5, [r6, #0xc] + str r0, [sp] + mov r0, r6 + bl MOD79_02214C5C + cmp r0, #0 + bne _02214B80 + subs r8, r8, #1 + bmi _02214B68 +_02214B50: + ldr r0, [r4, #0x140] + mov r1, r8 + bl MOD04_021EEFFC + bl MOD79_02214BF4 + subs r8, r8, #1 + bpl _02214B50 +_02214B68: + ldr r0, [r4, #0x140] + bl MOD04_021EF074 + mov r0, #0 + add sp, sp, #0x10 + str r0, [r4, #0x140] + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02214B80: + ldr r0, [r4, #0x140] + mov r1, r6 + bl MOD04_021EEFA8 + add r8, r8, #1 + cmp r8, r7 + blt _02214B14 +_02214B98: + ldr r0, [r4, #0x13c] + ldr r0, [r0] + bl MOD04_021EF06C + mov r5, r0 + ldr r0, [r4, #0x140] + bl MOD04_021EF06C + cmp r5, r0 + beq _02214BCC + ldr r0, _02214BEC ; =0x02216B1C + ldr r1, _02214BE8 ; =0x02216ADC + ldr r3, _02214BF0 ; =0x000002B1 + mov r2, #0 + bl __msl_assertion_failed +_02214BCC: + mov r0, r4 + bl MOD79_02214D0C + str r0, [r4, #0x14c] + mov r0, #1 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02214BE4: .word 0x02216AE8 +_02214BE8: .word 0x02216ADC +_02214BEC: .word 0x02216B1C +_02214BF0: .word 0x000002B1 + arm_func_end MOD79_02214A60 + + arm_func_start MOD79_02214BF4 +MOD79_02214BF4: ; 0x02214BF4 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4] + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + cmp r0, #1 + bne _02214C30 + ldr r0, [r4, #8] + cmp r0, #0 + beq _02214C24 + bl fclose +_02214C24: + mov r0, #0 + str r0, [r4, #8] + ldmia sp!, {r4, pc} +_02214C30: + cmp r0, #2 + ldmeqia sp!, {r4, pc} + ldr r0, _02214C50 ; =0x02216D4C + ldr r1, _02214C54 ; =0x02216ADC + ldr r3, _02214C58 ; =0x00000269 + mov r2, #0 + bl __msl_assertion_failed + ldmia sp!, {r4, pc} + .align 2, 0 +_02214C50: .word 0x02216D4C +_02214C54: .word 0x02216ADC +_02214C58: .word 0x00000269 + arm_func_end MOD79_02214BF4 + + arm_func_start MOD79_02214C5C +MOD79_02214C5C: ; 0x02214C5C + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r1, [r4] + mvn r0, #0 + ldr r1, [r1] + str r0, [r4, #4] + cmp r1, #0 + beq _02214CFC + cmp r1, #1 + bne _02214CD8 + ldr r0, [r4, #8] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + mov r1, #0 + mov r2, #2 + bl fseek + cmp r0, #0 + movne r0, #0 + ldmneia sp!, {r4, pc} + ldr r0, [r4, #8] + bl ftell + str r0, [r4, #0xc] + ldr r1, [r4, #0xc] + mvn r0, #0 + cmp r1, r0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #8] + bl rewind + b _02214CFC +_02214CD8: + cmp r1, #2 + beq _02214CFC + ldr r0, _02214D04 ; =0x02216D4C + ldr r1, _02214D08 ; =0x02216ADC + mov r2, #0 + mov r3, #0x244 + bl __msl_assertion_failed + mov r0, #0 + ldmia sp!, {r4, pc} +_02214CFC: + mov r0, #1 + ldmia sp!, {r4, pc} + .align 2, 0 +_02214D04: .word 0x02216D4C +_02214D08: .word 0x02216ADC + arm_func_end MOD79_02214C5C + + arm_func_start MOD79_02214D0C +MOD79_02214D0C: ; 0x02214D0C + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r5, r0 + ldr r4, [r5, #0x13c] + cmp r4, #0 + bne _02214D38 + ldr r0, _02214D74 ; =0x02216EA8 + ldr r1, _02214D78 ; =0x02216ADC + mov r2, #0 + mov r3, #0x20c + bl __msl_assertion_failed +_02214D38: + cmp r4, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, pc} + ldr r0, [r4, #0xc] + cmp r0, #0 + beq _02214D64 + mov r0, r5 + bl MOD79_02214D7C + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} +_02214D64: + mov r0, r5 + bl MOD79_02214F48 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02214D74: .word 0x02216EA8 +_02214D78: .word 0x02216ADC + arm_func_end MOD79_02214D0C + + arm_func_start MOD79_02214D7C +MOD79_02214D7C: ; 0x02214D7C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + ldr r1, _02214F24 ; =0x0221714C + mov r8, r0 + ldr r0, [r1] + ldr r7, [r8, #0x13c] + cmp r0, #0 + mov r4, #0 + bne _02214DD4 + ldr r0, _02214F28 ; =0x02216EB0 + bl strlen + ldr r5, _02214F24 ; =0x0221714C + ldr r3, _02214F2C ; =0x02217148 + add sl, r0, #0x2f + ldr r2, _02214F30 ; =0x02217144 + add sb, r0, #0x4c + ldr r1, _02214F34 ; =0x02217140 + add r6, r0, #4 + str r0, [r5] + str sl, [r3] + str sb, [r2] + str r6, [r1] +_02214DD4: + ldr r0, [r7] + bl MOD04_021EF06C + mov r5, r0 + cmp r5, #0 + mov r6, #0 + ble _02214F10 + mov fp, r6 + mov sb, #0x1ec +_02214DF4: + ldr r0, [r7] + mov r1, r6 + bl MOD04_021EEFFC + mov sl, r0 + ldr r0, [sl] + cmp r0, #0 + bne _02214E34 + ldr r0, _02214F2C ; =0x02217148 + ldr r1, [r0] + ldr r0, [sl, #4] + add r4, r4, r1 + bl strlen + add r1, r4, r0 + ldr r0, [sl, #0xc] + add r4, r1, r0 + b _02214F04 +_02214E34: + cmp r0, #1 + bne _02214EA0 + ldr r0, _02214F30 ; =0x02217144 + ldr r1, [r0] + ldr r0, [sl, #4] + add r4, r4, r1 + bl strlen + add r4, r4, r0 + ldr r0, [sl, #0xc] + bl strlen + add r4, r4, r0 + ldr r0, [sl, #0x10] + bl strlen + add r4, r4, r0 + ldr r0, [r8, #0x140] + mov r1, r6 + bl MOD04_021EEFFC + movs sl, r0 + bne _02214E94 + ldr r0, _02214F38 ; =0x02216ED8 + ldr r1, _02214F3C ; =0x02216ADC + mov r2, fp + mov r3, sb + bl __msl_assertion_failed +_02214E94: + ldr r0, [sl, #0xc] + add r4, r4, r0 + b _02214F04 +_02214EA0: + cmp r0, #2 + bne _02214EE4 + ldr r0, _02214F30 ; =0x02217144 + ldr r1, [r0] + ldr r0, [sl, #4] + add r4, r4, r1 + bl strlen + add r4, r4, r0 + ldr r0, [sl, #0x10] + bl strlen + add r4, r4, r0 + ldr r0, [sl, #0x14] + bl strlen + add r1, r4, r0 + ldr r0, [sl, #0xc] + add r4, r1, r0 + b _02214F04 +_02214EE4: + ldr r0, _02214F40 ; =0x02216D4C + ldr r1, _02214F3C ; =0x02216ADC + ldr r3, _02214F44 ; =0x000001F9 + mov r2, #0 + bl __msl_assertion_failed + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02214F04: + add r6, r6, #1 + cmp r6, r5 + blt _02214DF4 +_02214F10: + ldr r0, _02214F34 ; =0x02217140 + ldr r0, [r0] + add r0, r4, r0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02214F24: .word 0x0221714C +_02214F28: .word 0x02216EB0 +_02214F2C: .word 0x02217148 +_02214F30: .word 0x02217144 +_02214F34: .word 0x02217140 +_02214F38: .word 0x02216ED8 +_02214F3C: .word 0x02216ADC +_02214F40: .word 0x02216D4C +_02214F44: .word 0x000001F9 + arm_func_end MOD79_02214D7C + + arm_func_start MOD79_02214F48 +MOD79_02214F48: ; 0x02214F48 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #4 + ldr sl, [r0, #0x13c] + mov r6, #0 + ldr r0, [sl] + bl MOD04_021EF06C + movs r7, r0 + addeq sp, sp, #4 + moveq r0, r6 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + cmp r7, #0 + mov r8, r6 + ble _02214FE4 + ldr fp, _02214FF4 ; =0x02216EE0 + mov r5, r8 + mov r4, #0x1b0 +_02214F88: + ldr r0, [sl] + mov r1, r8 + bl MOD04_021EEFFC + mov sb, r0 + ldr r0, [sb] + cmp r0, #0 + beq _02214FB8 + ldr r1, _02214FF8 ; =0x02216ADC + mov r0, fp + mov r2, r5 + mov r3, r4 + bl __msl_assertion_failed +_02214FB8: + ldr r0, [sb, #4] + bl strlen + add r8, r8, #1 + ldr r1, [sb, #0xc] + add r2, r6, r0 + ldr r0, [sb, #0x14] + add r1, r2, r1 + add r0, r1, r0, lsl #1 + cmp r8, r7 + add r6, r0, #1 + blt _02214F88 +_02214FE4: + sub r0, r7, #1 + add r0, r6, r0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02214FF4: .word 0x02216EE0 +_02214FF8: .word 0x02216ADC + arm_func_end MOD79_02214F48 + + arm_func_start MOD79_02214FFC +MOD79_02214FFC: ; 0x02214FFC + stmdb sp!, {r4, lr} + ldr r4, [r0, #0x13c] + cmp r4, #0 + bne _02215020 + ldr r0, _02215040 ; =0x02216EA8 + ldr r1, _02215044 ; =0x02216ADC + ldr r3, _02215048 ; =0x00000192 + mov r2, #0 + bl __msl_assertion_failed +_02215020: + cmp r4, #0 + ldreq r0, _0221504C ; =0x02216EF8 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #0xc] + cmp r0, #0 + ldrne r0, _02215050 ; =0x02216EFC + ldreq r0, _02215054 ; =0x02216F40 + ldmia sp!, {r4, pc} + .align 2, 0 +_02215040: .word 0x02216EA8 +_02215044: .word 0x02216ADC +_02215048: .word 0x00000192 +_0221504C: .word 0x02216EF8 +_02215050: .word 0x02216EFC +_02215054: .word 0x02216F40 + arm_func_end MOD79_02214FFC + + arm_func_start MOD79_02215058 +MOD79_02215058: ; 0x02215058 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4] + bl MOD04_021EF074 + mov r0, r4 + bl MOD04_021DD82C + ldmia sp!, {r4, pc} + arm_func_end MOD79_02215058 + + arm_func_start MOD79_02215074 +MOD79_02215074: ; 0x02215074 + ldr r0, [r0, #0x10] + bx lr + arm_func_end MOD79_02215074 + + arm_func_start MOD79_0221507C +MOD79_0221507C: ; 0x0221507C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr ip, _02215170 ; =0x00002008 + sub sp, sp, ip + mov r5, r0 + bl MOD04_021F025C + mov r4, r0 + mov r1, #0 + mov r8, #0x2000 + add r7, sp, #4 + add r6, sp, #0 + b _02215144 +_022150A8: + mov r0, r5 + mov r1, r7 + mov r2, r6 + str r8, [sp] + bl MOD79_02212FF0 + cmp r0, #3 + ldreq ip, _02215170 ; =0x00002008 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + cmp r0, #1 + ldreq ip, _02215170 ; =0x00002008 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + cmp r0, #2 + bne _0221511C + mov r0, #1 + str r0, [r5, #0xfc] + ldr r1, [r5, #0x104] + cmp r1, #0 + ldrle ip, _02215170 ; =0x00002008 + addle sp, sp, ip + ldmleia sp!, {r4, r5, r6, r7, r8, pc} + ldr r0, [r5, #0x100] + ldr ip, _02215170 ; =0x00002008 + cmp r0, r1 + movlt r0, #0xf + add sp, sp, ip + strlt r0, [r5, #0x38] + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_0221511C: + ldr r2, [sp] + mov r0, r5 + mov r1, r7 + bl MOD79_02215640 + cmp r0, #0 + ldreq ip, _02215170 ; =0x00002008 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + bl MOD04_021F025C + sub r1, r0, r4 +_02215144: + ldr r0, [r5, #0xfc] + cmp r0, #0 + ldrne ip, _02215170 ; =0x00002008 + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, pc} + ldr r0, [r5, #0x158] + cmp r1, r0 + blo _022150A8 + ldr ip, _02215170 ; =0x00002008 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02215170: .word 0x00002008 + arm_func_end MOD79_0221507C + + arm_func_start MOD79_02215174 +MOD79_02215174: ; 0x02215174 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr ip, _02215618 ; =0x00001018 + sub sp, sp, ip + mov r3, #0x1000 + add r1, sp, #0x13 + add r2, sp, #4 + mov r6, r0 + str r3, [sp, #4] + bl MOD79_02212FF0 + mov r4, r0 + cmp r4, #3 + ldreq ip, _02215618 ; =0x00001018 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + cmp r4, #1 + bne _022151CC + ldr r1, [r6, #0x84] + ldr r0, [r6, #0x80] + cmp r1, r0 + ldreq ip, _02215618 ; =0x00001018 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_022151CC: + cmp r4, #0 + bne _022151F4 + ldr r2, [sp, #4] + add r1, sp, #0x13 + add r0, r6, #0x74 + bl MOD79_02212794 + cmp r0, #0 + ldreq ip, _02215618 ; =0x00001018 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_022151F4: + ldr r2, [r6, #0x84] + ldr r0, [r6, #0x78] + ldr r1, _0221561C ; =0x02216F64 + add r5, r0, r2 + mov r0, r5 + str r2, [r6, #0xf4] + bl strstr + cmp r0, #0 + bne _02215224 + ldr r1, _02215620 ; =0x02216F6C + mov r0, r5 + bl strstr +_02215224: + cmp r0, #0 + beq _022155E0 + mov r1, #0 + strb r1, [r0, #2] + ldr r7, [r6, #0x78] + add r3, r0, #2 + ldr r1, [r6, #0x80] + sub r2, r3, r7 + str r2, [r6, #0x80] + ldr r2, [r6, #0x78] + add r4, r0, #4 + sub r0, r3, r2 + str r0, [r6, #0xf8] + ldr r0, [r6, #0xf8] + sub r8, r4, r7 + str r0, [r6, #0x84] + ldr r2, [r6, #0xec] + ldr r3, _02215624 ; =0x51EB851F + mov r0, r2, lsr #0x1f + smull r2, r7, r3, r2 + mov r7, r7, asr #5 + add r7, r0, r7 + cmp r7, #1 + sub sl, r1, r8 + bne _022152DC + cmp sl, #0 + beq _022152B0 + ldr r0, [r6, #0x78] + mov r1, r4 + add r2, sl, #1 + bl memmove + str sl, [r6, #0x80] + mov r0, #0 + str r0, [r6, #0x84] + b _022152B8 +_022152B0: + add r0, r6, #0x74 + bl MOD79_0221262C +_022152B8: + mov r1, #0 + mov r3, #6 + mov r0, r6 + mov r2, r1 + str r3, [r6, #0x10] + bl MOD79_02212E00 + ldr ip, _02215618 ; =0x00001018 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_022152DC: + cmp r7, #3 + bne _02215448 + ldr r0, [r6, #0x10c] + cmp r0, #0xa + ldrgt ip, _02215618 ; =0x00001018 + movgt r0, #1 + strgt r0, [r6, #0xfc] + movgt r0, #0xb + addgt sp, sp, ip + strgt r0, [r6, #0x38] + ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + ldr r1, _02215628 ; =0x02216F70 + mov r0, r5 + bl strstr + cmp r0, #0 + beq _02215448 + add r4, r0, #9 + ldr r1, _0221562C ; =0x0210430C + mov r2, #0 + b _02215330 +_0221532C: + add r4, r4, #1 +_02215330: + ldrsb r0, [r4] + cmp r0, #0 + blt _02215344 + cmp r0, #0x80 + blt _0221534C +_02215344: + mov r0, r2 + b _02215358 +_0221534C: + mov r0, r0, lsl #1 + ldrh r0, [r1, r0] + and r0, r0, #0x100 +_02215358: + cmp r0, #0 + bne _0221532C + mov r3, r4 + ldr r1, _0221562C ; =0x0210430C + mov r2, #0 + b _02215374 +_02215370: + add r3, r3, #1 +_02215374: + ldrsb r0, [r3] + cmp r0, #0 + beq _022153AC + cmp r0, #0 + blt _02215390 + cmp r0, #0x80 + blt _02215398 +_02215390: + mov r0, r2 + b _022153A4 +_02215398: + mov r0, r0, lsl #1 + ldrh r0, [r1, r0] + and r0, r0, #0x100 +_022153A4: + cmp r0, #0 + beq _02215370 +_022153AC: + mov r0, #0 + strb r0, [r3] + ldrsb r0, [r4] + cmp r0, #0x2f + bne _0221541C + ldr r0, [r6, #0x18] + bl strlen + mov r5, r0 + mov r0, r4 + bl strlen + add r1, r5, #0xe + add r0, r1, r0 + bl MOD04_021DD860 + str r0, [r6, #0x108] + ldr r0, [r6, #0x108] + ldr r1, _02215630 ; =0x02216F7C + cmp r0, #0 + moveq r0, #1 + streq r0, [r6, #0xfc] + streq r0, [r6, #0x38] + str r4, [sp] + ldrh r3, [r6, #0x20] + ldr r0, [r6, #0x108] + ldr r2, [r6, #0x18] + bl sprintf + ldr ip, _02215618 ; =0x00001018 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_0221541C: + mov r0, r4 + bl MOD04_021F0208 + str r0, [r6, #0x108] + ldr r0, [r6, #0x108] + ldr ip, _02215618 ; =0x00001018 + cmp r0, #0 + moveq r0, #1 + streq r0, [r6, #0xfc] + add sp, sp, ip + streq r0, [r6, #0x38] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_02215448: + ldr r1, _02215634 ; =0x02216F8C + mov r0, r5 + bl strstr + movs sb, r0 + beq _02215530 + ldr r7, _02215638 ; =0x0221673C + add r3, sp, #8 + mov r2, #5 +_02215468: + ldrb r1, [r7], #1 + ldrb r0, [r7], #1 + subs r2, r2, #1 + strb r1, [r3], #1 + strb r0, [r3], #1 + bne _02215468 + ldrb r1, [r7] + add r8, sb, #0x10 + add r0, sp, #8 + mov r7, r8 + strb r1, [r3] + bl strlen + b _022154A0 +_0221549C: + add r7, r7, #1 +_022154A0: + cmp r7, #0 + beq _022154CC + ldrsb r1, [r7] + cmp r1, #0 + beq _022154CC + cmp r1, #0xa + beq _022154CC + cmp r1, #0xd + beq _022154CC + cmp r1, #0x20 + bne _0221549C +_022154CC: + sub r2, r7, r8 + cmp r2, r0 + ldrgt ip, _02215618 ; =0x00001018 + movgt r0, #1 + strgt r0, [r6, #0xfc] + movgt r0, #0x10 + addgt sp, sp, ip + strgt r0, [r6, #0x38] + ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + cmp r0, r2 + bne _02215524 + add r1, sp, #8 + mov r0, r8 + bl strncmp + cmp r0, #0 + ldrge ip, _02215618 ; =0x00001018 + movge r0, #1 + strge r0, [r6, #0xfc] + movge r0, #0x10 + addge sp, sp, ip + strge r0, [r6, #0x38] + ldmgeia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_02215524: + mov r0, r8 + bl atol + str r0, [r6, #0x104] +_02215530: + ldr r1, _0221563C ; =0x02216F9C + mov r0, r5 + bl strstr + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + str r0, [r6, #0x110] + ldr r0, [r6, #0x110] + cmp r0, #0 + movne r0, #0 + strneb r0, [r6, #0x114] + strne r0, [r6, #0x120] + strne r0, [r6, #0x124] + strne r0, [r6, #0x128] + ldr r0, [r6, #0xc] + sub r0, r0, #3 + cmp r0, #1 + ldrls ip, _02215618 ; =0x00001018 + movls r0, #1 + addls sp, sp, ip + strls r0, [r6, #0xfc] + ldmlsia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, #8 + str r0, [r6, #0x10] + cmp sb, #0 + beq _022155B4 + ldr r0, [r6, #0x104] + cmp r0, #0 + ldreq ip, _02215618 ; =0x00001018 + moveq r0, #1 + addeq sp, sp, ip + streq r0, [r6, #0xfc] + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_022155B4: + cmp sl, #0 + ldrle ip, _02215618 ; =0x00001018 + addle sp, sp, ip + ldmleia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, r6 + mov r1, r4 + mov r2, sl + bl MOD79_02215640 + ldr ip, _02215618 ; =0x00001018 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} +_022155E0: + cmp r4, #2 + ldrne ip, _02215618 ; =0x00001018 + addne sp, sp, ip + ldmneia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + mov r0, #1 + str r0, [r6, #0xfc] + mov r0, #7 + str r0, [r6, #0x38] + ldr r0, [r6, #0x48] + bl MOD04_021EFB28 + str r0, [r6, #0x4c] + ldr ip, _02215618 ; =0x00001018 + add sp, sp, ip + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_02215618: .word 0x00001018 +_0221561C: .word 0x02216F64 +_02215620: .word 0x02216F6C +_02215624: .word 0x51EB851F +_02215628: .word 0x02216F70 +_0221562C: .word 0x0210430C +_02215630: .word 0x02216F7C +_02215634: .word 0x02216F8C +_02215638: .word 0x0221673C +_0221563C: .word 0x02216F9C + arm_func_end MOD79_02215174 + + arm_func_start MOD79_02215640 +MOD79_02215640: ; 0x02215640 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0xc + movs r6, r0 + mov r5, r1 + mov r4, r2 + bne _0221566C + ldr r0, _02215884 ; =0x02216FB8 + ldr r1, _02215888 ; =0x02216FC4 + ldr r3, _0221588C ; =0x0000035D + mov r2, #0 + bl __msl_assertion_failed +_0221566C: + cmp r5, #0 + bne _02215688 + ldr r0, _02215890 ; =0x02216FD4 + ldr r1, _02215888 ; =0x02216FC4 + ldr r3, _02215894 ; =0x0000035E + mov r2, #0 + bl __msl_assertion_failed +_02215688: + cmp r4, #0 + bgt _022156A4 + ldr r0, _02215898 ; =0x02216FDC + ldr r1, _02215888 ; =0x02216FC4 + ldr r3, _0221589C ; =0x0000035F + mov r2, #0 + bl __msl_assertion_failed +_022156A4: + ldr r0, [r6, #0x110] + cmp r0, #0 + beq _0221586C + cmp r4, #0 + ble _02215860 + mov r0, #2 + str r0, [sp, #4] + mov r0, #1 + add r8, r6, #0x124 + mov sl, #0xa + mov r7, #0 + str r0, [sp] + mov fp, #3 +_022156D8: + ldr r0, [r6, #0x128] + cmp r0, #0 + bne _02215780 + mov r0, r5 + mov r1, sl + bl strchr + movs sb, r0 + beq _02215764 + mov r0, r6 + mov r1, r5 + sub r2, sb, r5 + bl MOD79_022158A8 + add r1, sb, #1 + sub r2, r1, r5 + mov r0, r6 + mov r5, r1 + sub r4, r4, r2 + bl MOD79_02215984 + str r0, [r6, #0x124] + ldr r1, [r6, #0x124] + mvn r0, #0 + cmp r1, r0 + bne _02215750 + mov r0, #1 + str r0, [r6, #0xfc] + mov r0, #7 + str r0, [r6, #0x38] + add sp, sp, #0xc + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02215750: + cmp r1, #0 + ldrne r0, [sp] + streq fp, [r6, #0x128] + strne r0, [r6, #0x128] + b _02215858 +_02215764: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl MOD79_022158A8 + add sp, sp, #0xc + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02215780: + cmp r0, #1 + bne _022157DC + ldr sb, [r6, #0x124] + mov r0, r6 + cmp sb, r4 + movge sb, r4 + mov r1, r5 + mov r2, sb + bl MOD79_022159E4 + cmp r0, #0 + addeq sp, sp, #0xc + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, [r8] + add r5, r5, sb + sub r0, r0, sb + str r0, [r8] + ldr r0, [r6, #0x124] + sub r4, r4, sb + cmp r0, #0 + ldreq r0, [sp, #4] + streq r0, [r6, #0x128] + b _02215858 +_022157DC: + cmp r0, #2 + bne _02215824 + mov r0, r5 + mov r1, sl + bl strchr + cmp r0, #0 + addeq sp, sp, #0xc + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + strb r7, [r6, #0x114] + str r7, [r6, #0x120] + add r0, r0, #1 + sub r1, r0, r5 + str r7, [r6, #0x124] + mov r5, r0 + str r7, [r6, #0x128] + sub r4, r4, r1 + b _02215858 +_02215824: + cmp r0, #3 + moveq r0, #1 + addeq sp, sp, #0xc + streq r0, [r6, #0xfc] + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + ldr r0, _022158A0 ; =0x02216FE4 + ldr r1, _02215888 ; =0x02216FC4 + ldr r3, _022158A4 ; =0x000003E3 + mov r2, #0 + bl __msl_assertion_failed + add sp, sp, #0xc + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_02215858: + cmp r4, #0 + bgt _022156D8 +_02215860: + add sp, sp, #0xc + mov r0, #1 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} +_0221586C: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl MOD79_022159E4 + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_02215884: .word 0x02216FB8 +_02215888: .word 0x02216FC4 +_0221588C: .word 0x0000035D +_02215890: .word 0x02216FD4 +_02215894: .word 0x0000035E +_02215898: .word 0x02216FDC +_0221589C: .word 0x0000035F +_022158A0: .word 0x02216FE4 +_022158A4: .word 0x000003E3 + arm_func_end MOD79_02215640 + + arm_func_start MOD79_022158A8 +MOD79_022158A8: ; 0x022158A8 + stmdb sp!, {r4, r5, r6, r7, lr} + sub sp, sp, #4 + movs r4, r0 + mov r7, r1 + mov r6, r2 + bne _022158D4 + ldr r0, _0221596C ; =0x02216FB8 + ldr r1, _02215970 ; =0x02216FC4 + ldr r3, _02215974 ; =0x00000333 + mov r2, #0 + bl __msl_assertion_failed +_022158D4: + cmp r7, #0 + bne _022158F0 + ldr r0, _02215978 ; =0x02216FD4 + ldr r1, _02215970 ; =0x02216FC4 + mov r2, #0 + mov r3, #0x334 + bl __msl_assertion_failed +_022158F0: + cmp r6, #0 + bge _0221590C + ldr r0, _0221597C ; =0x02216FE8 + ldr r1, _02215970 ; =0x02216FC4 + ldr r3, _02215980 ; =0x00000335 + mov r2, #0 + bl __msl_assertion_failed +_0221590C: + cmp r6, #0 + addeq sp, sp, #4 + ldmeqia sp!, {r4, r5, r6, r7, pc} + ldr r3, [r4, #0x120] + cmp r3, #0xa + addge sp, sp, #4 + ldmgeia sp!, {r4, r5, r6, r7, pc} + rsb r5, r3, #0xa + cmp r5, r6 + movge r5, r6 + add r0, r4, #0x114 + mov r1, r7 + mov r2, r5 + add r0, r0, r3 + bl memcpy + ldr r0, [r4, #0x120] + mov r1, #0 + add r0, r0, r5 + str r0, [r4, #0x120] + ldr r0, [r4, #0x120] + add r0, r4, r0 + strb r1, [r0, #0x114] + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, pc} + .align 2, 0 +_0221596C: .word 0x02216FB8 +_02215970: .word 0x02216FC4 +_02215974: .word 0x00000333 +_02215978: .word 0x02216FD4 +_0221597C: .word 0x02216FE8 +_02215980: .word 0x00000335 + arm_func_end MOD79_022158A8 + + arm_func_start MOD79_02215984 +MOD79_02215984: ; 0x02215984 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + ldr r1, [r0, #0x120] + add r4, r0, #0x114 + cmp r1, #0 + bne _022159B0 + ldr r0, _022159D4 ; =0x02216FF4 + ldr r1, _022159D8 ; =0x02216FC4 + ldr r3, _022159DC ; =0x00000321 + mov r2, #0 + bl __msl_assertion_failed +_022159B0: + ldr r1, _022159E0 ; =0x02216FF8 + add r2, sp, #0 + mov r0, r4 + bl sscanf + cmp r0, #1 + mvnne r0, #0 + ldreq r0, [sp] + add sp, sp, #8 + ldmia sp!, {r4, pc} + .align 2, 0 +_022159D4: .word 0x02216FF4 +_022159D8: .word 0x02216FC4 +_022159DC: .word 0x00000321 +_022159E0: .word 0x02216FF8 + arm_func_end MOD79_02215984 + + arm_func_start MOD79_022159E4 +MOD79_022159E4: ; 0x022159E4 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4, #0x100] + mov lr, #0 + add r0, r0, r2 + str r0, [r4, #0x100] + ldr r3, [r4, #0x100] + ldr r0, [r4, #0x104] + mov ip, lr + cmp r3, r0 + beq _02215A1C + ldr r0, [r4, #0x130] + cmp r0, #0 + beq _02215A24 +_02215A1C: + mov r0, #1 + str r0, [r4, #0xfc] +_02215A24: + ldr r0, [r4, #0xc] + cmp r0, #0 + bne _02215A50 + add r0, r4, #0xbc + bl MOD79_02212794 + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr lr, [r4, #0xc0] + ldr ip, [r4, #0xc8] + b _02215A90 +_02215A50: + cmp r0, #1 + bne _02215A84 + cmp r2, #0 + beq _02215A78 + mov r0, #1 + str r0, [r4, #0xfc] + mov r0, #0xd + str r0, [r4, #0x38] + mov r0, #0 + ldmia sp!, {r4, pc} +_02215A78: + mov lr, r1 + mov ip, r2 + b _02215A90 +_02215A84: + cmp r0, #2 + moveq lr, r1 + moveq ip, r2 +_02215A90: + mov r0, r4 + mov r1, lr + mov r2, ip + bl MOD79_02212E00 + mov r0, #1 + ldmia sp!, {r4, pc} + arm_func_end MOD79_022159E4 + + arm_func_start MOD79_02215AA8 +MOD79_02215AA8: ; 0x02215AA8 + stmdb sp!, {r4, r5, lr} + ldr ip, _02215BD0 ; =0x00000404 + sub sp, sp, ip + mov r3, #0x400 + add r1, sp, #4 + add r2, sp, #0 + mov r4, r0 + str r3, [sp] + bl MOD79_02212FF0 + mov r5, r0 + cmp r5, #3 + ldreq ip, _02215BD0 ; =0x00000404 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, pc} + cmp r5, #1 + bne _02215B00 + ldr r1, [r4, #0x84] + ldr r0, [r4, #0x80] + cmp r1, r0 + ldreq ip, _02215BD0 ; =0x00000404 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, pc} +_02215B00: + cmp r5, #0 + bne _02215B28 + ldr r2, [sp] + add r1, sp, #4 + add r0, r4, #0x74 + bl MOD79_02212794 + cmp r0, #0 + ldreq ip, _02215BD0 ; =0x00000404 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, pc} +_02215B28: + ldr r0, [r4, #0x78] + ldr r1, _02215BD4 ; =0x02216FFC + bl strstr + cmp r0, #0 + beq _02215B98 + mov r1, #0 + strb r1, [r0] + ldr r1, [r4, #0x78] + sub r5, r0, r1 + add r1, r5, #1 + mov r0, r4 + str r1, [r4, #0xf8] + bl MOD79_02215BD8 + cmp r0, #0 + ldreq ip, _02215BD0 ; =0x00000404 + addeq sp, sp, ip + ldmeqia sp!, {r4, r5, pc} + add r3, r5, #2 + mov r1, #0 + str r3, [r4, #0x84] + mov r3, #7 + mov r0, r4 + mov r2, r1 + str r3, [r4, #0x10] + bl MOD79_02212E00 + ldr ip, _02215BD0 ; =0x00000404 + add sp, sp, ip + ldmia sp!, {r4, r5, pc} +_02215B98: + cmp r5, #2 + ldrne ip, _02215BD0 ; =0x00000404 + addne sp, sp, ip + ldmneia sp!, {r4, r5, pc} + mov r0, #1 + str r0, [r4, #0xfc] + mov r0, #7 + str r0, [r4, #0x38] + ldr r0, [r4, #0x48] + bl MOD04_021EFB28 + str r0, [r4, #0x4c] + ldr ip, _02215BD0 ; =0x00000404 + add sp, sp, ip + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02215BD0: .word 0x00000404 +_02215BD4: .word 0x02216FFC + arm_func_end MOD79_02215AA8 + + arm_func_start MOD79_02215BD8 +MOD79_02215BD8: ; 0x02215BD8 + stmdb sp!, {r4, lr} + sub sp, sp, #0x18 + movs r4, r0 + bne _02215BFC + ldr r0, _02215D0C ; =0x02216FB8 + ldr r1, _02215D10 ; =0x02216FC4 + ldr r3, _02215D14 ; =0x0000024E + mov r2, #0 + bl __msl_assertion_failed +_02215BFC: + ldr r0, [r4, #0x80] + cmp r0, #0 + bgt _02215C1C + ldr r0, _02215D18 ; =0x02217000 + ldr r1, _02215D10 ; =0x02216FC4 + ldr r3, _02215D1C ; =0x0000024F + mov r2, #0 + bl __msl_assertion_failed +_02215C1C: + add r1, sp, #0x10 + str r1, [sp] + add r0, sp, #0x14 + str r0, [sp, #4] + ldr r0, [r4, #0x78] + ldr r1, _02215D20 ; =0x02217020 + add r2, sp, #8 + add r3, sp, #0xc + bl sscanf + mov r3, #0 + mov ip, #1 + ldr r2, _02215D24 ; =0x0210430C + b _02215C5C +_02215C50: + ldr r1, [sp, #0x14] + add r1, r1, #1 + str r1, [sp, #0x14] +_02215C5C: + ldr lr, [r4, #0x78] + ldr r1, [sp, #0x14] + ldrsb lr, [lr, r1] + cmp lr, #0 + beq _02215CA0 + mov r1, ip + cmp lr, #0 + blt _02215C84 + cmp lr, #0x80 + movlt r1, r3 +_02215C84: + cmp r1, #0 + movne r1, r3 + moveq r1, lr, lsl #1 + ldreqh r1, [r2, r1] + andeq r1, r1, #0x100 + cmp r1, #0 + bne _02215C50 +_02215CA0: + cmp r0, #3 + bne _02215CC8 + ldr r1, [sp, #8] + cmp r1, #1 + blt _02215CC8 + ldr r0, [sp, #0x10] + cmp r0, #0x64 + blt _02215CC8 + cmp r0, #0x258 + blt _02215CE4 +_02215CC8: + mov r0, #1 + str r0, [r4, #0xfc] + mov r0, #7 + str r0, [r4, #0x38] + add sp, sp, #0x18 + mov r0, #0 + ldmia sp!, {r4, pc} +_02215CE4: + str r1, [r4, #0xe4] + ldr r1, [sp, #0xc] + mov r0, #1 + str r1, [r4, #0xe8] + ldr r1, [sp, #0x10] + str r1, [r4, #0xec] + ldr r1, [sp, #0x14] + str r1, [r4, #0xf0] + add sp, sp, #0x18 + ldmia sp!, {r4, pc} + .align 2, 0 +_02215D0C: .word 0x02216FB8 +_02215D10: .word 0x02216FC4 +_02215D14: .word 0x0000024E +_02215D18: .word 0x02217000 +_02215D1C: .word 0x0000024F +_02215D20: .word 0x02217020 +_02215D24: .word 0x0210430C + arm_func_end MOD79_02215BD8 + + arm_func_start MOD79_02215D28 +MOD79_02215D28: ; 0x02215D28 + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r4, r0 + mov r2, #0 + ldr r0, [r4, #0x48] + add r1, sp, #0 + mov r3, r2 + bl MOD04_021EFF5C + mvn r1, #0 + cmp r0, r1 + bne _02215D78 + mov r0, #1 + str r0, [r4, #0xfc] + mov r0, #5 + str r0, [r4, #0x38] + ldr r0, [r4, #0x48] + bl MOD04_021EFB28 + add sp, sp, #8 + str r0, [r4, #0x4c] + ldmia sp!, {r4, pc} +_02215D78: + ldr r0, [sp] + cmp r0, #0 + addeq sp, sp, #8 + ldmeqia sp!, {r4, pc} + mov r1, #0 + mov r3, #6 + mov r0, r4 + mov r2, r1 + str r3, [r4, #0x10] + bl MOD79_02212E00 + add sp, sp, #8 + ldmia sp!, {r4, pc} + arm_func_end MOD79_02215D28 + + arm_func_start MOD79_02215DA8 +MOD79_02215DA8: ; 0x02215DA8 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r4, [r6, #0x148] + bl MOD79_022140D4 + movs r5, r0 + bne _02215DF8 + ldr r0, [r6, #0xfc] + cmp r0, #0 + beq _02215DD8 + ldr r0, [r6, #0x38] + cmp r0, #0 + bne _02215DEC +_02215DD8: + ldr r0, _02215E38 ; =0x02217030 + ldr r1, _02215E3C ; =0x02216FC4 + mov r2, #0 + mov r3, #0x200 + bl __msl_assertion_failed +_02215DEC: + mov r0, r6 + bl MOD79_022149E4 + ldmia sp!, {r4, r5, r6, pc} +_02215DF8: + ldr r0, [r6, #0x148] + cmp r4, r0 + beq _02215E0C + mov r0, r6 + bl MOD79_02212D90 +_02215E0C: + cmp r5, #1 + ldmneia sp!, {r4, r5, r6, pc} + mov r0, r6 + bl MOD79_022149E4 + mov r1, #0 + mov r3, #5 + mov r0, r6 + mov r2, r1 + str r3, [r6, #0x10] + bl MOD79_02212E00 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02215E38: .word 0x02217030 +_02215E3C: .word 0x02216FC4 + arm_func_end MOD79_02215DA8 + + arm_func_start MOD79_02215E40 +MOD79_02215E40: ; 0x02215E40 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0x14 + mov r5, r0 + ldr r0, [r5, #0x5c] + cmp r0, #0 + bne _02216020 + ldr r0, [r5, #0x13c] + add r4, r5, #0x50 + cmp r0, #0 + ldrne r1, _02216080 ; =0x0221705C + bne _02215E7C + ldr r0, [r5, #0xc] + cmp r0, #3 + ldreq r1, _02216084 ; =0x02217064 + ldrne r1, _02216088 ; =0x0221706C +_02215E7C: + mov r0, r4 + mov r2, #0 + bl MOD79_02212794 + ldr r0, [r5, #0x15c] + cmp r0, #0 + bne _02215EA4 + ldr r0, _0221608C ; =0x02217128 + ldr r0, [r0] + cmp r0, #0 + beq _02215EB8 +_02215EA4: + ldr r1, [r5, #0x14] + mov r0, r4 + mov r2, #0 + bl MOD79_02212794 + b _02215EC8 +_02215EB8: + ldr r1, [r5, #0x24] + mov r0, r4 + mov r2, #0 + bl MOD79_02212794 +_02215EC8: + ldr r1, _02216090 ; =0x02217074 + mov r0, r4 + mov r2, #0 + bl MOD79_02212794 + ldrh r0, [r5, #0x20] + cmp r0, #0x50 + bne _02215EF8 + ldr r2, [r5, #0x18] + ldr r1, _02216094 ; =0x02217080 + mov r0, r4 + bl MOD79_02212700 + b _02215F40 +_02215EF8: + ldr r1, _02216098 ; =0x02217088 + mov r0, r4 + mov r2, #0 + bl MOD79_02212794 + ldr r1, [r5, #0x18] + mov r0, r4 + mov r2, #0 + bl MOD79_02212794 + mov r0, r4 + mov r1, #0x3a + bl MOD79_022126A4 + ldrh r1, [r5, #0x20] + mov r0, r4 + bl MOD79_0221266C + mov r0, r4 + ldr r1, _0221609C ; =0x02216FFC + mov r2, #2 + bl MOD79_02212794 +_02215F40: + ldr r0, [r5, #0x28] + cmp r0, #0 + beq _02215F5C + ldr r1, _022160A0 ; =0x02217090 + bl strstr + cmp r0, #0 + bne _02215F6C +_02215F5C: + ldr r1, _022160A0 ; =0x02217090 + ldr r2, _022160A4 ; =0x0221709C + mov r0, r4 + bl MOD79_02212700 +_02215F6C: + ldr r0, [r5, #0x34] + cmp r0, #0 + beq _02215F8C + ldr r1, _022160A8 ; =0x022170AC + ldr r2, _022160AC ; =0x022170B8 + mov r0, r4 + bl MOD79_02212700 + b _02215F9C +_02215F8C: + ldr r1, _022160A8 ; =0x022170AC + ldr r2, _022160B0 ; =0x022170C4 + mov r0, r4 + bl MOD79_02212700 +_02215F9C: + ldr r0, [r5, #0x13c] + cmp r0, #0 + beq _02215FE0 + ldr r2, [r5, #0x14c] + ldr r1, _022160B4 ; =0x022170CC + add r0, sp, #0 + bl sprintf + ldr r1, _022160B8 ; =0x022170D0 + add r2, sp, #0 + mov r0, r4 + bl MOD79_02212700 + mov r0, r5 + bl MOD79_02214FFC + mov r2, r0 + ldr r1, _022160BC ; =0x022170E0 + mov r0, r4 + bl MOD79_02212700 +_02215FE0: + ldr r1, [r5, #0x28] + cmp r1, #0 + beq _02215FF8 + mov r0, r4 + mov r2, #0 + bl MOD79_02212794 +_02215FF8: + ldr r1, _0221609C ; =0x02216FFC + mov r0, r4 + mov r2, #2 + bl MOD79_02212794 + add r0, r5, #0x50 + cmp r4, r0 + beq _02216020 + ldr r1, [r4, #4] + ldr r2, [r4, #0xc] + bl MOD79_02212794 +_02216020: + mov r0, r5 + bl MOD79_02212554 + cmp r0, #0 + addeq sp, sp, #0x14 + ldmeqia sp!, {r4, r5, pc} + ldr r1, [r5, #0x60] + ldr r0, [r5, #0x5c] + cmp r1, r0 + addlt sp, sp, #0x14 + ldmltia sp!, {r4, r5, pc} + add r0, r5, #0x50 + bl MOD79_0221262C + ldr r0, [r5, #0x13c] + mov r1, #0 + cmp r0, #0 + movne r0, #4 + strne r0, [r5, #0x10] + moveq r0, #5 + streq r0, [r5, #0x10] + mov r0, r5 + mov r2, r1 + bl MOD79_02212E00 + add sp, sp, #0x14 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02216080: .word 0x0221705C +_02216084: .word 0x02217064 +_02216088: .word 0x0221706C +_0221608C: .word 0x02217128 +_02216090: .word 0x02217074 +_02216094: .word 0x02217080 +_02216098: .word 0x02217088 +_0221609C: .word 0x02216FFC +_022160A0: .word 0x02217090 +_022160A4: .word 0x0221709C +_022160A8: .word 0x022170AC +_022160AC: .word 0x022170B8 +_022160B0: .word 0x022170C4 +_022160B4: .word 0x022170CC +_022160B8: .word 0x022170D0 +_022160BC: .word 0x022170E0 + arm_func_end MOD79_02215E40 + + arm_func_start MOD79_022160C0 +MOD79_022160C0: ; 0x022160C0 + stmdb sp!, {r4, lr} + ldr ip, _02216208 ; =0x00000408 + sub sp, sp, ip + mov r4, r0 + ldr r1, [r4, #0x168] + cmp r1, #0 + bne _02216130 + ldr r0, [r4, #0x14] + ldr r1, _0221620C ; =0x022170F0 + mov r2, #8 + bl strncmp + cmp r0, #0 + ldreq ip, _02216208 ; =0x00000408 + moveq r0, #1 + streq r0, [r4, #0xfc] + moveq r0, #0x11 + addeq sp, sp, ip + streq r0, [r4, #0x38] + ldmeqia sp!, {r4, pc} + mov r1, #0 + mov r3, #3 + mov r0, r4 + mov r2, r1 + str r3, [r4, #0x10] + bl MOD79_02212E00 + ldr ip, _02216208 ; =0x00000408 + add sp, sp, ip + ldmia sp!, {r4, pc} +_02216130: + ldr r1, [r4, #0x170] + cmp r1, #0 + beq _0221615C + mov r1, #0 + mov r3, #3 + mov r2, r1 + str r3, [r4, #0x10] + bl MOD79_02212E00 + ldr ip, _02216208 ; =0x00000408 + add sp, sp, ip + ldmia sp!, {r4, pc} +_0221615C: + ldr r1, [r4, #0x16c] + cmp r1, #0 + bne _0221619C + ldr r2, [r4, #0x174] + add r1, r4, #0x164 + .word 0xE12FFF32 + cmp r0, #3 + bne _0221619C + ldr r0, _02216210 ; =0x02216FE4 + ldr r1, _02216214 ; =0x02216FC4 + ldr r3, _02216218 ; =0x00000146 + mov r2, #0 + bl __msl_assertion_failed + ldr ip, _02216208 ; =0x00000408 + add sp, sp, ip + ldmia sp!, {r4, pc} +_0221619C: + ldr r1, [r4, #0x60] + ldr r0, [r4, #0x5c] + cmp r1, r0 + bge _022161E4 + mov r0, r4 + bl MOD79_02212554 + cmp r0, #0 + ldreq ip, _02216208 ; =0x00000408 + addeq sp, sp, ip + ldmeqia sp!, {r4, pc} + ldr r1, [r4, #0x60] + ldr r0, [r4, #0x5c] + cmp r1, r0 + ldrlt ip, _02216208 ; =0x00000408 + addlt sp, sp, ip + ldmltia sp!, {r4, pc} + add r0, r4, #0x50 + bl MOD79_0221262C +_022161E4: + mov r3, #0x400 + add r1, sp, #4 + add r2, sp, #0 + mov r0, r4 + str r3, [sp] + bl MOD79_02212FF0 + ldr ip, _02216208 ; =0x00000408 + add sp, sp, ip + ldmia sp!, {r4, pc} + .align 2, 0 +_02216208: .word 0x00000408 +_0221620C: .word 0x022170F0 +_02216210: .word 0x02216FE4 +_02216214: .word 0x02216FC4 +_02216218: .word 0x00000146 + arm_func_end MOD79_022160C0 + + arm_func_start MOD79_0221621C +MOD79_0221621C: ; 0x0221621C + stmdb sp!, {r4, lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r1, [r4, #0x48] + mvn r0, #0 + cmp r1, r0 + bne _022163D4 + mov r0, #2 + mov r1, #1 + mov r2, #0 + bl MOD04_021EFDB8 + str r0, [r4, #0x48] + ldr r0, [r4, #0x48] + mvn r1, #0 + cmp r0, r1 + bne _02216280 + mov r0, #1 + str r0, [r4, #0xfc] + mov r0, #5 + str r0, [r4, #0x38] + ldr r0, [r4, #0x48] + bl MOD04_021EFB28 + add sp, sp, #0x10 + str r0, [r4, #0x4c] + ldmia sp!, {r4, pc} +_02216280: + mov r1, #0 + bl MOD04_021F017C + cmp r0, #0 + bne _022162B4 + mov r0, #1 + str r0, [r4, #0xfc] + mov r0, #5 + str r0, [r4, #0x38] + ldr r0, [r4, #0x48] + bl MOD04_021EFB28 + add sp, sp, #0x10 + str r0, [r4, #0x4c] + ldmia sp!, {r4, pc} +_022162B4: + ldr r0, [r4, #0x134] + cmp r0, #0 + beq _022162D0 + ldr r1, _0221646C ; =0x0221695C + ldr r0, [r4, #0x48] + ldr r1, [r1] + bl MOD04_021F0130 +_022162D0: + add r1, sp, #0 + mov r0, #0 + str r0, [r1] + str r0, [r1, #4] + mov r0, #2 + strb r0, [sp, #1] + ldr r0, [r4, #0x15c] + cmp r0, #0 + beq _02216318 + add r0, r4, #0x100 + ldrh r0, [r0, #0x60] + mov r1, r0, asr #8 + mov r0, r0, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + strh r0, [sp, #2] + b _02216368 +_02216318: + ldr r0, _02216470 ; =0x02217128 + ldr r0, [r0] + cmp r0, #0 + beq _0221634C + ldr r0, _02216474 ; =0x02217124 + ldrh r0, [r0] + mov r1, r0, asr #8 + mov r0, r0, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + strh r0, [sp, #2] + b _02216368 +_0221634C: + ldrh r0, [r4, #0x20] + mov r1, r0, asr #8 + mov r0, r0, lsl #8 + and r1, r1, #0xff + and r0, r0, #0xff00 + orr r0, r1, r0 + strh r0, [sp, #2] +_02216368: + ldr r0, [r4, #0x1c] + add r1, sp, #0 + str r0, [sp, #4] + ldr r0, [r4, #0x48] + mov r2, #8 + bl MOD04_021EFCE4 + mvn r1, #0 + cmp r0, r1 + bne _022163D4 + ldr r0, [r4, #0x48] + bl MOD04_021EFB28 + mvn r1, #5 + cmp r0, r1 + beq _022163D4 + mvn r1, #0x19 + cmp r0, r1 + beq _022163D4 + mvn r1, #0x4b + cmp r0, r1 + beq _022163D4 + mov r1, #1 + str r1, [r4, #0xfc] + mov r1, #6 + str r1, [r4, #0x38] + add sp, sp, #0x10 + str r0, [r4, #0x4c] + ldmia sp!, {r4, pc} +_022163D4: + ldr r0, [r4, #0x48] + add r2, sp, #8 + add r3, sp, #0xc + mov r1, #0 + bl MOD04_021EFF5C + cmp r0, #0 + movgt r1, #1 + movle r1, #0 + mvn r0, #0 + cmp r1, r0 + beq _0221640C + ldr r0, [sp, #0xc] + cmp r0, #0 + beq _0221643C +_0221640C: + mov r0, #1 + str r0, [r4, #0xfc] + mov r0, #6 + cmp r1, #0 + addne sp, sp, #0x10 + str r0, [r4, #0x38] + ldmneia sp!, {r4, pc} + ldr r0, [r4, #0x48] + bl MOD04_021EFB28 + add sp, sp, #0x10 + str r0, [r4, #0x4c] + ldmia sp!, {r4, pc} +_0221643C: + ldr r0, [sp, #8] + cmp r0, #0 + addeq sp, sp, #0x10 + ldmeqia sp!, {r4, pc} + mov r1, #0 + mov r3, #2 + mov r0, r4 + mov r2, r1 + str r3, [r4, #0x10] + bl MOD79_02212E00 + add sp, sp, #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +_0221646C: .word 0x0221695C +_02216470: .word 0x02217128 +_02216474: .word 0x02217124 + arm_func_end MOD79_0221621C + + arm_func_start MOD79_02216478 +MOD79_02216478: ; 0x02216478 + stmdb sp!, {r4, r5, lr} + sub sp, sp, #4 + mov r1, #0 + mov r4, r0 + mov r2, r1 + bl MOD79_02212E00 + bl MOD04_021F024C + mov r0, r4 + bl MOD79_02216548 + cmp r0, #0 + moveq r0, #1 + streq r0, [r4, #0xfc] + moveq r0, #3 + addeq sp, sp, #4 + streq r0, [r4, #0x38] + ldmeqia sp!, {r4, r5, pc} + ldr r5, [r4, #0x15c] + cmp r5, #0 + bne _022164D4 + ldr r0, _02216544 ; =0x02217128 + ldr r5, [r0] + cmp r5, #0 + ldreq r5, [r4, #0x18] +_022164D4: + mov r0, r5 + bl MOD04_021EFB38 + str r0, [r4, #0x1c] + ldr r1, [r4, #0x1c] + mvn r0, #0 + cmp r1, r0 + bne _02216524 + mov r0, r5 + bl FUN_0209A6EC + cmp r0, #0 + moveq r0, #1 + streq r0, [r4, #0xfc] + moveq r0, #4 + addeq sp, sp, #4 + streq r0, [r4, #0x38] + ldmeqia sp!, {r4, r5, pc} + ldr r0, [r0, #0xc] + ldr r0, [r0] + ldr r0, [r0] + str r0, [r4, #0x1c] +_02216524: + mov r1, #0 + mov r3, #1 + mov r0, r4 + mov r2, r1 + str r3, [r4, #0x10] + bl MOD79_02212E00 + add sp, sp, #4 + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02216544: .word 0x02217128 + arm_func_end MOD79_02216478 + + arm_func_start MOD79_02216548 +MOD79_02216548: ; 0x02216548 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #4 + movs r7, r0 + bne _0221656C + ldr r0, _02216704 ; =0x02216FB8 + ldr r1, _02216708 ; =0x02216FC4 + mov r2, #0 + mov r3, #0x25 + bl __msl_assertion_failed +_0221656C: + cmp r7, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + ldr r0, [r7, #0x14] + cmp r0, #0 + bne _0221659C + ldr r0, _0221670C ; =0x022170FC + ldr r1, _02216708 ; =0x02216FC4 + mov r2, #0 + mov r3, #0x2b + bl __msl_assertion_failed +_0221659C: + ldr r6, [r7, #0x14] + cmp r6, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + ldr r1, _02216710 ; =0x0221710C + mov r0, r6 + mov r2, #7 + bl strncmp + cmp r0, #0 + addeq r6, r6, #7 + moveq r4, #0 + beq _022165FC + ldr r1, _02216714 ; =0x022170F0 + mov r0, r6 + mov r2, #8 + bl strncmp + cmp r0, #0 + addeq r6, r6, #8 + moveq r4, #1 + beq _022165FC + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} +_022165FC: + ldr r1, _02216718 ; =0x02217114 + mov r0, r6 + bl strspn + mov r8, r0 + ldrsb r5, [r6, r8] + mov r1, #0 + mov r0, r6 + strb r1, [r6, r8] + add sb, r6, r8 + bl MOD04_021F0208 + str r0, [r7, #0x18] + ldr r0, [r7, #0x18] + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} + strb r5, [sb] + ldrsb r0, [r6, r8]! + cmp r0, #0x3a + bne _02216688 + add r6, r6, #1 + mov r0, r6 + bl atol + strh r0, [r7, #0x20] + ldrh r0, [r7, #0x20] + cmp r0, #0 + addeq sp, sp, #4 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc} +_02216670: + ldrsb r0, [r6, #1]! + cmp r0, #0 + beq _0221669C + cmp r0, #0x2f + bne _02216670 + b _0221669C +_02216688: + cmp r4, #0 + ldrne r0, _0221671C ; =0x000001BB + strneh r0, [r7, #0x20] + moveq r0, #0x50 + streqh r0, [r7, #0x20] +_0221669C: + ldrsb r0, [r6] + cmp r0, #0 + ldreq r6, _02216720 ; =0x02217118 + mov r0, r6 + bl MOD04_021F0208 + str r0, [r7, #0x24] + ldr r6, [r7, #0x24] + mov r1, #0x20 + mov r0, r6 + bl strchr + cmp r0, #0 + beq _022166F0 + mov r5, #0x2b + mov r4, #0x20 +_022166D4: + strb r5, [r0] + ldr r6, [r7, #0x24] + mov r1, r4 + mov r0, r6 + bl strchr + cmp r0, #0 + bne _022166D4 +_022166F0: + cmp r6, #0 + movne r0, #1 + moveq r0, #0 + add sp, sp, #4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02216704: .word 0x02216FB8 +_02216708: .word 0x02216FC4 +_0221670C: .word 0x022170FC +_02216710: .word 0x0221710C +_02216714: .word 0x022170F0 +_02216718: .word 0x02217114 +_0221671C: .word 0x000001BB +_02216720: .word 0x02217118 + arm_func_end MOD79_02216548 + ; 0x02216724 + + .section .rodata + ; 0x02216738 + .incbin "baserom.nds", 0x2DE6D8, 0x10 + + .section .data + ; 0x0221686C + .incbin "baserom.nds", 0x2DE80C, 0x8B4 diff --git a/arm9/modules/79/asm/module_79_thumb.s b/arm9/modules/79/asm/module_79_thumb.s new file mode 100644 index 00000000..ac0c1188 --- /dev/null +++ b/arm9/modules/79/asm/module_79_thumb.s @@ -0,0 +1,851 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD79_02211E60 +MOD79_02211E60: ; 0x02211E60 + lsl r1, r0, #0x10 + orr r1, r0 + ldr r0, _02211E6C ; =0x02217120 + str r1, [r0] + bx lr + nop +_02211E6C: .word 0x02217120 + thumb_func_end MOD79_02211E60 + + thumb_func_start MOD79_02211E70 +MOD79_02211E70: ; 0x02211E70 + ldr r1, _02211E8C ; =0x02217120 + mov r0, #0x45 + ldr r2, [r1] + add r3, r2, #0 + mul r3, r0 + ldr r0, _02211E90 ; =0x00001111 + add r2, r3, r0 + ldr r0, _02211E94 ; =0x7FFFFFFF + and r0, r2 + str r0, [r1] + asr r0, r0, #0x10 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + bx lr + .align 2, 0 +_02211E8C: .word 0x02217120 +_02211E90: .word 0x00001111 +_02211E94: .word 0x7FFFFFFF + thumb_func_end MOD79_02211E70 + + thumb_func_start MOD79_02211E98 +MOD79_02211E98: ; 0x02211E98 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + add r4, r0, #0 + mov r0, #0 + add r5, r2, #0 + str r0, [sp, #0x14] + add r0, r5, #0 + str r0, [sp, #0x10] + add r0, #8 + add r7, r1, #0 + str r3, [sp] + str r0, [sp, #0x10] + bl MOD79_02211FA4 + ldr r1, [sp, #0x30] + add r0, r0, #1 + cmp r1, r0 + bge _02211EC2 + add sp, #0x18 + mov r0, #2 + pop {r3, r4, r5, r6, r7, pc} +_02211EC2: + ldr r1, [sp, #0x10] + mov r0, #0xa + bl MOD04_021DD944 + add r6, r0, #0 + bne _02211ED4 + add sp, #0x18 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_02211ED4: + lsr r0, r4, #0x18 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp, #4] + lsl r0, r0, #0x18 + lsr r1, r0, #0x18 + ldr r0, [sp, #0x14] + add r0, r0, r1 + lsr r1, r4, #0x10 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + str r1, [sp, #8] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + add r0, r0, r1 + lsr r1, r4, #8 + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + str r1, [sp, #0xc] + lsl r1, r1, #0x18 + lsr r1, r1, #0x18 + add r0, r0, r1 + lsl r1, r4, #0x18 + lsr r4, r1, #0x18 + lsl r1, r4, #0x18 + lsr r1, r1, #0x18 + add r0, r0, r1 + str r0, [sp, #0x14] + mov r0, #0 + cmp r5, #0 + ble _02211F20 +_02211F12: + ldrb r2, [r7, r0] + ldr r1, [sp, #0x14] + add r0, r0, #1 + add r1, r1, r2 + str r1, [sp, #0x14] + cmp r0, r5 + blt _02211F12 +_02211F20: + ldr r0, [sp, #0x14] + bl MOD79_02211E60 + bl MOD79_02211E70 + eor r0, r4 + strb r0, [r6, #4] + bl MOD79_02211E70 + ldr r1, [sp, #0xc] + eor r0, r1 + strb r0, [r6, #5] + bl MOD79_02211E70 + ldr r1, [sp, #8] + eor r0, r1 + strb r0, [r6, #6] + bl MOD79_02211E70 + ldr r1, [sp, #4] + mov r4, #0 + eor r0, r1 + strb r0, [r6, #7] + cmp r5, #0 + ble _02211F64 +_02211F52: + bl MOD79_02211E70 + ldrb r1, [r7, r4] + eor r1, r0 + add r0, r6, r4 + add r4, r4, #1 + strb r1, [r0, #8] + cmp r4, r5 + blt _02211F52 +_02211F64: + ldr r1, _02211FA0 ; =0x4A3B2C1D + ldr r0, [sp, #0x14] + add r5, #8 + eor r1, r0 + lsr r0, r1, #0x18 + strb r0, [r6] + lsr r0, r1, #0x10 + strb r0, [r6, #1] + lsr r0, r1, #8 + strb r0, [r6, #2] + strb r1, [r6, #3] + ldr r1, [sp] + add r0, r6, #0 + add r2, r5, #0 + mov r3, #2 + bl MOD04_021EF820 + ldr r0, [sp, #0x10] + bl MOD79_02211FA4 + ldr r1, [sp] + mov r2, #0 + strb r2, [r1, r0] + mov r0, #0xa + add r1, r6, #0 + bl MOD04_021DD904 + mov r0, #0 + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02211FA0: .word 0x4A3B2C1D + thumb_func_end MOD79_02211E98 + + thumb_func_start MOD79_02211FA4 +MOD79_02211FA4: ; 0x02211FA4 + push {r3, r4, r5, lr} + mov r1, #3 + add r5, r0, #0 + bl _u32_div_f + cmp r1, #0 + beq _02211FB6 + mov r4, #1 + b _02211FB8 +_02211FB6: + mov r4, #0 +_02211FB8: + add r0, r5, #0 + mov r1, #3 + bl _u32_div_f + add r0, r0, r4 + lsl r0, r0, #2 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD79_02211FA4 + + thumb_func_start MOD79_02211FC8 +MOD79_02211FC8: ; 0x02211FC8 + add r0, #8 + cmp r0, #7 + bhi _02212022 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_02211FDA: ; jump table + .short _02211FEA - _02211FDA - 2 ; case 0 + .short _02212022 - _02211FDA - 2 ; case 1 + .short _02211FF2 - _02211FDA - 2 ; case 2 + .short _02211FFA - _02211FDA - 2 ; case 3 + .short _02212002 - _02211FDA - 2 ; case 4 + .short _0221200A - _02211FDA - 2 ; case 5 + .short _02212012 - _02211FDA - 2 ; case 6 + .short _0221201A - _02211FDA - 2 ; case 7 +_02211FEA: + ldr r0, _0221202C ; =0x02216760 + mov r1, #0 + str r1, [r0, #8] + bx lr +_02211FF2: + ldr r0, _0221202C ; =0x02216760 + mov r1, #1 + str r1, [r0, #8] + bx lr +_02211FFA: + ldr r0, _0221202C ; =0x02216760 + mov r1, #2 + str r1, [r0, #8] + bx lr +_02212002: + ldr r0, _0221202C ; =0x02216760 + mov r1, #3 + str r1, [r0, #8] + bx lr +_0221200A: + ldr r0, _0221202C ; =0x02216760 + mov r1, #4 + str r1, [r0, #8] + bx lr +_02212012: + ldr r0, _0221202C ; =0x02216760 + mov r1, #5 + str r1, [r0, #8] + bx lr +_0221201A: + ldr r0, _0221202C ; =0x02216760 + mov r1, #6 + str r1, [r0, #8] + bx lr +_02212022: + ldr r0, _0221202C ; =0x02216760 + mov r1, #0 + str r1, [r0, #8] + bx lr + nop +_0221202C: .word 0x02216760 + thumb_func_end MOD79_02211FC8 + + thumb_func_start MOD79_02212030 +MOD79_02212030: ; 0x02212030 + push {r4, r5, r6, r7, lr} + sub sp, #0x4c + add r4, r1, #0 + mov r3, #0 + ldr r1, _022122B8 ; =0x02216760 + mvn r3, r3 + str r3, [r1, #4] + ldr r3, [r1] + add r6, r0, #0 + cmp r3, #1 + bne _02212048 + b _022122B2 +_02212048: + cmp r2, #0 + beq _0221204E + b _02212202 +_0221204E: + cmp r3, #4 + beq _0221205A + cmp r3, #6 + beq _02212126 + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_0221205A: + cmp r4, #0x20 + bne _0221211E + ldr r5, [r1, #0x28] + ldr r3, _022122BC ; =0x02216724 + add r5, #0x14 + add r2, sp, #4 + mov r1, #0x11 +_02212068: + ldrb r0, [r3] + add r3, r3, #1 + strb r0, [r2] + add r2, r2, #1 + sub r1, r1, #1 + bne _02212068 + add r3, sp, #0x14 + ldr r2, _022122C0 ; =0x02216794 + add r3, #1 + mov r1, #0x15 +_0221207C: + ldrb r0, [r2] + add r2, r2, #1 + strb r0, [r3] + add r3, r3, #1 + sub r1, r1, #1 + bne _0221207C + add r0, sp, #0x14 + add r0, #1 + add r1, r6, #0 + add r2, r4, #0 + bl strncat + add r0, sp, #0x14 + add r0, #1 + bl strlen + add r1, sp, #0x14 + add r2, r0, #0 + add r0, r5, #0 + add r1, #1 + bl MATH_CalcSHA1 + ldr r0, _022122B8 ; =0x02216760 + ldr r1, _022122C4 ; =0x022167AC + ldr r0, [r0, #0x24] + bl strcat + mov r2, #0 + ldr r4, _022122B8 ; =0x02216760 + add r3, r2, #0 + add r1, sp, #4 + mov r7, #0xf +_022120BC: + ldrb r0, [r5, r2] + asr r0, r0, #4 + ldrsb r6, [r1, r0] + ldr r0, [r4, #0x28] + strb r6, [r0, r3] + ldrb r0, [r5, r2] + ldr r6, [r4, #0x28] + add r2, r2, #1 + and r0, r7 + ldrsb r0, [r1, r0] + add r6, r6, r3 + add r3, r3, #2 + strb r0, [r6, #1] + cmp r2, #0x14 + blt _022120BC + ldr r0, _022122B8 ; =0x02216760 + mov r2, #0 + ldr r1, [r0, #0x28] + add r1, #0x28 + strb r2, [r1] + ldr r0, [r0, #0x24] + ldr r1, _022122C8 ; =0x022167B4 + bl strcat + ldr r3, _022122B8 ; =0x02216760 + ldr r0, [r3, #0x30] + str r0, [sp] + ldr r0, [r3, #0x10] + ldr r1, [r3, #0x14] + ldr r2, [r3, #0x18] + ldr r3, [r3, #0x2c] + bl MOD79_02211E98 + cmp r0, #0 + beq _02212114 + cmp r0, #1 + beq _0221210A + cmp r0, #2 + bne _02212114 +_0221210A: + ldr r0, _022122B8 ; =0x02216760 + mov r1, #1 + str r1, [r0] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_02212114: + ldr r0, _022122B8 ; =0x02216760 + mov r1, #5 + str r1, [r0] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_0221211E: + mov r0, #1 + str r0, [r1] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_02212126: + cmp r4, #0x16 + bne _022121D0 + ldr r1, _022122CC ; =0x022167BC + mov r2, #0x16 + bl strncmp + cmp r0, #0 + bne _02212144 + ldr r0, _022122B8 ; =0x02216760 + mov r1, #1 + str r1, [r0] + mov r1, #0x1a + str r1, [r0, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_02212144: + ldr r1, _022122D0 ; =0x022167D4 + add r0, r6, #0 + mov r2, #0x16 + bl strncmp + cmp r0, #0 + bne _02212160 + ldr r0, _022122B8 ; =0x02216760 + mov r1, #1 + str r1, [r0] + mov r1, #0x1b + str r1, [r0, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_02212160: + ldr r1, _022122D4 ; =0x022167EC + add r0, r6, #0 + mov r2, #0x16 + bl strncmp + cmp r0, #0 + bne _0221217C + ldr r0, _022122B8 ; =0x02216760 + mov r1, #1 + str r1, [r0] + mov r1, #0x1c + str r1, [r0, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_0221217C: + ldr r1, _022122D8 ; =0x02216804 + add r0, r6, #0 + mov r2, #0x16 + bl strncmp + cmp r0, #0 + bne _02212198 + ldr r0, _022122B8 ; =0x02216760 + mov r1, #1 + str r1, [r0] + mov r1, #0x1d + str r1, [r0, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_02212198: + ldr r1, _022122DC ; =0x0221681C + add r0, r6, #0 + mov r2, #0x16 + bl strncmp + cmp r0, #0 + bne _022121B4 + ldr r0, _022122B8 ; =0x02216760 + mov r1, #1 + str r1, [r0] + mov r1, #0x1e + str r1, [r0, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_022121B4: + ldr r1, _022122E0 ; =0x02216834 + add r0, r6, #0 + mov r2, #0x16 + bl strncmp + cmp r0, #0 + bne _022121D0 + ldr r0, _022122B8 ; =0x02216760 + mov r1, #1 + str r1, [r0] + mov r1, #0x1f + str r1, [r0, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_022121D0: + ldr r0, _022122B8 ; =0x02216760 + ldr r2, [r0, #0x20] + cmp r4, r2 + ldr r0, [r0, #0x1c] + bgt _022121EA + add r1, r6, #0 + add r2, r4, #0 + bl memcpy + ldr r0, _022122B8 ; =0x02216760 + mov r1, #7 + str r1, [r0] + b _022121FA +_022121EA: + add r1, r6, #0 + bl memcpy + ldr r0, _022122B8 ; =0x02216760 + mov r1, #1 + str r1, [r0] + mov r1, #0x20 + str r1, [r0, #8] +_022121FA: + ldr r0, _022122B8 ; =0x02216760 + add sp, #0x4c + str r4, [r0, #0xc] + pop {r4, r5, r6, r7, pc} +_02212202: + mov r0, #1 + str r0, [r1] + cmp r2, #0x13 + bhi _022122B2 + add r0, r2, r2 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_02212216: ; jump table + .short _022122B2 - _02212216 - 2 ; case 0 + .short _0221223E - _02212216 - 2 ; case 1 + .short _02212246 - _02212216 - 2 ; case 2 + .short _0221224E - _02212216 - 2 ; case 3 + .short _02212256 - _02212216 - 2 ; case 4 + .short _0221225E - _02212216 - 2 ; case 5 + .short _02212266 - _02212216 - 2 ; case 6 + .short _0221226E - _02212216 - 2 ; case 7 + .short _02212276 - _02212216 - 2 ; case 8 + .short _0221227E - _02212216 - 2 ; case 9 + .short _02212286 - _02212216 - 2 ; case 10 + .short _0221228E - _02212216 - 2 ; case 11 + .short _02212296 - _02212216 - 2 ; case 12 + .short _022122B2 - _02212216 - 2 ; case 13 + .short _022122B2 - _02212216 - 2 ; case 14 + .short _0221229E - _02212216 - 2 ; case 15 + .short _022122A6 - _02212216 - 2 ; case 16 + .short _022122B2 - _02212216 - 2 ; case 17 + .short _022122B2 - _02212216 - 2 ; case 18 + .short _022122AE - _02212216 - 2 ; case 19 +_0221223E: + mov r0, #8 + str r0, [r1, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_02212246: + mov r0, #9 + str r0, [r1, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_0221224E: + mov r0, #0xa + str r0, [r1, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_02212256: + mov r0, #0xb + str r0, [r1, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_0221225E: + mov r0, #0xc + str r0, [r1, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_02212266: + mov r0, #0xd + str r0, [r1, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_0221226E: + mov r0, #0xe + str r0, [r1, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_02212276: + mov r0, #0xf + str r0, [r1, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_0221227E: + mov r0, #0x10 + str r0, [r1, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_02212286: + mov r0, #0x11 + str r0, [r1, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_0221228E: + mov r0, #0x12 + str r0, [r1, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_02212296: + mov r0, #0x13 + str r0, [r1, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_0221229E: + mov r0, #0x16 + str r0, [r1, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_022122A6: + mov r0, #0x17 + str r0, [r1, #8] + add sp, #0x4c + pop {r4, r5, r6, r7, pc} +_022122AE: + mov r0, #0x19 + str r0, [r1, #8] +_022122B2: + add sp, #0x4c + pop {r4, r5, r6, r7, pc} + nop +_022122B8: .word 0x02216760 +_022122BC: .word 0x02216724 +_022122C0: .word 0x02216794 +_022122C4: .word 0x022167AC +_022122C8: .word 0x022167B4 +_022122CC: .word 0x022167BC +_022122D0: .word 0x022167D4 +_022122D4: .word 0x022167EC +_022122D8: .word 0x02216804 +_022122DC: .word 0x0221681C +_022122E0: .word 0x02216834 + thumb_func_end MOD79_02212030 + + thumb_func_start MOD79_022122E4 +MOD79_022122E4: ; 0x022122E4 + push {r3, lr} + ldr r0, _02212304 ; =0x02216760 + mov r1, #2 + str r1, [r0] + sub r1, r1, #3 + str r1, [r0, #4] + mov r0, #0 + bl MOD04_021EB59C + cmp r0, #0 + bne _02212300 + ldr r0, _02212304 ; =0x02216760 + mov r1, #1 + str r1, [r0] +_02212300: + pop {r3, pc} + nop +_02212304: .word 0x02216760 + thumb_func_end MOD79_022122E4 + + thumb_func_start MOD79_02212308 +MOD79_02212308: ; 0x02212308 + push {r3, r4, r5, r6, r7, lr} + add r5, r1, #0 + ldr r1, _02212398 ; =0x02216760 + add r4, r3, #0 + ldr r3, [r1] + add r7, r0, #0 + cmp r3, #2 + beq _0221231C + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_0221231C: + str r5, [r1, #0x10] + str r2, [r1, #0x14] + str r4, [r1, #0x18] + ldr r2, [sp, #0x18] + add r4, #8 + str r2, [r1, #0x1c] + ldr r2, [sp, #0x1c] + str r2, [r1, #0x20] + bl strlen + add r6, r0, #0 + add r0, r4, #0 + bl MOD79_02211FA4 + add r1, r0, #0 + add r6, #0x45 + mov r0, #0xa + add r1, r6, r1 + bl MOD04_021DD944 + ldr r1, _02212398 ; =0x02216760 + cmp r0, #0 + str r0, [r1, #0x24] + bne _02212350 + mov r0, #2 + pop {r3, r4, r5, r6, r7, pc} +_02212350: + ldr r1, _0221239C ; =0x0221684C + add r2, r7, #0 + add r3, r5, #0 + bl sprintf + ldr r0, _02212398 ; =0x02216760 + ldr r5, [r0, #0x24] + add r0, r5, #0 + bl strlen + add r6, r0, #0 + ldr r0, _022123A0 ; =0x022167AC + bl strlen + add r1, r5, r6 + add r1, r1, r0 + ldr r0, _02212398 ; =0x02216760 + str r1, [r0, #0x28] + ldr r0, _022123A4 ; =0x022167B4 + bl strlen + ldr r1, _02212398 ; =0x02216760 + ldr r2, [r1, #0x28] + add r2, #0x28 + add r0, r2, r0 + str r0, [r1, #0x2c] + add r0, r4, #0 + bl MOD79_02211FA4 + add r1, r0, #1 + ldr r0, _02212398 ; =0x02216760 + str r1, [r0, #0x30] + mov r1, #3 + str r1, [r0] + mov r0, #0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02212398: .word 0x02216760 +_0221239C: .word 0x0221684C +_022123A0: .word 0x022167AC +_022123A4: .word 0x022167B4 + thumb_func_end MOD79_02212308 + + thumb_func_start MOD79_022123A8 +MOD79_022123A8: ; 0x022123A8 + push {r3, lr} + ldr r1, _02212440 ; =0x02216760 + ldr r0, [r1] + cmp r0, #7 + bhi _02212438 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_022123BE: ; jump table + .short _02212438 - _022123BE - 2 ; case 0 + .short _02212438 - _022123BE - 2 ; case 1 + .short _02212438 - _022123BE - 2 ; case 2 + .short _022123CE - _022123BE - 2 ; case 3 + .short _022123F4 - _022123BE - 2 ; case 4 + .short _02212404 - _022123BE - 2 ; case 5 + .short _0221242A - _022123BE - 2 ; case 6 + .short _02212438 - _022123BE - 2 ; case 7 +_022123CE: + ldr r0, [r1, #0x24] + ldr r1, _02212444 ; =MOD79_02212030 + ldr r2, _02212448 ; =0x02216760 + bl MOD04_021EB3B8 + ldr r1, _02212440 ; =0x02216760 + str r0, [r1, #4] + bl MOD79_02211FC8 + ldr r0, _02212440 ; =0x02216760 + ldr r1, [r0, #4] + cmp r1, #0 + blt _022123EE + mov r1, #4 + str r1, [r0] + b _02212438 +_022123EE: + mov r1, #1 + str r1, [r0] + b _02212438 +_022123F4: + bl MOD04_021EB524 + cmp r0, #0 + bne _02212438 + ldr r0, _02212440 ; =0x02216760 + mov r1, #1 + str r1, [r0] + b _02212438 +_02212404: + ldr r0, [r1, #0x24] + ldr r1, _02212444 ; =MOD79_02212030 + ldr r2, _02212448 ; =0x02216760 + bl MOD04_021EB3B8 + ldr r1, _02212440 ; =0x02216760 + str r0, [r1, #4] + bl MOD79_02211FC8 + ldr r0, _02212440 ; =0x02216760 + ldr r1, [r0, #4] + cmp r1, #0 + blt _02212424 + mov r1, #6 + str r1, [r0] + b _02212438 +_02212424: + mov r1, #1 + str r1, [r0] + b _02212438 +_0221242A: + bl MOD04_021EB524 + cmp r0, #0 + bne _02212438 + ldr r0, _02212440 ; =0x02216760 + mov r1, #1 + str r1, [r0] +_02212438: + ldr r0, _02212440 ; =0x02216760 + ldr r0, [r0] + pop {r3, pc} + nop +_02212440: .word 0x02216760 +_02212444: .word MOD79_02212030 +_02212448: .word 0x02216760 + thumb_func_end MOD79_022123A8 + + thumb_func_start MOD79_0221244C +MOD79_0221244C: ; 0x0221244C + push {r3, lr} + ldr r0, _02212470 ; =0x02216760 + ldr r1, [r0, #0x24] + cmp r1, #0 + beq _02212464 + mov r0, #0xa + mov r2, #0 + bl MOD04_021DD904 + ldr r0, _02212470 ; =0x02216760 + mov r1, #0 + str r1, [r0, #0x24] +_02212464: + blx FUN_021EB550 + ldr r0, _02212470 ; =0x02216760 + mov r1, #1 + str r1, [r0] + pop {r3, pc} + .align 2, 0 +_02212470: .word 0x02216760 + thumb_func_end MOD79_0221244C + + thumb_func_start MOD79_02212474 +MOD79_02212474: ; 0x02212474 + ldr r0, _0221247C ; =0x02216760 + ldr r0, [r0, #8] + bx lr + nop +_0221247C: .word 0x02216760 + thumb_func_end MOD79_02212474 + + thumb_func_start MOD79_02212480 +MOD79_02212480: ; 0x02212480 + ldr r0, _02212488 ; =0x02216760 + ldr r0, [r0, #0xc] + bx lr + nop +_02212488: .word 0x02216760 + thumb_func_end MOD79_02212480 + + .section .rodata + ; 0x02216724 + .incbin "baserom.nds", 0x2DE6C4, 0x14 + + .section .data + ; 0x02216760 + .incbin "baserom.nds", 0x2DE700, 0x10C + + .section .bss + ; 0x2217120 + .space 0x40 diff --git a/arm9/undefined_syms.txt b/arm9/undefined_syms.txt index 4cca1421..6a81ad19 100644 --- a/arm9/undefined_syms.txt +++ b/arm9/undefined_syms.txt @@ -1,5 +1,6 @@ // Overlay +FUN_021EB550 = 0x021EB550; FUN_0222DAEC = 0x0222DAEC; FUN_0222DD1C = 0x0222DD1C; FUN_0222DD38 = 0x0222DD38; |