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:
Erin Moon
2020-12-25 19:59:52 -06:00
committed by GitHub
parent 22bda03652
commit 58fc83c4f8
37 changed files with 383 additions and 287 deletions
+110 -1
View File
@@ -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;
}
+2
View File
@@ -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) {