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
@@ -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"