summaryrefslogtreecommitdiff
path: root/src/m_Do
diff options
context:
space:
mode:
authorDylan Ascencio <empressglatia@gmail.com>2023-09-16 18:13:11 -0400
committerDylan Ascencio <empressglatia@gmail.com>2023-09-16 18:13:11 -0400
commite940e4f4e0961aaa01c687dbfd96fdb6dec02cfe (patch)
treed22f3e7228cf89ac7152517c98149b4778c6db04 /src/m_Do
parent331847e88ff809875cb2b643e8434a3a10b7446e (diff)
parentf0cc6a9bef1422bb5d63cfe452772a76499ea0fd (diff)
Merge remote-tracking branch 'upstream/main'
Diffstat (limited to 'src/m_Do')
-rw-r--r--src/m_Do/m_Do_DVDError.cpp50
-rw-r--r--src/m_Do/m_Do_Reset.cpp106
-rw-r--r--src/m_Do/m_Do_machine_exception.cpp92
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();
}