summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax <mparisi@stevens.edu>2020-10-24 15:07:58 -0400
committerMax <mparisi@stevens.edu>2020-10-24 15:07:58 -0400
commit8f73a39edf782bd2e6c91130aac685b8dd267001 (patch)
treec72f79d6b07db5e91579d60cbc1cb21f37dec1c0
parentb4751c259e3bc0bb166cffc54061c7d9577ba0dc (diff)
match up to func_801DC0C8 with two nonmatchings
-rw-r--r--asm/code_801DBE90_asm.s145
-rw-r--r--include/SDK/DVD/dvd.h14
-rw-r--r--include/SDK/NAND/NANDCore.h14
-rw-r--r--include/SDK/OS/OSCache.h1
-rw-r--r--include/SDK/OS/OSInterrupt.h15
-rw-r--r--include/SDK/dvd.h14
-rw-r--r--include/SDK/nand.h14
-rw-r--r--include/SDK/os.h1
-rw-r--r--src/code_801DBE90.cpp202
9 files changed, 270 insertions, 150 deletions
diff --git a/asm/code_801DBE90_asm.s b/asm/code_801DBE90_asm.s
index 09cc041..ad4144b 100644
--- a/asm/code_801DBE90_asm.s
+++ b/asm/code_801DBE90_asm.s
@@ -2,151 +2,6 @@
.section .text, "ax" # 0x80006980 - 0x803E1E60
-.global func_801DBED0
-func_801DBED0:
-/* 801DBED0 001D7B30 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 801DBED4 001D7B34 7C 08 02 A6 */ mflr r0
-/* 801DBED8 001D7B38 90 01 00 14 */ stw r0, 0x14(r1)
-/* 801DBEDC 001D7B3C 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 801DBEE0 001D7B40 48 09 28 7D */ bl OSDisableInterrupts
-/* 801DBEE4 001D7B44 80 ED A0 64 */ lwz r7, lbl_8063F324-_SDA_BASE_(r13)
-/* 801DBEE8 001D7B48 3B E0 00 00 */ li r31, 0
-/* 801DBEEC 001D7B4C 80 0D A0 60 */ lwz r0, lbl_8063F320-_SDA_BASE_(r13)
-/* 801DBEF0 001D7B50 38 A0 00 00 */ li r5, 0
-/* 801DBEF4 001D7B54 7C E4 3B 78 */ mr r4, r7
-/* 801DBEF8 001D7B58 7C 09 03 A6 */ mtctr r0
-/* 801DBEFC 001D7B5C 28 00 00 00 */ cmplwi r0, 0
-/* 801DBF00 001D7B60 40 81 00 44 */ ble lbl_801DBF44
-lbl_801DBF04:
-/* 801DBF04 001D7B64 88 04 00 00 */ lbz r0, 0(r4)
-/* 801DBF08 001D7B68 28 00 00 01 */ cmplwi r0, 1
-/* 801DBF0C 001D7B6C 41 82 00 2C */ beq lbl_801DBF38
-/* 801DBF10 001D7B70 1C C5 00 50 */ mulli r6, r5, 0x50
-/* 801DBF14 001D7B74 38 00 00 01 */ li r0, 1
-/* 801DBF18 001D7B78 38 A0 00 00 */ li r5, 0
-/* 801DBF1C 001D7B7C 7C 07 31 AE */ stbx r0, r7, r6
-/* 801DBF20 001D7B80 80 0D A0 64 */ lwz r0, lbl_8063F324-_SDA_BASE_(r13)
-/* 801DBF24 001D7B84 7C 80 32 14 */ add r4, r0, r6
-/* 801DBF28 001D7B88 98 A4 00 01 */ stb r5, 1(r4)
-/* 801DBF2C 001D7B8C 80 0D A0 64 */ lwz r0, lbl_8063F324-_SDA_BASE_(r13)
-/* 801DBF30 001D7B90 7F E0 32 14 */ add r31, r0, r6
-/* 801DBF34 001D7B94 48 00 00 10 */ b lbl_801DBF44
-lbl_801DBF38:
-/* 801DBF38 001D7B98 38 84 00 50 */ addi r4, r4, 0x50
-/* 801DBF3C 001D7B9C 38 A5 00 01 */ addi r5, r5, 1
-/* 801DBF40 001D7BA0 42 00 FF C4 */ bdnz lbl_801DBF04
-lbl_801DBF44:
-/* 801DBF44 001D7BA4 48 09 28 41 */ bl OSRestoreInterrupts
-/* 801DBF48 001D7BA8 7F E3 FB 78 */ mr r3, r31
-/* 801DBF4C 001D7BAC 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 801DBF50 001D7BB0 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 801DBF54 001D7BB4 7C 08 03 A6 */ mtlr r0
-/* 801DBF58 001D7BB8 38 21 00 10 */ addi r1, r1, 0x10
-/* 801DBF5C 001D7BBC 4E 80 00 20 */ blr
-
-.global func_801DBF60
-func_801DBF60:
-/* 801DBF60 001D7BC0 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 801DBF64 001D7BC4 7C 08 02 A6 */ mflr r0
-/* 801DBF68 001D7BC8 90 01 00 14 */ stw r0, 0x14(r1)
-/* 801DBF6C 001D7BCC 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 801DBF70 001D7BD0 7C 7F 1B 78 */ mr r31, r3
-/* 801DBF74 001D7BD4 48 09 27 E9 */ bl OSDisableInterrupts
-/* 801DBF78 001D7BD8 38 00 00 00 */ li r0, 0
-/* 801DBF7C 001D7BDC 98 1F 00 00 */ stb r0, 0(r31)
-/* 801DBF80 001D7BE0 48 09 28 05 */ bl OSRestoreInterrupts
-/* 801DBF84 001D7BE4 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 801DBF88 001D7BE8 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 801DBF8C 001D7BEC 7C 08 03 A6 */ mtlr r0
-/* 801DBF90 001D7BF0 38 21 00 10 */ addi r1, r1, 0x10
-/* 801DBF94 001D7BF4 4E 80 00 20 */ blr
-
-.global func_801DBF98
-func_801DBF98:
-/* 801DBF98 001D7BF8 80 AD A0 64 */ lwz r5, lbl_8063F324-_SDA_BASE_(r13)
-/* 801DBF9C 001D7BFC 38 C0 00 00 */ li r6, 0
-/* 801DBFA0 001D7C00 80 0D A0 60 */ lwz r0, lbl_8063F320-_SDA_BASE_(r13)
-/* 801DBFA4 001D7C04 7C A4 2B 78 */ mr r4, r5
-/* 801DBFA8 001D7C08 7C 09 03 A6 */ mtctr r0
-/* 801DBFAC 001D7C0C 28 00 00 00 */ cmplwi r0, 0
-/* 801DBFB0 001D7C10 40 81 00 34 */ ble lbl_801DBFE4
-lbl_801DBFB4:
-/* 801DBFB4 001D7C14 88 04 00 00 */ lbz r0, 0(r4)
-/* 801DBFB8 001D7C18 2C 00 00 00 */ cmpwi r0, 0
-/* 801DBFBC 001D7C1C 41 82 00 1C */ beq lbl_801DBFD8
-/* 801DBFC0 001D7C20 38 04 00 04 */ addi r0, r4, 4
-/* 801DBFC4 001D7C24 7C 00 18 40 */ cmplw r0, r3
-/* 801DBFC8 001D7C28 40 82 00 10 */ bne lbl_801DBFD8
-/* 801DBFCC 001D7C2C 1C 06 00 50 */ mulli r0, r6, 0x50
-/* 801DBFD0 001D7C30 7C 65 02 14 */ add r3, r5, r0
-/* 801DBFD4 001D7C34 4E 80 00 20 */ blr
-lbl_801DBFD8:
-/* 801DBFD8 001D7C38 38 84 00 50 */ addi r4, r4, 0x50
-/* 801DBFDC 001D7C3C 38 C6 00 01 */ addi r6, r6, 1
-/* 801DBFE0 001D7C40 42 00 FF D4 */ bdnz lbl_801DBFB4
-lbl_801DBFE4:
-/* 801DBFE4 001D7C44 38 60 00 00 */ li r3, 0
-/* 801DBFE8 001D7C48 4E 80 00 20 */ blr
-lbl_801DBFEC:
-/* 801DBFEC 001D7C4C 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 801DBFF0 001D7C50 7C 08 02 A6 */ mflr r0
-/* 801DBFF4 001D7C54 90 01 00 14 */ stw r0, 0x14(r1)
-/* 801DBFF8 001D7C58 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 801DBFFC 001D7C5C 93 C1 00 08 */ stw r30, 8(r1)
-/* 801DC000 001D7C60 7C 7E 1B 78 */ mr r30, r3
-/* 801DC004 001D7C64 88 0D A0 5F */ lbz r0, lbl_8063F31F-_SDA_BASE_(r13)
-/* 801DC008 001D7C68 2C 00 00 00 */ cmpwi r0, 0
-/* 801DC00C 001D7C6C 40 82 00 44 */ bne lbl_801DC050
-/* 801DC010 001D7C70 7C 83 23 78 */ mr r3, r4
-/* 801DC014 001D7C74 4B FF FF 85 */ bl func_801DBF98
-/* 801DC018 001D7C78 2C 03 00 00 */ cmpwi r3, 0
-/* 801DC01C 001D7C7C 7C 7F 1B 78 */ mr r31, r3
-/* 801DC020 001D7C80 41 82 00 30 */ beq lbl_801DC050
-/* 801DC024 001D7C84 80 03 00 44 */ lwz r0, 0x44(r3)
-/* 801DC028 001D7C88 2C 00 00 00 */ cmpwi r0, 0
-/* 801DC02C 001D7C8C 41 82 00 24 */ beq lbl_801DC050
-/* 801DC030 001D7C90 80 63 00 48 */ lwz r3, 0x48(r3)
-/* 801DC034 001D7C94 80 9F 00 4C */ lwz r4, 0x4c(r31)
-/* 801DC038 001D7C98 48 08 E5 F1 */ bl DCInvalidateRange
-/* 801DC03C 001D7C9C 81 9F 00 44 */ lwz r12, 0x44(r31)
-/* 801DC040 001D7CA0 7F C3 F3 78 */ mr r3, r30
-/* 801DC044 001D7CA4 7F E4 FB 78 */ mr r4, r31
-/* 801DC048 001D7CA8 7D 89 03 A6 */ mtctr r12
-/* 801DC04C 001D7CAC 4E 80 04 21 */ bctrl
-lbl_801DC050:
-/* 801DC050 001D7CB0 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 801DC054 001D7CB4 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 801DC058 001D7CB8 83 C1 00 08 */ lwz r30, 8(r1)
-/* 801DC05C 001D7CBC 7C 08 03 A6 */ mtlr r0
-/* 801DC060 001D7CC0 38 21 00 10 */ addi r1, r1, 0x10
-/* 801DC064 001D7CC4 4E 80 00 20 */ blr
-lbl_801DC068:
-/* 801DC068 001D7CC8 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 801DC06C 001D7CCC 7C 08 02 A6 */ mflr r0
-/* 801DC070 001D7CD0 90 01 00 14 */ stw r0, 0x14(r1)
-/* 801DC074 001D7CD4 93 E1 00 0C */ stw r31, 0xc(r1)
-/* 801DC078 001D7CD8 7C 7F 1B 78 */ mr r31, r3
-/* 801DC07C 001D7CDC 88 0D A0 5F */ lbz r0, lbl_8063F31F-_SDA_BASE_(r13)
-/* 801DC080 001D7CE0 2C 00 00 00 */ cmpwi r0, 0
-/* 801DC084 001D7CE4 40 82 00 30 */ bne lbl_801DC0B4
-/* 801DC088 001D7CE8 7C 83 23 78 */ mr r3, r4
-/* 801DC08C 001D7CEC 4B FF FF 0D */ bl func_801DBF98
-/* 801DC090 001D7CF0 2C 03 00 00 */ cmpwi r3, 0
-/* 801DC094 001D7CF4 7C 64 1B 78 */ mr r4, r3
-/* 801DC098 001D7CF8 41 82 00 1C */ beq lbl_801DC0B4
-/* 801DC09C 001D7CFC 81 83 00 44 */ lwz r12, 0x44(r3)
-/* 801DC0A0 001D7D00 2C 0C 00 00 */ cmpwi r12, 0
-/* 801DC0A4 001D7D04 41 82 00 10 */ beq lbl_801DC0B4
-/* 801DC0A8 001D7D08 7F E3 FB 78 */ mr r3, r31
-/* 801DC0AC 001D7D0C 7D 89 03 A6 */ mtctr r12
-/* 801DC0B0 001D7D10 4E 80 04 21 */ bctrl
-lbl_801DC0B4:
-/* 801DC0B4 001D7D14 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 801DC0B8 001D7D18 83 E1 00 0C */ lwz r31, 0xc(r1)
-/* 801DC0BC 001D7D1C 7C 08 03 A6 */ mtlr r0
-/* 801DC0C0 001D7D20 38 21 00 10 */ addi r1, r1, 0x10
-/* 801DC0C4 001D7D24 4E 80 00 20 */ blr
-
.global func_801DC0C8
func_801DC0C8:
/* 801DC0C8 001D7D28 94 21 FF F0 */ stwu r1, -0x10(r1)
diff --git a/include/SDK/DVD/dvd.h b/include/SDK/DVD/dvd.h
new file mode 100644
index 0000000..16b8623
--- /dev/null
+++ b/include/SDK/DVD/dvd.h
@@ -0,0 +1,14 @@
+#ifndef POKEREVO_DVD_DVD_H
+#define POKEREVO_DVD_DVD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+u32 DVDGetCurrentDiskID(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //POKEREVO_DVD_DVD_H
diff --git a/include/SDK/NAND/NANDCore.h b/include/SDK/NAND/NANDCore.h
new file mode 100644
index 0000000..0f2811f
--- /dev/null
+++ b/include/SDK/NAND/NANDCore.h
@@ -0,0 +1,14 @@
+#ifndef POKEREVO_NANDCORE_H
+#define POKEREVO_NANDCORE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+s32 NANDInit(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //POKEREVO_NANDCORE_H
diff --git a/include/SDK/OS/OSCache.h b/include/SDK/OS/OSCache.h
index a6fb490..75dd2ca 100644
--- a/include/SDK/OS/OSCache.h
+++ b/include/SDK/OS/OSCache.h
@@ -5,6 +5,7 @@
extern "C" {
#endif
+void DCInvalidateRange(void* startAddr, u32 nBytes);
void LCEnable(void);
#define LC_BASE (0xE000 << 16)
#define LCGetBase() ((void*)LC_BASE)
diff --git a/include/SDK/OS/OSInterrupt.h b/include/SDK/OS/OSInterrupt.h
new file mode 100644
index 0000000..9bb3bda
--- /dev/null
+++ b/include/SDK/OS/OSInterrupt.h
@@ -0,0 +1,15 @@
+#ifndef POKEREVO_OSINTERRUPT_H
+#define POKEREVO_OSINTERRUPT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void OSDisableInterrupts(void);
+void OSRestoreInterrupts(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //POKEREVO_OSINTERRUPT_H
diff --git a/include/SDK/dvd.h b/include/SDK/dvd.h
new file mode 100644
index 0000000..1536458
--- /dev/null
+++ b/include/SDK/dvd.h
@@ -0,0 +1,14 @@
+#ifndef POKEREVO_DVD_H
+#define POKEREVO_DVD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "SDK/DVD/dvd.h"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //POKEREVO_DVD_H
diff --git a/include/SDK/nand.h b/include/SDK/nand.h
new file mode 100644
index 0000000..c20ee68
--- /dev/null
+++ b/include/SDK/nand.h
@@ -0,0 +1,14 @@
+#ifndef POKEREVO_NAND_H
+#define POKEREVO_NAND_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "SDK/NAND/NANDCore.h"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //POKEREVO_NAND_H
diff --git a/include/SDK/os.h b/include/SDK/os.h
index 10d4153..0d31901 100644
--- a/include/SDK/os.h
+++ b/include/SDK/os.h
@@ -7,6 +7,7 @@ extern "C" {
#include "SDK/OS/OSAlloc.h"
#include "SDK/OS/OSCache.h"
+#include "SDK/OS/OSInterrupt.h"
#ifdef __cplusplus
}
diff --git a/src/code_801DBE90.cpp b/src/code_801DBE90.cpp
index ba1678c..2f57aae 100644
--- a/src/code_801DBE90.cpp
+++ b/src/code_801DBE90.cpp
@@ -1,17 +1,37 @@
#include "types.h"
#include "ctorStruct.h"
#include "SDK/mem.h"
+#include "SDK/os.h"
+#include "SDK/dvd.h"
+#include "SDK/nand.h"
#include "code_801DAAE0.h"
namespace
{
+ struct unkClass;
+ typedef void (*funcPtr)(u32, unkClass*);
+
+ struct unkClass2
+ {
+ u8 unk0[0x40];
+ funcPtr unk40;
+ void* unk44; //data cache start addr to invalidate
+ u32 unk48; // data cache region size
+ };
+
//TODO: header/source
struct unkClass
{
u8 unk0;
- u8 unk1[0x4F];
+ u8 unk1;
+ u8 unk2[0x2];
+ unkClass2 unk4;
};
+
+
+
+
}
@@ -19,13 +39,16 @@ extern MEMHeapHandle lbl_8063E8EC;
//TODO: internal linkage
-extern u32 lbl_8063F320;
+extern u8 lbl_8063F31E;
+extern u8 lbl_8063F31F;
+extern size_t lbl_8063F320;
extern unkClass* lbl_8063F324;
+extern u32 lbl_8063F338;
+
extern "C"
{
-
// TODO: return type
//static
void* func_801DBE90(u32 size)
@@ -41,12 +64,181 @@ void func_801DBEA0(void)
lbl_8063F324[i].unk0 = 0;
}
+#ifdef NONMATCHING
//static
-func_801DBED0()
+unkClass *func_801DBED0(void)
{
-
+ int new_var;
+ OSDisableInterrupts();
+ unkClass *r31 = 0;
+ size_t i;
+ for (i = 0; i < lbl_8063F320; i++)
+ {
+ if (lbl_8063F324[i].unk0 != 1)
+ {
+ new_var = 1;
+ lbl_8063F324[i].unk0 = new_var;
+ lbl_8063F324[i].unk1 = 0;
+ r31 = &lbl_8063F324[i];
+ break;
+ }
+
+ }
+OSRestoreInterrupts();
+return r31;
+}
+#else
+asm unkClass* func_801DBED0(void)
+{
+nofralloc
+/* 801DBED0 001D7B30 94 21 FF F0 */ stwu r1, -0x10(r1)
+/* 801DBED4 001D7B34 7C 08 02 A6 */ mflr r0
+/* 801DBED8 001D7B38 90 01 00 14 */ stw r0, 0x14(r1)
+/* 801DBEDC 001D7B3C 93 E1 00 0C */ stw r31, 0xc(r1)
+/* 801DBEE0 001D7B40 48 09 28 7D */ bl OSDisableInterrupts
+/* 801DBEE4 001D7B44 80 ED A0 64 */ lwz r7, lbl_8063F324
+/* 801DBEE8 001D7B48 3B E0 00 00 */ li r31, 0
+/* 801DBEEC 001D7B4C 80 0D A0 60 */ lwz r0, lbl_8063F320
+/* 801DBEF0 001D7B50 38 A0 00 00 */ li r5, 0
+/* 801DBEF4 001D7B54 7C E4 3B 78 */ mr r4, r7
+/* 801DBEF8 001D7B58 7C 09 03 A6 */ mtctr r0
+/* 801DBEFC 001D7B5C 28 00 00 00 */ cmplwi r0, 0
+/* 801DBF00 001D7B60 40 81 00 44 */ ble lbl_801DBF44
+lbl_801DBF04:
+/* 801DBF04 001D7B64 88 04 00 00 */ lbz r0, 0(r4)
+/* 801DBF08 001D7B68 28 00 00 01 */ cmplwi r0, 1
+/* 801DBF0C 001D7B6C 41 82 00 2C */ beq lbl_801DBF38
+/* 801DBF10 001D7B70 1C C5 00 50 */ mulli r6, r5, 0x50
+/* 801DBF14 001D7B74 38 00 00 01 */ li r0, 1
+/* 801DBF18 001D7B78 38 A0 00 00 */ li r5, 0
+/* 801DBF1C 001D7B7C 7C 07 31 AE */ stbx r0, r7, r6
+/* 801DBF20 001D7B80 80 0D A0 64 */ lwz r0, lbl_8063F324
+/* 801DBF24 001D7B84 7C 80 32 14 */ add r4, r0, r6
+/* 801DBF28 001D7B88 98 A4 00 01 */ stb r5, 1(r4)
+/* 801DBF2C 001D7B8C 80 0D A0 64 */ lwz r0, lbl_8063F324
+/* 801DBF30 001D7B90 7F E0 32 14 */ add r31, r0, r6
+/* 801DBF34 001D7B94 48 00 00 10 */ b lbl_801DBF44
+lbl_801DBF38:
+/* 801DBF38 001D7B98 38 84 00 50 */ addi r4, r4, 0x50
+/* 801DBF3C 001D7B9C 38 A5 00 01 */ addi r5, r5, 1
+/* 801DBF40 001D7BA0 42 00 FF C4 */ bdnz lbl_801DBF04
+lbl_801DBF44:
+/* 801DBF44 001D7BA4 48 09 28 41 */ bl OSRestoreInterrupts
+/* 801DBF48 001D7BA8 7F E3 FB 78 */ mr r3, r31
+/* 801DBF4C 001D7BAC 83 E1 00 0C */ lwz r31, 0xc(r1)
+/* 801DBF50 001D7BB0 80 01 00 14 */ lwz r0, 0x14(r1)
+/* 801DBF54 001D7BB4 7C 08 03 A6 */ mtlr r0
+/* 801DBF58 001D7BB8 38 21 00 10 */ addi r1, r1, 0x10
+/* 801DBF5C 001D7BBC 4E 80 00 20 */ blr
+}
+#pragma peephole on
+#endif
+
+//static
+void func_801DBF60(unkClass* p1)
+{
+ OSDisableInterrupts();
+ p1->unk0 = 0;
+ OSRestoreInterrupts();
+}
+
+#ifdef NONMATCHING2
+//static
+unkClass* func_801DBF98(unkClass2* p1)
+{
+ unkClass* r4 = lbl_8063F324;
+ size_t i = 0;
+ for (; i < lbl_8063F320; r4++, i++) {
+ if (r4->unk0 != 0 && &r4->unk4 == p1)
+ return &lbl_8063F324[i];
+ }
+ return 0;
+}
+#else
+asm unkClass* func_801DBF98(unkClass2* p1)
+{
+/* 801DBF98 001D7BF8 80 AD A0 64 */ lwz r5, lbl_8063F324
+/* 801DBF9C 001D7BFC 38 C0 00 00 */ li r6, 0
+/* 801DBFA0 001D7C00 80 0D A0 60 */ lwz r0, lbl_8063F320
+/* 801DBFA4 001D7C04 7C A4 2B 78 */ mr r4, r5
+/* 801DBFA8 001D7C08 7C 09 03 A6 */ mtctr r0
+/* 801DBFAC 001D7C0C 28 00 00 00 */ cmplwi r0, 0
+/* 801DBFB0 001D7C10 40 81 00 34 */ ble lbl_801DBFE4
+lbl_801DBFB4:
+/* 801DBFB4 001D7C14 88 04 00 00 */ lbz r0, 0(r4)
+/* 801DBFB8 001D7C18 2C 00 00 00 */ cmpwi r0, 0
+/* 801DBFBC 001D7C1C 41 82 00 1C */ beq lbl_801DBFD8
+/* 801DBFC0 001D7C20 38 04 00 04 */ addi r0, r4, 4
+/* 801DBFC4 001D7C24 7C 00 18 40 */ cmplw r0, r3
+/* 801DBFC8 001D7C28 40 82 00 10 */ bne lbl_801DBFD8
+/* 801DBFCC 001D7C2C 1C 06 00 50 */ mulli r0, r6, 0x50
+/* 801DBFD0 001D7C30 7C 65 02 14 */ add r3, r5, r0
+/* 801DBFD4 001D7C34 4E 80 00 20 */ blr
+lbl_801DBFD8:
+/* 801DBFD8 001D7C38 38 84 00 50 */ addi r4, r4, 0x50
+/* 801DBFDC 001D7C3C 38 C6 00 01 */ addi r6, r6, 1
+/* 801DBFE0 001D7C40 42 00 FF D4 */ bdnz lbl_801DBFB4
+lbl_801DBFE4:
+/* 801DBFE4 001D7C44 38 60 00 00 */ li r3, 0
+/* 801DBFE8 001D7C48 4E 80 00 20 */ blr
+}
+#pragma peephole on
+#endif
+
+//static
+void lbl_801DBFEC(u32 p1, unkClass2* p2)
+{
+ if (lbl_8063F31F == 0) {
+ unkClass* r31 = func_801DBF98(p2);
+ if (r31 && r31->unk4.unk40) {
+ DCInvalidateRange(r31->unk4.unk44, r31->unk4.unk48);
+ r31->unk4.unk40(p1, r31);
+ }
+ }
}
+//static
+void lbl_801DC068(u32 p1, unkClass2* p2)
+{
+ if (lbl_8063F31F == 0) {
+ unkClass* r3 = func_801DBF98(p2);
+ if (r3 && r3->unk4.unk40)
+ r3->unk4.unk40(p1, r3);
+ }
+}
+
+BOOL func_801DC0C8(size_t p1)
+{
+ if (lbl_8063F31E != 1) {
+ lbl_8063F31F = 0;
+ lbl_8063F338 = 0;
+ NANDInit();
+ if (!lbl_8063F338) {
+ // new , 801DCE7C constructor
+ }
+ } else {
+ return FALSE;
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+