pmd-sky/lib/NitroSDK/asm/std_string.s
2026-06-06 13:14:48 -07:00

674 lines
11 KiB
ArmAsm

.include "asm/macros.inc"
.include "main_0207F894.inc"
.text
arm_func_start Std_CopyLString
Std_CopyLString: ; 0x02085244
stmdb sp!, {r4, lr}
sub ip, r2, #1
mov r4, r1
cmp ip, #0
mov lr, #0
ble _02085280
_0208525C:
ldrsb r3, [r4]
strb r3, [r0, lr]
ldrsb r3, [r4]
cmp r3, #0
beq _02085280
add lr, lr, #1
cmp lr, ip
add r4, r4, #1
blt _0208525C
_02085280:
sub r3, r2, #1
cmp lr, r3
blt _02085298
cmp r2, #0
movne r2, #0
strneb r2, [r0, lr]
_02085298:
mov r0, r1
bl Std_GetStringLength
ldmia sp!, {r4, pc}
arm_func_end Std_CopyLString
arm_func_start Std_GetStringLength
Std_GetStringLength: ; 0x020852A4
ldrsb r1, [r0]
mov r2, #0
cmp r1, #0
beq _020852C4
_020852B4:
add r2, r2, #1
ldrsb r1, [r0, r2]
cmp r1, #0
bne _020852B4
_020852C4:
mov r0, r2
bx lr
arm_func_end Std_GetStringLength
arm_func_start Std_CompareString__020852CC
Std_CompareString__020852CC: ; 0x020852CC
b _020852D8
_020852D0:
add r0, r0, #1
add r1, r1, #1
_020852D8:
ldrsb r3, [r1]
ldrsb r2, [r0]
cmp r2, r3
bne _020852F0
cmp r2, #0
bne _020852D0
_020852F0:
sub r0, r2, r3
bx lr
arm_func_end Std_CompareString__020852CC
arm_func_start Std_CompareNString
Std_CompareNString: ; 0x020852F8
stmdb sp!, {r3, lr}
cmp r2, #0
beq _02085330
cmp r2, #0
mov lr, #0
ble _02085330
_02085310:
ldrb ip, [r0, lr]
ldrb r3, [r1, lr]
cmp ip, r3
subne r0, ip, r3
ldmneia sp!, {r3, pc}
add lr, lr, #1
cmp lr, r2
blt _02085310
_02085330:
mov r0, #0
ldmia sp!, {r3, pc}
arm_func_end Std_CompareNString
arm_func_start Std_TsScanf
Std_TsScanf: ; 0x02085338
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r3, lr}
add r2, sp, #0xc
bic r2, r2, #3
ldr r1, [sp, #0xc]
add r2, r2, #4
bl Std_TvsScanf
ldmia sp!, {r3, lr}
add sp, sp, #0x10
bx lr
arm_func_end Std_TsScanf
arm_func_start Stdi_IsSpace
Stdi_IsSpace: ; 0x02085360
sub r3, r0, #9
cmp r3, #0x17
mov r0, #0
bxhi lr
ldr r1, _02085384 ; =0x0080001F
mov r2, #1
tst r1, r2, lsl r3
movne r0, r2
bx lr
.align 2, 0
_02085384: .word 0x0080001F
arm_func_end Stdi_IsSpace
arm_func_start Stdi_FillBitset
Stdi_FillBitset: ; 0x02085388
stmdb sp!, {r3, r4, r5, lr}
cmp r1, r2
ldmhsia sp!, {r3, r4, r5, pc}
and r3, r2, #0x1f
mov ip, #1
mov r3, ip, lsl r3
sub r5, r3, #1
mvn ip, #0
_020853A8:
and r3, r1, #0x1f
mov lr, r1, lsr #5
mov r4, ip, lsl r3
add r1, lr, #1
cmp r2, r1, lsl #5
ldr r3, [r0, lr, lsl #2]
andlo r4, r4, r5
mov r1, r1, lsl #5
orr r3, r3, r4
cmp r1, r2
str r3, [r0, lr, lsl #2]
blo _020853A8
ldmia sp!, {r3, r4, r5, pc}
arm_func_end Stdi_FillBitset
arm_func_start Std_TvsScanf
Std_TvsScanf: ; 0x020853DC
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x34
mov r8, r1
ldrsb r4, [r8]
mov sb, r0
mov r0, #0
str r0, [sp, #0xc]
str r2, [sp]
str sb, [sp, #0x10]
str r0, [sp, #4]
cmp r4, #0
beq _02085AD4
_0208540C:
mov r0, r4
bl Stdi_IsSpace
cmp r0, #0
beq _02085460
ldrsb r0, [r8]
bl Stdi_IsSpace
cmp r0, #0
beq _0208543C
_0208542C:
ldrsb r0, [r8, #1]!
bl Stdi_IsSpace
cmp r0, #0
bne _0208542C
_0208543C:
ldrsb r0, [sb]
bl Stdi_IsSpace
cmp r0, #0
beq _02085AC8
_0208544C:
ldrsb r0, [sb, #1]!
bl Stdi_IsSpace
cmp r0, #0
bne _0208544C
b _02085AC8
_02085460:
cmp r4, #0x25
beq _020854A0
ldrsb r0, [sb]
cmp r4, r0
bne _02085AD4
and r0, r4, #0xff
eor r0, r0, #0x20
sub r0, r0, #0xa1
cmp r0, #0x3c
bhs _02085494
ldrsb r0, [sb, #1]!
cmp r4, r0
bne _02085AD4
_02085494:
add sb, sb, #1
add r8, r8, #1
b _02085AC8
_020854A0:
ldrsb r0, [r8, #1]
cmp r0, #0x25
bne _020854C0
ldrsb r0, [sb]
cmp r4, r0
bne _02085AD4
add r8, r8, #2
b _02085AC8
_020854C0:
ldrsb r0, [r8, #1]!
mov sl, #0
mov r5, sl
cmp r0, #0x2a
mov fp, sl
mov r6, sl
orreq r5, sl, #0x2000
ldreqsb r0, [r8, #1]!
mov r1, #0xa
b _020854F4
_020854E8:
mla r2, r6, r1, r0
ldrsb r0, [r8, #1]!
sub r6, r2, #0x30
_020854F4:
cmp r0, #0x30
blt _02085504
cmp r0, #0x39
ble _020854E8
_02085504:
cmp r0, #0x68
beq _02085518
cmp r0, #0x6c
beq _02085530
b _02085544
_02085518:
ldrsb r0, [r8, #1]!
cmp r0, #0x68
orrne r5, r5, #0x40
orreq r5, r5, #0x100
ldreqsb r0, [r8, #1]!
b _02085544
_02085530:
ldrsb r0, [r8, #1]!
cmp r0, #0x6c
orrne r5, r5, #0x20
ldreqsb r0, [r8, #1]!
orreq r5, r5, #0x80
_02085544:
cmp r0, #0x69
bgt _02085590
cmp r0, #0x64
blt _02085564
beq _020855D8
cmp r0, #0x69
beq _020855E0
b _02085AD4
_02085564:
cmp r0, #0x5b
bgt _02085584
cmp r0, #0x58
blt _02085AD4
beq _020855FC
cmp r0, #0x5b
beq _020858D0
b _02085AD4
_02085584:
cmp r0, #0x63
beq _020857D8
b _02085AD4
_02085590:
cmp r0, #0x6e
bgt _020855A0
beq _02085608
b _02085AD4
_020855A0:
sub r1, r0, #0x6f
cmp r1, #9
addls pc, pc, r1, lsl #2
b _02085AD4
_020855B0: ; jump table
b _020855E8 ; case 0
b _020855FC ; case 1
b _02085AD4 ; case 2
b _02085AD4 ; case 3
b _020857D8 ; case 4
b _02085AD4 ; case 5
b _020855F0 ; case 6
b _02085AD4 ; case 7
b _02085AD4 ; case 8
b _020855FC ; case 9
_020855D8:
mov r4, #0xa
b _0208562C
_020855E0:
mvn r4, #0
b _0208562C
_020855E8:
mov r4, #8
b _0208562C
_020855F0:
orr r5, r5, #0x1000
mov r4, #0xa
b _0208562C
_020855FC:
orr r5, r5, #0x1000
mov r4, #0x10
b _0208562C
_02085608:
tst r5, #0x2000
ldreq r0, [sp, #4]
add r8, r8, #1
subeq r0, r0, #1
streq r0, [sp, #4]
ldr r0, [sp, #0x10]
sub sl, sb, r0
mov fp, sl, asr #0x1f
b _0208574C
_0208562C:
ldrsb r7, [sb]
add r8, r8, #1
mov r0, r7
bl Stdi_IsSpace
cmp r0, #0
beq _02085658
_02085644:
ldrsb r7, [sb, #1]!
mov r0, r7
bl Stdi_IsSpace
cmp r0, #0
bne _02085644
_02085658:
cmp r7, #0x2b
orreq r5, r5, #2
beq _02085670
cmp r7, #0x2d
bne _02085678
orr r5, r5, #8
_02085670:
ldrsb r7, [sb, #1]!
b _02085658
_02085678:
mvn r0, #0
cmp r4, r0
bne _020856A4
cmp r7, #0x30
movne r4, #0xa
bne _020856A4
ldrsb r0, [sb, #1]
cmp r0, #0x78
cmpne r0, #0x58
moveq r4, #0x10
movne r4, #8
_020856A4:
cmp r4, #0x10
cmpeq r7, #0x30
bne _020856C0
ldrsb r0, [sb, #1]
cmp r0, #0x78
cmpne r0, #0x58
ldreqsb r7, [sb, #2]!
_020856C0:
cmp r6, #0
mvneq r6, #0x80000000
cmp r6, #0
mov r2, #0
ble _0208572C
mov ip, r4, asr #0x1f
_020856D8:
sub r3, r7, #0x30
cmp r3, #0xa
blo _02085700
sub r0, r3, #0x31
cmp r0, #6
sublo r3, r3, #0x27
blo _02085700
sub r3, r3, #0x11
cmp r3, #6
addlo r3, r3, #0xa
_02085700:
cmp r3, r4
bhs _0208572C
ldrsb r7, [sb, #1]!
add r2, r2, #1
umull r1, r0, sl, r4
mla r0, sl, ip, r0
adds sl, r3, r1
mla r0, fp, r4, r0
adc fp, r0, #0
cmp r2, r6
blt _020856D8
_0208572C:
cmp r2, #0
beq _02085AD4
tst r5, #8
beq _02085744
rsbs sl, sl, #0
rsc fp, fp, #0
_02085744:
mov r0, #1
str r0, [sp, #0xc]
_0208574C:
tst r5, #0x2000
bne _02085AC8
ldr r0, [sp, #4]
tst r5, #0x100
add r0, r0, #1
str r0, [sp, #4]
beq _02085780
ldr r0, [sp]
add r0, r0, #4
str r0, [sp]
ldr r0, [r0, #-4]
strb sl, [r0]
b _02085AC8
_02085780:
tst r5, #0x40
beq _020857A0
ldr r0, [sp]
add r0, r0, #4
str r0, [sp]
ldr r0, [r0, #-4]
strh sl, [r0]
b _02085AC8
_020857A0:
tst r5, #0x80
beq _020857C0
ldr r0, [sp]
add r0, r0, #4
str r0, [sp]
ldr r0, [r0, #-4]
stmia r0, {sl, fp}
b _02085AC8
_020857C0:
ldr r0, [sp]
add r0, r0, #4
str r0, [sp]
ldr r0, [r0, #-4]
str sl, [r0]
b _02085AC8
_020857D8:
mov r1, #1
tst r5, #0x2000
add r8, r8, #1
mov r4, #0
str r1, [sp, #0xc]
bne _0208580C
ldr r1, [sp]
add r1, r1, #4
str r1, [sp]
ldr r4, [r1, #-4]
ldr r1, [sp, #4]
add r1, r1, #1
str r1, [sp, #4]
_0208580C:
cmp r0, #0x73
bne _02085888
ldrsb r5, [sb]
cmp r6, #0
mvneq r6, #0x80000000
mov r0, r5
bl Stdi_IsSpace
cmp r0, #0
beq _02085858
_02085830:
ldrsb r5, [sb, #1]!
mov r0, r5
bl Stdi_IsSpace
cmp r0, #0
bne _02085830
b _02085858
_02085848:
cmp r4, #0
strneb r5, [r4], #1
ldrsb r5, [sb, #1]!
sub r6, r6, #1
_02085858:
cmp r5, #0
beq _02085878
mov r0, r5
bl Stdi_IsSpace
cmp r0, #0
bne _02085878
cmp r6, #0
bgt _02085848
_02085878:
cmp r4, #0
movne r0, #0
strneb r0, [r4]
b _02085AC8
_02085888:
cmp r6, #0
moveq r6, #1
ldrsb r0, [sb]
b _020858A8
_02085898:
cmp r4, #0
strneb r0, [r4], #1
ldrsb r0, [sb, #1]!
sub r6, r6, #1
_020858A8:
cmp r0, #0
beq _020858B8
cmp r6, #0
bgt _02085898
_020858B8:
cmp r4, #0
beq _02085AC8
cmp r6, #0
movgt r0, #0
strgtb r0, [r4]
b _02085AC8
_020858D0:
mov sl, #0
mov r3, #1
add r1, sp, #0x14
mov r0, sl
mov r2, #0x20
mov r7, sl
mov fp, sl
str r3, [sp, #8]
bl MTi_CpuClear32
ldrsb r0, [r8, #1]!
cmp r0, #0x5e
moveq r0, sl
addeq r8, r8, #1
streq r0, [sp, #8]
ldrsb r0, [r8]
cmp r0, #0x5d
bne _02085938
and r2, r0, #0xff
mov r0, r2, lsr #5
add r1, sp, #0x14
ldr r4, [r1, r0, lsl #2]
and r2, r2, #0x1f
mov r3, #1
orr r2, r4, r3, lsl r2
str r2, [r1, r0, lsl #2]
add r8, r8, #1
_02085938:
add r4, sp, #0x14
_0208593C:
ldrsb r0, [r8]
cmp r0, #0
cmpne r0, #0x5d
bne _0208598C
cmp fp, #0
beq _0208597C
add r4, sp, #0x14
mov r3, r7, lsr #5
ldr r2, [r4, r3, lsl #2]
and r0, r7, #0x1f
mov r1, #1
orr r0, r2, r1, lsl r0
str r0, [r4, r3, lsl #2]
ldr r0, [sp, #0x18]
orr r0, r0, #0x2000
str r0, [sp, #0x18]
_0208597C:
ldrsb r0, [r8]
cmp r0, #0x5d
addeq r8, r8, #1
b _02085A38
_0208598C:
cmp fp, #0
bne _020859CC
cmp r7, #0
beq _020859A8
cmp r0, #0x2d
moveq fp, #1
beq _02085A30
_020859A8:
and r0, r0, #0xff
mov r3, r0, lsr #5
ldr r2, [r4, r3, lsl #2]
and r1, r0, #0x1f
mov r0, #1
orr r0, r2, r0, lsl r1
str r0, [r4, r3, lsl #2]
ldrb r7, [r8]
b _02085A30
_020859CC:
and r2, r0, #0xff
cmp r7, r2
bls _02085A18
mov r1, r7, lsr #5
ldr fp, [r4, r1, lsl #2]
and r7, r7, #0x1f
mov r3, #1
orr r3, fp, r3, lsl r7
str r3, [r4, r1, lsl #2]
ldr r1, [sp, #0x18]
mov r0, r2, lsr #5
orr r1, r1, #0x2000
str r1, [sp, #0x18]
ldr r3, [r4, r0, lsl #2]
and r2, r2, #0x1f
mov r1, #1
orr r1, r3, r1, lsl r2
str r1, [r4, r0, lsl #2]
b _02085A28
_02085A18:
mov r1, r7
add r2, r2, #1
mov r0, r4
bl Stdi_FillBitset
_02085A28:
mov fp, #0
mov r7, fp
_02085A30:
add r8, r8, #1
b _0208593C
_02085A38:
mov r0, #1
tst r5, #0x2000
str r0, [sp, #0xc]
bne _02085A64
ldr r0, [sp]
add r0, r0, #4
str r0, [sp]
ldr sl, [r0, #-4]
ldr r0, [sp, #4]
add r0, r0, #1
str r0, [sp, #4]
_02085A64:
cmp r6, #0
mvneq r6, #0x80000000
ldrsb r0, [sb]
add r3, sp, #0x14
b _02085AAC
_02085A78:
and r4, r0, #0xff
mov r1, r4, lsr #5
ldr r2, [r3, r1, lsl #2]
and r1, r4, #0x1f
mov r1, r2, lsr r1
and r2, r1, #1
ldr r1, [sp, #8]
cmp r1, r2
bne _02085ABC
cmp sl, #0
strneb r0, [sl], #1
ldrsb r0, [sb, #1]!
sub r6, r6, #1
_02085AAC:
cmp r0, #0
beq _02085ABC
cmp r6, #0
bgt _02085A78
_02085ABC:
cmp sl, #0
movne r0, #0
strneb r0, [sl]
_02085AC8:
ldrsb r4, [r8]
cmp r4, #0
bne _0208540C
_02085AD4:
ldrsb r0, [sb]
cmp r0, #0
ldreq r0, [sp, #0xc]
cmpeq r0, #0
mvneq r0, #0
streq r0, [sp, #4]
ldr r0, [sp, #4]
add sp, sp, #0x34
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
arm_func_end Std_TvsScanf