mirror of
https://github.com/pret/pmd-sky.git
synced 2026-08-05 02:37:05 -05:00
674 lines
11 KiB
ArmAsm
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
|
|
|