mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-25 07:24:42 -05:00
3631 lines
62 KiB
ArmAsm
3631 lines
62 KiB
ArmAsm
.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
|