diff options
-rw-r--r-- | asm/text.s | 380 | ||||
-rw-r--r-- | include/code_800558C.h | 6 | ||||
-rw-r--r-- | include/code_800B540.h | 6 | ||||
-rw-r--r-- | include/file_system.h | 34 | ||||
-rwxr-xr-x | ld_script.txt | 1 | ||||
-rw-r--r-- | src/file_system.c | 32 | ||||
-rw-r--r-- | src/text.c | 200 |
7 files changed, 251 insertions, 408 deletions
@@ -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 +} |