summaryrefslogtreecommitdiff
path: root/asm/string_util.s
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2015-11-24 12:35:16 -0800
committerYamaArashi <shadow962@live.com>2015-11-24 12:35:16 -0800
commit3565d5ea5bc7036334e3a70710b039237c9e7151 (patch)
tree9c3abd9630029eeaf9029652bea53efec676f6b6 /asm/string_util.s
parente417efb82005e599581542494fae3b8b1d2132e7 (diff)
split out string utility code
Diffstat (limited to 'asm/string_util.s')
-rw-r--r--asm/string_util.s1389
1 files changed, 1389 insertions, 0 deletions
diff --git a/asm/string_util.s b/asm/string_util.s
new file mode 100644
index 000000000..dbc64ca8a
--- /dev/null
+++ b/asm/string_util.s
@@ -0,0 +1,1389 @@
+ 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 StringCompare_LimitN
+; u8 StringCompare_LimitN(u8 *s1, u8 *s2, u32 n)
+StringCompare_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 StringCompare_LimitN
+
+ thumb_func_start IsStringLengthLessThanN
+; BOOL 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
+ .align 2, 0
+ .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
+ .align 2, 0
+ .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
+ .align 2, 0
+ .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
+ .align 2, 0
+ .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
+ .align 2, 0
+ .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
+ .align 2, 0
+ .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
+ .align 2, 0
+ .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
+ .align 2, 0
+ .pool
+ thumb_func_end StringRef_GetPlayerName
+
+ thumb_func_start StringRef_GetStringVar1
+; u8 *StringRef_GetStringVar1()
+StringRef_GetStringVar1: ; 8009040
+ ldr r0, =0x02021cc4
+ bx lr
+ .align 2, 0
+ .pool
+ thumb_func_end StringRef_GetStringVar1
+
+ thumb_func_start StringRef_GetStringVar2
+; u8 *StringRef_GetStringVar2()
+StringRef_GetStringVar2: ; 8009048
+ ldr r0, =0x02021dc4
+ bx lr
+ .align 2, 0
+ .pool
+ thumb_func_end StringRef_GetStringVar2
+
+ thumb_func_start StringRef_GetStringVar3
+; u8 *StringRef_GetStringVar3()
+StringRef_GetStringVar3: ; 8009050
+ ldr r0, =0x02021ec4
+ bx lr
+ .align 2, 0
+ .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
+ .align 2, 0
+ .pool
+@08009070:
+ ldr r0, =gUnknown_085E8219
+@08009072:
+ pop {r1}
+ bx r1
+ .align 2, 0
+ .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
+ .align 2, 0
+ .pool
+@08009094:
+ ldr r0, =gUnknown_085E8260
+@08009096:
+ pop {r1}
+ bx r1
+ .align 2, 0
+ .pool
+ thumb_func_end StringRef_GetRivalName
+
+ thumb_func_start StringRef_GetEmeraldString
+; u8 *StringRef_GetEmeraldString()
+StringRef_GetEmeraldString: ; 80090A0
+ ldr r0, =gUnknown_085E8229
+ bx lr
+ .align 2, 0
+ .pool
+ thumb_func_end StringRef_GetEmeraldString
+
+ thumb_func_start StringRef_GetAquaString
+; u8 *StringRef_GetAquaString()
+StringRef_GetAquaString: ; 80090A8
+ ldr r0, =gUnknown_085E8231
+ bx lr
+ .align 2, 0
+ .pool
+ thumb_func_end StringRef_GetAquaString
+
+ thumb_func_start StringRef_GetMagmaString
+; u8 *StringRef_GetMagmaString()
+StringRef_GetMagmaString: ; 80090B0
+ ldr r0, =gUnknown_085E8236
+ bx lr
+ .align 2, 0
+ .pool
+ thumb_func_end StringRef_GetMagmaString
+
+ thumb_func_start StringRef_GetArchieString
+; u8 *StringRef_GetArchieString()
+StringRef_GetArchieString: ; 80090B8
+ ldr r0, =gUnknown_085E823C
+ bx lr
+ .align 2, 0
+ .pool
+ thumb_func_end StringRef_GetArchieString
+
+ thumb_func_start StringRef_GetMaxieString
+; u8 *StringRef_GetMaxieString()
+StringRef_GetMaxieString: ; 80090C0
+ ldr r0, =gUnknown_085E8243
+ bx lr
+ .align 2, 0
+ .pool
+ thumb_func_end StringRef_GetMaxieString
+
+ thumb_func_start StringRef_GetKyogreString
+; u8 *StringRef_GetKyogreString()
+StringRef_GetKyogreString: ; 80090C8
+ ldr r0, =gUnknown_085E8249
+ bx lr
+ .align 2, 0
+ .pool
+ thumb_func_end StringRef_GetKyogreString
+
+ thumb_func_start StringRef_GetGroudonString
+; u8 *StringRef_GetGroudonString()
+StringRef_GetGroudonString: ; 80090D0
+ ldr r0, =gUnknown_085E8250
+ bx lr
+ .align 2, 0
+ .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
+ .align 2, 0
+ .pool
+@080090F0:
+ ldr r0, =gUnknown_085E8218
+@080090F2:
+ pop {r1}
+ bx r1
+ .align 2, 0
+ .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
+ .align 2, 0
+ .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 StringCopy_LimitN_Multibyte
+; u8 *StringCopy_LimitN_Multibyte(u8 *dest, u8 *src, u32 n)
+StringCopy_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 StringCopy_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
+; BOOL 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
+; BOOL 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 command)
+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
+ .align 2, 0
+ .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, BOOL 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