diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2022-01-09 17:33:14 -0800 |
|---|---|---|
| committer | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2022-01-09 17:33:14 -0800 |
| commit | 37146dfed130ad271f552fc1bbfff4dde7958d53 (patch) | |
| tree | 26a14703979221daf1a642c9f3726cf7a93dd992 /include/JSystem | |
| parent | 035a24092ee91139ab60d41fb5f8b4fb35053281 (diff) | |
JFramework mostly ok
Diffstat (limited to 'include/JSystem')
| -rw-r--r-- | include/JSystem/JFramework/JFWDisplay.h | 53 | ||||
| -rw-r--r-- | include/JSystem/JFramework/JFWSystem.h | 28 | ||||
| -rw-r--r-- | include/JSystem/JUtility/JUTConsole.h | 18 | ||||
| -rw-r--r-- | include/JSystem/JUtility/JUTProcBar.h | 85 | ||||
| -rw-r--r-- | include/JSystem/JUtility/JUTVideo.h | 22 | ||||
| -rw-r--r-- | include/JSystem/JUtility/JUTXfb.h | 6 |
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; } |
