diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-02-06 21:48:15 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-06 21:48:15 -0800 |
commit | 6eaadfc62e89a25c2de674aebf69f077c491580f (patch) | |
tree | 0e957de1b15e584812065f6228317656d6611187 | |
parent | a395cd7e53ed33634eef4df22814da4ba96a3357 (diff) | |
parent | dcd35c895cb1c5680f92360cb084e6924ed3b76f (diff) |
Merge pull request #498 from PikalaxALT/unk_text_8095904
Unk text 8095904
-rw-r--r-- | asm/unk_text_8095904.s | 256 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/unk_text_8095904.c | 266 |
3 files changed, 267 insertions, 257 deletions
diff --git a/asm/unk_text_8095904.s b/asm/unk_text_8095904.s deleted file mode 100644 index 00c81faca..000000000 --- a/asm/unk_text_8095904.s +++ /dev/null @@ -1,256 +0,0 @@ - .include "constants/gba_constants.inc" - .include "include/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8095904 -sub_8095904: @ 8095904 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - str r0, [sp] - adds r7, r1, 0 - adds r4, r2, 0 - ldr r0, [sp, 0x3C] - lsls r4, 24 - lsrs r4, 24 - lsls r3, 16 - lsrs r3, 16 - str r3, [sp, 0x4] - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x8] - ldr r0, [sp] - bl StringLength - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - cmp r4, 0 - bne _08095988 - movs r5, 0 - cmp r5, r8 - bcs _08095A2E -_0809593E: - ldr r1, [sp] - adds r0, r1, r5 - ldrb r2, [r0] - ldr r0, _08095980 @ =0x0000fff0 - ands r0, r2 - lsls r0, 6 - movs r1, 0xF - ands r2, r1 - lsls r2, 5 - adds r0, r2 - ldr r1, _08095984 @ =gFont3LatinGlyphs - adds r4, r0, r1 - adds r0, r4, 0 - adds r1, r7, 0 - movs r2, 0x10 - bl CpuSet - movs r2, 0x80 - lsls r2, 2 - adds r0, r4, r2 - ldr r3, [sp, 0x4] - adds r1, r7, r3 - movs r2, 0x10 - bl CpuSet - adds r7, 0x20 - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, r8 - bcc _0809593E - b _08095A2E - .align 2, 0 -_08095980: .4byte 0x0000fff0 -_08095984: .4byte gFont3LatinGlyphs -_08095988: - movs r0, 0 - mov r9, r0 - ldr r1, [sp, 0x8] - lsls r0, r1, 28 - lsrs r0, 24 - str r0, [sp, 0xC] - mov r2, r8 - lsls r0, r2, 21 - movs r1, 0 - lsrs r0, 1 - str r0, [sp, 0x10] -_0809599E: - movs r5, 0 - ldr r3, [sp, 0x4] - adds r3, r7, r3 - str r3, [sp, 0x14] - adds r0, r1, 0x1 - str r0, [sp, 0x18] - cmp r5, r8 - bcs _08095A12 - movs r2, 0xF - mov r12, r2 - lsls r1, 9 - ldr r0, _08095A40 @ =gFont3LatinGlyphs - adds r1, r0 - mov r10, r1 -_080959BA: - ldr r3, [sp] - adds r0, r3, r5 - ldrb r1, [r0] - ldr r0, _08095A44 @ =0x0000fff0 - ands r0, r1 - lsls r0, 6 - mov r2, r12 - ands r1, r2 - lsls r1, 5 - adds r0, r1 - mov r3, r10 - adds r4, r0, r3 - movs r6, 0 - adds r5, 0x1 -_080959D6: - ldrb r0, [r4] - movs r3, 0xF0 - ands r3, r0 - mov r2, r12 - ands r2, r0 - cmp r3, 0 - bne _080959E6 - ldr r3, [sp, 0xC] -_080959E6: - cmp r2, 0 - bne _080959EC - ldr r2, [sp, 0x8] -_080959EC: - mov r0, r9 - adds r1, r0, 0x1 - lsls r1, 16 - lsrs r1, 16 - mov r9, r1 - ldr r1, [sp, 0x40] - adds r0, r1, r0 - orrs r3, r2 - strb r3, [r0] - adds r4, 0x1 - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x1F - bls _080959D6 - lsls r0, r5, 16 - lsrs r5, r0, 16 - cmp r5, r8 - bcc _080959BA -_08095A12: - ldr r0, [sp, 0x40] - adds r1, r7, 0 - ldr r3, [sp, 0x10] - lsrs r2, r3, 16 - bl CpuSet - ldr r7, [sp, 0x14] - movs r0, 0 - mov r9, r0 - ldr r1, [sp, 0x18] - lsls r0, r1, 16 - lsrs r1, r0, 16 - cmp r1, 0x1 - bls _0809599E -_08095A2E: - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08095A40: .4byte gFont3LatinGlyphs -_08095A44: .4byte 0x0000fff0 - thumb_func_end sub_8095904 - - thumb_func_start unref_sub_8095A48 -unref_sub_8095A48: @ 8095A48 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - lsls r3, 24 - lsrs r7, r3, 24 - movs r6, 0 -_08095A60: - movs r3, 0 - ldrb r0, [r4] - adds r1, r0, 0 - adds r2, r0, 0 - cmp r1, 0xFF - beq _08095ACE -_08095A6C: - mov r0, sp - adds r0, r3 - adds r0, 0x8 - strb r2, [r0] - adds r4, 0x1 - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x3 - bhi _08095AA8 - ldrb r0, [r4] - adds r1, r0, 0 - adds r2, r0, 0 - cmp r1, 0xFF - bne _08095A6C - cmp r3, 0 - beq _08095ACE - movs r6, 0x1 - cmp r3, 0x3 - bhi _08095AA8 - movs r2, 0 -_08095A96: - adds r0, r3, 0 - adds r1, r0, 0x1 - lsls r1, 16 - lsrs r3, r1, 16 - add r0, sp - adds r0, 0x8 - strb r2, [r0] - cmp r3, 0x3 - bls _08095A96 -_08095AA8: - mov r1, sp - adds r1, r3 - adds r1, 0x8 - movs r0, 0xFF - strb r0, [r1] - str r7, [sp] - ldr r0, [sp, 0x28] - str r0, [sp, 0x4] - add r0, sp, 0x8 - adds r1, r5, 0 - mov r2, r8 - movs r3, 0x80 - bl sub_8095904 - movs r0, 0x80 - lsls r0, 1 - adds r5, r0 - cmp r6, 0 - beq _08095A60 -_08095ACE: - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end unref_sub_8095A48 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 6b8a0bcf1..1ca6bc702 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -134,7 +134,7 @@ SECTIONS { src/engine/trainer_card.o(.text); src/engine/save_menu_util.o(.text); src/battle/battle_party_menu.o(.text); - asm/unk_text_8095904.o(.text); + src/unk_text_8095904.o(.text); src/pokemon/pokemon_storage_system.o(.text); src/pokemon/pokemon_storage_system_2.o(.text); src/pokemon/pokemon_storage_system_3.o(.text); diff --git a/src/unk_text_8095904.c b/src/unk_text_8095904.c new file mode 100644 index 000000000..4b190bdaa --- /dev/null +++ b/src/unk_text_8095904.c @@ -0,0 +1,266 @@ +#include "global.h" +#include "text.h" +#include "string_util.h" + +// static types + +// static declarations + +// rodata + +extern const u32 gFont3LatinGlyphs[]; + +// text + +#ifdef NONMATCHING +void sub_8095904(const u8 *src, u8 *dest, u8 bgOverride, u16 width, u8 bg, u8 *buffer) +{ + u16 strlen = StringLength(src); + if (bgOverride == 0) + { + u16 i; + for (i = 0; i < strlen; i++) + { + const u8 *glyphs = (const u8 *)(gFont3LatinGlyphs + ((src[i] & 0xfff0) * 16) + ((src[i] & 0xf) * 8)); + CpuCopy16(glyphs, dest, 32); + CpuCopy16(glyphs + 0x200, dest + width, 32); + dest += 32; + } + } + else + { + u16 i; // sp18 + u16 r9 = 0; + u8 bgHi = bg << 4; + u16 size = strlen * 32; + for (i = 0; i < 2; i++) + { + u16 j; + for (j = 0; j < strlen; j++) // r5 + { + const u32 *glyphs = (const u8 *)(gFont3LatinGlyphs + (i * 0x80) + ((src[j] & 0xfff0) * 16) + ((src[j] & 0xf) * 8)); + + u16 k; // r6 + for (k = 0; k < 32; k++) + { + u8 r3 = *glyphs & 0xf0; + u8 r2 = *glyphs & 0x0f; + if (r3 == 0) + { + r3 = bgHi; + } + if (r2 == 0) + { + r2 = bg; + } + buffer[r9++] = r3 | r2; + glyphs++; + } + } + CpuCopy16(buffer, dest, size); + dest += width; + r9 = 0; + } + } +} +#else +__attribute__((naked)) void sub_8095904(const u8 *src, u8 *dest, u8 bgOverride, u16 width, u8 bg, u8 *buffer) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x1C\n" + "\tstr r0, [sp]\n" + "\tadds r7, r1, 0\n" + "\tadds r4, r2, 0\n" + "\tldr r0, [sp, 0x3C]\n" + "\tlsls r4, 24\n" + "\tlsrs r4, 24\n" + "\tlsls r3, 16\n" + "\tlsrs r3, 16\n" + "\tstr r3, [sp, 0x4]\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp, 0x8]\n" + "\tldr r0, [sp]\n" + "\tbl StringLength\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmov r8, r0\n" + "\tcmp r4, 0\n" + "\tbne _08095988\n" + "\tmovs r5, 0\n" + "\tcmp r5, r8\n" + "\tbcs _08095A2E\n" + "_0809593E:\n" + "\tldr r1, [sp]\n" + "\tadds r0, r1, r5\n" + "\tldrb r2, [r0]\n" + "\tldr r0, _08095980 @ =0x0000fff0\n" + "\tands r0, r2\n" + "\tlsls r0, 6\n" + "\tmovs r1, 0xF\n" + "\tands r2, r1\n" + "\tlsls r2, 5\n" + "\tadds r0, r2\n" + "\tldr r1, _08095984 @ =gFont3LatinGlyphs\n" + "\tadds r4, r0, r1\n" + "\tadds r0, r4, 0\n" + "\tadds r1, r7, 0\n" + "\tmovs r2, 0x10\n" + "\tbl CpuSet\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 2\n" + "\tadds r0, r4, r2\n" + "\tldr r3, [sp, 0x4]\n" + "\tadds r1, r7, r3\n" + "\tmovs r2, 0x10\n" + "\tbl CpuSet\n" + "\tadds r7, 0x20\n" + "\tadds r0, r5, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tcmp r5, r8\n" + "\tbcc _0809593E\n" + "\tb _08095A2E\n" + "\t.align 2, 0\n" + "_08095980: .4byte 0x0000fff0\n" + "_08095984: .4byte gFont3LatinGlyphs\n" + "_08095988:\n" + "\tmovs r0, 0\n" + "\tmov r9, r0\n" + "\tldr r1, [sp, 0x8]\n" + "\tlsls r0, r1, 28\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp, 0xC]\n" + "\tmov r2, r8\n" + "\tlsls r0, r2, 21\n" + "\tmovs r1, 0\n" + "\tlsrs r0, 1\n" + "\tstr r0, [sp, 0x10]\n" + "_0809599E:\n" + "\tmovs r5, 0\n" + "\tldr r3, [sp, 0x4]\n" + "\tadds r3, r7, r3\n" + "\tstr r3, [sp, 0x14]\n" + "\tadds r0, r1, 0x1\n" + "\tstr r0, [sp, 0x18]\n" + "\tcmp r5, r8\n" + "\tbcs _08095A12\n" + "\tmovs r2, 0xF\n" + "\tmov r12, r2\n" + "\tlsls r1, 9\n" + "\tldr r0, _08095A40 @ =gFont3LatinGlyphs\n" + "\tadds r1, r0\n" + "\tmov r10, r1\n" + "_080959BA:\n" + "\tldr r3, [sp]\n" + "\tadds r0, r3, r5\n" + "\tldrb r1, [r0]\n" + "\tldr r0, _08095A44 @ =0x0000fff0\n" + "\tands r0, r1\n" + "\tlsls r0, 6\n" + "\tmov r2, r12\n" + "\tands r1, r2\n" + "\tlsls r1, 5\n" + "\tadds r0, r1\n" + "\tmov r3, r10\n" + "\tadds r4, r0, r3\n" + "\tmovs r6, 0\n" + "\tadds r5, 0x1\n" + "_080959D6:\n" + "\tldrb r0, [r4]\n" + "\tmovs r3, 0xF0\n" + "\tands r3, r0\n" + "\tmov r2, r12\n" + "\tands r2, r0\n" + "\tcmp r3, 0\n" + "\tbne _080959E6\n" + "\tldr r3, [sp, 0xC]\n" + "_080959E6:\n" + "\tcmp r2, 0\n" + "\tbne _080959EC\n" + "\tldr r2, [sp, 0x8]\n" + "_080959EC:\n" + "\tmov r0, r9\n" + "\tadds r1, r0, 0x1\n" + "\tlsls r1, 16\n" + "\tlsrs r1, 16\n" + "\tmov r9, r1\n" + "\tldr r1, [sp, 0x40]\n" + "\tadds r0, r1, r0\n" + "\torrs r3, r2\n" + "\tstrb r3, [r0]\n" + "\tadds r4, 0x1\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "\tcmp r6, 0x1F\n" + "\tbls _080959D6\n" + "\tlsls r0, r5, 16\n" + "\tlsrs r5, r0, 16\n" + "\tcmp r5, r8\n" + "\tbcc _080959BA\n" + "_08095A12:\n" + "\tldr r0, [sp, 0x40]\n" + "\tadds r1, r7, 0\n" + "\tldr r3, [sp, 0x10]\n" + "\tlsrs r2, r3, 16\n" + "\tbl CpuSet\n" + "\tldr r7, [sp, 0x14]\n" + "\tmovs r0, 0\n" + "\tmov r9, r0\n" + "\tldr r1, [sp, 0x18]\n" + "\tlsls r0, r1, 16\n" + "\tlsrs r1, r0, 16\n" + "\tcmp r1, 0x1\n" + "\tbls _0809599E\n" + "_08095A2E:\n" + "\tadd sp, 0x1C\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08095A40: .4byte gFont3LatinGlyphs\n" + "_08095A44: .4byte 0x0000fff0"); +} +#endif + +void unref_sub_8095A48(const u8 *src, u8 *dest, u8 bgOverride, u8 width, u8 *buffer) +{ + u8 tmpBuffer[5]; + bool8 r6 = FALSE; + while (!r6) + { + u16 i; + for (i = 0; i < 4; i++) + { + if (*src == EOS) + { + if (i == 0) + { + return; + } + r6 = TRUE; + break; + } + else + { + tmpBuffer[i] = *src++; + } + } + while (i < 4) + { + tmpBuffer[i++] = 0; + } + tmpBuffer[i] = EOS; + sub_8095904(tmpBuffer, dest, bgOverride, 0x80, width, buffer); + dest += 0x100; + } +} |