diff options
| author | robojumper <robojumper@gmail.com> | 2026-04-09 08:14:45 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-09 08:14:45 +0200 |
| commit | 124935c073861c40f412e1bc0bfb880f5ded7693 (patch) | |
| tree | 10a0d14b20b56477055997c92449c448a9f97b97 /src | |
| parent | f9fb1b59fca13953041d747da203ec37c38f6bc3 (diff) | |
| parent | 5083d2031c263e392165fe440fe175d67ef86bd1 (diff) | |
Merge pull request #305 from bgsamm/d_main
Matches for d_main, d_sys, & mpls
Diffstat (limited to 'src')
| -rw-r--r-- | src/d/d_main.cpp | 77 | ||||
| -rw-r--r-- | src/d/d_sys.cpp | 739 | ||||
| -rw-r--r-- | src/toBeSorted/arc_callback_handler.cpp | 6 | ||||
| -rw-r--r-- | src/toBeSorted/d_lib.cpp | 19 | ||||
| -rw-r--r-- | src/toBeSorted/mpls.cpp | 37 |
5 files changed, 876 insertions, 2 deletions
diff --git a/src/d/d_main.cpp b/src/d/d_main.cpp new file mode 100644 index 00000000..28118b10 --- /dev/null +++ b/src/d/d_main.cpp @@ -0,0 +1,77 @@ +#include "d/d_main.h" + +#include "d/d_sys.h" +#include "f/f_manager.h" +#include "toBeSorted/d_lib.h" +#include "toBeSorted/mpls.h" + +#include "rvl/OS.h" + +u32 lbl_805751D0; +OSTime g_InitialTime; + +bool fn_80054F90(u32 val) { + return lbl_805751D0 & val; +} + +void fn_80054FB0(u32 val) { + u32 flags = lbl_805751D0; + + if (!flags) { + fManager_c::setStopProcFlags( + fManager_c::PROC_FLAG_CONNECT | fManager_c::PROC_FLAG_CREATE | fManager_c::PROC_FLAG_EXECUTE | + fManager_c::PROC_FLAG_DELETE + ); + } + + lbl_805751D0 = flags | val; +} + +void fn_80054FE0(u32 val) { + lbl_805751D0 &= ~val; + + if (!lbl_805751D0) { + fManager_c::maskStopProcFlags(fManager_c::PROC_FLAG_DRAW); + } +} + +void dMain::Create() { + dSys_c::create(); + dSys_c::setBlack(false); +} + +void dMain::Execute() { + while (true) { + dSys_c::execute(); + } +} + +void *dMain::main01(void *arg) { + Create(); + Execute(); + return nullptr; +} + +#define STACK_SIZE 0xF000 + +static OSThread MAIN_THREAD; + +void main(int argc, char **argv) { + u8 pStackBase[STACK_SIZE] __attribute__((aligned(32))); + + unknownStub(); + g_InitialTime = OSGetTime(); + dSystem::fixHeaps(); + + Mpls::initialize(argc, argv); + Mpls::tryLaunchMovie(); + + OSThread *curThread = OSGetCurrentThread(); + OSPriority curPrio = OSGetThreadPriority(curThread); + + OSCreateThread(&MAIN_THREAD, dMain::main01, nullptr, &pStackBase[STACK_SIZE], STACK_SIZE, curPrio, 0); + OSResumeThread(&MAIN_THREAD); + + OSSetThreadPriority(curThread, 31); + OSSuspendThread(curThread); +} diff --git a/src/d/d_sys.cpp b/src/d/d_sys.cpp index e69de29b..716409c4 100644 --- a/src/d/d_sys.cpp +++ b/src/d/d_sys.cpp @@ -0,0 +1,739 @@ +#include "d/d_sys.h" + +#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_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/eggAssertHeap.h" +#include "egg/core/eggAsyncDisplay.h" +#include "egg/core/eggController.h" +#include "egg/core/eggDisplay.h" +#include "egg/core/eggDvdFile.h" +#include "egg/core/eggExpHeap.h" +#include "egg/core/eggGraphicsFifo.h" +#include "egg/core/eggSystem.h" +#include "egg/core/eggVideo.h" +#include "egg/core/eggXfbManager.h" +#include "egg/gfx/eggStateGX.h" +#include "f/f_manager.h" +#include "m/m3d/m3d.h" +#include "m/m_dvd.h" +#include "m/m_heap.h" +#include "m/m_pad.h" +#include "m/m_video.h" +#include "nw4r/ut/ut_Color.h" +#include "toBeSorted/arc_callback_handler.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 "toBeSorted/d_d3d.h" +#include "toBeSorted/d_exception.h" +#include "toBeSorted/file_manager.h" +#include "toBeSorted/nand_request_thread.h" +#include "toBeSorted/save_manager.h" +#include "toBeSorted/unk_save_time.h" + +#include "rvl/GX.h" +#include "rvl/OS.h" +#include "rvl/WPAD.h" + +// TODO Replace with proper import + names +extern u32 lbl_80574FA0; +extern u32 lbl_80574FA4; + +System SysConfig; + +System *dSys_c::ms_configuration_p; +EGG::Heap *dSys_c::ms_RootHeapMem1; +EGG::Heap *dSys_c::ms_RootHeapMem2; + +namespace dSystem { + +void *s_OrgMEM1ArenaLo; +void *s_NewMEM1ArenaLo; +void *s_OrgMEM1ArenaHi; +void *s_NewMEM1ArenaHi; + +} // namespace dSystem + +const GXRenderModeObj gRMO_Pal60_608x456Prog_16x9 = { + 0, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 25, // viXOrigin + 12, // viYOrigin + 670, // viWidth + 456, // viHeight + 1, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Pal60_608x456IntDf_16x9 = { + 2, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 25, // viXOrigin + 12, // viYOrigin + 670, // viWidth + 456, // viHeight + 0, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Pal50_608x456IntDf_16x9 = { + 4, // tvInfo + 608, // fbWidth + 456, // efbHeight + 542, // xfbHeight + 27, // viXOrigin + 16, // viYOrigin + 666, // viWidth + 542, // viHeight + 1, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Ntsc_608x456Prog_16x9 = { + 20, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 25, // viXOrigin + 12, // viYOrigin + 670, // viWidth + 456, // viHeight + 1, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Ntsc_608x456IntDf_16x9 = { + 22, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 25, // viXOrigin + 12, // viYOrigin + 670, // viWidth + 456, // viHeight + 0, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Pal60_608x456Prog_4x3 = { + 0, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 17, // viXOrigin + 12, // viYOrigin + 686, // viWidth + 456, // viHeight + 1, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Pal60_608x456IntDf_4x3 = { + 2, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 17, // viXOrigin + 12, // viYOrigin + 686, // viWidth + 456, // viHeight + 0, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Pal50_608x456IntDf_4x3 = { + 4, // tvInfo + 608, // fbWidth + 456, // efbHeight + 542, // xfbHeight + 19, // viXOrigin + 16, // viYOrigin + 682, // viWidth + 542, // viHeight + 1, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Ntsc_608x456Prog_4x3 = { + 20, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 17, // viXOrigin + 12, // viYOrigin + 686, // viWidth + 456, // viHeight + 1, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const GXRenderModeObj gRMO_Ntsc_608x456IntDf_4x3 = { + 22, // tvInfo + 608, // fbWidth + 456, // efbHeight + 456, // xfbHeight + 17, // viXOrigin + 12, // viYOrigin + 686, // viWidth + 456, // viHeight + 0, // xfbMode + 0, // field_rendering + 0, // aa + { + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + {6, 6}, + }, // sample_pattern + {0, 0, 21, 22, 21, 0, 0} // vFilter +}; + +const EGG::Video::RenderModeObjSet gSysRenderModeObjSet = { + {&gRMO_Pal60_608x456Prog_16x9, &gRMO_Pal60_608x456IntDf_16x9, &gRMO_Pal50_608x456IntDf_16x9, + &gRMO_Ntsc_608x456Prog_16x9, &gRMO_Ntsc_608x456IntDf_16x9, &gRMO_Pal60_608x456Prog_4x3, + &gRMO_Pal60_608x456IntDf_4x3, &gRMO_Pal50_608x456IntDf_4x3, &gRMO_Ntsc_608x456Prog_4x3, + &gRMO_Ntsc_608x456IntDf_4x3} +}; + +template <> +void System::initialize() { + DVDInit(); + SCInit(); + + initMemory(); + + Heap *heap = Heap::sCurrentHeap; + + GraphicsFifo::create(mGraphicsFifoSize, heap); + mHeap::createAssertHeap(mRootHeapMem1); + + mVideo = new (heap) EGG::Video(&gSysRenderModeObjSet); + + mXfbMgr = new (heap) EGG::XfbManager(); + for (int i = 0; i < 2; ++i) { + mXfbMgr->attach(new (heap) Xfb(mRootHeapMem2)); + } + + mDisplay = new (heap) EGG::AsyncDisplay(1); + mDisplay->setClearColor(nw4r::ut::Color::BLACK); + mDisplay->clearEFB(); + + Thread::initialize(); + mSystemThread = new (heap) Thread(OSGetCurrentThread(), 4); + + DvdFile::initialize(); + + // TODO Determine significance of the constant + CoreControllerMgr::setWPADWorkSize(WPADGetWorkMemorySize() + 228); + CoreControllerMgr::createInstance(); + + exceptionCreate(heap); + + BaseSystem::mConfigData->getSystemHeap()->mFlag.setBit(0); + + mHeap::setCurrentHeap(mHeap::g_assertHeap); +} + +dSndMgr_c *dSys_c::initAudioMgr(EGG::Heap *heap) { + dSndMgr_c *audioMgr; + + EGG::FrmHeap *frmHeap = mHeap::createFrmHeap( + 0x69400, heap, + "オーディオヒープ", // "Audio heap" + 32, mHeap::OPT_NONE + ); + + { + mHeap temp(frmHeap); + + audioMgr = new dSndMgr_c(); + ms_configuration_p->mAudioMgr = audioMgr; + + frmHeap->adjust(); + frmHeap->mFlag.setBit(0); + } + + return audioMgr; +} + +void dSys_c::beginRender() { + m3d::calcMaterial(); + ms_configuration_p->mDisplay->beginRender(); +} + +void dSys_c::endRender() { + ms_configuration_p->mDisplay->endRender(); +} + +void dSys_c::beginFrame() { + EGG::Display *pDisplay = ms_configuration_p->mDisplay; + + pDisplay->beginFrame(); + GXSetCopyClear(pDisplay->getClearColor(), pDisplay->getClearZ()); + ms_configuration_p->onBeginFrame(); +} + +void dSys_c::endFrame() { + ms_configuration_p->mDisplay->endFrame(); + ms_configuration_p->onEndFrame(); +} + +bool dSys_c::setBlack(bool on) { + EGG::Display *pDisplay = ms_configuration_p->mDisplay; + + EGG::Video *pVideo = EGG::BaseSystem::getVideo(); + + if (pVideo->mFlag.onBit(0) != on && pDisplay->mScreenStateFlag.offBit(0)) { + pDisplay->mScreenStateFlag.setBit(0); + return true; + } + + return false; +} + +void dSys_c::setFrameRate(u8 maxRetraces) { + ms_configuration_p->mDisplay->mMaxRetraces = maxRetraces; +} + +u8 dSys_c::getFrameRate() { + return ms_configuration_p->mDisplay->mMaxRetraces; +} + +void dSys_c::setClearColor(nw4r::ut::Color clr) { + EGG::Display *display = ms_configuration_p->mDisplay; + display->setClearColor(clr); + EGG::StateGX::s_clearEfb = clr; +} + +nw4r::ut::Color dSys_c::getClearColor() { + return ms_configuration_p->mDisplay->getClearColor(); +} + +void dSys_c::create() { + EGG::Heap *pRootHeapMem1; + EGG::Heap *pRootHeapMem2; + EGG::Heap *pCmdHeap; + EGG::Heap *pExpHeap; + + dHeapAllocator::initCallbacks(); + + ms_configuration_p = &SysConfig; + EGG::BaseSystem::mConfigData = &SysConfig; + + ms_configuration_p->doInitialize(); + + pRootHeapMem1 = EGG::BaseSystem::mConfigData->mRootHeapMem1; + ms_RootHeapMem1 = mHeap::createExpHeap(-1, pRootHeapMem1, "dSys_c::RootHeapMEM1", 32, mHeap::OPT_4); + pRootHeapMem1->mFlag.setBit(0); + + pRootHeapMem2 = EGG::BaseSystem::mConfigData->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.heap); + + 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); + setClearColor(nw4r::ut::Color::BLACK); + + 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_80152EF0(); + } + + 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_80152EF0(); + } + + 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_80152E20(); + } + + 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(); +} + +void dSystem::fixHeaps() { + s_OrgMEM1ArenaLo = OSGetMEM1ArenaLo(); + + void *stack_addr = (void *)OSRoundUp32B(_stack_addr); + void *arena_lo = (void *)OSRoundUp32B(__ArenaLo); + + if (s_OrgMEM1ArenaLo < (void *)0x80700000) { + s_NewMEM1ArenaLo = (void *)0x80700000; + } else { + s_NewMEM1ArenaLo = (void *)ROUND_UP_4KB(arena_lo); + + if (s_OrgMEM1ArenaLo != stack_addr && s_OrgMEM1ArenaLo != arena_lo) { + OSPanic("d_system.cpp", 1883, "Arena Error!\n"); + } + } + + OSSetMEM1ArenaLo(s_NewMEM1ArenaLo); + + s_OrgMEM1ArenaHi = OSGetMEM1ArenaHi(); + s_NewMEM1ArenaHi = (void *)0x817E0000; + + if (s_OrgMEM1ArenaHi > s_NewMEM1ArenaHi) { + OSSetMEM1ArenaHi(s_NewMEM1ArenaHi); + } +} diff --git a/src/toBeSorted/arc_callback_handler.cpp b/src/toBeSorted/arc_callback_handler.cpp index 6a55cd94..cb8f8cf1 100644 --- a/src/toBeSorted/arc_callback_handler.cpp +++ b/src/toBeSorted/arc_callback_handler.cpp @@ -1,3 +1,5 @@ +#include "toBeSorted/arc_callback_handler.h" + #include "d/col/bg/d_bg_s.h" #include "d/col/bg/d_bg_w_kcol.h" #include "d/d_rawarchive.h" @@ -17,8 +19,8 @@ ArcCallbackHandler ArcCallbackHandler::sInstance; #define NAME_OARC 'oarc' #define NAME_RARC 'rarc' -u32 ArcCallbackHandlerCreate(u32) { - return 0; +void *ArcCallbackHandlerCreate(u32) { + return nullptr; } void BindSystemModelsAndLighting(nw4r::g3d::ResFile file) { diff --git a/src/toBeSorted/d_lib.cpp b/src/toBeSorted/d_lib.cpp new file mode 100644 index 00000000..d8111ce4 --- /dev/null +++ b/src/toBeSorted/d_lib.cpp @@ -0,0 +1,19 @@ +#include "toBeSorted/d_lib.h" + +#include <cstring> + +u32 lbl_80574FA0; +u32 lbl_80574FA4; + +void unknownStub() {} + +bool strequals(const char *lhs, const char *rhs) { + if (!rhs) { + return false; + } + + size_t lhs_len = strlen(lhs); + size_t rhs_len = strlen(rhs); + + return (lhs_len == rhs_len) && strncmp(lhs, rhs, lhs_len) == 0; +} diff --git a/src/toBeSorted/mpls.cpp b/src/toBeSorted/mpls.cpp new file mode 100644 index 00000000..20c23e1c --- /dev/null +++ b/src/toBeSorted/mpls.cpp @@ -0,0 +1,37 @@ +#include "toBeSorted/mpls.h" + +#include "s/s_Assert.h" + +#include "rvl/OS.h" +#include "rvl/SC.h" + +#include <cstring> + +bool sMplsInitialized; +bool sSkipMplsMovie; +bool sIsNormalMode; + +void Mpls::initialize(int argc, char **argv) { + if (argc == 2) { + if (strcmp("MPLS_FIRST", argv[1]) == 0) { + sSkipMplsMovie = true; + } else if (strcmp("MPLS_NORMAL", argv[1]) == 0) { + sSkipMplsMovie = true; + sIsNormalMode = true; + } + } + + sMplsInitialized = true; +} + +void Mpls::tryLaunchMovie() { + if (!sSkipMplsMovie && !SCGetMplsMoviePlay()) { + OSExecl("/sys/mpls_movie/player.dol", "", "", "ASPECT_RATIO_AUTO", "DEFAULT", nullptr); + sAssert::assert(); + } +} + +void Mpls::forceLaunchMovie() { + OSExecl("/sys/mpls_movie/player.dol", "", "", "ASPECT_RATIO_AUTO", "FORCE_MENU", nullptr); + sAssert::assert(); +} |
