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 /src | |
parent | a395cd7e53ed33634eef4df22814da4ba96a3357 (diff) | |
parent | dcd35c895cb1c5680f92360cb084e6924ed3b76f (diff) |
Merge pull request #498 from PikalaxALT/unk_text_8095904
Unk text 8095904
Diffstat (limited to 'src')
-rw-r--r-- | src/unk_text_8095904.c | 266 |
1 files changed, 266 insertions, 0 deletions
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; + } +} |