diff options
| author | Sean Miller <seanmiller999@gmail.com> | 2026-03-22 22:07:56 +0000 |
|---|---|---|
| committer | Sean Miller <seanmiller999@gmail.com> | 2026-03-22 22:07:56 +0000 |
| commit | 2bcf403ea0c86dbdcb0ded8c81984741aadb08f7 (patch) | |
| tree | 56d21b0095edbb250081e9cd00f2dd6eb8d43de9 /src/d/d_sys.cpp | |
| parent | dd1c8ac8c2ff91e84272fc2187a5213fef481def (diff) | |
dSys: create() and execute() to 99% each
Diffstat (limited to 'src/d/d_sys.cpp')
| -rw-r--r-- | src/d/d_sys.cpp | 294 |
1 files changed, 294 insertions, 0 deletions
diff --git a/src/d/d_sys.cpp b/src/d/d_sys.cpp index e69de29b..fe5a4281 100644 --- a/src/d/d_sys.cpp +++ b/src/d/d_sys.cpp @@ -0,0 +1,294 @@ +#include "c/c_counter.h" +#include "c/c_math.h" +#include "d/d_cursor_hit_check.h" +#include "d/d_dvd.h" +#include "d/d_dvd_unk.h" +#include "d/d_gfx.h" +#include "d/d_hbm.h" +#include "d/d_heap.h" +#include "d/d_heap_alloc.h" +#include "d/d_pad.h" +#include "d/d_reset.h" +#include "d/d_scene.h" +#include "d/d_state.h" +#include "d/d_sys.h" +#include "d/d_sys_init.h" +#include "d/flag/flag_managers.h" +#include "d/lyt/d_lyt_battery.h" +#include "d/lyt/d_lyt_system_window.h" +#include "d/snd/d_snd_mgr.h" +#include "egg/core/eggExpHeap.h" +#include "egg/core/eggAssertHeap.h" +#include "egg/core/eggSystem.h" +#include "egg/core/eggVideo.h" +#include "f/f_manager.h" +#include "m/m_dvd.h" +#include "m/m_heap.h" +#include "m/m_pad.h" +#include "m/m_video.h" +#include "m/m3d/m3d.h" +#include "nw4r/ut/ut_Color.h" +#include "toBeSorted/arc_callback_handler.h" +#include "toBeSorted/d_d3d.h" +#include "toBeSorted/file_manager.h" +#include "toBeSorted/nand_request_thread.h" +#include "toBeSorted/save_manager.h" +#include "toBeSorted/unk_save_time.h" +#include "toBeSorted/arc_managers/current_stage_arc_manager.h" +#include "toBeSorted/arc_managers/layout_arc_manager.h" +#include "toBeSorted/arc_managers/oarc_manager.h" + +#include "rvl/OS.h" + +EGG::TSystem<EGG::Video, EGG::Display, EGG::XfbManager, EGG::SimpleAudioMgr, EGG::SceneManager, EGG::PerformanceView> SysConfig; + +void dSys_c::setBlack(bool on) { + + EGG::Video *video = EGG::BaseSystem::sSystem->getVideo(); + + if (video->mFlag.onBit(0) != on) { + create(); + } +} + +char *dummy = "オーディオヒープ"; // "Audio heap" +extern u32 lbl_80574FA0; +extern u32 lbl_80574FA4; + +void dSys_c::create() { + EGG::Heap *pRootHeapMem1; + EGG::Heap *pRootHeapMem2; + EGG::Heap *pCmdHeap; + EGG::Heap *pExpHeap; + + dHeapAllocator::initCallbacks(); + + ms_configuration_p = &SysConfig; + EGG::BaseSystem::sSystem = &SysConfig; + + ms_configuration_p->initialize(); + + pRootHeapMem1 = EGG::BaseSystem::sSystem->mRootHeapMem1; + ms_RootHeapMem1 = mHeap::createExpHeap(-1, pRootHeapMem1, "dSys_c::RootHeapMEM1", 32, mHeap::OPT_4); + pRootHeapMem1->mFlag.setBit(0); + + pRootHeapMem2 = EGG::BaseSystem::sSystem->mRootHeapMem2; + ms_RootHeapMem2 = mHeap::createExpHeap(-1, pRootHeapMem2, "dSys_c::RootHeapMEM2", 32, mHeap::OPT_4); + pRootHeapMem2->mFlag.setBit(0); + + EGG::Heap *heapMem1 = ms_RootHeapMem1; + EGG::Heap *heapMem2 = ms_RootHeapMem2; + + mVideo::create(); + + mHeap::createDylinkHeap(0x1c8000, heapMem1); + mHeap::createGameHeap1(0x250000, heapMem1); + dHeap::createLayoutHeap(0x1e0000, heapMem1); + mHeap::createCommandHeap(0x8000, heapMem1); + dHeap::createWork1Heap(0x4c8000, heapMem1); + dHeap::createWorkExHeap(0x480000, heapMem1); + dHeap::createLayoutExHeap(0xc8000, heapMem2); + dHeap::createLayoutEx2Heap(0x38000, heapMem1); + mHeap::createArchiveHeap(0xb85000, heapMem2); + dHeap::createLayoutResHeap(0x4e7000, heapMem2); + dHeap::createWork2Heap(0xb08000, heapMem2); + + pExpHeap = EGG::ExpHeap::create(0x40000, mHeap::g_gameHeaps[0], 0); + pExpHeap->setName("システムcreateヒープ"); // "system create heap" + + mHeap::setCurrentHeap(mHeap::g_assertHeap); + + { + mHeap heap(pExpHeap); + dPad::create(); + } + + dPad::fn_80059620(); + + mPad::beginPad(); + mPad::g_currentCore->setPosParam(0.1f, 1.0f); + mPad::endPad(); + + { + mHeap heap(pExpHeap); + for (int i = 0; i < WPAD_MAX_CONTROLLERS; i++) { + mPad::g_padMg->getNthController(i)->createRumbleMgr(4); + } + } + + cM::initRnd(OSGetTick()); + + dGfx_c::create(pExpHeap); + + { + mHeap heap(pExpHeap); + dScene_c::getFader()->create(); + } + + dDvdUnk::FontUnk::create(pExpHeap); + FileManager::create(pExpHeap); + SaveMgr::create(pExpHeap); + setupFlagManagers(pExpHeap); + dCsMgr_c::create(pExpHeap); + + lbl_80574FA0 = 0; + lbl_80574FA4 = 0; + + cCounter_c::clear(); + + dDvd::create(OSGetThreadPriority(OSGetCurrentThread()) - 1, mHeap::g_commandHeap, mHeap::g_archiveHeap, pExpHeap); + mDvd::unk_initDecompressors(); + mDvd::setAutoStreamDecomp(true); + + void *p_buf = mHeap::g_gameHeaps[0]->alloc(0x4000, 32); + pCmdHeap = mHeap::g_commandHeap; + NandRequestThread::create( + OSGetThreadPriority(OSGetCurrentThread()) - 2, + pCmdHeap, + p_buf, + 0x4000, + ArcCallbackHandlerCreate(2), + pExpHeap); + + dReset::Manage_c::CreateInstance(heapMem2); + + dHeap::createHBMHeap(0x180000, heapMem2); + dHbm::Manage_c::CreateInstance(dHeap::HBMHeap); + + initAudioMgr(heapMem1); + + dSndMgr_c::GetInstance()->setup(heapMem2, 0x1000000); + + dHeap::createFontHeap(0xfa000, heapMem2); + + heapMem1->mFlag.setBit(0); + heapMem2->mFlag.setBit(0); + + dScene_c::staticCreate(); + + CurrentStageArcManager::create(pExpHeap); + OarcManager::create(pExpHeap); + LayoutArcManager::create(pExpHeap); + + setFrameRate(1); + nw4r::ut::Color clearColor(nw4r::ut::Color::BLACK); + setClearColor(clearColor); + + SaveTimeRelated::fn_80190780(pExpHeap); + + pExpHeap->mFlag.setBit(0); + pExpHeap->adjust(); + + mHeap::setCurrentHeap(mHeap::g_gameHeaps[0]); +} + +void dSys_c::execute() { + beginFrame(); + + if (dState::fn_80062EC0()) { + dPad::beginPad_BR(); + dPad::fn_80059630(); + } + + beginRender(); + d3d::fn_80016860(); + + dDvdUnk::FontUnk::GetInstance()->preExecute(); + + bool isAnyError = dDvdUnk::FontUnk::GetInstance()->isAnyError(); + if (isAnyError) { + if (dState::fn_80062EC0()) { + dHbm::Manage_c::GetInstance()->Calculate(); + dReset::Manage_c::GetInstance()->Calculate(); + dDvdUnk::FontUnk::GetInstance()->execute(); + } + + dDvdUnk::FontUnk::GetInstance()->drawNonDriveError(); + + if (dLytSystemWindow_c::GetInstance()) { + dLytSystemWindow_c::GetInstance()->fn_80125EF0(); + } + + SaveMgr::GetInstance()->draw(); + dDvdUnk::FontUnk::GetInstance()->drawDriveError(); + dReset::Manage_c::GetInstance()->Draw(); + dHbm::Manage_c::GetInstance()->DrawMenu(0); + } + else { + dHbm::Manage_c::GetInstance()->DrawMenu(1); + + if (dHbm::Manage_c::GetInstance()->getState() == dHbm::Manage_c::HBM_MANAGE_ACTIVE) { + if (dState::fn_80062EC0()) { + dHbm::Manage_c::GetInstance()->Calculate(); + } + } + else { + dGfx_c::GetInstance()->drawBefore(); + m3d::drawDone(0); + dScene_c::getFader()->draw(); + dGfx_c::GetInstance()->drawLetterbox(); + dLytBattery_c::draw(); + dDvdUnk::FontUnk::GetInstance()->execute(); + + if (dLytSystemWindow_c::GetInstance()) { + dLytSystemWindow_c::GetInstance()->fn_80125EF0(); + } + + SaveMgr::GetInstance()->draw(); + + if (dState::fn_80062EC0()) { + dHbm::Manage_c::GetInstance()->Calculate(); + } + } + + if (dState::fn_80062EC0()) { + dReset::Manage_c::GetInstance()->Calculate(); + } + dReset::Manage_c::GetInstance()->Draw(); + } + + dHbm::Manage_c::GetInstance()->DrawIcon(); + endRender(); + dState::fn_80062EB0(); + dState::fn_80062E40(); + dState::fn_80062E50(); + + if (!isAnyError && + dHbm::Manage_c::GetInstance()->getState() != dHbm::Manage_c::HBM_MANAGE_ACTIVE) + { + if (dSystem::myDylinkInitPhase.callMethod(nullptr) == 2) { + if (dState::fn_80062EC0()) { + dScene_c::staticExecute(); + } + fManager_c::mainLoop(); + } + + if (dState::fn_80062EC0()) { + dScene_c::getFader()->calc(); + } + } + + SaveMgr::GetInstance()->execute(); + + if (dLytSystemWindow_c::GetInstance()) { + dLytSystemWindow_c::GetInstance()->fn_80125E20(); + } + + dSndMgr_c::GetInstance()->calc(); + SaveTimeRelated::GetInstance()->fn_801907C0(); + + if (dState::fn_80062EC0()) { + cCounter_c::IncrementGameFrame(); + cCounter_c::IncrementUnkCounter(); + } + + m3d::calcWorld(0); + d3d::fn_80017500(); + d3d::clearList(); + + if (dState::fn_80062EC0()) { + dPad::endPad_BR(); + } + + endFrame(); +} |
