From 251f9e2d5e25d1bb93c5bf605b0903fb89564306 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Mon, 25 Sep 2023 01:02:29 -0700 Subject: [PATCH] JKRDecomp, JKRFileFinder (#1943) * JKRDecomp * JKRFileFinder * JKRHeap.h size_t --- .../decodeSZS__9JKRDecompFPUcPUcUlUl.s | 68 ----------------- .../JKRFileFinder/__dt__12JKRDvdFinderFv.s | 36 --------- include/JSystem/JKernel/JKRFileFinder.h | 24 +++--- include/JSystem/JKernel/JKRHeap.h | 14 ++-- libs/JSystem/JKernel/JKRDecomp.cpp | 76 ++++--------------- libs/JSystem/JKernel/JKRFileFinder.cpp | 38 ---------- libs/JSystem/JKernel/Makefile | 1 + 7 files changed, 31 insertions(+), 226 deletions(-) delete mode 100644 asm/JSystem/JKernel/JKRDecomp/decodeSZS__9JKRDecompFPUcPUcUlUl.s delete mode 100644 asm/JSystem/JKernel/JKRFileFinder/__dt__12JKRDvdFinderFv.s diff --git a/asm/JSystem/JKernel/JKRDecomp/decodeSZS__9JKRDecompFPUcPUcUlUl.s b/asm/JSystem/JKernel/JKRDecomp/decodeSZS__9JKRDecompFPUcPUcUlUl.s deleted file mode 100644 index e30a154e4e8..00000000000 --- a/asm/JSystem/JKernel/JKRDecomp/decodeSZS__9JKRDecompFPUcPUcUlUl.s +++ /dev/null @@ -1,68 +0,0 @@ -lbl_802DBC14: -/* 802DBC14 39 20 00 00 */ li r9, 0 -/* 802DBC18 80 03 00 04 */ lwz r0, 4(r3) -/* 802DBC1C 7C 04 02 14 */ add r0, r4, r0 -/* 802DBC20 7C E6 00 50 */ subf r7, r6, r0 -/* 802DBC24 28 05 00 00 */ cmplwi r5, 0 -/* 802DBC28 4D 82 00 20 */ beqlr -/* 802DBC2C 80 03 00 00 */ lwz r0, 0(r3) -/* 802DBC30 7C 06 00 40 */ cmplw r6, r0 -/* 802DBC34 4D 81 00 20 */ bgtlr -/* 802DBC38 39 63 00 10 */ addi r11, r3, 0x10 -lbl_802DBC3C: -/* 802DBC3C 2C 09 00 00 */ cmpwi r9, 0 -/* 802DBC40 40 82 00 10 */ bne lbl_802DBC50 -/* 802DBC44 89 4B 00 00 */ lbz r10, 0(r11) -/* 802DBC48 39 20 00 08 */ li r9, 8 -/* 802DBC4C 39 6B 00 01 */ addi r11, r11, 1 -lbl_802DBC50: -/* 802DBC50 55 40 06 31 */ rlwinm. r0, r10, 0, 0x18, 0x18 -/* 802DBC54 41 82 00 30 */ beq lbl_802DBC84 -/* 802DBC58 28 06 00 00 */ cmplwi r6, 0 -/* 802DBC5C 40 82 00 1C */ bne lbl_802DBC78 -/* 802DBC60 88 0B 00 00 */ lbz r0, 0(r11) -/* 802DBC64 98 04 00 00 */ stb r0, 0(r4) -/* 802DBC68 34 A5 FF FF */ addic. r5, r5, -1 -/* 802DBC6C 38 84 00 01 */ addi r4, r4, 1 -/* 802DBC70 40 82 00 0C */ bne lbl_802DBC7C -/* 802DBC74 4E 80 00 20 */ blr -lbl_802DBC78: -/* 802DBC78 38 C6 FF FF */ addi r6, r6, -1 -lbl_802DBC7C: -/* 802DBC7C 39 6B 00 01 */ addi r11, r11, 1 -/* 802DBC80 48 00 00 64 */ b lbl_802DBCE4 -lbl_802DBC84: -/* 802DBC84 88 0B 00 01 */ lbz r0, 1(r11) -/* 802DBC88 88 6B 00 00 */ lbz r3, 0(r11) -/* 802DBC8C 50 60 45 2E */ rlwimi r0, r3, 8, 0x14, 0x17 -/* 802DBC90 7C 63 26 71 */ srawi. r3, r3, 4 -/* 802DBC94 7D 00 20 50 */ subf r8, r0, r4 -/* 802DBC98 39 6B 00 02 */ addi r11, r11, 2 -/* 802DBC9C 40 82 00 14 */ bne lbl_802DBCB0 -/* 802DBCA0 88 6B 00 00 */ lbz r3, 0(r11) -/* 802DBCA4 38 63 00 12 */ addi r3, r3, 0x12 -/* 802DBCA8 39 6B 00 01 */ addi r11, r11, 1 -/* 802DBCAC 48 00 00 08 */ b lbl_802DBCB4 -lbl_802DBCB0: -/* 802DBCB0 38 63 00 02 */ addi r3, r3, 2 -lbl_802DBCB4: -/* 802DBCB4 28 06 00 00 */ cmplwi r6, 0 -/* 802DBCB8 40 82 00 1C */ bne lbl_802DBCD4 -/* 802DBCBC 88 08 FF FF */ lbz r0, -1(r8) -/* 802DBCC0 98 04 00 00 */ stb r0, 0(r4) -/* 802DBCC4 34 A5 FF FF */ addic. r5, r5, -1 -/* 802DBCC8 38 84 00 01 */ addi r4, r4, 1 -/* 802DBCCC 40 82 00 0C */ bne lbl_802DBCD8 -/* 802DBCD0 4E 80 00 20 */ blr -lbl_802DBCD4: -/* 802DBCD4 38 C6 FF FF */ addi r6, r6, -1 -lbl_802DBCD8: -/* 802DBCD8 34 63 FF FF */ addic. r3, r3, -1 -/* 802DBCDC 39 08 00 01 */ addi r8, r8, 1 -/* 802DBCE0 40 82 FF D4 */ bne lbl_802DBCB4 -lbl_802DBCE4: -/* 802DBCE4 55 4A 08 3C */ slwi r10, r10, 1 -/* 802DBCE8 7C 04 38 40 */ cmplw r4, r7 -/* 802DBCEC 39 29 FF FF */ addi r9, r9, -1 -/* 802DBCF0 40 82 FF 4C */ bne lbl_802DBC3C -/* 802DBCF4 4E 80 00 20 */ blr diff --git a/asm/JSystem/JKernel/JKRFileFinder/__dt__12JKRDvdFinderFv.s b/asm/JSystem/JKernel/JKRFileFinder/__dt__12JKRDvdFinderFv.s deleted file mode 100644 index b6ef074da01..00000000000 --- a/asm/JSystem/JKernel/JKRFileFinder/__dt__12JKRDvdFinderFv.s +++ /dev/null @@ -1,36 +0,0 @@ -lbl_802D47F4: -/* 802D47F4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 802D47F8 7C 08 02 A6 */ mflr r0 -/* 802D47FC 90 01 00 14 */ stw r0, 0x14(r1) -/* 802D4800 93 E1 00 0C */ stw r31, 0xc(r1) -/* 802D4804 93 C1 00 08 */ stw r30, 8(r1) -/* 802D4808 7C 7E 1B 79 */ or. r30, r3, r3 -/* 802D480C 7C 9F 23 78 */ mr r31, r4 -/* 802D4810 41 82 00 48 */ beq lbl_802D4858 -/* 802D4814 3C 60 80 3D */ lis r3, __vt__12JKRDvdFinder@ha /* 0x803CC208@ha */ -/* 802D4818 38 03 C2 08 */ addi r0, r3, __vt__12JKRDvdFinder@l /* 0x803CC208@l */ -/* 802D481C 90 1E 00 0C */ stw r0, 0xc(r30) -/* 802D4820 88 1E 00 20 */ lbz r0, 0x20(r30) -/* 802D4824 28 00 00 00 */ cmplwi r0, 0 -/* 802D4828 41 82 00 0C */ beq lbl_802D4834 -/* 802D482C 38 7E 00 14 */ addi r3, r30, 0x14 -/* 802D4830 48 07 48 B5 */ bl DVDCloseDir -lbl_802D4834: -/* 802D4834 28 1E 00 00 */ cmplwi r30, 0 -/* 802D4838 41 82 00 10 */ beq lbl_802D4848 -/* 802D483C 3C 60 80 3D */ lis r3, __vt__13JKRFileFinder@ha /* 0x803CC228@ha */ -/* 802D4840 38 03 C2 28 */ addi r0, r3, __vt__13JKRFileFinder@l /* 0x803CC228@l */ -/* 802D4844 90 1E 00 0C */ stw r0, 0xc(r30) -lbl_802D4848: -/* 802D4848 7F E0 07 35 */ extsh. r0, r31 -/* 802D484C 40 81 00 0C */ ble lbl_802D4858 -/* 802D4850 7F C3 F3 78 */ mr r3, r30 -/* 802D4854 4B FF A4 E9 */ bl __dl__FPv -lbl_802D4858: -/* 802D4858 7F C3 F3 78 */ mr r3, r30 -/* 802D485C 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 802D4860 83 C1 00 08 */ lwz r30, 8(r1) -/* 802D4864 80 01 00 14 */ lwz r0, 0x14(r1) -/* 802D4868 7C 08 03 A6 */ mtlr r0 -/* 802D486C 38 21 00 10 */ addi r1, r1, 0x10 -/* 802D4870 4E 80 00 20 */ blr diff --git a/include/JSystem/JKernel/JKRFileFinder.h b/include/JSystem/JKernel/JKRFileFinder.h index d417090868d..7a8e8f41f08 100644 --- a/include/JSystem/JKernel/JKRFileFinder.h +++ b/include/JSystem/JKernel/JKRFileFinder.h @@ -3,31 +3,27 @@ #include "dolphin/dvd/dvd.h" -struct JKRFileFinder_UnknownBase { - const char* mEntryName; - s32 mEntryFileIndex; - u16 mEntryId; - u16 mEntryTypeFlags; -}; - -class JKRFileFinder : public JKRFileFinder_UnknownBase { +class JKRFileFinder { public: JKRFileFinder() { mIsAvailable = false; mIsFileOrDirectory = false; } - inline virtual ~JKRFileFinder(); bool isAvailable() const { return mIsAvailable; } bool isFile() const { return mIsFileOrDirectory; } bool isDirectory() const { return mIsFileOrDirectory; } -public: - /* vt[3] */ virtual bool findNextFile(void) = 0; - protected: - /* 0x00 */ // JKRFileFinder_UnknownBase + /* 0x00 */ const char* mEntryName; + /* 0x04 */ s32 mEntryFileIndex; + /* 0x08 */ u16 mEntryId; + /* 0x0A */ u16 mEntryTypeFlags; /* 0x0C */ // vtable +public: + /* vt[2] */ virtual ~JKRFileFinder() {}; + /* vt[3] */ virtual bool findNextFile(void) = 0; +protected: /* 0x10 */ bool mIsAvailable; /* 0x11 */ bool mIsFileOrDirectory; /* 0x12 */ u8 field_0x12[2]; @@ -37,7 +33,7 @@ class JKRArchive; class JKRArcFinder : public JKRFileFinder { public: JKRArcFinder(JKRArchive*, s32, s32); - inline virtual ~JKRArcFinder(); + inline virtual ~JKRArcFinder() {} public: /* vt[3] */ virtual bool findNextFile(void); /* override */ diff --git a/include/JSystem/JKernel/JKRHeap.h b/include/JSystem/JKernel/JKRHeap.h index dcc75cb49f4..c2c455638ea 100644 --- a/include/JSystem/JKernel/JKRHeap.h +++ b/include/JSystem/JKernel/JKRHeap.h @@ -176,18 +176,18 @@ public: static JKRErrorHandler mErrorHandler; }; -void* operator new(u32 size); -void* operator new(u32 size, int alignment); -void* operator new(u32 size, JKRHeap* heap, int alignment); +void* operator new(size_t size); +void* operator new(size_t size, int alignment); +void* operator new(size_t size, JKRHeap* heap, int alignment); -void* operator new[](u32 size); -void* operator new[](u32 size, int alignment); -void* operator new[](u32 size, JKRHeap* heap, int alignment); +void* operator new[](size_t size); +void* operator new[](size_t size, int alignment); +void* operator new[](size_t size, JKRHeap* heap, int alignment); void operator delete(void* ptr); void operator delete[](void* ptr); -inline void* operator new(u32 size, void* ptr) { +inline void* operator new(size_t size, void* ptr) { return ptr; } diff --git a/libs/JSystem/JKernel/JKRDecomp.cpp b/libs/JSystem/JKernel/JKRDecomp.cpp index 3235ce13a8c..ab654c38f34 100644 --- a/libs/JSystem/JKernel/JKRDecomp.cpp +++ b/libs/JSystem/JKernel/JKRDecomp.cpp @@ -5,45 +5,6 @@ #include "JSystem/JKernel/JKRDecomp.h" #include "JSystem/JKernel/JKRAramPiece.h" -#include "dol2asm.h" - -// -// Forward References: -// - -extern "C" void create__9JKRDecompFl(); -extern "C" void __ct__9JKRDecompFl(); -extern "C" void __dt__9JKRDecompFv(); -extern "C" void run__9JKRDecompFv(); -extern "C" void prepareCommand__9JKRDecompFPUcPUcUlUlPFUl_v(); -extern "C" void sendCommand__9JKRDecompFP16JKRDecompCommand(); -extern "C" void orderAsync__9JKRDecompFPUcPUcUlUlPFUl_v(); -extern "C" void sync__9JKRDecompFP16JKRDecompCommandi(); -extern "C" void orderSync__9JKRDecompFPUcPUcUlUl(); -extern "C" void decode__9JKRDecompFPUcPUcUlUl(); -extern "C" void decodeSZP__9JKRDecompFPUcPUcUlUl(); -extern "C" void decodeSZS__9JKRDecompFPUcPUcUlUl(); -extern "C" void checkCompressed__9JKRDecompFPUc(); -extern "C" void __ct__16JKRDecompCommandFv(); -extern "C" void __dt__16JKRDecompCommandFv(); -extern "C" u8 sMessageBuffer__9JKRDecomp[32]; -extern "C" u8 sMessageQueue__9JKRDecomp[32]; -extern "C" u8 sDecompObject__9JKRDecomp[4 + 4 /* padding */]; - -// -// External References: -// - -extern "C" void* __nw__FUlP7JKRHeapi(); -extern "C" void __dl__FPv(); -extern "C" void __ct__9JKRThreadFUlii(); -extern "C" void __dt__9JKRThreadFv(); -extern "C" void sendCommand__12JKRAramPieceFP12JKRAMCommand(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" u8 sSystemHeap__7JKRHeap[4]; // // Declarations: @@ -254,7 +215,6 @@ void JKRDecomp::decodeSZP(u8* src, u8* dst, u32 srcLength, u32 dstLength) { } /* 802DBC14-802DBCF8 2D6554 00E4+00 1/1 0/0 0/0 .text decodeSZS__9JKRDecompFPUcPUcUlUl */ -#ifdef NONMATCHING void JKRDecomp::decodeSZS(u8* src_buffer, u8* dst_buffer, u32 srcSize, u32 dstSize) { u8* decompEnd; u8* copyStart; @@ -264,21 +224,23 @@ void JKRDecomp::decodeSZS(u8* src_buffer, u8* dst_buffer, u32 srcSize, u32 dstSi decompEnd = dst_buffer + *(int*)(src_buffer + 4) - dstSize; - if (srcSize == 0) + if (srcSize == 0) { return; - if (dstSize > *(u32*)src_buffer) + } + if (dstSize > *(u32*)src_buffer) { return; + } u8* curSrcPos = src_buffer + 0x10; do { if (chunkBitsLeft == 0) { - chunkBits = *curSrcPos; + chunkBits = curSrcPos[0]; chunkBitsLeft = 8; curSrcPos++; } if ((chunkBits & 0x80) != 0) { if (dstSize == 0) { - *dst_buffer = *curSrcPos; + dst_buffer[0] = curSrcPos[0]; srcSize--; dst_buffer++; if (srcSize == 0) @@ -288,21 +250,19 @@ void JKRDecomp::decodeSZS(u8* src_buffer, u8* dst_buffer, u32 srcSize, u32 dstSi } curSrcPos++; } else { - u8 curVal = *curSrcPos; - // load is inversed - copyStart = dst_buffer - ((curVal & 0xF) << 8 | curSrcPos[1]); - // copyByteCount = ; + u32 local_28 = curSrcPos[1] | (curSrcPos[0] & 0xF) << 8; + u32 r31 = curSrcPos[0] >> 4; curSrcPos += 2; - // instruction order differences - if (curVal >> 4 == 0) { - copyByteCount = *curSrcPos + 0x12; + copyStart = dst_buffer - local_28; + if (r31 == 0) { + copyByteCount = curSrcPos[0] + 0x12; curSrcPos++; } else { - copyByteCount = (curVal >> 4) + 2; + copyByteCount = r31 + 2; } do { if (dstSize == 0) { - *dst_buffer = *(copyStart - 1); + dst_buffer[0] = copyStart[-1]; srcSize--; dst_buffer++; if (srcSize == 0) @@ -318,16 +278,6 @@ void JKRDecomp::decodeSZS(u8* src_buffer, u8* dst_buffer, u32 srcSize, u32 dstSi chunkBitsLeft--; } while (dst_buffer != decompEnd); } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JKRDecomp::decodeSZS(u8* param_0, u8* param_1, u32 param_2, u32 param_3) { - nofralloc -#include "asm/JSystem/JKernel/JKRDecomp/decodeSZS__9JKRDecompFPUcPUcUlUl.s" -} -#pragma pop -#endif /* 802DBCF8-802DBD70 2D6638 0078+00 1/1 4/4 0/0 .text checkCompressed__9JKRDecompFPUc */ JKRCompression JKRDecomp::checkCompressed(u8* src) { diff --git a/libs/JSystem/JKernel/JKRFileFinder.cpp b/libs/JSystem/JKernel/JKRFileFinder.cpp index 264eb28f198..354bdc4aefa 100644 --- a/libs/JSystem/JKernel/JKRFileFinder.cpp +++ b/libs/JSystem/JKernel/JKRFileFinder.cpp @@ -6,27 +6,6 @@ #include "JSystem/JKernel/JKRFileFinder.h" #include "JSystem/JKernel/JKRArchive.h" -// -// Forward References: -// - -extern "C" void __ct__12JKRArcFinderFP10JKRArchivell(); -extern "C" void findNextFile__12JKRArcFinderFv(); -extern "C" void __ct__12JKRDvdFinderFPCc(); -extern "C" void __dt__12JKRDvdFinderFv(); -extern "C" void findNextFile__12JKRDvdFinderFv(); -extern "C" void __dt__13JKRFileFinderFv(); -extern "C" void __dt__12JKRArcFinderFv(); -extern "C" void* __vt__12JKRDvdFinder; -extern "C" void* __vt__13JKRFileFinder; - -// -// External References: -// - -extern "C" void __dl__FPv(); -extern "C" void getDirEntry__10JKRArchiveCFPQ210JKRArchive9SDirEntryUl(); - // // Declarations: // @@ -68,23 +47,11 @@ JKRDvdFinder::JKRDvdFinder(const char* directory) : JKRFileFinder() { } /* 802D47F4-802D4874 2CF134 0080+00 1/0 0/0 0/0 .text __dt__12JKRDvdFinderFv */ -// JKRFileFinder::~JKRFileFinder is not inlined -#ifdef NONMATCHING JKRDvdFinder::~JKRDvdFinder() { if (mDvdIsOpen) { DVDCloseDir(&mDvdDirectory); } } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JKRDvdFinder::~JKRDvdFinder() { - nofralloc -#include "asm/JSystem/JKernel/JKRFileFinder/__dt__12JKRDvdFinderFv.s" -} -#pragma pop -#endif /* 802D4874-802D4910 2CF1B4 009C+00 1/0 0/0 0/0 .text findNextFile__12JKRDvdFinderFv */ bool JKRDvdFinder::findNextFile(void) { @@ -110,8 +77,3 @@ bool JKRDvdFinder::findNextFile(void) { return mIsAvailable; } - -inline JKRFileFinder::~JKRFileFinder() {} - -/* 802D4958-802D49B4 2CF298 005C+00 1/0 0/0 0/0 .text __dt__12JKRArcFinderFv */ -inline JKRArcFinder::~JKRArcFinder() {} diff --git a/libs/JSystem/JKernel/Makefile b/libs/JSystem/JKernel/Makefile index d8a9906a084..b181bc65dee 100644 --- a/libs/JSystem/JKernel/Makefile +++ b/libs/JSystem/JKernel/Makefile @@ -57,6 +57,7 @@ LIBJKERNEL_A_O_FILES := \ $(BUILD_DIR)/libs/JSystem/JKernel/JKRDecomp.o \ LIBJKERNEL_A_CFLAGS := \ + -sym on \ LIBJKERNEL_A_LDFLAGS := \ -nodefaults \