summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRevo <projectrevotpp@hotmail.com>2020-10-23 23:41:49 -0400
committerGitHub <noreply@github.com>2020-10-23 23:41:49 -0400
commit52139f47a6c4df33fda98b3be5b140cd48ab218d (patch)
tree3f997a2b6086a26684ec76c2e666dc4a34a1a645 /src
parent8fd68eac26a17cd4b7a2bdb637d4d1f5497c5201 (diff)
parent828020713c213b3e02af7f8c87f473c2a3ce26ba (diff)
Merge pull request #152 from mparisi20/master
decompile code_801DBB3C.o and simplify some functions in code_801DB81C.cpp
Diffstat (limited to 'src')
-rw-r--r--src/code_801DB040.cpp2
-rw-r--r--src/code_801DB81C.cpp59
-rw-r--r--src/code_801DBB3C.cpp94
3 files changed, 111 insertions, 44 deletions
diff --git a/src/code_801DB040.cpp b/src/code_801DB040.cpp
index 088dc2a..ce9740a 100644
--- a/src/code_801DB040.cpp
+++ b/src/code_801DB040.cpp
@@ -53,7 +53,7 @@ gUnkClass1* func_801DB07C(gUnkClass1* p1, BOOL p2)
void func_801DB15C(u32 p1)
{
- gUnk8063F2EC = func_801DBD74(p1, 36);
+ gUnk8063F2EC = func_801DBD74(p1, sizeof(gUnkClass1));
}
static void* func_801DB184(MEMHeapHandle heap, u32 size, u32 p3, u32 p4, gFuncPtr1 p5)
diff --git a/src/code_801DB81C.cpp b/src/code_801DB81C.cpp
index 678fafa..95af182 100644
--- a/src/code_801DB81C.cpp
+++ b/src/code_801DB81C.cpp
@@ -18,7 +18,8 @@ namespace
static void func_801DB81C(u8 p1);
static void func_801DB92C(u8 start, u8 width, u32 setOrClear);
-static unkClass gUnk80491370[32];
+static const size_t ARR_SIZE = 32;
+static unkClass gUnk80491370[ARR_SIZE];
static ctorStruct gUnk8063F2F0(1, 4, 0);
static u32 gUnk8063F2F8;
static u32 gUnk8063F2FC;
@@ -30,36 +31,17 @@ 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;
+ gUnk8063F308 = 0;
+ for (size_t i = 0; i < ARR_SIZE; i++)
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);
+ gUnk8063F2FC = (u32)LCGetBase();
+ gUnk8063F2F8 = (u32)(p1 << 9);
+ if (p1) {
+ func_801DB92C(0, p1, 1);
gUnk80491370[0].unk0 = 0;
- gUnk80491370[0].unk1 = (u8)*new_var3;
+ gUnk80491370[0].unk1 = p1;
}
-
gUnk8063F304 = 0;
}
@@ -113,29 +95,25 @@ asm u32 func_801DB978(u8 p1)
/* 801DB9F4 001D7654 7C 08 03 A6 */ mtlr r0
/* 801DB9F8 001D7658 4E 80 00 20 */ blr
}
+#pragma peephole on
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;
+ i = ARR_SIZE-1, 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);
+ if ((((u32) r0) != 0xff) && gUnk80491370[j].unk4) {
+ gUnk80491370[j].unk4(0, gUnk8063F2FC + (r0 << 9), gUnk80491370[j].unk1);
}
-
i = *new_var5;
j++;
} while ((i--) != 0);
@@ -147,24 +125,19 @@ 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;
+ i = ARR_SIZE-1, 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);
+ if ((((u32) r0) != 0xff) && gUnk80491370[j].unk4) {
+ gUnk80491370[j].unk4(1, gUnk8063F2FC + (r0 << 9), gUnk80491370[j].unk1);
}
-
i = *new_var5;
j++;
} while ((i--) != 0);
diff --git a/src/code_801DBB3C.cpp b/src/code_801DBB3C.cpp
new file mode 100644
index 0000000..5037b5a
--- /dev/null
+++ b/src/code_801DBB3C.cpp
@@ -0,0 +1,94 @@
+#include "types.h"
+#include "ctorStruct.h"
+#include "Runtime/__mem.h"
+#include "code_801DAAE0.h"
+#include "code_801DB040.h"
+#include "code_801DBB3C.h"
+
+static u32 func_801DBB3C(void);
+static void func_801DBB44(u32);
+static void func_801DBB48(gUnkClass2 *p1, size_t nodes, size_t size);
+
+static gUnkClass2 gUnk80491470[32];
+static ctorStruct gUnk8063F310(1, 4, 0);
+
+extern "C" {
+
+static u32 func_801DBB3C(void)
+{
+ return 0;
+}
+
+static void func_801DBB44(u32)
+{
+
+}
+static void func_801DBB48(gUnkClass2 *p1, size_t nodes, size_t size)
+{
+ size_t blockSize = (size+7) & ~0x3;
+ p1->unk8 = nodes;
+ p1->unkC = blockSize;
+ u8* data = (u8*)func_801DAD98((nodes + 1) * blockSize);
+ p1->unk10 = data;
+ p1->unk18 = (gUnkClass3*)data;
+ p1->unk14 = data + (nodes * blockSize);
+ u8* next;
+ u8** pnext = &next;
+ size_t i;
+ gUnkClass3* r8 = NULL;
+ for (i = 0; i < nodes; i++) {
+ *pnext = data + blockSize;
+ r8 = (gUnkClass3*)data;
+ ((gUnkClass3*)data)->unk0 = (gUnkClass3*)(*pnext);
+ data = *pnext;
+ }
+ r8->unk0 = 0;
+}
+
+gUnkClass1* func_801DBC58(gUnkClass2* p1)
+{
+ gUnkClass3* r31 = p1->unk18;
+ u32 r30 = func_801DBB3C();
+ func_801DBB44(0);
+ if (r31) {
+ p1->unk18 = r31->unk0;
+ goto passCheck;
+ }
+ func_801DBB44(r30);
+ return NULL;
+passCheck:
+ func_801DBB44(r30);
+ memset(r31, 0, p1->unkC);
+ if (++p1->unk0 > p1->unk4)
+ p1->unk4 = p1->unk0;
+ return &r31->unk4;
+}
+
+void func_801DBD00(gUnkClass2* p1, gUnkClass1* p2)
+{
+ u32 r31;
+ if (p2) {
+ gUnkClass3* r30 = (gUnkClass3*)((u8*)p2 - 4);
+ r30->unk0 = p1->unk18;
+ p1->unk0--;
+ r31 = func_801DBB3C();
+ func_801DBB44(0);
+ p1->unk18 = r30;
+ func_801DBB44(r31);
+ }
+}
+
+gUnkClass2* func_801DBD74(u32 nodes, u32 size)
+{
+ size_t i;
+ for (i = 0; i < 32; i++)
+ if (gUnk80491470[i].unk8 == 0)
+ break;
+ gUnkClass2* r31 = &gUnk80491470[i];
+ if (r31->unk8)
+ return NULL;
+ func_801DBB48(r31, nodes, size);
+ return r31;
+}
+
+}