pokeemerald/asm/string_util.s
2016-11-01 10:16:34 -07:00

1373 lines
22 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start CopyString_Limit10
@ u8 *CopyString_Limit10(u8 *dest, u8 *src)
CopyString_Limit10: @ 8008B10
push {r4,r5,lr}
adds r4, r0, 0
movs r5, 0xA
movs r3, 0
_08008B18:
adds r2, r4, r3
adds r0, r1, r3
ldrb r0, [r0]
strb r0, [r2]
lsls r0, 24
lsrs r0, 24
cmp r0, 0xFF
bne _08008B2C
adds r0, r2, 0
b _08008B3C
_08008B2C:
adds r0, r3, 0x1
lsls r0, 24
lsrs r3, r0, 24
cmp r3, r5
bcc _08008B18
adds r0, r4, r3
movs r1, 0xFF
strb r1, [r0]
_08008B3C:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end CopyString_Limit10
thumb_func_start GetStringEnd_Limit7
@ u8 *GetStringEnd_Limit7(u8 *s)
GetStringEnd_Limit7: @ 8008B44
push {r4,lr}
adds r3, r0, 0
movs r4, 0xA
movs r2, 0
_08008B4C:
adds r1, r3, r2
ldrb r0, [r1]
cmp r0, 0xFF
bne _08008B58
adds r0, r1, 0
b _08008B68
_08008B58:
adds r0, r2, 0x1
lsls r0, 24
lsrs r2, r0, 24
cmp r2, r4
bcc _08008B4C
adds r0, r3, r2
movs r1, 0xFF
strb r1, [r0]
_08008B68:
pop {r4}
pop {r1}
bx r1
thumb_func_end GetStringEnd_Limit7
thumb_func_start CopyString_Limit7
@ u8 *CopyString_Limit7(u8 *dest, u8 *src)
CopyString_Limit7: @ 8008B70
push {r4,r5,lr}
adds r4, r0, 0
movs r5, 0x7
movs r3, 0
_08008B78:
adds r2, r4, r3
adds r0, r1, r3
ldrb r0, [r0]
strb r0, [r2]
lsls r0, 24
lsrs r0, 24
cmp r0, 0xFF
bne _08008B8C
adds r0, r2, 0
b _08008B98
_08008B8C:
adds r3, 0x1
cmp r3, r5
blt _08008B78
adds r0, r4, r3
movs r1, 0xFF
strb r1, [r0]
_08008B98:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end CopyString_Limit7
thumb_func_start CopyString
@ u8 *CopyString(u8 *dest, u8 *src)
CopyString: @ 8008BA0
push {lr}
adds r3, r0, 0
b _08008BAC
_08008BA6:
strb r2, [r3]
adds r3, 0x1
adds r1, 0x1
_08008BAC:
ldrb r2, [r1]
adds r0, r2, 0
cmp r0, 0xFF
bne _08008BA6
movs r0, 0xFF
strb r0, [r3]
adds r0, r3, 0
pop {r1}
bx r1
thumb_func_end CopyString
thumb_func_start AppendString
@ u8 *AppendString(u8 *dest, u8 *src)
AppendString: @ 8008BC0
push {lr}
adds r2, r0, 0
b _08008BC8
_08008BC6:
adds r2, 0x1
_08008BC8:
ldrb r0, [r2]
cmp r0, 0xFF
bne _08008BC6
adds r0, r2, 0
bl CopyString
pop {r1}
bx r1
thumb_func_end AppendString
thumb_func_start CopyString_LimitN
@ u8 *CopyString_LimitN(u8 *dest, u8 *src, u8 n)
CopyString_LimitN: @ 8008BD8
push {r4-r6,lr}
adds r4, r0, 0
adds r6, r1, 0
lsls r2, 24
lsrs r5, r2, 24
movs r3, 0
adds r0, r5, 0
cmp r3, r0
bcs _08008BFE
adds r2, r0, 0
_08008BEC:
adds r1, r4, r3
adds r0, r6, r3
ldrb r0, [r0]
strb r0, [r1]
adds r0, r3, 0x1
lsls r0, 16
lsrs r3, r0, 16
cmp r3, r2
bcc _08008BEC
_08008BFE:
adds r0, r4, r5
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end CopyString_LimitN
thumb_func_start AppendString_LimitN
@ u8 *AppendString_LimitN(u8 *dest, u8 *src, u8 n)
AppendString_LimitN: @ 8008C08
push {lr}
adds r3, r0, 0
lsls r2, 24
lsrs r2, 24
b _08008C14
_08008C12:
adds r3, 0x1
_08008C14:
ldrb r0, [r3]
cmp r0, 0xFF
bne _08008C12
adds r0, r3, 0
bl CopyString_LimitN
pop {r1}
bx r1
thumb_func_end AppendString_LimitN
thumb_func_start GetStringLength
@ u16 GetStringLength(u8 *s)
GetStringLength: @ 8008C24
push {lr}
adds r2, r0, 0
movs r1, 0
ldrb r0, [r2]
cmp r0, 0xFF
beq _08008C3E
_08008C30:
adds r0, r1, 0x1
lsls r0, 16
lsrs r1, r0, 16
adds r0, r2, r1
ldrb r0, [r0]
cmp r0, 0xFF
bne _08008C30
_08008C3E:
adds r0, r1, 0
pop {r1}
bx r1
thumb_func_end GetStringLength
thumb_func_start CompareString
@ u8 CompareString(u8 *s1, u8 *s2)
CompareString: @ 8008C44
push {lr}
adds r2, r0, 0
b _08008C56
_08008C4A:
cmp r0, 0xFF
bne _08008C52
movs r0, 0
b _08008C64
_08008C52:
adds r2, 0x1
adds r1, 0x1
_08008C56:
ldrb r0, [r2]
ldrb r3, [r1]
cmp r0, r3
beq _08008C4A
ldrb r0, [r2]
ldrb r1, [r1]
subs r0, r1
_08008C64:
pop {r1}
bx r1
thumb_func_end CompareString
thumb_func_start CompareString_LimitN
@ u8 CompareString_LimitN(u8 *s1, u8 *s2, u32 n)
CompareString_LimitN: @ 8008C68
push {r4,lr}
adds r3, r0, 0
b _08008C80
_08008C6E:
cmp r0, 0xFF
beq _08008C7C
adds r3, 0x1
adds r1, 0x1
subs r2, 0x1
cmp r2, 0
bne _08008C80
_08008C7C:
movs r0, 0
b _08008C8E
_08008C80:
ldrb r0, [r3]
ldrb r4, [r1]
cmp r0, r4
beq _08008C6E
ldrb r0, [r3]
ldrb r1, [r1]
subs r0, r1
_08008C8E:
pop {r4}
pop {r1}
bx r1
thumb_func_end CompareString_LimitN
thumb_func_start IsStringLengthLessThanN
@ bool8 IsStringLengthLessThanN(u8 *s, s32 n)
IsStringLengthLessThanN: @ 8008C94
push {lr}
adds r3, r0, 0
movs r2, 0
cmp r2, r1
bge _08008CB8
_08008C9E:
adds r0, r3, r2
ldrb r0, [r0]
cmp r0, 0
beq _08008CAE
cmp r0, 0xFF
beq _08008CAE
movs r0, 0x1
b _08008CBA
_08008CAE:
adds r0, r2, 0x1
lsls r0, 24
lsrs r2, r0, 24
cmp r2, r1
blt _08008C9E
_08008CB8:
movs r0, 0
_08008CBA:
pop {r1}
bx r1
thumb_func_end IsStringLengthLessThanN
thumb_func_start ConvertIntToDecimalString
@ u8 *ConvertIntToDecimalString(u8 *dest, s32 value, u8 mode, u8 numDigits)
ConvertIntToDecimalString: @ 8008CC0
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r4, r0, 0
adds r6, r1, 0
lsls r3, 24
ldr r0, =gPowersOfTen
lsrs r3, 22
subs r3, 0x4
adds r3, r0
ldr r0, [r3]
movs r7, 0
cmp r2, 0x1
bne _08008CDE
movs r7, 0x2
_08008CDE:
cmp r2, 0x2
bne _08008CE4
movs r7, 0x1
_08008CE4:
adds r5, r0, 0
cmp r5, 0
ble _08008D60
ldr r0, =gDigits
mov r8, r0
_08008CEE:
adds r0, r6, 0
adds r1, r5, 0
bl __divsi3
lsls r0, 16
lsrs r2, r0, 16
adds r3, r2, 0
adds r0, r5, 0
muls r0, r2
subs r1, r6, r0
cmp r7, 0x1
bne _08008D26
adds r3, r4, 0
adds r4, 0x1
cmp r2, 0x9
bhi _08008D20
mov r6, r8
adds r0, r2, r6
ldrb r0, [r0]
b _08008D22
.pool
_08008D20:
movs r0, 0xAC
_08008D22:
strb r0, [r3]
b _08008D50
_08008D26:
cmp r2, 0
bne _08008D2E
cmp r5, 0x1
bne _08008D46
_08008D2E:
movs r7, 0x1
adds r2, r4, 0
adds r4, 0x1
cmp r3, 0x9
bhi _08008D40
mov r6, r8
adds r0, r3, r6
ldrb r0, [r0]
b _08008D42
_08008D40:
movs r0, 0xAC
_08008D42:
strb r0, [r2]
b _08008D50
_08008D46:
cmp r7, 0x2
bne _08008D50
movs r0, 0x77
strb r0, [r4]
adds r4, 0x1
_08008D50:
adds r6, r1, 0
adds r0, r5, 0
movs r1, 0xA
bl __divsi3
adds r5, r0, 0
cmp r5, 0
bgt _08008CEE
_08008D60:
movs r0, 0xFF
strb r0, [r4]
adds r0, r4, 0
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end ConvertIntToDecimalString
thumb_func_start ConvertUnsignedIntToDecimalString
@ u8 *ConvertUnsignedIntToDecimalString(u8 *dest, u32 value, u8 mode, u8 numDigits)
ConvertUnsignedIntToDecimalString: @ 8008D70
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r4, r0, 0
adds r6, r1, 0
lsls r3, 24
ldr r0, =gPowersOfTen
lsrs r3, 22
subs r3, 0x4
adds r3, r0
ldr r0, [r3]
movs r7, 0
cmp r2, 0x1
bne _08008D8E
movs r7, 0x2
_08008D8E:
cmp r2, 0x2
bne _08008D94
movs r7, 0x1
_08008D94:
adds r5, r0, 0
cmp r5, 0
ble _08008E10
ldr r0, =gDigits
mov r8, r0
_08008D9E:
adds r0, r6, 0
adds r1, r5, 0
bl __udivsi3
lsls r0, 16
lsrs r2, r0, 16
adds r3, r2, 0
adds r0, r5, 0
muls r0, r2
subs r1, r6, r0
cmp r7, 0x1
bne _08008DD6
adds r3, r4, 0
adds r4, 0x1
cmp r2, 0x9
bhi _08008DD0
mov r6, r8
adds r0, r2, r6
ldrb r0, [r0]
b _08008DD2
.pool
_08008DD0:
movs r0, 0xAC
_08008DD2:
strb r0, [r3]
b _08008E00
_08008DD6:
cmp r2, 0
bne _08008DDE
cmp r5, 0x1
bne _08008DF6
_08008DDE:
movs r7, 0x1
adds r2, r4, 0
adds r4, 0x1
cmp r3, 0x9
bhi _08008DF0
mov r6, r8
adds r0, r3, r6
ldrb r0, [r0]
b _08008DF2
_08008DF0:
movs r0, 0xAC
_08008DF2:
strb r0, [r2]
b _08008E00
_08008DF6:
cmp r7, 0x2
bne _08008E00
movs r0, 0x77
strb r0, [r4]
adds r4, 0x1
_08008E00:
adds r6, r1, 0
adds r0, r5, 0
movs r1, 0xA
bl __divsi3
adds r5, r0, 0
cmp r5, 0
bgt _08008D9E
_08008E10:
movs r0, 0xFF
strb r0, [r4]
adds r0, r4, 0
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end ConvertUnsignedIntToDecimalString
thumb_func_start ConvertIntToHexString
@ u8 *ConvertIntToHexString(u8 *dest, s32 value, u8 mode, u8 numDigits)
ConvertIntToHexString: @ 8008E20
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0x4
adds r6, r0, 0
mov r8, r1
lsls r3, 24
lsrs r3, 24
movs r1, 0x1
movs r0, 0x1
cmp r1, r3
bcs _08008E46
_08008E3A:
lsls r1, 4
adds r0, 0x1
lsls r0, 24
lsrs r0, 24
cmp r0, r3
bcc _08008E3A
_08008E46:
movs r3, 0
cmp r2, 0x1
bne _08008E4E
movs r3, 0x2
_08008E4E:
cmp r2, 0x2
bne _08008E54
movs r3, 0x1
_08008E54:
adds r5, r1, 0
cmp r5, 0
ble _08008ECA
ldr r0, =gDigits
mov r9, r0
_08008E5E:
mov r0, r8
adds r1, r5, 0
str r3, [sp]
bl __divsi3
adds r4, r0, 0
adds r7, r4, 0
mov r0, r8
adds r1, r5, 0
bl __modsi3
adds r1, r0, 0
ldr r3, [sp]
cmp r3, 0x1
bne _08008E90
adds r2, r6, 0
adds r6, 0x1
cmp r4, 0xF
bhi _08008EAA
mov r7, r9
adds r0, r4, r7
ldrb r0, [r0]
b _08008EAC
.pool
_08008E90:
cmp r4, 0
bne _08008E98
cmp r5, 0x1
bne _08008EB0
_08008E98:
movs r3, 0x1
adds r2, r6, 0
adds r6, 0x1
cmp r7, 0xF
bhi _08008EAA
mov r4, r9
adds r0, r7, r4
ldrb r0, [r0]
b _08008EAC
_08008EAA:
movs r0, 0xAC
_08008EAC:
strb r0, [r2]
b _08008EBA
_08008EB0:
cmp r3, 0x2
bne _08008EBA
movs r0, 0x77
strb r0, [r6]
adds r6, 0x1
_08008EBA:
mov r8, r1
adds r0, r5, 0
cmp r5, 0
bge _08008EC4
adds r0, 0xF
_08008EC4:
asrs r5, r0, 4
cmp r5, 0
bgt _08008E5E
_08008ECA:
movs r0, 0xFF
strb r0, [r6]
adds r0, r6, 0
add sp, 0x4
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end ConvertIntToHexString
thumb_func_start ExpandStringRefs
@ u8 *ExpandStringRefs(u8 *dest, u8 *src)
ExpandStringRefs: @ 8008EE0
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
_08008EE6:
ldrb r2, [r5]
adds r5, 0x1
adds r0, r2, 0
subs r0, 0xFA
cmp r0, 0x5
bhi _08008FBA
lsls r0, 2
ldr r1, =_08008F00
adds r0, r1
ldr r0, [r0]
mov pc, r0
.pool
.align 2, 0
_08008F00:
.4byte _08008FBA
.4byte _08008FBA
.4byte _08008F2C
.4byte _08008F18
.4byte _08008FBA
.4byte _08008FC0
_08008F18:
ldrb r0, [r5]
adds r5, 0x1
bl GetExpandedStringRef
adds r1, r0, 0
adds r0, r4, 0
bl ExpandStringRefs
adds r4, r0, 0
b _08008EE6
_08008F2C:
strb r2, [r4]
adds r4, 0x1
ldrb r2, [r5]
adds r5, 0x1
strb r2, [r4]
adds r4, 0x1
subs r0, r2, 0x4
cmp r0, 0x14
bhi _08008FB0
lsls r0, 2
ldr r1, =_08008F4C
adds r0, r1
ldr r0, [r0]
mov pc, r0
.pool
.align 2, 0
_08008F4C:
.4byte _08008FA0
.4byte _08008FB0
.4byte _08008FB0
.4byte _08008EE6
.4byte _08008FB0
.4byte _08008EE6
.4byte _08008FB0
.4byte _08008FA8
.4byte _08008FB0
.4byte _08008FB0
.4byte _08008FB0
.4byte _08008EE6
.4byte _08008FB0
.4byte _08008FB0
.4byte _08008FB0
.4byte _08008FB0
.4byte _08008FB0
.4byte _08008EE6
.4byte _08008EE6
.4byte _08008EE6
.4byte _08008EE6
_08008FA0:
ldrb r0, [r5]
strb r0, [r4]
adds r5, 0x1
adds r4, 0x1
_08008FA8:
ldrb r0, [r5]
strb r0, [r4]
adds r5, 0x1
adds r4, 0x1
_08008FB0:
ldrb r0, [r5]
strb r0, [r4]
adds r5, 0x1
adds r4, 0x1
b _08008EE6
_08008FBA:
strb r2, [r4]
adds r4, 0x1
b _08008EE6
_08008FC0:
movs r0, 0xFF
strb r0, [r4]
adds r0, r4, 0
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end ExpandStringRefs
thumb_func_start sub_8008FCC
@ u8 *sub_8008FCC(u8 *dest, u8 *src)
sub_8008FCC: @ 8008FCC
push {r4-r6,lr}
sub sp, 0xC
adds r5, r0, 0
adds r6, r1, 0
ldr r1, =gUnknown_082EC80C
mov r0, sp
movs r2, 0x4
bl memcpy
add r4, sp, 0x4
ldr r1, =gUnknown_082EC810
adds r0, r4, 0
movs r2, 0x5
bl memcpy
adds r0, r5, 0
mov r1, sp
_08008FEE:
bl CopyString
adds r5, r0, 0
_08008FF4:
ldrb r0, [r6]
adds r6, 0x1
cmp r0, 0xFE
beq _0800900C
cmp r0, 0xFF
bne _08009012
b _0800901E
.pool
_0800900C:
adds r0, r5, 0
adds r1, r4, 0
b _08008FEE
_08009012:
strb r0, [r5]
adds r5, 0x1
adds r0, 0x40
strb r0, [r5]
adds r5, 0x1
b _08008FF4
_0800901E:
strb r0, [r5]
adds r0, r5, 0
add sp, 0xC
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_8008FCC
thumb_func_start StringRef_GetPossiblyUnusedStringVar
@ u8 *StringRef_GetPossiblyUnusedStringVar()
StringRef_GetPossiblyUnusedStringVar: @ 800902C
ldr r0, =0x020223ac
bx lr
.pool
thumb_func_end StringRef_GetPossiblyUnusedStringVar
thumb_func_start StringRef_GetPlayerName
@ u8 *StringRef_GetPlayerName()
StringRef_GetPlayerName: @ 8009034
ldr r0, =0x03005d90
ldr r0, [r0]
bx lr
.pool
thumb_func_end StringRef_GetPlayerName
thumb_func_start StringRef_GetStringVar1
@ u8 *StringRef_GetStringVar1()
StringRef_GetStringVar1: @ 8009040
ldr r0, =0x02021cc4
bx lr
.pool
thumb_func_end StringRef_GetStringVar1
thumb_func_start StringRef_GetStringVar2
@ u8 *StringRef_GetStringVar2()
StringRef_GetStringVar2: @ 8009048
ldr r0, =0x02021dc4
bx lr
.pool
thumb_func_end StringRef_GetStringVar2
thumb_func_start StringRef_GetStringVar3
@ u8 *StringRef_GetStringVar3()
StringRef_GetStringVar3: @ 8009050
ldr r0, =0x02021ec4
bx lr
.pool
thumb_func_end StringRef_GetStringVar3
thumb_func_start StringRef_GetDummiedOutGenderDependentString
@ u8 *StringRef_GetDummiedOutGenderDependentString()
StringRef_GetDummiedOutGenderDependentString: @ 8009058
push {lr}
ldr r0, =0x03005d90
ldr r0, [r0]
ldrb r0, [r0, 0x8]
cmp r0, 0
beq _08009070
ldr r0, =gUnknown_085E821A
b _08009072
.pool
_08009070:
ldr r0, =gUnknown_085E8219
_08009072:
pop {r1}
bx r1
.pool
thumb_func_end StringRef_GetDummiedOutGenderDependentString
thumb_func_start StringRef_GetRivalName
@ u8 *StringRef_GetRivalName()
StringRef_GetRivalName: @ 800907C
push {lr}
ldr r0, =0x03005d90
ldr r0, [r0]
ldrb r0, [r0, 0x8]
cmp r0, 0
beq _08009094
ldr r0, =gUnknown_085E8258
b _08009096
.pool
_08009094:
ldr r0, =gUnknown_085E8260
_08009096:
pop {r1}
bx r1
.pool
thumb_func_end StringRef_GetRivalName
thumb_func_start StringRef_GetEmeraldString
@ u8 *StringRef_GetEmeraldString()
StringRef_GetEmeraldString: @ 80090A0
ldr r0, =gUnknown_085E8229
bx lr
.pool
thumb_func_end StringRef_GetEmeraldString
thumb_func_start StringRef_GetAquaString
@ u8 *StringRef_GetAquaString()
StringRef_GetAquaString: @ 80090A8
ldr r0, =gUnknown_085E8231
bx lr
.pool
thumb_func_end StringRef_GetAquaString
thumb_func_start StringRef_GetMagmaString
@ u8 *StringRef_GetMagmaString()
StringRef_GetMagmaString: @ 80090B0
ldr r0, =gUnknown_085E8236
bx lr
.pool
thumb_func_end StringRef_GetMagmaString
thumb_func_start StringRef_GetArchieString
@ u8 *StringRef_GetArchieString()
StringRef_GetArchieString: @ 80090B8
ldr r0, =gUnknown_085E823C
bx lr
.pool
thumb_func_end StringRef_GetArchieString
thumb_func_start StringRef_GetMaxieString
@ u8 *StringRef_GetMaxieString()
StringRef_GetMaxieString: @ 80090C0
ldr r0, =gUnknown_085E8243
bx lr
.pool
thumb_func_end StringRef_GetMaxieString
thumb_func_start StringRef_GetKyogreString
@ u8 *StringRef_GetKyogreString()
StringRef_GetKyogreString: @ 80090C8
ldr r0, =gUnknown_085E8249
bx lr
.pool
thumb_func_end StringRef_GetKyogreString
thumb_func_start StringRef_GetGroudonString
@ u8 *StringRef_GetGroudonString()
StringRef_GetGroudonString: @ 80090D0
ldr r0, =gUnknown_085E8250
bx lr
.pool
thumb_func_end StringRef_GetGroudonString
thumb_func_start GetExpandedStringRef
@ u8 *GetExpandedStringRef(u8 code)
GetExpandedStringRef: @ 80090D8
push {lr}
cmp r0, 0xD
bhi _080090F0
ldr r1, =gStringRefFunctionTable
lsls r0, 2
adds r0, r1
ldr r0, [r0]
bl _call_via_r0
b _080090F2
.pool
_080090F0:
ldr r0, =gUnknown_085E8218
_080090F2:
pop {r1}
bx r1
.pool
thumb_func_end GetExpandedStringRef
thumb_func_start RepeatChar
@ u8 *RepeatChar(u8 *dest, u8 c, u16 n)
RepeatChar: @ 80090FC
push {lr}
adds r3, r0, 0
lsls r1, 24
lsrs r1, 24
lsls r2, 16
lsrs r2, 16
movs r0, 0
cmp r0, r2
bcs _0800911C
_0800910E:
strb r1, [r3]
adds r3, 0x1
adds r0, 0x1
lsls r0, 16
lsrs r0, 16
cmp r0, r2
bcc _0800910E
_0800911C:
movs r0, 0xFF
strb r0, [r3]
adds r0, r3, 0
pop {r1}
bx r1
thumb_func_end RepeatChar
thumb_func_start CopyStringPadded
@ u8 *CopyStringPadded(u8 *dest, u8 *src, u8 c, u16 n)
CopyStringPadded: @ 8009128
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
lsls r2, 24
lsrs r2, 24
lsls r3, 16
lsrs r3, 16
b _08009148
_08009138:
strb r1, [r4]
adds r5, 0x1
adds r4, 0x1
cmp r3, 0
beq _08009148
subs r0, r3, 0x1
lsls r0, 16
lsrs r3, r0, 16
_08009148:
ldrb r1, [r5]
adds r0, r1, 0
cmp r0, 0xFF
bne _08009138
subs r0, r3, 0x1
lsls r0, 16
lsrs r3, r0, 16
ldr r0, =0x0000ffff
cmp r3, r0
beq _0800916C
adds r1, r0, 0
_0800915E:
strb r2, [r4]
adds r4, 0x1
subs r0, r3, 0x1
lsls r0, 16
lsrs r3, r0, 16
cmp r3, r1
bne _0800915E
_0800916C:
movs r0, 0xFF
strb r0, [r4]
adds r0, r4, 0
pop {r4,r5}
pop {r1}
bx r1
.pool
thumb_func_end CopyStringPadded
thumb_func_start RepeatStringTerminator
@ u8 *RepeatStringTerminator(u8 *dest, u16 n)
RepeatStringTerminator: @ 800917C
push {lr}
lsls r2, r1, 16
lsrs r2, 16
movs r1, 0xFF
bl RepeatChar
pop {r1}
bx r1
thumb_func_end RepeatStringTerminator
thumb_func_start CopyString_LimitN_Multibyte
@ u8 *CopyString_LimitN_Multibyte(u8 *dest, u8 *src, u32 n)
CopyString_LimitN_Multibyte: @ 800918C
push {r4,r5,lr}
adds r4, r0, 0
adds r3, r1, 0
subs r2, 0x1
movs r5, 0x1
negs r5, r5
b _080091B2
_0800919A:
strb r0, [r4]
adds r3, 0x1
adds r4, 0x1
subs r0, r3, 0x1
ldrb r0, [r0]
cmp r0, 0xF9
bne _080091B0
ldrb r0, [r3]
strb r0, [r4]
adds r3, 0x1
adds r4, 0x1
_080091B0:
subs r2, 0x1
_080091B2:
cmp r2, r5
beq _080091BE
ldrb r0, [r3]
adds r1, r0, 0
cmp r1, 0xFF
bne _0800919A
_080091BE:
movs r0, 0xFF
strb r0, [r4]
adds r0, r4, 0
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end CopyString_LimitN_Multibyte
thumb_func_start GetStringLength_Multibyte
@ u32 GetStringLength_Multibyte(u8 *s)
GetStringLength_Multibyte: @ 80091CC
push {lr}
adds r2, r0, 0
movs r3, 0
b _080091DE
_080091D4:
cmp r1, 0xF9
bne _080091DA
adds r2, 0x1
_080091DA:
adds r2, 0x1
adds r3, 0x1
_080091DE:
ldrb r1, [r2]
adds r0, r1, 0
cmp r0, 0xFF
bne _080091D4
adds r0, r3, 0
pop {r1}
bx r1
thumb_func_end GetStringLength_Multibyte
thumb_func_start WriteColorChangeControlCode
@ u8 *WriteColorChangeControlCode(u8 *dest, u8 colorType, u8 color)
WriteColorChangeControlCode: @ 80091EC
push {lr}
adds r3, r0, 0
lsls r2, 24
lsrs r2, 24
movs r0, 0xFC
strb r0, [r3]
adds r3, 0x1
cmp r1, 0x1
beq _0800920E
cmp r1, 0x1
bcc _08009208
cmp r1, 0x2
beq _08009214
b _08009218
_08009208:
movs r0, 0x1
strb r0, [r3]
b _08009216
_0800920E:
movs r0, 0x3
strb r0, [r3]
b _08009216
_08009214:
strb r1, [r3]
_08009216:
adds r3, 0x1
_08009218:
strb r2, [r3]
adds r3, 0x1
movs r0, 0xFF
strb r0, [r3]
adds r0, r3, 0
pop {r1}
bx r1
thumb_func_end WriteColorChangeControlCode
thumb_func_start sub_8009228
@ bool8 sub_8009228(u8 *s)
sub_8009228: @ 8009228
push {lr}
adds r2, r0, 0
b _0800923E
_0800922E:
adds r0, r1, 0
cmp r0, 0xA0
bhi _0800923C
cmp r0, 0
beq _0800923C
movs r0, 0x1
b _08009248
_0800923C:
adds r2, 0x1
_0800923E:
ldrb r1, [r2]
adds r0, r1, 0
cmp r0, 0xFF
bne _0800922E
movs r0, 0
_08009248:
pop {r1}
bx r1
thumb_func_end sub_8009228
thumb_func_start sub_800924C
@ bool8 sub_800924C(u8 *s, u32 n)
sub_800924C: @ 800924C
push {r4,lr}
adds r3, r0, 0
adds r4, r1, 0
movs r1, 0
b _08009268
_08009256:
adds r0, r2, 0
cmp r0, 0xA0
bhi _08009264
cmp r0, 0
beq _08009264
movs r0, 0x1
b _08009276
_08009264:
adds r3, 0x1
adds r1, 0x1
_08009268:
ldrb r2, [r3]
adds r0, r2, 0
cmp r0, 0xFF
beq _08009274
cmp r1, r4
blt _08009256
_08009274:
movs r0, 0
_08009276:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_800924C
thumb_func_start GetExtendedControlCodeLength
@ u8 GetExtendedControlCodeLength(u8 code)
GetExtendedControlCodeLength: @ 800927C
push {lr}
lsls r0, 24
lsrs r1, r0, 24
movs r0, 0
cmp r1, 0x18
bhi _0800928E
ldr r0, =gExtendedControlCodeLengths
adds r0, r1, r0
ldrb r0, [r0]
_0800928E:
pop {r1}
bx r1
.pool
thumb_func_end GetExtendedControlCodeLength
thumb_func_start SkipExtendedControlCode
@ u8 *SkipExtendedControlCode(u8 *s)
SkipExtendedControlCode: @ 8009298
push {r4,lr}
adds r4, r0, 0
b _080092AC
_0800929E:
adds r4, 0x1
ldrb r0, [r4]
bl GetExtendedControlCodeLength
lsls r0, 24
lsrs r0, 24
adds r4, r0
_080092AC:
ldrb r0, [r4]
cmp r0, 0xFC
beq _0800929E
adds r0, r4, 0
pop {r4}
pop {r1}
bx r1
thumb_func_end SkipExtendedControlCode
thumb_func_start CompareStringWithoutExtendedControlCodes
@ u8 CompareStringWithoutExtendedControlCodes(u8 *s1, u8 *s2)
CompareStringWithoutExtendedControlCodes: @ 80092BC
push {r4-r6,lr}
adds r4, r0, 0
adds r5, r1, 0
movs r6, 0
b _080092DE
_080092C6:
cmp r1, r0
bcs _080092D4
movs r6, 0x1
negs r6, r6
cmp r0, 0xFF
bne _080092D4
movs r6, 0x1
_080092D4:
ldrb r0, [r4]
cmp r0, 0xFF
beq _080092FE
adds r4, 0x1
adds r5, 0x1
_080092DE:
adds r0, r4, 0
bl SkipExtendedControlCode
adds r4, r0, 0
adds r0, r5, 0
bl SkipExtendedControlCode
adds r5, r0, 0
ldrb r1, [r4]
ldrb r0, [r5]
cmp r1, r0
bls _080092C6
movs r6, 0x1
cmp r1, 0xFF
bne _080092FE
subs r6, 0x2
_080092FE:
adds r0, r6, 0
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end CompareStringWithoutExtendedControlCodes
thumb_func_start StopMusicWhileStringIsPrinted
@ void StopMusicWhileStringIsPrinted(u8 *s, bool8 stopMusic)
StopMusicWhileStringIsPrinted: @ 8009308
push {r4,lr}
adds r4, r0, 0
lsls r1, 24
lsrs r1, 24
cmp r1, 0x1
bne _08009368
bl StripExtendedControlCodes
adds r0, r4, 0
bl GetStringLength
lsls r0, 24
lsrs r2, r0, 24
adds r1, r2, 0
adds r0, r1, 0x1
lsls r0, 24
lsrs r2, r0, 24
adds r3, r2, 0
adds r1, r4, r1
movs r0, 0xFC
strb r0, [r1]
adds r0, r3, 0x1
lsls r0, 24
lsrs r2, r0, 24
adds r3, r4, r3
movs r0, 0x16
strb r0, [r3]
adds r0, r2, 0x1
lsls r0, 24
adds r2, r4, r2
movs r1, 0xFF
strb r1, [r2]
movs r1, 0xFF
lsls r1, 24
adds r0, r1
b _0800935A
_08009350:
adds r1, r2, r4
ldrb r0, [r1]
strb r0, [r1, 0x2]
subs r0, r2, 0x1
lsls r0, 24
_0800935A:
lsrs r2, r0, 24
cmp r2, 0xFF
bne _08009350
movs r0, 0xFC
strb r0, [r4]
movs r0, 0x15
strb r0, [r4, 0x1]
_08009368:
pop {r4}
pop {r0}
bx r0
thumb_func_end StopMusicWhileStringIsPrinted
thumb_func_start StripExtendedControlCodes
@ void StripExtendedControlCodes(u8 *s)
StripExtendedControlCodes: @ 8009370
push {r4-r6,lr}
adds r5, r0, 0
movs r4, 0
movs r6, 0
ldrb r0, [r5]
cmp r0, 0xFF
beq _080093C0
_0800937E:
adds r0, r5, r4
ldrb r0, [r0]
cmp r0, 0xFC
bne _080093A0
adds r0, r4, 0x1
lsls r0, 16
lsrs r4, r0, 16
adds r0, r5, r4
ldrb r0, [r0]
bl GetExtendedControlCodeLength
lsls r0, 24
lsrs r0, 24
adds r0, r4, r0
lsls r0, 16
lsrs r4, r0, 16
b _080093B8
_080093A0:
adds r2, r6, 0
adds r0, r2, 0x1
lsls r0, 16
lsrs r6, r0, 16
adds r2, r5, r2
adds r1, r4, 0
adds r0, r1, 0x1
lsls r0, 16
lsrs r4, r0, 16
adds r1, r5, r1
ldrb r0, [r1]
strb r0, [r2]
_080093B8:
adds r0, r5, r4
ldrb r0, [r0]
cmp r0, 0xFF
bne _0800937E
_080093C0:
adds r1, r5, r6
movs r0, 0xFF
strb r0, [r1]
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end StripExtendedControlCodes
.align 2, 0 @ Don't pad with nop.