diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/code_801DAAE0.cpp | 2 | ||||
-rw-r--r-- | src/code_801DB040.cpp | 148 |
2 files changed, 30 insertions, 120 deletions
diff --git a/src/code_801DAAE0.cpp b/src/code_801DAAE0.cpp index c03d384..31b84e5 100644 --- a/src/code_801DAAE0.cpp +++ b/src/code_801DAAE0.cpp @@ -1,8 +1,8 @@ #include "types.h"
#include "unkStruct.h"
-#include "code_801DAAE0.h"
#include "Runtime/__mem.h"
#include "SDK/mem.h"
+#include "code_801DAAE0.h"
namespace
{
diff --git a/src/code_801DB040.cpp b/src/code_801DB040.cpp index bf09541..cf295c2 100644 --- a/src/code_801DB040.cpp +++ b/src/code_801DB040.cpp @@ -1,90 +1,28 @@ #include "types.h"
#include "unkStruct.h"
#include "Runtime/__mem.h"
+#include "SDK/mem.h"
#include "code_801DAAE0.h"
+#include "code_801DBB3C.h"
+#include "code_801DB040.h"
extern "C" {
-typedef u32 (*FuncPtr)(void*, u32, u32);
-
-// TODO: func_801DBD00 might need this definition
-// TODO: doubly linked list
-struct unkClass
-{
- u8 unk0; // u8, u32, or union?
- u8 unk1;
- u8 unk2[0x2];
- u32 unk4;
- MEMHeapHandle unk8;
- void* unkC; // or, a more specific pointer. ptr to heap allocated mem
- u32 unk10;
- u32 unk14;
- FuncPtr unk18;
- unkClass* unk1C; //next?
- unkClass* unk20; //prev?
-};
-
-// TODO: free store for linked list nodes
-struct unkClass2
-{
- u8 pad[0x24];
-};
-
-
-// TODO: move to other headers
-unkClass* func_801DBC58(unkClass2* p1);
-void func_801DBD00(unkClass2* p1, unkClass* p2);
-unkClass2* func_801DBD74(u32 p1, u32 p2);
-
-
-
namespace
{
unkStruct gUnk8063F2E0(1, 4, 0);
+ unkClass* gUnk8063F2E8;
+ unkClass2* gUnk8063F2EC;
}
-// head of doubly linked list?
-extern unkClass* lbl_8063F2E8; //TODO: rename/define/internalize
-
-// TODO: pointer to some class, a free pool?
-extern unkClass2* lbl_8063F2EC; //TODO: rename/define/internalize
-
-
-
-
-
-
-// TODO: interface for this module
-
-//static
-unkClass* func_801DB040(u32 p1, u32 p2);
-unkClass* func_801DB07C(unkClass* p1, BOOL p2);
-void func_801DB15C(u32 p1);
-void* func_801DB184(MEMHeapHandle heap, u32 size, u32 p3, u32 p4, FuncPtr p5);
-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_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);
-void func_801DB79C(u32 p1, u32 p2);
-void func_801DB7CC(u32 p1, u32 p2);
-
-//static
-unkClass* func_801DB040(u32 p1, u32 p2)
+static unkClass* func_801DB040(u32 p1, u32 p2)
{
- for (unkClass* r5 = lbl_8063F2E8; r5; r5 = r5->unk1C)
+ for (unkClass* r5 = gUnk8063F2E8; r5; r5 = r5->unk1C)
if (r5->unk10 == p1 && r5->unk14 == p2)
return r5;
return NULL;
}
-// free node's buffer, and optionally remove node from linked list,
-// returning new head?
unkClass* func_801DB07C(unkClass* p1, BOOL p2)
{
unkClass* r31;
@@ -92,8 +30,6 @@ unkClass* func_801DB07C(unkClass* p1, BOOL p2) return p1->unk1C;
if (p1->unk0) {
if (p1->unkC) {
- // free
- // void func_801DAD48(MEMHeapHandle heap, void* memBlock);
func_801DAD48(p1->unk8, p1->unkC);
p1->unkC = NULL;
}
@@ -101,53 +37,43 @@ unkClass* func_801DB07C(unkClass* p1, BOOL p2) }
p1->unkC = NULL;
r31 = p1->unk1C;
- // TODO: remove p1 from doubly linked list?
if (p2) {
unkClass* r3 = p1->unk20;
if (r3)
r3->unk1C = r31;
else
- lbl_8063F2E8 = r31; // set new head
+ gUnk8063F2E8 = r31;
if (r31)
r31->unk20 = p1->unk20;
- // TODO: free p1?
- func_801DBD00(lbl_8063F2EC, p1);
+ func_801DBD00(gUnk8063F2EC, p1);
}
return r31;
}
void func_801DB15C(u32 p1)
{
- // TODO: magic number
- lbl_8063F2EC = func_801DBD74(p1, 36);
+ gUnk8063F2EC = func_801DBD74(p1, 36);
}
-// Add node to start of linked list, and return pointer to its data payload
-//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, FuncPtr p5)
{
- // check if node already exists?
if (func_801DB040(p3, p4))
return NULL;
- // allocate linked list node from free store?
- unkClass* r31 = func_801DBC58(lbl_8063F2EC);
+ unkClass* r31 = func_801DBC58(gUnk8063F2EC);
if (!r31)
return NULL;
- // alloc
- // void* func_801DAC94(MEMHeapHandle heap, u32 size)
if ((r31->unkC = func_801DAC94(heap, size)) == NULL) {
- // return node to free store?
- func_801DBD00(lbl_8063F2EC, r31);
+ func_801DBD00(gUnk8063F2EC, r31);
return NULL;
}
- if (lbl_8063F2E8)
- lbl_8063F2E8->unk20 = r31;
+ if (gUnk8063F2E8)
+ gUnk8063F2E8->unk20 = r31;
- r31->unk1C = lbl_8063F2E8;
+ r31->unk1C = gUnk8063F2E8;
r31->unk20 = NULL;
- lbl_8063F2E8 = r31;
+ gUnk8063F2E8 = r31;
r31->unk0 = 1;
r31->unk8 = heap;
@@ -159,26 +85,23 @@ void* func_801DB184(MEMHeapHandle heap, u32 size, u32 p3, u32 p4, FuncPtr p5) return r31->unkC;
}
-// similar to func_801DB184, but use alignment allocator function
-// and do not clear unk4 of the unkClass structure
void* func_801DB270(MEMHeapHandle heap, u32 size, int align, u32 p4, u32 p5, FuncPtr p6)
{
if (func_801DB040(p4, p5))
return NULL;
- unkClass* r31 = func_801DBC58(lbl_8063F2EC);
+ unkClass* r31 = func_801DBC58(gUnk8063F2EC);
if (!r31)
return NULL;
- // void* func_801DAD08(MEMHeapHandle heap, u32 size, int alignment);
if ((r31->unkC = func_801DAD08(heap, size, align)) == NULL) {
- func_801DBD00(lbl_8063F2EC, r31);
+ func_801DBD00(gUnk8063F2EC, r31);
return NULL;
}
- if (lbl_8063F2E8)
- lbl_8063F2E8->unk20 = r31;
+ if (gUnk8063F2E8)
+ gUnk8063F2E8->unk20 = r31;
- r31->unk1C = lbl_8063F2E8;
+ r31->unk1C = gUnk8063F2E8;
r31->unk20 = NULL;
- lbl_8063F2E8 = r31;
+ gUnk8063F2E8 = r31;
r31->unk0 = 1;
r31->unk8 = heap;
@@ -194,7 +117,6 @@ void* func_801DB360(u32 size, int align, u32 p3, u32 p4, FuncPtr p5) return func_801DB270(func_801DAC0C(), size, align, p3, p4, p5);
}
-// replace node in linked list?
void func_801DB3BC(void* p1, u32 p2, u32 p3, FuncPtr p4)
{
unkClass* r31 = func_801DB040(p2, p3);
@@ -214,13 +136,13 @@ void func_801DB3BC(void* p1, u32 p2, u32 p3, FuncPtr p4) r31->unk18 = p4;
}
} else {
- unkClass* r3 = func_801DBC58(lbl_8063F2EC);
+ unkClass* r3 = func_801DBC58(gUnk8063F2EC);
if (r3) {
- if (lbl_8063F2E8)
- lbl_8063F2E8->unk20 = r3;
- r3->unk1C = lbl_8063F2E8;
+ if (gUnk8063F2E8)
+ gUnk8063F2E8->unk20 = r3;
+ r3->unk1C = gUnk8063F2E8;
r3->unk20 = NULL;
- lbl_8063F2E8 = r3;
+ gUnk8063F2E8 = r3;
r3->unk0 = 0;
r3->unk1 = 0;
r3->unkC = p1;
@@ -231,7 +153,6 @@ void func_801DB3BC(void* p1, u32 p2, u32 p3, FuncPtr p4) }
}
-// get data payload from the specified node?
void* func_801DB4BC(u32 p1, u32 p2)
{
unkClass* r3 = func_801DB040(p1, p2);
@@ -240,7 +161,6 @@ void* func_801DB4BC(u32 p1, u32 p2) return r3->unkC;
}
-// increment specified node's unk4 counter and return its new value
u32 func_801DB4FC(u32 p1, u32 p2)
{
unkClass* r3 = func_801DB040(p1, p2);
@@ -249,8 +169,6 @@ u32 func_801DB4FC(u32 p1, u32 p2) return ++r3->unk4;
}
-// decrement specified node's unk4 counter and return its new value, and
-// free that node if its counter is already / will become 0
u32 func_801DB548(u32 p1, u32 p2)
{
unkClass* r31 = func_801DB040(p1, p2);
@@ -265,7 +183,6 @@ u32 func_801DB548(u32 p1, u32 p2) return r31->unk4;
}
-// get size of specified node's data payload
u32 func_801DB5E4(u32 p1, u32 p2)
{
unkClass* r3 = func_801DB040(p1, p2);
@@ -278,7 +195,6 @@ u32 func_801DB5E4(u32 p1, u32 p2) return func_801DAEE0(r3->unkC);
}
-// free specified node
void func_801DB644(u32 p1, u32 p2)
{
unkClass* r3 = func_801DB040(p1, p2);
@@ -286,17 +202,13 @@ void func_801DB644(u32 p1, u32 p2) func_801DB07C(r3, TRUE);
}
-// search linked list for all nodes whose unk10 field matches p1,
-// and remove those nodes from the list
void func_801DB674(u32 p1)
{
- unkClass* p = lbl_8063F2E8;
+ unkClass* p = gUnk8063F2E8;
while (p)
p = (p->unk10 == p1) ? func_801DB07C(p, TRUE) : p->unk1C;
}
-// append a new node to the start of the linked list,
-// making its data payload a copy of the specified node's payload. Indicate success
BOOL func_801DB6D0(u32 p1, u32 p2, MEMHeapHandle heap, u32 p4, u32 p5, FuncPtr p6)
{
unkClass* r31 = func_801DB040(p1, p2);
@@ -312,7 +224,6 @@ BOOL func_801DB6D0(u32 p1, u32 p2, MEMHeapHandle heap, u32 p4, u32 p5, FuncPtr p return TRUE;
}
-// Set the unk1 flag of the specified node
void func_801DB79C(u32 p1, u32 p2)
{
unkClass* r3 = func_801DB040(p1, p2);
@@ -320,7 +231,6 @@ void func_801DB79C(u32 p1, u32 p2) r3->unk1 = 1;
}
-// Clear the unk1 flag of the specified node
void func_801DB7CC(u32 p1, u32 p2)
{
unkClass* r3 = func_801DB040(p1, p2);
|