From e59582e0613910f8a47b0d6458975a5205d16d4e Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 22 Oct 2020 14:47:56 -0400 Subject: decompile code_801DB81C, and revamp the source file layout template and type naming convention. Rename unkStruct to ctorStruct --- asm/bss_2.s | 3 -- asm/sbss_2.s | 7 ++--- include/code_801DB040.h | 20 ++++++------- include/code_801DBB3C.h | 8 ++--- include/ctorStruct.h | 17 +++++++++++ include/unkStruct.h | 17 ----------- src/code_801DAA30.cpp | 7 ++--- src/code_801DAAE0.cpp | 25 +++++++++------- src/code_801DB040.cpp | 61 +++++++++++++++++++------------------- src/code_801DB81C.cpp | 79 +++++++++++++++++++++---------------------------- 10 files changed, 114 insertions(+), 130 deletions(-) create mode 100644 include/ctorStruct.h delete mode 100644 include/unkStruct.h diff --git a/asm/bss_2.s b/asm/bss_2.s index bcde67a..d2c9f39 100644 --- a/asm/bss_2.s +++ b/asm/bss_2.s @@ -1,8 +1,5 @@ .section .bss, "wa" # 0x80474F00 - 0x80643050 -.global lbl_80491370 -lbl_80491370: - .skip 0x100 .global lbl_80491470 lbl_80491470: .skip 0x380 diff --git a/asm/sbss_2.s b/asm/sbss_2.s index 0765d6e..48ba9f2 100644 --- a/asm/sbss_2.s +++ b/asm/sbss_2.s @@ -1,11 +1,8 @@ .section .sbss, "wa" # 0x80474F00 - 0x80643050 -.global lbl_8063F304 -lbl_8063F304: +.global lbl_8063F30C +lbl_8063F30C: .skip 0x4 -.global lbl_8063F308 -lbl_8063F308: - .skip 0x8 .global lbl_8063F310 lbl_8063F310: .skip 0x8 diff --git a/include/code_801DB040.h b/include/code_801DB040.h index ad49669..b9fc27a 100644 --- a/include/code_801DB040.h +++ b/include/code_801DB040.h @@ -7,9 +7,9 @@ extern "C" { #include "SDK/mem.h" -typedef u32 (*FuncPtr)(void*, u32, u32); +typedef u32 (*gFuncPtr1)(void*, u32, u32); -struct unkClass +struct gUnkClass1 { u8 unk0; u8 unk1; @@ -19,24 +19,24 @@ struct unkClass void* unkC; u32 unk10; u32 unk14; - FuncPtr unk18; - unkClass* unk1C; - unkClass* unk20; + gFuncPtr1 unk18; + gUnkClass1* unk1C; + gUnkClass1* unk20; }; -unkClass* func_801DB07C(unkClass* p1, BOOL p2); +gUnkClass1* func_801DB07C(gUnkClass1* p1, BOOL p2); void func_801DB15C(u32 p1); -void* func_801DB270(MEMHeapHandle heap, u32 size, int align, u32 p4, u32 p5, FuncPtr p6); -void* func_801DB360(u32 size, int align, u32 p3, u32 p4, FuncPtr p5); -void func_801DB3BC(void* p1, u32 p2, u32 p3, FuncPtr p4); +void* func_801DB270(MEMHeapHandle heap, u32 size, int align, u32 p4, u32 p5, gFuncPtr1 p6); +void* func_801DB360(u32 size, int align, u32 p3, u32 p4, gFuncPtr1 p5); +void func_801DB3BC(void* p1, u32 p2, u32 p3, gFuncPtr1 p4); void* func_801DB4BC(u32 p1, u32 p2); u32 func_801DB4FC(u32 p1, u32 p2); u32 func_801DB548(u32 p1, u32 p2); u32 func_801DB5E4(u32 p1, u32 p2); void func_801DB644(u32 p1, u32 p2); void func_801DB674(u32 p1); -BOOL func_801DB6D0(u32 p1, u32 p2, MEMHeapHandle p3, u32 p4, u32 p5, FuncPtr p6); +BOOL func_801DB6D0(u32 p1, u32 p2, MEMHeapHandle p3, u32 p4, u32 p5, gFuncPtr1 p6); void func_801DB79C(u32 p1, u32 p2); void func_801DB7CC(u32 p1, u32 p2); diff --git a/include/code_801DBB3C.h b/include/code_801DBB3C.h index 67a3c3c..394bd32 100644 --- a/include/code_801DBB3C.h +++ b/include/code_801DBB3C.h @@ -7,14 +7,14 @@ extern "C" { #include "code_801DB040.h" -struct unkClass2 +struct gUnkClass2 { u8 pad[0x24]; }; -unkClass* func_801DBC58(unkClass2* p1); -void func_801DBD00(unkClass2* p1, unkClass* p2); -unkClass2* func_801DBD74(u32 p1, u32 p2); +gUnkClass1* func_801DBC58(gUnkClass2* p1); +void func_801DBD00(gUnkClass2* p1, gUnkClass1* p2); +gUnkClass2* func_801DBD74(u32 p1, u32 p2); #ifdef __cplusplus } diff --git a/include/ctorStruct.h b/include/ctorStruct.h new file mode 100644 index 0000000..5c40e77 --- /dev/null +++ b/include/ctorStruct.h @@ -0,0 +1,17 @@ +#ifndef POKEREVO_CODE_CTORSTRUCT_H +#define POKEREVO_CODE_CTORSTRUCT_H + +// Note: Many instances of this class appear in .sbss, and they are partially initialized +// by the static initializers in .ctors + +struct ctorStruct +{ + u8 unk0; + u16 unk2; + u8 unk4; + u8 unk5; + ctorStruct(u8 p1, u16 p2, u8 p3) + : unk0(p1), unk2(p2), unk4(p3) { } +}; + +#endif //POKEREVO_CODE_CTORSTRUCT_H diff --git a/include/unkStruct.h b/include/unkStruct.h deleted file mode 100644 index d1c304f..0000000 --- a/include/unkStruct.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef POKEREVO_CODE_UNKSTRUCT_H -#define POKEREVO_CODE_UNKSTRUCT_H - -// Note: Many instances of this class appear in .sbss, and they are partially initialized -// by the static initializers in .ctors - -struct unkStruct -{ - u8 unk0; - u16 unk2; - u8 unk4; - u8 unk5; - unkStruct(u8 p1, u16 p2, u8 p3) - : unk0(p1), unk2(p2), unk4(p3) { } -}; - -#endif //POKEREVO_CODE_UNKSTRUCT_H diff --git a/src/code_801DAA30.cpp b/src/code_801DAA30.cpp index 17375d9..c8f0756 100644 --- a/src/code_801DAA30.cpp +++ b/src/code_801DAA30.cpp @@ -1,11 +1,8 @@ #include "types.h" -#include "unkStruct.h" +#include "ctorStruct.h" #include "code_801DAAE0.h" -namespace -{ - unkStruct gUnk8063F2C8(1, 4, 0); -} +static ctorStruct gUnk8063F2C8(1, 4, 0); void* operator new(size_t sz) { diff --git a/src/code_801DAAE0.cpp b/src/code_801DAAE0.cpp index 31b84e5..dd5e504 100644 --- a/src/code_801DAAE0.cpp +++ b/src/code_801DAAE0.cpp @@ -1,5 +1,5 @@ #include "types.h" -#include "unkStruct.h" +#include "ctorStruct.h" #include "Runtime/__mem.h" #include "SDK/mem.h" #include "code_801DAAE0.h" @@ -19,17 +19,22 @@ namespace u16 groupID; u32 unk8; }; - - const size_t ARR_SIZE = 16; - unkClass gUnk804912B0[ARR_SIZE]; - - unkStruct gUnk8063F2D0(1, 4, 0); - u8 gUnk8063F2D6; - u8 gUnk8063F2D7; - MEMHeapHandle gUnk8063F2D8; - u16 gUnk8063F2DC; } +static unkClass* func_801DAAE0(void); +static void* lbl_801DAC9C(MEMHeapHandle heap, u32 size, int fill); +static BOOL func_801DAD1C(MEMHeapHandle heap, void* memBlock, u32 size); +static u32 func_801DAD60(MEMHeapHandle heap); +static void lbl_801DAF1C(void* memBlock, MEMHeapHandle, u32 p3); + +static const size_t ARR_SIZE = 16; +static unkClass gUnk804912B0[ARR_SIZE]; +static ctorStruct gUnk8063F2D0(1, 4, 0); +static u8 gUnk8063F2D6; +static u8 gUnk8063F2D7; +static MEMHeapHandle gUnk8063F2D8; +static u16 gUnk8063F2DC; + extern "C" { static unkClass* func_801DAAE0(void) diff --git a/src/code_801DB040.cpp b/src/code_801DB040.cpp index cf295c2..088dc2a 100644 --- a/src/code_801DB040.cpp +++ b/src/code_801DB040.cpp @@ -1,31 +1,30 @@ #include "types.h" -#include "unkStruct.h" +#include "ctorStruct.h" #include "Runtime/__mem.h" #include "SDK/mem.h" #include "code_801DAAE0.h" #include "code_801DBB3C.h" #include "code_801DB040.h" -extern "C" { +static gUnkClass1* func_801DB040(u32 p1, u32 p2); -namespace -{ - unkStruct gUnk8063F2E0(1, 4, 0); - unkClass* gUnk8063F2E8; - unkClass2* gUnk8063F2EC; -} +static ctorStruct gUnk8063F2E0(1, 4, 0); +static gUnkClass1* gUnk8063F2E8; +static gUnkClass2* gUnk8063F2EC; + +extern "C" { -static unkClass* func_801DB040(u32 p1, u32 p2) +static gUnkClass1* func_801DB040(u32 p1, u32 p2) { - for (unkClass* r5 = gUnk8063F2E8; r5; r5 = r5->unk1C) + for (gUnkClass1* r5 = gUnk8063F2E8; r5; r5 = r5->unk1C) if (r5->unk10 == p1 && r5->unk14 == p2) return r5; return NULL; } -unkClass* func_801DB07C(unkClass* p1, BOOL p2) +gUnkClass1* func_801DB07C(gUnkClass1* p1, BOOL p2) { - unkClass* r31; + gUnkClass1* r31; if (p1->unk18 && p1->unk18(p1->unkC, p1->unk10, p1->unk14) == 0) return p1->unk1C; if (p1->unk0) { @@ -38,7 +37,7 @@ unkClass* func_801DB07C(unkClass* p1, BOOL p2) p1->unkC = NULL; r31 = p1->unk1C; if (p2) { - unkClass* r3 = p1->unk20; + gUnkClass1* r3 = p1->unk20; if (r3) r3->unk1C = r31; else @@ -57,11 +56,11 @@ void func_801DB15C(u32 p1) gUnk8063F2EC = func_801DBD74(p1, 36); } -static void* func_801DB184(MEMHeapHandle heap, u32 size, u32 p3, u32 p4, FuncPtr p5) +static void* func_801DB184(MEMHeapHandle heap, u32 size, u32 p3, u32 p4, gFuncPtr1 p5) { if (func_801DB040(p3, p4)) return NULL; - unkClass* r31 = func_801DBC58(gUnk8063F2EC); + gUnkClass1* r31 = func_801DBC58(gUnk8063F2EC); if (!r31) return NULL; if ((r31->unkC = func_801DAC94(heap, size)) == NULL) { @@ -85,11 +84,11 @@ static void* func_801DB184(MEMHeapHandle heap, u32 size, u32 p3, u32 p4, FuncPtr return r31->unkC; } -void* func_801DB270(MEMHeapHandle heap, u32 size, int align, u32 p4, u32 p5, FuncPtr p6) +void* func_801DB270(MEMHeapHandle heap, u32 size, int align, u32 p4, u32 p5, gFuncPtr1 p6) { if (func_801DB040(p4, p5)) return NULL; - unkClass* r31 = func_801DBC58(gUnk8063F2EC); + gUnkClass1* r31 = func_801DBC58(gUnk8063F2EC); if (!r31) return NULL; if ((r31->unkC = func_801DAD08(heap, size, align)) == NULL) { @@ -112,14 +111,14 @@ void* func_801DB270(MEMHeapHandle heap, u32 size, int align, u32 p4, u32 p5, Fun return r31->unkC; } -void* func_801DB360(u32 size, int align, u32 p3, u32 p4, FuncPtr p5) +void* func_801DB360(u32 size, int align, u32 p3, u32 p4, gFuncPtr1 p5) { return func_801DB270(func_801DAC0C(), size, align, p3, p4, p5); } -void func_801DB3BC(void* p1, u32 p2, u32 p3, FuncPtr p4) +void func_801DB3BC(void* p1, u32 p2, u32 p3, gFuncPtr1 p4) { - unkClass* r31 = func_801DB040(p2, p3); + gUnkClass1* r31 = func_801DB040(p2, p3); if (!p1) { if (r31) func_801DB07C(r31, TRUE); @@ -136,7 +135,7 @@ void func_801DB3BC(void* p1, u32 p2, u32 p3, FuncPtr p4) r31->unk18 = p4; } } else { - unkClass* r3 = func_801DBC58(gUnk8063F2EC); + gUnkClass1* r3 = func_801DBC58(gUnk8063F2EC); if (r3) { if (gUnk8063F2E8) gUnk8063F2E8->unk20 = r3; @@ -155,7 +154,7 @@ void func_801DB3BC(void* p1, u32 p2, u32 p3, FuncPtr p4) void* func_801DB4BC(u32 p1, u32 p2) { - unkClass* r3 = func_801DB040(p1, p2); + gUnkClass1* r3 = func_801DB040(p1, p2); if (!r3 || r3->unk1) return NULL; return r3->unkC; @@ -163,7 +162,7 @@ void* func_801DB4BC(u32 p1, u32 p2) u32 func_801DB4FC(u32 p1, u32 p2) { - unkClass* r3 = func_801DB040(p1, p2); + gUnkClass1* r3 = func_801DB040(p1, p2); if (!r3 || r3->unk1) return 0; return ++r3->unk4; @@ -171,7 +170,7 @@ u32 func_801DB4FC(u32 p1, u32 p2) u32 func_801DB548(u32 p1, u32 p2) { - unkClass* r31 = func_801DB040(p1, p2); + gUnkClass1* r31 = func_801DB040(p1, p2); if (!r31 || r31->unk1) return 0; if (r31->unk4 == 0) { @@ -185,7 +184,7 @@ u32 func_801DB548(u32 p1, u32 p2) u32 func_801DB5E4(u32 p1, u32 p2) { - unkClass* r3 = func_801DB040(p1, p2); + gUnkClass1* r3 = func_801DB040(p1, p2); if (!r3) return 0; if (!r3->unkC) @@ -197,21 +196,21 @@ u32 func_801DB5E4(u32 p1, u32 p2) void func_801DB644(u32 p1, u32 p2) { - unkClass* r3 = func_801DB040(p1, p2); + gUnkClass1* r3 = func_801DB040(p1, p2); if (r3) func_801DB07C(r3, TRUE); } void func_801DB674(u32 p1) { - unkClass* p = gUnk8063F2E8; + gUnkClass1* p = gUnk8063F2E8; while (p) p = (p->unk10 == p1) ? func_801DB07C(p, TRUE) : p->unk1C; } -BOOL func_801DB6D0(u32 p1, u32 p2, MEMHeapHandle heap, u32 p4, u32 p5, FuncPtr p6) +BOOL func_801DB6D0(u32 p1, u32 p2, MEMHeapHandle heap, u32 p4, u32 p5, gFuncPtr1 p6) { - unkClass* r31 = func_801DB040(p1, p2); + gUnkClass1* r31 = func_801DB040(p1, p2); if (!r31 || r31->unk1 || !r31->unkC || !r31->unk0) return FALSE; u32 blockSize = func_801DAEE0(r31->unkC); @@ -226,14 +225,14 @@ BOOL func_801DB6D0(u32 p1, u32 p2, MEMHeapHandle heap, u32 p4, u32 p5, FuncPtr p void func_801DB79C(u32 p1, u32 p2) { - unkClass* r3 = func_801DB040(p1, p2); + gUnkClass1* r3 = func_801DB040(p1, p2); if (r3) r3->unk1 = 1; } void func_801DB7CC(u32 p1, u32 p2) { - unkClass* r3 = func_801DB040(p1, p2); + gUnkClass1* r3 = func_801DB040(p1, p2); if (r3) r3->unk1 = 0; } diff --git a/src/code_801DB81C.cpp b/src/code_801DB81C.cpp index bbe99c7..678fafa 100644 --- a/src/code_801DB81C.cpp +++ b/src/code_801DB81C.cpp @@ -1,44 +1,33 @@ #include "types.h" -#include "unkStruct.h" +#include "ctorStruct.h" #include "SDK/os.h" #include "code_801DB81C.h" -#pragma unsafe_global_reg_vars off -#pragma ignore_global_reg_vars on - -extern "C" { - -typedef void (*FuncPtr2)(u32, u32, u8); - namespace { - struct unkClass3 + typedef void (*funcPtr)(u32, u32, u8); + + struct unkClass { u8 unk0; u8 unk1; - FuncPtr2 unk4; + funcPtr unk4; }; - - unkStruct gUnk8063F2F0(1, 4, 0); - u32 gUnk8063F2F8; - u32 gUnk8063F2FC; } -u32 gUnk8063F300 asm("r14"); // TODO: how do you reference this from inline asm - - -extern u8 lbl_8063F304; -extern u32 lbl_8063F308; - -// TODO: define, rename, localize -extern unkClass3 lbl_80491370[32]; - - - - static void func_801DB81C(u8 p1); static void func_801DB92C(u8 start, u8 width, u32 setOrClear); +static unkClass gUnk80491370[32]; +static ctorStruct gUnk8063F2F0(1, 4, 0); +static u32 gUnk8063F2F8; +static u32 gUnk8063F2FC; +static u32 gUnk8063F300; +static u8 gUnk8063F304; +static u32 gUnk8063F308; + +extern "C" { + static void func_801DB81C(u8 p1) { size_t i; @@ -50,8 +39,8 @@ static void func_801DB81C(u8 p1) new_var = 0; new_var5 = &i; for (i = new_var; i < 32; i++) { - lbl_8063F308 = new_var; - lbl_80491370[i].unk0 = 0xff; + gUnk8063F308 = new_var; + gUnk80491370[i].unk0 = 0xff; } LCEnable(); @@ -67,11 +56,11 @@ static void func_801DB81C(u8 p1) new_var4 = new_var3; new_var2 = *new_var4; func_801DB92C(0 & 0xFFu, (u8)new_var2, 1); - lbl_80491370[0].unk0 = 0; - lbl_80491370[0].unk1 = (u8)*new_var3; + gUnk80491370[0].unk0 = 0; + gUnk80491370[0].unk1 = (u8)*new_var3; } - lbl_8063F304 = 0; + gUnk8063F304 = 0; } static void func_801DB92C(u8 start, u8 width, u32 setOrClear) @@ -80,7 +69,7 @@ static void func_801DB92C(u8 start, u8 width, u32 setOrClear) while (start--) bit >>= 1; while (width--) { - lbl_8063F308 = (setOrClear == 1) ? lbl_8063F308 | bit : lbl_8063F308 & ~bit; + gUnk8063F308 = (setOrClear == 1) ? gUnk8063F308 | bit : gUnk8063F308 & ~bit; bit >>= 1; } } @@ -104,8 +93,8 @@ asm u32 func_801DB978(u8 p1) /* 801DB9AC 001D760C 38 60 00 01 */ li r3, 1 /* 801DB9B0 001D7610 48 00 00 2C */ b lbl_801DB9DC lbl_801DB9B4: - /* 801DB9B4 001D7614 80 6D A0 3C */ lwz r3, 0xA03C(r13) - /* 801DB9B8 001D7618 80 AD A0 38 */ lwz r5, 0xA038(r13) + /* 801DB9B4 001D7614 80 6D A0 3C */ lwz r3, gUnk8063F2FC + /* 801DB9B8 001D7618 80 AD A0 38 */ lwz r5, gUnk8063F2F8 /* 801DB9BC 001D761C 7C 63 2A 14 */ add r3, r3, r5 /* 801DB9C0 001D7620 38 23 FF F8 */ addi r1, r3, -8 /* 801DB9C4 001D7624 38 60 FF FF */ li r3, -1 @@ -135,22 +124,22 @@ void func_801DB9FC(void) u32 new_var4; u32 *new_var5; new_var = 0xff; - if (lbl_8063F304 != 1) { + if (gUnk8063F304 != 1) { new_var2 = 9; i = 31, j = 0; new_var3 = &i; new_var5 = &new_var4; do { - unsigned char r0 = lbl_80491370[j].unk0; + unsigned char r0 = gUnk80491370[j].unk0; new_var4 = *new_var3; - if ((((u32) r0) != new_var) && lbl_80491370[j].unk4) { - lbl_80491370[j].unk4(0, gUnk8063F2FC + (r0 << new_var2), lbl_80491370[j].unk1); + if ((((u32) r0) != new_var) && gUnk80491370[j].unk4) { + gUnk80491370[j].unk4(0, gUnk8063F2FC + (r0 << new_var2), gUnk80491370[j].unk1); } i = *new_var5; j++; } while ((i--) != 0); - lbl_8063F304 = 1; + gUnk8063F304 = 1; } } @@ -164,23 +153,23 @@ void func_801DBA8C(void) u32 new_var4; u32 *new_var5; new_var = 0xff; - if (lbl_8063F304 != 0) { + if (gUnk8063F304 != 0) { new_var2 = 9; i = 31, j = 0; new_var3 = &i; new_var5 = &new_var4; do { - unsigned char r0 = lbl_80491370[j].unk0; + unsigned char r0 = gUnk80491370[j].unk0; new_var4 = *new_var3; - if ((((u32) r0) != new_var) && lbl_80491370[j].unk4) { - lbl_80491370[j].unk4(1, gUnk8063F2FC + (r0 << new_var2), lbl_80491370[j].unk1); + if ((((u32) r0) != new_var) && gUnk80491370[j].unk4) { + gUnk80491370[j].unk4(1, gUnk8063F2FC + (r0 << new_var2), gUnk80491370[j].unk1); } i = *new_var5; j++; } while ((i--) != 0); - lbl_8063F304 = 0; + gUnk8063F304 = 0; } } -} +} //extern "C" -- cgit v1.2.3