summaryrefslogtreecommitdiff
path: root/src/egg/core/eggSystem.cpp
diff options
context:
space:
mode:
authorSean Miller <seanmiller999@gmail.com>2026-04-09 23:32:06 +0100
committerSean Miller <seanmiller999@gmail.com>2026-04-09 23:32:06 +0100
commit2b3486b05fa356a71b3292806bcff2ddc7713aeb (patch)
tree5908233b09a221d76563ab3b0994774d023994f5 /src/egg/core/eggSystem.cpp
parentc8b3ad05d245098ddae0f27ea5042fd47cec098e (diff)
100% eggSystem.cpp
Diffstat (limited to 'src/egg/core/eggSystem.cpp')
-rw-r--r--src/egg/core/eggSystem.cpp119
1 files changed, 119 insertions, 0 deletions
diff --git a/src/egg/core/eggSystem.cpp b/src/egg/core/eggSystem.cpp
new file mode 100644
index 00000000..3783af8c
--- /dev/null
+++ b/src/egg/core/eggSystem.cpp
@@ -0,0 +1,119 @@
+#include "egg/core/eggSystem.h"
+
+#include "egg/audio/eggAudioMgr.h"
+#include "egg/core/eggController.h"
+#include "egg/core/eggDisplay.h"
+#include "egg/core/eggExpHeap.h"
+#include "egg/core/eggHeap.h"
+#include "egg/core/eggPerformanceView.h"
+#include "egg/core/eggSceneManager.h"
+
+#include "rvl/OS.h"
+
+#define MB_TO_BYTES(mb) ((mb) * 1024 * 1024)
+#define RETAIL_MEM2_SIZE MB_TO_BYTES(64)
+
+namespace EGG {
+
+ConfigurationData *BaseSystem::mConfigData;
+
+void ConfigurationData::initMemory() {
+ void *pMEM1ArenaLo = OSGetMEM1ArenaLo();
+ void *pMEM1ArenaHi = OSGetMEM1ArenaHi();
+ void *pMEM2ArenaLo = OSGetMEM2ArenaLo();
+ void *pMEM2ArenaHi = OSGetMEM2ArenaHi();
+
+ pMEM1ArenaLo = ROUND_UP_PTR(pMEM1ArenaLo, 32);
+ pMEM1ArenaHi = ROUND_DOWN_PTR(pMEM1ArenaHi, 32);
+ pMEM2ArenaLo = ROUND_UP_PTR(pMEM2ArenaLo, 32);
+ pMEM2ArenaHi = ROUND_DOWN_PTR(pMEM2ArenaHi, 32);
+
+ mBootInfo = &OS_BOOT_INFO;
+ mSystemHeapStart = pMEM1ArenaLo;
+ mRoot1HeapStart = pMEM1ArenaLo;
+ mRoot1HeapEnd = pMEM1ArenaHi;
+ mRoot2HeapStart = pMEM2ArenaLo;
+ mRoot2HeapEnd = pMEM2ArenaHi;
+ mMemSize = mBootInfo->physMemSize;
+
+ OSSetMEM1ArenaLo(pMEM1ArenaHi);
+ OSSetMEM1ArenaHi(pMEM1ArenaHi);
+ OSSetMEM2ArenaLo(pMEM2ArenaHi);
+ OSSetMEM2ArenaHi(pMEM2ArenaHi);
+
+ Heap::initialize();
+
+ void *root1HeapPtr = mRoot1HeapStart;
+ u32 root1HeapSize = (u32)mRoot1HeapEnd - (u32)mRoot1HeapStart;
+
+ void *root2HeapPtr = mRoot2HeapStart;
+ u32 root2HeapSize = (u32)mRoot2HeapEnd - (u32)mRoot2HeapStart;
+
+ u32 debugHeapSize;
+ if (root2HeapSize >= RETAIL_MEM2_SIZE) {
+ debugHeapSize = RETAIL_MEM2_SIZE;
+ root2HeapSize = OSRoundDown32B(root2HeapSize - RETAIL_MEM2_SIZE);
+ } else {
+ debugHeapSize = 0;
+ }
+ void *debugHeapPtr = (void *)((u32)root2HeapPtr + root2HeapSize);
+
+ mRootHeapMem1 = ExpHeap::create(root1HeapPtr, root1HeapSize, 0);
+ mRootHeapMem1->setName("EGGRootMEM1");
+
+ mRootHeapMem2 = ExpHeap::create(root2HeapPtr, root2HeapSize, 0);
+ mRootHeapMem2->setName("EGGRootMEM2");
+
+ if (debugHeapSize > 0) {
+ mRootHeapDebug = ExpHeap::create(debugHeapPtr, debugHeapSize, 0);
+ mRootHeapDebug->setName("EGGRootDebug");
+ } else {
+ mRootHeapDebug = nullptr;
+ }
+
+ mSystemHeap = ExpHeap::create(mSystemHeapSize, mRootHeapMem1, 0);
+ mSystemHeap->setName("EGGSystem");
+ mSystemHeap->becomeCurrentHeap();
+}
+
+void ConfigurationData::run() {
+ CoreControllerMgr *pControllerMgr = CoreControllerMgr::instance();
+
+ while (true) {
+ getDisplay()->beginFrame();
+
+ onBeginFrame();
+
+ getPerfView()->measureBeginFrame();
+
+ pControllerMgr->beginFrame();
+
+ getDisplay()->beginRender();
+
+ getPerfView()->measureBeginRender();
+
+ getSceneMgr()->draw();
+
+ getPerfView()->draw();
+
+ getPerfView()->measureEndRender();
+
+ getDisplay()->endRender();
+
+ getSceneMgr()->calc();
+
+ pControllerMgr->endFrame();
+
+ if (getAudioMgr()) {
+ getAudioMgr()->calc();
+ }
+
+ getDisplay()->endFrame();
+
+ onEndFrame();
+
+ getPerfView()->measureEndFrame();
+ }
+}
+
+} // namespace EGG