diff options
| author | Sean Miller <seanmiller999@gmail.com> | 2026-04-06 16:50:38 +0100 |
|---|---|---|
| committer | Sean Miller <seanmiller999@gmail.com> | 2026-04-06 16:50:38 +0100 |
| commit | 97d808fe06b024aa79e17d23c744003085dad5f6 (patch) | |
| tree | 272cbdf6822cc70023978980364fba8e326363fb /include | |
| parent | f2aaeac6c68dc126286035db3e6da43bacdd01e1 (diff) | |
100% match for d_sys
Diffstat (limited to 'include')
| -rw-r--r-- | include/d/d_sys.h | 17 | ||||
| -rw-r--r-- | include/egg/core/eggController.h | 4 | ||||
| -rw-r--r-- | include/egg/core/eggDisplay.h | 4 | ||||
| -rw-r--r-- | include/egg/core/eggDvdFile.h | 2 | ||||
| -rw-r--r-- | include/egg/core/eggSystem.h | 448 | ||||
| -rw-r--r-- | include/egg/core/eggVideo.h | 4 | ||||
| -rw-r--r-- | include/egg/core/eggXfbManager.h | 1 | ||||
| -rw-r--r-- | include/rvl/WPAD/WPAD.h | 1 |
8 files changed, 415 insertions, 66 deletions
diff --git a/include/d/d_sys.h b/include/d/d_sys.h index 61135bc4..f8fbc979 100644 --- a/include/d/d_sys.h +++ b/include/d/d_sys.h @@ -2,11 +2,21 @@ #define D_SYS_H #include "common.h" +#include "egg/core/eggAsyncDisplay.h" #include "egg/core/eggHeap.h" #include "egg/core/eggSystem.h" #include "nw4r/ut/ut_Color.h" -typedef EGG::TSystem<EGG::Video, EGG::Display, EGG::XfbManager, EGG::SimpleAudioMgr, EGG::SceneManager, EGG::PerformanceView> System; +#define ROUND_UP_4KB(x) (((u32)(x) + 4096 - 1) & ~(4096 - 1)) + +typedef EGG::TSystem< + EGG::Video, + EGG::AsyncDisplay, + EGG::XfbManager, + EGG::SimpleAudioMgr, + EGG::SceneManager, + EGG::PerformanceView +> System; class dSndMgr_c; @@ -38,6 +48,11 @@ public: namespace dSystem { +void *s_OrgMEM1ArenaLo; +void *s_NewMEM1ArenaLo; +void *s_OrgMEM1ArenaHi; +void *s_NewMEM1ArenaHi; + void fixHeaps(); }; diff --git a/include/egg/core/eggController.h b/include/egg/core/eggController.h index a790b667..8dd447a4 100644 --- a/include/egg/core/eggController.h +++ b/include/egg/core/eggController.h @@ -346,6 +346,10 @@ public: sConnectCallback = cb; } + static void setWPADWorkSize(u32 size) { + sWPADWorkSize = size; + } + private: CoreControllerMgr(); diff --git a/include/egg/core/eggDisplay.h b/include/egg/core/eggDisplay.h index cdf2fe7a..986cfcda 100644 --- a/include/egg/core/eggDisplay.h +++ b/include/egg/core/eggDisplay.h @@ -58,6 +58,10 @@ public: mClearColor = color; } + u32 getClearZ() { + return mClearZ; + } + public: static u32 sTickPeriod; }; diff --git a/include/egg/core/eggDvdFile.h b/include/egg/core/eggDvdFile.h index ac36ae4e..6b511e2a 100644 --- a/include/egg/core/eggDvdFile.h +++ b/include/egg/core/eggDvdFile.h @@ -39,7 +39,7 @@ public: /* vt 0x24 */ virtual bool open(const char *path, void *); public: - void initialize(); + static void initialize(); DvdFile(); void initiate(); s32 sync(); diff --git a/include/egg/core/eggSystem.h b/include/egg/core/eggSystem.h index 97682fa3..c1686d2e 100644 --- a/include/egg/core/eggSystem.h +++ b/include/egg/core/eggSystem.h @@ -2,31 +2,336 @@ #define EGG_SYSTEM_H #include "common.h" +#include "egg/core/eggController.h" +#include "egg/core/eggDisplay.h" +#include "egg/core/eggDvdFile.h" #include "egg/core/eggGraphicsFifo.h" #include "egg/core/eggHeap.h" +#include "egg/core/eggVideo.h" +#include "egg/core/eggXfbManager.h" +#include "rvl/WPAD.h" +#include "toBeSorted/d_exception.h" + +namespace { + +// TODO Determine better names (+ location?) for this render mode set + +const GXRenderModeObj gRMO_Unk1 = { + 0, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 25, // viXOrigin + 12, // viYOrigin + 670, // viWidth + 456, // viHeight + 1, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Unk2 = { + 2, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 25, // viXOrigin + 12, // viYOrigin + 670, // viWidth + 456, // viHeight + 0, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Unk3 = { + 4, // tvInfo + 608, // fbWidth + 456, // efbHeight + 542, // xfbHeight + 27, // viXOrigin + 16, // viYOrigin + 666, // viWidth + 542, // viHeight + 1, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Unk4 = { + 20, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 25, // viXOrigin + 12, // viYOrigin + 670, // viWidth + 456, // viHeight + 1, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Unk5 = { + 22, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 25, // viXOrigin + 12, // viYOrigin + 670, // viWidth + 456, // viHeight + 0, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Unk6 = { + 0, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 17, // viXOrigin + 12, // viYOrigin + 686, // viWidth + 456, // viHeight + 1, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Unk7 = { + 2, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 17, // viXOrigin + 12, // viYOrigin + 686, // viWidth + 456, // viHeight + 0, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Unk8 = { + 4, // tvInfo + 608, // fbWidth + 456, // efbHeight + 542, // xfbHeight + 19, // viXOrigin + 16, // viYOrigin + 682, // viWidth + 542, // viHeight + 1, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Unk9 = { + 20, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 17, // viXOrigin + 12, // viYOrigin + 686, // viWidth + 456, // viHeight + 1, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Unk10 = { + 22, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 17, // viXOrigin + 12, // viYOrigin + 686, // viWidth + 456, // viHeight + 0, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; -#include "rvl/SC.h" +const EGG::Video::RenderModeObjSet gUnkRenderModeObjSet = { + {&gRMO_Unk1, &gRMO_Unk2, &gRMO_Unk3, + &gRMO_Unk4, &gRMO_Unk5, &gRMO_Unk6, + &gRMO_Unk7, &gRMO_Unk8, &gRMO_Unk9, + &gRMO_Unk10} +}; -// Ported from https://github.com/snailspeed3/mkw/blob/master/lib/egg/core/eggSystem.hpp +} namespace EGG { -class Display; -class Heap; -class PerformanceView; +// TODO Proper definition of PerformanceView +class PerformanceView { +public: + u8 placeholder[0x4c]; + /* 0x4c */ u32 _4c; +}; + class SceneManager; class SimpleAudioMgr; -class Thread; -class Video; -class XfbManager; -class BaseSystem { +class ConfigurationData { public: - static BaseSystem *sSystem; - -public: - inline BaseSystem() : mSysHeapSize(0x97000), mGraphicsFifoSize(0x80000), mRenderMode(nullptr) {} + inline ConfigurationData() : mSystemHeapSize(0x89000) {} + // vtable at 0x0 /* vt 0x08 */ virtual Video *getVideo() = 0; /* vt 0x0C */ virtual Heap *getSysHeap() = 0; /* vt 0x10 */ virtual Display *getDisplay() = 0; @@ -42,34 +347,51 @@ public: /* vt 0x38 */ virtual void initialize() = 0; public: - /* 0x04 */ void *mMEM1ArenaLo; - /* 0x08 */ void *mMEM1ArenaHi; - /* 0x0C */ void *mMEM2ArenaLo; - /* 0x10 */ void *mMEM2ArenaHi; - /* 0x14 */ u32 mMemorySize; + /* 0x04 */ u32 mRoot1HeapStart; + /* 0x08 */ u32 mRoot1HeapEnd; + /* 0x0C */ u32 mRoot2HeapStart; + /* 0x10 */ u32 mRoot2HeapEnd; + /* 0x14 */ u32 mMemSize; /* 0x18 */ Heap *mRootHeapMem1; /* 0x1C */ Heap *mRootHeapMem2; /* 0x20 */ Heap *mRootHeapDebug; - /* 0x24 */ Heap *mSysHeap; - /* 0x28 */ Thread *mThread; - /* 0x2C */ void *_2c; - /* 0x30 */ void *_30; - /* 0x34 */ u32 mSysHeapSize; - /* 0x38 */ u32 mGraphicsFifoSize; - /* 0x3C */ GXRenderModeObj *mRenderMode; + /* 0x24 */ Heap *mSystemHeap; + /* 0x28 */ Thread *mSystemThread; + /* 0x2C */ u32 field_0x2C; + /* 0x30 */ u32 mSystemHeapStart; + /* 0x34 */ u32 mSystemHeapSize; +}; +class BaseSystem { +public: + static ConfigurationData *mConfigData; + + static XfbManager *getXfbMgr() { + return mConfigData->getXfbMgr(); + } + static Display *getDisplay() { + return mConfigData->getDisplay(); + } + static Video *getVideo() { + return mConfigData->getVideo(); + } }; -template <class tVideo, class tDisplay, class tXfbMgr, class tAudioMgr, class tSceneMgr, class tPerfView> -class TSystem : public BaseSystem { +template <class TVideo, class TDisplay, class TXfbManager, class TAudioManager, class TSceneManager, class TPerfView> +class TSystem : public ConfigurationData { public: - inline TSystem() : BaseSystem() {} + inline TSystem() : mGraphicsFifoSize(0x80000), mRenderMode() {} + + void onBeginFrame() override {} + void onEndFrame() override {} + + void initRenderMode() override {} Video *getVideo() override { return static_cast<Video *>(mVideo); } Heap *getSysHeap() override { - return mSysHeap; + return mSystemHeap; } Display *getDisplay() override { @@ -81,7 +403,10 @@ public: } PerformanceView *getPerfView() override { - return static_cast<PerformanceView *>(mPerfView); + if (!mPerfView) + return mPerfView; + // TODO remove cast hack if/when more is known about PerformanceView + return static_cast<PerformanceView *>((void *)&mPerfView->_4c); } SceneManager *getSceneMgr() override { @@ -92,55 +417,52 @@ public: return static_cast<SimpleAudioMgr *>(mAudioMgr); } - void onBeginFrame() override {} - void onEndFrame() override {} - - void initRenderMode() override {} - void initialize() override { - // DVDInit(); - // SCInit(); - - // initMemory(); - // initRenderMode(); + DVDInit(); + SCInit(); - // GraphicsFifo::create(mGraphicsFifoSize, nullptr); + initMemory(); - // mVideo = new tVideo(mRenderMode, nullptr); + Heap *heap = Heap::sCurrentHeap; - // mXfbMgr = new tXfbMgr(nullptr); - // for (int i = 0; i < 2; ++i) { - // mXfbMgr->attach(new Xfb(mRootHeapMem2)); - // } + GraphicsFifo::create(mGraphicsFifoSize, heap); + mHeap::createAssertHeap(mRootHeapMem1); - // mDisplay = new tDisplay(1); + mVideo = new (heap) TVideo(&gUnkRenderModeObjSet); - // Thread::initialize(); - // mThread = new Thread(OSGetCurrentThread(), 4); + mXfbMgr = new (heap) TXfbManager(); + for (int i = 0; i < 2; ++i) { + mXfbMgr->attach(new (heap) Xfb(mRootHeapMem2)); + } - // mPerfView = new tPerfView(true); + mDisplay = new (heap) TDisplay(1); + mDisplay->setClearColor(nw4r::ut::Color::BLACK); + mDisplay->clearEFB(); - // DvdFile::initialize(); + Thread::initialize(); + mSystemThread = new (heap) Thread(OSGetCurrentThread(), 4); - // CoreControllerMgr::createStaticInstance(); - // GCControllerMgr::createStaticInstance(); + DvdFile::initialize(); - // Exception_create(0x40, 0x20, 4, nullptr, 1); + CoreControllerMgr::setWPADWorkSize(WPADGetWorkMemorySize() + 228); + CoreControllerMgr::createInstance(); - // mSceneMgr = new tSceneMgr(nullptr); + exceptionCreate(heap); - // mRootHeapMem1->becomeCurrentHeap(); + BaseSystem::mConfigData->getSysHeap()->mFlag.setBit(0); - // mAudioMgr = new tAudioMgr(); + mHeap::setCurrentHeap(mHeap::g_assertHeap); } public: - /* 0x40 */ tAudioMgr *mAudioMgr; - /* 0x44 */ tVideo *mVideo; - /* 0x48 */ tXfbMgr *mXfbMgr; - /* 0x4c */ tDisplay *mDisplay; - /* 0x50 */ tPerfView *mPerfView; - /* 0x54 */ tSceneMgr *mSceneMgr; + /* 0x38 */ u32 mGraphicsFifoSize; + /* 0x3C */ GXRenderModeObj *mRenderMode; + /* 0x40 */ TAudioManager *mAudioMgr; + /* 0x44 */ TVideo *mVideo; + /* 0x48 */ TXfbManager *mXfbMgr; + /* 0x4c */ TDisplay *mDisplay; + /* 0x50 */ TPerfView *mPerfView; + /* 0x54 */ TSceneManager *mSceneMgr; }; } // namespace EGG diff --git a/include/egg/core/eggVideo.h b/include/egg/core/eggVideo.h index cfaf7336..87ebaea4 100644 --- a/include/egg/core/eggVideo.h +++ b/include/egg/core/eggVideo.h @@ -20,7 +20,9 @@ public: /* 0x08 */ u32 mConfiguredTime; public: - Video() : pRenderMode(0), mFlag(), mConfiguredTime(){}; + Video() : pRenderMode(0), mFlag(0), mConfiguredTime() {}; + Video(const RenderModeObjSet *set) : pRenderMode(0), mFlag(0), mConfiguredTime() { initialize(nullptr, set); }; + void initialize(GXRenderModeObj *, const RenderModeObjSet *); GXRenderModeObj *configure(GXRenderModeObj *, const RenderModeObjSet *); static u32 getTickPerVRetrace(u32 tvFormat); diff --git a/include/egg/core/eggXfbManager.h b/include/egg/core/eggXfbManager.h index 76ba56dc..6291864e 100644 --- a/include/egg/core/eggXfbManager.h +++ b/include/egg/core/eggXfbManager.h @@ -15,6 +15,7 @@ public: /* 0xC */ u8 mNumXfbs; // Total number of Xfbs ever attached /* 0xD */ u8 mNumXfbs_Copy; // Unsure of purpose yet, but showing wont proceed until its under 3 public: + XfbManager() : mNextXfb(), mToCopyXfb(), mToShowXfb(), mNumXfbs(), mNumXfbs_Copy() {} bool isRegisterd(Xfb &xfb) const; // yes. this is correct spelling bool attach(Xfb *xfb); void copyEFB(bool); diff --git a/include/rvl/WPAD/WPAD.h b/include/rvl/WPAD/WPAD.h index 669874ee..0a36fd74 100644 --- a/include/rvl/WPAD/WPAD.h +++ b/include/rvl/WPAD/WPAD.h @@ -571,6 +571,7 @@ BOOL WPADStopSimpleSync(void); BOOL WPADCancelSyncDevice(void); WPADSimpleSyncCallback *WPADSetSimpleSyncCallback(WPADSimpleSyncCallback *cb); void WPADRegisterAllocator(WPADAllocFunc *alloc, WPADFreeFunc *free); +u32 WPADGetWorkMemorySize(void); WPADLibStatus WPADGetStatus(void); u8 WPADGetRadioSensitivity(WPADChannel chan); void WPADGetAddress(WPADChannel chan, BD_ADDR_PTR addr); |
