JKRMemArchive (#66)

* JKRArchivePri OK

* JKRArchivePub OK

* formatting

* removed unused asm files and tried to fixed setExpandSize and getExpandSize

* JKRMemArchive and created JKRCompression

Co-authored-by: Julgodis <>
This commit is contained in:
Jonathan Wase
2021-01-05 17:34:58 +01:00
committed by GitHub
parent 65dbd7e088
commit d89fb99506
33 changed files with 342 additions and 119 deletions
+1 -1
View File
@@ -571,7 +571,7 @@ lbl_80262948:
/* 80262988 0025F8C8 39 00 00 01 */ li r8, 1
/* 8026298C 0025F8CC 39 20 00 00 */ li r9, 0
/* 80262990 0025F8D0 39 40 00 00 */ li r10, 0
/* 80262994 0025F8D4 48 07 72 05 */ bl loadToMainRAM__12JKRDvdRipperFPCcPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 80262994 0025F8D4 48 07 72 05 */ bl loadToMainRAM__12JKRDvdRipperFPCcPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 80262998 0025F8D8 90 7C 00 10 */ stw r3, 0x10(r28)
/* 8026299C 0025F8DC 80 1C 00 10 */ lwz r0, 0x10(r28)
/* 802629A0 0025F8E0 28 00 00 00 */ cmplwi r0, 0
+1 -1
View File
@@ -963,7 +963,7 @@ lbl_800164EC:
lbl_8001651C:
/* 8001651C 0001345C 39 20 00 00 */ li r9, 0
/* 80016520 00013460 39 40 00 00 */ li r10, 0
/* 80016524 00013464 48 2C 37 31 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 80016524 00013464 48 2C 37 31 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 80016528 00013468 90 7E 00 1C */ stw r3, 0x1c(r30)
/* 8001652C 0001346C 80 9E 00 1C */ lwz r4, 0x1c(r30)
/* 80016530 00013470 28 04 00 00 */ cmplwi r4, 0
@@ -13,7 +13,7 @@ public:
void getAramAddress_Entry(SDIFileEntry*);
void getAramAddress(char const*);
/* vt[15] */ void getExpandedResSize(void const*) const; /* override */
/* vt[15] */ u32 getExpandedResSize(const void*) const; /* override */
/* vt[16] */ void* fetchResource(SDIFileEntry*, u32*); /* override */
/* vt[17] */ void* fetchResource(void*, u32, SDIFileEntry*, u32*); /* override */
@@ -57,7 +57,7 @@ lbl_802D7354:
/* 802D7370 002D42B0 39 00 00 01 */ li r8, 1
/* 802D7374 002D42B4 39 20 00 00 */ li r9, 0
/* 802D7378 002D42B8 39 5F 00 5C */ addi r10, r31, 0x5c
/* 802D737C 002D42BC 48 00 28 D9 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D737C 002D42BC 48 00 28 D9 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D7380 002D42C0 7F A3 EB 78 */ mr r3, r29
/* 802D7384 002D42C4 38 80 00 20 */ li r4, 0x20
/* 802D7388 002D42C8 48 06 41 F9 */ bl DCInvalidateRange
@@ -91,7 +91,7 @@ lbl_802D73D8:
/* 802D73F0 002D4330 39 00 00 01 */ li r8, 1
/* 802D73F4 002D4334 39 20 00 20 */ li r9, 0x20
/* 802D73F8 002D4338 39 40 00 00 */ li r10, 0
/* 802D73FC 002D433C 48 00 28 59 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D73FC 002D433C 48 00 28 59 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D7400 002D4340 80 7F 00 44 */ lwz r3, 0x44(r31)
/* 802D7404 002D4344 7F 64 DB 78 */ mr r4, r27
/* 802D7408 002D4348 48 06 41 79 */ bl DCInvalidateRange
@@ -1,16 +1,28 @@
#ifndef __JKRARCHIVEPUB_H__
#define __JKRARCHIVEPUB_H__
#include "JSystem/JKernel/JKRDecomp/JKRDecomp.h"
#include "JSystem/JKernel/JKRFileLoader/JKRFileLoader.h"
#include "dolphin/types.h"
struct SArcHeader {
u32 signature;
u32 file_length;
u32 header_length;
u32 file_data_offset;
u32 file_data_length;
u32 field_0x14;
u32 field_0x18;
u32 field_0x1c;
};
struct SArcDataInfo {
u32 num_nodes;
u32 node_offset;
u32 num_file_entries;
u32 file_entry_offset;
u32 string_table_length;
u32 string_trable_offset;
u32 string_table_offset;
u16 next_free_file_id;
bool sync_file_ids_and_indices;
u8 field_1b[5];
@@ -44,8 +56,10 @@ struct SDIFileEntry {
u16 getNameHash() const { return name_hash; }
u32 getFlags() const { return type_flags_and_name_offset >> 24; }
u16 getFileID() const { return file_id; }
bool isDirectory() const { return (getFlags() & 2) != 0; }
bool isUnknownFlag1() const { return (getFlags() & 1) != 0; }
bool isDirectory() const { return (getFlags() & 0x02) != 0; }
bool isUnknownFlag1() const { return (getFlags() & 0x01) != 0; }
bool isCompressed() const { return (getFlags() & 0x04) != 0; }
bool isYAZ0Compressed() const { return (getFlags() & 0x80) != 0; }
};
extern u32 lbl_80451420; // JKRArchive::sCurrentDirID
@@ -131,13 +145,13 @@ public:
/* vt[12] */ virtual u32 getResSize(const void*) const; /* override */
/* vt[13] */ virtual u32 countFile(const char*) const; /* override */
/* vt[14] */ virtual JKRArcFinder* getFirstFile(const char*) const; /* override */
/* vt[15] */ virtual void getExpandedResSize(const void*) const;
/* vt[15] */ virtual u32 getExpandedResSize(const void*) const;
/* vt[16] */ virtual void* fetchResource(SDIFileEntry*, u32*) = 0;
/* vt[17] */ virtual void* fetchResource(void*, u32, SDIFileEntry*, u32*) = 0;
/* vt[18] */ virtual void setExpandSize(SDIFileEntry*, u32);
/* vt[19] */ virtual void getExpandSize(SDIFileEntry*) const;
/* vt[19] */ virtual u32 getExpandSize(SDIFileEntry*) const;
private:
protected:
/* 0x00 */ // vtable
/* 0x04 */ // JKRFileLoader
/* 0x38 */ JKRHeap* mHeap;
@@ -14,7 +14,7 @@ public:
/* vt[09] */ void removeResourceAll(void); /* override */
/* vt[10] */ bool removeResource(void*); /* override */
/* vt[15] */ void getExpandedResSize(void const*) const; /* override */
/* vt[15] */ u32 getExpandedResSize(const void*) const; /* override */
/* vt[16] */ void* fetchResource(SDIFileEntry*, u32*); /* override */
/* vt[17] */ void* fetchResource(void*, u32, SDIFileEntry*, u32*); /* override */
@@ -57,7 +57,7 @@ lbl_802D8A6C:
/* 802D8A88 002D59C8 39 00 00 01 */ li r8, 1
/* 802D8A8C 002D59CC 39 20 00 00 */ li r9, 0
/* 802D8A90 002D59D0 39 5F 00 5C */ addi r10, r31, 0x5c
/* 802D8A94 002D59D4 48 00 11 C1 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D8A94 002D59D4 48 00 11 C1 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8A98 002D59D8 7F C3 F3 78 */ mr r3, r30
/* 802D8A9C 002D59DC 38 80 00 20 */ li r4, 0x20
/* 802D8AA0 002D59E0 48 06 2A E1 */ bl DCInvalidateRange
@@ -107,7 +107,7 @@ lbl_802D8B20:
/* 802D8B40 002D5A80 39 00 00 01 */ li r8, 1
/* 802D8B44 002D5A84 39 20 00 20 */ li r9, 0x20
/* 802D8B48 002D5A88 39 40 00 00 */ li r10, 0
/* 802D8B4C 002D5A8C 48 00 11 09 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D8B4C 002D5A8C 48 00 11 09 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8B50 002D5A90 80 7F 00 44 */ lwz r3, 0x44(r31)
/* 802D8B54 002D5A94 80 9E 00 0C */ lwz r4, 0xc(r30)
/* 802D8B58 002D5A98 80 1F 00 74 */ lwz r0, 0x74(r31)
@@ -196,7 +196,7 @@ lbl_802D8C74:
/* 802D8C90 002D5BD0 39 00 00 01 */ li r8, 1
/* 802D8C94 002D5BD4 39 20 00 00 */ li r9, 0
/* 802D8C98 002D5BD8 39 40 00 00 */ li r10, 0
/* 802D8C9C 002D5BDC 48 00 0F B9 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D8C9C 002D5BDC 48 00 0F B9 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8CA0 002D5BE0 7F 63 DB 78 */ mr r3, r27
/* 802D8CA4 002D5BE4 7F 24 CB 78 */ mr r4, r25
/* 802D8CA8 002D5BE8 48 06 28 D9 */ bl DCInvalidateRange
@@ -63,7 +63,7 @@ lbl_802D9180:
/* 802D9198 002D60D8 7F 85 E3 78 */ mr r5, r28
/* 802D919C 002D60DC 57 A6 00 34 */ rlwinm r6, r29, 0, 0, 0x1a
/* 802D91A0 002D60E0 7D 07 43 78 */ mr r7, r8
/* 802D91A4 002D60E4 4B FF DD B9 */ bl fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUli
/* 802D91A4 002D60E4 4B FF DD B9 */ bl fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUl14JKRCompression
/* 802D91A8 002D60E8 7C 7B 1B 78 */ mr r27, r3
/* 802D91AC 002D60EC 48 00 00 8C */ b lbl_802D9238
lbl_802D91B0:
@@ -81,7 +81,7 @@ lbl_802D9458:
/* 802D9484 002D63C4 80 1F 00 08 */ lwz r0, 8(r31)
/* 802D9488 002D63C8 7D 29 02 14 */ add r9, r9, r0
/* 802D948C 002D63CC 39 40 00 00 */ li r10, 0
/* 802D9490 002D63D0 48 00 07 C5 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D9490 002D63D0 48 00 07 C5 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D9494 002D63D4 7F A3 EB 78 */ mr r3, r29
/* 802D9498 002D63D8 38 80 00 20 */ li r4, 0x20
/* 802D949C 002D63DC 48 06 20 E5 */ bl DCInvalidateRange
+25 -11
View File
@@ -30,6 +30,22 @@ public:
#define JKRDECOMP_SYNC_BLOCKING 0
#define JKRDECOMP_SYNC_NON_BLOCKING 1
#define READ_BIG_ENDIAN_U32(P) \
(((u32)(((u8*)(P))[0]) << 0x18) | ((u32)(((u8*)(P))[1]) << 0x10) | \
((u32)(((u8*)(P))[2]) << 8) | ((u32)(((u8*)(P))[3])))
#define READ_BIG_ENDIAN_U16(P) (((u32)(((u8*)(P))[0]) << 8) | ((u32)(((u8*)(P))[1])))
enum JKRCompression {
COMPRESSION_NONE = 0,
COMPRESSION_YAY0 = 1,
COMPRESSION_YAZ0 = 2,
COMPRESSION_ASR = 3,
__COMPRESSION_ENUM_FORCE_S32 = INT32_MAX,
__COMPRESSION_ENUM_FORCE_SIGNED = -1,
};
class JKRDecomp : public JKRThread {
private:
JKRDecomp(long);
@@ -38,16 +54,6 @@ private:
/* vt[03] */ virtual void* run(); /* override */
public:
enum Compression {
NONE = 0,
YAY0 = 1,
YAZ0 = 2,
ASR = 3,
__COMPRESSION_ENUM_FORCE_S32 = INT32_MAX,
__COMPRESSION_ENUM_FORCE_SIGNED = -1,
};
static JKRDecomp* create(long);
static JKRDecompCommand* prepareCommand(u8*, u8*, u32, u32, JKRDecompCommand::AsyncCallback);
static void sendCommand(JKRDecompCommand*);
@@ -57,7 +63,15 @@ public:
static void decode(u8*, u8*, u32, u32);
static void decodeSZP(u8*, u8*, u32, u32);
static void decodeSZS(u8*, u8*, u32, u32);
static Compression checkCompressed(u8*);
static JKRCompression checkCompressed(u8*);
};
inline u32 JKRDecompExpandSize(const void* resource) {
return READ_BIG_ENDIAN_U32((u8*)resource + 4);
}
inline void JKRDecompress(u8* srcBuffer, u8* dstBuffer, u32 srcLength, u32 dstLength) {
JKRDecomp::orderSync(srcBuffer, dstBuffer, srcLength, dstLength);
}
#endif
@@ -11,7 +11,7 @@ public:
void open(long);
/* vt[15] */ virtual void getExpandedResSize(void const*) const; /* override */
/* vt[15] */ virtual u32 getExpandedResSize(const void*) const; /* override */
/* vt[16] */ virtual void* fetchResource(SDIFileEntry*, u32*); /* override */
/* vt[17] */ virtual void* fetchResource(void*, u32, SDIFileEntry*, u32*); /* override */
@@ -52,7 +52,7 @@ lbl_802D7E50:
/* 802D7E6C 002D4DAC 39 00 00 01 */ li r8, 1
/* 802D7E70 002D4DB0 39 20 00 00 */ li r9, 0
/* 802D7E74 002D4DB4 39 5D 00 5C */ addi r10, r29, 0x5c
/* 802D7E78 002D4DB8 48 00 1D DD */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D7E78 002D4DB8 48 00 1D DD */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D7E7C 002D4DBC 7F C3 F3 78 */ mr r3, r30
/* 802D7E80 002D4DC0 38 80 00 20 */ li r4, 0x20
/* 802D7E84 002D4DC4 48 06 36 FD */ bl DCInvalidateRange
@@ -83,7 +83,7 @@ lbl_802D7EC8:
/* 802D7EE0 002D4E20 39 00 00 01 */ li r8, 1
/* 802D7EE4 002D4E24 39 20 00 20 */ li r9, 0x20
/* 802D7EE8 002D4E28 39 40 00 00 */ li r10, 0
/* 802D7EEC 002D4E2C 48 00 1D 69 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D7EEC 002D4E2C 48 00 1D 69 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D7EF0 002D4E30 80 7D 00 44 */ lwz r3, 0x44(r29)
/* 802D7EF4 002D4E34 80 9E 00 0C */ lwz r4, 0xc(r30)
/* 802D7EF8 002D4E38 48 06 36 89 */ bl DCInvalidateRange
@@ -44,7 +44,7 @@ lbl_802D82E4:
/* 802D8300 002D5240 39 00 00 01 */ li r8, 1
/* 802D8304 002D5244 7F C9 F3 78 */ mr r9, r30
/* 802D8308 002D5248 39 40 00 00 */ li r10, 0
/* 802D830C 002D524C 48 00 19 49 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D830C 002D524C 48 00 19 49 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8310 002D5250 7F E3 FB 78 */ mr r3, r31
/* 802D8314 002D5254 7F 84 E3 78 */ mr r4, r28
/* 802D8318 002D5258 48 06 32 69 */ bl DCInvalidateRange
@@ -62,7 +62,7 @@ lbl_802D8324:
/* 802D8344 002D5284 39 00 00 01 */ li r8, 1
/* 802D8348 002D5288 7F C9 F3 78 */ mr r9, r30
/* 802D834C 002D528C 39 40 00 00 */ li r10, 0
/* 802D8350 002D5290 48 00 19 05 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D8350 002D5290 48 00 19 05 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8354 002D5294 7F 83 E3 78 */ mr r3, r28
/* 802D8358 002D5298 38 80 00 20 */ li r4, 0x20
/* 802D835C 002D529C 48 06 32 25 */ bl DCInvalidateRange
@@ -90,7 +90,7 @@ lbl_802D8394:
/* 802D83B0 002D52F0 39 00 00 01 */ li r8, 1
/* 802D83B4 002D52F4 7F C9 F3 78 */ mr r9, r30
/* 802D83B8 002D52F8 39 40 00 00 */ li r10, 0
/* 802D83BC 002D52FC 48 00 18 99 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D83BC 002D52FC 48 00 18 99 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D83C0 002D5300 7F E3 FB 78 */ mr r3, r31
/* 802D83C4 002D5304 7F 44 D3 78 */ mr r4, r26
/* 802D83C8 002D5308 48 06 31 B9 */ bl DCInvalidateRange
@@ -111,7 +111,7 @@ lbl_802D83E0:
/* 802D83FC 002D533C 39 00 00 01 */ li r8, 1
/* 802D8400 002D5340 7F C9 F3 78 */ mr r9, r30
/* 802D8404 002D5344 39 40 00 00 */ li r10, 0
/* 802D8408 002D5348 48 00 18 4D */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D8408 002D5348 48 00 18 4D */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D840C 002D534C 7F E3 FB 78 */ mr r3, r31
/* 802D8410 002D5350 7F 44 D3 78 */ mr r4, r26
/* 802D8414 002D5354 48 06 31 6D */ bl DCInvalidateRange
@@ -45,7 +45,7 @@ lbl_802D84E0:
/* 802D8510 002D5450 39 00 00 01 */ li r8, 1
/* 802D8514 002D5454 7F C9 F3 78 */ mr r9, r30
/* 802D8518 002D5458 39 40 00 00 */ li r10, 0
/* 802D851C 002D545C 48 00 17 39 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D851C 002D545C 48 00 17 39 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8520 002D5460 7F 83 E3 78 */ mr r3, r28
/* 802D8524 002D5464 7F 64 DB 78 */ mr r4, r27
/* 802D8528 002D5468 48 06 30 59 */ bl DCInvalidateRange
@@ -64,7 +64,7 @@ lbl_802D8538:
/* 802D8558 002D5498 39 00 00 01 */ li r8, 1
/* 802D855C 002D549C 7F C9 F3 78 */ mr r9, r30
/* 802D8560 002D54A0 39 40 00 00 */ li r10, 0
/* 802D8564 002D54A4 48 00 16 F1 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D8564 002D54A4 48 00 16 F1 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8568 002D54A8 7F 63 DB 78 */ mr r3, r27
/* 802D856C 002D54AC 38 80 00 20 */ li r4, 0x20
/* 802D8570 002D54B0 48 06 30 11 */ bl DCInvalidateRange
@@ -91,7 +91,7 @@ lbl_802D8538:
/* 802D85C4 002D5504 39 00 00 01 */ li r8, 1
/* 802D85C8 002D5508 7F C9 F3 78 */ mr r9, r30
/* 802D85CC 002D550C 39 40 00 00 */ li r10, 0
/* 802D85D0 002D5510 48 00 16 85 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D85D0 002D5510 48 00 16 85 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D85D4 002D5514 7F 63 DB 78 */ mr r3, r27
/* 802D85D8 002D5518 7F 84 E3 78 */ mr r4, r28
/* 802D85DC 002D551C 48 06 2F A5 */ bl DCInvalidateRange
@@ -114,7 +114,7 @@ lbl_802D85EC:
/* 802D861C 002D555C 39 00 00 01 */ li r8, 1
/* 802D8620 002D5560 7F C9 F3 78 */ mr r9, r30
/* 802D8624 002D5564 39 40 00 00 */ li r10, 0
/* 802D8628 002D5568 48 00 16 2D */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D8628 002D5568 48 00 16 2D */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D862C 002D556C 7F 83 E3 78 */ mr r3, r28
/* 802D8630 002D5570 7F 24 CB 78 */ mr r4, r25
/* 802D8634 002D5574 48 06 2F 4D */ bl DCInvalidateRange
@@ -57,7 +57,7 @@ lbl_802D8734:
/* 802D8760 002D56A0 80 1D 00 08 */ lwz r0, 8(r29)
/* 802D8764 002D56A4 7D 29 02 14 */ add r9, r9, r0
/* 802D8768 002D56A8 39 40 00 00 */ li r10, 0
/* 802D876C 002D56AC 48 00 14 E9 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D876C 002D56AC 48 00 14 E9 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D8770 002D56B0 7F C3 F3 78 */ mr r3, r30
/* 802D8774 002D56B4 38 80 00 20 */ li r4, 0x20
/* 802D8778 002D56B8 48 06 2E 09 */ bl DCInvalidateRange
@@ -1,10 +1,14 @@
#ifndef __JKRDVDRIPPER_H__
#define __JKRDVDRIPPER_H__
#include "JSystem/JKernel/JKRDecomp/JKRDecomp.h"
#include "dolphin/types.h"
enum JKRExpandSwitch {
EXPAND_SWITCH_UNKNOWN0 = 0,
EXPAND_SWITCH_UNKNOWN1 = 1,
EXPAND_SWITCH_UNKNOWN2 = 2,
__FORCE_EXPAND_SWITCH_32BIT = UINT32_MAX,
};
class JKRHeap;
@@ -12,14 +16,19 @@ class JKRDvdFile;
class JKRDvdRipper {
public:
enum EAllocDirection {
UNKNOWN_EALLOC_DIRECTION = 0,
FORWARD = 1,
BACKWARD = 2,
__FORCE_EALLOC_DIRECTION_32BIT = UINT32_MAX,
};
void loadToMainRAM(char const*, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, u32, int*,
u32*);
void loadToMainRAM(long, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, u32, int*, u32*);
void loadToMainRAM(JKRDvdFile*, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, u32, int*,
u32*);
static void* loadToMainRAM(char const*, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection,
u32, JKRCompression*, u32*);
static void* loadToMainRAM(long, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection, u32,
JKRCompression*, u32*);
static void* loadToMainRAM(JKRDvdFile*, u8*, JKRExpandSwitch, u32, JKRHeap*, EAllocDirection,
u32, JKRCompression*, u32*);
void isErrorRetry(void);
};
@@ -1,4 +1,4 @@
/* loadToMainRAM__12JKRDvdRipperFPCcPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl JKRDvdRipper::loadToMainRAM(char const *, unsigned char *, JKRExpandSwitch, unsigned long, JKRHeap *, JKRDvdRipper::EAllocDirection, unsigned long, int *, unsigned long *) */
/* loadToMainRAM__12JKRDvdRipperFPCcPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl JKRDvdRipper::loadToMainRAM(char const *, unsigned char *, JKRExpandSwitch, unsigned long, JKRHeap *, JKRDvdRipper::EAllocDirection, unsigned long, int *, unsigned long *) */
/* JKRDvdRipper_NS_loadToMainRAM */
/* 802D9B98 002D6AD8 94 21 FE D0 */ stwu r1, -0x130(r1)
/* 802D9B9C 002D6ADC 7C 08 02 A6 */ mflr r0
@@ -36,7 +36,7 @@ lbl_802D9C00:
/* 802D9C18 002D6B58 7F 88 E3 78 */ mr r8, r28
/* 802D9C1C 002D6B5C 7F A9 EB 78 */ mr r9, r29
/* 802D9C20 002D6B60 7F CA F3 78 */ mr r10, r30
/* 802D9C24 002D6B64 48 00 00 ED */ bl loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D9C24 002D6B64 48 00 00 ED */ bl loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D9C28 002D6B68 7C 7F 1B 78 */ mr r31, r3
/* 802D9C2C 002D6B6C 38 61 00 10 */ addi r3, r1, 0x10
/* 802D9C30 002D6B70 38 80 FF FF */ li r4, -1
@@ -1,4 +1,4 @@
/* loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl JKRDvdRipper::loadToMainRAM(long, unsigned char *, JKRExpandSwitch, unsigned long, JKRHeap *, JKRDvdRipper::EAllocDirection, unsigned long, int *, unsigned long *) */
/* loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl JKRDvdRipper::loadToMainRAM(long, unsigned char *, JKRExpandSwitch, unsigned long, JKRHeap *, JKRDvdRipper::EAllocDirection, unsigned long, int *, unsigned long *) */
/* JKRDvdRipper_NS_loadToMainRAM_X1_ */
/* 802D9C54 002D6B94 94 21 FE D0 */ stwu r1, -0x130(r1)
/* 802D9C58 002D6B98 7C 08 02 A6 */ mflr r0
@@ -36,7 +36,7 @@ lbl_802D9CBC:
/* 802D9CD4 002D6C14 7F 88 E3 78 */ mr r8, r28
/* 802D9CD8 002D6C18 7F A9 EB 78 */ mr r9, r29
/* 802D9CDC 002D6C1C 7F CA F3 78 */ mr r10, r30
/* 802D9CE0 002D6C20 48 00 00 31 */ bl loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D9CE0 002D6C20 48 00 00 31 */ bl loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D9CE4 002D6C24 7C 7F 1B 78 */ mr r31, r3
/* 802D9CE8 002D6C28 38 61 00 10 */ addi r3, r1, 0x10
/* 802D9CEC 002D6C2C 38 80 FF FF */ li r4, -1
@@ -1,4 +1,4 @@
/* loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl JKRDvdRipper::loadToMainRAM(JKRDvdFile *, unsigned char *, JKRExpandSwitch, unsigned long, JKRHeap *, JKRDvdRipper::EAllocDirection, unsigned long, int *, unsigned long *) */
/* loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl JKRDvdRipper::loadToMainRAM(JKRDvdFile *, unsigned char *, JKRExpandSwitch, unsigned long, JKRHeap *, JKRDvdRipper::EAllocDirection, unsigned long, int *, unsigned long *) */
/* JKRDvdRipper_NS_loadToMainRAM_X2_ */
/* 802D9D10 002D6C50 94 21 FF 40 */ stwu r1, -0xc0(r1)
/* 802D9D14 002D6C54 7C 08 02 A6 */ mflr r0
@@ -36,7 +36,7 @@ protected:
/* 0x00 */ // vtable
/* 0x04 */ // JKRDisposer
/* 0x18 */ JSULink<JKRFileLoader> mFileLoaderLink;
/* 0x28 */ char* mVolumeName;
/* 0x28 */ const char* mVolumeName;
/* 0x2C */ u32 mVolumeType;
/* 0x30 */ bool mIsMounted;
/* 0x31 */ u8 field_0x31[3];
@@ -6,6 +6,7 @@
enum JKRMemBreakFlag {
JKRMEMBREAK_FLAG_UNKNOWN0 = 0,
JKRMEMBREAK_FLAG_UNKNOWN1 = 1,
_JKRMemBreakFlag_PADDING_32BIT = 0xFFFFFFFF,
};
@@ -15,23 +16,28 @@ public:
JKRMemArchive(void*, u32, JKRMemBreakFlag);
virtual ~JKRMemArchive();
void open(long, JKRArchive::EMountDirection);
void open(void*, u32, JKRMemBreakFlag);
bool open(long, JKRArchive::EMountDirection);
bool open(void*, u32, JKRMemBreakFlag);
/* vt[09] */ void removeResourceAll(void); /* override */
/* vt[10] */ bool removeResource(void*); /* override */
/* vt[15] */ void getExpandedResSize(void const*) const; /* override */
/* vt[15] */ u32 getExpandedResSize(const void*) const; /* override */
/* vt[16] */ void* fetchResource(SDIFileEntry*, u32*); /* override */
/* vt[17] */ void* fetchResource(void*, u32, SDIFileEntry*, u32*); /* override */
public:
static void fetchResource_subroutine(u8*, u32, u8*, u32, int);
static u32 fetchResource_subroutine(u8*, u32, u8*, u32, JKRCompression);
private:
/* 0x00 */ // vtable
/* 0x04 */ // JKRArchive
u8 unk[20];
/* 0x5C */ JKRCompression mCompression;
/* 0x60 */ EMountDirection mMountDirection;
/* 0x64 */ SArcHeader* mArcHeader;
/* 0x68 */ u8* mArchiveData;
/* 0x6C */ bool mIsOpen;
/* 0x6D */ u8 field_0x6d[3];
};
#endif
@@ -27,7 +27,7 @@
/* 802D6C2C 002D3B6C 39 00 00 01 */ li r8, 1
/* 802D6C30 002D3B70 39 20 00 00 */ li r9, 0
/* 802D6C34 002D3B74 39 5F 00 5C */ addi r10, r31, 0x5c
/* 802D6C38 002D3B78 48 00 30 1D */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D6C38 002D3B78 48 00 30 1D */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D6C3C 002D3B7C 90 7F 00 64 */ stw r3, 0x64(r31)
/* 802D6C40 002D3B80 80 7F 00 64 */ lwz r3, 0x64(r31)
/* 802D6C44 002D3B84 28 03 00 00 */ cmplwi r3, 0
@@ -46,7 +46,7 @@ lbl_802D6C58:
/* 802D6C74 002D3BB4 39 00 00 02 */ li r8, 2
/* 802D6C78 002D3BB8 39 20 00 00 */ li r9, 0
/* 802D6C7C 002D3BBC 39 5F 00 5C */ addi r10, r31, 0x5c
/* 802D6C80 002D3BC0 48 00 2F D5 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl
/* 802D6C80 002D3BC0 48 00 2F D5 */ bl loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl
/* 802D6C84 002D3BC4 90 7F 00 64 */ stw r3, 0x64(r31)
/* 802D6C88 002D3BC8 80 7F 00 64 */ lwz r3, 0x64(r31)
/* 802D6C8C 002D3BCC 28 03 00 00 */ cmplwi r3, 0
@@ -41,7 +41,7 @@ lbl_802D6E88:
/* 802D6E94 002D3DD4 7F E4 FB 78 */ mr r4, r31
/* 802D6E98 002D3DD8 7F A5 EB 78 */ mr r5, r29
/* 802D6E9C 002D3DDC 7D 06 43 78 */ mr r6, r8
/* 802D6EA0 002D3DE0 48 00 00 BD */ bl fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUli
/* 802D6EA0 002D3DE0 48 00 00 BD */ bl fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUl14JKRCompression
/* 802D6EA4 002D3DE4 7C 7F 1B 78 */ mr r31, r3
lbl_802D6EA8:
/* 802D6EA8 002D3DE8 28 1E 00 00 */ cmplwi r30, 0
@@ -1,4 +1,4 @@
/* fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUli __ct__13JKRMemArchiveFlQ210JKRArchive15EMountDirection::fetchResource_subroutine(unsigned char *, unsigned long, unsigned char *, unsigned long, int) */
/* fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUl14JKRCompression __ct__13JKRMemArchiveFlQ210JKRArchive15EMountDirection::fetchResource_subroutine(unsigned char *, unsigned long, unsigned char *, unsigned long, int) */
/* JKRMemArchive_NS_fetchResource_subroutine */
/* 802D6F5C 002D3E9C 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 802D6F60 002D3EA0 7C 08 02 A6 */ mflr r0
+4 -4
View File
@@ -923,7 +923,7 @@ void __ct__13JKRMemArchiveFlQ210JKRArchive15EMountDirection(void);
void __dt__13JKRMemArchiveFv(void);
void fetchResource__13JKRMemArchiveFP12SDIFileEntryPUl(void);
void fetchResource__13JKRMemArchiveFPvUlP12SDIFileEntryPUl(void);
void fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUli(void);
void fetchResource_subroutine__13JKRMemArchiveFPUcUlPUcUl14JKRCompression(void);
void getExpandedResSize__13JKRMemArchiveCFPCv(void);
void open__13JKRMemArchiveFPvUl15JKRMemBreakFlag(void);
void open__13JKRMemArchiveFlQ210JKRArchive15EMountDirection(void);
@@ -985,11 +985,11 @@ void __sinit_JKRDvdRipper_cpp(void);
void decompSZS_subroutine__FPUcPUc(void);
void firstSrcData__Fv(void);
void isErrorRetry__12JKRDvdRipperFv(void);
void loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl(
void loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl(
void);
void loadToMainRAM__12JKRDvdRipperFPCcPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl(
void loadToMainRAM__12JKRDvdRipperFP10JKRDvdFilePUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl(
void);
void loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl(
void loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlP14JKRCompressionPUl(
void);
void nextSrcData__FPUc(void);
};
+1
View File
@@ -13,6 +13,7 @@ struct Vec {
};
#define JUT_ASSERT(...)
#define ASSERT(...)
#include "dolphin/types.h"
+2 -2
View File
@@ -263,8 +263,8 @@ extern JSUList<JKRThread> lbl_8043428C; // JSUList<JKRThread> JKRThread::sThrea
extern u8 lbl_803CC398; // JKRDvdArchive::__vt
extern u8 lbl_8039D1B0; // "JKRDvdArchive.cpp"
extern u8 lbl_803CC2D8; // JKRMemArchive::__vt
extern u8 lbl_8039D160; // "JKRMemArchive.cpp"
extern u8 lbl_803CC2D8; // JKRMemArchive::__vt
extern const char lbl_8039D160[16]; // "JKRMemArchive.cpp"
extern u8 lbl_803CC348; // JKRAramArchive::__vt
extern u8 lbl_8039D188; // "JKRAramArchive.cpp"
+1 -1
View File
@@ -48,7 +48,7 @@ asm void JKRAramArchive::fetchResource_subroutine(u32, u32, JKRHeap*, int, u8**)
#include "JSystem/JKernel/JKRAramArchive/asm/func_802D7914.s"
}
asm void JKRAramArchive::getExpandedResSize(void const*) const {
asm u32 JKRAramArchive::getExpandedResSize(void const*) const {
nofralloc
#include "JSystem/JKernel/JKRAramArchive/asm/func_802D7A64.s"
}
+1 -1
View File
@@ -36,7 +36,7 @@ asm bool JKRCompArchive::removeResource(void*) {
#include "JSystem/JKernel/JKRCompArchive/asm/func_802D92F4.s"
}
asm void JKRCompArchive::getExpandedResSize(void const*) const {
asm u32 JKRCompArchive::getExpandedResSize(void const*) const {
nofralloc
#include "JSystem/JKernel/JKRCompArchive/asm/func_802D9360.s"
}
+8 -14
View File
@@ -92,20 +92,14 @@ bool JKRDecomp::orderSync(u8* srcBuffer, u8* dstBuffer, u32 srcLength, u32 dstLe
}
void JKRDecomp::decode(u8* srcBuffer, u8* dstBuffer, u32 srcLength, u32 dstLength) {
Compression compression = checkCompressed(srcBuffer);
if (compression == JKRDecomp::YAY0) {
JKRCompression compression = checkCompressed(srcBuffer);
if (compression == COMPRESSION_YAY0) {
decodeSZP(srcBuffer, dstBuffer, srcLength, dstLength);
} else if (compression == JKRDecomp::YAZ0) {
} else if (compression == COMPRESSION_YAZ0) {
decodeSZS(srcBuffer, dstBuffer, srcLength, dstLength);
}
}
#define READ_BIG_ENDIAN_U32(P) \
(((u32)(((u8*)(P))[0]) << 0x18) | ((u32)(((u8*)(P))[1]) << 0x10) | \
((u32)(((u8*)(P))[2]) << 8) | ((u32)(((u8*)(P))[3])))
#define READ_BIG_ENDIAN_U16(P) (((u32)(((u8*)(P))[0]) << 8) | ((u32)(((u8*)(P))[1])))
// All instructions match. Wrong registers are used.
#ifdef NONMATCHING
void JKRDecomp::decodeSZP(u8* src, u8* dst, u32 srcLength, u32 dstLength) {
@@ -199,19 +193,19 @@ asm void JKRDecomp::decodeSZS(u8*, u8*, u32, u32){nofralloc
#include "JSystem/JKernel/JKRDecomp/asm/func_802DBC14.s"
}
JKRDecomp::Compression JKRDecomp::checkCompressed(u8* src) {
JKRCompression JKRDecomp::checkCompressed(u8* src) {
if ((src[0] == 'Y') && (src[1] == 'a') && (src[3] == '0')) {
if (src[2] == 'y') {
return JKRDecomp::YAY0;
return COMPRESSION_YAY0;
}
if (src[2] == 'z') {
return JKRDecomp::YAZ0;
return COMPRESSION_YAZ0;
}
}
if ((src[0] == 'A') && (src[1] == 'S') && (src[2] == 'R')) {
return JKRDecomp::ASR;
return COMPRESSION_ASR;
}
return JKRDecomp::NONE;
return COMPRESSION_NONE;
}
JKRDecompCommand::JKRDecompCommand() {
+1 -1
View File
@@ -36,7 +36,7 @@ asm void JKRDvdArchive::fetchResource_subroutine(long, u32, u32, JKRHeap*, int,
#include "JSystem/JKernel/JKRDvdArchive/asm/func_802D8474.s"
}
asm void JKRDvdArchive::getExpandedResSize(void const*) const {
asm u32 JKRDvdArchive::getExpandedResSize(void const*) const {
nofralloc
#include "JSystem/JKernel/JKRDvdArchive/asm/func_802D8698.s"
}
+6 -6
View File
@@ -2,20 +2,20 @@
#include "dvd/dvd.h"
#include "global.h"
asm void JKRDvdRipper::loadToMainRAM(char const*, u8*, JKRExpandSwitch, u32, JKRHeap*,
JKRDvdRipper::EAllocDirection, u32, int*, u32*) {
asm void* JKRDvdRipper::loadToMainRAM(const char*, u8*, JKRExpandSwitch, u32, JKRHeap*,
JKRDvdRipper::EAllocDirection, u32, JKRCompression*, u32*) {
nofralloc
#include "JSystem/JKernel/JKRDvdRipper/asm/func_802D9B98.s"
}
asm void JKRDvdRipper::loadToMainRAM(long, u8*, JKRExpandSwitch, u32, JKRHeap*,
JKRDvdRipper::EAllocDirection, u32, int*, u32*) {
asm void* JKRDvdRipper::loadToMainRAM(long, u8*, JKRExpandSwitch, u32, JKRHeap*,
JKRDvdRipper::EAllocDirection, u32, JKRCompression*, u32*) {
nofralloc
#include "JSystem/JKernel/JKRDvdRipper/asm/func_802D9C54.s"
}
asm void JKRDvdRipper::loadToMainRAM(JKRDvdFile*, u8*, JKRExpandSwitch, u32, JKRHeap*,
JKRDvdRipper::EAllocDirection, u32, int*, u32*) {
asm void* JKRDvdRipper::loadToMainRAM(JKRDvdFile*, u8*, JKRExpandSwitch, u32, JKRHeap*,
JKRDvdRipper::EAllocDirection, u32, JKRCompression*, u32*) {
nofralloc
#include "JSystem/JKernel/JKRDvdRipper/asm/func_802D9D10.s"
}
+214 -29
View File
@@ -1,57 +1,242 @@
#include "JSystem/JKernel/JKRMemArchive/JKRMemArchive.h"
#include "JSystem/JKernel/JKRDvdRipper/JKRDvdRipper.h"
#include "global.h"
asm JKRMemArchive::JKRMemArchive(long, JKRArchive::EMountDirection) {
nofralloc
#include "JSystem/JKernel/JKRMemArchive/asm/func_802D69B8.s"
JKRMemArchive::JKRMemArchive(long entryNum, JKRArchive::EMountDirection mountDirection)
: JKRArchive(entryNum, MOUNT_MEM) {
mIsMounted = false;
mMountDirection = mountDirection;
if (!open(entryNum, mMountDirection)) {
return;
}
mVolumeType = 'RARC';
mVolumeName = mStringTable + (u32)mNodes->name;
getVolumeList().prepend(&mFileLoaderLink);
mIsMounted = true;
}
asm JKRMemArchive::JKRMemArchive(void*, u32, JKRMemBreakFlag) {
nofralloc
#include "JSystem/JKernel/JKRMemArchive/asm/func_802D6A6C.s"
JKRMemArchive::JKRMemArchive(void* buffer, u32 bufferSize, JKRMemBreakFlag param_3)
: JKRArchive((s32)buffer, MOUNT_MEM) {
mIsMounted = false;
if (!open(buffer, bufferSize, param_3)) {
return;
}
mVolumeType = 'RARC';
mVolumeName = mStringTable + (u32)mNodes->name;
getVolumeList().prepend(&mFileLoaderLink);
mIsMounted = true;
}
asm JKRMemArchive::~JKRMemArchive() {
nofralloc
#include "JSystem/JKernel/JKRMemArchive/asm/func_802D6B24.s"
JKRMemArchive::~JKRMemArchive() {
if (mIsMounted == true) {
if (mIsOpen) {
if (mArcHeader)
JKRFreeToHeap(mHeap, mArcHeader);
}
getVolumeList().remove(&mFileLoaderLink);
mIsMounted = false;
}
}
asm void JKRMemArchive::open(long, JKRArchive::EMountDirection) {
// full match, except:
// mArchiveData = (u8*)(mArcHeader->file_data_offset + mArcHeader->header_length + (u32)mArcHeader);
// where the addition is swapped.
#ifdef NONMATCHING
bool JKRMemArchive::open(long entryNum, JKRArchive::EMountDirection mountDirection) {
mArcHeader = NULL;
mArcInfoBlock = NULL;
mArchiveData = NULL;
mNodes = NULL;
mFiles = NULL;
mStringTable = NULL;
mIsOpen = false;
mMountDirection = mountDirection;
if (mMountDirection == JKRArchive::HEAD) {
u32 loadedSize;
mArcHeader = (SArcHeader*)JKRDvdRipper::loadToMainRAM(
entryNum, NULL, EXPAND_SWITCH_UNKNOWN1, 0, mHeap, JKRDvdRipper::FORWARD, 0,
&mCompression, &loadedSize);
if (mArcHeader) {
DCInvalidateRange(mArcHeader, loadedSize);
}
} else {
u32 loadedSize;
mArcHeader = (SArcHeader*)JKRDvdRipper::loadToMainRAM(
entryNum, NULL, EXPAND_SWITCH_UNKNOWN1, 0, mHeap, JKRDvdRipper::BACKWARD, 0,
&mCompression, &loadedSize);
if (mArcHeader) {
DCInvalidateRange(mArcHeader, loadedSize);
}
}
if (!mArcHeader) {
mMountMode = UNKNOWN_MOUNT_MODE;
} else {
ASSERT(mArcHeader->signature == 'RARC');
mArcInfoBlock = (SArcDataInfo*)((u8*)mArcHeader + mArcHeader->header_length);
mNodes = (SDirEntry*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset);
mFiles = (SDIFileEntry*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset);
mStringTable = (char*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset);
mArchiveData =
(u8*)(mArcHeader->file_data_offset + mArcHeader->header_length + (u32)mArcHeader);
mIsOpen = true;
}
return mMountMode != UNKNOWN_MOUNT_MODE;
}
#else
asm bool JKRMemArchive::open(long entryNum, JKRArchive::EMountDirection mountDirection) {
nofralloc
#include "JSystem/JKernel/JKRMemArchive/asm/func_802D6BCC.s"
}
#endif
asm void JKRMemArchive::open(void*, u32, JKRMemBreakFlag) {
// full match, except:
// mArchiveData = (u8*)(mArcHeader->file_data_offset + mArcHeader->header_length + (u32)mArcHeader);
// where the addition is swapped.
#ifdef NONMATCHING
bool JKRMemArchive::open(void* buffer, u32 bufferSize, JKRMemBreakFlag flag) {
mArcHeader = (SArcHeader*)buffer;
ASSERT(mArcHeader->signature == 'RARC');
mArcInfoBlock = (SArcDataInfo*)((u8*)mArcHeader + mArcHeader->header_length);
mNodes = (SDirEntry*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset);
mFiles = (SDIFileEntry*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset);
mStringTable = (char*)((u8*)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset);
mArchiveData =
(u8*)(mArcHeader->file_data_offset + mArcHeader->header_length + (u32)mArcHeader);
mIsOpen = (flag == JKRMEMBREAK_FLAG_UNKNOWN1);
mHeap = JKRHeap::findFromRoot(buffer);
mCompression = JKRDecomp::NONE;
return true;
}
#else
asm bool JKRMemArchive::open(void* buffer, u32 bufferSize, JKRMemBreakFlag flag) {
nofralloc
#include "JSystem/JKernel/JKRMemArchive/asm/func_802D6D30.s"
}
#endif
asm void* JKRMemArchive::fetchResource(SDIFileEntry*, u32*) {
nofralloc
#include "JSystem/JKernel/JKRMemArchive/asm/func_802D6DDC.s"
void* JKRMemArchive::fetchResource(SDIFileEntry* fileEntry, u32* resourceSize) {
if (!fileEntry->data) {
fileEntry->data = mArchiveData + fileEntry->data_offset;
}
if (resourceSize) {
*resourceSize = fileEntry->data_size;
}
return fileEntry->data;
}
asm void* JKRMemArchive::fetchResource(void*, u32, SDIFileEntry*, u32*) {
nofralloc
#include "JSystem/JKernel/JKRMemArchive/asm/func_802D6E10.s"
void* JKRMemArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* fileEntry,
u32* resourceSize) {
u32 srcLength = fileEntry->data_size;
if (srcLength > bufferSize) {
srcLength = bufferSize;
}
if (fileEntry->data != NULL) {
memcpy(buffer, fileEntry->data, srcLength);
} else {
JKRCompression compression;
if (!fileEntry->isCompressed()) {
compression = COMPRESSION_NONE;
} else if (fileEntry->isYAZ0Compressed()) {
compression = COMPRESSION_YAZ0;
} else {
compression = COMPRESSION_YAY0;
}
void* data = mArchiveData + fileEntry->data_offset;
srcLength =
fetchResource_subroutine((u8*)data, srcLength, (u8*)buffer, bufferSize, compression);
}
if (resourceSize) {
*resourceSize = srcLength;
}
return buffer;
}
asm void JKRMemArchive::removeResourceAll(void) {
nofralloc
#include "JSystem/JKernel/JKRMemArchive/asm/func_802D6ED0.s"
void JKRMemArchive::removeResourceAll(void) {
ASSERT(isMounted());
if (mArcInfoBlock == NULL)
return;
if (mMountMode == MOUNT_MEM)
return;
// !@bug: looping over file entries without incrementing the fileEntry pointer. Thus, only the
// first fileEntry will clear/remove the resource data.
SDIFileEntry* fileEntry = mFiles;
for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) {
if (fileEntry->data) {
fileEntry->data = NULL;
}
}
}
asm bool JKRMemArchive::removeResource(void*) {
nofralloc
#include "JSystem/JKernel/JKRMemArchive/asm/func_802D6F20.s"
bool JKRMemArchive::removeResource(void* resource) {
ASSERT(isMounted());
SDIFileEntry* fileEntry = findPtrResource(resource);
if (!fileEntry)
return false;
fileEntry->data = NULL;
return true;
}
asm void JKRMemArchive::fetchResource_subroutine(u8*, u32, u8*, u32, int) {
nofralloc
#include "JSystem/JKernel/JKRMemArchive/asm/func_802D6F5C.s"
u32 JKRMemArchive::fetchResource_subroutine(u8* src, u32 srcLength, u8* dst, u32 dstLength,
JKRCompression compression) {
switch (compression) {
case COMPRESSION_NONE:
if (srcLength > dstLength) {
srcLength = dstLength;
}
memcpy(dst, src, srcLength);
return srcLength;
case COMPRESSION_YAY0:
case COMPRESSION_YAZ0:
u32 expendedSize = JKRDecompExpandSize(src);
srcLength = expendedSize;
if (expendedSize > dstLength) {
srcLength = dstLength;
}
JKRDecompress(src, dst, srcLength, 0);
return srcLength;
default: {
const char* file = lbl_8039D160; // "JKRMemArchive.cpp"
const char* format = lbl_8039D160 + 0x12; // "%s"
const char* arg1 = lbl_8039D160 + 0x12 + 0x3; // "??? bad sequence\n"
JUTException_NS_panic_f(file, 0x2d3, format, arg1);
} break;
}
return 0;
}
asm void JKRMemArchive::getExpandedResSize(const void*) const {
nofralloc
#include "JSystem/JKernel/JKRMemArchive/asm/func_802D7030.s"
u32 JKRMemArchive::getExpandedResSize(const void* resource) const {
SDIFileEntry* fileEntry = findPtrResource(resource);
if (fileEntry == NULL)
return 0xFFFFFFFF;
if (fileEntry->isCompressed() == false) {
return getResSize(resource);
} else {
return JKRDecompExpandSize(resource);
}
}