diff options
Diffstat (limited to 'asm/string_util.s')
-rw-r--r-- | asm/string_util.s | 1389 |
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 |