diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2023-09-16 13:46:37 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-16 13:46:37 -0700 |
| commit | 00fe8a08736de5d226952dbc60e440f346a4cb4f (patch) | |
| tree | 088735ee38e338b6fdbdf11a527d401c2654b69b /src/m_Do/m_Do_Reset.cpp | |
| parent | f00e07e4c485003848d7a771029097d69f5f3891 (diff) | |
d_seafightgame, m_Do_machine_exception, m_Do_reset, m_Do_DVDError OK (#41)
* m_Do_machine_exception OK
* m_Do_Reset OK
* m_Do_DVDError OK
* some fixes for JP
* JP OK again
* d_seafightgame OK
* cleanup m_Do_Reset a bit
Diffstat (limited to 'src/m_Do/m_Do_Reset.cpp')
| -rw-r--r-- | src/m_Do/m_Do_Reset.cpp | 106 |
1 files changed, 88 insertions, 18 deletions
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(); + } } |
