1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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
|