Jsupport stream and JKRAramArchive (#143)

* JSupport streams

* JKRAramArchive
This commit is contained in:
lepelog
2021-08-28 16:32:14 +02:00
committed by GitHub
parent daf45f768d
commit f25c24699b
38 changed files with 511 additions and 1270 deletions
+9
View File
@@ -69,6 +69,15 @@ private:
static JSUList<JKRAMCommand> sAramCommandList;
};
inline void* JKRAllocFromAram(u32 size, JKRAramHeap::EAllocMode allocMode) {
return JKRAram::getAramHeap()->alloc(size, allocMode);
}
inline void JKRAramToMainRam(u32 p1, u8* p2, u32 p3, JKRExpandSwitch p4, u32 p5, JKRHeap* p6,
int p7, u32* p8) {
JKRAram::aramToMainRam(p1, p2, p3, p4, p5, p6, p7, p8);
}
// void JKRDecompressFromAramToMainRam(u32, void*, u32, u32, u32, u32*);
#endif /* JKRARAM_H */
+12 -8
View File
@@ -1,6 +1,7 @@
#ifndef JKRARAMARCHIVE_H
#define JKRARAMARCHIVE_H
#include "JSystem/JKernel/JKRAramBlock.h"
#include "JSystem/JKernel/JKRArchive.h"
#include "dolphin/types.h"
@@ -9,22 +10,25 @@ public:
JKRAramArchive(long, JKRArchive::EMountDirection);
virtual ~JKRAramArchive();
void open(long);
void getAramAddress_Entry(SDIFileEntry*);
void getAramAddress(char const*);
bool open(long);
u32 getAramAddress_Entry(SDIFileEntry*);
u32 getAramAddress(char const*);
/* vt[15] */ u32 getExpandedResSize(const void*); /* 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(u32, u32, u8*, u32, int);
static void fetchResource_subroutine(u32, u32, JKRHeap*, int, u8**);
static u32 fetchResource_subroutine(u32, u32, u8*, u32, int);
static u32 fetchResource_subroutine(u32, u32, JKRHeap*, int, u8**);
private:
/* 0x00 */ // vtable
/* 0x04 */ // JKRArchive
u8 unk[16];
};
/* 0x5C */ JKRCompression mCompression;
/* 0x60 */ EMountDirection mMountDirection;
/* 0x64 */ JKRAramBlock* mBlock;
/* 0x68 */ JKRDvdFile* mDvdFile;
}; // Size = 0x6C
#endif /* JKRARAMARCHIVE_H */
+2 -1
View File
@@ -3,6 +3,7 @@
#include "dolphin/types.h"
#include "JSystem/JKernel/JKRArchive.h"
#include "JSystem/JSupport/JSUList.h"
#include "dolphin/types.h"
@@ -15,7 +16,7 @@ public:
JKRAramBlock* allocHead(u32, u8, JKRAramHeap*);
JKRAramBlock* allocTail(u32, u8, JKRAramHeap*);
void* getAddress() const { return (void*)mAddress; }
u32 getAddress() const { return mAddress; }
u32 getSize() const { return mSize; }
+12 -10
View File
@@ -3,18 +3,20 @@
#include "JSystem/JKernel/JKRCompression.h"
#include "JSystem/JKernel/JKRDecomp.h"
#include "JSystem/JKernel/JKRDvdFile.h"
#include "JSystem/JKernel/JKRFileLoader.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "global.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;
/* 0x00 */ u32 signature;
/* 0x04 */ u32 file_length;
/* 0x08 */ u32 header_length;
/* 0x0C */ u32 file_data_offset;
/* 0x10 */ u32 file_data_length;
/* 0x14 */ u32 field_0x14;
/* 0x18 */ u32 field_0x18;
/* 0x1C */ u32 field_0x1c;
};
struct SArcDataInfo {
@@ -46,8 +48,6 @@ inline u32 JKRDecompExpandSize(SArcHeader* header) {
extern u32 sCurrentDirID__10JKRArchive; // JKRArchive::sCurrentDirID
class JKRHeap;
class JKRDvdFile;
class JKRArchive : public JKRFileLoader {
public:
struct SDirEntry {
@@ -82,6 +82,8 @@ public:
bool isDirectory() const { return (getFlags() & 0x02) != 0; }
bool isUnknownFlag1() const { return (getFlags() & 0x01) != 0; }
bool isCompressed() const { return (getFlags() & 0x04) != 0; }
// was needed for open__14JKRAramArchiveFl
u8 getCompressFlag() const { return (getFlags() & 0x04); }
bool isYAZ0Compressed() const { return (getFlags() & 0x80) != 0; }
};
+9 -6
View File
@@ -1,21 +1,24 @@
#ifndef JSUFILESTREAM_H
#define JSUFILESTREAM_H
#include "JSystem/JKernel/JKRFile.h"
#include "JSystem/JSupport/JSURandomInputStream.h"
#include "dolphin/types.h"
struct JKRFile;
class JSUFileInputStream : public JSURandomInputStream {
public:
virtual ~JSUFileInputStream();
virtual ~JSUFileInputStream() {}
// TODO: fix return values
/* 802DC638 */ JSUFileInputStream(JKRFile*);
/* 802DC67C */ s32 readData(void*, s32);
/* 802DC74C */ void seekPos(s32, JSUStreamSeekFrom);
/* 802DC67C */ u32 readData(void*, s32);
/* 802DC74C */ s32 seekPos(s32, JSUStreamSeekFrom);
/* 802DC82C */ s32 getLength() const;
/* 802DC85C */ s32 getPosition() const;
};
private:
/* 0x08 */ JKRFile* mFile;
/* 0x0C */ s32 mPosition;
}; // Size = 0x10
#endif /* JSUFILESTREAM_H */
+9 -5
View File
@@ -4,19 +4,23 @@
#include "JSystem/JSupport/JSUIosBase.h"
#include "dolphin/types.h"
struct JSUStreamSeekFrom {};
enum JSUStreamSeekFrom {
JSUStreamSeekFrom_SET = 0, // absolute
JSUStreamSeekFrom_CUR = 1, // relative
JSUStreamSeekFrom_END = 2, // relative to end
};
class JSUInputStream : public JSUIosBase {
public:
JSUInputStream();
JSUInputStream() {}
virtual ~JSUInputStream();
/* vt[3] */ virtual s32 getAvailable() const = 0;
/* vt[4] */ virtual s32 skip(s32);
/* vt[5] */ virtual s32 readData(void*, s32) = 0;
/* vt[5] */ virtual u32 readData(void*, s32) = 0;
// TODO: return value probably wrong
/* 802DC298 */ void read(void*, s32);
};
/* 802DC298 */ s32 read(void*, s32);
}; // Size = 0x8
#endif /* JSUINPUTSTREAM_H */
+2 -2
View File
@@ -11,7 +11,7 @@ class JSUIosBase {
public:
JSUIosBase() { mState = false; }
virtual ~JSUIosBase();
virtual ~JSUIosBase() {}
bool isGood() const { return mState == 0; }
void clrState(EIoState state) { mState &= ~state; }
@@ -19,6 +19,6 @@ public:
private:
u8 mState;
};
}; // Size = 0x8
#endif
@@ -1,6 +1,22 @@
#ifndef JSUMEMORYSTREAM_H
#define JSUMEMORYSTREAM_H
#include "JSystem/JSupport/JSURandomInputStream.h"
#include "dolphin/types.h"
class JSUMemoryInputStream : JSURandomInputStream {
public:
/* 802552B8 */ ~JSUMemoryInputStream() {}
/* 802DC520 */ void setBuffer(void const*, s32);
/* 802DC534 */ u32 readData(void*, s32);
/* 802DC5AC */ s32 seekPos(s32, JSUStreamSeekFrom);
/* 802DC628 */ s32 getLength() const;
/* 802DC630 */ s32 getPosition() const;
private:
/* 0x08 */ const void* mBuffer;
/* 0x0C */ s32 mLength;
/* 0x10 */ s32 mPosition;
}; // Size = 0x14
#endif /* JSUMEMORYSTREAM_H */
@@ -6,20 +6,20 @@
class JSURandomInputStream : public JSUInputStream {
public:
JSURandomInputStream();
virtual ~JSURandomInputStream();
JSURandomInputStream() {}
virtual ~JSURandomInputStream() {}
/* vt[3] */ virtual s32 getAvailable() const; /* override */
/* vt[4] */ virtual s32 skip(s32); /* override */
/* vt[5] */ virtual s32 readData(void*, s32) = 0;
/* vt[5] */ virtual u32 readData(void*, s32) = 0;
/* vt[6] */ virtual s32 getLength() const = 0;
/* vt[7] */ virtual s32 getPosition() const = 0;
/* vt[7] */ virtual s32 seekPos() = 0;
/* vt[8] */ virtual s32 seekPos(s32, JSUStreamSeekFrom) = 0;
// TODO: fix return types
/* 802DC370 */ void align(s32);
/* 802DC458 */ void peek(void*, s32);
/* 802DC4DC */ void seek(s32, JSUStreamSeekFrom);
};
/* 802DC370 */ s32 align(s32);
/* 802DC458 */ s32 peek(void*, s32);
/* 802DC4DC */ s32 seek(s32, JSUStreamSeekFrom);
}; // Size = 0x8
#endif