summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com>2018-11-20 21:47:18 +0800
committernullableVoidPtr <30564701+nullableVoidPtr@users.noreply.github.com>2018-11-20 21:55:23 +0800
commited3b066e77ee384110f83b36fb352000e6f1e26e (patch)
tree082d1bcae43368d49cad8f98c219d3dfa2f3884d
parentfbe7d0d3bb9eb3570d5a5f8f611bb41427d06b33 (diff)
parent192ee78bb96bae8dc8316cdd9edf2112ad2d1777 (diff)
Merge remote-tracking branch 'PikalaxALT/text'
-rw-r--r--asm/text.s380
-rw-r--r--include/code_800558C.h6
-rw-r--r--include/code_800B540.h6
-rw-r--r--include/file_system.h34
-rwxr-xr-xld_script.txt1
-rw-r--r--src/file_system.c32
-rw-r--r--src/text.c200
7 files changed, 251 insertions, 408 deletions
diff --git a/asm/text.s b/asm/text.s
index bf0c037..98b8797 100644
--- a/asm/text.s
+++ b/asm/text.s
@@ -5,386 +5,6 @@
.text
- thumb_func_start sub_8006218
-sub_8006218:
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r1, _080062F4
- movs r0, 0
- str r0, [r1]
- ldr r0, _080062F8
- ldr r5, _080062FC
- adds r1, r5, 0
- bl OpenFileAndGetFileDataPtr
- ldr r4, _08006300
- str r0, [r4]
- ldr r0, _08006304
- adds r1, r5, 0
- bl OpenFileAndGetFileDataPtr
- str r0, [r4, 0x4]
- ldr r2, _08006308
- ldr r1, [r4]
- ldr r1, [r1, 0x4]
- str r1, [r2]
- ldr r0, [r0, 0x4]
- str r0, [r2, 0x4]
- ldr r1, _0800630C
- movs r0, 0xB
- str r0, [r1]
- movs r0, 0xC
- str r0, [r1, 0x4]
- ldr r0, _08006310
- movs r4, 0
- movs r3, 0
- adds r2, r0, 0
- adds r2, 0x46
- adds r0, 0x4
- movs r1, 0x3
-_08006264:
- strh r3, [r0]
- strh r3, [r0, 0x4]
- strb r4, [r2]
- adds r2, 0x48
- adds r0, 0x48
- subs r1, 0x1
- cmp r1, 0
- bge _08006264
- ldr r1, _08006314
- movs r0, 0
- strh r0, [r1]
- movs r3, 0
- ldr r0, _08006318
- mov r9, r0
- ldr r1, _0800631C
- mov r10, r1
- ldr r7, _08006320
- ldr r2, _08006324
- mov r8, r2
- movs r0, 0x80
- lsls r0, 4
- adds r6, r7, r0
- ldr r4, _08006328
- movs r5, 0
- mov r12, r6
-_08006296:
- lsls r0, r3, 6
- adds r2, r0, r7
- mov r1, r8
- strh r1, [r2]
- adds r1, r0, r6
- strh r4, [r1]
- adds r3, 0x1
- add r0, r12
- adds r0, 0x2
- adds r2, 0x2
- movs r1, 0x1E
-_080062AC:
- strh r5, [r2]
- strh r4, [r0]
- adds r0, 0x2
- adds r2, 0x2
- subs r1, 0x1
- cmp r1, 0
- bge _080062AC
- cmp r3, 0x13
- ble _08006296
- movs r1, 0
- movs r0, 0x1
- mov r2, r9
- strb r0, [r2]
- ldr r0, _0800632C
- mov r2, r10
- str r0, [r2]
- ldr r0, _08006330
- str r1, [r0]
- ldr r2, _08006334
- strb r1, [r2]
- movs r0, 0x1
- ldr r1, _08006338
- str r0, [r1]
- movs r0, 0x14
- ldr r2, _0800633C
- str r0, [r2]
- movs r0, 0
- bl xxx_update_some_bg_tiles
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080062F4: .4byte gUnknown_20274AC
-_080062F8: .4byte gUnknown_80B87B4
-_080062FC: .4byte gUnknown_8300500
-_08006300: .4byte gKanji
-_08006304: .4byte gUnknown_80B87BC
-_08006308: .4byte gUnknown_2027490
-_0800630C: .4byte gUnknown_202B028
-_08006310: .4byte gUnknown_2027370
-_08006314: .4byte gUnknown_2027498
-_08006318: .4byte gUnknown_202B034
-_0800631C: .4byte gUnknown_202B030
-_08006320: .4byte gUnknown_202B038
-_08006324: .4byte 0x0000f279
-_08006328: .4byte 0x0000f27a
-_0800632C: .4byte 0x88888888
-_08006330: .4byte gUnknown_203B078
-_08006334: .4byte gUnknown_20274A5
-_08006338: .4byte gUnknown_202B020
-_0800633C: .4byte gUnknown_202B024
- thumb_func_end sub_8006218
-
- thumb_func_start xxx_update_some_bg_tiles
-xxx_update_some_bg_tiles:
- push {r4,r5,lr}
- adds r1, r0, 0
- ldr r0, _08006360
- ldr r5, [r0]
- ldr r4, _08006364
- str r1, [r0]
- cmp r1, 0
- beq _08006354
- cmp r1, 0x2
- bne _0800636C
-_08006354:
- movs r0, 0x2
- bl sub_800CDA8
- ldr r2, _08006368
- b _08006374
- .align 2, 0
-_08006360: .4byte gUnknown_20274B0
-_08006364: .4byte 0x06004f40
-_08006368: .4byte gUnknown_80B87C4
-_0800636C:
- movs r0, 0x1
- bl sub_800CDA8
- ldr r2, _080063A4
-_08006374:
- ldr r1, _080063A8
- ldr r0, _080063AC
- str r0, [r1]
- ldm r2!, {r0}
- stm r4!, {r0}
- ldm r2!, {r0}
- stm r4!, {r0}
- ldm r2!, {r0}
- stm r4!, {r0}
- ldm r2!, {r0}
- stm r4!, {r0}
- ldm r2!, {r0}
- stm r4!, {r0}
- ldm r2!, {r0}
- stm r4!, {r0}
- ldm r2!, {r0}
- stm r4!, {r0}
- ldr r0, [r2]
- str r0, [r4]
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080063A4: .4byte gUnknown_80B87E4
-_080063A8: .4byte gUnknown_202B030
-_080063AC: .4byte 0x88888888
- thumb_func_end xxx_update_some_bg_tiles
-
- thumb_func_start sub_80063B0
-sub_80063B0:
- ldr r0, _080063B8
- ldr r0, [r0]
- bx lr
- .align 2, 0
-_080063B8: .4byte gUnknown_20274B0
- thumb_func_end sub_80063B0
-
- thumb_func_start sub_80063BC
-sub_80063BC:
- ldr r1, _080063C8
- ldrb r2, [r1]
- strb r0, [r1]
- adds r0, r2, 0
- bx lr
- .align 2, 0
-_080063C8: .4byte gUnknown_202B034
- thumb_func_end sub_80063BC
-
- thumb_func_start sub_80063CC
-sub_80063CC:
- ldr r1, _080063D4
- str r0, [r1]
- bx lr
- .align 2, 0
-_080063D4: .4byte gUnknown_20274AC
- thumb_func_end sub_80063CC
-
- thumb_func_start sub_80063D8
-sub_80063D8:
- push {lr}
- adds r1, r0, 0
- cmp r1, 0
- bne _080063F0
- ldr r0, _080063E8
- ldr r0, [r0]
- ldr r2, _080063EC
- b _08006410
- .align 2, 0
-_080063E8: .4byte gUnknown_20274B0
-_080063EC: .4byte 0x88888888
-_080063F0:
- movs r0, 0xF
- ands r0, r1
- lsls r2, r0, 4
- orrs r2, r0
- lsls r1, r0, 8
- orrs r2, r1
- lsls r1, r0, 12
- orrs r2, r1
- lsls r1, r0, 16
- orrs r2, r1
- lsls r1, r0, 20
- orrs r2, r1
- lsls r1, r0, 24
- orrs r2, r1
- lsls r0, 28
- orrs r2, r0
-_08006410:
- ldr r0, _08006418
- str r2, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_08006418: .4byte gUnknown_202B030
- thumb_func_end sub_80063D8
-
- thumb_func_start sub_800641C
-sub_800641C:
- push {lr}
- sub sp, 0x4
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- movs r3, 0
- str r3, [sp]
- mov r3, sp
- bl sub_8006438
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end sub_800641C
-
- thumb_func_start sub_8006438
-sub_8006438:
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- adds r4, r0, 0
- mov r8, r3
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x2
- mov r9, r0
- cmp r4, 0
- bne _0800645C
- ldr r4, _080064F0
-_0800645C:
- cmp r2, 0
- beq _08006464
- bl sub_8009388
-_08006464:
- bl sub_800898C
- movs r6, 0
- adds r5, r4, 0
- adds r5, 0xC
- ldr r1, _080064F4
- str r1, [sp, 0x18]
-_08006472:
- ldr r0, [sp, 0x18]
- adds r1, r4, 0
- ldm r1!, {r2,r3,r7}
- stm r0!, {r2,r3,r7}
- ldm r1!, {r2,r3,r7}
- stm r0!, {r2,r3,r7}
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _080064C4
- ldr r1, _080064F8
- lsls r0, r6, 2
- adds r0, r1
- ldr r0, [r0]
- str r0, [sp]
- str r4, [sp, 0x4]
- mov r2, r10
- str r2, [sp, 0x8]
- mov r3, r9
- str r3, [sp, 0xC]
- mov r7, r8
- str r7, [sp, 0x10]
- movs r0, 0
- str r0, [sp, 0x14]
- ldr r0, _080064FC
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, _08006500
- ldr r3, _08006504
- bl sub_8006554
- adds r0, r4, 0
- mov r1, r8
- bl sub_80089AC
- movs r0, 0
- ldrsh r1, [r5, r0]
- movs r2, 0x4
- ldrsh r0, [r5, r2]
- muls r0, r1
- add r9, r0
-_080064C4:
- adds r5, 0x18
- adds r4, 0x18
- ldr r3, [sp, 0x18]
- adds r3, 0x18
- str r3, [sp, 0x18]
- adds r6, 0x1
- cmp r6, 0x3
- ble _08006472
- ldr r2, _08006508
- ldr r0, _0800650C
- ldr r1, _08006510
- str r0, [r2]
- movs r0, 0x1
- strb r0, [r1]
- 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
-_080064F0: .4byte gUnknown_80B857C
-_080064F4: .4byte gUnknown_202AFC0
-_080064F8: .4byte gUnknown_80B8804
-_080064FC: .4byte gUnknown_2027370
-_08006500: .4byte gUnknown_20274B4
-_08006504: .4byte gUnknown_202B038
-_08006508: .4byte gUnknown_203B078
-_0800650C: .4byte gUnknown_3000E94
-_08006510: .4byte gUnknown_20274A5
- thumb_func_end sub_8006438
-
thumb_func_start nullsub_152
nullsub_152:
bx lr
diff --git a/include/code_800558C.h b/include/code_800558C.h
new file mode 100644
index 0000000..e1b3432
--- /dev/null
+++ b/include/code_800558C.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_code_800558C_H
+#define GUARD_code_800558C_H
+
+extern void *gUnknown_203B078;
+
+#endif //GUARD_code_800558C_H
diff --git a/include/code_800B540.h b/include/code_800B540.h
new file mode 100644
index 0000000..050998e
--- /dev/null
+++ b/include/code_800B540.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_code_800B540_H
+#define GUARD_code_800B540_H
+
+void sub_800CDA8(int a0);
+
+#endif //GUARD_code_800B540_H
diff --git a/include/file_system.h b/include/file_system.h
new file mode 100644
index 0000000..360f7ac
--- /dev/null
+++ b/include/file_system.h
@@ -0,0 +1,34 @@
+#ifndef GUARD_FILE_SYSTEM_H
+#define GUARD_FILE_SYSTEM_H
+
+struct File
+{
+ char *name;
+ u8 *data;
+};
+
+struct OpenedFile
+{
+ struct File *file;
+ u8 *data;
+};
+
+struct FileArchive
+{
+ char magic[8];
+ s32 count;
+ struct File *entries;
+};
+
+struct SiroArchive
+{
+ u32 magic;
+ u8 *data;
+};
+
+struct OpenedFile *OpenFile(const char *filename, const struct FileArchive *arc);
+u8 *GetFileDataPtr(struct OpenedFile *openedFile, int unused);
+struct OpenedFile *OpenFileAndGetFileDataPtr(const char *filename, const struct FileArchive *arc);
+struct OpenedFile *Call_OpenFileAndGetFileDataPtr(const char *filename, const struct FileArchive *arc);
+
+#endif //GUARD_FILE_SYSTEM_H
diff --git a/ld_script.txt b/ld_script.txt
index 214812f..4fbe903 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -56,6 +56,7 @@ SECTIONS {
asm/sprite.o(.text);
asm/code_800558C.o(.text);
src/random.o(.text);
+ src/text.o(.text);
asm/text.o(.text);
asm/code_8009804.o(.text);
src/file_system.o(.text);
diff --git a/src/file_system.c b/src/file_system.c
index 9c069ff..61d9ec4 100644
--- a/src/file_system.c
+++ b/src/file_system.c
@@ -1,29 +1,5 @@
#include "global.h"
-
-struct File
-{
- char *name;
- u8 *data;
-};
-
-struct OpenedFile
-{
- struct File *file;
- u8 *data;
-};
-
-struct FileArchive
-{
- char magic[8];
- s32 count;
- struct File *entries;
-};
-
-struct SiroArchive
-{
- u32 magic;
- u8 *data;
-};
+#include "file_system.h"
extern struct OpenedFile gFileCache[64];
@@ -56,7 +32,7 @@ u32 sub_800A8F8(u32 value)
return oldValue;
}
-struct OpenedFile *OpenFile(char *filename, struct FileArchive *arc)
+struct OpenedFile *OpenFile(const char *filename, const struct FileArchive *arc)
{
char buffer[0x12C];
s32 left, right;
@@ -138,7 +114,7 @@ u8 *GetFileDataPtr(struct OpenedFile *openedFile, int unused)
return GetSiroPtr(openedFile);
}
-struct OpenedFile *OpenFileAndGetFileDataPtr(char *filename, struct FileArchive *arc)
+struct OpenedFile *OpenFileAndGetFileDataPtr(const char *filename, const struct FileArchive *arc)
{
struct OpenedFile *openedFile = OpenFile(filename, arc);
if (openedFile)
@@ -146,7 +122,7 @@ struct OpenedFile *OpenFileAndGetFileDataPtr(char *filename, struct FileArchive
return openedFile;
}
-struct OpenedFile *Call_OpenFileAndGetFileDataPtr(char *filename, struct FileArchive *arc)
+struct OpenedFile *Call_OpenFileAndGetFileDataPtr(const char *filename, const struct FileArchive *arc)
{
return OpenFileAndGetFileDataPtr(filename, arc);
}
diff --git a/src/text.c b/src/text.c
new file mode 100644
index 0000000..5d93844
--- /dev/null
+++ b/src/text.c
@@ -0,0 +1,200 @@
+#include "global.h"
+#include "file_system.h"
+#include "code_800558C.h"
+#include "code_800B540.h"
+
+struct UnkTextStruct1 {
+ u8 fill00[4];
+ u16 unk04;
+ u8 fill06[2];
+ u16 unk08;
+ u8 fill04[0x3c];
+ u8 unk46;
+};
+
+struct UnkTextStruct2 {
+ u8 fill00[0x0c];
+ s16 unk0c;
+ u8 fill0e[2];
+ s16 unk10;
+ u8 fill12[0x06];
+};
+
+extern char gUnknown_3000E94[];
+
+EWRAM_DATA struct UnkTextStruct1 gUnknown_2027370[4];
+EWRAM_DATA u8 *gUnknown_2027490[2];
+EWRAM_DATA u16 gUnknown_2027498;
+EWRAM_DATA u8 gUnknown_20274A5;
+EWRAM_DATA u32 gUnknown_20274AC;
+EWRAM_DATA vu32 gUnknown_20274B0;
+EWRAM_DATA u8 gUnknown_20274B4[0x3b00];
+EWRAM_DATA struct OpenedFile *gKanji[2];
+EWRAM_DATA struct UnkTextStruct2 gUnknown_202AFC0[4];
+EWRAM_DATA u32 gUnknown_202B020;
+EWRAM_DATA u32 gUnknown_202B024;
+EWRAM_DATA u32 gUnknown_202B028[2];
+EWRAM_DATA u32 gUnknown_202B030;
+EWRAM_DATA u8 gUnknown_202B034;
+EWRAM_DATA u16 gUnknown_202B038[2][32][32];
+
+u32 xxx_update_some_bg_tiles(u32 a0);
+void sub_8006438(const struct UnkTextStruct2 *a0, u8 a1, u8 a2, u32 *a3);
+void sub_8006554(void *a0, void *a1, void *a2, void *a3, u32 a4, const struct UnkTextStruct2 *a5, u8 a6, u32 a7, u32 *a8, u32 a9);
+void sub_800898C(void);
+void sub_80089AC(const struct UnkTextStruct2 *a0, void *a1);
+void sub_8009388(void);
+
+extern const struct UnkTextStruct2 gUnknown_80B857C[4];
+extern const char gUnknown_80B87B4[];
+extern const char gUnknown_80B87BC[];
+extern const struct FileArchive gUnknown_8300500;
+extern const u32 gUnknown_80B87C4[8];
+extern const u32 gUnknown_80B87E4[8];
+extern const u32 gUnknown_80B8804[4];
+
+void sub_8006218(void)
+{
+ int i;
+ int j;
+ int k;
+
+ gUnknown_20274AC = 0;
+ gKanji[0] = OpenFileAndGetFileDataPtr(gUnknown_80B87B4, &gUnknown_8300500);
+ gKanji[1] = OpenFileAndGetFileDataPtr(gUnknown_80B87BC, &gUnknown_8300500);
+ gUnknown_2027490[0] = gKanji[0]->data;
+ gUnknown_2027490[1] = gKanji[1]->data;
+ gUnknown_202B028[0] = 11;
+ gUnknown_202B028[1] = 12;
+ for (k = 0; k < 4; k++)
+ {
+ gUnknown_2027370[k].unk04 = 0;
+ gUnknown_2027370[k].unk08 = 0;
+ gUnknown_2027370[k].unk46 = 0;
+ }
+ gUnknown_2027498 = 0;
+ for (i = 0; i < 20; i++)
+ {
+ gUnknown_202B038[0][i][0] = 0xf279;
+ gUnknown_202B038[1][i][0] = 0xf27a;
+ for (j = 1; j < 32; j++)
+ {
+ gUnknown_202B038[0][i][j] = 0;
+ gUnknown_202B038[1][i][j] = 0xf27a;
+ }
+ }
+ gUnknown_202B034 = 1;
+ gUnknown_202B030 = 0x88888888;
+ gUnknown_203B078 = NULL;
+ gUnknown_20274A5 = 0;
+ gUnknown_202B020 = 1;
+ gUnknown_202B024 = 20;
+ xxx_update_some_bg_tiles(0);
+}
+
+u32 xxx_update_some_bg_tiles(u32 a0)
+{
+ u32 r5 = gUnknown_20274B0;
+ u32 *r4 = (u32 *)(VRAM + 0x4f40);
+ const u32 *r2;
+ gUnknown_20274B0 = a0;
+ if (a0 == 0 || a0 == 2)
+ {
+ sub_800CDA8(2);
+ r2 = gUnknown_80B87C4;
+ }
+ else
+ {
+ sub_800CDA8(1);
+ r2 = gUnknown_80B87E4;
+ }
+ gUnknown_202B030 = 0x88888888;
+ *r4++ = *r2++;
+ *r4++ = *r2++;
+ *r4++ = *r2++;
+ *r4++ = *r2++;
+ *r4++ = *r2++;
+ *r4++ = *r2++;
+ *r4++ = *r2++;
+ *r4++ = *r2++;
+ return r5;
+}
+
+u32 sub_80063B0(void)
+{
+ return gUnknown_20274B0;
+}
+
+u8 sub_80063BC(u8 a0)
+{
+ u8 retval = gUnknown_202B034;
+ gUnknown_202B034 = a0;
+ return retval;
+}
+
+void sub_80063CC(u32 a0)
+{
+ gUnknown_20274AC = a0;
+}
+
+void sub_80063D8(int a0)
+{
+ u32 retval;
+ if (a0 == 0)
+ {
+ gUnknown_20274B0;
+ retval = 0x88888888;
+ }
+ else
+ {
+ retval = (a0 & 0xf) | ((a0 & 0xf) << 4);
+ retval |= ((a0 & 0xf) << 8);
+ retval |= ((a0 & 0xf) << 12);
+ retval |= ((a0 & 0xf) << 16);
+ retval |= ((a0 & 0xf) << 20);
+ retval |= ((a0 & 0xf) << 24);
+ retval |= ((a0 & 0xf) << 28);
+ }
+ gUnknown_202B030 = retval;
+}
+
+void sub_800641C(void *a0, u8 a1, u8 a2)
+{
+ u32 r3 = 0;
+ sub_8006438(a0, a1, a2, &r3);
+}
+
+void sub_8006438(const struct UnkTextStruct2 *a0, u8 a1, u8 a2, u32 *a3)
+{
+ int i;
+ u32 r9 = 2;
+
+ if (a0 == NULL)
+ a0 = gUnknown_80B857C;
+ if (a2)
+ sub_8009388();
+ sub_800898C();
+ for (i = 0; i < 4; i++)
+ {
+ gUnknown_202AFC0[i] = a0[i];
+ if (a0[i].unk0c)
+ {
+ sub_8006554(gUnknown_2027370, (void *)VRAM, gUnknown_20274B4, gUnknown_202B038, gUnknown_80B8804[i], a0 + i, a1, r9, a3, 0);
+ sub_80089AC(a0 + i, a3);
+ r9 += a0[i].unk0c * a0[i].unk10;
+ }
+ }
+#ifdef NONMATCHING
+ gUnknown_203B078 = gUnknown_3000E94;
+ gUnknown_20274A5 = 1;
+#else
+ asm(".syntax unified\n"
+ "\tldr r2, =gUnknown_203B078\n"
+ "\tldr r0, =gUnknown_3000E94\n"
+ "\tldr r1, =gUnknown_20274A5\n"
+ "\tstr r0, [r2]\n"
+ "\tmovs r0, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ ".syntax divided");
+#endif
+}