diff options
| author | Dylan Ascencio <empressglatia@gmail.com> | 2023-09-16 18:13:11 -0400 |
|---|---|---|
| committer | Dylan Ascencio <empressglatia@gmail.com> | 2023-09-16 18:13:11 -0400 |
| commit | e940e4f4e0961aaa01c687dbfd96fdb6dec02cfe (patch) | |
| tree | d22f3e7228cf89ac7152517c98149b4778c6db04 /src/m_Do | |
| parent | 331847e88ff809875cb2b643e8434a3a10b7446e (diff) | |
| parent | f0cc6a9bef1422bb5d63cfe452772a76499ea0fd (diff) | |
Merge remote-tracking branch 'upstream/main'
Diffstat (limited to 'src/m_Do')
| -rw-r--r-- | src/m_Do/m_Do_DVDError.cpp | 50 | ||||
| -rw-r--r-- | src/m_Do/m_Do_Reset.cpp | 106 | ||||
| -rw-r--r-- | src/m_Do/m_Do_machine_exception.cpp | 92 |
3 files changed, 210 insertions, 38 deletions
diff --git a/src/m_Do/m_Do_DVDError.cpp b/src/m_Do/m_Do_DVDError.cpp index 325eead4..204bb8e8 100644 --- a/src/m_Do/m_Do_DVDError.cpp +++ b/src/m_Do/m_Do_DVDError.cpp @@ -4,24 +4,64 @@ // #include "m_Do/m_Do_DVDError.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRThread.h" +#include "dolphin/os/OS.h" +#include "m_Do/m_Do_dvd_thread.h" +#include "m_Do/m_Do_ext.h" + +OSThread DvdErr_thread; +u8 DvdErr_stack[0x1000] __attribute__((aligned(16))); + +static OSAlarm Alarm; +bool mDoDvdErr_initialized; + +void mDoDvdErr_Watch(void*); +void AlarmHandler(OSAlarm*, OSContext*); /* 80018BE0-80018CA0 .text mDoDvdErr_ThdInit__Fv */ void mDoDvdErr_ThdInit() { - /* Nonmatching */ + if (!mDoDvdErr_initialized) { + OSTime time = OSGetTime(); + OSThread* curThread = OSGetCurrentThread(); + s32 priority = OSGetThreadPriority(curThread); + + OSCreateThread(&DvdErr_thread, mDoDvdErr_Watch, NULL, DvdErr_stack + sizeof(DvdErr_stack), + sizeof(DvdErr_stack), priority - 3, 1); + OSResumeThread(&DvdErr_thread); + OSCreateAlarm(&Alarm); + OSSetPeriodicAlarm(&Alarm, time, OS_BUS_CLOCK / 4, AlarmHandler); + + mDoDvdErr_initialized = true; + } } /* 80018CA0-80018CE8 .text mDoDvdErr_ThdCleanup__Fv */ void mDoDvdErr_ThdCleanup() { - /* Nonmatching */ + if (mDoDvdErr_initialized) { + OSCancelThread(&DvdErr_thread); + OSCancelAlarm(&Alarm); + mDoDvdErr_initialized = false; + } } /* 80018CE8-80018D44 .text mDoDvdErr_Watch__FPv */ void mDoDvdErr_Watch(void*) { - /* Nonmatching */ + { + JKRThread thread(OSGetCurrentThread(), 0); + } + + JKRHeap* heap = NULL; + heap->becomeCurrentHeap(); + + do { + if (DVDGetDriveStatus() == DVD_STATE_FATAL_ERROR) { + mDoDvdThd::suspend(); + } + OSSuspendThread(&DvdErr_thread); + } while (true); } /* 80018D44-80018D6C .text AlarmHandler__FP7OSAlarmP9OSContext */ void AlarmHandler(OSAlarm*, OSContext*) { - /* Nonmatching */ + OSResumeThread(&DvdErr_thread); } diff --git a/src/m_Do/m_Do_Reset.cpp b/src/m_Do/m_Do_Reset.cpp index fb4de5b1..65be5c53 100644 --- a/src/m_Do/m_Do_Reset.cpp +++ b/src/m_Do/m_Do_Reset.cpp @@ -1,32 +1,102 @@ -// -// Generated by dtk -// Translation Unit: m_Do_Reset.cpp -// +/** + * m_Do_Reset.cpp + * Game Reset Management + */ #include "m_Do/m_Do_Reset.h" -#include "dolphin/types.h" +#include "JSystem/JUtility/JUTGamePad.h" +#include "JSystem/JUtility/JUTXfb.h" +#include "dolphin/gx/GX.h" +#include "dolphin/os/OS.h" +#include "m_Do/m_Do_DVDError.h" +#include "m_Do/m_Do_audio.h" /* 80017D40-80017D44 .text my_OSCancelAlarmAll__Fv */ -void my_OSCancelAlarmAll() { - /* Nonmatching */ -} +static void my_OSCancelAlarmAll() {} /* 80017D44-80017D7C .text destroyVideo__Fv */ void destroyVideo() { - /* Nonmatching */ + JUTVideo::destroyManager(); + GXSetDrawDoneCallback(NULL); + VISetBlack(1); + VIFlush(); + VIWaitForRetrace(); } +#if VERSION == VERSION_JP +int mDoRst::mResetFlag; +int mDoRst::mResetPrepare; +int mDoRst::m3ButtonResetFlag; +int mDoRst::m3ButtonResetPort = -1; +#else +mDoRstData* mDoRst::mResetData; +#endif + /* 80017D7C-80017E40 .text mDoRst_reset__FiUli */ -void mDoRst_reset(int, unsigned long, int) { - /* Nonmatching */ -} +void mDoRst_reset(int param_0, unsigned long param_1, int param_2) { + if (DVDGetDriveStatus() == DVD_STATE_FATAL_ERROR) { + do { + } while (true); + } -/* 80017E40-80017EF0 .text mDoRst_resetCallBack__FiPv */ -void mDoRst_resetCallBack(int, void*) { - /* Nonmatching */ + JUTXfb::getManager()->clearIndex(); + mDoDvdErr_ThdCleanup(); + JUTGamePad::clearForReset(); + mDoAud_zelAudio_c::offInitFlag(); + +#if VERSION != VERSION_JP + VIWaitForRetrace(); + VIWaitForRetrace(); +#endif + + OSThread* gxThread = GXGetCurrentGXThread(); + s32 enable = OSDisableInterrupts(); + + if (gxThread != OSGetCurrentThread()) { + OSCancelThread(gxThread); + GXSetCurrentGXThread(); + } + + GXFlush(); + GXAbortFrame(); + GXDrawDone(); + OSRestoreInterrupts(enable); + destroyVideo(); + my_OSCancelAlarmAll(); + LCDisable(); +#if VERSION != VERSION_JP + OSSetSaveRegion(mDoRst::mResetData, (u8*)&mDoRst::getResetData + 0x10); +#endif + OSResetSystem(param_0, param_1, param_2); + + do { + VIWaitForRetrace(); + } while (true); } -/* 80017EF0-80017EF8 .text getResetData__6mDoRstFv */ -void mDoRst::getResetData() { - /* Nonmatching */ +/* 80017E40-80017EF0 .text mDoRst_resetCallBack__FiPv */ +void mDoRst_resetCallBack(int port, void*) { + if (!mDoRst::isReset()) { + if (port == -1) { + JUTGamePad::clearForReset(); + JUTGamePad::CRumble::setEnabled(0xF0000000); + } else { + if (mDoRst::is3ButtonReset()) { + JUTGamePad::C3ButtonReset::sResetOccurred = false; + JUTGamePad::C3ButtonReset::sCallback = mDoRst_resetCallBack; + JUTGamePad::C3ButtonReset::sCallbackArg = NULL; + return; + } + mDoRst::on3ButtonReset(); + mDoRst::set3ButtonResetPort(port); + JUTGamePad::clearForReset(); + JUTGamePad::CRumble::setEnabled(0xF0000000); + } +#if VERSION != VERSION_JP + if (DVDCheckDisk() == 0) { + mDoRst_reset(1, 0x80000000, 0); + } +#endif + mDoRst::onReset(); + } } diff --git a/src/m_Do/m_Do_machine_exception.cpp b/src/m_Do/m_Do_machine_exception.cpp index 906f76d6..ebeb36b0 100644 --- a/src/m_Do/m_Do_machine_exception.cpp +++ b/src/m_Do/m_Do_machine_exception.cpp @@ -1,42 +1,104 @@ -// -// Generated by dtk -// Translation Unit: m_Do_machine_exception.cpp -// +/** + * m_Do_machine_exception.cpp + * Exception Print Functions + */ #include "m_Do/m_Do_machine_exception.h" -#include "dolphin/types.h" +#include "DynamicLink.h" +#include "JSystem/JFramework/JFWSystem.h" +#include "JSystem/JKernel/JKRAram.h" +#include "JSystem/JUtility/JUTConsole.h" +#include "d/d_com_inf_game.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_main.h" + +static JUTConsole* sConsole; /* 8001BADC-8001BB68 .text print_f__FPCce */ -void print_f(const char*, ...) { - /* Nonmatching */ +void print_f(const char* fmt, ...) { + va_list args; + va_start(args, fmt); + JUTConsole_print_f_va_(sConsole, fmt, args); + va_end(args); } /* 8001BB68-8001BB90 .text print__FPCc */ -void print(const char*) { - /* Nonmatching */ +void print(const char* string) { + sConsole->print(string); } +static const char* unused_803396f8 = "--------------------------------------\n"; + /* 8001BB90-8001BCEC .text dispHeapInfo__Fv */ void dispHeapInfo() { - /* Nonmatching */ + JKRExpHeap* zelda = zeldaHeap; + JKRExpHeap* game = gameHeap; + JKRExpHeap* archive = archiveHeap; + + u32 zeldaFree = zelda->getFreeSize(); + u32 gameFree = game->getFreeSize(); + u32 archiveFree = archive->getFreeSize(); + u32 zeldaTotal = zelda->getTotalFreeSize(); + u32 gameTotal = game->getTotalFreeSize(); + u32 archiveTotal = archive->getTotalFreeSize(); + + print("-- Heap Free / TotalFree (KB) --\n"); + print_f(" Zelda %5d / %5d\n", zeldaFree / 1024, zeldaTotal / 1024); + print_f(" Game %5d / %5d\n", gameFree / 1024, gameTotal / 1024); + print_f("Archive %5d / %5d\n", archiveFree / 1024, archiveTotal / 1024); + print("--------------------------------\n"); + + if (JKRAram::getAramHeap()) { + JKRAram::getAramHeap()->dump(); + } + DynamicModuleControlBase::dump(); + g_dComIfG_gameInfo.mResControl.dump(); + + zelda->dump_sort(); + game->dump_sort(); + archive->dump_sort(); } /* 8001BCEC-8001BD30 .text dispGameInfo__Fv */ void dispGameInfo() { - /* Nonmatching */ + print_f("Start StageName:RoomNo [%s:%d]\n", dComIfGp_getStartStageName(), + dComIfGp_getStartStageRoomNo()); } /* 8001BD30-8001BE84 .text dispDateInfo__Fv */ void dispDateInfo() { - /* Nonmatching */ + print("------------- Date Infomation ---------\n"); + print(" FINAL VERSION\n"); + print("COMPILE USER: FINAL\n"); + print_f("COPYDATE : %17s\n", mDoMain::COPYDATE_STRING); + + OSCalendarTime time; + OSTicksToCalendarTime(mDoMain::sPowerOnTime, &time); + print_f("PowerOnTime: %04d/%2d/%2d %2d:%2d:%2d`%03d\"%03d\n", time.year, time.month, + time.day_of_month, time.hours, time.minutes, time.seconds, time.milliseconds, + time.microseconds); + + OSTicksToCalendarTime(mDoMain::sHungUpTime, &time); + print_f("HungUpTime : %04d/%2d/%2d %2d:%2d:%2d`%03d\"%03d\n", time.year, time.month, + time.day_of_month, time.hours, time.minutes, time.seconds, time.milliseconds, + time.microseconds); + + OSTicksToCalendarTime(mDoMain::sHungUpTime - mDoMain::sPowerOnTime, &time); + print_f("PlayTime : %4d days, %2d:%2d:%2d`%03d\"%03d\n", time.year_day, time.hours, + time.minutes, time.seconds, time.milliseconds, time.microseconds); + print("---------------------------------------\n"); } /* 8001BE84-8001BEAC .text dispConsoleToTerminal__Fv */ void dispConsoleToTerminal() { - /* Nonmatching */ + JFWSystem::getSystemConsole()->dumpToTerminal(0xFFFFFFFF); } /* 8001BEAC-8001BEDC .text exception_addition__FP10JUTConsole */ -void exception_addition(JUTConsole*) { - /* Nonmatching */ +void exception_addition(JUTConsole* pConsole) { + sConsole = pConsole; + dispHeapInfo(); + dispDateInfo(); + dispConsoleToTerminal(); + dispGameInfo(); } |
