mirror of
https://github.com/pret/pokediamond.git
synced 2026-04-24 23:17:08 -05:00
365 lines
6.0 KiB
ArmAsm
365 lines
6.0 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "global.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start strlen
|
|
strlen: ; 0x020E2EAC
|
|
mvn r2, #0x0
|
|
_020E2EB0:
|
|
ldrsb r1, [r0], #0x1
|
|
add r2, r2, #0x1
|
|
cmp r1, #0x0
|
|
bne _020E2EB0
|
|
mov r0, r2
|
|
bx lr
|
|
arm_func_end strlen
|
|
|
|
arm_func_start strcpy
|
|
strcpy: ; 0x020E2EC8
|
|
stmdb sp!, {r3-r5,lr}
|
|
and r4, r1, #0x3
|
|
and r3, r0, #0x3
|
|
mov r2, r0
|
|
cmp r3, r4
|
|
bne _020E2F64
|
|
cmp r4, #0x0
|
|
beq _020E2F20
|
|
ldrb r3, [r1, #0x0]
|
|
strb r3, [r0, #0x0]
|
|
cmp r3, #0x0
|
|
ldmeqia sp!, {r3-r5,pc}
|
|
rsbs r4, r4, #0x3
|
|
beq _020E2F18
|
|
_020E2F00:
|
|
ldrb r3, [r1, #0x1]!
|
|
cmp r3, #0x0
|
|
strb r3, [r2, #0x1]!
|
|
ldmeqia sp!, {r3-r5,pc}
|
|
subs r4, r4, #0x1
|
|
bne _020E2F00
|
|
_020E2F18:
|
|
add r2, r2, #0x1
|
|
add r1, r1, #0x1
|
|
_020E2F20:
|
|
ldr r5, [r1, #0x0]
|
|
ldr r3, _020E2F88 ; =0xFEFEFEFF
|
|
mvn r4, r5
|
|
add lr, r5, r3
|
|
ldr ip, _020E2F8C ; =0x80808080
|
|
and r4, lr, r4
|
|
tst r4, r12
|
|
bne _020E2F64
|
|
sub r2, r2, #0x4
|
|
_020E2F44:
|
|
str r5, [r2, #0x4]!
|
|
ldr r5, [r1, #0x4]!
|
|
add r4, r5, r3
|
|
mvn lr, r5
|
|
and lr, r4, lr
|
|
tst lr, r12
|
|
beq _020E2F44
|
|
add r2, r2, #0x4
|
|
_020E2F64:
|
|
ldrb r3, [r1, #0x0]
|
|
strb r3, [r2, #0x0]
|
|
cmp r3, #0x0
|
|
ldmeqia sp!, {r3-r5,pc}
|
|
_020E2F74:
|
|
ldrb r3, [r1, #0x1]!
|
|
cmp r3, #0x0
|
|
strb r3, [r2, #0x1]!
|
|
bne _020E2F74
|
|
ldmia sp!, {r3-r5,pc}
|
|
.balign 4
|
|
_020E2F88: .word 0xFEFEFEFF
|
|
_020E2F8C: .word 0x80808080
|
|
arm_func_end strcpy
|
|
|
|
arm_func_start strncpy
|
|
strncpy: ; 0x020E2F90
|
|
stmdb sp!, {r3,lr}
|
|
mov lr, r0
|
|
cmp r2, #0x0
|
|
ldmeqia sp!, {r3,pc}
|
|
_020E2FA0:
|
|
ldrsb r3, [r1], #0x1
|
|
mov r12, lr
|
|
strb r3, [lr], #0x1
|
|
ldrsb r3, [r12, #0x0]
|
|
cmp r3, #0x0
|
|
bne _020E2FD4
|
|
subs r2, r2, #0x1
|
|
ldmeqia sp!, {r3,pc}
|
|
mov r1, #0x0
|
|
_020E2FC4:
|
|
strb r1, [lr], #0x1
|
|
subs r2, r2, #0x1
|
|
bne _020E2FC4
|
|
ldmia sp!, {r3,pc}
|
|
_020E2FD4:
|
|
subs r2, r2, #0x1
|
|
bne _020E2FA0
|
|
ldmia sp!, {r3,pc}
|
|
arm_func_end strncpy
|
|
|
|
arm_func_start strcat
|
|
strcat: ; 0x020E2FE0
|
|
mov r3, r0
|
|
_020E2FE4:
|
|
ldrsb r2, [r3], #0x1
|
|
cmp r2, #0x0
|
|
bne _020E2FE4
|
|
sub r3, r3, #0x1
|
|
_020E2FF4:
|
|
ldrsb r2, [r1], #0x1
|
|
mov r12, r3
|
|
strb r2, [r3], #0x1
|
|
ldrsb r2, [r12, #0x0]
|
|
cmp r2, #0x0
|
|
bne _020E2FF4
|
|
bx lr
|
|
arm_func_end strcat
|
|
|
|
arm_func_start strncat
|
|
strncat: ; 0x020E3010
|
|
stmdb sp!, {r3,lr}
|
|
mov r12, r0
|
|
_020E3018:
|
|
ldrsb r3, [r12], #0x1
|
|
cmp r3, #0x0
|
|
bne _020E3018
|
|
cmp r2, #0x0
|
|
sub r12, r12, #0x1
|
|
beq _020E3054
|
|
_020E3030:
|
|
ldrsb r3, [r1], #0x1
|
|
mov lr, r12
|
|
strb r3, [r12], #0x1
|
|
ldrsb r3, [lr, #0x0]
|
|
cmp r3, #0x0
|
|
subeq r12, r12, #0x1
|
|
beq _020E3054
|
|
subs r2, r2, #0x1
|
|
bne _020E3030
|
|
_020E3054:
|
|
mov r1, #0x0
|
|
strb r1, [r12, #0x0]
|
|
ldmia sp!, {r3,pc}
|
|
arm_func_end strncat
|
|
|
|
arm_func_start strcmp
|
|
strcmp: ; 0x020E3060
|
|
stmdb sp!, {r4,lr}
|
|
ldrb r2, [r0, #0x0]
|
|
ldrb r3, [r1, #0x0]
|
|
subs r3, r2, r3
|
|
movne r0, r3
|
|
ldmneia sp!, {r4,pc}
|
|
and r4, r0, #0x3
|
|
and r3, r1, #0x3
|
|
cmp r3, r4
|
|
bne _020E313C
|
|
cmp r4, #0x0
|
|
beq _020E30D4
|
|
cmp r2, #0x0
|
|
moveq r0, #0x0
|
|
ldmeqia sp!, {r4,pc}
|
|
rsbs r4, r4, #0x3
|
|
beq _020E30CC
|
|
_020E30A4:
|
|
ldrb r3, [r0, #0x1]!
|
|
ldrb r2, [r1, #0x1]!
|
|
subs r2, r3, r2
|
|
movne r0, r2
|
|
ldmneia sp!, {r4,pc}
|
|
cmp r3, #0x0
|
|
moveq r0, #0x0
|
|
ldmeqia sp!, {r4,pc}
|
|
subs r4, r4, #0x1
|
|
bne _020E30A4
|
|
_020E30CC:
|
|
add r0, r0, #0x1
|
|
add r1, r1, #0x1
|
|
_020E30D4:
|
|
ldr r2, [r0, #0x0]
|
|
ldr r3, _020E316C ; =0xFEFEFEFF
|
|
mvn r4, r2
|
|
add lr, r2, r3
|
|
ldr ip, _020E3170 ; =0x80808080
|
|
and r4, lr, r4
|
|
tst r4, r12
|
|
ldr r4, [r1, #0x0]
|
|
bne _020E3128
|
|
cmp r2, r4
|
|
bne _020E311C
|
|
_020E3100:
|
|
ldr r2, [r0, #0x4]!
|
|
ldr r4, [r1, #0x4]!
|
|
add lr, r2, r3
|
|
tst lr, r12
|
|
bne _020E3128
|
|
cmp r2, r4
|
|
beq _020E3100
|
|
_020E311C:
|
|
sub r0, r0, #0x1
|
|
sub r1, r1, #0x1
|
|
b _020E313C
|
|
_020E3128:
|
|
ldrb r2, [r0, #0x0]
|
|
ldrb r3, [r1, #0x0]
|
|
subs r3, r2, r3
|
|
movne r0, r3
|
|
ldmneia sp!, {r4,pc}
|
|
_020E313C:
|
|
cmp r2, #0x0
|
|
moveq r0, #0x0
|
|
ldmeqia sp!, {r4,pc}
|
|
_020E3148:
|
|
ldrb r3, [r0, #0x1]!
|
|
ldrb r2, [r1, #0x1]!
|
|
subs r2, r3, r2
|
|
movne r0, r2
|
|
ldmneia sp!, {r4,pc}
|
|
cmp r3, #0x0
|
|
bne _020E3148
|
|
mov r0, #0x0
|
|
ldmia sp!, {r4,pc}
|
|
.balign 4
|
|
_020E316C: .word 0xFEFEFEFF
|
|
_020E3170: .word 0x80808080
|
|
arm_func_end strcmp
|
|
|
|
arm_func_start strncmp
|
|
strncmp: ; 0x020E3174
|
|
cmp r2, #0x0
|
|
beq _020E31A0
|
|
_020E317C:
|
|
ldrb r12, [r1], #0x1
|
|
ldrb r3, [r0], #0x1
|
|
cmp r3, r12
|
|
subne r0, r3, r12
|
|
bxne lr
|
|
cmp r3, #0x0
|
|
beq _020E31A0
|
|
subs r2, r2, #0x1
|
|
bne _020E317C
|
|
_020E31A0:
|
|
mov r0, #0x0
|
|
bx lr
|
|
arm_func_end strncmp
|
|
|
|
arm_func_start strchr
|
|
strchr: ; 0x020E31A8
|
|
ldrsb r2, [r0], #0x1
|
|
mov r1, r1, lsl #0x18
|
|
mov r1, r1, asr #0x18
|
|
cmp r2, #0x0
|
|
beq _020E31D4
|
|
_020E31BC:
|
|
cmp r2, r1
|
|
subeq r0, r0, #0x1
|
|
bxeq lr
|
|
ldrsb r2, [r0], #0x1
|
|
cmp r2, #0x0
|
|
bne _020E31BC
|
|
_020E31D4:
|
|
cmp r1, #0x0
|
|
movne r0, #0x0
|
|
subeq r0, r0, #0x1
|
|
bx lr
|
|
arm_func_end strchr
|
|
|
|
arm_func_start strspn
|
|
strspn: ; 0x020E31E4
|
|
stmdb sp!, {r4,lr}
|
|
sub sp, sp, #0x20
|
|
add r12, sp, #0x0
|
|
mov r3, #0x8
|
|
mov r2, #0x0
|
|
_020E31F8:
|
|
strb r2, [r12, #0x0]
|
|
strb r2, [r12, #0x1]
|
|
strb r2, [r12, #0x2]
|
|
strb r2, [r12, #0x3]
|
|
add r12, r12, #0x4
|
|
subs r3, r3, #0x1
|
|
bne _020E31F8
|
|
ldrb r3, [r1, #0x0]
|
|
add r4, r1, #0x1
|
|
cmp r3, #0x0
|
|
beq _020E3254
|
|
add lr, sp, #0x0
|
|
mov r2, #0x1
|
|
_020E322C:
|
|
and r12, r3, #0xff
|
|
and r1, r3, #0x7
|
|
mov r1, r2, lsl r1
|
|
ldrb r3, [lr, r12, asr #0x3]
|
|
and r1, r1, #0xff
|
|
orr r1, r3, r1
|
|
strb r1, [lr, r12, asr #0x3]
|
|
ldrb r3, [r4], #0x1
|
|
cmp r3, #0x0
|
|
bne _020E322C
|
|
_020E3254:
|
|
ldrb r1, [r0, #0x0]
|
|
add r4, r0, #0x1
|
|
cmp r1, #0x0
|
|
beq _020E3294
|
|
add r12, sp, #0x0
|
|
mov r2, #0x1
|
|
_020E326C:
|
|
and r3, r1, #0xff
|
|
and r1, r1, #0x7
|
|
mov r1, r2, lsl r1
|
|
ldrb r3, [r12, r3, asr #0x3]
|
|
and r1, r1, #0xff
|
|
tst r3, r1
|
|
bne _020E3294
|
|
ldrb r1, [r4], #0x1
|
|
cmp r1, #0x0
|
|
bne _020E326C
|
|
_020E3294:
|
|
sub r0, r4, r0
|
|
sub r0, r0, #0x1
|
|
add sp, sp, #0x20
|
|
ldmia sp!, {r4,pc}
|
|
arm_func_end strspn
|
|
|
|
arm_func_start strstr
|
|
strstr: ; 0x020E32A4
|
|
stmdb sp!, {r4,lr}
|
|
cmp r1, #0x0
|
|
ldrneb r2, [r1, #0x0]
|
|
cmpne r2, #0x0
|
|
ldmeqia sp!, {r4,pc}
|
|
ldrb r3, [r0, #0x0]
|
|
add r4, r0, #0x1
|
|
cmp r3, #0x0
|
|
beq _020E3308
|
|
_020E32C8:
|
|
cmp r3, r2
|
|
bne _020E32FC
|
|
mov lr, r4
|
|
add r12, r1, #0x1
|
|
_020E32D8:
|
|
ldrb r3, [r12], #0x1
|
|
ldrb r0, [lr], #0x1
|
|
cmp r0, r3
|
|
bne _020E32F0
|
|
cmp r0, #0x0
|
|
bne _020E32D8
|
|
_020E32F0:
|
|
cmp r3, #0x0
|
|
subeq r0, r4, #0x1
|
|
ldmeqia sp!, {r4,pc}
|
|
_020E32FC:
|
|
ldrb r3, [r4], #0x1
|
|
cmp r3, #0x0
|
|
bne _020E32C8
|
|
_020E3308:
|
|
mov r0, #0x0
|
|
ldmia sp!, {r4,pc}
|
|
arm_func_end strstr
|