summaryrefslogtreecommitdiff
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
parentc8b3ad05d245098ddae0f27ea5042fd47cec098e (diff)
100% eggSystem.cpp
-rw-r--r--config/SOUE01/splits.txt2
-rw-r--r--config/SOUE01/symbols.txt6
-rw-r--r--configure.py2
-rw-r--r--include/d/d_sys.h2
-rw-r--r--include/egg/core/eggPerformanceView.h26
-rw-r--r--include/egg/core/eggProcessMeter.h14
-rw-r--r--include/egg/core/eggSceneManager.h20
-rw-r--r--include/egg/core/eggSystem.h14
-rw-r--r--src/egg/core/eggSystem.cpp119
9 files changed, 181 insertions, 24 deletions
diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt
index 46128aad..ba189404 100644
--- a/config/SOUE01/splits.txt
+++ b/config/SOUE01/splits.txt
@@ -4897,7 +4897,7 @@ egg/core/eggUnk.cpp:
egg/core/eggSystem.cpp:
.text start:0x80497170 end:0x8049752C align:16
- .data start:0x8056EA58 end:0x8056EAC8
+ .data start:0x8056EA58 end:0x8056EA8C
.sbss start:0x80576780 end:0x80576788
egg/core/eggDisplay.cpp:
diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt
index b6e95124..f87b3a4b 100644
--- a/config/SOUE01/symbols.txt
+++ b/config/SOUE01/symbols.txt
@@ -39536,7 +39536,11 @@ __vt__Q23EGG7FrmHeap = .data:0x8056E9D0; // type:object size:0x30
__vt__Q23EGG10AssertHeap = .data:0x8056EA00; // type:object size:0x30
__vt__Q23EGG8Disposer = .data:0x8056EA30; // type:object size:0xC
__vt__Q23EGG6Thread = .data:0x8056EA40; // type:object size:0x18
-lbl_8056EA58 = .data:0x8056EA58; // type:object size:0x70
+@8336 = .data:0x8056EA58; // type:object size:0xC data:string
+@8337 = .data:0x8056EA64; // type:object size:0xC data:string
+@8338 = .data:0x8056EA70; // type:object size:0xD data:string
+@8339 = .data:0x8056EA80; // type:object size:0xA data:string
+lbl_8056EA8C = .data:0x8056EA8C; // type:object size:0x3C
__vt__Q23EGG7Display = .data:0x8056EAC8; // type:object size:0x20
__vt__Q23EGG10ColorFader = .data:0x8056EAE8; // type:object size:0x24
clear_z_TX__29@unnamed@eggAsyncDisplay_cpp@ = .data:0x8056EB20; // type:object size:0x40 scope:local align:32
diff --git a/configure.py b/configure.py
index b7fc4aa8..313daaba 100644
--- a/configure.py
+++ b/configure.py
@@ -1233,7 +1233,7 @@ config.libs = [
Object(Matching, "egg/core/eggDisposer.cpp"),
Object(Matching, "egg/core/eggThread.cpp"),
Object(NonMatching, "egg/core/eggUnk.cpp"),
- Object(NonMatching, "egg/core/eggSystem.cpp"),
+ Object(Matching, "egg/core/eggSystem.cpp"),
Object(Matching, "egg/core/eggDisplay.cpp"),
Object(Matching, "egg/core/eggColorFader.cpp"),
Object(Matching, "egg/core/eggAsyncDisplay.cpp"),
diff --git a/include/d/d_sys.h b/include/d/d_sys.h
index cf602af8..25b07596 100644
--- a/include/d/d_sys.h
+++ b/include/d/d_sys.h
@@ -3,7 +3,7 @@
#include "common.h"
#include "egg/core/eggHeap.h"
-#include "egg/core/eggProcessMeter.h"
+#include "egg/core/eggPerformanceView.h"
#include "egg/core/eggSystem.h"
#include "nw4r/ut/ut_Color.h"
diff --git a/include/egg/core/eggPerformanceView.h b/include/egg/core/eggPerformanceView.h
new file mode 100644
index 00000000..98cff48e
--- /dev/null
+++ b/include/egg/core/eggPerformanceView.h
@@ -0,0 +1,26 @@
+#ifndef EGG_PROCESS_METER_H
+#define EGG_PROCESS_METER_H
+
+#include "egg/core/eggThread.h"
+
+namespace EGG {
+
+class PerformanceView {
+public:
+ // vtable at 0x0
+ /* 0x08 */ virtual void measureBeginFrame() = 0;
+ /* 0x0C */ virtual void measureEndFrame() = 0;
+ /* 0x10 */ virtual void measureBeginRender() = 0;
+ /* 0x14 */ virtual void measureEndRender() = 0;
+ /* 0x18 */ virtual void callbackDrawSync(u16 token) = 0;
+ /* 0x1C */ virtual void unused() = 0;
+ /* 0x20 */ virtual void draw() = 0;
+ /* 0x24 */ virtual void setVisible(bool visible) = 0;
+ /* 0x28 */ virtual bool isVisible() = 0;
+};
+
+class ProcessMeter : public Thread, public PerformanceView {};
+
+}; // namespace EGG
+
+#endif // EGG_PROCESS_METER_H
diff --git a/include/egg/core/eggProcessMeter.h b/include/egg/core/eggProcessMeter.h
deleted file mode 100644
index 3641c43d..00000000
--- a/include/egg/core/eggProcessMeter.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef EGG_PROCESS_METER_H
-#define EGG_PROCESS_METER_H
-
-#include "egg/core/eggThread.h"
-
-namespace EGG {
-
-class PerformanceView {};
-
-class ProcessMeter : public Thread, public PerformanceView {};
-
-};
-
-#endif // EGG_PROCESS_METER_H
diff --git a/include/egg/core/eggSceneManager.h b/include/egg/core/eggSceneManager.h
new file mode 100644
index 00000000..6f9a4ed9
--- /dev/null
+++ b/include/egg/core/eggSceneManager.h
@@ -0,0 +1,20 @@
+#ifndef EGG_SCENE_MANAGER_H
+#define EGG_SCENE_MANAGER_H
+
+namespace EGG {
+
+class SceneManager {
+public:
+ // vtable at 0x0
+ /* 0x08 */ virtual void calc();
+ /* 0x0C */ virtual void draw();
+ /* 0x10 */ virtual void calcCurrentScene();
+ /* 0x14 */ virtual void calcCurrentFader();
+ /* 0x18 */ virtual void drawCurrentScene();
+ /* 0x1C */ virtual void drawCurrentFader();
+ /* 0x20 */ virtual void createDefaultFader();
+};
+
+} // namespace EGG
+
+#endif // EGG_SCENE_MANAGER_H
diff --git a/include/egg/core/eggSystem.h b/include/egg/core/eggSystem.h
index 634b7578..ef4a0968 100644
--- a/include/egg/core/eggSystem.h
+++ b/include/egg/core/eggSystem.h
@@ -4,6 +4,8 @@
#include "common.h"
#include "egg/core/eggVideo.h"
+struct OSBootInfo;
+
namespace EGG {
class Display;
@@ -35,18 +37,18 @@ public:
/* vt 0x38 */ virtual void initialize() = 0;
public:
- /* 0x04 */ u32 mRoot1HeapStart;
- /* 0x08 */ u32 mRoot1HeapEnd;
- /* 0x0C */ u32 mRoot2HeapStart;
- /* 0x10 */ u32 mRoot2HeapEnd;
+ /* 0x04 */ void *mRoot1HeapStart;
+ /* 0x08 */ void *mRoot1HeapEnd;
+ /* 0x0C */ void *mRoot2HeapStart;
+ /* 0x10 */ void *mRoot2HeapEnd;
/* 0x14 */ u32 mMemSize;
/* 0x18 */ Heap *mRootHeapMem1;
/* 0x1C */ Heap *mRootHeapMem2;
/* 0x20 */ Heap *mRootHeapDebug;
/* 0x24 */ Heap *mSystemHeap;
/* 0x28 */ Thread *mSystemThread;
- /* 0x2C */ u32 field_0x2C;
- /* 0x30 */ u32 mSystemHeapStart;
+ /* 0x2C */ OSBootInfo *mBootInfo;
+ /* 0x30 */ void *mSystemHeapStart;
/* 0x34 */ u32 mSystemHeapSize;
};
class BaseSystem {
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