mirror of
https://github.com/zeldaret/tp
synced 2026-06-03 10:31:57 -04:00
m_Do_Reset: OK (#35)
* m_Do_Reset: split and (some) decomp decompiles: - my_OSCancelAlarmAll() - destroyVideo() * mDoRst::reset(): decompile, plus some supporting code * split DVD* functions to dvd.h * mDoRst::resetCallBack(): decompile
This commit is contained in:
+110
-1
@@ -1 +1,110 @@
|
||||
// ok
|
||||
#include "m_Do/m_Do_reset/m_Do_reset.h"
|
||||
#include "dvd/dvd.h"
|
||||
#include "JSystem/JUtility/JUTXfb/JUTXfb.h"
|
||||
#include "global.h"
|
||||
|
||||
extern "C" {
|
||||
void my_OSCancelAlarmAll(void) {
|
||||
return;
|
||||
}
|
||||
|
||||
void destroyVideo() {
|
||||
JUTVideo_NS_destroyManager();
|
||||
GXSetDrawDoneCallback(NULL);
|
||||
VISetBlack(1);
|
||||
VIFlush();
|
||||
VIWaitForRetrace();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: cleanup
|
||||
void mDoRst::reset(s32 p1, u32 p2, s32 p3) {
|
||||
mDoCPd_c *pmVar1;
|
||||
u32 uVar2;
|
||||
DVDState DVar3;
|
||||
OSThread *thread;
|
||||
s32 enable;
|
||||
/* sManager */ lbl_80451550->clearIndex();
|
||||
mDoDvdErr_ThdCleanup();
|
||||
cAPICPad_recalibrate();
|
||||
if (lbl_80450BB8 != 0) {
|
||||
do {
|
||||
// uVar2 = lbl_80451368->hasReset();
|
||||
uVar2 = Z2AudioMgr_NS_hasReset(lbl_80451368);
|
||||
} while ((uVar2 & 0xff) == 0);
|
||||
}
|
||||
|
||||
if ((s32)DVDGetDriveStatus() == (s32)DVD_STATE_BUSY) {
|
||||
OSAttention(lbl_80374198);
|
||||
}
|
||||
JASTaskThread *task_thread = JASDvd_NS_getThreadPointer();
|
||||
if (task_thread != NULL) {
|
||||
JASTaskThread_NS_pause(task_thread, true);
|
||||
thread = task_thread->thread;
|
||||
if (thread != NULL) {
|
||||
OSSuspendThread(thread);
|
||||
OSDetachThread(thread);
|
||||
OSCancelThread(thread);
|
||||
}
|
||||
}
|
||||
|
||||
VIWaitForRetrace();
|
||||
VIWaitForRetrace();
|
||||
|
||||
thread = GXGetCurrentGXThread();
|
||||
enable = OSDisableInterrupts();
|
||||
OSThread* ourThread = OSGetCurrentThread();
|
||||
if (thread != ourThread) {
|
||||
OSCancelThread(thread);
|
||||
GXSetCurrentGXThread();
|
||||
}
|
||||
GXFlush();
|
||||
GXAbortFrame();
|
||||
GXDrawDone();
|
||||
|
||||
OSRestoreInterrupts(enable);
|
||||
|
||||
destroyVideo();
|
||||
|
||||
// nb: probably fake match (i am not sure that it's actually attached to this label lol)
|
||||
while (((s32*)lbl_803EAF40)[0x7f0] != 0) {
|
||||
VIWaitForRetrace();
|
||||
}
|
||||
|
||||
my_OSCancelAlarmAll();
|
||||
LCDisable();
|
||||
// probably false match; check out 80015728 or thereabouts in Ghidra
|
||||
OSSetSaveRegion(/* mResetData */ m_Do_Reset_NS_mDoRst_NS_mResetData, (u8*)(&getResetData__6mDoRstFv) + 0x18);
|
||||
OSResetSystem(p1, p2, p3);
|
||||
do {
|
||||
VIWaitForRetrace();
|
||||
} while (true);
|
||||
}
|
||||
|
||||
void mDoRst::resetCallBack(int p1, void* p2) {
|
||||
if (/* mResetData */ m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x0 == 0) {
|
||||
if (p1 == -1) {
|
||||
cAPICPad_recalibrate();
|
||||
} else {
|
||||
if (m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x8 != 0) {
|
||||
lbl_80451501 = false;
|
||||
/* sCallback */ lbl_804514EC = &mDoRst::resetCallBack;
|
||||
/* sCallbackArg */ lbl_804514F0 = 0;
|
||||
return;
|
||||
}
|
||||
m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x8 = 1;
|
||||
m_Do_Reset_NS_mDoRst_NS_mResetData->pad_index = p1;
|
||||
cAPICPad_recalibrate();
|
||||
}
|
||||
|
||||
if ((DVDCheckDisk() == 0) && (DVDGetDriveStatus() != DVD_STATE_FATAL_ERROR)) {
|
||||
m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x11 = 1;
|
||||
}
|
||||
m_Do_Reset_NS_mDoRst_NS_mResetData->field_0x0 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
ResetData* mDoRst::getResetData() {
|
||||
return /* mResetData */ m_Do_Reset_NS_mDoRst_NS_mResetData;
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
#include "m_Do/m_Do_main/m_Do_main.h"
|
||||
#include "m_Do/m_Do_reset/m_Do_reset.h"
|
||||
#include "d/d_com/d_com_inf_game/d_com_inf_game.h"
|
||||
#include "dvd/dvd.h"
|
||||
#include "global.h"
|
||||
|
||||
void version_check(void) {
|
||||
|
||||
Reference in New Issue
Block a user