mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-19 05:02:12 -04:00
JKRFileLoader, JKRFileFinder, and JKRThread (#60)
* JKRFileLoader OK * JKRFileFinder progress * JKRFileFinder OK * JKRFileCache fix virtual function signatures * added OSThread and OSContext types * JKRThread fixed nonmatching functions Co-authored-by: Julgodis <> Co-authored-by: Pheenoh <pheenoh@gmail.com>
This commit is contained in:
@@ -8,7 +8,16 @@ class JKRHeap;
|
||||
class JKRDvdFile;
|
||||
class JKRArchive : public JKRFileLoader {
|
||||
public:
|
||||
class SDirEntry {};
|
||||
struct SDirEntry {
|
||||
u8 type_flags;
|
||||
u8 field_0x1;
|
||||
u16 id;
|
||||
char* name;
|
||||
u16 field_0x8;
|
||||
u16 num_entries;
|
||||
s32 first_file_index;
|
||||
};
|
||||
|
||||
class SDIFileEntry {};
|
||||
|
||||
enum EMountMode {
|
||||
@@ -73,13 +82,13 @@ public:
|
||||
|
||||
public:
|
||||
/* vt[04] */ virtual void becomeCurrent(char const*); /* override */
|
||||
/* vt[05] */ virtual void getResource(char const*); /* override */
|
||||
/* vt[06] */ virtual void getResource(u32, char const*); /* override */
|
||||
/* vt[05] */ virtual void* getResource(char const*); /* override */
|
||||
/* vt[06] */ virtual void* getResource(u32, char const*); /* override */
|
||||
/* vt[07] */ virtual void readResource(void*, u32, char const*); /* override */
|
||||
/* vt[08] */ virtual void readResource(void*, u32, u32, char const*); /* override */
|
||||
/* vt[09] */ virtual void removeResourceAll(void); /* override */
|
||||
/* vt[10] */ virtual void removeResource(void*); /* override */
|
||||
/* vt[11] */ virtual void detachResource(void*); /* override */
|
||||
/* vt[10] */ virtual bool removeResource(void*); /* override */
|
||||
/* vt[11] */ virtual bool detachResource(void*); /* override */
|
||||
/* vt[12] */ virtual void getResSize(void const*) const; /* override */
|
||||
/* vt[13] */ virtual void countFile(char const*) const; /* override */
|
||||
/* vt[14] */ virtual void getFirstFile(char const*) const; /* override */
|
||||
|
||||
@@ -12,7 +12,7 @@ public:
|
||||
void open(long);
|
||||
|
||||
/* vt[09] */ void removeResourceAll(void); /* override */
|
||||
/* vt[10] */ void removeResource(void*); /* override */
|
||||
/* vt[10] */ bool removeResource(void*); /* override */
|
||||
|
||||
/* vt[15] */ void getExpandedResSize(void const*) const; /* override */
|
||||
/* vt[16] */ void fetchResource(JKRArchive::SDIFileEntry*, u32*); /* override */
|
||||
|
||||
@@ -31,13 +31,13 @@ protected:
|
||||
|
||||
public:
|
||||
/* vt[04] */ virtual void becomeCurrent(char const*); /* override */
|
||||
/* vt[05] */ virtual void getResource(char const*); /* override */
|
||||
/* vt[06] */ virtual void getResource(u32, char const*); /* override */
|
||||
/* vt[05] */ virtual void* getResource(char const*); /* override */
|
||||
/* vt[06] */ virtual void* getResource(u32, char const*); /* override */
|
||||
/* vt[07] */ virtual void readResource(void*, u32, char const*); /* override */
|
||||
/* vt[08] */ virtual void readResource(void*, u32, u32, char const*); /* override */
|
||||
/* vt[09] */ virtual void removeResourceAll(void); /* override */
|
||||
/* vt[10] */ virtual void removeResource(void*); /* override */
|
||||
/* vt[11] */ virtual void detachResource(void*); /* override */
|
||||
/* vt[10] */ virtual bool removeResource(void*); /* override */
|
||||
/* vt[11] */ virtual bool detachResource(void*); /* override */
|
||||
/* vt[12] */ virtual void getResSize(void const*) const; /* override */
|
||||
/* vt[13] */ virtual void countFile(char const*) const; /* override */
|
||||
/* vt[14] */ virtual void getFirstFile(char const*) const; /* override */
|
||||
|
||||
@@ -2,28 +2,36 @@
|
||||
#define __JKRFILEFINDER_H__
|
||||
|
||||
#include "dolphin/types.h"
|
||||
#include "dvd/dvd.h"
|
||||
|
||||
struct JKRFileFinder_UnknownBase {
|
||||
u32 field_0x0;
|
||||
u32 field_0x4;
|
||||
u16 field_0x8;
|
||||
u16 field_0xa;
|
||||
const char* mEntryName;
|
||||
s32 mEntryFileIndex;
|
||||
u16 mEntryId;
|
||||
u16 mEntryTypeFlags;
|
||||
};
|
||||
|
||||
class JKRFileFinder : JKRFileFinder_UnknownBase {
|
||||
class JKRFileFinder : public JKRFileFinder_UnknownBase {
|
||||
public:
|
||||
JKRFileFinder();
|
||||
JKRFileFinder() {
|
||||
mIsAvailable = false;
|
||||
mIsFileOrDirectory = false;
|
||||
}
|
||||
virtual ~JKRFileFinder();
|
||||
|
||||
bool isAvailable() { return this->mIsAvailable; }
|
||||
bool isAvailable() const { return mIsAvailable; }
|
||||
bool isFile() const { return mIsFileOrDirectory; }
|
||||
bool isDirectory() const { return mIsFileOrDirectory; }
|
||||
|
||||
public:
|
||||
/* vt[3] */ virtual bool findNextFile(void) = 0;
|
||||
|
||||
private:
|
||||
bool mIsAvailable;
|
||||
bool field_0x11;
|
||||
u8 padding_0x12[2];
|
||||
protected:
|
||||
/* 0x00 */ // JKRFileFinder_UnknownBase
|
||||
/* 0x0C */ // vtable
|
||||
/* 0x10 */ bool mIsAvailable;
|
||||
/* 0x11 */ bool mIsFileOrDirectory;
|
||||
/* 0x12 */ u8 field_0x12[2];
|
||||
};
|
||||
|
||||
class JKRArchive;
|
||||
@@ -36,24 +44,30 @@ public:
|
||||
/* vt[3] */ virtual bool findNextFile(void); /* override */
|
||||
|
||||
private:
|
||||
JKRArchive* mArchive;
|
||||
u32 field_0x18;
|
||||
u32 field_0x1c;
|
||||
u32 field_0x20;
|
||||
/* 0x00 */ // JKRFileFinder_UnknownBase
|
||||
/* 0x0C */ // vtable
|
||||
/* 0x10 */ // JKRFileFinder
|
||||
/* 0x14 */ JKRArchive* mArchive;
|
||||
/* 0x18 */ s32 mStartIndex;
|
||||
/* 0x1C */ s32 mEndIndex;
|
||||
/* 0x20 */ s32 mNextIndex;
|
||||
};
|
||||
|
||||
class JKRDvdFinder : public JKRFileFinder {
|
||||
public:
|
||||
JKRDvdFinder(char const*);
|
||||
JKRDvdFinder(const char*);
|
||||
virtual ~JKRDvdFinder();
|
||||
|
||||
public:
|
||||
/* vt[3] */ virtual bool findNextFile(void); /* override */
|
||||
|
||||
private:
|
||||
u8 mDvd[12];
|
||||
bool mDvdIsOpen;
|
||||
u8 padding_0x21[3];
|
||||
/* 0x00 */ // JKRFileFinder_UnknownBase
|
||||
/* 0x0C */ // vtable
|
||||
/* 0x10 */ // JKRFileFinder
|
||||
/* 0x14 */ DVDDirectory mDvdDirectory;
|
||||
/* 0x20 */ bool mDvdIsOpen;
|
||||
/* 0x21 */ u8 field_0x21[3];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -9,31 +9,33 @@ public:
|
||||
JKRFileLoader(void);
|
||||
virtual ~JKRFileLoader();
|
||||
|
||||
bool isMounted() { return this->mIsMounted; }
|
||||
bool isMounted() const { return this->mIsMounted; }
|
||||
|
||||
u32 getVolumeType() { return this->mVolumeType; }
|
||||
u32 getVolumeType() const { return this->mVolumeType; }
|
||||
|
||||
public:
|
||||
/* vt[03] */ virtual void unmount(void);
|
||||
/* vt[04] */ virtual void becomeCurrent(char const*) = 0;
|
||||
/* vt[05] */ virtual void getResource(char const*) = 0;
|
||||
/* vt[06] */ virtual void getResource(u32, char const*) = 0;
|
||||
/* vt[05] */ virtual void* getResource(char const*) = 0;
|
||||
/* vt[06] */ virtual void* getResource(u32, char const*) = 0;
|
||||
/* vt[07] */ virtual void readResource(void*, u32, char const*) = 0;
|
||||
/* vt[08] */ virtual void readResource(void*, u32, u32, char const*) = 0;
|
||||
/* vt[09] */ virtual void removeResourceAll(void) = 0;
|
||||
/* vt[10] */ virtual void removeResource(void*) = 0;
|
||||
/* vt[11] */ virtual void detachResource(void*) = 0;
|
||||
/* vt[10] */ virtual bool removeResource(void*) = 0;
|
||||
/* vt[11] */ virtual bool detachResource(void*) = 0;
|
||||
/* vt[12] */ virtual void getResSize(void const*) const = 0;
|
||||
/* vt[13] */ virtual void countFile(char const*) const = 0;
|
||||
/* vt[14] */ virtual void getFirstFile(char const*) const = 0;
|
||||
|
||||
private:
|
||||
JSULink<JKRFileLoader> mFileLoaderLink;
|
||||
char* mVolumeName;
|
||||
u32 mVolumeType;
|
||||
bool mIsMounted;
|
||||
u8 padding_0x31[3];
|
||||
int mMountCount;
|
||||
/* 0x00 */ // vtable
|
||||
/* 0x04 */ // JKRDisposer
|
||||
/* 0x18 */ JSULink<JKRFileLoader> mFileLoaderLink;
|
||||
/* 0x28 */ char* mVolumeName;
|
||||
/* 0x2C */ u32 mVolumeType;
|
||||
/* 0x30 */ bool mIsMounted;
|
||||
/* 0x31 */ u8 field_0x31[3];
|
||||
/* 0x34 */ u32 mMountCount;
|
||||
|
||||
public:
|
||||
static void* getGlbResource(char const*);
|
||||
@@ -41,7 +43,7 @@ public:
|
||||
static bool removeResource(void*, JKRFileLoader*);
|
||||
static bool detachResource(void*, JKRFileLoader*);
|
||||
static JKRFileLoader* findVolume(char const**);
|
||||
static char* fetchVolumeName(char*, long, char const*);
|
||||
static const char* fetchVolumeName(char*, long, char const*);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -156,4 +156,12 @@ inline void* JKRAllocFromHeap(JKRHeap* heap, u32 size, int alignment) {
|
||||
return JKRHeap::alloc(size, alignment, heap);
|
||||
}
|
||||
|
||||
inline void JKRFreeToHeap(JKRHeap* heap, void* ptr) {
|
||||
JKRHeap::free(ptr, heap);
|
||||
}
|
||||
|
||||
inline void JKRFree(void* ptr) {
|
||||
JKRHeap::free(ptr, NULL);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -18,7 +18,7 @@ public:
|
||||
void open(void*, u32, JKRMemBreakFlag);
|
||||
|
||||
/* vt[09] */ void removeResourceAll(void); /* override */
|
||||
/* vt[10] */ void removeResource(void*); /* override */
|
||||
/* vt[10] */ bool removeResource(void*); /* override */
|
||||
|
||||
/* vt[15] */ void getExpandedResSize(void const*) const; /* override */
|
||||
/* vt[16] */ void fetchResource(JKRArchive::SDIFileEntry*, u32*); /* override */
|
||||
|
||||
+15
-3
@@ -20,6 +20,18 @@ typedef enum DVDState {
|
||||
} DVDState;
|
||||
}
|
||||
|
||||
struct DVDDirectory {
|
||||
u32 entry_number;
|
||||
u32 location;
|
||||
u32 next;
|
||||
};
|
||||
|
||||
struct DVDDirectoryEntry {
|
||||
u32 entry_number;
|
||||
BOOL is_directory;
|
||||
char* name;
|
||||
};
|
||||
|
||||
struct DVDDiskID {
|
||||
char game_name[4];
|
||||
char company[2];
|
||||
@@ -70,9 +82,9 @@ DVDState DVDGetDriveStatus(void);
|
||||
s32 DVDCheckDisk(void);
|
||||
|
||||
void DVDChangeDir(void);
|
||||
void DVDCloseDir(void);
|
||||
void DVDOpenDir(void);
|
||||
void DVDReadDir(void);
|
||||
BOOL DVDCloseDir(DVDDirectory*);
|
||||
BOOL DVDOpenDir(const char*, DVDDirectory*);
|
||||
BOOL DVDReadDir(DVDDirectory*, DVDDirectoryEntry*);
|
||||
}
|
||||
|
||||
#endif
|
||||
+2
-2
@@ -30,7 +30,7 @@ void dComIfGp_setSelectItem(int);
|
||||
void getUsedCount__9HeapCheckCFv(void);
|
||||
void isEventBit__11dSv_event_cCFUs(void);
|
||||
char* strcpy(char*, const char*);
|
||||
int strcmp(char*, char*);
|
||||
int strcmp(const char*, const char*);
|
||||
void setBombNum__21dSv_player_item_max_cFUcUc(void);
|
||||
void func_803620AC(void);
|
||||
void func_803626BC(void);
|
||||
@@ -241,7 +241,7 @@ void dComIfGs_setMixItemIndex(int, u8);
|
||||
void dComIfGs_setSelectItemIndex(int, u8);
|
||||
u8 dComIfGs_getMixItemIndex(int);
|
||||
char* strcpy(char*, const char*);
|
||||
int strcmp(char*, char*);
|
||||
int strcmp(const char*, const char*);
|
||||
void setBombNum__21dSv_player_item_max_cFUcUc(void);
|
||||
void func_803620AC(void);
|
||||
void func_803626BC(void);
|
||||
|
||||
+45
-6
@@ -6,14 +6,12 @@
|
||||
|
||||
#include "dolphin/types.h"
|
||||
|
||||
#define OS_MESSAGE_NON_BLOCKING 0
|
||||
#define OS_MESSAGE_BLOCKING 1
|
||||
|
||||
/* TODO: more structs, and get rid of the ones that are faked! */
|
||||
|
||||
#define OS_MESSAGE_NON_BLOCKING 0
|
||||
#define OS_MESSAGE_BLOCKING 1
|
||||
|
||||
struct OSThread;
|
||||
struct OSMutex {
|
||||
u8 unk[24];
|
||||
};
|
||||
@@ -28,8 +26,22 @@ struct OSMutexQueue {
|
||||
struct OSMutex* next;
|
||||
};
|
||||
|
||||
struct OSThread {
|
||||
u8 unk[792];
|
||||
struct OSContext {
|
||||
u32 gpr[32];
|
||||
u32 cr;
|
||||
u32 lr;
|
||||
u32 ctr;
|
||||
u32 xer;
|
||||
double fpr[32];
|
||||
u32 padding_1;
|
||||
u32 fpscr;
|
||||
u32 srr0;
|
||||
u32 srr1;
|
||||
u16 mode;
|
||||
u16 state;
|
||||
u32 gqr[8];
|
||||
u32 padding_2;
|
||||
double ps[32];
|
||||
};
|
||||
|
||||
typedef void (*OSSwitchThreadCallback)(OSThread* from, OSThread* to);
|
||||
@@ -85,6 +97,33 @@ typedef enum OSSoundMode {
|
||||
__SOUND_MODE_FORCE_ENUM_U32 = 0xffffffff,
|
||||
} OSSoundMode;
|
||||
|
||||
typedef u16 OSThreadState;
|
||||
#define OS_THREAD_STATE_UNINITIALIZED 0
|
||||
#define OS_THREAD_STATE_READY 1
|
||||
#define OS_THREAD_STATE_RUNNING 2
|
||||
#define OS_THREAD_STATE_WAITING 4
|
||||
#define OS_THREAD_STATE_DEAD 8
|
||||
|
||||
struct OSThread {
|
||||
OSContext context;
|
||||
OSThreadState state;
|
||||
u16 attributes;
|
||||
s32 suspend_count;
|
||||
u32 effective_priority;
|
||||
u32 base_priority;
|
||||
void* exit_value;
|
||||
OSThreadQueue* queue;
|
||||
OSThreadLink link;
|
||||
OSThreadQueue join_queue;
|
||||
OSMutex* mutex;
|
||||
OSMutexQueue owned_mutexes;
|
||||
OSThreadLink active_threads_link;
|
||||
u8* stack_base;
|
||||
u8* stack_end;
|
||||
u8* error_code;
|
||||
void* data[2];
|
||||
};
|
||||
|
||||
extern "C" {
|
||||
s32 OSEnableScheduler(void);
|
||||
s32 OSDisableScheduler(void);
|
||||
@@ -101,7 +140,7 @@ void OSDetachThread(OSThread* thread);
|
||||
s32 OSResumeThread(OSThread* thread);
|
||||
void OSExitThread(void* exit_val);
|
||||
bool OSIsThreadSuspended(OSThread* thread);
|
||||
bool OSIsThreadTerminated(OSThread* thread);
|
||||
BOOL OSIsThreadTerminated(OSThread* thread);
|
||||
OSSwitchThreadCallback OSSetSwitchThreadCallback(OSSwitchThreadCallback* callback);
|
||||
|
||||
void OSInitMessageQueue(OSMessageQueue* queue, OSMessage* messages, int message_count);
|
||||
|
||||
+3
-3
@@ -220,11 +220,11 @@ extern JSUList<JKRFileLoader> lbl_80434354; // JKRFileLoader::sVolumeList
|
||||
extern u8 lbl_803CC218; // JKRArcFinder::__vt
|
||||
extern u8 lbl_803CC228; // JKRFileFinder::__vt
|
||||
extern u8 lbl_803CC208; // JKRDvdFinder::__vt
|
||||
extern u8 lbl_8039D150; // "/"
|
||||
extern const char lbl_8039D150[16]; // "/"
|
||||
extern u8 lbl_803CC1C8; // JKRFileLoader::__vt
|
||||
extern u8 lbl_804508C0; // "/" JKernel::rootPath$2498
|
||||
extern const char lbl_804508C0[16]; // "/" JKernel::rootPath$2498
|
||||
extern u8 lbl_80434348; // JKernel::@2182 (global destructor chain)
|
||||
extern u8 lbl_803D2D18[256]; // MSL_C.PPCEABI.bare.H::__lower_map
|
||||
extern const char lbl_803D2D18[256]; // MSL_C.PPCEABI.bare.H::__lower_map
|
||||
extern u8 lbl_803CC090; // JKRAssertHeap::__vt
|
||||
extern u8 lbl_80451398; // JKernel::DBfoundSize
|
||||
extern u8 lbl_8045139C; // JKernel::DBfoundOffset
|
||||
|
||||
Reference in New Issue
Block a user