mirror of
https://github.com/zeldaret/ss
synced 2026-05-24 07:10:53 -04:00
100% eggSystem.cpp
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user