summaryrefslogtreecommitdiff
path: root/include/JSystem
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2022-01-09 17:33:14 -0800
committerTakaRikka <38417346+TakaRikka@users.noreply.github.com>2022-01-09 17:33:14 -0800
commit37146dfed130ad271f552fc1bbfff4dde7958d53 (patch)
tree26a14703979221daf1a642c9f3726cf7a93dd992 /include/JSystem
parent035a24092ee91139ab60d41fb5f8b4fb35053281 (diff)
JFramework mostly ok
Diffstat (limited to 'include/JSystem')
-rw-r--r--include/JSystem/JFramework/JFWDisplay.h53
-rw-r--r--include/JSystem/JFramework/JFWSystem.h28
-rw-r--r--include/JSystem/JUtility/JUTConsole.h18
-rw-r--r--include/JSystem/JUtility/JUTProcBar.h85
-rw-r--r--include/JSystem/JUtility/JUTVideo.h22
-rw-r--r--include/JSystem/JUtility/JUTXfb.h6
6 files changed, 183 insertions, 29 deletions
diff --git a/include/JSystem/JFramework/JFWDisplay.h b/include/JSystem/JFramework/JFWDisplay.h
index b7fd742e16..ec61c69e86 100644
--- a/include/JSystem/JFramework/JFWDisplay.h
+++ b/include/JSystem/JFramework/JFWDisplay.h
@@ -2,21 +2,45 @@
#define JFWDISPLAY_H
#include "JSystem/JKernel/JKRHeap.h"
+#include "JSystem/JUtility/JUTDirectPrint.h"
#include "JSystem/JUtility/JUTFader.h"
+#include "JSystem/JUtility/JUTProcBar.h"
#include "JSystem/JUtility/JUTXfb.h"
#include "JSystem/JUtility/TColor.h"
#include "dolphin/gx/GX.h"
#include "dolphin/types.h"
+typedef void (*UnkFunc)(void);
+
+class JFWAlarm : public OSAlarm {
+public:
+ JFWAlarm() : mLink(this) {}
+ ~JFWAlarm() {}
+ void createAlarm() { OSCreateAlarm(this); }
+ void cancelAlarm() { OSCancelAlarm(this); }
+ void removeLink() { sList.remove(&mLink); }
+ void appendLink() { sList.append(&mLink); }
+ OSThread* getThread() const { return mThread; }
+ void setThread(OSThread* thread) { mThread = thread; }
+
+ static JSUList<JFWAlarm> sList;
+
+public:
+ /* 0x28 */ OSThread* mThread;
+ /* 0x2C */ JSULink<JFWAlarm> mLink;
+};
+
class JFWDisplay {
public:
enum EDrawDone {
+ /* 0x0 */ UNK_METHOD_0 = 0,
/* 0x1 */ UNK_METHOD_1 = 1
};
/* 80272040 */ void ctor_subroutine(bool);
/* 802720F8 */ JFWDisplay(JKRHeap*, JUTXfb::EXfbNumber, bool);
- /* 802721DC */ void createManager(_GXRenderModeObj const*, JKRHeap*, JUTXfb::EXfbNumber, bool);
+ /* 802721DC */ static JFWDisplay* createManager(_GXRenderModeObj const*, JKRHeap*,
+ JUTXfb::EXfbNumber, bool);
/* 802722B8 */ void prepareCopyDisp();
/* 802723AC */ void drawendXfb_single();
/* 802723F4 */ void exchangeXfb_double();
@@ -58,23 +82,34 @@ public:
private:
/* 0x04 */ JUTFader* mFader;
/* 0x08 */ JUtility::TColor mClearColor;
- /* 0x0C */ u32 field_0xc;
+ /* 0x0C */ u32 mZClear;
/* 0x10 */ JUTXfb* mXfbManager;
- /* 0x14 */ u16 field_0x14;
+ /* 0x14 */ u16 mGamma;
/* 0x18 */ EDrawDone mDrawDoneMethod;
/* 0x1C */ u16 mFrameRate;
/* 0x20 */ u32 mTickRate;
- /* 0x24 */ bool field_0x24;
+ /* 0x24 */ bool mEnableAlpha;
+ /* 0x26 */ u16 mClamp;
/* 0x28 */ f32 mCombinationRatio;
/* 0x2C */ u32 field_0x2c;
- /* 0x30 */ int field_0x30;
- /* 0x34 */ int field_0x34;
+ /* 0x30 */ u32 field_0x30;
+ /* 0x34 */ u32 field_0x34;
/* 0x38 */ int field_0x38;
/* 0x3C */ int field_0x3c;
- /* 0x40 */ u8 field_0x40;
- /* 0x44 */ int field_0x44;
- /* 0x48 */ u16 field_0x48;
+ /* 0x40 */ bool field_0x40;
+ /* 0x44 */ UnkFunc field_0x44;
+ /* 0x48 */ s16 field_0x48;
/* 0x4A */ u8 field_0x4a;
};
+inline void JUTChangeFrameBuffer(void* buffer, u16 height, u16 width) {
+ JUTDirectPrint::getManager()->changeFrameBuffer(buffer, width, height);
+}
+
+static void JFWDrawDoneAlarm();
+static void JFWThreadAlarmHandler(OSAlarm*, OSContext*);
+static void JFWGXAbortAlarmHandler(OSAlarm*, OSContext*);
+static void waitForTick(u32, u16);
+static void diagnoseGpHang();
+
#endif /* JFWDISPLAY_H */
diff --git a/include/JSystem/JFramework/JFWSystem.h b/include/JSystem/JFramework/JFWSystem.h
index a618ea68f6..b8af555edf 100644
--- a/include/JSystem/JFramework/JFWSystem.h
+++ b/include/JSystem/JFramework/JFWSystem.h
@@ -1,12 +1,16 @@
#ifndef JFWSYSTEM_H
#define JFWSYSTEM_H
+#include "JSystem/JKernel/JKRExpHeap.h"
+#include "JSystem/JKernel/JKRThread.h"
#include "JSystem/JUtility/JUTConsole.h"
+#include "JSystem/JUtility/JUTDbPrint.h"
+#include "JSystem/JUtility/JUTResFont.h"
#include "dolphin/types.h"
struct JFWSystem {
struct CSetUpParam {
- static u32 maxStdHeaps;
+ static s32 maxStdHeaps;
static u32 sysHeapSize;
static u32 fifoBufSize;
static u32 aramAudioBufSize;
@@ -14,22 +18,22 @@ struct JFWSystem {
static u32 streamPriority;
static u32 decompPriority;
static u32 aPiecePriority;
- static void* systemFontRes;
- static void* renderMode;
- static u32 exConsoleBufferSize[1 + 1 /* padding */];
+ static ResFONT* systemFontRes;
+ static GXRenderModeObj* renderMode;
+ static u32 exConsoleBufferSize;
};
- /* 80271CD0 */ void firstInit();
- /* 80271D18 */ void init();
+ /* 80271CD0 */ static void firstInit();
+ /* 80271D18 */ static void init();
static JUTConsole* getSystemConsole() { return systemConsole; }
- static u8 rootHeap[4];
- static u8 systemHeap[4];
- static u8 mainThread[4];
- static u8 debugPrint[4];
- static u8 systemFont[4];
- static u8 systemConsoleManager[4];
+ static JKRExpHeap* rootHeap;
+ static JKRExpHeap* systemHeap;
+ static JKRThread* mainThread;
+ static JUTDbPrint* debugPrint;
+ static JUTResFont* systemFont;
+ static JUTConsoleManager* systemConsoleManager;
static JUTConsole* systemConsole;
};
diff --git a/include/JSystem/JUtility/JUTConsole.h b/include/JSystem/JUtility/JUTConsole.h
index 274e8de7e7..9377bf25fe 100644
--- a/include/JSystem/JUtility/JUTConsole.h
+++ b/include/JSystem/JUtility/JUTConsole.h
@@ -14,6 +14,12 @@ public:
UNK_TYPE2 = 2,
};
+ enum OutputFlag {
+ /* 0x0 */ OUTPUT_NONE,
+ /* 0x1 */ OUTPUT_OSREPORT,
+ /* 0x2 */ OUTPUT_CONSOLE
+ };
+
/* 802E73E4 */ static JUTConsole* create(unsigned int, void*, u32);
/* 802E7354 */ static JUTConsole* create(unsigned int, unsigned int, JKRHeap*);
/* 802E746C */ JUTConsole(unsigned int, unsigned int, bool);
@@ -46,6 +52,11 @@ public:
}
}
+ void setFont(JUTFont* p_font) {
+ mFont = p_font;
+ setFontSize(p_font->getWidth(), p_font->getHeight());
+ }
+
u32 getOutput() const { return mOutput; }
int getPositionY() const { return mPositionY; }
int getPositionX() const { return mPositionX; }
@@ -115,10 +126,13 @@ private:
/* 0x10 */ JUTConsole* mDirectConsole;
}; // Size: 0x14
-void JUTConsole_print_f_va_(JUTConsole*, const char*, va_list);
+extern "C" {
void JUTSetReportConsole(JUTConsole*);
-JUTConsole* JUTGetReportConsole();
void JUTSetWarningConsole(JUTConsole*);
+};
+
+void JUTConsole_print_f_va_(JUTConsole*, const char*, va_list);
+JUTConsole* JUTGetReportConsole();
JUTConsole* JUTGetWarningConsole();
void JUTReportConsole_f_va(const char*, va_list);
void JUTReportConsole_f(const char*, ...);
diff --git a/include/JSystem/JUtility/JUTProcBar.h b/include/JSystem/JUtility/JUTProcBar.h
index 1243be8ee6..79e3b3538d 100644
--- a/include/JSystem/JUtility/JUTProcBar.h
+++ b/include/JSystem/JUtility/JUTProcBar.h
@@ -1,6 +1,91 @@
#ifndef JUTPROCBAR_H
#define JUTPROCBAR_H
+#include "JSystem/JKernel/JKRHeap.h"
+#include "JSystem/JUtility/TColor.h"
#include "dolphin/types.h"
+class JUTProcBar {
+public:
+ class CTime {
+ public:
+ /* 802E7340 */ CTime();
+
+ void start(u8 param_0, u8 param_1, u8 param_2) {
+ field_0x10 = param_0;
+ field_0x11 = param_1;
+ field_0x12 = param_2;
+ mTick = OSGetTick();
+ }
+
+ void end() {
+ field_0x4 = ((OSGetTick() - mTick) * 8) / ((*(u32*)0x800000F8 >> 2) / 125000);
+ if (field_0x4 == 0) {
+ field_0x4 = 1;
+ }
+ }
+
+ /* 0x00 */ u32 mTick;
+ /* 0x04 */ u32 field_0x4;
+ /* 0x08 */ u32 field_0x8;
+ /* 0x0C */ u32 field_0xc;
+ /* 0x10 */ u8 field_0x10;
+ /* 0x11 */ u8 field_0x11;
+ /* 0x12 */ u8 field_0x12;
+ };
+
+ class CParamSet {
+ public:
+ /* 0x00 */ int mBarWidth;
+ /* 0x04 */ int mPosX;
+ /* 0x08 */ int mPosY;
+ /* 0x0C */ int mWidth;
+ /* 0x10 */ int mUserPosition;
+ };
+
+ /* 802E5888 */ JUTProcBar();
+ /* 802E599C */ ~JUTProcBar();
+ /* 802E59E0 */ static void create();
+ /* 802E5A28 */ static void destroy();
+ /* 802E5A60 */ static void clear();
+ /* 802E5B30 */ void bar_subroutine(int, int, int, int, int, int, int, JUtility::TColor,
+ JUtility::TColor);
+ /* 802E5CC4 */ void adjustMeterLength(u32, f32*, f32, f32, int*);
+ /* 802E5E08 */ void draw();
+ /* 802E5E3C */ void drawProcessBar();
+ /* 802E6FA0 */ void drawHeapBar();
+
+ void cpuStart() { mCpu.start(255, 129, 30); }
+ void cpuEnd() { mCpu.end(); }
+ void gpWaitStart() { mGpWait.start(255, 129, 30); }
+ void gpWaitEnd() { mGpWait.end(); }
+ void gpStart() { mGp.start(255, 129, 30); }
+ void gpEnd() { mGp.end(); }
+ void wholeLoopStart() { mWholeLoop.start(255, 129, 30); }
+ void wholeLoopEnd() { mWholeLoop.end(); }
+ void idleStart() { mIdle.start(255, 129, 30); }
+ void idleEnd() { mIdle.end(); }
+ void setCostFrame(int frame) { mCostFrame = frame; }
+
+ static JUTProcBar* getManager() { return sManager; }
+
+ static JUTProcBar* sManager;
+
+private:
+ /* 0x000 */ CTime mIdle;
+ /* 0x014 */ CTime mGp;
+ /* 0x028 */ CTime mCpu;
+ /* 0x03C */ CTime mGpWait;
+ /* 0x050 */ CTime mWholeLoop;
+ /* 0x064 */ CTime field_0x64[8];
+ /* 0x104 */ int mCostFrame;
+ /* 0x108 */ int field_0x108;
+ /* 0x10C */ bool mVisible;
+ /* 0x110 */ int field_0x110;
+ /* 0x114 */ CParamSet field_0x114;
+ /* 0x128 */ int field_0x128;
+ /* 0x12C */ JKRHeap* mWatchHeap;
+ /* 0x130 */ bool mHeapBarVisible;
+};
+
#endif /* JUTPROCBAR_H */
diff --git a/include/JSystem/JUtility/JUTVideo.h b/include/JSystem/JUtility/JUTVideo.h
index 537ee1dcf6..319a8f2c7c 100644
--- a/include/JSystem/JUtility/JUTVideo.h
+++ b/include/JSystem/JUtility/JUTVideo.h
@@ -6,6 +6,8 @@
#include "dolphin/types.h"
#include "dolphin/vi/vi.h"
+typedef u8 (*Pattern)[2];
+
class JUTVideo {
public:
typedef void (*Callback)(u32);
@@ -16,8 +18,8 @@ public:
// TODO: return types not confirmed
/* 802E4C54 */ static JUTVideo* createManager(GXRenderModeObj const*);
/* 802E4CAC */ static void destroyManager();
- /* 802E5088 */ void drawDoneStart();
- /* 802E50B0 */ void dummyNoDrawWait();
+ /* 802E5088 */ static void drawDoneStart();
+ /* 802E50B0 */ static void dummyNoDrawWait();
/* 802E5198 */ void setRenderMode(GXRenderModeObj const*);
/* 802E5210 */ void waitRetraceIfNeed();
@@ -25,10 +27,22 @@ public:
/* 802E5144 */ static void postRetraceProc(u32);
/* 802E50BC */ static void drawDoneCallback();
- u32 getFbWidth() const { return mRenderObj->fb_width; }
- u32 getEfbHeight() const { return mRenderObj->efb_height; }
+ u16 getFbWidth() const { return mRenderObj->fb_width; }
+ u16 getEfbHeight() const { return mRenderObj->efb_height; }
+ void getBounds(u16& width, u16& height) const {
+ width = (u16)getFbWidth();
+ height = (u16)getEfbHeight();
+ }
+ u16 getXfbHeight() const { return mRenderObj->xfb_height; }
+ u32 isAntiAliasing() const { return mRenderObj->antialiasing; }
+ Pattern getSamplePattern() const { return mRenderObj->sample_pattern; }
+ u8* getVFilter() const { return mRenderObj->vfilter; }
+ OSMessageQueue* getMessageQueue() { return &mMessageQueue; }
static JUTVideo* getManager() { return sManager; }
+ static OSTick getVideoInterval() { return sVideoInterval; }
+ static OSTick getVideoLastTick() { return sVideoLastTick; }
+
GXRenderModeObj* getRenderMode() const { return mRenderObj; }
private:
diff --git a/include/JSystem/JUtility/JUTXfb.h b/include/JSystem/JUtility/JUTXfb.h
index 240fb27a08..5d3933cc71 100644
--- a/include/JSystem/JUtility/JUTXfb.h
+++ b/include/JSystem/JUtility/JUTXfb.h
@@ -25,7 +25,7 @@ public:
s32 getBufferNum() const { return mBufferNum; }
s16 getDrawnXfbIndex() const { return mDrawnXfbIndex; }
- s16 getDrawningXfbIndex() const { return mDrawingXfbIndex; }
+ s16 getDrawingXfbIndex() const { return mDrawingXfbIndex; }
s16 getDisplayingXfbIndex() const { return mDisplayingXfbIndex; }
s32 getSDrawingFlag() const { return mSDrawingFlag; }
@@ -35,7 +35,7 @@ public:
return NULL;
}
- void* getDrawningXfb() const {
+ void* getDrawingXfb() const {
if (mDrawingXfbIndex >= 0)
return mBuffer[mDrawingXfbIndex];
return NULL;
@@ -49,6 +49,8 @@ public:
void setDisplayingXfbIndex(s16 index) { mDisplayingXfbIndex = index; }
void setSDrawingFlag(s32 flag) { mSDrawingFlag = flag; }
+ void setDrawnXfbIndex(s16 index) { mDrawnXfbIndex = index; }
+ void setDrawingXfbIndex(s16 index) { mDrawingXfbIndex = index; }
static JUTXfb* getManager() { return sManager; }