Files
tww/src/m_Do/m_Do_DVDError.cpp
T
TakaRikka 00fe8a0873 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
2023-09-16 13:46:37 -07:00

68 lines
1.8 KiB
C++

//
// Generated by dtk
// Translation Unit: m_Do_DVDError.cpp
//
#include "m_Do/m_Do_DVDError.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() {
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() {
if (mDoDvdErr_initialized) {
OSCancelThread(&DvdErr_thread);
OSCancelAlarm(&Alarm);
mDoDvdErr_initialized = false;
}
}
/* 80018CE8-80018D44 .text mDoDvdErr_Watch__FPv */
void mDoDvdErr_Watch(void*) {
{
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*) {
OSResumeThread(&DvdErr_thread);
}