diff --git a/asm/include/main_0207F894.inc b/asm/include/main_0207F894.inc index 59e63eae..2929d9c7 100644 --- a/asm/include/main_0207F894.inc +++ b/asm/include/main_0207F894.inc @@ -1,8 +1,25 @@ #pragma once +.public ArrayCopy32 +.public ArrayFill32 +.public ArrayFill32Fast +.public CopyAndInterleave +.public EnableIrqFlag +.public FileInit +.public GetIrqFlag +.public MIi_UncompressBackward +.public MemcpyFast +.public MemsetFast +.public OS_GetLockID +.public OSi_ReferSymbol +.public SVC_CpuSet +.public SVC_WaitByLoop +.public SetIrqFlag +.public StartThread +.public ThreadExit +.public WaitForInterrupt +.public WaitForever2 .public _02000BC4 .public _020AEC5C -.public _020AECB0 -.public _020AEDB0 .public _020B2BB4 .public _020B2BB8 .public _020B2BC0 @@ -12,22 +29,7 @@ .public _020B2E9C .public _020B2ED0 .public _020B2ED4 -.public _020B2F20 -.public _020B2F6C .public _020B2FBC -.public _020B301C -.public _020B31E4 -.public _020B31EC -.public _020B31F4 -.public _020B31FC -.public _020B3200 -.public _020B3204 -.public _020B320C -.public _020B3214 -.public _020B3218 -.public _020B321C -.public _020B3220 -.public _020B3224 .public _020B3364 .public _022B966C .public _022BB5EC @@ -61,33 +63,9 @@ .public _022BC228 .public _022BC22C .public _022BC650 -.public _022BC674 -.public _022BC698 -.public _022BCA70 .public _022BCA74 -.public _deq -.public _dls .public _f2d .public _ll_udiv -.public _u32_div_f -.public _ull_mod -.public ArrayCopy32 -.public ArrayFill32 -.public ArrayFill32Fast -.public CopyAndInterleave -.public EnableIrqFlag -.public FileInit -.public GetIrqFlag -.public MemcpyFast -.public MemsetFast -.public MIi_UncompressBackward -.public OS_GetLockID -.public OSi_ReferSymbol -.public SetIrqFlag -.public StartThread -.public strchr -.public strlen -.public strncpy .public sub_02078A98 .public sub_02078C3C .public sub_02078C68 @@ -103,9 +81,6 @@ .public sub_02079940 .public sub_02079A64 .public sub_0207A030 -.public sub_0207A048 -.public sub_0207A0CC -.public sub_0207A164 .public sub_0207A270 .public sub_0207A2A4 .public sub_0207A2C0 @@ -135,11 +110,4 @@ .public sub_0207F654 .public sub_0207F70C .public sub_0207F818 -.public sub_0208B374 -.public sub_0208C5B4 -.public sub_0208D638 -.public SVC_CpuSet -.public SVC_WaitByLoop -.public ThreadExit -.public WaitForever2 -.public WaitForInterrupt +.public sub_02086B7C diff --git a/asm/include/main_02086568.inc b/asm/include/main_02086568.inc new file mode 100644 index 00000000..b1f52688 --- /dev/null +++ b/asm/include/main_02086568.inc @@ -0,0 +1,40 @@ +#pragma once +.public _020AECB0 +.public _020AEDB0 +.public _020B2ED4 +.public _020B2F20 +.public _020B2F6C +.public _020B301C +.public _020B31E4 +.public _020B31EC +.public _020B31F4 +.public _020B31FC +.public _020B3200 +.public _020B3204 +.public _020B320C +.public _020B3214 +.public _020B3218 +.public _020B321C +.public _020B3220 +.public _020B3224 +.public _022B966C +.public _022BC650 +.public _022BC674 +.public _022BC698 +.public _022BCA70 +.public _deq +.public _dls +.public _ll_udiv +.public _u32_div_f +.public _ull_mod +.public strchr +.public strlen +.public strncpy +.public sub_0207A048 +.public sub_0207A0CC +.public sub_0207A164 +.public sub_02086468 +.public sub_020864F4 +.public sub_0208B374 +.public sub_0208C5B4 +.public sub_0208D638 diff --git a/asm/main_0207F894.s b/asm/main_0207F894.s index b17700d4..8cc87b36 100644 --- a/asm/main_0207F894.s +++ b/asm/main_0207F894.s @@ -8377,3636 +8377,3 @@ _02086548: .align 2, 0 _02086558: .word _020B2ED4 arm_func_end sub_020864F4 - - arm_func_start abs -abs: ; 0x0208655C - cmp r0, #0 - rsblt r0, r0, #0 - bx lr - arm_func_end abs - - arm_func_start sub_02086568 -sub_02086568: ; 0x02086568 - bx lr - arm_func_end sub_02086568 - - arm_func_start sub_0208656C -sub_0208656C: ; 0x0208656C - bx lr - arm_func_end sub_0208656C - - arm_func_start sub_02086570 -sub_02086570: ; 0x02086570 - ldr r1, [r0, #0x1c] - str r1, [r0, #0x24] - ldr r3, [r0, #0x20] - str r3, [r0, #0x28] - ldr r2, [r0, #0x18] - ldr r1, [r0, #0x2c] - and r1, r2, r1 - sub r1, r3, r1 - str r1, [r0, #0x28] - ldr r1, [r0, #0x18] - str r1, [r0, #0x34] - bx lr - arm_func_end sub_02086570 - - arm_func_start sub_020865A0 -sub_020865A0: ; 0x020865A0 - stmdb sp!, {r4, r5, r6, lr} - mov r5, r2 - mov r4, r0 - mov r6, r1 - bl sub_02086570 - cmp r5, #1 - ldreq r0, [r4, #0x20] - add r2, r4, #0x28 - streq r0, [r4, #0x28] - ldr r0, [r4] - ldr r1, [r4, #0x1c] - ldr r3, [r4, #0x48] - ldr ip, [r4, #0x3c] - blx ip - cmp r0, #2 - moveq r1, #0 - streq r1, [r4, #0x28] - cmp r6, #0 - ldrne r1, [r4, #0x28] - strne r1, [r6] - cmp r0, #0 - ldmneia sp!, {r4, r5, r6, pc} - ldr r1, [r4, #0x18] - ldr r0, [r4, #0x28] - add r0, r1, r0 - str r0, [r4, #0x18] - ldr r0, [r4, #4] - mov r0, r0, lsl #0x13 - movs r0, r0, lsr #0x1f - bne _02086624 - ldr r0, [r4, #0x1c] - add r1, r4, #0x28 - bl sub_0208656C -_02086624: - mov r0, #0 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end sub_020865A0 - - arm_func_start sub_0208662C -sub_0208662C: ; 0x0208662C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r2, [r5, #0x24] - ldr r0, [r5, #0x1c] - mov r4, r1 - subs r0, r2, r0 - beq _020866A4 - str r0, [r5, #0x28] - ldr r0, [r5, #4] - mov r0, r0, lsl #0x13 - movs r0, r0, lsr #0x1f - bne _02086668 - ldr r0, [r5, #0x1c] - add r1, r5, #0x28 - bl sub_02086568 -_02086668: - ldr r0, [r5] - ldr r1, [r5, #0x1c] - ldr r3, [r5, #0x48] - ldr ip, [r5, #0x40] - add r2, r5, #0x28 - blx ip - cmp r4, #0 - ldrne r1, [r5, #0x28] - strne r1, [r4] - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, pc} - ldr r1, [r5, #0x18] - ldr r0, [r5, #0x28] - add r0, r1, r0 - str r0, [r5, #0x18] -_020866A4: - mov r0, r5 - bl sub_02086570 - mov r0, #0 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_0208662C - - arm_func_start sub_020866B4 -sub_020866B4: ; 0x020866B4 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - ldr r4, _020867AC ; =_020B2ED4 - mov r7, r3 - cmp r7, r4 - moveq r6, #2 - mov sl, r0 - movne r6, #5 - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _020867B0 ; =_022BC698 - mov sb, r1 - add r0, r5, r4 - mov r8, r2 - bl sub_0207A164 - cmp r0, #0 - bne _02086718 - ldr r0, _020867B4 ; =_022B966C - ldr r2, _020867B8 ; =_022BC650 - ldr r1, [r0, #4] - ldr r0, _020867BC ; =_022BC674 - ldr r3, [r1, #0x6c] - mov r1, #1 - str r3, [r2, r6, lsl #2] - str r1, [r0, r6, lsl #2] - b _02086770 -_02086718: - ldr r0, _020867B4 ; =_022B966C - ldr r1, _020867B8 ; =_022BC650 - ldr r0, [r0, #4] - ldr r1, [r1, r6, lsl #2] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _02086748 - ldr r1, _020867BC ; =_022BC674 - ldr r0, [r1, r6, lsl #2] - add r0, r0, #1 - str r0, [r1, r6, lsl #2] - b _02086770 -_02086748: - add r0, r5, r4 - bl sub_0207A048 - ldr r0, _020867B4 ; =_022B966C - ldr r2, _020867B8 ; =_022BC650 - ldr r1, [r0, #4] - ldr r0, _020867BC ; =_022BC674 - ldr r3, [r1, #0x6c] - mov r1, #1 - str r3, [r2, r6, lsl #2] - str r1, [r0, r6, lsl #2] -_02086770: - mov r0, sl - mov r1, sb - mov r2, r8 - mov r3, r7 - bl sub_020867C0 - ldr r1, _020867BC ; =_022BC674 - mov r7, r0 - ldr r0, [r1, r6, lsl #2] - subs r0, r0, #1 - str r0, [r1, r6, lsl #2] - bne _020867A4 - add r0, r5, r4 - bl sub_0207A0CC -_020867A4: - mov r0, r7 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_020867AC: .word _020B2ED4 -_020867B0: .word _022BC698 -_020867B4: .word _022B966C -_020867B8: .word _022BC650 -_020867BC: .word _022BC674 - arm_func_end sub_020866B4 - - arm_func_start sub_020867C0 -sub_020867C0: ; 0x020867C0 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #4 - mov r7, r3 - mov sb, r0 - mov r8, r1 - mov r0, r7 - mov r1, #0 - mov r4, r2 - bl sub_0208B374 - cmp r0, #0 - bne _020867F8 - mov r0, r7 - mvn r1, #0 - bl sub_0208B374 -_020867F8: - muls r4, r8, r4 - beq _0208681C - ldrb r0, [r7, #0xd] - cmp r0, #0 - bne _0208681C - ldr r1, [r7, #4] - mov r0, r1, lsl #0x16 - movs r0, r0, lsr #0x1d - bne _02086828 -_0208681C: - add sp, sp, #4 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} -_02086828: - mov r0, r1, lsl #0x13 - movs r0, r0, lsr #0x1f - movne r0, r1, lsl #0x19 - movne r0, r0, lsr #0x1e - ldr r1, [r7, #8] - cmpne r0, #2 - mov r6, #1 - mov r0, r1, lsl #0x1d - movne r6, #0 - movs r0, r0, lsr #0x1d - bne _0208687C - ldr r0, [r7, #4] - mov r0, r0, lsl #0x1b - mov r0, r0, lsr #0x1d - tst r0, #1 - beq _0208687C - bic r0, r1, #7 - orr r0, r0, #2 - str r0, [r7, #8] - mov r0, #0 - str r0, [r7, #0x28] -_0208687C: - ldr r0, [r7, #8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - cmp r0, #2 - bhs _020868A8 - mov r0, #1 - strb r0, [r7, #0xd] - mov r0, #0 - add sp, sp, #4 - str r0, [r7, #0x28] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} -_020868A8: - ldr r0, [r7, #4] - mov r0, r0, lsl #0x19 - mov r0, r0, lsr #0x1e - tst r0, #1 - beq _020868E0 - bl sub_02086468 - cmp r0, #0 - beq _020868E0 - mov r0, #1 - strb r0, [r7, #0xd] - mov r0, #0 - add sp, sp, #4 - str r0, [r7, #0x28] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} -_020868E0: - cmp r4, #0 - mov r5, #0 - beq _020869A4 - ldr r0, [r7, #8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - cmp r0, #3 - blo _020869A4 - mov sl, r5 -_02086904: - mov r0, r7 - mov r1, sl - bl sub_0208B374 - cmp r0, #1 - ldr r0, [r7, #8] - bne _02086938 - mov r0, r0, lsl #0x1d - add r0, r7, r0, lsr #28 - ldrh r0, [r0, #0xe] - add r5, r5, #2 - sub r4, r4, #2 - strh r0, [sb], #2 - b _02086950 -_02086938: - mov r0, r0, lsl #0x1d - add r0, r7, r0, lsr #29 - ldrb r0, [r0, #0xf] - add r5, r5, #1 - sub r4, r4, #1 - strb r0, [sb], #1 -_02086950: - ldr r1, [r7, #8] - cmp r4, #0 - mov r0, r1, lsl #0x1d - mov r0, r0, lsr #0x1d - sub r0, r0, #1 - bic r1, r1, #7 - and r0, r0, #7 - orr r0, r1, r0 - str r0, [r7, #8] - beq _0208698C - ldr r0, [r7, #8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - cmp r0, #3 - bhs _02086904 -_0208698C: - ldr r0, [r7, #8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - cmp r0, #2 - ldreq r0, [r7, #0x30] - streq r0, [r7, #0x28] -_020869A4: - cmp r4, #0 - beq _02086A68 - ldr r0, [r7, #0x28] - cmp r0, #0 - cmpeq r6, #0 - beq _02086A68 - mov sl, #0 -_020869C0: - ldr r0, [r7, #0x28] - cmp r0, #0 - bne _02086A14 - mov r0, r7 - mov r1, sl - mov r2, sl - bl sub_020865A0 - cmp r0, #0 - beq _02086A14 - cmp r0, #1 - mov r0, #1 - streqb r0, [r7, #0xd] - beq _02086A04 - ldr r1, [r7, #8] - bic r1, r1, #7 - str r1, [r7, #8] - strb r0, [r7, #0xc] -_02086A04: - mov r0, #0 - str r0, [r7, #0x28] - mov r4, #0 - b _02086A68 -_02086A14: - ldr r0, [r7, #0x28] - str r0, [sp] - cmp r0, r4 - strhi r4, [sp] - ldr r1, [r7, #0x24] - ldr r2, [sp] - mov r0, sb - bl memcpy - ldr r2, [sp] - ldr r0, [r7, #0x24] - subs r4, r4, r2 - add r0, r0, r2 - str r0, [r7, #0x24] - ldr r1, [r7, #0x28] - ldr r0, [sp] - add sb, sb, r2 - sub r0, r1, r0 - add r5, r5, r2 - str r0, [r7, #0x28] - cmpne r6, #0 - bne _020869C0 -_02086A68: - cmp r4, #0 - beq _02086AF4 - cmp r6, #0 - bne _02086AF4 - ldr r6, [r7, #0x1c] - ldr sl, [r7, #0x20] - add r1, sp, #0 - str sb, [r7, #0x1c] - mov r0, r7 - mov r2, #1 - str r4, [r7, #0x20] - bl sub_020865A0 - cmp r0, #0 - beq _02086AD4 - cmp r0, #1 - mov r0, #1 - bne _02086ABC - strb r0, [r7, #0xd] - mov r0, #0 - str r0, [r7, #0x28] - b _02086AD4 -_02086ABC: - ldr r1, [r7, #8] - bic r1, r1, #7 - str r1, [r7, #8] - strb r0, [r7, #0xc] - mov r0, #0 - str r0, [r7, #0x28] -_02086AD4: - ldr r1, [sp] - mov r0, r7 - str r6, [r7, #0x1c] - str sl, [r7, #0x20] - add r5, r5, r1 - bl sub_02086570 - mov r0, #0 - str r0, [r7, #0x28] -_02086AF4: - mov r0, r5 - mov r1, r8 - bl _u32_div_f - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - arm_func_end sub_020867C0 - - arm_func_start sub_02086B08 -sub_02086B08: ; 0x02086B08 - stmdb sp!, {r3, r4, r5, lr} - movs r5, r0 - mvneq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r1, [r5, #4] - mov r1, r1, lsl #0x16 - movs r1, r1, lsr #0x1d - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - bl sub_02086B7C - mov r4, r0 - ldr r0, [r5] - ldr r1, [r5, #0x44] - blx r1 - ldr r1, [r5, #4] - mov r2, #0 - bic r1, r1, #0x380 - str r1, [r5, #4] - str r2, [r5] - ldr r1, [r5, #8] - mov r1, r1, lsl #0x1c - movs r1, r1, lsr #0x1f - subne r0, r2, #1 - ldmneia sp!, {r3, r4, r5, pc} - cmp r4, #0 - cmpeq r0, #0 - movne r2, #1 - rsb r0, r2, #0 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02086B08 - - arm_func_start sub_02086B7C -sub_02086B7C: ; 0x02086B7C - stmdb sp!, {r4, lr} - movs r4, r0 - bne _02086B90 - bl sub_020864F4 - ldmia sp!, {r4, pc} -_02086B90: - ldrb r0, [r4, #0xd] - cmp r0, #0 - bne _02086BAC - ldr r0, [r4, #4] - mov r1, r0, lsl #0x16 - movs r1, r1, lsr #0x1d - bne _02086BB4 -_02086BAC: - mvn r0, #0 - ldmia sp!, {r4, pc} -_02086BB4: - mov r0, r0, lsl #0x1b - mov r0, r0, lsr #0x1d - cmp r0, #1 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - ldr r0, [r4, #8] - mov r1, r0, lsl #0x1d - mov r1, r1, lsr #0x1d - cmp r1, #3 - bichs r0, r0, #7 - orrhs r0, r0, #2 - strhs r0, [r4, #8] - ldr r0, [r4, #8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - cmp r0, #2 - moveq r0, #0 - streq r0, [r4, #0x28] - ldr r0, [r4, #8] - mov r1, r0, lsl #0x1d - mov r1, r1, lsr #0x1d - cmp r1, #1 - beq _02086C20 - bic r0, r0, #7 - str r0, [r4, #8] - mov r0, #0 - ldmia sp!, {r4, pc} -_02086C20: - mov r0, r4 - mov r1, #0 - bl sub_0208662C - cmp r0, #0 - mov r0, #0 - beq _02086C4C - mov r1, #1 - strb r1, [r4, #0xd] - str r0, [r4, #0x28] - sub r0, r0, #1 - ldmia sp!, {r4, pc} -_02086C4C: - ldr r1, [r4, #8] - bic r1, r1, #7 - str r1, [r4, #8] - str r0, [r4, #0x18] - str r0, [r4, #0x28] - ldmia sp!, {r4, pc} - arm_func_end sub_02086B7C - - arm_func_start sub_02086C64 -sub_02086C64: ; 0x02086C64 - stmdb sp!, {r3, r4, r5, lr} - cmp r2, #0 - mov lr, #0 - ble _02086CE0 - ldr ip, _02086CE8 ; =_020AECB0 -_02086C78: - ldrsb r3, [r0], #1 - cmp r3, #0 - blt _02086C90 - cmp r3, #0x80 - bge _02086C90 - ldrb r3, [ip, r3] -_02086C90: - ldrsb r5, [r1], #1 - mov r3, r3, lsl #0x18 - mov r4, r3, asr #0x18 - cmp r5, #0 - blt _02086CB0 - cmp r5, #0x80 - bge _02086CB0 - ldrb r5, [ip, r5] -_02086CB0: - mov r3, r5, lsl #0x18 - cmp r4, r3, asr #24 - mvnlt r0, #0 - ldmltia sp!, {r3, r4, r5, pc} - movgt r0, #1 - ldmgtia sp!, {r3, r4, r5, pc} - cmp r4, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - add lr, lr, #1 - cmp lr, r2 - blt _02086C78 -_02086CE0: - mov r0, #0 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02086CE8: .word _020AECB0 - arm_func_end sub_02086C64 - - arm_func_start sub_02086CEC -sub_02086CEC: ; 0x02086CEC - ldr r1, [r0, #4] - mov r1, r1, lsl #0x16 - mov r1, r1, lsr #0x1d - and r1, r1, #0xff - add r1, r1, #0xff - and r1, r1, #0xff - cmp r1, #1 - bhi _02086D18 - ldrb r1, [r0, #0xd] - cmp r1, #0 - beq _02086D2C -_02086D18: - ldr r0, _02086D64 ; =_022BCA70 - mov r1, #0x28 - str r1, [r0] - sub r0, r1, #0x29 - bx lr -_02086D2C: - ldr r1, [r0, #8] - mov r1, r1, lsl #0x1d - movs ip, r1, lsr #0x1d - ldreq r0, [r0, #0x18] - bxeq lr - ldr r2, [r0, #0x24] - ldr r1, [r0, #0x1c] - ldr r3, [r0, #0x34] - sub r0, r2, r1 - cmp ip, #3 - add r0, r3, r0 - subhs r1, ip, #2 - subhs r0, r0, r1 - bx lr - .align 2, 0 -_02086D64: .word _022BCA70 - arm_func_end sub_02086CEC - - arm_func_start sub_02086D68 -sub_02086D68: ; 0x02086D68 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r1, _02086E68 ; =_020B2ED4 - mov r7, r0 - cmp r7, r1 - moveq r6, #2 - beq _02086DA0 - ldr r0, _02086E6C ; =_020B2F20 - cmp r7, r0 - moveq r6, #3 - beq _02086DA0 - ldr r0, _02086E70 ; =_020B2F6C - cmp r7, r0 - moveq r6, #4 - movne r6, #5 -_02086DA0: - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _02086E74 ; =_022BC698 - add r0, r5, r4 - bl sub_0207A164 - cmp r0, #0 - bne _02086DE0 - ldr r0, _02086E78 ; =_022B966C - ldr r2, _02086E7C ; =_022BC650 - ldr r1, [r0, #4] - ldr r0, _02086E80 ; =_022BC674 - ldr r3, [r1, #0x6c] - mov r1, #1 - str r3, [r2, r6, lsl #2] - str r1, [r0, r6, lsl #2] - b _02086E38 -_02086DE0: - ldr r0, _02086E78 ; =_022B966C - ldr r1, _02086E7C ; =_022BC650 - ldr r0, [r0, #4] - ldr r1, [r1, r6, lsl #2] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _02086E10 - ldr r1, _02086E80 ; =_022BC674 - ldr r0, [r1, r6, lsl #2] - add r0, r0, #1 - str r0, [r1, r6, lsl #2] - b _02086E38 -_02086E10: - add r0, r5, r4 - bl sub_0207A048 - ldr r0, _02086E78 ; =_022B966C - ldr r2, _02086E7C ; =_022BC650 - ldr r1, [r0, #4] - ldr r0, _02086E80 ; =_022BC674 - ldr r3, [r1, #0x6c] - mov r1, #1 - str r3, [r2, r6, lsl #2] - str r1, [r0, r6, lsl #2] -_02086E38: - mov r0, r7 - bl sub_02086CEC - ldr r1, _02086E80 ; =_022BC674 - mov r7, r0 - ldr r0, [r1, r6, lsl #2] - subs r0, r0, #1 - str r0, [r1, r6, lsl #2] - bne _02086E60 - add r0, r5, r4 - bl sub_0207A0CC -_02086E60: - mov r0, r7 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02086E68: .word _020B2ED4 -_02086E6C: .word _020B2F20 -_02086E70: .word _020B2F6C -_02086E74: .word _022BC698 -_02086E78: .word _022B966C -_02086E7C: .word _022BC650 -_02086E80: .word _022BC674 - arm_func_end sub_02086D68 - - arm_func_start sub_02086E84 -sub_02086E84: ; 0x02086E84 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - ldr r1, [r5, #4] - mov r4, r2 - mov r1, r1, lsl #0x16 - mov r1, r1, lsr #0x1d - and r1, r1, #0xff - cmp r1, #1 - ldreqb r1, [r5, #0xd] - cmpeq r1, #0 - beq _02086ED0 - ldr r0, _02087068 ; =_022BCA70 - mov r1, #0x28 - str r1, [r0] - sub r0, r1, #0x29 - ldmia sp!, {r3, r4, r5, lr} - add sp, sp, #0x10 - bx lr -_02086ED0: - ldr r1, [r5, #8] - mov r1, r1, lsl #0x1d - mov r1, r1, lsr #0x1d - cmp r1, #1 - bne _02086F20 - mov r1, #0 - bl sub_0208662C - cmp r0, #0 - beq _02086F20 - mov r0, #1 - strb r0, [r5, #0xd] - mov r2, #0 - ldr r0, _02087068 ; =_022BCA70 - mov r1, #0x28 - str r2, [r5, #0x28] - str r1, [r0] - sub r0, r1, #0x29 - ldmia sp!, {r3, r4, r5, lr} - add sp, sp, #0x10 - bx lr -_02086F20: - cmp r4, #1 - bne _02086F40 - mov r0, r5 - mov r4, #0 - bl sub_02086CEC - ldr r1, [sp, #0x14] - add r0, r1, r0 - str r0, [sp, #0x14] -_02086F40: - cmp r4, #2 - beq _02086FD4 - ldr r0, [r5, #4] - mov r0, r0, lsl #0x1b - mov r0, r0, lsr #0x1d - cmp r0, #3 - beq _02086FD4 - ldr r0, [r5, #8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - sub r0, r0, #2 - cmp r0, #1 - bhi _02086FD4 - ldr r2, [sp, #0x14] - ldr r0, [r5, #0x18] - cmp r2, r0 - bhs _02086F90 - ldr r0, [r5, #0x34] - cmp r2, r0 - bhs _02086FA0 -_02086F90: - ldr r0, [r5, #8] - bic r0, r0, #7 - str r0, [r5, #8] - b _02086FE0 -_02086FA0: - ldr r1, [r5, #0x1c] - sub r0, r2, r0 - add r0, r1, r0 - str r0, [r5, #0x24] - ldr r1, [r5, #0x18] - ldr r0, [sp, #0x14] - sub r0, r1, r0 - str r0, [r5, #0x28] - ldr r0, [r5, #8] - bic r0, r0, #7 - orr r0, r0, #2 - str r0, [r5, #8] - b _02086FE0 -_02086FD4: - ldr r0, [r5, #8] - bic r0, r0, #7 - str r0, [r5, #8] -_02086FE0: - ldr r0, [r5, #8] - mov r0, r0, lsl #0x1d - movs r0, r0, lsr #0x1d - bne _02087058 - ldr ip, [r5, #0x38] - cmp ip, #0 - beq _02087044 - ldr r0, [r5] - ldr r3, [r5, #0x48] - add r1, sp, #0x14 - mov r2, r4 - blx ip - cmp r0, #0 - beq _02087044 - mov r0, #1 - strb r0, [r5, #0xd] - mov r2, #0 - ldr r0, _02087068 ; =_022BCA70 - mov r1, #0x28 - str r2, [r5, #0x28] - str r1, [r0] - sub r0, r1, #0x29 - ldmia sp!, {r3, r4, r5, lr} - add sp, sp, #0x10 - bx lr -_02087044: - mov r1, #0 - strb r1, [r5, #0xc] - ldr r0, [sp, #0x14] - str r0, [r5, #0x18] - str r1, [r5, #0x28] -_02087058: - mov r0, #0 - ldmia sp!, {r3, r4, r5, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_02087068: .word _022BCA70 - arm_func_end sub_02086E84 - - arm_func_start sub_0208706C -sub_0208706C: ; 0x0208706C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r3, _0208717C ; =_020B2ED4 - mov sb, r0 - cmp sb, r3 - mov r8, r1 - mov r7, r2 - moveq r6, #2 - beq _020870AC - ldr r0, _02087180 ; =_020B2F20 - cmp sb, r0 - moveq r6, #3 - beq _020870AC - ldr r0, _02087184 ; =_020B2F6C - cmp sb, r0 - moveq r6, #4 - movne r6, #5 -_020870AC: - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _02087188 ; =_022BC698 - add r0, r5, r4 - bl sub_0207A164 - cmp r0, #0 - bne _020870EC - ldr r0, _0208718C ; =_022B966C - ldr r2, _02087190 ; =_022BC650 - ldr r1, [r0, #4] - ldr r0, _02087194 ; =_022BC674 - ldr r3, [r1, #0x6c] - mov r1, #1 - str r3, [r2, r6, lsl #2] - str r1, [r0, r6, lsl #2] - b _02087144 -_020870EC: - ldr r0, _0208718C ; =_022B966C - ldr r1, _02087190 ; =_022BC650 - ldr r0, [r0, #4] - ldr r1, [r1, r6, lsl #2] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _0208711C - ldr r1, _02087194 ; =_022BC674 - ldr r0, [r1, r6, lsl #2] - add r0, r0, #1 - str r0, [r1, r6, lsl #2] - b _02087144 -_0208711C: - add r0, r5, r4 - bl sub_0207A048 - ldr r0, _0208718C ; =_022B966C - ldr r2, _02087190 ; =_022BC650 - ldr r1, [r0, #4] - ldr r0, _02087194 ; =_022BC674 - ldr r3, [r1, #0x6c] - mov r1, #1 - str r3, [r2, r6, lsl #2] - str r1, [r0, r6, lsl #2] -_02087144: - mov r0, sb - mov r1, r8 - mov r2, r7 - bl sub_02086E84 - ldr r1, _02087194 ; =_022BC674 - mov r7, r0 - ldr r0, [r1, r6, lsl #2] - subs r0, r0, #1 - str r0, [r1, r6, lsl #2] - bne _02087174 - add r0, r5, r4 - bl sub_0207A0CC -_02087174: - mov r0, r7 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0208717C: .word _020B2ED4 -_02087180: .word _020B2F20 -_02087184: .word _020B2F6C -_02087188: .word _022BC698 -_0208718C: .word _022B966C -_02087190: .word _022BC650 -_02087194: .word _022BC674 - arm_func_end sub_0208706C - - arm_func_start sub_02087198 -sub_02087198: ; 0x02087198 - stmdb sp!, {r4, lr} - mov r1, #0 - mov r4, r0 - mov r2, r1 - strb r1, [r4, #0xd] - bl sub_0208706C - mov r0, #0 - strb r0, [r4, #0xd] - ldmia sp!, {r4, pc} - arm_func_end sub_02087198 - - arm_func_start mbtowc -mbtowc: ; 0x020871BC - cmp r1, #0 - moveq r0, #0 - bxeq lr - cmp r2, #0 - mvneq r0, #0 - bxeq lr - cmp r0, #0 - ldrneb r2, [r1] - strneh r2, [r0] - ldrsb r0, [r1] - cmp r0, #0 - moveq r0, #0 - movne r0, #1 - bx lr - arm_func_end mbtowc - - arm_func_start TryAssignByte -TryAssignByte: ; 0x020871F4 - cmp r0, #0 - moveq r0, #0 - strneb r1, [r0] - movne r0, #1 - bx lr - arm_func_end TryAssignByte - - arm_func_start TryAssignByteWrapper -TryAssignByteWrapper: ; 0x02087208 - stmdb sp!, {r3, lr} - ldr r2, _02087220 ; =_020B301C - ldr r2, [r2, #8] - ldr r2, [r2, #4] - blx r2 - ldmia sp!, {r3, pc} - .align 2, 0 -_02087220: .word _020B301C - arm_func_end TryAssignByteWrapper - - arm_func_start wcstombs -wcstombs: ; 0x02087224 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - movs r4, r0 - mov sb, r1 - cmpne sb, #0 - mov r8, r2 - mov r7, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - add r6, sp, #0 -_02087248: - ldrh r1, [sb] - cmp r1, #0 - moveq r0, #0 - streqb r0, [r4, r7] - beq _02087294 - mov r0, r6 - add sb, sb, #2 - bl TryAssignByteWrapper - mov r5, r0 - add r0, r7, r5 - cmp r0, r8 - bhi _02087294 - mov r1, r6 - mov r2, r5 - add r0, r4, r7 - bl strncpy - add r7, r7, r5 - cmp r7, r8 - bls _02087248 -_02087294: - mov r0, r7 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - arm_func_end wcstombs - - arm_func_start memcpy -memcpy: ; 0x0208729C - mov ip, r0 - cmp r2, #0 - bxeq lr -_020872A8: - ldrsb r3, [r1], #1 - subs r2, r2, #1 - strb r3, [ip], #1 - bne _020872A8 - bx lr - arm_func_end memcpy - - arm_func_start memmove -memmove: ; 0x020872BC - cmp r1, r0 - blo _020872E4 - mov ip, r0 - cmp r2, #0 - bxeq lr -_020872D0: - ldrsb r3, [r1], #1 - subs r2, r2, #1 - strb r3, [ip], #1 - bne _020872D0 - bx lr -_020872E4: - cmp r2, #0 - add r3, r1, r2 - add ip, r0, r2 - bxeq lr -_020872F4: - ldrsb r1, [r3, #-1]! - subs r2, r2, #1 - strb r1, [ip, #-1]! - bne _020872F4 - bx lr - arm_func_end memmove - - arm_func_start memset -memset: ; 0x02087308 - stmdb sp!, {r4, lr} - mov r4, r0 - bl memset_internal - mov r0, r4 - ldmia sp!, {r4, pc} - arm_func_end memset - - arm_func_start memchr -memchr: ; 0x0208731C - cmp r2, #0 - and r3, r1, #0xff - beq _02087340 -_02087328: - ldrb r1, [r0], #1 - cmp r1, r3 - subeq r0, r0, #1 - bxeq lr - subs r2, r2, #1 - bne _02087328 -_02087340: - mov r0, #0 - bx lr - arm_func_end memchr - - arm_func_start memcmp -memcmp: ; 0x02087348 - cmp r2, #0 - beq _02087380 -_02087350: - ldrb ip, [r0], #1 - ldrb r3, [r1], #1 - cmp ip, r3 - beq _02087378 - ldrb r2, [r0, #-1] - ldrb r0, [r1, #-1] - cmp r2, r0 - mvnlo r0, #0 - movhs r0, #1 - bx lr -_02087378: - subs r2, r2, #1 - bne _02087350 -_02087380: - mov r0, #0 - bx lr - arm_func_end memcmp - - arm_func_start memset_internal -memset_internal: ; 0x02087388 - cmp r2, #0x20 - and r3, r1, #0xff - blo _0208741C - rsb r1, r0, #0 - ands ip, r1, #3 - beq _020873B4 - sub r2, r2, ip - and r1, r3, #0xff -_020873A8: - strb r1, [r0], #1 - subs ip, ip, #1 - bne _020873A8 -_020873B4: - cmp r3, #0 - beq _020873CC - mov r1, r3, lsl #0x10 - orr r1, r1, r3, lsl #24 - orr r1, r1, r3, lsl #8 - orr r3, r3, r1 -_020873CC: - movs r1, r2, lsr #5 - beq _02087400 -_020873D4: - str r3, [r0] - str r3, [r0, #4] - str r3, [r0, #8] - str r3, [r0, #0xc] - str r3, [r0, #0x10] - str r3, [r0, #0x14] - str r3, [r0, #0x18] - str r3, [r0, #0x1c] - add r0, r0, #0x20 - subs r1, r1, #1 - bne _020873D4 -_02087400: - and r1, r2, #0x1f - movs r1, r1, lsr #2 - beq _02087418 -_0208740C: - str r3, [r0], #4 - subs r1, r1, #1 - bne _0208740C -_02087418: - and r2, r2, #3 -_0208741C: - cmp r2, #0 - bxeq lr - and r1, r3, #0xff -_02087428: - strb r1, [r0], #1 - subs r2, r2, #1 - bne _02087428 - bx lr - arm_func_end memset_internal - - arm_func_start sub_02087438 -sub_02087438: ; 0x02087438 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x10 - ldrsb r3, [r0, #1] - mov r4, #0 - mov r5, #1 - mov lr, r2 - strb r5, [sp] - strb r4, [sp, #1] - strb r4, [sp, #2] - strb r4, [sp, #3] - strb r4, [sp, #4] - str r4, [sp, #8] - str r4, [sp, #0xc] - cmp r3, #0x25 - add ip, r0, #1 - bne _02087494 - add r0, sp, #0 - strb r3, [sp, #5] - ldmia r0, {r0, r1, r2, r3} - stmia lr, {r0, r1, r2, r3} - add sp, sp, #0x10 - add r0, ip, #1 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_02087494: - mov r2, #2 - mov r0, r4 - mov r5, r2 - mov r6, r4 - mov r7, #1 -_020874A8: - mov r8, r7 - cmp r3, #0x2b - bgt _020874D8 - bge _02087500 - cmp r3, #0x23 - bgt _02087530 - cmp r3, #0x20 - blt _02087530 - beq _02087508 - cmp r3, #0x23 - beq _02087518 - b _02087530 -_020874D8: - cmp r3, #0x30 - bgt _02087530 - cmp r3, #0x2d - blt _02087530 - beq _020874F8 - cmp r3, #0x30 - beq _02087520 - b _02087530 -_020874F8: - strb r6, [sp] - b _02087534 -_02087500: - strb r7, [sp, #1] - b _02087534 -_02087508: - ldrb r4, [sp, #1] - cmp r4, #1 - strneb r5, [sp, #1] - b _02087534 -_02087518: - strb r7, [sp, #3] - b _02087534 -_02087520: - ldrb r4, [sp] - cmp r4, #0 - strneb r2, [sp] - b _02087534 -_02087530: - mov r8, r0 -_02087534: - cmp r8, #0 - ldrnesb r3, [ip, #1]! - bne _020874A8 - cmp r3, #0x2a - bne _0208757C - ldr r0, [r1] - add r0, r0, #4 - str r0, [r1] - ldr r0, [r0, #-4] - str r0, [sp, #8] - cmp r0, #0 - bge _02087574 - rsb r0, r0, #0 - mov r2, #0 - strb r2, [sp] - str r0, [sp, #8] -_02087574: - ldrsb r3, [ip, #1]! - b _020875CC -_0208757C: - ldr r4, _020879C0 ; =_020AEDB0 - mov r5, #0 - mov r0, #0xa - b _020875A0 -_0208758C: - ldr r2, [sp, #8] - sub r3, r3, #0x30 - mla r6, r2, r0, r3 - ldrsb r3, [ip, #1]! - str r6, [sp, #8] -_020875A0: - cmp r3, #0 - blt _020875B0 - cmp r3, #0x80 - blt _020875B8 -_020875B0: - mov r2, r5 - b _020875C4 -_020875B8: - mov r2, r3, lsl #1 - ldrh r2, [r4, r2] - and r2, r2, #8 -_020875C4: - cmp r2, #0 - bne _0208758C -_020875CC: - ldr r2, [sp, #8] - ldr r0, _020879C4 ; =0x000001FD - cmp r2, r0 - ble _020875FC - mov r1, #0xff - add r0, sp, #0 - strb r1, [sp, #5] - ldmia r0, {r0, r1, r2, r3} - stmia lr, {r0, r1, r2, r3} - add sp, sp, #0x10 - add r0, ip, #1 - ldmia sp!, {r4, r5, r6, r7, r8, pc} -_020875FC: - cmp r3, #0x2e - bne _02087690 - ldrsb r3, [ip, #1]! - mov r0, #1 - strb r0, [sp, #2] - cmp r3, #0x2a - bne _02087640 - ldr r0, [r1] - add r0, r0, #4 - str r0, [r1] - ldr r0, [r0, #-4] - ldrsb r3, [ip, #1]! - str r0, [sp, #0xc] - cmp r0, #0 - movlt r0, #0 - strltb r0, [sp, #2] - b _02087690 -_02087640: - ldr r2, _020879C0 ; =_020AEDB0 - mov r4, #0 - mov r0, #0xa - b _02087664 -_02087650: - ldr r1, [sp, #0xc] - sub r3, r3, #0x30 - mla r5, r1, r0, r3 - ldrsb r3, [ip, #1]! - str r5, [sp, #0xc] -_02087664: - cmp r3, #0 - blt _02087674 - cmp r3, #0x80 - blt _0208767C -_02087674: - mov r1, r4 - b _02087688 -_0208767C: - mov r1, r3, lsl #1 - ldrh r1, [r2, r1] - and r1, r1, #8 -_02087688: - cmp r1, #0 - bne _02087650 -_02087690: - cmp r3, #0x6c - mov r0, #1 - bgt _020876C8 - cmp r3, #0x68 - blt _020876BC - beq _020876E4 - cmp r3, #0x6a - beq _02087730 - cmp r3, #0x6c - beq _02087700 - b _02087754 -_020876BC: - cmp r3, #0x4c - beq _02087724 - b _02087754 -_020876C8: - cmp r3, #0x74 - bgt _020876D8 - beq _0208773C - b _02087754 -_020876D8: - cmp r3, #0x7a - beq _02087748 - b _02087754 -_020876E4: - ldrsb r1, [ip, #1] - mov r2, #2 - strb r2, [sp, #4] - cmp r1, #0x68 - streqb r0, [sp, #4] - ldreqsb r3, [ip, #1]! - b _02087758 -_02087700: - ldrsb r1, [ip, #1] - mov r2, #3 - strb r2, [sp, #4] - cmp r1, #0x6c - bne _02087758 - mov r1, #4 - strb r1, [sp, #4] - ldrsb r3, [ip, #1]! - b _02087758 -_02087724: - mov r1, #9 - strb r1, [sp, #4] - b _02087758 -_02087730: - mov r1, #6 - strb r1, [sp, #4] - b _02087758 -_0208773C: - mov r1, #8 - strb r1, [sp, #4] - b _02087758 -_02087748: - mov r1, #7 - strb r1, [sp, #4] - b _02087758 -_02087754: - mov r0, #0 -_02087758: - cmp r0, #0 - ldrnesb r3, [ip, #1]! - strb r3, [sp, #5] - cmp r3, #0x61 - bgt _020877AC - bge _02087894 - cmp r3, #0x47 - bgt _020877A0 - subs r0, r3, #0x41 - addpl pc, pc, r0, lsl #2 - b _020879A0 -_02087784: ; jump table - b _02087894 ; case 0 - b _020879A0 ; case 1 - b _020879A0 ; case 2 - b _020879A0 ; case 3 - b _020878DC ; case 4 - b _0208785C ; case 5 - b _020878CC ; case 6 -_020877A0: - cmp r3, #0x58 - beq _02087820 - b _020879A0 -_020877AC: - cmp r3, #0x63 - bgt _020877BC - beq _0208793C - b _020879A0 -_020877BC: - sub r0, r3, #0x64 - cmp r0, #0x14 - addls pc, pc, r0, lsl #2 - b _020879A0 -_020877CC: ; jump table - b _02087820 ; case 0 - b _020878DC ; case 1 - b _0208785C ; case 2 - b _020878CC ; case 3 - b _020879A0 ; case 4 - b _02087820 ; case 5 - b _020879A0 ; case 6 - b _020879A0 ; case 7 - b _020879A0 ; case 8 - b _020879A0 ; case 9 - b _0208798C ; case 10 - b _02087820 ; case 11 - b _02087918 ; case 12 - b _020879A0 ; case 13 - b _020879A0 ; case 14 - b _02087968 ; case 15 - b _020879A0 ; case 16 - b _02087820 ; case 17 - b _020879A0 ; case 18 - b _020879A0 ; case 19 - b _02087820 ; case 20 -_02087820: - ldrb r0, [sp, #4] - cmp r0, #9 - moveq r0, #0xff - streqb r0, [sp, #5] - beq _020879A8 - ldrb r0, [sp, #2] - cmp r0, #0 - moveq r0, #1 - streq r0, [sp, #0xc] - beq _020879A8 - ldrb r0, [sp] - cmp r0, #2 - moveq r0, #1 - streqb r0, [sp] - b _020879A8 -_0208785C: - ldrb r0, [sp, #4] - cmp r0, #2 - cmpne r0, #6 - cmpne r0, #7 - cmpne r0, #8 - cmpne r0, #4 - moveq r0, #0xff - streqb r0, [sp, #5] - beq _020879A8 - ldrb r0, [sp, #2] - cmp r0, #0 - moveq r0, #6 - streq r0, [sp, #0xc] - b _020879A8 -_02087894: - ldrb r0, [sp, #2] - cmp r0, #0 - moveq r0, #0xd - streq r0, [sp, #0xc] - ldrb r0, [sp, #4] - cmp r0, #2 - cmpne r0, #6 - cmpne r0, #7 - cmpne r0, #8 - cmpne r0, #4 - cmpne r0, #1 - moveq r0, #0xff - streqb r0, [sp, #5] - b _020879A8 -_020878CC: - ldr r0, [sp, #0xc] - cmp r0, #0 - moveq r0, #1 - streq r0, [sp, #0xc] -_020878DC: - ldrb r0, [sp, #4] - cmp r0, #2 - cmpne r0, #6 - cmpne r0, #7 - cmpne r0, #8 - cmpne r0, #4 - cmpne r0, #1 - moveq r0, #0xff - streqb r0, [sp, #5] - beq _020879A8 - ldrb r0, [sp, #2] - cmp r0, #0 - moveq r0, #6 - streq r0, [sp, #0xc] - b _020879A8 -_02087918: - mov r3, #0x78 - mov r2, #1 - mov r1, #3 - mov r0, #8 - strb r3, [sp, #5] - strb r2, [sp, #3] - strb r1, [sp, #4] - str r0, [sp, #0xc] - b _020879A8 -_0208793C: - ldrb r1, [sp, #4] - cmp r1, #3 - moveq r0, #5 - streqb r0, [sp, #4] - beq _020879A8 - ldrb r0, [sp, #2] - cmp r0, #0 - cmpeq r1, #0 - movne r0, #0xff - strneb r0, [sp, #5] - b _020879A8 -_02087968: - ldrb r0, [sp, #4] - cmp r0, #3 - moveq r0, #5 - streqb r0, [sp, #4] - beq _020879A8 - cmp r0, #0 - movne r0, #0xff - strneb r0, [sp, #5] - b _020879A8 -_0208798C: - ldrb r0, [sp, #4] - cmp r0, #9 - moveq r0, #0xff - streqb r0, [sp, #5] - b _020879A8 -_020879A0: - mov r0, #0xff - strb r0, [sp, #5] -_020879A8: - add r0, sp, #0 - ldmia r0, {r0, r1, r2, r3} - stmia lr, {r0, r1, r2, r3} - add r0, ip, #1 - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_020879C0: .word _020AEDB0 -_020879C4: .word 0x000001FD - arm_func_end sub_02087438 - - arm_func_start sub_020879C8 -sub_020879C8: ; 0x020879C8 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x10 - movs sl, r0 - mov r0, #0 - mov r5, r1 - str r0, [sp, #0xc] - ldr r7, [sp, #0x4c] - mov r6, r0 - strb r0, [r5, #-1]! - ldrb r0, [sp, #0x43] - str r1, [sp] - ldrb r8, [sp, #0x45] - str r0, [sp, #4] - ldr r0, [sp, #0x48] - ldrb fp, [sp, #0x41] - str r0, [sp, #8] - cmpeq r7, #0 - bne _02087A3C - ldr r0, [sp, #4] - cmp r0, #0 - beq _02087A28 - cmp r8, #0x6f - beq _02087A3C -_02087A28: - add sp, sp, #0x10 - mov r0, r5 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr -_02087A3C: - cmp r8, #0x69 - bgt _02087A64 - bge _02087A98 - cmp r8, #0x58 - bgt _02087A58 - beq _02087AC4 - b _02087ACC -_02087A58: - cmp r8, #0x64 - beq _02087A98 - b _02087ACC -_02087A64: - cmp r8, #0x6f - bgt _02087A78 - moveq r4, #8 - moveq fp, #0 - b _02087ACC -_02087A78: - cmp r8, #0x78 - bgt _02087ACC - cmp r8, #0x75 - blt _02087ACC - beq _02087AB8 - cmp r8, #0x78 - beq _02087AC4 - b _02087ACC -_02087A98: - cmp sl, #0 - mov r4, #0xa - bge _02087ACC - mov r0, #1 - cmp sl, #0x80000000 - rsbne sl, sl, #0 - str r0, [sp, #0xc] - b _02087ACC -_02087AB8: - mov r4, #0xa - mov fp, #0 - b _02087ACC -_02087AC4: - mov r4, #0x10 - mov fp, #0 -_02087ACC: - mov r0, sl - mov r1, r4 - bl _u32_div_f - mov sb, r1 - mov r0, sl - mov r1, r4 - bl _u32_div_f - cmp sb, #0xa - mov sl, r0 - addlt sb, sb, #0x30 - blt _02087B04 - cmp r8, #0x78 - addeq sb, sb, #0x57 - addne sb, sb, #0x37 -_02087B04: - cmp sl, #0 - strb sb, [r5, #-1]! - add r6, r6, #1 - bne _02087ACC - cmp r4, #8 - bne _02087B38 - ldr r0, [sp, #4] - cmp r0, #0 - ldrnesb r0, [r5] - cmpne r0, #0x30 - movne r0, #0x30 - strneb r0, [r5, #-1]! - addne r6, r6, #1 -_02087B38: - ldrb r0, [sp, #0x40] - cmp r0, #2 - bne _02087B6C - ldr r0, [sp, #0xc] - ldr r7, [sp, #8] - cmp r0, #0 - cmpeq fp, #0 - subne r7, r7, #1 - cmp r4, #0x10 - bne _02087B6C - ldr r0, [sp, #4] - cmp r0, #0 - subne r7, r7, #2 -_02087B6C: - ldr r0, [sp] - sub r1, r0, r5 - ldr r0, _02087C10 ; =0x000001FD - add r1, r7, r1 - cmp r1, r0 - addgt sp, sp, #0x10 - movgt r0, #0 - ldmgtia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - addgt sp, sp, #0x10 - bxgt lr - cmp r6, r7 - bge _02087BB0 - mov r0, #0x30 -_02087BA0: - add r6, r6, #1 - cmp r6, r7 - strb r0, [r5, #-1]! - blt _02087BA0 -_02087BB0: - cmp r4, #0x10 - bne _02087BCC - ldr r0, [sp, #4] - cmp r0, #0 - movne r0, #0x30 - strneb r8, [r5, #-1] - strneb r0, [r5, #-2]! -_02087BCC: - ldr r0, [sp, #0xc] - cmp r0, #0 - movne r0, #0x2d - strneb r0, [r5, #-1]! - bne _02087BFC - cmp fp, #1 - moveq r0, #0x2b - streqb r0, [r5, #-1]! - beq _02087BFC - cmp fp, #2 - moveq r0, #0x20 - streqb r0, [r5, #-1]! -_02087BFC: - mov r0, r5 - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_02087C10: .word 0x000001FD - arm_func_end sub_020879C8 - - arm_func_start sub_02087C14 -sub_02087C14: ; 0x02087C14 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x1c - mov sb, r1 - mov r1, #0 - mov sl, r0 - mov r8, r2 - mov r0, r1 - strb r0, [r8, #-1]! - ldr r0, [sp, #0x58] - cmp sb, #0 - str r0, [sp, #0x14] - ldrb r0, [sp, #0x4f] - cmpeq sl, #0 - str r2, [sp] - str r0, [sp, #4] - ldrb r0, [sp, #0x51] - str r1, [sp, #0x18] - mov fp, r1 - str r0, [sp, #8] - ldr r0, [sp, #0x54] - str r0, [sp, #0xc] - ldrb r0, [sp, #0x4d] - str r0, [sp, #0x10] - ldreq r0, [sp, #0x14] - cmpeq r0, #0 - bne _02087CAC - ldr r0, [sp, #4] - cmp r0, #0 - beq _02087C98 - ldr r0, [sp, #8] - cmp r0, #0x6f - beq _02087CAC -_02087C98: - add sp, sp, #0x1c - mov r0, r8 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr -_02087CAC: - ldr r0, [sp, #8] - cmp r0, #0x69 - bgt _02087CD8 - bge _02087D08 - cmp r0, #0x58 - bgt _02087CCC - beq _02087D5C - b _02087D68 -_02087CCC: - cmp r0, #0x64 - beq _02087D08 - b _02087D68 -_02087CD8: - cmp r0, #0x6f - bgt _02087CE8 - beq _02087D3C - b _02087D68 -_02087CE8: - cmp r0, #0x78 - bgt _02087D68 - cmp r0, #0x75 - blt _02087D68 - beq _02087D4C - cmp r0, #0x78 - beq _02087D5C - b _02087D68 -_02087D08: - subs r0, sl, #0 - sbcs r0, sb, #0 - mov r7, #0xa - mov r6, #0 - bge _02087D68 - cmp sb, #0x80000000 - cmpeq sl, r6 - beq _02087D30 - rsbs sl, sl, #0 - rsc sb, sb, #0 -_02087D30: - mov r0, #1 - str r0, [sp, #0x18] - b _02087D68 -_02087D3C: - mov r6, #0 - str r6, [sp, #0x10] - mov r7, #8 - b _02087D68 -_02087D4C: - mov r6, #0 - str r6, [sp, #0x10] - mov r7, #0xa - b _02087D68 -_02087D5C: - mov r6, #0 - str r6, [sp, #0x10] - mov r7, #0x10 -_02087D68: - mov r4, #0 -_02087D6C: - mov r0, sl - mov r1, sb - mov r2, r7 - mov r3, r6 - bl _ull_mod - mov r5, r0 - mov r0, sl - mov r1, sb - mov r2, r7 - mov r3, r6 - bl _ll_udiv - mov sl, r0 - cmp r5, #0xa - mov sb, r1 - addlt r0, r5, #0x30 - blt _02087DBC - ldr r0, [sp, #8] - cmp r0, #0x78 - addeq r0, r5, #0x57 - addne r0, r5, #0x37 -_02087DBC: - strb r0, [r8, #-1]! - mov r0, #0 - cmp sb, r0 - cmpeq sl, r4 - add fp, fp, #1 - bne _02087D6C - cmp r6, #0 - cmpeq r7, #8 - bne _02087DFC - ldr r0, [sp, #4] - cmp r0, #0 - ldrnesb r0, [r8] - cmpne r0, #0x30 - movne r0, #0x30 - strneb r0, [r8, #-1]! - addne fp, fp, #1 -_02087DFC: - ldrb r0, [sp, #0x4c] - cmp r0, #2 - bne _02087E4C - ldr r0, [sp, #0xc] - str r0, [sp, #0x14] - ldr r0, [sp, #0x18] - cmp r0, #0 - ldreq r0, [sp, #0x10] - cmpeq r0, #0 - ldrne r0, [sp, #0x14] - subne r0, r0, #1 - strne r0, [sp, #0x14] - cmp r6, #0 - cmpeq r7, #0x10 - bne _02087E4C - ldr r0, [sp, #4] - cmp r0, #0 - ldrne r0, [sp, #0x14] - subne r0, r0, #2 - strne r0, [sp, #0x14] -_02087E4C: - ldr r0, [sp] - ldr r1, _02087F0C ; =0x000001FD - sub r2, r0, r8 - ldr r0, [sp, #0x14] - add r0, r0, r2 - cmp r0, r1 - addgt sp, sp, #0x1c - movgt r0, #0 - ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - addgt sp, sp, #0x10 - bxgt lr - ldr r0, [sp, #0x14] - cmp fp, r0 - bge _02087E9C - mov r1, #0x30 -_02087E88: - ldr r0, [sp, #0x14] - add fp, fp, #1 - cmp fp, r0 - strb r1, [r8, #-1]! - blt _02087E88 -_02087E9C: - cmp r6, #0 - cmpeq r7, #0x10 - bne _02087EC4 - ldr r0, [sp, #4] - cmp r0, #0 - beq _02087EC4 - ldr r0, [sp, #8] - mov r1, #0x30 - strb r0, [r8, #-1] - strb r1, [r8, #-2]! -_02087EC4: - ldr r0, [sp, #0x18] - cmp r0, #0 - movne r0, #0x2d - strneb r0, [r8, #-1]! - bne _02087EF8 - ldr r0, [sp, #0x10] - cmp r0, #1 - moveq r0, #0x2b - streqb r0, [r8, #-1]! - beq _02087EF8 - cmp r0, #2 - moveq r0, #0x20 - streqb r0, [r8, #-1]! -_02087EF8: - mov r0, r8 - add sp, sp, #0x1c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_02087F0C: .word 0x000001FD - arm_func_end sub_02087C14 - - arm_func_start sub_02087F10 -sub_02087F10: ; 0x02087F10 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0x44 - ldr r7, [sp, #0x80] - ldr r0, _020883C0 ; =0x000001FD - mov r8, r2 - cmp r7, r0 - ldrb r6, [sp, #0x79] - ldrb r5, [sp, #0x77] - ldrb r4, [sp, #0x75] - ldr r1, [sp, #0x68] - ldr r2, [sp, #0x6c] - addgt sp, sp, #0x44 - movgt r0, #0 - ldmgtia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - addgt sp, sp, #0x10 - bxgt lr - mov sl, #0 - mov sb, #0x20 - add r0, sp, #8 - add r3, sp, #0xc - strb sl, [sp, #8] - strh sb, [sp, #0xa] - bl sub_0208D638 - ldr r0, [sp, #0x68] - ldr r1, [sp, #0x6c] - bl sub_0208C5B4 - mov r2, r0 - mov r0, sl - mov r3, r1 - mov r1, r0 - bl _deq - bne _02087FDC - ldr r3, _020883C4 ; =_020B31E4 - sub r0, r8, #6 - ldrb r2, [r3] - ldrb r1, [r3, #1] - add sp, sp, #0x44 - strb r2, [r8, #-6] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldrb r2, [r3, #4] - ldrb r1, [r3, #5] - strb r2, [r0, #4] - strb r1, [r0, #5] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - add sp, sp, #0x10 - bx lr -_02087FDC: - ldrb r0, [sp, #0x11] - cmp r0, #0x49 - bne _020880EC - ldrsb r0, [sp, #0xc] - cmp r0, #0 - beq _02088078 - cmp r6, #0x41 - sub r0, r8, #5 - bne _0208803C - ldr r3, _020883C8 ; =_020B31EC - add sp, sp, #0x44 - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldrb r1, [r3, #4] - strb r1, [r0, #4] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - add sp, sp, #0x10 - bx lr -_0208803C: - ldr r3, _020883CC ; =_020B31F4 - add sp, sp, #0x44 - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldrb r1, [r3, #4] - strb r1, [r0, #4] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - add sp, sp, #0x10 - bx lr -_02088078: - cmp r6, #0x41 - sub r0, r8, #4 - bne _020880B8 - ldr r3, _020883D0 ; =_020B31FC - add sp, sp, #0x44 - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - add sp, sp, #0x10 - bx lr -_020880B8: - ldr r3, _020883D4 ; =_020B3200 - add sp, sp, #0x44 - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - add sp, sp, #0x10 - bx lr -_020880EC: - cmp r0, #0x4e - bne _020881F8 - ldrsb r0, [sp, #0xc] - cmp r0, #0 - beq _02088184 - cmp r6, #0x41 - sub r0, r8, #5 - bne _02088148 - ldr r3, _020883D8 ; =_020B3204 - add sp, sp, #0x44 - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldrb r1, [r3, #4] - strb r1, [r0, #4] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - add sp, sp, #0x10 - bx lr -_02088148: - ldr r3, _020883DC ; =_020B320C - add sp, sp, #0x44 - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldrb r1, [r3, #4] - strb r1, [r0, #4] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - add sp, sp, #0x10 - bx lr -_02088184: - cmp r6, #0x41 - sub r0, r8, #4 - bne _020881C4 - ldr r3, _020883E0 ; =_020B3214 - add sp, sp, #0x44 - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - add sp, sp, #0x10 - bx lr -_020881C4: - ldr r3, _020883E4 ; =_020B3218 - add sp, sp, #0x44 - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - add sp, sp, #0x10 - bx lr -_020881F8: - mov r3, sl - mov r1, #1 - mov r0, #0x64 - add sb, sp, #0x68 - strb r1, [sp, #0x34] - strb r1, [sp, #0x35] - strb r3, [sp, #0x36] - strb r3, [sp, #0x37] - strb r3, [sp, #0x38] - str r3, [sp, #0x3c] - str r1, [sp, #0x40] - strb r0, [sp, #0x39] -_02088228: - rsb r1, r3, #7 - ldrsb r2, [sb, r3] - ldrsb r0, [sb, r1] - strb r0, [sb, r3] - add r3, r3, #1 - strb r2, [sb, r1] - cmp r3, #4 - blt _02088228 - ldrb r0, [sp, #0x69] - ldrb r1, [sp, #0x68] - ldr sb, _020883E8 ; =0x000007FF - mov r0, r0, lsl #0x11 - orr r1, r0, r1, lsl #25 - add r0, sp, #0x34 - and lr, sb, r1, lsr #21 - sub ip, sp, #8 - ldmia r0, {r0, r1, r2, r3} - stmia ip, {r0, r1, r2, r3} - rsb r0, sb, #0x400 - mov r1, r8 - add r0, lr, r0 - ldmia ip, {r2, r3} - bl sub_020879C8 - cmp r6, #0x61 - moveq r1, #0x70 - movne r1, #0x50 - strb r1, [r0, #-1]! - mov r1, r7, lsl #2 - mov lr, r7 - cmp r7, #1 - add r8, r1, #0xb - add ip, sp, #0x68 - blt _02088338 - mov sb, #0x30 -_020882B0: - cmp r8, #0x40 - bge _02088320 - ldrb r1, [ip, r8, asr #3] - and r2, r8, #7 - rsb r3, r2, #7 - mov r2, r1, asr r3 - sub sl, r8, #4 - bic r1, r8, #7 - bic sl, sl, #7 - cmp r1, sl - add sl, ip, r8, asr #3 - and r1, r2, #0xff - beq _020882F4 - ldrb r2, [sl, #-1] - mov r2, r2, lsl #8 - orr r1, r1, r2, asr r3 - and r1, r1, #0xff -_020882F4: - and r1, r1, #0xf - cmp r1, #0xa - addlo r1, r1, #0x30 - andlo r1, r1, #0xff - blo _02088324 - cmp r6, #0x61 - addeq r1, r1, #0x57 - andeq r1, r1, #0xff - addne r1, r1, #0x37 - andne r1, r1, #0xff - b _02088324 -_02088320: - mov r1, sb -_02088324: - sub lr, lr, #1 - cmp lr, #1 - strb r1, [r0, #-1]! - sub r8, r8, #4 - bge _020882B0 -_02088338: - cmp r7, #0 - cmpeq r5, #0 - movne r1, #0x2e - strneb r1, [r0, #-1]! - mov r1, #0x31 - strb r1, [r0, #-1] - cmp r6, #0x61 - moveq r1, #0x78 - movne r1, #0x58 - strb r1, [r0, #-2]! - mov r1, #0x30 - strb r1, [r0, #-1]! - ldrsb r1, [sp, #0xc] - cmp r1, #0 - movne r1, #0x2d - strneb r1, [r0, #-1]! - addne sp, sp, #0x44 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - addne sp, sp, #0x10 - bxne lr - cmp r4, #1 - moveq r1, #0x2b - streqb r1, [r0, #-1]! - addeq sp, sp, #0x44 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - addeq sp, sp, #0x10 - bxeq lr - cmp r4, #2 - moveq r1, #0x20 - streqb r1, [r0, #-1]! - add sp, sp, #0x44 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_020883C0: .word 0x000001FD -_020883C4: .word _020B31E4 -_020883C8: .word _020B31EC -_020883CC: .word _020B31F4 -_020883D0: .word _020B31FC -_020883D4: .word _020B3200 -_020883D8: .word _020B3204 -_020883DC: .word _020B320C -_020883E0: .word _020B3214 -_020883E4: .word _020B3218 -_020883E8: .word 0x000007FF - arm_func_end sub_02087F10 - - arm_func_start sub_020883EC -sub_020883EC: ; 0x020883EC - stmdb sp!, {r4, lr} - cmp r1, #0 - bge _02088414 -_020883F8: - mov r1, #0 - strh r1, [r0, #2] - mov r1, #1 - strb r1, [r0, #4] - mov r1, #0x30 - strb r1, [r0, #5] - ldmia sp!, {r4, pc} -_02088414: - ldrb lr, [r0, #4] - cmp r1, lr - ldmgeia sp!, {r4, pc} - add ip, r0, #5 - add r2, ip, r1 - add r2, r2, #1 - ldrsb r3, [r2, #-1]! - sub r3, r3, #0x30 - mov r3, r3, lsl #0x18 - mov r3, r3, asr #0x18 - cmp r3, #5 - bne _02088474 - add ip, ip, lr -_02088448: - sub ip, ip, #1 - cmp ip, r2 - bls _02088460 - ldrsb r3, [ip] - cmp r3, #0x30 - beq _02088448 -_02088460: - cmp ip, r2 - ldreqsb r3, [r2, #-1] - andeq r4, r3, #1 - movne r4, #1 - b _0208847C -_02088474: - movgt r4, #1 - movle r4, #0 -_0208847C: - cmp r1, #0 - beq _020884D8 - mov ip, #0 - mov lr, #1 -_0208848C: - ldrsb r3, [r2, #-1]! - sub r3, r3, #0x30 - add r3, r3, r4 - mov r3, r3, lsl #0x18 - mov r3, r3, asr #0x18 - cmp r3, #9 - movgt r4, lr - movle r4, ip - cmp r4, #0 - bne _020884BC - cmp r3, #0 - bne _020884C4 -_020884BC: - sub r1, r1, #1 - b _020884D0 -_020884C4: - add r3, r3, #0x30 - strb r3, [r2] - b _020884D8 -_020884D0: - cmp r1, #0 - bne _0208848C -_020884D8: - cmp r4, #0 - beq _02088500 - ldrsh r3, [r0, #2] - mov r2, #1 - mov r1, #0x31 - add r3, r3, #1 - strh r3, [r0, #2] - strb r2, [r0, #4] - strb r1, [r0, #5] - ldmia sp!, {r4, pc} -_02088500: - cmp r1, #0 - beq _020883F8 - strb r1, [r0, #4] - ldmia sp!, {r4, pc} - arm_func_end sub_020883EC - - arm_func_start sub_02088510 -sub_02088510: ; 0x02088510 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2c - ldr r7, [sp, #0x68] - ldr r3, _02088C48 ; =0x000001FD - ldrb r6, [sp, #0x61] - ldrb r5, [sp, #0x5f] - ldrb r4, [sp, #0x5d] - cmp r7, r3 - mov sl, r0 - mov r8, r1 - mov sb, r2 - addgt sp, sp, #0x2c - movgt r0, #0 - ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - addgt sp, sp, #0x10 - bxgt lr - mov ip, #0 - mov fp, #0x20 - add r0, sp, #0 - add r3, sp, #4 - mov r1, sl - mov r2, r8 - strb ip, [sp] - strh fp, [sp, #2] - bl sub_0208D638 - ldrb r0, [sp, #8] - add r1, sp, #9 - add r0, r1, r0 - b _020885A0 -_02088588: - ldrb r2, [sp, #8] - ldrsh r1, [sp, #6] - sub r2, r2, #1 - add r1, r1, #1 - strb r2, [sp, #8] - strh r1, [sp, #6] -_020885A0: - ldrb r1, [sp, #8] - cmp r1, #1 - bls _020885B8 - ldrsb r1, [r0, #-1]! - cmp r1, #0x30 - beq _02088588 -_020885B8: - ldrb r0, [sp, #9] - cmp r0, #0x30 - beq _020885D8 - cmp r0, #0x49 - beq _020885E4 - cmp r0, #0x4e - beq _02088744 - b _02088898 -_020885D8: - mov r0, #0 - strh r0, [sp, #6] - b _02088898 -_020885E4: - mov r2, #0 - mov r0, sl - mov r1, r8 - mov r3, r2 - bl _dls - bhs _020886A8 - cmp r6, #0 - sub r0, sb, #5 - blt _02088610 - cmp r6, #0x80 - blt _02088618 -_02088610: - mov r1, #0 - b _02088628 -_02088618: - ldr r1, _02088C4C ; =_020AEDB0 - mov r2, r6, lsl #1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_02088628: - cmp r1, #0 - beq _0208866C - ldr r3, _02088C50 ; =_020B31EC - add sp, sp, #0x2c - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldrb r1, [r3, #4] - strb r1, [r0, #4] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr -_0208866C: - ldr r3, _02088C54 ; =_020B31F4 - add sp, sp, #0x2c - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldrb r1, [r3, #4] - strb r1, [r0, #4] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr -_020886A8: - cmp r6, #0 - sub r0, sb, #4 - blt _020886BC - cmp r6, #0x80 - blt _020886C4 -_020886BC: - mov r1, #0 - b _020886D4 -_020886C4: - ldr r1, _02088C4C ; =_020AEDB0 - mov r2, r6, lsl #1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020886D4: - cmp r1, #0 - beq _02088710 - ldr r3, _02088C58 ; =_020B31FC - add sp, sp, #0x2c - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr -_02088710: - ldr r3, _02088C5C ; =_020B3200 - add sp, sp, #0x2c - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr -_02088744: - ldrsb r0, [sp, #4] - cmp r0, #0 - beq _020887FC - cmp r6, #0 - sub r0, sb, #5 - blt _02088764 - cmp r6, #0x80 - blt _0208876C -_02088764: - mov r1, #0 - b _0208877C -_0208876C: - ldr r1, _02088C4C ; =_020AEDB0 - mov r2, r6, lsl #1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_0208877C: - cmp r1, #0 - beq _020887C0 - ldr r3, _02088C60 ; =_020B3204 - add sp, sp, #0x2c - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldrb r1, [r3, #4] - strb r1, [r0, #4] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr -_020887C0: - ldr r3, _02088C64 ; =_020B320C - add sp, sp, #0x2c - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldrb r1, [r3, #4] - strb r1, [r0, #4] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr -_020887FC: - cmp r6, #0 - sub r0, sb, #4 - blt _02088810 - cmp r6, #0x80 - blt _02088818 -_02088810: - mov r1, #0 - b _02088828 -_02088818: - ldr r1, _02088C4C ; =_020AEDB0 - mov r2, r6, lsl #1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_02088828: - cmp r1, #0 - beq _02088864 - ldr r3, _02088C68 ; =_020B3214 - add sp, sp, #0x2c - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr -_02088864: - ldr r3, _02088C6C ; =_020B3218 - add sp, sp, #0x2c - ldrb r2, [r3] - ldrb r1, [r3, #1] - strb r2, [r0] - strb r1, [r0, #1] - ldrb r2, [r3, #2] - ldrb r1, [r3, #3] - strb r2, [r0, #2] - strb r1, [r0, #3] - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr -_02088898: - ldrb r0, [sp, #8] - ldrsh r1, [sp, #6] - sub r8, sb, #1 - sub r0, r0, #1 - add r0, r1, r0 - strh r0, [sp, #6] - mov r0, #0 - strb r0, [r8] - cmp r6, #0x65 - bgt _020888EC - bge _02088978 - cmp r6, #0x47 - bgt _02088C34 - cmp r6, #0x45 - blt _02088C34 - beq _02088978 - cmp r6, #0x46 - beq _02088AC0 - cmp r6, #0x47 - beq _02088904 - b _02088C34 -_020888EC: - cmp r6, #0x66 - bgt _020888FC - beq _02088AC0 - b _02088C34 -_020888FC: - cmp r6, #0x67 - bne _02088C34 -_02088904: - ldrb r0, [sp, #8] - cmp r0, r7 - ble _0208891C - add r0, sp, #4 - mov r1, r7 - bl sub_020883EC -_0208891C: - ldrsh r2, [sp, #6] - mvn r0, #3 - cmp r2, r0 - blt _02088934 - cmp r2, r7 - blt _02088954 -_02088934: - cmp r5, #0 - ldreqb r0, [sp, #8] - subne r7, r7, #1 - subeq r7, r0, #1 - cmp r6, #0x67 - moveq r6, #0x65 - movne r6, #0x45 - b _02088978 -_02088954: - cmp r5, #0 - addne r0, r2, #1 - subne r7, r7, r0 - bne _02088AC0 - ldrb r1, [sp, #8] - add r0, r2, #1 - subs r7, r1, r0 - movmi r7, #0 - b _02088AC0 -_02088978: - ldrb r0, [sp, #8] - add r1, r7, #1 - cmp r0, r1 - ble _02088990 - add r0, sp, #4 - bl sub_020883EC -_02088990: - ldrsh lr, [sp, #6] - mov fp, #0x2b - mov sl, #0 - cmp lr, #0 - rsblt lr, lr, #0 - movlt fp, #0x2d - ldr r3, _02088C70 ; =0x66666667 - mov r0, #0xa - b _020889E4 -_020889B4: - mov r1, lr, lsr #0x1f - smull r2, ip, r3, lr - add ip, r1, ip, asr #2 - smull r1, r2, r0, ip - sub ip, lr, r1 - add r1, ip, #0x30 - strb r1, [r8, #-1]! - mov r2, lr - smull r1, lr, r3, r2 - mov r1, r2, lsr #0x1f - add lr, r1, lr, asr #2 - add sl, sl, #1 -_020889E4: - cmp lr, #0 - bne _020889B4 - cmp sl, #2 - blt _020889B4 - strb fp, [r8, #-1] - strb r6, [r8, #-2]! - sub r1, sb, r8 - ldr r0, _02088C48 ; =0x000001FD - add r1, r7, r1 - cmp r1, r0 - addgt sp, sp, #0x2c - movgt r0, #0 - ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - addgt sp, sp, #0x10 - bxgt lr - ldrb r1, [sp, #8] - add r0, r7, #1 - cmp r1, r0 - bge _02088A50 - add r0, r7, #2 - sub r0, r0, r1 - subs r1, r0, #1 - beq _02088A50 - mov r0, #0x30 -_02088A44: - strb r0, [r8, #-1]! - subs r1, r1, #1 - bne _02088A44 -_02088A50: - ldrb r1, [sp, #8] - add r0, sp, #9 - add r2, r0, r1 - subs r1, r1, #1 - beq _02088A74 -_02088A64: - ldrsb r0, [r2, #-1]! - subs r1, r1, #1 - strb r0, [r8, #-1]! - bne _02088A64 -_02088A74: - cmp r7, #0 - cmpeq r5, #0 - movne r0, #0x2e - strneb r0, [r8, #-1]! - ldrb r0, [sp, #9] - strb r0, [r8, #-1]! - ldrsb r0, [sp, #4] - cmp r0, #0 - movne r0, #0x2d - strneb r0, [r8, #-1]! - bne _02088C34 - cmp r4, #1 - moveq r0, #0x2b - streqb r0, [r8, #-1]! - beq _02088C34 - cmp r4, #2 - moveq r0, #0x20 - streqb r0, [r8, #-1]! - b _02088C34 -_02088AC0: - ldrsh r3, [sp, #6] - ldrb r2, [sp, #8] - sub r0, r2, r3 - subs r1, r0, #1 - movmi r1, #0 - cmp r1, r7 - ble _02088B00 - sub r1, r1, r7 - add r0, sp, #4 - sub r1, r2, r1 - bl sub_020883EC - ldrsh r3, [sp, #6] - ldrb r2, [sp, #8] - sub r0, r2, r3 - subs r1, r0, #1 - movmi r1, #0 -_02088B00: - adds r0, r3, #1 - movmi r0, #0 - ldr r3, _02088C48 ; =0x000001FD - add r6, r0, r1 - cmp r6, r3 - addgt sp, sp, #0x2c - movgt r0, #0 - ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - addgt sp, sp, #0x10 - bxgt lr - add r3, sp, #9 - sub r6, r7, r1 - cmp r6, #0 - add r2, r3, r2 - mov sb, #0 - ble _02088B54 - mov r3, #0x30 -_02088B44: - add sb, sb, #1 - cmp sb, r6 - strb r3, [r8, #-1]! - blt _02088B44 -_02088B54: - mov r6, #0 - b _02088B68 -_02088B5C: - ldrsb r3, [r2, #-1]! - add r6, r6, #1 - strb r3, [r8, #-1]! -_02088B68: - cmp r6, r1 - ldrltb r3, [sp, #8] - cmplt r6, r3 - blt _02088B5C - cmp r6, r1 - bge _02088B94 - mov r3, #0x30 -_02088B84: - add r6, r6, #1 - cmp r6, r1 - strb r3, [r8, #-1]! - blt _02088B84 -_02088B94: - cmp r7, #0 - cmpeq r5, #0 - movne r1, #0x2e - strneb r1, [r8, #-1]! - cmp r0, #0 - beq _02088BFC - ldrb r1, [sp, #8] - mov r5, #0 - sub r1, r0, r1 - cmp r1, #0 - ble _02088BDC - mov r3, #0x30 -_02088BC4: - strb r3, [r8, #-1]! - ldrb r1, [sp, #8] - add r5, r5, #1 - sub r1, r0, r1 - cmp r5, r1 - blt _02088BC4 -_02088BDC: - cmp r5, r0 - bge _02088C04 -_02088BE4: - ldrsb r1, [r2, #-1]! - add r5, r5, #1 - cmp r5, r0 - strb r1, [r8, #-1]! - blt _02088BE4 - b _02088C04 -_02088BFC: - mov r0, #0x30 - strb r0, [r8, #-1]! -_02088C04: - ldrsb r0, [sp, #4] - cmp r0, #0 - movne r0, #0x2d - strneb r0, [r8, #-1]! - bne _02088C34 - cmp r4, #1 - moveq r0, #0x2b - streqb r0, [r8, #-1]! - beq _02088C34 - cmp r4, #2 - moveq r0, #0x20 - streqb r0, [r8, #-1]! -_02088C34: - mov r0, r8 - add sp, sp, #0x2c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_02088C48: .word 0x000001FD -_02088C4C: .word _020AEDB0 -_02088C50: .word _020B31EC -_02088C54: .word _020B31F4 -_02088C58: .word _020B31FC -_02088C5C: .word _020B3200 -_02088C60: .word _020B3204 -_02088C64: .word _020B320C -_02088C68: .word _020B3214 -_02088C6C: .word _020B3218 -_02088C70: .word 0x66666667 - arm_func_end sub_02088510 - - arm_func_start __vsprintf_internal_slice -__vsprintf_internal_slice: ; 0x02088C74 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x22c - mov r3, #0x20 - mov fp, r2 - strb r3, [sp, #0x19] - ldrsb r2, [fp] - mov sb, r0 - mov r8, r1 - cmp r2, #0 - mov sl, #0 - beq _0208947C -_02088CA4: - mov r0, fp - mov r1, #0x25 - bl strchr - str r0, [sp, #0xc] - cmp r0, #0 - bne _02088CF8 - mov r0, fp - bl strlen - movs r2, r0 - add sl, sl, r2 - beq _0208947C - mov r0, r8 - mov r1, fp - blx sb - cmp r0, #0 - bne _0208947C - add sp, sp, #0x22c - mvn r0, #0 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr -_02088CF8: - subs r2, r0, fp - add sl, sl, r2 - beq _02088D28 - mov r0, r8 - mov r1, fp - blx sb - cmp r0, #0 - addeq sp, sp, #0x22c - mvneq r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - addeq sp, sp, #0x10 - bxeq lr -_02088D28: - ldr r0, [sp, #0xc] - add r1, sp, #0x25c - add r2, sp, #0x1c - bl sub_02087438 - ldrb r1, [sp, #0x21] - mov fp, r0 - cmp r1, #0x61 - bgt _02088D94 - bge _020890F8 - cmp r1, #0x47 - bgt _02088D88 - subs r0, r1, #0x41 - addpl pc, pc, r0, lsl #2 - b _02088D7C -_02088D60: ; jump table - b _020890F8 ; case 0 - b _020892E0 ; case 1 - b _020892E0 ; case 2 - b _020892E0 ; case 3 - b _02089090 ; case 4 - b _02089090 ; case 5 - b _02089090 ; case 6 -_02088D7C: - cmp r1, #0x25 - beq _020892CC - b _020892E0 -_02088D88: - cmp r1, #0x58 - beq _02088F54 - b _020892E0 -_02088D94: - cmp r1, #0x75 - bgt _02088DFC - subs r0, r1, #0x64 - addpl pc, pc, r0, lsl #2 - b _02088DF0 -_02088DA8: ; jump table - b _02088E14 ; case 0 - b _02089090 ; case 1 - b _02089090 ; case 2 - b _02089090 ; case 3 - b _020892E0 ; case 4 - b _02088E14 ; case 5 - b _020892E0 ; case 6 - b _020892E0 ; case 7 - b _020892E0 ; case 8 - b _020892E0 ; case 9 - b _02089220 ; case 10 - b _02088F54 ; case 11 - b _020892E0 ; case 12 - b _020892E0 ; case 13 - b _020892E0 ; case 14 - b _02089160 ; case 15 - b _020892E0 ; case 16 - b _02088F54 ; case 17 -_02088DF0: - cmp r1, #0x63 - beq _020892AC - b _020892E0 -_02088DFC: - cmp r1, #0x78 - bgt _02088E0C - beq _02088F54 - b _020892E0 -_02088E0C: - cmp r1, #0xff - b _020892E0 -_02088E14: - ldrb r0, [sp, #0x20] - cmp r0, #3 - bne _02088E34 - ldr r1, [sp, #0x25c] - add r1, r1, #4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-4] - b _02088ECC -_02088E34: - cmp r0, #4 - bne _02088E5C - ldr r1, [sp, #0x25c] - add r2, r1, #8 - str r2, [sp, #0x25c] - ldr r1, [r2, #-8] - str r1, [sp, #0x10] - ldr r1, [r2, #-4] - str r1, [sp, #0x14] - b _02088ECC -_02088E5C: - cmp r0, #6 - bne _02088E84 - ldr r1, [sp, #0x25c] - add r2, r1, #8 - str r2, [sp, #0x25c] - ldr r1, [r2, #-8] - str r1, [sp, #0x10] - ldr r1, [r2, #-4] - str r1, [sp, #0x14] - b _02088ECC -_02088E84: - cmp r0, #7 - bne _02088EA0 - ldr r1, [sp, #0x25c] - add r1, r1, #4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-4] - b _02088ECC -_02088EA0: - cmp r0, #8 - bne _02088EBC - ldr r1, [sp, #0x25c] - add r1, r1, #4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-4] - b _02088ECC -_02088EBC: - ldr r1, [sp, #0x25c] - add r1, r1, #4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-4] -_02088ECC: - cmp r0, #2 - moveq r1, r5, lsl #0x10 - moveq r5, r1, asr #0x10 - cmp r0, #1 - moveq r1, r5, lsl #0x18 - moveq r5, r1, asr #0x18 - cmp r0, #4 - cmpne r0, #6 - add r0, sp, #0x1c - bne _02088F20 - sub r4, sp, #4 - ldmia r0, {r0, r1, r2, r3} - stmia r4, {r0, r1, r2, r3} - ldr r3, [r4] - ldr r0, [sp, #0x10] - ldr r1, [sp, #0x14] - add r2, sp, #0x22c - bl sub_02087C14 - movs r7, r0 - beq _020892E0 - b _02088F44 -_02088F20: - sub r4, sp, #8 - ldmia r0, {r0, r1, r2, r3} - stmia r4, {r0, r1, r2, r3} - add r1, sp, #0x22c - mov r0, r5 - ldmia r4, {r2, r3} - bl sub_020879C8 - movs r7, r0 - beq _020892E0 -_02088F44: - add r0, sp, #0x200 - add r0, r0, #0x2b - sub r6, r0, r7 - b _0208932C -_02088F54: - ldrb r0, [sp, #0x20] - cmp r0, #3 - bne _02088F74 - ldr r1, [sp, #0x25c] - add r1, r1, #4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-4] - b _0208900C -_02088F74: - cmp r0, #4 - bne _02088F9C - ldr r1, [sp, #0x25c] - add r2, r1, #8 - str r2, [sp, #0x25c] - ldr r1, [r2, #-8] - str r1, [sp, #0x10] - ldr r1, [r2, #-4] - str r1, [sp, #0x14] - b _0208900C -_02088F9C: - cmp r0, #6 - bne _02088FC4 - ldr r1, [sp, #0x25c] - add r2, r1, #8 - str r2, [sp, #0x25c] - ldr r1, [r2, #-8] - str r1, [sp, #0x10] - ldr r1, [r2, #-4] - str r1, [sp, #0x14] - b _0208900C -_02088FC4: - cmp r0, #7 - bne _02088FE0 - ldr r1, [sp, #0x25c] - add r1, r1, #4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-4] - b _0208900C -_02088FE0: - cmp r0, #8 - bne _02088FFC - ldr r1, [sp, #0x25c] - add r1, r1, #4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-4] - b _0208900C -_02088FFC: - ldr r1, [sp, #0x25c] - add r1, r1, #4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-4] -_0208900C: - cmp r0, #2 - moveq r1, r5, lsl #0x10 - moveq r5, r1, lsr #0x10 - cmp r0, #1 - andeq r5, r5, #0xff - cmp r0, #4 - cmpne r0, #6 - add r0, sp, #0x1c - bne _0208905C - sub r4, sp, #4 - ldmia r0, {r0, r1, r2, r3} - stmia r4, {r0, r1, r2, r3} - ldr r3, [r4] - ldr r0, [sp, #0x10] - ldr r1, [sp, #0x14] - add r2, sp, #0x22c - bl sub_02087C14 - movs r7, r0 - beq _020892E0 - b _02089080 -_0208905C: - sub r4, sp, #8 - ldmia r0, {r0, r1, r2, r3} - stmia r4, {r0, r1, r2, r3} - add r1, sp, #0x22c - mov r0, r5 - ldmia r4, {r2, r3} - bl sub_020879C8 - movs r7, r0 - beq _020892E0 -_02089080: - add r0, sp, #0x200 - add r0, r0, #0x2b - sub r6, r0, r7 - b _0208932C -_02089090: - ldrb r0, [sp, #0x20] - cmp r0, #9 - ldrne r0, [sp, #0x25c] - addne r0, r0, #8 - strne r0, [sp, #0x25c] - bne _020890B4 - ldr r0, [sp, #0x25c] - add r0, r0, #8 - str r0, [sp, #0x25c] -_020890B4: - ldr r7, [r0, #-8] - ldr r6, [r0, #-4] - add r0, sp, #0x1c - sub r4, sp, #4 - ldmia r0, {r0, r1, r2, r3} - stmia r4, {r0, r1, r2, r3} - ldr r3, [r4] - mov r0, r7 - mov r1, r6 - add r2, sp, #0x22c - bl sub_02088510 - movs r7, r0 - beq _020892E0 - add r0, sp, #0x200 - add r0, r0, #0x2b - sub r6, r0, r7 - b _0208932C -_020890F8: - ldrb r0, [sp, #0x20] - cmp r0, #9 - ldrne r0, [sp, #0x25c] - addne r0, r0, #8 - strne r0, [sp, #0x25c] - bne _0208911C - ldr r0, [sp, #0x25c] - add r0, r0, #8 - str r0, [sp, #0x25c] -_0208911C: - ldr r7, [r0, #-8] - ldr r6, [r0, #-4] - add r0, sp, #0x1c - sub r4, sp, #4 - ldmia r0, {r0, r1, r2, r3} - stmia r4, {r0, r1, r2, r3} - ldr r3, [r4] - mov r0, r7 - mov r1, r6 - add r2, sp, #0x22c - bl sub_02087F10 - movs r7, r0 - beq _020892E0 - add r0, sp, #0x200 - add r0, r0, #0x2b - sub r6, r0, r7 - b _0208932C -_02089160: - ldrb r0, [sp, #0x20] - cmp r0, #5 - bne _020891A0 - ldr r0, [sp, #0x25c] - mov r2, #0x200 - add r0, r0, #4 - str r0, [sp, #0x25c] - ldr r1, [r0, #-4] - add r0, sp, #0x2c - cmp r1, #0 - ldreq r1, _02089490 ; =_020B321C - bl wcstombs - cmp r0, #0 - blt _020892E0 - add r7, sp, #0x2c - b _020891B0 -_020891A0: - ldr r0, [sp, #0x25c] - add r0, r0, #4 - str r0, [sp, #0x25c] - ldr r7, [r0, #-4] -_020891B0: - ldrb r0, [sp, #0x1f] - cmp r7, #0 - ldreq r7, _02089494 ; =_020B3220 - cmp r0, #0 - beq _020891E4 - ldrb r0, [sp, #0x1e] - ldrb r6, [r7], #1 - cmp r0, #0 - beq _0208932C - ldr r0, [sp, #0x28] - cmp r6, r0 - movgt r6, r0 - b _0208932C -_020891E4: - ldrb r0, [sp, #0x1e] - cmp r0, #0 - beq _02089210 - ldr r6, [sp, #0x28] - mov r0, r7 - mov r2, r6 - mov r1, #0 - bl memchr - cmp r0, #0 - subne r6, r0, r7 - b _0208932C -_02089210: - mov r0, r7 - bl strlen - mov r6, r0 - b _0208932C -_02089220: - ldr r1, [sp, #0x25c] - ldrb r0, [sp, #0x20] - add r1, r1, #4 - str r1, [sp, #0x25c] - ldr r1, [r1, #-4] - cmp r0, #8 - addls pc, pc, r0, lsl #2 - b _02089470 -_02089240: ; jump table - b _02089264 ; case 0 - b _02089470 ; case 1 - b _0208926C ; case 2 - b _02089274 ; case 3 - b _0208929C ; case 4 - b _02089470 ; case 5 - b _0208927C ; case 6 - b _0208928C ; case 7 - b _02089294 ; case 8 -_02089264: - str sl, [r1] - b _02089470 -_0208926C: - strh sl, [r1] - b _02089470 -_02089274: - str sl, [r1] - b _02089470 -_0208927C: - str sl, [r1] - mov r0, sl, asr #0x1f - str r0, [r1, #4] - b _02089470 -_0208928C: - str sl, [r1] - b _02089470 -_02089294: - str sl, [r1] - b _02089470 -_0208929C: - str sl, [r1] - mov r0, sl, asr #0x1f - str r0, [r1, #4] - b _02089470 -_020892AC: - ldr r0, [sp, #0x25c] - add r7, sp, #0x2c - add r0, r0, #4 - str r0, [sp, #0x25c] - ldr r0, [r0, #-4] - mov r6, #1 - strb r0, [sp, #0x2c] - b _0208932C -_020892CC: - mov r0, #0x25 - strb r0, [sp, #0x2c] - add r7, sp, #0x2c - mov r6, #1 - b _0208932C -_020892E0: - ldr r0, [sp, #0xc] - bl strlen - movs r4, r0 - beq _02089318 - ldr r1, [sp, #0xc] - mov r0, r8 - mov r2, r4 - blx sb - cmp r0, #0 - addeq sp, sp, #0x22c - mvneq r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - addeq sp, sp, #0x10 - bxeq lr -_02089318: - add sp, sp, #0x22c - add r0, sl, r4 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr -_0208932C: - ldrb r0, [sp, #0x1c] - mov r4, r6 - cmp r0, #0 - beq _020893E0 - cmp r0, #2 - moveq r0, #0x30 - movne r0, #0x20 - strb r0, [sp, #0x19] - ldrsb r0, [r7] - cmp r0, #0x2b - cmpne r0, #0x2d - cmpne r0, #0x20 - bne _0208939C - ldrsb r0, [sp, #0x19] - cmp r0, #0x30 - bne _0208939C - mov r0, r8 - mov r1, r7 - mov r2, #1 - blx sb - cmp r0, #0 - addeq sp, sp, #0x22c - mvneq r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - addeq sp, sp, #0x10 - bxeq lr - add r7, r7, #1 - sub r6, r6, #1 -_0208939C: - ldr r0, [sp, #0x24] - cmp r4, r0 - bge _020893E0 -_020893A8: - mov r0, r8 - add r1, sp, #0x19 - mov r2, #1 - blx sb - cmp r0, #0 - addeq sp, sp, #0x22c - mvneq r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x24] - add r4, r4, #1 - cmp r4, r0 - blt _020893A8 -_020893E0: - cmp r6, #0 - beq _02089410 - mov r0, r8 - mov r1, r7 - mov r2, r6 - blx sb - cmp r0, #0 - addeq sp, sp, #0x22c - mvneq r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - addeq sp, sp, #0x10 - bxeq lr -_02089410: - ldrb r0, [sp, #0x1c] - cmp r0, #0 - bne _0208946C - ldr r0, [sp, #0x24] - cmp r4, r0 - bge _0208946C - mov r6, #0x20 - add r7, sp, #0x18 -_02089430: - mov r0, r8 - mov r1, r7 - mov r2, #1 - strb r6, [sp, #0x18] - blx sb - cmp r0, #0 - addeq sp, sp, #0x22c - mvneq r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x24] - add r4, r4, #1 - cmp r4, r0 - blt _02089430 -_0208946C: - add sl, sl, r4 -_02089470: - ldrsb r0, [fp] - cmp r0, #0 - bne _02088CA4 -_0208947C: - mov r0, sl - add sp, sp, #0x22c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - add sp, sp, #0x10 - bx lr - .align 2, 0 -_02089490: .word _020B321C -_02089494: .word _020B3220 - arm_func_end __vsprintf_internal_slice - - arm_func_start TryAppendToSlice -TryAppendToSlice: ; 0x02089498 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r0 - ldr r3, [r4, #8] - mov r5, r2 - ldr r2, [r4, #4] - add r0, r3, r5 - cmp r0, r2 - ldr r0, [r4] - subhi r5, r2, r3 - mov r2, r5 - add r0, r0, r3 - bl memcpy - ldr r1, [r4, #8] - mov r0, #1 - add r1, r1, r5 - str r1, [r4, #8] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end TryAppendToSlice - - arm_func_start __vsprintf_internal -__vsprintf_internal: ; 0x020894DC - stmdb sp!, {r4, r5, lr} - sub sp, sp, #0xc - mov r5, r0 - mov r4, r1 - mov ip, #0 - ldr r0, _02089540 ; =TryAppendToSlice - add r1, sp, #0 - str r5, [sp] - str r4, [sp, #4] - str ip, [sp, #8] - bl __vsprintf_internal_slice - cmp r5, #0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4, r5, pc} - cmp r0, r4 - movlo r1, #0 - addlo sp, sp, #0xc - strlob r1, [r5, r0] - ldmloia sp!, {r4, r5, pc} - cmp r4, #0 - addne r1, r5, r4 - movne r2, #0 - strneb r2, [r1, #-1] - add sp, sp, #0xc - ldmia sp!, {r4, r5, pc} - .align 2, 0 -_02089540: .word TryAppendToSlice - arm_func_end __vsprintf_internal - - arm_func_start vsprintf -vsprintf: ; 0x02089544 - ldr ip, _02089558 ; =__vsprintf_internal - mov r3, r2 - mov r2, r1 - mvn r1, #0 - bx ip - .align 2, 0 -_02089558: .word __vsprintf_internal - arm_func_end vsprintf - - arm_func_start snprintf -snprintf: ; 0x0208955C - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, lr} - add r3, sp, #0x10 - bic r3, r3, #3 - ldr r2, [sp, #0x10] - add r3, r3, #4 - bl __vsprintf_internal - ldmia sp!, {r3, lr} - add sp, sp, #0x10 - bx lr - arm_func_end snprintf - - arm_func_start sprintf -sprintf: ; 0x02089584 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, lr} - add r1, sp, #0xc - bic r1, r1, #3 - add r3, r1, #4 - ldr r2, [sp, #0xc] - mvn r1, #0 - bl __vsprintf_internal - ldmia sp!, {r3, lr} - add sp, sp, #0x10 - bx lr - arm_func_end sprintf - - arm_func_start sub_020895B0 -sub_020895B0: ; 0x020895B0 - ldr r2, _020895D8 ; =_020B3224 - ldr r0, _020895DC ; =0x41C64E6D - ldr r3, [r2] - ldr r1, _020895E0 ; =0x00007FFF - mul r0, r3, r0 - add r0, r0, #0x39 - add r0, r0, #0x3000 - str r0, [r2] - and r0, r1, r0, lsr #16 - bx lr - .align 2, 0 -_020895D8: .word _020B3224 -_020895DC: .word 0x41C64E6D -_020895E0: .word 0x00007FFF - arm_func_end sub_020895B0 - - arm_func_start sub_020895E4 -sub_020895E4: ; 0x020895E4 - ldr r1, _020895F0 ; =_020B3224 - str r0, [r1] - bx lr - .align 2, 0 -_020895F0: .word _020B3224 - arm_func_end sub_020895E4 - - arm_func_start sub_020895F4 -sub_020895F4: ; 0x020895F4 - cmp r2, #0 - beq _02089610 - cmp r2, #1 - beq _02089640 - cmp r2, #2 - beq _02089668 - b _02089670 -_02089610: - ldr r1, [r0] - ldrsb r2, [r1] - cmp r2, #0 - bne _02089630 - mov r1, #1 - str r1, [r0, #4] - sub r0, r1, #2 - bx lr -_02089630: - add r1, r1, #1 - str r1, [r0] - and r0, r2, #0xff - bx lr -_02089640: - ldr r2, [r0, #4] - cmp r2, #0 - movne r2, #0 - strne r2, [r0, #4] - bne _02089660 - ldr r2, [r0] - sub r2, r2, #1 - str r2, [r0] -_02089660: - mov r0, r1 - bx lr -_02089668: - ldr r0, [r0, #4] - bx lr -_02089670: - mov r0, #0 - bx lr - arm_func_end sub_020895F4 diff --git a/asm/main_02086568.s b/asm/main_02086568.s new file mode 100644 index 00000000..d96ded5b --- /dev/null +++ b/asm/main_02086568.s @@ -0,0 +1,3630 @@ + .include "asm/macros.inc" + .include "main_02086568.inc" + + .text + + arm_func_start sub_02086568 +sub_02086568: ; 0x02086568 + bx lr + arm_func_end sub_02086568 + + arm_func_start sub_0208656C +sub_0208656C: ; 0x0208656C + bx lr + arm_func_end sub_0208656C + + arm_func_start sub_02086570 +sub_02086570: ; 0x02086570 + ldr r1, [r0, #0x1c] + str r1, [r0, #0x24] + ldr r3, [r0, #0x20] + str r3, [r0, #0x28] + ldr r2, [r0, #0x18] + ldr r1, [r0, #0x2c] + and r1, r2, r1 + sub r1, r3, r1 + str r1, [r0, #0x28] + ldr r1, [r0, #0x18] + str r1, [r0, #0x34] + bx lr + arm_func_end sub_02086570 + + arm_func_start sub_020865A0 +sub_020865A0: ; 0x020865A0 + stmdb sp!, {r4, r5, r6, lr} + mov r5, r2 + mov r4, r0 + mov r6, r1 + bl sub_02086570 + cmp r5, #1 + ldreq r0, [r4, #0x20] + add r2, r4, #0x28 + streq r0, [r4, #0x28] + ldr r0, [r4] + ldr r1, [r4, #0x1c] + ldr r3, [r4, #0x48] + ldr ip, [r4, #0x3c] + blx ip + cmp r0, #2 + moveq r1, #0 + streq r1, [r4, #0x28] + cmp r6, #0 + ldrne r1, [r4, #0x28] + strne r1, [r6] + cmp r0, #0 + ldmneia sp!, {r4, r5, r6, pc} + ldr r1, [r4, #0x18] + ldr r0, [r4, #0x28] + add r0, r1, r0 + str r0, [r4, #0x18] + ldr r0, [r4, #4] + mov r0, r0, lsl #0x13 + movs r0, r0, lsr #0x1f + bne _02086624 + ldr r0, [r4, #0x1c] + add r1, r4, #0x28 + bl sub_0208656C +_02086624: + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end sub_020865A0 + + arm_func_start sub_0208662C +sub_0208662C: ; 0x0208662C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r2, [r5, #0x24] + ldr r0, [r5, #0x1c] + mov r4, r1 + subs r0, r2, r0 + beq _020866A4 + str r0, [r5, #0x28] + ldr r0, [r5, #4] + mov r0, r0, lsl #0x13 + movs r0, r0, lsr #0x1f + bne _02086668 + ldr r0, [r5, #0x1c] + add r1, r5, #0x28 + bl sub_02086568 +_02086668: + ldr r0, [r5] + ldr r1, [r5, #0x1c] + ldr r3, [r5, #0x48] + ldr ip, [r5, #0x40] + add r2, r5, #0x28 + blx ip + cmp r4, #0 + ldrne r1, [r5, #0x28] + strne r1, [r4] + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, pc} + ldr r1, [r5, #0x18] + ldr r0, [r5, #0x28] + add r0, r1, r0 + str r0, [r5, #0x18] +_020866A4: + mov r0, r5 + bl sub_02086570 + mov r0, #0 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_0208662C + + arm_func_start sub_020866B4 +sub_020866B4: ; 0x020866B4 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr r4, _020867AC ; =_020B2ED4 + mov r7, r3 + cmp r7, r4 + moveq r6, #2 + mov sl, r0 + movne r6, #5 + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _020867B0 ; =_022BC698 + mov sb, r1 + add r0, r5, r4 + mov r8, r2 + bl sub_0207A164 + cmp r0, #0 + bne _02086718 + ldr r0, _020867B4 ; =_022B966C + ldr r2, _020867B8 ; =_022BC650 + ldr r1, [r0, #4] + ldr r0, _020867BC ; =_022BC674 + ldr r3, [r1, #0x6c] + mov r1, #1 + str r3, [r2, r6, lsl #2] + str r1, [r0, r6, lsl #2] + b _02086770 +_02086718: + ldr r0, _020867B4 ; =_022B966C + ldr r1, _020867B8 ; =_022BC650 + ldr r0, [r0, #4] + ldr r1, [r1, r6, lsl #2] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _02086748 + ldr r1, _020867BC ; =_022BC674 + ldr r0, [r1, r6, lsl #2] + add r0, r0, #1 + str r0, [r1, r6, lsl #2] + b _02086770 +_02086748: + add r0, r5, r4 + bl sub_0207A048 + ldr r0, _020867B4 ; =_022B966C + ldr r2, _020867B8 ; =_022BC650 + ldr r1, [r0, #4] + ldr r0, _020867BC ; =_022BC674 + ldr r3, [r1, #0x6c] + mov r1, #1 + str r3, [r2, r6, lsl #2] + str r1, [r0, r6, lsl #2] +_02086770: + mov r0, sl + mov r1, sb + mov r2, r8 + mov r3, r7 + bl sub_020867C0 + ldr r1, _020867BC ; =_022BC674 + mov r7, r0 + ldr r0, [r1, r6, lsl #2] + subs r0, r0, #1 + str r0, [r1, r6, lsl #2] + bne _020867A4 + add r0, r5, r4 + bl sub_0207A0CC +_020867A4: + mov r0, r7 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_020867AC: .word _020B2ED4 +_020867B0: .word _022BC698 +_020867B4: .word _022B966C +_020867B8: .word _022BC650 +_020867BC: .word _022BC674 + arm_func_end sub_020866B4 + + arm_func_start sub_020867C0 +sub_020867C0: ; 0x020867C0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #4 + mov r7, r3 + mov sb, r0 + mov r8, r1 + mov r0, r7 + mov r1, #0 + mov r4, r2 + bl sub_0208B374 + cmp r0, #0 + bne _020867F8 + mov r0, r7 + mvn r1, #0 + bl sub_0208B374 +_020867F8: + muls r4, r8, r4 + beq _0208681C + ldrb r0, [r7, #0xd] + cmp r0, #0 + bne _0208681C + ldr r1, [r7, #4] + mov r0, r1, lsl #0x16 + movs r0, r0, lsr #0x1d + bne _02086828 +_0208681C: + add sp, sp, #4 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} +_02086828: + mov r0, r1, lsl #0x13 + movs r0, r0, lsr #0x1f + movne r0, r1, lsl #0x19 + movne r0, r0, lsr #0x1e + ldr r1, [r7, #8] + cmpne r0, #2 + mov r6, #1 + mov r0, r1, lsl #0x1d + movne r6, #0 + movs r0, r0, lsr #0x1d + bne _0208687C + ldr r0, [r7, #4] + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + tst r0, #1 + beq _0208687C + bic r0, r1, #7 + orr r0, r0, #2 + str r0, [r7, #8] + mov r0, #0 + str r0, [r7, #0x28] +_0208687C: + ldr r0, [r7, #8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #2 + bhs _020868A8 + mov r0, #1 + strb r0, [r7, #0xd] + mov r0, #0 + add sp, sp, #4 + str r0, [r7, #0x28] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} +_020868A8: + ldr r0, [r7, #4] + mov r0, r0, lsl #0x19 + mov r0, r0, lsr #0x1e + tst r0, #1 + beq _020868E0 + bl sub_02086468 + cmp r0, #0 + beq _020868E0 + mov r0, #1 + strb r0, [r7, #0xd] + mov r0, #0 + add sp, sp, #4 + str r0, [r7, #0x28] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} +_020868E0: + cmp r4, #0 + mov r5, #0 + beq _020869A4 + ldr r0, [r7, #8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #3 + blo _020869A4 + mov sl, r5 +_02086904: + mov r0, r7 + mov r1, sl + bl sub_0208B374 + cmp r0, #1 + ldr r0, [r7, #8] + bne _02086938 + mov r0, r0, lsl #0x1d + add r0, r7, r0, lsr #28 + ldrh r0, [r0, #0xe] + add r5, r5, #2 + sub r4, r4, #2 + strh r0, [sb], #2 + b _02086950 +_02086938: + mov r0, r0, lsl #0x1d + add r0, r7, r0, lsr #29 + ldrb r0, [r0, #0xf] + add r5, r5, #1 + sub r4, r4, #1 + strb r0, [sb], #1 +_02086950: + ldr r1, [r7, #8] + cmp r4, #0 + mov r0, r1, lsl #0x1d + mov r0, r0, lsr #0x1d + sub r0, r0, #1 + bic r1, r1, #7 + and r0, r0, #7 + orr r0, r1, r0 + str r0, [r7, #8] + beq _0208698C + ldr r0, [r7, #8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #3 + bhs _02086904 +_0208698C: + ldr r0, [r7, #8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #2 + ldreq r0, [r7, #0x30] + streq r0, [r7, #0x28] +_020869A4: + cmp r4, #0 + beq _02086A68 + ldr r0, [r7, #0x28] + cmp r0, #0 + cmpeq r6, #0 + beq _02086A68 + mov sl, #0 +_020869C0: + ldr r0, [r7, #0x28] + cmp r0, #0 + bne _02086A14 + mov r0, r7 + mov r1, sl + mov r2, sl + bl sub_020865A0 + cmp r0, #0 + beq _02086A14 + cmp r0, #1 + mov r0, #1 + streqb r0, [r7, #0xd] + beq _02086A04 + ldr r1, [r7, #8] + bic r1, r1, #7 + str r1, [r7, #8] + strb r0, [r7, #0xc] +_02086A04: + mov r0, #0 + str r0, [r7, #0x28] + mov r4, #0 + b _02086A68 +_02086A14: + ldr r0, [r7, #0x28] + str r0, [sp] + cmp r0, r4 + strhi r4, [sp] + ldr r1, [r7, #0x24] + ldr r2, [sp] + mov r0, sb + bl memcpy + ldr r2, [sp] + ldr r0, [r7, #0x24] + subs r4, r4, r2 + add r0, r0, r2 + str r0, [r7, #0x24] + ldr r1, [r7, #0x28] + ldr r0, [sp] + add sb, sb, r2 + sub r0, r1, r0 + add r5, r5, r2 + str r0, [r7, #0x28] + cmpne r6, #0 + bne _020869C0 +_02086A68: + cmp r4, #0 + beq _02086AF4 + cmp r6, #0 + bne _02086AF4 + ldr r6, [r7, #0x1c] + ldr sl, [r7, #0x20] + add r1, sp, #0 + str sb, [r7, #0x1c] + mov r0, r7 + mov r2, #1 + str r4, [r7, #0x20] + bl sub_020865A0 + cmp r0, #0 + beq _02086AD4 + cmp r0, #1 + mov r0, #1 + bne _02086ABC + strb r0, [r7, #0xd] + mov r0, #0 + str r0, [r7, #0x28] + b _02086AD4 +_02086ABC: + ldr r1, [r7, #8] + bic r1, r1, #7 + str r1, [r7, #8] + strb r0, [r7, #0xc] + mov r0, #0 + str r0, [r7, #0x28] +_02086AD4: + ldr r1, [sp] + mov r0, r7 + str r6, [r7, #0x1c] + str sl, [r7, #0x20] + add r5, r5, r1 + bl sub_02086570 + mov r0, #0 + str r0, [r7, #0x28] +_02086AF4: + mov r0, r5 + mov r1, r8 + bl _u32_div_f + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} + arm_func_end sub_020867C0 + + arm_func_start sub_02086B08 +sub_02086B08: ; 0x02086B08 + stmdb sp!, {r3, r4, r5, lr} + movs r5, r0 + mvneq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r1, [r5, #4] + mov r1, r1, lsl #0x16 + movs r1, r1, lsr #0x1d + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + bl sub_02086B7C + mov r4, r0 + ldr r0, [r5] + ldr r1, [r5, #0x44] + blx r1 + ldr r1, [r5, #4] + mov r2, #0 + bic r1, r1, #0x380 + str r1, [r5, #4] + str r2, [r5] + ldr r1, [r5, #8] + mov r1, r1, lsl #0x1c + movs r1, r1, lsr #0x1f + subne r0, r2, #1 + ldmneia sp!, {r3, r4, r5, pc} + cmp r4, #0 + cmpeq r0, #0 + movne r2, #1 + rsb r0, r2, #0 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02086B08 + + arm_func_start sub_02086B7C +sub_02086B7C: ; 0x02086B7C + stmdb sp!, {r4, lr} + movs r4, r0 + bne _02086B90 + bl sub_020864F4 + ldmia sp!, {r4, pc} +_02086B90: + ldrb r0, [r4, #0xd] + cmp r0, #0 + bne _02086BAC + ldr r0, [r4, #4] + mov r1, r0, lsl #0x16 + movs r1, r1, lsr #0x1d + bne _02086BB4 +_02086BAC: + mvn r0, #0 + ldmia sp!, {r4, pc} +_02086BB4: + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + cmp r0, #1 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #8] + mov r1, r0, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #3 + bichs r0, r0, #7 + orrhs r0, r0, #2 + strhs r0, [r4, #8] + ldr r0, [r4, #8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #2 + moveq r0, #0 + streq r0, [r4, #0x28] + ldr r0, [r4, #8] + mov r1, r0, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #1 + beq _02086C20 + bic r0, r0, #7 + str r0, [r4, #8] + mov r0, #0 + ldmia sp!, {r4, pc} +_02086C20: + mov r0, r4 + mov r1, #0 + bl sub_0208662C + cmp r0, #0 + mov r0, #0 + beq _02086C4C + mov r1, #1 + strb r1, [r4, #0xd] + str r0, [r4, #0x28] + sub r0, r0, #1 + ldmia sp!, {r4, pc} +_02086C4C: + ldr r1, [r4, #8] + bic r1, r1, #7 + str r1, [r4, #8] + str r0, [r4, #0x18] + str r0, [r4, #0x28] + ldmia sp!, {r4, pc} + arm_func_end sub_02086B7C + + arm_func_start sub_02086C64 +sub_02086C64: ; 0x02086C64 + stmdb sp!, {r3, r4, r5, lr} + cmp r2, #0 + mov lr, #0 + ble _02086CE0 + ldr ip, _02086CE8 ; =_020AECB0 +_02086C78: + ldrsb r3, [r0], #1 + cmp r3, #0 + blt _02086C90 + cmp r3, #0x80 + bge _02086C90 + ldrb r3, [ip, r3] +_02086C90: + ldrsb r5, [r1], #1 + mov r3, r3, lsl #0x18 + mov r4, r3, asr #0x18 + cmp r5, #0 + blt _02086CB0 + cmp r5, #0x80 + bge _02086CB0 + ldrb r5, [ip, r5] +_02086CB0: + mov r3, r5, lsl #0x18 + cmp r4, r3, asr #24 + mvnlt r0, #0 + ldmltia sp!, {r3, r4, r5, pc} + movgt r0, #1 + ldmgtia sp!, {r3, r4, r5, pc} + cmp r4, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, pc} + add lr, lr, #1 + cmp lr, r2 + blt _02086C78 +_02086CE0: + mov r0, #0 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02086CE8: .word _020AECB0 + arm_func_end sub_02086C64 + + arm_func_start sub_02086CEC +sub_02086CEC: ; 0x02086CEC + ldr r1, [r0, #4] + mov r1, r1, lsl #0x16 + mov r1, r1, lsr #0x1d + and r1, r1, #0xff + add r1, r1, #0xff + and r1, r1, #0xff + cmp r1, #1 + bhi _02086D18 + ldrb r1, [r0, #0xd] + cmp r1, #0 + beq _02086D2C +_02086D18: + ldr r0, _02086D64 ; =_022BCA70 + mov r1, #0x28 + str r1, [r0] + sub r0, r1, #0x29 + bx lr +_02086D2C: + ldr r1, [r0, #8] + mov r1, r1, lsl #0x1d + movs ip, r1, lsr #0x1d + ldreq r0, [r0, #0x18] + bxeq lr + ldr r2, [r0, #0x24] + ldr r1, [r0, #0x1c] + ldr r3, [r0, #0x34] + sub r0, r2, r1 + cmp ip, #3 + add r0, r3, r0 + subhs r1, ip, #2 + subhs r0, r0, r1 + bx lr + .align 2, 0 +_02086D64: .word _022BCA70 + arm_func_end sub_02086CEC + + arm_func_start sub_02086D68 +sub_02086D68: ; 0x02086D68 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r1, _02086E68 ; =_020B2ED4 + mov r7, r0 + cmp r7, r1 + moveq r6, #2 + beq _02086DA0 + ldr r0, _02086E6C ; =_020B2F20 + cmp r7, r0 + moveq r6, #3 + beq _02086DA0 + ldr r0, _02086E70 ; =_020B2F6C + cmp r7, r0 + moveq r6, #4 + movne r6, #5 +_02086DA0: + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _02086E74 ; =_022BC698 + add r0, r5, r4 + bl sub_0207A164 + cmp r0, #0 + bne _02086DE0 + ldr r0, _02086E78 ; =_022B966C + ldr r2, _02086E7C ; =_022BC650 + ldr r1, [r0, #4] + ldr r0, _02086E80 ; =_022BC674 + ldr r3, [r1, #0x6c] + mov r1, #1 + str r3, [r2, r6, lsl #2] + str r1, [r0, r6, lsl #2] + b _02086E38 +_02086DE0: + ldr r0, _02086E78 ; =_022B966C + ldr r1, _02086E7C ; =_022BC650 + ldr r0, [r0, #4] + ldr r1, [r1, r6, lsl #2] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _02086E10 + ldr r1, _02086E80 ; =_022BC674 + ldr r0, [r1, r6, lsl #2] + add r0, r0, #1 + str r0, [r1, r6, lsl #2] + b _02086E38 +_02086E10: + add r0, r5, r4 + bl sub_0207A048 + ldr r0, _02086E78 ; =_022B966C + ldr r2, _02086E7C ; =_022BC650 + ldr r1, [r0, #4] + ldr r0, _02086E80 ; =_022BC674 + ldr r3, [r1, #0x6c] + mov r1, #1 + str r3, [r2, r6, lsl #2] + str r1, [r0, r6, lsl #2] +_02086E38: + mov r0, r7 + bl sub_02086CEC + ldr r1, _02086E80 ; =_022BC674 + mov r7, r0 + ldr r0, [r1, r6, lsl #2] + subs r0, r0, #1 + str r0, [r1, r6, lsl #2] + bne _02086E60 + add r0, r5, r4 + bl sub_0207A0CC +_02086E60: + mov r0, r7 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02086E68: .word _020B2ED4 +_02086E6C: .word _020B2F20 +_02086E70: .word _020B2F6C +_02086E74: .word _022BC698 +_02086E78: .word _022B966C +_02086E7C: .word _022BC650 +_02086E80: .word _022BC674 + arm_func_end sub_02086D68 + + arm_func_start sub_02086E84 +sub_02086E84: ; 0x02086E84 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + ldr r1, [r5, #4] + mov r4, r2 + mov r1, r1, lsl #0x16 + mov r1, r1, lsr #0x1d + and r1, r1, #0xff + cmp r1, #1 + ldreqb r1, [r5, #0xd] + cmpeq r1, #0 + beq _02086ED0 + ldr r0, _02087068 ; =_022BCA70 + mov r1, #0x28 + str r1, [r0] + sub r0, r1, #0x29 + ldmia sp!, {r3, r4, r5, lr} + add sp, sp, #0x10 + bx lr +_02086ED0: + ldr r1, [r5, #8] + mov r1, r1, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #1 + bne _02086F20 + mov r1, #0 + bl sub_0208662C + cmp r0, #0 + beq _02086F20 + mov r0, #1 + strb r0, [r5, #0xd] + mov r2, #0 + ldr r0, _02087068 ; =_022BCA70 + mov r1, #0x28 + str r2, [r5, #0x28] + str r1, [r0] + sub r0, r1, #0x29 + ldmia sp!, {r3, r4, r5, lr} + add sp, sp, #0x10 + bx lr +_02086F20: + cmp r4, #1 + bne _02086F40 + mov r0, r5 + mov r4, #0 + bl sub_02086CEC + ldr r1, [sp, #0x14] + add r0, r1, r0 + str r0, [sp, #0x14] +_02086F40: + cmp r4, #2 + beq _02086FD4 + ldr r0, [r5, #4] + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + cmp r0, #3 + beq _02086FD4 + ldr r0, [r5, #8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + sub r0, r0, #2 + cmp r0, #1 + bhi _02086FD4 + ldr r2, [sp, #0x14] + ldr r0, [r5, #0x18] + cmp r2, r0 + bhs _02086F90 + ldr r0, [r5, #0x34] + cmp r2, r0 + bhs _02086FA0 +_02086F90: + ldr r0, [r5, #8] + bic r0, r0, #7 + str r0, [r5, #8] + b _02086FE0 +_02086FA0: + ldr r1, [r5, #0x1c] + sub r0, r2, r0 + add r0, r1, r0 + str r0, [r5, #0x24] + ldr r1, [r5, #0x18] + ldr r0, [sp, #0x14] + sub r0, r1, r0 + str r0, [r5, #0x28] + ldr r0, [r5, #8] + bic r0, r0, #7 + orr r0, r0, #2 + str r0, [r5, #8] + b _02086FE0 +_02086FD4: + ldr r0, [r5, #8] + bic r0, r0, #7 + str r0, [r5, #8] +_02086FE0: + ldr r0, [r5, #8] + mov r0, r0, lsl #0x1d + movs r0, r0, lsr #0x1d + bne _02087058 + ldr ip, [r5, #0x38] + cmp ip, #0 + beq _02087044 + ldr r0, [r5] + ldr r3, [r5, #0x48] + add r1, sp, #0x14 + mov r2, r4 + blx ip + cmp r0, #0 + beq _02087044 + mov r0, #1 + strb r0, [r5, #0xd] + mov r2, #0 + ldr r0, _02087068 ; =_022BCA70 + mov r1, #0x28 + str r2, [r5, #0x28] + str r1, [r0] + sub r0, r1, #0x29 + ldmia sp!, {r3, r4, r5, lr} + add sp, sp, #0x10 + bx lr +_02087044: + mov r1, #0 + strb r1, [r5, #0xc] + ldr r0, [sp, #0x14] + str r0, [r5, #0x18] + str r1, [r5, #0x28] +_02087058: + mov r0, #0 + ldmia sp!, {r3, r4, r5, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_02087068: .word _022BCA70 + arm_func_end sub_02086E84 + + arm_func_start sub_0208706C +sub_0208706C: ; 0x0208706C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r3, _0208717C ; =_020B2ED4 + mov sb, r0 + cmp sb, r3 + mov r8, r1 + mov r7, r2 + moveq r6, #2 + beq _020870AC + ldr r0, _02087180 ; =_020B2F20 + cmp sb, r0 + moveq r6, #3 + beq _020870AC + ldr r0, _02087184 ; =_020B2F6C + cmp sb, r0 + moveq r6, #4 + movne r6, #5 +_020870AC: + mov r0, #0x18 + mul r4, r6, r0 + ldr r5, _02087188 ; =_022BC698 + add r0, r5, r4 + bl sub_0207A164 + cmp r0, #0 + bne _020870EC + ldr r0, _0208718C ; =_022B966C + ldr r2, _02087190 ; =_022BC650 + ldr r1, [r0, #4] + ldr r0, _02087194 ; =_022BC674 + ldr r3, [r1, #0x6c] + mov r1, #1 + str r3, [r2, r6, lsl #2] + str r1, [r0, r6, lsl #2] + b _02087144 +_020870EC: + ldr r0, _0208718C ; =_022B966C + ldr r1, _02087190 ; =_022BC650 + ldr r0, [r0, #4] + ldr r1, [r1, r6, lsl #2] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _0208711C + ldr r1, _02087194 ; =_022BC674 + ldr r0, [r1, r6, lsl #2] + add r0, r0, #1 + str r0, [r1, r6, lsl #2] + b _02087144 +_0208711C: + add r0, r5, r4 + bl sub_0207A048 + ldr r0, _0208718C ; =_022B966C + ldr r2, _02087190 ; =_022BC650 + ldr r1, [r0, #4] + ldr r0, _02087194 ; =_022BC674 + ldr r3, [r1, #0x6c] + mov r1, #1 + str r3, [r2, r6, lsl #2] + str r1, [r0, r6, lsl #2] +_02087144: + mov r0, sb + mov r1, r8 + mov r2, r7 + bl sub_02086E84 + ldr r1, _02087194 ; =_022BC674 + mov r7, r0 + ldr r0, [r1, r6, lsl #2] + subs r0, r0, #1 + str r0, [r1, r6, lsl #2] + bne _02087174 + add r0, r5, r4 + bl sub_0207A0CC +_02087174: + mov r0, r7 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0208717C: .word _020B2ED4 +_02087180: .word _020B2F20 +_02087184: .word _020B2F6C +_02087188: .word _022BC698 +_0208718C: .word _022B966C +_02087190: .word _022BC650 +_02087194: .word _022BC674 + arm_func_end sub_0208706C + + arm_func_start sub_02087198 +sub_02087198: ; 0x02087198 + stmdb sp!, {r4, lr} + mov r1, #0 + mov r4, r0 + mov r2, r1 + strb r1, [r4, #0xd] + bl sub_0208706C + mov r0, #0 + strb r0, [r4, #0xd] + ldmia sp!, {r4, pc} + arm_func_end sub_02087198 + + arm_func_start mbtowc +mbtowc: ; 0x020871BC + cmp r1, #0 + moveq r0, #0 + bxeq lr + cmp r2, #0 + mvneq r0, #0 + bxeq lr + cmp r0, #0 + ldrneb r2, [r1] + strneh r2, [r0] + ldrsb r0, [r1] + cmp r0, #0 + moveq r0, #0 + movne r0, #1 + bx lr + arm_func_end mbtowc + + arm_func_start TryAssignByte +TryAssignByte: ; 0x020871F4 + cmp r0, #0 + moveq r0, #0 + strneb r1, [r0] + movne r0, #1 + bx lr + arm_func_end TryAssignByte + + arm_func_start TryAssignByteWrapper +TryAssignByteWrapper: ; 0x02087208 + stmdb sp!, {r3, lr} + ldr r2, _02087220 ; =_020B301C + ldr r2, [r2, #8] + ldr r2, [r2, #4] + blx r2 + ldmia sp!, {r3, pc} + .align 2, 0 +_02087220: .word _020B301C + arm_func_end TryAssignByteWrapper + + arm_func_start wcstombs +wcstombs: ; 0x02087224 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + movs r4, r0 + mov sb, r1 + cmpne sb, #0 + mov r8, r2 + mov r7, #0 + moveq r0, #0 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + add r6, sp, #0 +_02087248: + ldrh r1, [sb] + cmp r1, #0 + moveq r0, #0 + streqb r0, [r4, r7] + beq _02087294 + mov r0, r6 + add sb, sb, #2 + bl TryAssignByteWrapper + mov r5, r0 + add r0, r7, r5 + cmp r0, r8 + bhi _02087294 + mov r1, r6 + mov r2, r5 + add r0, r4, r7 + bl strncpy + add r7, r7, r5 + cmp r7, r8 + bls _02087248 +_02087294: + mov r0, r7 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + arm_func_end wcstombs + + arm_func_start memcpy +memcpy: ; 0x0208729C + mov ip, r0 + cmp r2, #0 + bxeq lr +_020872A8: + ldrsb r3, [r1], #1 + subs r2, r2, #1 + strb r3, [ip], #1 + bne _020872A8 + bx lr + arm_func_end memcpy + + arm_func_start memmove +memmove: ; 0x020872BC + cmp r1, r0 + blo _020872E4 + mov ip, r0 + cmp r2, #0 + bxeq lr +_020872D0: + ldrsb r3, [r1], #1 + subs r2, r2, #1 + strb r3, [ip], #1 + bne _020872D0 + bx lr +_020872E4: + cmp r2, #0 + add r3, r1, r2 + add ip, r0, r2 + bxeq lr +_020872F4: + ldrsb r1, [r3, #-1]! + subs r2, r2, #1 + strb r1, [ip, #-1]! + bne _020872F4 + bx lr + arm_func_end memmove + + arm_func_start memset +memset: ; 0x02087308 + stmdb sp!, {r4, lr} + mov r4, r0 + bl memset_internal + mov r0, r4 + ldmia sp!, {r4, pc} + arm_func_end memset + + arm_func_start memchr +memchr: ; 0x0208731C + cmp r2, #0 + and r3, r1, #0xff + beq _02087340 +_02087328: + ldrb r1, [r0], #1 + cmp r1, r3 + subeq r0, r0, #1 + bxeq lr + subs r2, r2, #1 + bne _02087328 +_02087340: + mov r0, #0 + bx lr + arm_func_end memchr + + arm_func_start memcmp +memcmp: ; 0x02087348 + cmp r2, #0 + beq _02087380 +_02087350: + ldrb ip, [r0], #1 + ldrb r3, [r1], #1 + cmp ip, r3 + beq _02087378 + ldrb r2, [r0, #-1] + ldrb r0, [r1, #-1] + cmp r2, r0 + mvnlo r0, #0 + movhs r0, #1 + bx lr +_02087378: + subs r2, r2, #1 + bne _02087350 +_02087380: + mov r0, #0 + bx lr + arm_func_end memcmp + + arm_func_start memset_internal +memset_internal: ; 0x02087388 + cmp r2, #0x20 + and r3, r1, #0xff + blo _0208741C + rsb r1, r0, #0 + ands ip, r1, #3 + beq _020873B4 + sub r2, r2, ip + and r1, r3, #0xff +_020873A8: + strb r1, [r0], #1 + subs ip, ip, #1 + bne _020873A8 +_020873B4: + cmp r3, #0 + beq _020873CC + mov r1, r3, lsl #0x10 + orr r1, r1, r3, lsl #24 + orr r1, r1, r3, lsl #8 + orr r3, r3, r1 +_020873CC: + movs r1, r2, lsr #5 + beq _02087400 +_020873D4: + str r3, [r0] + str r3, [r0, #4] + str r3, [r0, #8] + str r3, [r0, #0xc] + str r3, [r0, #0x10] + str r3, [r0, #0x14] + str r3, [r0, #0x18] + str r3, [r0, #0x1c] + add r0, r0, #0x20 + subs r1, r1, #1 + bne _020873D4 +_02087400: + and r1, r2, #0x1f + movs r1, r1, lsr #2 + beq _02087418 +_0208740C: + str r3, [r0], #4 + subs r1, r1, #1 + bne _0208740C +_02087418: + and r2, r2, #3 +_0208741C: + cmp r2, #0 + bxeq lr + and r1, r3, #0xff +_02087428: + strb r1, [r0], #1 + subs r2, r2, #1 + bne _02087428 + bx lr + arm_func_end memset_internal + + arm_func_start sub_02087438 +sub_02087438: ; 0x02087438 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + ldrsb r3, [r0, #1] + mov r4, #0 + mov r5, #1 + mov lr, r2 + strb r5, [sp] + strb r4, [sp, #1] + strb r4, [sp, #2] + strb r4, [sp, #3] + strb r4, [sp, #4] + str r4, [sp, #8] + str r4, [sp, #0xc] + cmp r3, #0x25 + add ip, r0, #1 + bne _02087494 + add r0, sp, #0 + strb r3, [sp, #5] + ldmia r0, {r0, r1, r2, r3} + stmia lr, {r0, r1, r2, r3} + add sp, sp, #0x10 + add r0, ip, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_02087494: + mov r2, #2 + mov r0, r4 + mov r5, r2 + mov r6, r4 + mov r7, #1 +_020874A8: + mov r8, r7 + cmp r3, #0x2b + bgt _020874D8 + bge _02087500 + cmp r3, #0x23 + bgt _02087530 + cmp r3, #0x20 + blt _02087530 + beq _02087508 + cmp r3, #0x23 + beq _02087518 + b _02087530 +_020874D8: + cmp r3, #0x30 + bgt _02087530 + cmp r3, #0x2d + blt _02087530 + beq _020874F8 + cmp r3, #0x30 + beq _02087520 + b _02087530 +_020874F8: + strb r6, [sp] + b _02087534 +_02087500: + strb r7, [sp, #1] + b _02087534 +_02087508: + ldrb r4, [sp, #1] + cmp r4, #1 + strneb r5, [sp, #1] + b _02087534 +_02087518: + strb r7, [sp, #3] + b _02087534 +_02087520: + ldrb r4, [sp] + cmp r4, #0 + strneb r2, [sp] + b _02087534 +_02087530: + mov r8, r0 +_02087534: + cmp r8, #0 + ldrnesb r3, [ip, #1]! + bne _020874A8 + cmp r3, #0x2a + bne _0208757C + ldr r0, [r1] + add r0, r0, #4 + str r0, [r1] + ldr r0, [r0, #-4] + str r0, [sp, #8] + cmp r0, #0 + bge _02087574 + rsb r0, r0, #0 + mov r2, #0 + strb r2, [sp] + str r0, [sp, #8] +_02087574: + ldrsb r3, [ip, #1]! + b _020875CC +_0208757C: + ldr r4, _020879C0 ; =_020AEDB0 + mov r5, #0 + mov r0, #0xa + b _020875A0 +_0208758C: + ldr r2, [sp, #8] + sub r3, r3, #0x30 + mla r6, r2, r0, r3 + ldrsb r3, [ip, #1]! + str r6, [sp, #8] +_020875A0: + cmp r3, #0 + blt _020875B0 + cmp r3, #0x80 + blt _020875B8 +_020875B0: + mov r2, r5 + b _020875C4 +_020875B8: + mov r2, r3, lsl #1 + ldrh r2, [r4, r2] + and r2, r2, #8 +_020875C4: + cmp r2, #0 + bne _0208758C +_020875CC: + ldr r2, [sp, #8] + ldr r0, _020879C4 ; =0x000001FD + cmp r2, r0 + ble _020875FC + mov r1, #0xff + add r0, sp, #0 + strb r1, [sp, #5] + ldmia r0, {r0, r1, r2, r3} + stmia lr, {r0, r1, r2, r3} + add sp, sp, #0x10 + add r0, ip, #1 + ldmia sp!, {r4, r5, r6, r7, r8, pc} +_020875FC: + cmp r3, #0x2e + bne _02087690 + ldrsb r3, [ip, #1]! + mov r0, #1 + strb r0, [sp, #2] + cmp r3, #0x2a + bne _02087640 + ldr r0, [r1] + add r0, r0, #4 + str r0, [r1] + ldr r0, [r0, #-4] + ldrsb r3, [ip, #1]! + str r0, [sp, #0xc] + cmp r0, #0 + movlt r0, #0 + strltb r0, [sp, #2] + b _02087690 +_02087640: + ldr r2, _020879C0 ; =_020AEDB0 + mov r4, #0 + mov r0, #0xa + b _02087664 +_02087650: + ldr r1, [sp, #0xc] + sub r3, r3, #0x30 + mla r5, r1, r0, r3 + ldrsb r3, [ip, #1]! + str r5, [sp, #0xc] +_02087664: + cmp r3, #0 + blt _02087674 + cmp r3, #0x80 + blt _0208767C +_02087674: + mov r1, r4 + b _02087688 +_0208767C: + mov r1, r3, lsl #1 + ldrh r1, [r2, r1] + and r1, r1, #8 +_02087688: + cmp r1, #0 + bne _02087650 +_02087690: + cmp r3, #0x6c + mov r0, #1 + bgt _020876C8 + cmp r3, #0x68 + blt _020876BC + beq _020876E4 + cmp r3, #0x6a + beq _02087730 + cmp r3, #0x6c + beq _02087700 + b _02087754 +_020876BC: + cmp r3, #0x4c + beq _02087724 + b _02087754 +_020876C8: + cmp r3, #0x74 + bgt _020876D8 + beq _0208773C + b _02087754 +_020876D8: + cmp r3, #0x7a + beq _02087748 + b _02087754 +_020876E4: + ldrsb r1, [ip, #1] + mov r2, #2 + strb r2, [sp, #4] + cmp r1, #0x68 + streqb r0, [sp, #4] + ldreqsb r3, [ip, #1]! + b _02087758 +_02087700: + ldrsb r1, [ip, #1] + mov r2, #3 + strb r2, [sp, #4] + cmp r1, #0x6c + bne _02087758 + mov r1, #4 + strb r1, [sp, #4] + ldrsb r3, [ip, #1]! + b _02087758 +_02087724: + mov r1, #9 + strb r1, [sp, #4] + b _02087758 +_02087730: + mov r1, #6 + strb r1, [sp, #4] + b _02087758 +_0208773C: + mov r1, #8 + strb r1, [sp, #4] + b _02087758 +_02087748: + mov r1, #7 + strb r1, [sp, #4] + b _02087758 +_02087754: + mov r0, #0 +_02087758: + cmp r0, #0 + ldrnesb r3, [ip, #1]! + strb r3, [sp, #5] + cmp r3, #0x61 + bgt _020877AC + bge _02087894 + cmp r3, #0x47 + bgt _020877A0 + subs r0, r3, #0x41 + addpl pc, pc, r0, lsl #2 + b _020879A0 +_02087784: ; jump table + b _02087894 ; case 0 + b _020879A0 ; case 1 + b _020879A0 ; case 2 + b _020879A0 ; case 3 + b _020878DC ; case 4 + b _0208785C ; case 5 + b _020878CC ; case 6 +_020877A0: + cmp r3, #0x58 + beq _02087820 + b _020879A0 +_020877AC: + cmp r3, #0x63 + bgt _020877BC + beq _0208793C + b _020879A0 +_020877BC: + sub r0, r3, #0x64 + cmp r0, #0x14 + addls pc, pc, r0, lsl #2 + b _020879A0 +_020877CC: ; jump table + b _02087820 ; case 0 + b _020878DC ; case 1 + b _0208785C ; case 2 + b _020878CC ; case 3 + b _020879A0 ; case 4 + b _02087820 ; case 5 + b _020879A0 ; case 6 + b _020879A0 ; case 7 + b _020879A0 ; case 8 + b _020879A0 ; case 9 + b _0208798C ; case 10 + b _02087820 ; case 11 + b _02087918 ; case 12 + b _020879A0 ; case 13 + b _020879A0 ; case 14 + b _02087968 ; case 15 + b _020879A0 ; case 16 + b _02087820 ; case 17 + b _020879A0 ; case 18 + b _020879A0 ; case 19 + b _02087820 ; case 20 +_02087820: + ldrb r0, [sp, #4] + cmp r0, #9 + moveq r0, #0xff + streqb r0, [sp, #5] + beq _020879A8 + ldrb r0, [sp, #2] + cmp r0, #0 + moveq r0, #1 + streq r0, [sp, #0xc] + beq _020879A8 + ldrb r0, [sp] + cmp r0, #2 + moveq r0, #1 + streqb r0, [sp] + b _020879A8 +_0208785C: + ldrb r0, [sp, #4] + cmp r0, #2 + cmpne r0, #6 + cmpne r0, #7 + cmpne r0, #8 + cmpne r0, #4 + moveq r0, #0xff + streqb r0, [sp, #5] + beq _020879A8 + ldrb r0, [sp, #2] + cmp r0, #0 + moveq r0, #6 + streq r0, [sp, #0xc] + b _020879A8 +_02087894: + ldrb r0, [sp, #2] + cmp r0, #0 + moveq r0, #0xd + streq r0, [sp, #0xc] + ldrb r0, [sp, #4] + cmp r0, #2 + cmpne r0, #6 + cmpne r0, #7 + cmpne r0, #8 + cmpne r0, #4 + cmpne r0, #1 + moveq r0, #0xff + streqb r0, [sp, #5] + b _020879A8 +_020878CC: + ldr r0, [sp, #0xc] + cmp r0, #0 + moveq r0, #1 + streq r0, [sp, #0xc] +_020878DC: + ldrb r0, [sp, #4] + cmp r0, #2 + cmpne r0, #6 + cmpne r0, #7 + cmpne r0, #8 + cmpne r0, #4 + cmpne r0, #1 + moveq r0, #0xff + streqb r0, [sp, #5] + beq _020879A8 + ldrb r0, [sp, #2] + cmp r0, #0 + moveq r0, #6 + streq r0, [sp, #0xc] + b _020879A8 +_02087918: + mov r3, #0x78 + mov r2, #1 + mov r1, #3 + mov r0, #8 + strb r3, [sp, #5] + strb r2, [sp, #3] + strb r1, [sp, #4] + str r0, [sp, #0xc] + b _020879A8 +_0208793C: + ldrb r1, [sp, #4] + cmp r1, #3 + moveq r0, #5 + streqb r0, [sp, #4] + beq _020879A8 + ldrb r0, [sp, #2] + cmp r0, #0 + cmpeq r1, #0 + movne r0, #0xff + strneb r0, [sp, #5] + b _020879A8 +_02087968: + ldrb r0, [sp, #4] + cmp r0, #3 + moveq r0, #5 + streqb r0, [sp, #4] + beq _020879A8 + cmp r0, #0 + movne r0, #0xff + strneb r0, [sp, #5] + b _020879A8 +_0208798C: + ldrb r0, [sp, #4] + cmp r0, #9 + moveq r0, #0xff + streqb r0, [sp, #5] + b _020879A8 +_020879A0: + mov r0, #0xff + strb r0, [sp, #5] +_020879A8: + add r0, sp, #0 + ldmia r0, {r0, r1, r2, r3} + stmia lr, {r0, r1, r2, r3} + add r0, ip, #1 + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_020879C0: .word _020AEDB0 +_020879C4: .word 0x000001FD + arm_func_end sub_02087438 + + arm_func_start sub_020879C8 +sub_020879C8: ; 0x020879C8 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x10 + movs sl, r0 + mov r0, #0 + mov r5, r1 + str r0, [sp, #0xc] + ldr r7, [sp, #0x4c] + mov r6, r0 + strb r0, [r5, #-1]! + ldrb r0, [sp, #0x43] + str r1, [sp] + ldrb r8, [sp, #0x45] + str r0, [sp, #4] + ldr r0, [sp, #0x48] + ldrb fp, [sp, #0x41] + str r0, [sp, #8] + cmpeq r7, #0 + bne _02087A3C + ldr r0, [sp, #4] + cmp r0, #0 + beq _02087A28 + cmp r8, #0x6f + beq _02087A3C +_02087A28: + add sp, sp, #0x10 + mov r0, r5 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr +_02087A3C: + cmp r8, #0x69 + bgt _02087A64 + bge _02087A98 + cmp r8, #0x58 + bgt _02087A58 + beq _02087AC4 + b _02087ACC +_02087A58: + cmp r8, #0x64 + beq _02087A98 + b _02087ACC +_02087A64: + cmp r8, #0x6f + bgt _02087A78 + moveq r4, #8 + moveq fp, #0 + b _02087ACC +_02087A78: + cmp r8, #0x78 + bgt _02087ACC + cmp r8, #0x75 + blt _02087ACC + beq _02087AB8 + cmp r8, #0x78 + beq _02087AC4 + b _02087ACC +_02087A98: + cmp sl, #0 + mov r4, #0xa + bge _02087ACC + mov r0, #1 + cmp sl, #0x80000000 + rsbne sl, sl, #0 + str r0, [sp, #0xc] + b _02087ACC +_02087AB8: + mov r4, #0xa + mov fp, #0 + b _02087ACC +_02087AC4: + mov r4, #0x10 + mov fp, #0 +_02087ACC: + mov r0, sl + mov r1, r4 + bl _u32_div_f + mov sb, r1 + mov r0, sl + mov r1, r4 + bl _u32_div_f + cmp sb, #0xa + mov sl, r0 + addlt sb, sb, #0x30 + blt _02087B04 + cmp r8, #0x78 + addeq sb, sb, #0x57 + addne sb, sb, #0x37 +_02087B04: + cmp sl, #0 + strb sb, [r5, #-1]! + add r6, r6, #1 + bne _02087ACC + cmp r4, #8 + bne _02087B38 + ldr r0, [sp, #4] + cmp r0, #0 + ldrnesb r0, [r5] + cmpne r0, #0x30 + movne r0, #0x30 + strneb r0, [r5, #-1]! + addne r6, r6, #1 +_02087B38: + ldrb r0, [sp, #0x40] + cmp r0, #2 + bne _02087B6C + ldr r0, [sp, #0xc] + ldr r7, [sp, #8] + cmp r0, #0 + cmpeq fp, #0 + subne r7, r7, #1 + cmp r4, #0x10 + bne _02087B6C + ldr r0, [sp, #4] + cmp r0, #0 + subne r7, r7, #2 +_02087B6C: + ldr r0, [sp] + sub r1, r0, r5 + ldr r0, _02087C10 ; =0x000001FD + add r1, r7, r1 + cmp r1, r0 + addgt sp, sp, #0x10 + movgt r0, #0 + ldmgtia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + addgt sp, sp, #0x10 + bxgt lr + cmp r6, r7 + bge _02087BB0 + mov r0, #0x30 +_02087BA0: + add r6, r6, #1 + cmp r6, r7 + strb r0, [r5, #-1]! + blt _02087BA0 +_02087BB0: + cmp r4, #0x10 + bne _02087BCC + ldr r0, [sp, #4] + cmp r0, #0 + movne r0, #0x30 + strneb r8, [r5, #-1] + strneb r0, [r5, #-2]! +_02087BCC: + ldr r0, [sp, #0xc] + cmp r0, #0 + movne r0, #0x2d + strneb r0, [r5, #-1]! + bne _02087BFC + cmp fp, #1 + moveq r0, #0x2b + streqb r0, [r5, #-1]! + beq _02087BFC + cmp fp, #2 + moveq r0, #0x20 + streqb r0, [r5, #-1]! +_02087BFC: + mov r0, r5 + add sp, sp, #0x10 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_02087C10: .word 0x000001FD + arm_func_end sub_020879C8 + + arm_func_start sub_02087C14 +sub_02087C14: ; 0x02087C14 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x1c + mov sb, r1 + mov r1, #0 + mov sl, r0 + mov r8, r2 + mov r0, r1 + strb r0, [r8, #-1]! + ldr r0, [sp, #0x58] + cmp sb, #0 + str r0, [sp, #0x14] + ldrb r0, [sp, #0x4f] + cmpeq sl, #0 + str r2, [sp] + str r0, [sp, #4] + ldrb r0, [sp, #0x51] + str r1, [sp, #0x18] + mov fp, r1 + str r0, [sp, #8] + ldr r0, [sp, #0x54] + str r0, [sp, #0xc] + ldrb r0, [sp, #0x4d] + str r0, [sp, #0x10] + ldreq r0, [sp, #0x14] + cmpeq r0, #0 + bne _02087CAC + ldr r0, [sp, #4] + cmp r0, #0 + beq _02087C98 + ldr r0, [sp, #8] + cmp r0, #0x6f + beq _02087CAC +_02087C98: + add sp, sp, #0x1c + mov r0, r8 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr +_02087CAC: + ldr r0, [sp, #8] + cmp r0, #0x69 + bgt _02087CD8 + bge _02087D08 + cmp r0, #0x58 + bgt _02087CCC + beq _02087D5C + b _02087D68 +_02087CCC: + cmp r0, #0x64 + beq _02087D08 + b _02087D68 +_02087CD8: + cmp r0, #0x6f + bgt _02087CE8 + beq _02087D3C + b _02087D68 +_02087CE8: + cmp r0, #0x78 + bgt _02087D68 + cmp r0, #0x75 + blt _02087D68 + beq _02087D4C + cmp r0, #0x78 + beq _02087D5C + b _02087D68 +_02087D08: + subs r0, sl, #0 + sbcs r0, sb, #0 + mov r7, #0xa + mov r6, #0 + bge _02087D68 + cmp sb, #0x80000000 + cmpeq sl, r6 + beq _02087D30 + rsbs sl, sl, #0 + rsc sb, sb, #0 +_02087D30: + mov r0, #1 + str r0, [sp, #0x18] + b _02087D68 +_02087D3C: + mov r6, #0 + str r6, [sp, #0x10] + mov r7, #8 + b _02087D68 +_02087D4C: + mov r6, #0 + str r6, [sp, #0x10] + mov r7, #0xa + b _02087D68 +_02087D5C: + mov r6, #0 + str r6, [sp, #0x10] + mov r7, #0x10 +_02087D68: + mov r4, #0 +_02087D6C: + mov r0, sl + mov r1, sb + mov r2, r7 + mov r3, r6 + bl _ull_mod + mov r5, r0 + mov r0, sl + mov r1, sb + mov r2, r7 + mov r3, r6 + bl _ll_udiv + mov sl, r0 + cmp r5, #0xa + mov sb, r1 + addlt r0, r5, #0x30 + blt _02087DBC + ldr r0, [sp, #8] + cmp r0, #0x78 + addeq r0, r5, #0x57 + addne r0, r5, #0x37 +_02087DBC: + strb r0, [r8, #-1]! + mov r0, #0 + cmp sb, r0 + cmpeq sl, r4 + add fp, fp, #1 + bne _02087D6C + cmp r6, #0 + cmpeq r7, #8 + bne _02087DFC + ldr r0, [sp, #4] + cmp r0, #0 + ldrnesb r0, [r8] + cmpne r0, #0x30 + movne r0, #0x30 + strneb r0, [r8, #-1]! + addne fp, fp, #1 +_02087DFC: + ldrb r0, [sp, #0x4c] + cmp r0, #2 + bne _02087E4C + ldr r0, [sp, #0xc] + str r0, [sp, #0x14] + ldr r0, [sp, #0x18] + cmp r0, #0 + ldreq r0, [sp, #0x10] + cmpeq r0, #0 + ldrne r0, [sp, #0x14] + subne r0, r0, #1 + strne r0, [sp, #0x14] + cmp r6, #0 + cmpeq r7, #0x10 + bne _02087E4C + ldr r0, [sp, #4] + cmp r0, #0 + ldrne r0, [sp, #0x14] + subne r0, r0, #2 + strne r0, [sp, #0x14] +_02087E4C: + ldr r0, [sp] + ldr r1, _02087F0C ; =0x000001FD + sub r2, r0, r8 + ldr r0, [sp, #0x14] + add r0, r0, r2 + cmp r0, r1 + addgt sp, sp, #0x1c + movgt r0, #0 + ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + addgt sp, sp, #0x10 + bxgt lr + ldr r0, [sp, #0x14] + cmp fp, r0 + bge _02087E9C + mov r1, #0x30 +_02087E88: + ldr r0, [sp, #0x14] + add fp, fp, #1 + cmp fp, r0 + strb r1, [r8, #-1]! + blt _02087E88 +_02087E9C: + cmp r6, #0 + cmpeq r7, #0x10 + bne _02087EC4 + ldr r0, [sp, #4] + cmp r0, #0 + beq _02087EC4 + ldr r0, [sp, #8] + mov r1, #0x30 + strb r0, [r8, #-1] + strb r1, [r8, #-2]! +_02087EC4: + ldr r0, [sp, #0x18] + cmp r0, #0 + movne r0, #0x2d + strneb r0, [r8, #-1]! + bne _02087EF8 + ldr r0, [sp, #0x10] + cmp r0, #1 + moveq r0, #0x2b + streqb r0, [r8, #-1]! + beq _02087EF8 + cmp r0, #2 + moveq r0, #0x20 + streqb r0, [r8, #-1]! +_02087EF8: + mov r0, r8 + add sp, sp, #0x1c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_02087F0C: .word 0x000001FD + arm_func_end sub_02087C14 + + arm_func_start sub_02087F10 +sub_02087F10: ; 0x02087F10 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + sub sp, sp, #0x44 + ldr r7, [sp, #0x80] + ldr r0, _020883C0 ; =0x000001FD + mov r8, r2 + cmp r7, r0 + ldrb r6, [sp, #0x79] + ldrb r5, [sp, #0x77] + ldrb r4, [sp, #0x75] + ldr r1, [sp, #0x68] + ldr r2, [sp, #0x6c] + addgt sp, sp, #0x44 + movgt r0, #0 + ldmgtia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + addgt sp, sp, #0x10 + bxgt lr + mov sl, #0 + mov sb, #0x20 + add r0, sp, #8 + add r3, sp, #0xc + strb sl, [sp, #8] + strh sb, [sp, #0xa] + bl sub_0208D638 + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x6c] + bl sub_0208C5B4 + mov r2, r0 + mov r0, sl + mov r3, r1 + mov r1, r0 + bl _deq + bne _02087FDC + ldr r3, _020883C4 ; =_020B31E4 + sub r0, r8, #6 + ldrb r2, [r3] + ldrb r1, [r3, #1] + add sp, sp, #0x44 + strb r2, [r8, #-6] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldrb r2, [r3, #4] + ldrb r1, [r3, #5] + strb r2, [r0, #4] + strb r1, [r0, #5] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + add sp, sp, #0x10 + bx lr +_02087FDC: + ldrb r0, [sp, #0x11] + cmp r0, #0x49 + bne _020880EC + ldrsb r0, [sp, #0xc] + cmp r0, #0 + beq _02088078 + cmp r6, #0x41 + sub r0, r8, #5 + bne _0208803C + ldr r3, _020883C8 ; =_020B31EC + add sp, sp, #0x44 + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldrb r1, [r3, #4] + strb r1, [r0, #4] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + add sp, sp, #0x10 + bx lr +_0208803C: + ldr r3, _020883CC ; =_020B31F4 + add sp, sp, #0x44 + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldrb r1, [r3, #4] + strb r1, [r0, #4] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + add sp, sp, #0x10 + bx lr +_02088078: + cmp r6, #0x41 + sub r0, r8, #4 + bne _020880B8 + ldr r3, _020883D0 ; =_020B31FC + add sp, sp, #0x44 + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + add sp, sp, #0x10 + bx lr +_020880B8: + ldr r3, _020883D4 ; =_020B3200 + add sp, sp, #0x44 + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + add sp, sp, #0x10 + bx lr +_020880EC: + cmp r0, #0x4e + bne _020881F8 + ldrsb r0, [sp, #0xc] + cmp r0, #0 + beq _02088184 + cmp r6, #0x41 + sub r0, r8, #5 + bne _02088148 + ldr r3, _020883D8 ; =_020B3204 + add sp, sp, #0x44 + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldrb r1, [r3, #4] + strb r1, [r0, #4] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + add sp, sp, #0x10 + bx lr +_02088148: + ldr r3, _020883DC ; =_020B320C + add sp, sp, #0x44 + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldrb r1, [r3, #4] + strb r1, [r0, #4] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + add sp, sp, #0x10 + bx lr +_02088184: + cmp r6, #0x41 + sub r0, r8, #4 + bne _020881C4 + ldr r3, _020883E0 ; =_020B3214 + add sp, sp, #0x44 + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + add sp, sp, #0x10 + bx lr +_020881C4: + ldr r3, _020883E4 ; =_020B3218 + add sp, sp, #0x44 + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + add sp, sp, #0x10 + bx lr +_020881F8: + mov r3, sl + mov r1, #1 + mov r0, #0x64 + add sb, sp, #0x68 + strb r1, [sp, #0x34] + strb r1, [sp, #0x35] + strb r3, [sp, #0x36] + strb r3, [sp, #0x37] + strb r3, [sp, #0x38] + str r3, [sp, #0x3c] + str r1, [sp, #0x40] + strb r0, [sp, #0x39] +_02088228: + rsb r1, r3, #7 + ldrsb r2, [sb, r3] + ldrsb r0, [sb, r1] + strb r0, [sb, r3] + add r3, r3, #1 + strb r2, [sb, r1] + cmp r3, #4 + blt _02088228 + ldrb r0, [sp, #0x69] + ldrb r1, [sp, #0x68] + ldr sb, _020883E8 ; =0x000007FF + mov r0, r0, lsl #0x11 + orr r1, r0, r1, lsl #25 + add r0, sp, #0x34 + and lr, sb, r1, lsr #21 + sub ip, sp, #8 + ldmia r0, {r0, r1, r2, r3} + stmia ip, {r0, r1, r2, r3} + rsb r0, sb, #0x400 + mov r1, r8 + add r0, lr, r0 + ldmia ip, {r2, r3} + bl sub_020879C8 + cmp r6, #0x61 + moveq r1, #0x70 + movne r1, #0x50 + strb r1, [r0, #-1]! + mov r1, r7, lsl #2 + mov lr, r7 + cmp r7, #1 + add r8, r1, #0xb + add ip, sp, #0x68 + blt _02088338 + mov sb, #0x30 +_020882B0: + cmp r8, #0x40 + bge _02088320 + ldrb r1, [ip, r8, asr #3] + and r2, r8, #7 + rsb r3, r2, #7 + mov r2, r1, asr r3 + sub sl, r8, #4 + bic r1, r8, #7 + bic sl, sl, #7 + cmp r1, sl + add sl, ip, r8, asr #3 + and r1, r2, #0xff + beq _020882F4 + ldrb r2, [sl, #-1] + mov r2, r2, lsl #8 + orr r1, r1, r2, asr r3 + and r1, r1, #0xff +_020882F4: + and r1, r1, #0xf + cmp r1, #0xa + addlo r1, r1, #0x30 + andlo r1, r1, #0xff + blo _02088324 + cmp r6, #0x61 + addeq r1, r1, #0x57 + andeq r1, r1, #0xff + addne r1, r1, #0x37 + andne r1, r1, #0xff + b _02088324 +_02088320: + mov r1, sb +_02088324: + sub lr, lr, #1 + cmp lr, #1 + strb r1, [r0, #-1]! + sub r8, r8, #4 + bge _020882B0 +_02088338: + cmp r7, #0 + cmpeq r5, #0 + movne r1, #0x2e + strneb r1, [r0, #-1]! + mov r1, #0x31 + strb r1, [r0, #-1] + cmp r6, #0x61 + moveq r1, #0x78 + movne r1, #0x58 + strb r1, [r0, #-2]! + mov r1, #0x30 + strb r1, [r0, #-1]! + ldrsb r1, [sp, #0xc] + cmp r1, #0 + movne r1, #0x2d + strneb r1, [r0, #-1]! + addne sp, sp, #0x44 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + addne sp, sp, #0x10 + bxne lr + cmp r4, #1 + moveq r1, #0x2b + streqb r1, [r0, #-1]! + addeq sp, sp, #0x44 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + addeq sp, sp, #0x10 + bxeq lr + cmp r4, #2 + moveq r1, #0x20 + streqb r1, [r0, #-1]! + add sp, sp, #0x44 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_020883C0: .word 0x000001FD +_020883C4: .word _020B31E4 +_020883C8: .word _020B31EC +_020883CC: .word _020B31F4 +_020883D0: .word _020B31FC +_020883D4: .word _020B3200 +_020883D8: .word _020B3204 +_020883DC: .word _020B320C +_020883E0: .word _020B3214 +_020883E4: .word _020B3218 +_020883E8: .word 0x000007FF + arm_func_end sub_02087F10 + + arm_func_start sub_020883EC +sub_020883EC: ; 0x020883EC + stmdb sp!, {r4, lr} + cmp r1, #0 + bge _02088414 +_020883F8: + mov r1, #0 + strh r1, [r0, #2] + mov r1, #1 + strb r1, [r0, #4] + mov r1, #0x30 + strb r1, [r0, #5] + ldmia sp!, {r4, pc} +_02088414: + ldrb lr, [r0, #4] + cmp r1, lr + ldmgeia sp!, {r4, pc} + add ip, r0, #5 + add r2, ip, r1 + add r2, r2, #1 + ldrsb r3, [r2, #-1]! + sub r3, r3, #0x30 + mov r3, r3, lsl #0x18 + mov r3, r3, asr #0x18 + cmp r3, #5 + bne _02088474 + add ip, ip, lr +_02088448: + sub ip, ip, #1 + cmp ip, r2 + bls _02088460 + ldrsb r3, [ip] + cmp r3, #0x30 + beq _02088448 +_02088460: + cmp ip, r2 + ldreqsb r3, [r2, #-1] + andeq r4, r3, #1 + movne r4, #1 + b _0208847C +_02088474: + movgt r4, #1 + movle r4, #0 +_0208847C: + cmp r1, #0 + beq _020884D8 + mov ip, #0 + mov lr, #1 +_0208848C: + ldrsb r3, [r2, #-1]! + sub r3, r3, #0x30 + add r3, r3, r4 + mov r3, r3, lsl #0x18 + mov r3, r3, asr #0x18 + cmp r3, #9 + movgt r4, lr + movle r4, ip + cmp r4, #0 + bne _020884BC + cmp r3, #0 + bne _020884C4 +_020884BC: + sub r1, r1, #1 + b _020884D0 +_020884C4: + add r3, r3, #0x30 + strb r3, [r2] + b _020884D8 +_020884D0: + cmp r1, #0 + bne _0208848C +_020884D8: + cmp r4, #0 + beq _02088500 + ldrsh r3, [r0, #2] + mov r2, #1 + mov r1, #0x31 + add r3, r3, #1 + strh r3, [r0, #2] + strb r2, [r0, #4] + strb r1, [r0, #5] + ldmia sp!, {r4, pc} +_02088500: + cmp r1, #0 + beq _020883F8 + strb r1, [r0, #4] + ldmia sp!, {r4, pc} + arm_func_end sub_020883EC + + arm_func_start sub_02088510 +sub_02088510: ; 0x02088510 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2c + ldr r7, [sp, #0x68] + ldr r3, _02088C48 ; =0x000001FD + ldrb r6, [sp, #0x61] + ldrb r5, [sp, #0x5f] + ldrb r4, [sp, #0x5d] + cmp r7, r3 + mov sl, r0 + mov r8, r1 + mov sb, r2 + addgt sp, sp, #0x2c + movgt r0, #0 + ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + addgt sp, sp, #0x10 + bxgt lr + mov ip, #0 + mov fp, #0x20 + add r0, sp, #0 + add r3, sp, #4 + mov r1, sl + mov r2, r8 + strb ip, [sp] + strh fp, [sp, #2] + bl sub_0208D638 + ldrb r0, [sp, #8] + add r1, sp, #9 + add r0, r1, r0 + b _020885A0 +_02088588: + ldrb r2, [sp, #8] + ldrsh r1, [sp, #6] + sub r2, r2, #1 + add r1, r1, #1 + strb r2, [sp, #8] + strh r1, [sp, #6] +_020885A0: + ldrb r1, [sp, #8] + cmp r1, #1 + bls _020885B8 + ldrsb r1, [r0, #-1]! + cmp r1, #0x30 + beq _02088588 +_020885B8: + ldrb r0, [sp, #9] + cmp r0, #0x30 + beq _020885D8 + cmp r0, #0x49 + beq _020885E4 + cmp r0, #0x4e + beq _02088744 + b _02088898 +_020885D8: + mov r0, #0 + strh r0, [sp, #6] + b _02088898 +_020885E4: + mov r2, #0 + mov r0, sl + mov r1, r8 + mov r3, r2 + bl _dls + bhs _020886A8 + cmp r6, #0 + sub r0, sb, #5 + blt _02088610 + cmp r6, #0x80 + blt _02088618 +_02088610: + mov r1, #0 + b _02088628 +_02088618: + ldr r1, _02088C4C ; =_020AEDB0 + mov r2, r6, lsl #1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_02088628: + cmp r1, #0 + beq _0208866C + ldr r3, _02088C50 ; =_020B31EC + add sp, sp, #0x2c + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldrb r1, [r3, #4] + strb r1, [r0, #4] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr +_0208866C: + ldr r3, _02088C54 ; =_020B31F4 + add sp, sp, #0x2c + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldrb r1, [r3, #4] + strb r1, [r0, #4] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr +_020886A8: + cmp r6, #0 + sub r0, sb, #4 + blt _020886BC + cmp r6, #0x80 + blt _020886C4 +_020886BC: + mov r1, #0 + b _020886D4 +_020886C4: + ldr r1, _02088C4C ; =_020AEDB0 + mov r2, r6, lsl #1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_020886D4: + cmp r1, #0 + beq _02088710 + ldr r3, _02088C58 ; =_020B31FC + add sp, sp, #0x2c + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr +_02088710: + ldr r3, _02088C5C ; =_020B3200 + add sp, sp, #0x2c + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr +_02088744: + ldrsb r0, [sp, #4] + cmp r0, #0 + beq _020887FC + cmp r6, #0 + sub r0, sb, #5 + blt _02088764 + cmp r6, #0x80 + blt _0208876C +_02088764: + mov r1, #0 + b _0208877C +_0208876C: + ldr r1, _02088C4C ; =_020AEDB0 + mov r2, r6, lsl #1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_0208877C: + cmp r1, #0 + beq _020887C0 + ldr r3, _02088C60 ; =_020B3204 + add sp, sp, #0x2c + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldrb r1, [r3, #4] + strb r1, [r0, #4] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr +_020887C0: + ldr r3, _02088C64 ; =_020B320C + add sp, sp, #0x2c + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldrb r1, [r3, #4] + strb r1, [r0, #4] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr +_020887FC: + cmp r6, #0 + sub r0, sb, #4 + blt _02088810 + cmp r6, #0x80 + blt _02088818 +_02088810: + mov r1, #0 + b _02088828 +_02088818: + ldr r1, _02088C4C ; =_020AEDB0 + mov r2, r6, lsl #1 + ldrh r1, [r1, r2] + and r1, r1, #0x200 +_02088828: + cmp r1, #0 + beq _02088864 + ldr r3, _02088C68 ; =_020B3214 + add sp, sp, #0x2c + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr +_02088864: + ldr r3, _02088C6C ; =_020B3218 + add sp, sp, #0x2c + ldrb r2, [r3] + ldrb r1, [r3, #1] + strb r2, [r0] + strb r1, [r0, #1] + ldrb r2, [r3, #2] + ldrb r1, [r3, #3] + strb r2, [r0, #2] + strb r1, [r0, #3] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr +_02088898: + ldrb r0, [sp, #8] + ldrsh r1, [sp, #6] + sub r8, sb, #1 + sub r0, r0, #1 + add r0, r1, r0 + strh r0, [sp, #6] + mov r0, #0 + strb r0, [r8] + cmp r6, #0x65 + bgt _020888EC + bge _02088978 + cmp r6, #0x47 + bgt _02088C34 + cmp r6, #0x45 + blt _02088C34 + beq _02088978 + cmp r6, #0x46 + beq _02088AC0 + cmp r6, #0x47 + beq _02088904 + b _02088C34 +_020888EC: + cmp r6, #0x66 + bgt _020888FC + beq _02088AC0 + b _02088C34 +_020888FC: + cmp r6, #0x67 + bne _02088C34 +_02088904: + ldrb r0, [sp, #8] + cmp r0, r7 + ble _0208891C + add r0, sp, #4 + mov r1, r7 + bl sub_020883EC +_0208891C: + ldrsh r2, [sp, #6] + mvn r0, #3 + cmp r2, r0 + blt _02088934 + cmp r2, r7 + blt _02088954 +_02088934: + cmp r5, #0 + ldreqb r0, [sp, #8] + subne r7, r7, #1 + subeq r7, r0, #1 + cmp r6, #0x67 + moveq r6, #0x65 + movne r6, #0x45 + b _02088978 +_02088954: + cmp r5, #0 + addne r0, r2, #1 + subne r7, r7, r0 + bne _02088AC0 + ldrb r1, [sp, #8] + add r0, r2, #1 + subs r7, r1, r0 + movmi r7, #0 + b _02088AC0 +_02088978: + ldrb r0, [sp, #8] + add r1, r7, #1 + cmp r0, r1 + ble _02088990 + add r0, sp, #4 + bl sub_020883EC +_02088990: + ldrsh lr, [sp, #6] + mov fp, #0x2b + mov sl, #0 + cmp lr, #0 + rsblt lr, lr, #0 + movlt fp, #0x2d + ldr r3, _02088C70 ; =0x66666667 + mov r0, #0xa + b _020889E4 +_020889B4: + mov r1, lr, lsr #0x1f + smull r2, ip, r3, lr + add ip, r1, ip, asr #2 + smull r1, r2, r0, ip + sub ip, lr, r1 + add r1, ip, #0x30 + strb r1, [r8, #-1]! + mov r2, lr + smull r1, lr, r3, r2 + mov r1, r2, lsr #0x1f + add lr, r1, lr, asr #2 + add sl, sl, #1 +_020889E4: + cmp lr, #0 + bne _020889B4 + cmp sl, #2 + blt _020889B4 + strb fp, [r8, #-1] + strb r6, [r8, #-2]! + sub r1, sb, r8 + ldr r0, _02088C48 ; =0x000001FD + add r1, r7, r1 + cmp r1, r0 + addgt sp, sp, #0x2c + movgt r0, #0 + ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + addgt sp, sp, #0x10 + bxgt lr + ldrb r1, [sp, #8] + add r0, r7, #1 + cmp r1, r0 + bge _02088A50 + add r0, r7, #2 + sub r0, r0, r1 + subs r1, r0, #1 + beq _02088A50 + mov r0, #0x30 +_02088A44: + strb r0, [r8, #-1]! + subs r1, r1, #1 + bne _02088A44 +_02088A50: + ldrb r1, [sp, #8] + add r0, sp, #9 + add r2, r0, r1 + subs r1, r1, #1 + beq _02088A74 +_02088A64: + ldrsb r0, [r2, #-1]! + subs r1, r1, #1 + strb r0, [r8, #-1]! + bne _02088A64 +_02088A74: + cmp r7, #0 + cmpeq r5, #0 + movne r0, #0x2e + strneb r0, [r8, #-1]! + ldrb r0, [sp, #9] + strb r0, [r8, #-1]! + ldrsb r0, [sp, #4] + cmp r0, #0 + movne r0, #0x2d + strneb r0, [r8, #-1]! + bne _02088C34 + cmp r4, #1 + moveq r0, #0x2b + streqb r0, [r8, #-1]! + beq _02088C34 + cmp r4, #2 + moveq r0, #0x20 + streqb r0, [r8, #-1]! + b _02088C34 +_02088AC0: + ldrsh r3, [sp, #6] + ldrb r2, [sp, #8] + sub r0, r2, r3 + subs r1, r0, #1 + movmi r1, #0 + cmp r1, r7 + ble _02088B00 + sub r1, r1, r7 + add r0, sp, #4 + sub r1, r2, r1 + bl sub_020883EC + ldrsh r3, [sp, #6] + ldrb r2, [sp, #8] + sub r0, r2, r3 + subs r1, r0, #1 + movmi r1, #0 +_02088B00: + adds r0, r3, #1 + movmi r0, #0 + ldr r3, _02088C48 ; =0x000001FD + add r6, r0, r1 + cmp r6, r3 + addgt sp, sp, #0x2c + movgt r0, #0 + ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + addgt sp, sp, #0x10 + bxgt lr + add r3, sp, #9 + sub r6, r7, r1 + cmp r6, #0 + add r2, r3, r2 + mov sb, #0 + ble _02088B54 + mov r3, #0x30 +_02088B44: + add sb, sb, #1 + cmp sb, r6 + strb r3, [r8, #-1]! + blt _02088B44 +_02088B54: + mov r6, #0 + b _02088B68 +_02088B5C: + ldrsb r3, [r2, #-1]! + add r6, r6, #1 + strb r3, [r8, #-1]! +_02088B68: + cmp r6, r1 + ldrltb r3, [sp, #8] + cmplt r6, r3 + blt _02088B5C + cmp r6, r1 + bge _02088B94 + mov r3, #0x30 +_02088B84: + add r6, r6, #1 + cmp r6, r1 + strb r3, [r8, #-1]! + blt _02088B84 +_02088B94: + cmp r7, #0 + cmpeq r5, #0 + movne r1, #0x2e + strneb r1, [r8, #-1]! + cmp r0, #0 + beq _02088BFC + ldrb r1, [sp, #8] + mov r5, #0 + sub r1, r0, r1 + cmp r1, #0 + ble _02088BDC + mov r3, #0x30 +_02088BC4: + strb r3, [r8, #-1]! + ldrb r1, [sp, #8] + add r5, r5, #1 + sub r1, r0, r1 + cmp r5, r1 + blt _02088BC4 +_02088BDC: + cmp r5, r0 + bge _02088C04 +_02088BE4: + ldrsb r1, [r2, #-1]! + add r5, r5, #1 + cmp r5, r0 + strb r1, [r8, #-1]! + blt _02088BE4 + b _02088C04 +_02088BFC: + mov r0, #0x30 + strb r0, [r8, #-1]! +_02088C04: + ldrsb r0, [sp, #4] + cmp r0, #0 + movne r0, #0x2d + strneb r0, [r8, #-1]! + bne _02088C34 + cmp r4, #1 + moveq r0, #0x2b + streqb r0, [r8, #-1]! + beq _02088C34 + cmp r4, #2 + moveq r0, #0x20 + streqb r0, [r8, #-1]! +_02088C34: + mov r0, r8 + add sp, sp, #0x2c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_02088C48: .word 0x000001FD +_02088C4C: .word _020AEDB0 +_02088C50: .word _020B31EC +_02088C54: .word _020B31F4 +_02088C58: .word _020B31FC +_02088C5C: .word _020B3200 +_02088C60: .word _020B3204 +_02088C64: .word _020B320C +_02088C68: .word _020B3214 +_02088C6C: .word _020B3218 +_02088C70: .word 0x66666667 + arm_func_end sub_02088510 + + arm_func_start __vsprintf_internal_slice +__vsprintf_internal_slice: ; 0x02088C74 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x22c + mov r3, #0x20 + mov fp, r2 + strb r3, [sp, #0x19] + ldrsb r2, [fp] + mov sb, r0 + mov r8, r1 + cmp r2, #0 + mov sl, #0 + beq _0208947C +_02088CA4: + mov r0, fp + mov r1, #0x25 + bl strchr + str r0, [sp, #0xc] + cmp r0, #0 + bne _02088CF8 + mov r0, fp + bl strlen + movs r2, r0 + add sl, sl, r2 + beq _0208947C + mov r0, r8 + mov r1, fp + blx sb + cmp r0, #0 + bne _0208947C + add sp, sp, #0x22c + mvn r0, #0 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr +_02088CF8: + subs r2, r0, fp + add sl, sl, r2 + beq _02088D28 + mov r0, r8 + mov r1, fp + blx sb + cmp r0, #0 + addeq sp, sp, #0x22c + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + addeq sp, sp, #0x10 + bxeq lr +_02088D28: + ldr r0, [sp, #0xc] + add r1, sp, #0x25c + add r2, sp, #0x1c + bl sub_02087438 + ldrb r1, [sp, #0x21] + mov fp, r0 + cmp r1, #0x61 + bgt _02088D94 + bge _020890F8 + cmp r1, #0x47 + bgt _02088D88 + subs r0, r1, #0x41 + addpl pc, pc, r0, lsl #2 + b _02088D7C +_02088D60: ; jump table + b _020890F8 ; case 0 + b _020892E0 ; case 1 + b _020892E0 ; case 2 + b _020892E0 ; case 3 + b _02089090 ; case 4 + b _02089090 ; case 5 + b _02089090 ; case 6 +_02088D7C: + cmp r1, #0x25 + beq _020892CC + b _020892E0 +_02088D88: + cmp r1, #0x58 + beq _02088F54 + b _020892E0 +_02088D94: + cmp r1, #0x75 + bgt _02088DFC + subs r0, r1, #0x64 + addpl pc, pc, r0, lsl #2 + b _02088DF0 +_02088DA8: ; jump table + b _02088E14 ; case 0 + b _02089090 ; case 1 + b _02089090 ; case 2 + b _02089090 ; case 3 + b _020892E0 ; case 4 + b _02088E14 ; case 5 + b _020892E0 ; case 6 + b _020892E0 ; case 7 + b _020892E0 ; case 8 + b _020892E0 ; case 9 + b _02089220 ; case 10 + b _02088F54 ; case 11 + b _020892E0 ; case 12 + b _020892E0 ; case 13 + b _020892E0 ; case 14 + b _02089160 ; case 15 + b _020892E0 ; case 16 + b _02088F54 ; case 17 +_02088DF0: + cmp r1, #0x63 + beq _020892AC + b _020892E0 +_02088DFC: + cmp r1, #0x78 + bgt _02088E0C + beq _02088F54 + b _020892E0 +_02088E0C: + cmp r1, #0xff + b _020892E0 +_02088E14: + ldrb r0, [sp, #0x20] + cmp r0, #3 + bne _02088E34 + ldr r1, [sp, #0x25c] + add r1, r1, #4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-4] + b _02088ECC +_02088E34: + cmp r0, #4 + bne _02088E5C + ldr r1, [sp, #0x25c] + add r2, r1, #8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-8] + str r1, [sp, #0x10] + ldr r1, [r2, #-4] + str r1, [sp, #0x14] + b _02088ECC +_02088E5C: + cmp r0, #6 + bne _02088E84 + ldr r1, [sp, #0x25c] + add r2, r1, #8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-8] + str r1, [sp, #0x10] + ldr r1, [r2, #-4] + str r1, [sp, #0x14] + b _02088ECC +_02088E84: + cmp r0, #7 + bne _02088EA0 + ldr r1, [sp, #0x25c] + add r1, r1, #4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-4] + b _02088ECC +_02088EA0: + cmp r0, #8 + bne _02088EBC + ldr r1, [sp, #0x25c] + add r1, r1, #4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-4] + b _02088ECC +_02088EBC: + ldr r1, [sp, #0x25c] + add r1, r1, #4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-4] +_02088ECC: + cmp r0, #2 + moveq r1, r5, lsl #0x10 + moveq r5, r1, asr #0x10 + cmp r0, #1 + moveq r1, r5, lsl #0x18 + moveq r5, r1, asr #0x18 + cmp r0, #4 + cmpne r0, #6 + add r0, sp, #0x1c + bne _02088F20 + sub r4, sp, #4 + ldmia r0, {r0, r1, r2, r3} + stmia r4, {r0, r1, r2, r3} + ldr r3, [r4] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x22c + bl sub_02087C14 + movs r7, r0 + beq _020892E0 + b _02088F44 +_02088F20: + sub r4, sp, #8 + ldmia r0, {r0, r1, r2, r3} + stmia r4, {r0, r1, r2, r3} + add r1, sp, #0x22c + mov r0, r5 + ldmia r4, {r2, r3} + bl sub_020879C8 + movs r7, r0 + beq _020892E0 +_02088F44: + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _0208932C +_02088F54: + ldrb r0, [sp, #0x20] + cmp r0, #3 + bne _02088F74 + ldr r1, [sp, #0x25c] + add r1, r1, #4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-4] + b _0208900C +_02088F74: + cmp r0, #4 + bne _02088F9C + ldr r1, [sp, #0x25c] + add r2, r1, #8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-8] + str r1, [sp, #0x10] + ldr r1, [r2, #-4] + str r1, [sp, #0x14] + b _0208900C +_02088F9C: + cmp r0, #6 + bne _02088FC4 + ldr r1, [sp, #0x25c] + add r2, r1, #8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-8] + str r1, [sp, #0x10] + ldr r1, [r2, #-4] + str r1, [sp, #0x14] + b _0208900C +_02088FC4: + cmp r0, #7 + bne _02088FE0 + ldr r1, [sp, #0x25c] + add r1, r1, #4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-4] + b _0208900C +_02088FE0: + cmp r0, #8 + bne _02088FFC + ldr r1, [sp, #0x25c] + add r1, r1, #4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-4] + b _0208900C +_02088FFC: + ldr r1, [sp, #0x25c] + add r1, r1, #4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-4] +_0208900C: + cmp r0, #2 + moveq r1, r5, lsl #0x10 + moveq r5, r1, lsr #0x10 + cmp r0, #1 + andeq r5, r5, #0xff + cmp r0, #4 + cmpne r0, #6 + add r0, sp, #0x1c + bne _0208905C + sub r4, sp, #4 + ldmia r0, {r0, r1, r2, r3} + stmia r4, {r0, r1, r2, r3} + ldr r3, [r4] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x22c + bl sub_02087C14 + movs r7, r0 + beq _020892E0 + b _02089080 +_0208905C: + sub r4, sp, #8 + ldmia r0, {r0, r1, r2, r3} + stmia r4, {r0, r1, r2, r3} + add r1, sp, #0x22c + mov r0, r5 + ldmia r4, {r2, r3} + bl sub_020879C8 + movs r7, r0 + beq _020892E0 +_02089080: + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _0208932C +_02089090: + ldrb r0, [sp, #0x20] + cmp r0, #9 + ldrne r0, [sp, #0x25c] + addne r0, r0, #8 + strne r0, [sp, #0x25c] + bne _020890B4 + ldr r0, [sp, #0x25c] + add r0, r0, #8 + str r0, [sp, #0x25c] +_020890B4: + ldr r7, [r0, #-8] + ldr r6, [r0, #-4] + add r0, sp, #0x1c + sub r4, sp, #4 + ldmia r0, {r0, r1, r2, r3} + stmia r4, {r0, r1, r2, r3} + ldr r3, [r4] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x22c + bl sub_02088510 + movs r7, r0 + beq _020892E0 + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _0208932C +_020890F8: + ldrb r0, [sp, #0x20] + cmp r0, #9 + ldrne r0, [sp, #0x25c] + addne r0, r0, #8 + strne r0, [sp, #0x25c] + bne _0208911C + ldr r0, [sp, #0x25c] + add r0, r0, #8 + str r0, [sp, #0x25c] +_0208911C: + ldr r7, [r0, #-8] + ldr r6, [r0, #-4] + add r0, sp, #0x1c + sub r4, sp, #4 + ldmia r0, {r0, r1, r2, r3} + stmia r4, {r0, r1, r2, r3} + ldr r3, [r4] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x22c + bl sub_02087F10 + movs r7, r0 + beq _020892E0 + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _0208932C +_02089160: + ldrb r0, [sp, #0x20] + cmp r0, #5 + bne _020891A0 + ldr r0, [sp, #0x25c] + mov r2, #0x200 + add r0, r0, #4 + str r0, [sp, #0x25c] + ldr r1, [r0, #-4] + add r0, sp, #0x2c + cmp r1, #0 + ldreq r1, _02089490 ; =_020B321C + bl wcstombs + cmp r0, #0 + blt _020892E0 + add r7, sp, #0x2c + b _020891B0 +_020891A0: + ldr r0, [sp, #0x25c] + add r0, r0, #4 + str r0, [sp, #0x25c] + ldr r7, [r0, #-4] +_020891B0: + ldrb r0, [sp, #0x1f] + cmp r7, #0 + ldreq r7, _02089494 ; =_020B3220 + cmp r0, #0 + beq _020891E4 + ldrb r0, [sp, #0x1e] + ldrb r6, [r7], #1 + cmp r0, #0 + beq _0208932C + ldr r0, [sp, #0x28] + cmp r6, r0 + movgt r6, r0 + b _0208932C +_020891E4: + ldrb r0, [sp, #0x1e] + cmp r0, #0 + beq _02089210 + ldr r6, [sp, #0x28] + mov r0, r7 + mov r2, r6 + mov r1, #0 + bl memchr + cmp r0, #0 + subne r6, r0, r7 + b _0208932C +_02089210: + mov r0, r7 + bl strlen + mov r6, r0 + b _0208932C +_02089220: + ldr r1, [sp, #0x25c] + ldrb r0, [sp, #0x20] + add r1, r1, #4 + str r1, [sp, #0x25c] + ldr r1, [r1, #-4] + cmp r0, #8 + addls pc, pc, r0, lsl #2 + b _02089470 +_02089240: ; jump table + b _02089264 ; case 0 + b _02089470 ; case 1 + b _0208926C ; case 2 + b _02089274 ; case 3 + b _0208929C ; case 4 + b _02089470 ; case 5 + b _0208927C ; case 6 + b _0208928C ; case 7 + b _02089294 ; case 8 +_02089264: + str sl, [r1] + b _02089470 +_0208926C: + strh sl, [r1] + b _02089470 +_02089274: + str sl, [r1] + b _02089470 +_0208927C: + str sl, [r1] + mov r0, sl, asr #0x1f + str r0, [r1, #4] + b _02089470 +_0208928C: + str sl, [r1] + b _02089470 +_02089294: + str sl, [r1] + b _02089470 +_0208929C: + str sl, [r1] + mov r0, sl, asr #0x1f + str r0, [r1, #4] + b _02089470 +_020892AC: + ldr r0, [sp, #0x25c] + add r7, sp, #0x2c + add r0, r0, #4 + str r0, [sp, #0x25c] + ldr r0, [r0, #-4] + mov r6, #1 + strb r0, [sp, #0x2c] + b _0208932C +_020892CC: + mov r0, #0x25 + strb r0, [sp, #0x2c] + add r7, sp, #0x2c + mov r6, #1 + b _0208932C +_020892E0: + ldr r0, [sp, #0xc] + bl strlen + movs r4, r0 + beq _02089318 + ldr r1, [sp, #0xc] + mov r0, r8 + mov r2, r4 + blx sb + cmp r0, #0 + addeq sp, sp, #0x22c + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + addeq sp, sp, #0x10 + bxeq lr +_02089318: + add sp, sp, #0x22c + add r0, sl, r4 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr +_0208932C: + ldrb r0, [sp, #0x1c] + mov r4, r6 + cmp r0, #0 + beq _020893E0 + cmp r0, #2 + moveq r0, #0x30 + movne r0, #0x20 + strb r0, [sp, #0x19] + ldrsb r0, [r7] + cmp r0, #0x2b + cmpne r0, #0x2d + cmpne r0, #0x20 + bne _0208939C + ldrsb r0, [sp, #0x19] + cmp r0, #0x30 + bne _0208939C + mov r0, r8 + mov r1, r7 + mov r2, #1 + blx sb + cmp r0, #0 + addeq sp, sp, #0x22c + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + addeq sp, sp, #0x10 + bxeq lr + add r7, r7, #1 + sub r6, r6, #1 +_0208939C: + ldr r0, [sp, #0x24] + cmp r4, r0 + bge _020893E0 +_020893A8: + mov r0, r8 + add r1, sp, #0x19 + mov r2, #1 + blx sb + cmp r0, #0 + addeq sp, sp, #0x22c + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x24] + add r4, r4, #1 + cmp r4, r0 + blt _020893A8 +_020893E0: + cmp r6, #0 + beq _02089410 + mov r0, r8 + mov r1, r7 + mov r2, r6 + blx sb + cmp r0, #0 + addeq sp, sp, #0x22c + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + addeq sp, sp, #0x10 + bxeq lr +_02089410: + ldrb r0, [sp, #0x1c] + cmp r0, #0 + bne _0208946C + ldr r0, [sp, #0x24] + cmp r4, r0 + bge _0208946C + mov r6, #0x20 + add r7, sp, #0x18 +_02089430: + mov r0, r8 + mov r1, r7 + mov r2, #1 + strb r6, [sp, #0x18] + blx sb + cmp r0, #0 + addeq sp, sp, #0x22c + mvneq r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + addeq sp, sp, #0x10 + bxeq lr + ldr r0, [sp, #0x24] + add r4, r4, #1 + cmp r4, r0 + blt _02089430 +_0208946C: + add sl, sl, r4 +_02089470: + ldrsb r0, [fp] + cmp r0, #0 + bne _02088CA4 +_0208947C: + mov r0, sl + add sp, sp, #0x22c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + add sp, sp, #0x10 + bx lr + .align 2, 0 +_02089490: .word _020B321C +_02089494: .word _020B3220 + arm_func_end __vsprintf_internal_slice + + arm_func_start TryAppendToSlice +TryAppendToSlice: ; 0x02089498 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + ldr r3, [r4, #8] + mov r5, r2 + ldr r2, [r4, #4] + add r0, r3, r5 + cmp r0, r2 + ldr r0, [r4] + subhi r5, r2, r3 + mov r2, r5 + add r0, r0, r3 + bl memcpy + ldr r1, [r4, #8] + mov r0, #1 + add r1, r1, r5 + str r1, [r4, #8] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end TryAppendToSlice + + arm_func_start __vsprintf_internal +__vsprintf_internal: ; 0x020894DC + stmdb sp!, {r4, r5, lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + mov ip, #0 + ldr r0, _02089540 ; =TryAppendToSlice + add r1, sp, #0 + str r5, [sp] + str r4, [sp, #4] + str ip, [sp, #8] + bl __vsprintf_internal_slice + cmp r5, #0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4, r5, pc} + cmp r0, r4 + movlo r1, #0 + addlo sp, sp, #0xc + strlob r1, [r5, r0] + ldmloia sp!, {r4, r5, pc} + cmp r4, #0 + addne r1, r5, r4 + movne r2, #0 + strneb r2, [r1, #-1] + add sp, sp, #0xc + ldmia sp!, {r4, r5, pc} + .align 2, 0 +_02089540: .word TryAppendToSlice + arm_func_end __vsprintf_internal + + arm_func_start vsprintf +vsprintf: ; 0x02089544 + ldr ip, _02089558 ; =__vsprintf_internal + mov r3, r2 + mov r2, r1 + mvn r1, #0 + bx ip + .align 2, 0 +_02089558: .word __vsprintf_internal + arm_func_end vsprintf + + arm_func_start snprintf +snprintf: ; 0x0208955C + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r3, lr} + add r3, sp, #0x10 + bic r3, r3, #3 + ldr r2, [sp, #0x10] + add r3, r3, #4 + bl __vsprintf_internal + ldmia sp!, {r3, lr} + add sp, sp, #0x10 + bx lr + arm_func_end snprintf + + arm_func_start sprintf +sprintf: ; 0x02089584 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r3, lr} + add r1, sp, #0xc + bic r1, r1, #3 + add r3, r1, #4 + ldr r2, [sp, #0xc] + mvn r1, #0 + bl __vsprintf_internal + ldmia sp!, {r3, lr} + add sp, sp, #0x10 + bx lr + arm_func_end sprintf + + arm_func_start sub_020895B0 +sub_020895B0: ; 0x020895B0 + ldr r2, _020895D8 ; =_020B3224 + ldr r0, _020895DC ; =0x41C64E6D + ldr r3, [r2] + ldr r1, _020895E0 ; =0x00007FFF + mul r0, r3, r0 + add r0, r0, #0x39 + add r0, r0, #0x3000 + str r0, [r2] + and r0, r1, r0, lsr #16 + bx lr + .align 2, 0 +_020895D8: .word _020B3224 +_020895DC: .word 0x41C64E6D +_020895E0: .word 0x00007FFF + arm_func_end sub_020895B0 + + arm_func_start sub_020895E4 +sub_020895E4: ; 0x020895E4 + ldr r1, _020895F0 ; =_020B3224 + str r0, [r1] + bx lr + .align 2, 0 +_020895F0: .word _020B3224 + arm_func_end sub_020895E4 + + arm_func_start sub_020895F4 +sub_020895F4: ; 0x020895F4 + cmp r2, #0 + beq _02089610 + cmp r2, #1 + beq _02089640 + cmp r2, #2 + beq _02089668 + b _02089670 +_02089610: + ldr r1, [r0] + ldrsb r2, [r1] + cmp r2, #0 + bne _02089630 + mov r1, #1 + str r1, [r0, #4] + sub r0, r1, #2 + bx lr +_02089630: + add r1, r1, #1 + str r1, [r0] + and r0, r2, #0xff + bx lr +_02089640: + ldr r2, [r0, #4] + cmp r2, #0 + movne r2, #0 + strne r2, [r0, #4] + bne _02089660 + ldr r2, [r0] + sub r2, r2, #1 + str r2, [r0] +_02089660: + mov r0, r1 + bx lr +_02089668: + ldr r0, [r0, #4] + bx lr +_02089670: + mov r0, #0 + bx lr + arm_func_end sub_020895F4 diff --git a/include/main_0208655C.h b/include/main_0208655C.h new file mode 100644 index 00000000..dd1ffe90 --- /dev/null +++ b/include/main_0208655C.h @@ -0,0 +1,7 @@ +#ifndef PMDSKY_MAIN_0208655C_H +#define PMDSKY_MAIN_0208655C_H + +// Takes the absolute value of an integer. +s32 abs(s32 value); + +#endif //PMDSKY_MAIN_0208655C_H diff --git a/main.lsf b/main.lsf index 335c2879..3dc807cd 100644 --- a/main.lsf +++ b/main.lsf @@ -50,6 +50,8 @@ Static main Object asm/main_0207F40C.o Object src/main_0207F818.o Object asm/main_0207F894.o + Object src/main_0208655C.o + Object asm/main_02086568.o Object src/main_02089678.o Object asm/main_02089694.o Object src/main_020897AC.o diff --git a/src/dungeon_ai_items_1.c b/src/dungeon_ai_items_1.c index 7e6becde..e29486f0 100644 --- a/src/dungeon_ai_items_1.c +++ b/src/dungeon_ai_items_1.c @@ -6,6 +6,7 @@ #include "dungeon_util_static.h" #include "dungeon_visibility.h" #include "item.h" +#include "main_0208655C.h" #include "targeting.h" // dungeon_ai_items.c and dungeon_ai_items_1.c are split up to define AI_THROWN_ITEM_ACTION_CHOICE_COUNT differently. @@ -16,7 +17,6 @@ extern struct dungeon *DUNGEON_PTR[]; extern bool8 IsTargetInRange(struct entity *user, struct entity *target, s32 direction, s32 n_tiles); extern u32 GetAiUseItemProbability(struct entity *item_consumer, struct item *item, u32 flags); -extern s32 abs(s32 value); void GetPossibleAiThrownItemDirections(struct entity *entity, s32 ally_or_enemy, struct item *item, bool8 always_add) { diff --git a/src/dungeon_range.c b/src/dungeon_range.c index 62e333cd..906422ef 100644 --- a/src/dungeon_range.c +++ b/src/dungeon_range.c @@ -2,12 +2,11 @@ #include "dg_camera.h" #include "dungeon.h" #include "dungeon_map_access.h" +#include "main_0208655C.h" #include "map.h" extern struct dungeon *DUNGEON_PTR[]; -extern s32 abs(s32 value); - bool8 IsPositionActuallyInSight(struct position *origin, struct position *target, bool8 user_has_dropeye) { u8 origin_room; diff --git a/src/main_0208655C.c b/src/main_0208655C.c new file mode 100644 index 00000000..cdf2ec81 --- /dev/null +++ b/src/main_0208655C.c @@ -0,0 +1,6 @@ +#include "main_0208655C.h" + +s32 abs(s32 value) +{ + return value < 0 ? -value : value; +}