diff --git a/include/common.h b/include/common.h index cae39f1..3b913e2 100644 --- a/include/common.h +++ b/include/common.h @@ -248,6 +248,8 @@ extern const char STR_rb[]; extern const char STR_wb[]; extern const char STR_Unknown_method_skiped[]; +extern const char STR_EMPTY[]; + extern void AddHeap(void* start, u32 length); extern void __some_logging(const char* format, ...); diff --git a/splat.yaml b/splat.yaml index 299f36b..9bef73d 100644 --- a/splat.yaml +++ b/splat.yaml @@ -51,7 +51,7 @@ segments: - [0x5FC0, c] - [0x68E0, asm] - [0x8700, asm] - - [0xA370, c] + - [0xA370, c, "lha"] - [0xFC80, c, "boot"] - [0xFDC0, asm] - [0xFF10, asm] diff --git a/src/A370.c b/src/A370.c deleted file mode 100644 index 0be0ef1..0000000 --- a/src/A370.c +++ /dev/null @@ -1,171 +0,0 @@ -#include "common.h" - -void Unpack(s32, s32); - -INCLUDE_ASM(const s32, "A370", func_80079F70); - -INCLUDE_ASM(const s32, "A370", func_8007A070); - -INCLUDE_ASM(const s32, "A370", Unpack); - -/* ABE0 8007A7E0 */ -u32 __read_u32_le(u8* arg0) { - return (arg0[0] << 24) | (arg0[1] << 16) | (arg0[2] << 8) | arg0[3]; -} - - -INCLUDE_ASM(const s32, "A370", func_8007A80C); - -INCLUDE_ASM(const s32, "A370", func_8007AB30); - -INCLUDE_ASM(const s32, "A370", func_8007AB7C); - -INCLUDE_ASM(const s32, "A370", func_8007ABAC); - -extern char D_800AE038; -extern OSMesgQueue MQ_800AF320; - -/* B030 8007AC30 */ -void UnpackProc(void) { - struct { - /* 0x00 */ s32 field_0x0; - /* 0x04 */ OSMesgQueue* field_0x4; - /* 0x08 */ u8 field_0x8; - /* 0x09 */ u8 field_0x9[3]; - /* 0x0C */ s32 field_0xc; - /* 0x10 */ s32 field_0x10; - } *sp10; - - sp10 = NULL; - while(1) { - osRecvMesg(&MQ_800AF320, &sp10, 1); - if (sp10->field_0x8 == 1) { - Unpack(sp10->field_0x10, sp10->field_0xc); - osSendMesg(sp10->field_0x4, sp10, 1); - } else { - __some_logging(&D_800AE038, sp10->field_0x8); - } - } -} - - -INCLUDE_ASM(const s32, "A370", func_8007ACB0); - -INCLUDE_ASM(const s32, "A370", func_8007AE9C); - -INCLUDE_ASM(const s32, "A370", func_8007AF3C); - -INCLUDE_ASM(const s32, "A370", func_8007AFE4); - -INCLUDE_ASM(const s32, "A370", func_8007B710); - -INCLUDE_ASM(const s32, "A370", func_8007B744); - -INCLUDE_ASM(const s32, "A370", func_8007B7A8); - -INCLUDE_ASM(const s32, "A370", func_8007B83C); - -INCLUDE_ASM(const s32, "A370", can_log_crc_error); - -INCLUDE_ASM(const s32, "A370", func_8007BA98); - -INCLUDE_ASM(const s32, "A370", func_8007BB48); - -/* BF90 8007BB90 */ -void __log_lha_error(unsigned char* arg0, unsigned char* arg1) { - __some_logging(STR_LHa___s_s__s, STR_Error, arg0, arg1); -} - -extern u8 D_800AE334; - -/* BFC0 8007BBC0 */ -void __log_fatal_error_desc(char* arg0) { - __some_logging(STR_LHa___s_s__s, STR_Fatal_error, &D_800AE334, arg0); -} - -/* BFF4 8007BBF4 */ -void __log_fatal_error(char* arg0, char* arg1) { - __some_logging(STR_LHa___s_s__s, STR_Fatal_error, arg0, arg1); -} - -INCLUDE_ASM(const s32, "A370", func_8007BC24); - -INCLUDE_ASM(const s32, "A370", func_8007BF10); - -INCLUDE_ASM(const s32, "A370", func_8007C204); - -INCLUDE_ASM(const s32, "A370", func_8007C25C); - -INCLUDE_ASM(const s32, "A370", func_8007C378); - -INCLUDE_ASM(const s32, "A370", func_8007C438); - -INCLUDE_ASM(const s32, "A370", func_8007C538); - -INCLUDE_ASM(const s32, "A370", __logs_read_error); - -INCLUDE_ASM(const s32, "A370", func_8007C74C); - -INCLUDE_ASM(const s32, "A370", func_8007CAB8); - -INCLUDE_ASM(const s32, "A370", func_8007CE48); - -INCLUDE_ASM(const s32, "A370", func_8007D200); - -INCLUDE_ASM(const s32, "A370", func_8007D594); - -INCLUDE_ASM(const s32, "A370", func_8007D5B8); - -INCLUDE_ASM(const s32, "A370", func_8007D7BC); - -INCLUDE_ASM(const s32, "A370", func_8007D8A8); - -INCLUDE_ASM(const s32, "A370", func_8007DBF4); - -INCLUDE_ASM(const s32, "A370", func_8007DDF0); - -INCLUDE_ASM(const s32, "A370", func_8007DFF0); - -INCLUDE_ASM(const s32, "A370", func_8007E2F8); - -INCLUDE_ASM(const s32, "A370", func_8007E698); - -INCLUDE_ASM(const s32, "A370", func_8007E6DC); - -INCLUDE_ASM(const s32, "A370", func_8007E800); - -INCLUDE_ASM(const s32, "A370", func_8007E8F0); - -INCLUDE_ASM(const s32, "A370", func_8007EE2C); - -INCLUDE_ASM(const s32, "A370", func_8007F1A0); - -INCLUDE_ASM(const s32, "A370", func_8007F1F8); - -INCLUDE_ASM(const s32, "A370", func_8007F218); - -INCLUDE_ASM(const s32, "A370", func_8007F234); - -INCLUDE_ASM(const s32, "A370", func_8007F314); - -INCLUDE_ASM(const s32, "A370", func_8007F334); - -INCLUDE_ASM(const s32, "A370", func_8007F408); - -INCLUDE_ASM(const s32, "A370", func_8007F450); - -INCLUDE_ASM(const s32, "A370", func_8007F47C); - -INCLUDE_ASM(const s32, "A370", func_8007F4B0); - -INCLUDE_ASM(const s32, "A370", func_8007F4E4); - -INCLUDE_ASM(const s32, "A370", __file_read); - -INCLUDE_ASM(const s32, "A370", __file_write); - -void func_8007F640(void) { } - -INCLUDE_ASM(const s32, "A370", func_8007F648); - -INCLUDE_ASM(const s32, "A370", func_8007F844); diff --git a/src/lha.c b/src/lha.c new file mode 100644 index 0000000..bab25a6 --- /dev/null +++ b/src/lha.c @@ -0,0 +1,169 @@ +#include "common.h" + +void Unpack(s32, s32); + +INCLUDE_ASM(const s32, "lha", func_80079F70); + +INCLUDE_ASM(const s32, "lha", func_8007A070); + +INCLUDE_ASM(const s32, "lha", Unpack); + +/* ABE0 8007A7E0 */ +u32 __read_u32_le(u8* arg0) { + return (arg0[0] << 24) | (arg0[1] << 16) | (arg0[2] << 8) | arg0[3]; +} + + +INCLUDE_ASM(const s32, "lha", func_8007A80C); + +INCLUDE_ASM(const s32, "lha", func_8007AB30); + +INCLUDE_ASM(const s32, "lha", func_8007AB7C); + +INCLUDE_ASM(const s32, "lha", func_8007ABAC); + +extern char D_800AE038; +extern OSMesgQueue MQ_800AF320; + +/* B030 8007AC30 */ +void UnpackProc(void) { + struct { + /* 0x00 */ s32 field_0x0; + /* 0x04 */ OSMesgQueue* field_0x4; + /* 0x08 */ u8 field_0x8; + /* 0x09 */ u8 field_0x9[3]; + /* 0x0C */ s32 field_0xc; + /* 0x10 */ s32 field_0x10; + } *sp10; + + sp10 = NULL; + while(1) { + osRecvMesg(&MQ_800AF320, &sp10, 1); + if (sp10->field_0x8 == 1) { + Unpack(sp10->field_0x10, sp10->field_0xc); + osSendMesg(sp10->field_0x4, sp10, 1); + } else { + __some_logging(&D_800AE038, sp10->field_0x8); + } + } +} + + +INCLUDE_ASM(const s32, "lha", func_8007ACB0); + +INCLUDE_ASM(const s32, "lha", func_8007AE9C); + +INCLUDE_ASM(const s32, "lha", func_8007AF3C); + +INCLUDE_ASM(const s32, "lha", func_8007AFE4); + +INCLUDE_ASM(const s32, "lha", func_8007B710); + +INCLUDE_ASM(const s32, "lha", func_8007B744); + +INCLUDE_ASM(const s32, "lha", func_8007B7A8); + +INCLUDE_ASM(const s32, "lha", func_8007B83C); + +INCLUDE_ASM(const s32, "lha", can_log_crc_error); + +INCLUDE_ASM(const s32, "lha", func_8007BA98); + +INCLUDE_ASM(const s32, "lha", func_8007BB48); + +/* BF90 8007BB90 */ +void __log_lha_error(unsigned char* arg0, unsigned char* arg1) { + __some_logging(STR_LHa___s_s__s, STR_Error, arg0, arg1); +} + +/* BFC0 8007BBC0 */ +void __log_fatal_error_desc(char* arg0) { + __some_logging(STR_LHa___s_s__s, STR_Fatal_error, &STR_EMPTY, arg0); +} + +/* BFF4 8007BBF4 */ +void __log_fatal_error(char* arg0, char* arg1) { + __some_logging(STR_LHa___s_s__s, STR_Fatal_error, arg0, arg1); +} + +INCLUDE_ASM(const s32, "lha", func_8007BC24); + +INCLUDE_ASM(const s32, "lha", func_8007BF10); + +INCLUDE_ASM(const s32, "lha", func_8007C204); + +INCLUDE_ASM(const s32, "lha", func_8007C25C); + +INCLUDE_ASM(const s32, "lha", func_8007C378); + +INCLUDE_ASM(const s32, "lha", func_8007C438); + +INCLUDE_ASM(const s32, "lha", func_8007C538); + +INCLUDE_ASM(const s32, "lha", __logs_read_error); + +INCLUDE_ASM(const s32, "lha", func_8007C74C); + +INCLUDE_ASM(const s32, "lha", func_8007CAB8); + +INCLUDE_ASM(const s32, "lha", func_8007CE48); + +INCLUDE_ASM(const s32, "lha", func_8007D200); + +INCLUDE_ASM(const s32, "lha", func_8007D594); + +INCLUDE_ASM(const s32, "lha", func_8007D5B8); + +INCLUDE_ASM(const s32, "lha", func_8007D7BC); + +INCLUDE_ASM(const s32, "lha", func_8007D8A8); + +INCLUDE_ASM(const s32, "lha", func_8007DBF4); + +INCLUDE_ASM(const s32, "lha", func_8007DDF0); + +INCLUDE_ASM(const s32, "lha", func_8007DFF0); + +INCLUDE_ASM(const s32, "lha", func_8007E2F8); + +INCLUDE_ASM(const s32, "lha", func_8007E698); + +INCLUDE_ASM(const s32, "lha", func_8007E6DC); + +INCLUDE_ASM(const s32, "lha", func_8007E800); + +INCLUDE_ASM(const s32, "lha", func_8007E8F0); + +INCLUDE_ASM(const s32, "lha", func_8007EE2C); + +INCLUDE_ASM(const s32, "lha", func_8007F1A0); + +INCLUDE_ASM(const s32, "lha", func_8007F1F8); + +INCLUDE_ASM(const s32, "lha", func_8007F218); + +INCLUDE_ASM(const s32, "lha", func_8007F234); + +INCLUDE_ASM(const s32, "lha", func_8007F314); + +INCLUDE_ASM(const s32, "lha", func_8007F334); + +INCLUDE_ASM(const s32, "lha", func_8007F408); + +INCLUDE_ASM(const s32, "lha", func_8007F450); + +INCLUDE_ASM(const s32, "lha", func_8007F47C); + +INCLUDE_ASM(const s32, "lha", func_8007F4B0); + +INCLUDE_ASM(const s32, "lha", func_8007F4E4); + +INCLUDE_ASM(const s32, "lha", __file_read); + +INCLUDE_ASM(const s32, "lha", __file_write); + +void func_8007F640(void) { } + +INCLUDE_ASM(const s32, "lha", func_8007F648); + +INCLUDE_ASM(const s32, "lha", func_8007F844); diff --git a/symbol_addrs.txt b/symbol_addrs.txt index 73cb2bc..ec20f76 100644 --- a/symbol_addrs.txt +++ b/symbol_addrs.txt @@ -22,6 +22,10 @@ NAME_SHEEN = 0x8018E9FC; // type:asciz size:0x6 CLASS_NAME_DRAGON_MASTER = 0x80190230; // type:asciz +__PTR_BIG_STRUCT = 0x80196AF8; // type:u32 + +__maybe_get_used_character_slots = 0x8016C048; + __SOME_OVERLAY_TABLE = 0x800A83C0; // size:0x28 __SOME_OVERLAY_TABLE_1 = 0x800A83E8; // size:0x28 __SOME_OVERLAY_TABLE_2 = 0x800A8410; // size:0x28 @@ -364,7 +368,7 @@ Unpack = 0x8007A110; __read_u32_le = 0x8007A7E0; -__load_song = 0x800EA488; +__load_song = 0x800EA488; // rom:0x3FA18 __SONG_VOLUME = 0x800EB2E0; __SONG_SOURCE_START = 0x800EB4F0; __SONG_SOURCE_END = 0x800EB4F4;