mirror of https://github.com/zeldaret/tp.git
JKRDecomp, JKRFileFinder (#1943)
* JKRDecomp * JKRFileFinder * JKRHeap.h size_t
This commit is contained in:
parent
3e46ad6b30
commit
251f9e2d5e
|
@ -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
|
|
@ -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
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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() {}
|
||||
|
|
|
@ -57,6 +57,7 @@ LIBJKERNEL_A_O_FILES := \
|
|||
$(BUILD_DIR)/libs/JSystem/JKernel/JKRDecomp.o \
|
||||
|
||||
LIBJKERNEL_A_CFLAGS := \
|
||||
-sym on \
|
||||
|
||||
LIBJKERNEL_A_LDFLAGS := \
|
||||
-nodefaults \
|
||||
|
|
Loading…
Reference in New Issue