diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/code_801DAA30.cpp | 7 | ||||
-rw-r--r-- | src/code_801DAAE0.cpp | 25 | ||||
-rw-r--r-- | src/code_801DB040.cpp | 61 | ||||
-rw-r--r-- | src/code_801DB81C.cpp | 175 |
4 files changed, 222 insertions, 46 deletions
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 new file mode 100644 index 0000000..678fafa --- /dev/null +++ b/src/code_801DB81C.cpp @@ -0,0 +1,175 @@ +#include "types.h"
+#include "ctorStruct.h"
+#include "SDK/os.h"
+#include "code_801DB81C.h"
+
+namespace
+{
+ typedef void (*funcPtr)(u32, u32, u8);
+
+ struct unkClass
+ {
+ u8 unk0;
+ u8 unk1;
+ funcPtr unk4;
+ };
+}
+
+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;
+ size_t new_var;
+ size_t new_var2;
+ size_t *new_var3;
+ size_t *new_var4;
+ size_t *new_var5;
+ new_var = 0;
+ new_var5 = &i;
+ for (i = new_var; i < 32; i++) {
+ gUnk8063F308 = new_var;
+ gUnk80491370[i].unk0 = 0xff;
+ }
+
+ LCEnable();
+
+ gUnk8063F2FC = 0xE0000000;
+ i = p1;
+ new_var = 9;
+ gUnk8063F2F8 = i << new_var;
+ if (i) {
+ new_var3 = new_var5;
+ new_var4 = new_var3;
+ new_var3 = new_var4;
+ new_var4 = new_var3;
+ new_var2 = *new_var4;
+ func_801DB92C(0 & 0xFFu, (u8)new_var2, 1);
+ gUnk80491370[0].unk0 = 0;
+ gUnk80491370[0].unk1 = (u8)*new_var3;
+ }
+
+ gUnk8063F304 = 0;
+}
+
+static void func_801DB92C(u8 start, u8 width, u32 setOrClear)
+{
+ u32 bit = 0x80000000;
+ while (start--)
+ bit >>= 1;
+ while (width--) {
+ gUnk8063F308 = (setOrClear == 1) ? gUnk8063F308 | bit : gUnk8063F308 & ~bit;
+ bit >>= 1;
+ }
+}
+
+asm u32 func_801DB978(u8 p1)
+{
+ nofralloc
+ /* 801DB978 001D75D8 94 21 FF F0 */ stwu r1, -0x10(r1)
+ /* 801DB97C 001D75DC 7C 08 02 A6 */ mflr r0
+ /* 801DB980 001D75E0 90 01 00 14 */ stw r0, 0x14(r1)
+ /* 801DB984 001D75E4 93 E1 00 0C */ stw r31, 0xc(r1)
+ /* 801DB988 001D75E8 7C 3F 0B 78 */ mr r31, r1
+ /* 801DB98C 001D75EC 93 C1 00 08 */ stw r30, 8(r1)
+ /* 801DB990 001D75F0 7C 7E 1B 78 */ mr r30, r3
+ /* 801DB994 001D75F4 7C 68 02 A6 */ mflr r3
+ /* 801DB998 001D75F8 90 6D A0 40 */ stw r3, gUnk8063F300
+ /* 801DB99C 001D75FC 7F C3 F3 78 */ mr r3, r30
+ /* 801DB9A0 001D7600 4B FF FE 7D */ bl func_801DB81C
+ /* 801DB9A4 001D7604 2C 1E 00 00 */ cmpwi r30, 0
+ /* 801DB9A8 001D7608 40 82 00 0C */ bne lbl_801DB9B4
+ /* 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, 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
+ /* 801DB9C8 001D7628 90 61 00 00 */ stw r3, 0(r1)
+ /* 801DB9CC 001D762C 80 6D A0 40 */ lwz r3, gUnk8063F300
+ /* 801DB9D0 001D7630 7C 68 03 A6 */ mtlr r3
+ /* 801DB9D4 001D7634 4E 80 00 20 */ blr
+ /* 801DB9D8 001D7638 38 60 00 01 */ li r3, 1
+ lbl_801DB9DC:
+ /* 801DB9DC 001D763C 7F EA FB 78 */ mr r10, r31
+ /* 801DB9E0 001D7640 83 FF 00 0C */ lwz r31, 0xc(r31)
+ /* 801DB9E4 001D7644 83 CA 00 08 */ lwz r30, 8(r10)
+ /* 801DB9E8 001D7648 81 41 00 00 */ lwz r10, 0(r1)
+ /* 801DB9EC 001D764C 80 0A 00 04 */ lwz r0, 4(r10)
+ /* 801DB9F0 001D7650 7D 41 53 78 */ mr r1, r10
+ /* 801DB9F4 001D7654 7C 08 03 A6 */ mtlr r0
+ /* 801DB9F8 001D7658 4E 80 00 20 */ blr
+}
+
+void func_801DB9FC(void)
+{
+ u32 i;
+ short j;
+ unsigned short new_var;
+ char new_var2;
+ u32 *new_var3;
+ u32 new_var4;
+ u32 *new_var5;
+ new_var = 0xff;
+ if (gUnk8063F304 != 1) {
+ new_var2 = 9;
+ i = 31, j = 0;
+ new_var3 = &i;
+ new_var5 = &new_var4;
+ do {
+ unsigned char r0 = gUnk80491370[j].unk0;
+ new_var4 = *new_var3;
+ 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);
+ gUnk8063F304 = 1;
+ }
+}
+
+void func_801DBA8C(void)
+{
+ u32 i;
+ short j;
+ unsigned short new_var;
+ char new_var2;
+ u32 *new_var3;
+ u32 new_var4;
+ u32 *new_var5;
+ new_var = 0xff;
+ if (gUnk8063F304 != 0) {
+ new_var2 = 9;
+ i = 31, j = 0;
+ new_var3 = &i;
+ new_var5 = &new_var4;
+ do {
+ unsigned char r0 = gUnk80491370[j].unk0;
+ new_var4 = *new_var3;
+ 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);
+ gUnk8063F304 = 0;
+ }
+}
+
+} //extern "C"
|