summaryrefslogtreecommitdiff
path: root/src/m_Do/m_Do_Reset.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2023-09-16 13:46:37 -0700
committerGitHub <noreply@github.com>2023-09-16 13:46:37 -0700
commit00fe8a08736de5d226952dbc60e440f346a4cb4f (patch)
tree088735ee38e338b6fdbdf11a527d401c2654b69b /src/m_Do/m_Do_Reset.cpp
parentf00e07e4c485003848d7a771029097d69f5f3891 (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.cpp106
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();
+ }
}