summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax <mparisi@stevens.edu>2020-11-25 23:46:42 -0500
committerMax <mparisi@stevens.edu>2020-11-25 23:46:42 -0500
commit2023adf209156d9c461197eefac93b5216fbc2f3 (patch)
tree34c3b3f68968b6f18c1324d1364a398bbff4b653
parentf048ac917bcb493fdabf03f0066cd252ba0f841b (diff)
rename file to gUnkClass20.cpp, condense code, and add comments
-rw-r--r--asm/code_8004E9F0.s12
-rw-r--r--asm/code_801E0810_asm.s3
-rw-r--r--include/GSfilterModule.h24
-rw-r--r--include/gUnkClass20.h30
-rw-r--r--obj_files.mk3
-rw-r--r--src/code_801E0810.cpp131
-rw-r--r--src/gUnkClass20.cpp84
7 files changed, 145 insertions, 142 deletions
diff --git a/asm/code_8004E9F0.s b/asm/code_8004E9F0.s
index a6483b0..f61cc2a 100644
--- a/asm/code_8004E9F0.s
+++ b/asm/code_8004E9F0.s
@@ -61,7 +61,7 @@ func_8004EA94:
/* 8004EAAC 0004A70C 2C 00 00 00 */ cmpwi r0, 0
/* 8004EAB0 0004A710 41 82 00 14 */ beq lbl_8004EAC4
/* 8004EAB4 0004A714 7C 03 03 78 */ mr r3, r0
-/* 8004EAB8 0004A718 48 19 1E 4D */ bl func_801E0904
+/* 8004EAB8 0004A718 48 19 1E 4D */ bl func_801E0904__11gUnkClass20Fv
/* 8004EABC 0004A71C 38 00 00 00 */ li r0, 0
/* 8004EAC0 0004A720 90 1F 00 00 */ stw r0, 0(r31)
lbl_8004EAC4:
@@ -145,12 +145,12 @@ func_8004EBA0:
/* 8004EBD4 0004A834 38 80 00 00 */ li r4, 0
/* 8004EBD8 0004A838 38 A0 00 00 */ li r5, 0
/* 8004EBDC 0004A83C 38 C0 00 00 */ li r6, 0
-/* 8004EBE0 0004A840 48 19 1C 31 */ bl func_801E0810
+/* 8004EBE0 0004A840 48 19 1C 31 */ bl func_801E0810__11gUnkClass20FUlUcUc
/* 8004EBE4 0004A844 90 7E 00 00 */ stw r3, 0(r30)
/* 8004EBE8 0004A848 48 00 00 0C */ b lbl_8004EBF4
lbl_8004EBEC:
/* 8004EBEC 0004A84C 7F E4 FB 78 */ mr r4, r31
-/* 8004EBF0 0004A850 48 19 1D ED */ bl func_801E09DC
+/* 8004EBF0 0004A850 48 19 1D ED */ bl func_801E09DC__11gUnkClass20CFP11gUnkClass21
lbl_8004EBF4:
/* 8004EBF4 0004A854 80 01 00 14 */ lwz r0, 0x14(r1)
/* 8004EBF8 0004A858 83 E1 00 0C */ lwz r31, 0xc(r1)
@@ -184,12 +184,12 @@ func_8004EC0C:
/* 8004EC5C 0004A8BC 98 01 00 09 */ stb r0, 9(r1)
/* 8004EC60 0004A8C0 98 01 00 0A */ stb r0, 0xa(r1)
/* 8004EC64 0004A8C4 98 01 00 0B */ stb r0, 0xb(r1)
-/* 8004EC68 0004A8C8 48 19 1B A9 */ bl func_801E0810
+/* 8004EC68 0004A8C8 48 19 1B A9 */ bl func_801E0810__11gUnkClass20FUlUcUc
/* 8004EC6C 0004A8CC 90 7D 00 00 */ stw r3, 0(r29)
lbl_8004EC70:
/* 8004EC70 0004A8D0 80 7D 00 00 */ lwz r3, 0(r29)
/* 8004EC74 0004A8D4 38 81 00 08 */ addi r4, r1, 8
-/* 8004EC78 0004A8D8 48 19 1D 01 */ bl func_801E0978
+/* 8004EC78 0004A8D8 48 19 1D 01 */ bl func_801E0978__11gUnkClass20CFP11gUnkClass21
/* 8004EC7C 0004A8DC 7F A3 EB 78 */ mr r3, r29
/* 8004EC80 0004A8E0 7F C4 F3 78 */ mr r4, r30
/* 8004EC84 0004A8E4 38 A1 00 10 */ addi r5, r1, 0x10
@@ -242,7 +242,7 @@ func_8004ECE0:
/* 8004ED28 0004A988 4B FF FE 1D */ bl func_8004EB44
/* 8004ED2C 0004A98C 80 7F 00 00 */ lwz r3, 0(r31)
/* 8004ED30 0004A990 38 81 00 08 */ addi r4, r1, 8
-/* 8004ED34 0004A994 48 19 1C A9 */ bl func_801E09DC
+/* 8004ED34 0004A994 48 19 1C A9 */ bl func_801E09DC__11gUnkClass20CFP11gUnkClass21
lbl_8004ED38:
/* 8004ED38 0004A998 80 01 00 24 */ lwz r0, 0x24(r1)
/* 8004ED3C 0004A99C 83 E1 00 1C */ lwz r31, 0x1c(r1)
diff --git a/asm/code_801E0810_asm.s b/asm/code_801E0810_asm.s
deleted file mode 100644
index 4ea72fe..0000000
--- a/asm/code_801E0810_asm.s
+++ /dev/null
@@ -1,3 +0,0 @@
-.include "macros.inc"
-
-.section .text, "ax" # 0x80006980 - 0x803E1E60
diff --git a/include/GSfilterModule.h b/include/GSfilterModule.h
new file mode 100644
index 0000000..6b9af03
--- /dev/null
+++ b/include/GSfilterModule.h
@@ -0,0 +1,24 @@
+#ifndef POKEREVO_GSFILTERMODULE_H
+#define POKEREVO_GSFILTERMODULE_H
+
+#include "gUnkClass20.h"
+
+struct GSfilterModule
+{
+ u8 unk0[0x10]; // pad
+ u32 unk10;
+ u8 unk14[0x3D8]; // pad
+ gUnkClass20* unk3EC; // pointer to array
+ gUnkClass21* unk3F0;
+ u8 unk3F4[0x18]; // pad
+ u8 unk40C; // counter
+};
+
+extern "C"
+{
+extern GSfilterModule* lbl_8063F410;
+// TODO: member function
+gUnkClass20* func_801FB80C(GSfilterModule*);
+}
+
+#endif //POKEREVO_GSFILTERMODULE_H
diff --git a/include/gUnkClass20.h b/include/gUnkClass20.h
new file mode 100644
index 0000000..141aff8
--- /dev/null
+++ b/include/gUnkClass20.h
@@ -0,0 +1,30 @@
+#ifndef POKEREVO_GUNKCLASS20_H
+#define POKEREVO_GUNKCLASS20_H
+
+// size == 0x4
+struct gUnkClass21
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+};
+
+// size == 0x8
+struct gUnkClass20
+{
+ u8 unk0; // index into an array of gUnkClass21.
+ // id?
+ u8 unk1; // func_801FB80C returns first instance where this is 0.
+ // "allocated" flag?
+ u8 unk2;
+ u8 unk3;
+ u32 unk4;
+
+ gUnkClass20* func_801E0810(u32 p2, u8 p3, u8 p4);
+ void func_801E0904();
+ void func_801E0978(gUnkClass21* p2) const;
+ void func_801E09DC(gUnkClass21* p2) const;
+};
+
+#endif //POKEREVO_GUNKCLASS20_H
diff --git a/obj_files.mk b/obj_files.mk
index 1e27ac4..d8cb71a 100644
--- a/obj_files.mk
+++ b/obj_files.mk
@@ -234,8 +234,7 @@ SPLIT_O_FILES := \
$(BUILD_DIR)/asm/GSvolume_ctors.o \
$(BUILD_DIR)/asm/GSvolume_sbss.o \
$(BUILD_DIR)/src/code_801E07E8.o \
- $(BUILD_DIR)/src/code_801E0810.o \
- $(BUILD_DIR)/asm/code_801E0810_asm.o \
+ $(BUILD_DIR)/src/gUnkClass20.o \
$(BUILD_DIR)/asm/code_801E0A54.o \
$(BUILD_DIR)/asm/code_801E4360.o \
$(BUILD_DIR)/asm/code_801E474C.o \
diff --git a/src/code_801E0810.cpp b/src/code_801E0810.cpp
deleted file mode 100644
index 9095c63..0000000
--- a/src/code_801E0810.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-#include "ctorStruct.h"
-#include <string.h>
-#include <SDK/os.h>
-
-static ctorStruct gUnk8063F370(1, 4, 0);
-
-// size == 0x4
-struct unkClass3
-{
- u8 unk0;
- u8 unk1;
- u8 unk2;
- u8 unk3;
-};
-
-// size == 0x8
-struct unkClass2
-{
- u8 unk0; // index into unkClass3 array
- u8 unk1; // func_801FB80C returns first instance when this is 0
- u8 unk2;
- u8 unk3;
- u32 unk4;
-};
-
-struct GSfilterModule
-{
- u8 unk0[0x10]; // pad
- u32 unk10;
- u8 unk14[0x3D8]; // pad
- unkClass2* unk3EC; // pointer to array
- unkClass3* unk3F0;
- u8 unk3F4[0x18]; // pad
- u8 unk40C; // counter
-};
-
-extern "C"
-{
-
-extern GSfilterModule* lbl_8063F410;
-unkClass2* func_801FB80C(GSfilterModule*);
-
-void* func_8023B058(u8);
-void func_8023B3B8(void*, u32);
-void func_8023B420(void*, u32);
-
-// NONMATCHING: r29/r30 regswaps
-
-// TODO: type of p1?
-
-unkClass2* func_801E0810(unkClass2* p1, u32 p2, u8 p3, u8 p4)
-{
- u32 r30;
-
- if (!lbl_8063F410)
- return NULL;
- unkClass2* r29 = func_801FB80C(lbl_8063F410);
- if (!r29)
- return NULL;
- r29->unk1 = 1;
- r29->unk2 = p3;
- r29->unk3 = p4;
- r29->unk4 = p2;
- if (r29->unk3) {
- r30 = lbl_8063F410->unk10;
- void* r3 = func_8023B058(static_cast<u8>(r30 >> 16));
- if (r3)
- func_8023B3B8(r3, r30);
- }
-
- unkClass* r3 = lbl_8063F410;
- unkClass3* r4 = (r29->unk1) ? &r3->unk3F0[r29->unk0] : NULL;
-
- r4->unk0 = p1->unk0;
- r4->unk1 = p1->unk1;
- r4->unk2 = p1->unk2;
- r4->unk3 = p1->unk3;
- return r29;
-}
-
-// TODO: p1 type?
-
-void func_801E0904(unkClass2* p1)
-{
- if (p1->unk1) {
- if (p1->unk3) {
- u32 r31 = lbl_8063F410->unk10;
- void* r3 = func_8023B058(static_cast<u8>(r31 >> 16));
- if (r3)
- func_8023B420(r3, r31);
- }
- p1->unk1 = 0;
- p1->unk4 = NULL;
- }
-}
-
-// TODO: p1 type?
-
-void func_801E0978(const unkClass2* p1, unkClass3* p2)
-{
- if (p1->unk1) {
- unkClass3* r3;
- unkClass* r5 = lbl_8063F410;
- if (p1->unk1) {
- r3 = &r5->unk3F0[p1->unk0];
- } else {
- r3 = NULL;
- }
- p2->unk0 = r3->unk0;
- p2->unk1 = r3->unk1;
- p2->unk2 = r3->unk2;
- p2->unk3 = r3->unk3;
- return;
- }
- memset(p2, 0, sizeof(unkClass3));
-}
-
-void func_801E09DC(const unkClass2* p1, unkClass3* p2)
-{
- if (!p1->unk1)
- return;
- unkClass* r5 = lbl_8063F410;
- unkClass3* r3 = (p1->unk1) ? &r5->unk3F0[p1->unk0] : NULL;
- r3->unk0 = p2->unk0;
- r3->unk1 = p2->unk1;
- r3->unk2 = p2->unk2;
- r3->unk3 = p2->unk3;
- DCFlushRange(r3, sizeof(unkClass3));
-}
-
-} //extern "C"
diff --git a/src/gUnkClass20.cpp b/src/gUnkClass20.cpp
new file mode 100644
index 0000000..960e593
--- /dev/null
+++ b/src/gUnkClass20.cpp
@@ -0,0 +1,84 @@
+#include "ctorStruct.h"
+#include <string.h>
+#include <SDK/os.h>
+#include "GSfilterModule.h"
+#include "gUnkClass20.h"
+
+static ctorStruct gUnk8063F370(1, 4, 0);
+
+extern "C"
+{
+// TODO: move to proper header
+void* func_8023B058(u8);
+void func_8023B3B8(void*, u32);
+void func_8023B420(void*, u32);
+}
+
+// "constructor" ?
+gUnkClass20* gUnkClass20::func_801E0810(u32 p2, u8 p3, u8 p4)
+{
+ u32 r30;
+
+ if (!lbl_8063F410)
+ return NULL;
+ gUnkClass20* r29 = func_801FB80C(lbl_8063F410);
+ if (!r29)
+ return NULL;
+ r29->unk1 = 1;
+ r29->unk2 = p3;
+ r29->unk3 = p4;
+ r29->unk4 = p2;
+ if (r29->unk3) {
+ r30 = lbl_8063F410->unk10;
+ void* r3 = func_8023B058(static_cast<u8>(r30 >> 16));
+ if (r3)
+ func_8023B3B8(r3, r30);
+ }
+
+ const GSfilterModule* r3 = lbl_8063F410;
+ gUnkClass21* r4 = (r29->unk1) ? &r3->unk3F0[r29->unk0] : NULL;
+
+ r4->unk0 = unk0;
+ r4->unk1 = unk1;
+ r4->unk2 = unk2;
+ r4->unk3 = unk3;
+ return r29;
+}
+
+// "destructor" ?
+void gUnkClass20::func_801E0904()
+{
+ if (unk1) {
+ if (unk3) {
+ u32 r31 = lbl_8063F410->unk10;
+ void* r3 = func_8023B058(static_cast<u8>(r31 >> 16));
+ if (r3)
+ func_8023B420(r3, r31);
+ }
+ unk1 = 0;
+ unk4 = NULL;
+ }
+}
+
+// read into p2
+void gUnkClass20::func_801E0978(gUnkClass21* p2) const
+{
+ if (unk1) {
+ const GSfilterModule* r5 = lbl_8063F410;
+ const gUnkClass21* r3 = (unk1) ? &r5->unk3F0[unk0] : NULL;
+ *p2 = *r3;
+ return;
+ }
+ memset(p2, 0, sizeof(gUnkClass21));
+}
+
+// write from p2
+void gUnkClass20::func_801E09DC(gUnkClass21* p2) const
+{
+ if (!unk1)
+ return;
+ const GSfilterModule* r5 = lbl_8063F410;
+ gUnkClass21* r3 = (unk1) ? &r5->unk3F0[unk0] : NULL;
+ *r3 = *p2;
+ DCFlushRange(r3, sizeof(gUnkClass21));
+}