summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorJonathan Wase <jonathan@familjenwase.se>2021-01-03 22:19:54 +0100
committerGitHub <noreply@github.com>2021-01-03 16:19:54 -0500
commit423fdadc32f8a70729bb86d07c0a30d9c1e324c5 (patch)
tree594f11e12478809b4de7b970f99da841c4497f14 /include
parent4e085c9c8489bfbb970c811572bfe68619834c74 (diff)
JKRDecomp OK (#58)
* JKRDecomp OK * clang-format tool * JKRThread cleanup and fixed suggestions Co-authored-by: Julgodis <> Co-authored-by: Pheenoh <pheenoh@gmail.com>
Diffstat (limited to 'include')
-rw-r--r--include/JSystem/JKernel/JKRDecomp/JKRDecomp.h44
-rw-r--r--include/JSystem/JKernel/JKRHeap/JKRHeap.h4
-rw-r--r--include/JSystem/JKernel/JKRThread/JKRThread.h61
-rw-r--r--include/os/OS.h6
-rw-r--r--include/variables.h7
5 files changed, 94 insertions, 28 deletions
diff --git a/include/JSystem/JKernel/JKRDecomp/JKRDecomp.h b/include/JSystem/JKernel/JKRDecomp/JKRDecomp.h
index 96e9996d15..5baf3800d2 100644
--- a/include/JSystem/JKernel/JKRDecomp/JKRDecomp.h
+++ b/include/JSystem/JKernel/JKRDecomp/JKRDecomp.h
@@ -4,30 +4,60 @@
#include "JSystem/JKernel/JKRThread/JKRThread.h"
#include "dolphin/types.h"
+class JKRAMCommand;
class JKRDecompCommand {
public:
+ typedef void (*AsyncCallback)(u32);
+
JKRDecompCommand();
~JKRDecompCommand();
+
+public:
+ /* 0x00 */ u32 field_0x0;
+ /* 0x04 */ u8* mSrcBuffer;
+ /* 0x08 */ u8* mDstBuffer;
+ /* 0x0C */ u32 mSrcLength;
+ /* 0x10 */ u32 mDstLength;
+ /* 0x14 */ AsyncCallback mCallback;
+ /* 0x18 */ JKRDecompCommand* mThis;
+ /* 0x1C */ OSMessageQueue* field_0x1c;
+ /* 0x20 */ s32 field_0x20;
+ /* 0x24 */ JKRAMCommand* mAMCommand;
+ /* 0x28 */ OSMessageQueue mMessageQueue;
+ /* 0x48 */ OSMessage mMessage;
};
+#define JKRDECOMP_SYNC_BLOCKING 0
+#define JKRDECOMP_SYNC_NON_BLOCKING 1
+
class JKRDecomp : public JKRThread {
private:
JKRDecomp(long);
- virtual ~JKRDecomp(void);
+ virtual ~JKRDecomp();
/* vt[03] */ virtual void* run(); /* override */
public:
- static void create(long);
- static void prepareCommand(u8*, u8*, u32, u32, void (*)(u32));
+ 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*);
- static void sync(JKRDecompCommand*, int);
- static void orderAsync(u8*, u8*, u32, u32, void (*)(u32));
- static void orderSync(u8*, u8*, u32, u32);
+ static bool sync(JKRDecompCommand*, int);
+ static JKRDecompCommand* orderAsync(u8*, u8*, u32, u32, JKRDecompCommand::AsyncCallback);
+ static bool orderSync(u8*, u8*, u32, u32);
static void decode(u8*, u8*, u32, u32);
static void decodeSZP(u8*, u8*, u32, u32);
static void decodeSZS(u8*, u8*, u32, u32);
- static void checkCompressed(u8*);
+ static Compression checkCompressed(u8*);
};
#endif
diff --git a/include/JSystem/JKernel/JKRHeap/JKRHeap.h b/include/JSystem/JKernel/JKRHeap/JKRHeap.h
index 8f52d54fb5..5af14cedce 100644
--- a/include/JSystem/JKernel/JKRHeap/JKRHeap.h
+++ b/include/JSystem/JKernel/JKRHeap/JKRHeap.h
@@ -150,4 +150,8 @@ inline void* operator new(u32 size, void* ptr) {
return ptr;
}
+inline void* JKRAllocFromHeap(JKRHeap* heap, u32 size, int alignment) {
+ return JKRHeap::alloc(size, alignment, heap);
+}
+
#endif \ No newline at end of file
diff --git a/include/JSystem/JKernel/JKRThread/JKRThread.h b/include/JSystem/JKernel/JKRThread/JKRThread.h
index 1d55d23554..d259de7d11 100644
--- a/include/JSystem/JKernel/JKRThread/JKRThread.h
+++ b/include/JSystem/JKernel/JKRThread/JKRThread.h
@@ -20,25 +20,52 @@ public:
void setCommon_mesgQueue(JKRHeap* heap, int message_count);
void setCommon_heapSpecified(JKRHeap* heap, u32 stack_size, int param_3);
- OSThread* getThreadRecord() { return this->mOSThread; }
+ OSThread* getThreadRecord() const { return mThreadRecord; }
+ void* getStack() const { return mStackMemory; }
+ u8 getLoadInfo() const { return field_0x60; }
+ JKRHeap* getCurrentHeap() const { return mCurrentHeap; }
+ JKRHeap* getCurrentHeapError() const { return mCurrentHeapError; }
+
+ void resume() { OSResumeThread(mThreadRecord); }
+ void sendMessage(OSMessage message) {
+ OSSendMessage(&mMessageQueue, message, OS_MESSAGE_NON_BLOCKING);
+ }
+ void sendMessageBlock(OSMessage message) {
+ OSSendMessage(&mMessageQueue, message, OS_MESSAGE_BLOCKING);
+ }
+ OSMessage waitMessage() {
+ OSMessage message;
+ OSReceiveMessage(&mMessageQueue, &message, OS_MESSAGE_NON_BLOCKING);
+ return message;
+ }
+ OSMessage waitMessageBlock() {
+ OSMessage message;
+ OSReceiveMessage(&mMessageQueue, &message, OS_MESSAGE_BLOCKING);
+ return message;
+ }
+ void jamMessageBlock(OSMessage message) {
+ OSJamMessage(&mMessageQueue, message, OS_MESSAGE_BLOCKING);
+ }
private:
- JSULink<JKRThread> mThreadListLink;
- JKRHeap* mHeap;
- OSThread* mOSThread;
- OSMessageQueue mQueue;
- OSMessage* mMessages;
- int mMessageCount;
- void* mStackPtr;
- u32 mStackSize;
- u8 field_0x60;
- u8 padding_0x61[3];
- u32 mCost;
- u32 mSwitchCount;
- u32 field_0x6c;
- u32 field_0x70;
- JKRHeap* field_0x74;
- JKRHeap* field_0x78;
+ /* 0x00 */ // vtable
+ /* 0x04 */ // JKRDisposer
+ /* 0x18 */ JSULink<JKRThread> mThreadListLink;
+ /* 0x28 */ JKRHeap* mHeap;
+ /* 0x2C */ OSThread* mThreadRecord;
+ /* 0x30 */ OSMessageQueue mMessageQueue;
+ /* 0x50 */ OSMessage* mMessages;
+ /* 0x54 */ s32 mMessageCount;
+ /* 0x58 */ void* mStackMemory;
+ /* 0x5C */ u32 mStackSize;
+ /* 0x60 */ u8 field_0x60;
+ /* 0x61 */ u8 padding_0x61[3];
+ /* 0x64 */ u32 mCost;
+ /* 0x68 */ u32 mSwitchCount;
+ /* 0x6C */ u32 field_0x6c;
+ /* 0x70 */ u32 field_0x70;
+ /* 0x74 */ JKRHeap* mCurrentHeap;
+ /* 0x78 */ JKRHeap* mCurrentHeapError;
public:
static void* start(void* param_1);
diff --git a/include/os/OS.h b/include/os/OS.h
index baacf7a496..98f54e3ab3 100644
--- a/include/os/OS.h
+++ b/include/os/OS.h
@@ -6,6 +6,9 @@
#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
@@ -103,7 +106,8 @@ OSSwitchThreadCallback OSSetSwitchThreadCallback(OSSwitchThreadCallback* callbac
void OSInitMessageQueue(OSMessageQueue* queue, OSMessage* messages, int message_count);
BOOL OSReceiveMessage(OSMessageQueue* queue, OSMessage message, int flags);
-void OSSendMessage(OSMessageQueue* queue, OSMessage message, int flags);
+BOOL OSSendMessage(OSMessageQueue* queue, OSMessage message, int flags);
+BOOL OSJamMessage(OSMessageQueue* queue, OSMessage message, int flags);
s32 OSGetConsoleType(void);
s32 OSGetResetCode(void);
diff --git a/include/variables.h b/include/variables.h
index aca609c7b3..c76d3e67c3 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -273,10 +273,11 @@ extern u8 lbl_8039D188; // "JKRAramArchive.cpp"
extern u8 lbl_803CC3E8; // JKRCompArchive::__vt
extern u8 lbl_8039D220; // "JKRCompArchive.cpp"
-extern u8 lbl_803CC460[32]; // JKRDecomp::sMessageBuffer
+extern OSMessage lbl_803CC460[8]; // JKRDecomp::sMessageBuffer
extern OSMessageQueue lbl_803CC480; // JKRDecomp::sMessageQueue
-extern u8 lbl_804514B0; // JKRDecomp::sDecompObject
-extern u8 lbl_803CC4A0; // JKRDecomp::__vt
+class JKRDecomp;
+extern JKRDecomp* lbl_804514B0; // JKRDecomp::sDecompObject
+extern u8 lbl_803CC4A0; // JKRDecomp::__vt
extern u8 lbl_80434378; // JKernel::@491 (global destructor chain)
extern u8 lbl_80451428; // JKernel::szpBuf