From 8f73a39edf782bd2e6c91130aac685b8dd267001 Mon Sep 17 00:00:00 2001 From: Max Date: Sat, 24 Oct 2020 15:07:58 -0400 Subject: match up to func_801DC0C8 with two nonmatchings --- asm/code_801DBE90_asm.s | 145 ------------------------------- include/SDK/DVD/dvd.h | 14 +++ include/SDK/NAND/NANDCore.h | 14 +++ include/SDK/OS/OSCache.h | 1 + include/SDK/OS/OSInterrupt.h | 15 ++++ include/SDK/dvd.h | 14 +++ include/SDK/nand.h | 14 +++ include/SDK/os.h | 1 + src/code_801DBE90.cpp | 202 +++++++++++++++++++++++++++++++++++++++++-- 9 files changed, 270 insertions(+), 150 deletions(-) create mode 100644 include/SDK/DVD/dvd.h create mode 100644 include/SDK/NAND/NANDCore.h create mode 100644 include/SDK/OS/OSInterrupt.h create mode 100644 include/SDK/dvd.h create mode 100644 include/SDK/nand.h 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; + } +} + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3