summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-02-06 21:48:15 -0800
committerGitHub <noreply@github.com>2018-02-06 21:48:15 -0800
commit6eaadfc62e89a25c2de674aebf69f077c491580f (patch)
tree0e957de1b15e584812065f6228317656d6611187
parenta395cd7e53ed33634eef4df22814da4ba96a3357 (diff)
parentdcd35c895cb1c5680f92360cb084e6924ed3b76f (diff)
Merge pull request #498 from PikalaxALT/unk_text_8095904
Unk text 8095904
-rw-r--r--asm/unk_text_8095904.s256
-rw-r--r--ld_script.txt2
-rw-r--r--src/unk_text_8095904.c266
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;
+ }
+}