mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-14 14:08:07 -04:00
00fe8a0873
* 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
68 lines
1.8 KiB
C++
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);
|
|
}
|