diff options
| author | Jcw87 <Jcw87@users.noreply.github.com> | 2026-01-18 17:59:57 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-18 17:59:57 -0800 |
| commit | 87a3705039533b309a04baaaa0f99010b5d71c00 (patch) | |
| tree | 2dc2beb45a2b7b6a1738126a0c11c966c66a535c /src | |
| parent | 52a1e1363a4b91bc49f7994a553d16b90d969619 (diff) | |
m_Do debug (#3052)
* m_Do debug
* m_Do wii data
Diffstat (limited to 'src')
| -rw-r--r-- | src/JSystem/J3DGraphAnimator/J3DModel.cpp | 3 | ||||
| -rw-r--r-- | src/JSystem/J3DGraphAnimator/J3DModelData.cpp | 3 | ||||
| -rw-r--r-- | src/Z2AudioLib/Z2SoundObjMgr.cpp | 8 | ||||
| -rw-r--r-- | src/m_Do/m_Do_DVDError.cpp | 43 | ||||
| -rw-r--r-- | src/m_Do/m_Do_MemCard.cpp | 2 | ||||
| -rw-r--r-- | src/m_Do/m_Do_MemCardRWmng.cpp | 39 | ||||
| -rw-r--r-- | src/m_Do/m_Do_Reset.cpp | 79 | ||||
| -rw-r--r-- | src/m_Do/m_Do_audio.cpp | 4 | ||||
| -rw-r--r-- | src/m_Do/m_Do_dvd_thread.cpp | 220 | ||||
| -rw-r--r-- | src/m_Do/m_Do_ext.cpp | 35 | ||||
| -rw-r--r-- | src/m_Do/m_Do_ext2.cpp | 138 | ||||
| -rw-r--r-- | src/m_Do/m_Do_graphic.cpp | 6 | ||||
| -rw-r--r-- | src/m_Do/m_Do_lib.cpp | 1 | ||||
| -rw-r--r-- | src/m_Do/m_Do_machine.cpp | 4 | ||||
| -rw-r--r-- | src/m_Do/m_Do_machine_exception.cpp | 15 | ||||
| -rw-r--r-- | src/m_Do/m_Do_main.cpp | 8 | ||||
| -rw-r--r-- | src/m_Do/m_Do_printf.cpp | 84 | ||||
| -rw-r--r-- | src/revolution/os/OSReset.c | 2 |
18 files changed, 540 insertions, 154 deletions
diff --git a/src/JSystem/J3DGraphAnimator/J3DModel.cpp b/src/JSystem/J3DGraphAnimator/J3DModel.cpp index 076670c80c..f423f1db2f 100644 --- a/src/JSystem/J3DGraphAnimator/J3DModel.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DModel.cpp @@ -1,8 +1,9 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep -#include "JSystem/J3DGraphAnimator/J3DShapeTable.h" #include "JSystem/J3DGraphAnimator/J3DModel.h" +#include "JSystem/J3DGraphAnimator/J3DJoint.h" #include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" +#include "JSystem/J3DGraphAnimator/J3DShapeTable.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "JSystem/J3DGraphBase/J3DShapeMtx.h" #include "JSystem/J3DGraphBase/J3DSys.h" diff --git a/src/JSystem/J3DGraphAnimator/J3DModelData.cpp b/src/JSystem/J3DGraphAnimator/J3DModelData.cpp index 2cec1f6a4d..606882eb0a 100644 --- a/src/JSystem/J3DGraphAnimator/J3DModelData.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DModelData.cpp @@ -5,9 +5,10 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/J3DGraphAnimator/J3DModelData.h" +#include "JSystem/J3DGraphAnimator/J3DJoint.h" #include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" -#include "JSystem/J3DGraphBase/J3DMaterial.h" #include "JSystem/J3DGraphAnimator/J3DModel.h" +#include "JSystem/J3DGraphBase/J3DMaterial.h" void J3DModelData::clear() { mpRawData = 0; diff --git a/src/Z2AudioLib/Z2SoundObjMgr.cpp b/src/Z2AudioLib/Z2SoundObjMgr.cpp index c945865dd5..a1d87e6633 100644 --- a/src/Z2AudioLib/Z2SoundObjMgr.cpp +++ b/src/Z2AudioLib/Z2SoundObjMgr.cpp @@ -143,7 +143,7 @@ void Z2SoundObjMgr::searchEnemy() { Z2Calc::CURVE_POSITIVE); f32 veryFarDist = 5000.0f; - for (JSULink<Z2CreatureEnemy>* i = getFirst(); i != NULL; i = i->getNext()) { + for (JSULink<Z2CreatureEnemy>* i = field_0x0.getFirst(); i != NULL; i = i->getNext()) { Z2CreatureEnemy* enemy = i->getObject(); if (enemy == NULL) { JUT_WARN_DEVICE(100, 1, "%s", "[Z2SoundObjMgr::searchEnemy] remain remove enemy\n"); @@ -349,7 +349,7 @@ u8 Z2SoundObjMgr::getEnemyID(const char* enemyName, JSULink<Z2CreatureEnemy>* en if (enemyName != NULL) { for (u8 i = 0; i < ARRAY_SIZEU(mEnemyInfo); i++) { if (strcmp(enemyName, mEnemyInfo[(u32)i].mName) == 0) { - append(enemyLink); + field_0x0.append(enemyLink); return i; } } @@ -379,7 +379,7 @@ void Z2SoundObjMgr::deleteEnemyAll() { JSULink<Z2CreatureEnemy>* i; // not moving the pointer forward looks like a bug, but deleteObject() actually unlinks the enemy from its owning list - while (i = getFirst(), i != NULL) { + while (i = field_0x0.getFirst(), i != NULL) { Z2CreatureEnemy* enemy = i->getObject(); if (enemy == NULL) { JUT_WARN_DEVICE(367, 1, "%s", "[Z2SoundObjMgr::searchEnemy] remain remove enemy\n"); @@ -399,7 +399,7 @@ bool Z2SoundObjMgr::removeEnemy(JSULink<Z2CreatureEnemy>* enemyLink) { field_0x18--; } - bool result = remove(enemyLink); + bool result = field_0x0.remove(enemyLink); return result; } diff --git a/src/m_Do/m_Do_DVDError.cpp b/src/m_Do/m_Do_DVDError.cpp index 6bd81a52ef..d4884aeb1c 100644 --- a/src/m_Do/m_Do_DVDError.cpp +++ b/src/m_Do/m_Do_DVDError.cpp @@ -10,31 +10,38 @@ #include "m_Do/m_Do_ext.h" #include "m_Do/m_Do_Reset.h" +#if PLATFORM_GCN +const int stack_size = 3072; +#else +const int stack_size = 8192; +#endif + + bool mDoDvdErr_initialized; static OSThread DvdErr_thread; #pragma push #pragma force_active on -static u8 DvdErr_stack[3072] ATTRIBUTE_ALIGN(16); +static u8 DvdErr_stack[stack_size] ATTRIBUTE_ALIGN(16); #pragma pop static OSAlarm Alarm; void mDoDvdErr_ThdInit() { - if (!mDoDvdErr_initialized) { - OSTime time = OSGetTime(); - OSThread* curThread = OSGetCurrentThread(); - s32 priority = OSGetThreadPriority(curThread); - - OSCreateThread(&DvdErr_thread, (void*(*)(void*))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; + if (mDoDvdErr_initialized) { + return; } + + OSTime time = OSGetTime(); + + OSCreateThread(&DvdErr_thread, (void*(*)(void*))mDoDvdErr_Watch, NULL, DvdErr_stack + sizeof(DvdErr_stack), + sizeof(DvdErr_stack), OSGetThreadPriority(OSGetCurrentThread()) - 3, 1); + OSResumeThread(&DvdErr_thread); + OSCreateAlarm(&Alarm); + OSSetPeriodicAlarm(&Alarm, time, OS_BUS_CLOCK / 4, AlarmHandler); + + mDoDvdErr_initialized = true; } void mDoDvdErr_ThdCleanup() { @@ -46,13 +53,17 @@ void mDoDvdErr_ThdCleanup() { } static void mDoDvdErr_Watch(void*) { +#if PLATFORM_GCN OSDisableInterrupts(); - { JKRThread thread(OSGetCurrentThread(), 0); } +#endif + JKRThread(OSGetCurrentThread(), 0); - mDoExt_getAssertHeap()->becomeCurrentHeap(); + JKRSetCurrentHeap(mDoExt_getAssertHeap()); + s32 status; do { - if (DVDGetDriveStatus() == DVD_STATE_FATAL_ERROR) { + status = DVDGetDriveStatus(); + if (status == DVD_STATE_FATAL_ERROR) { mDoDvdThd::suspend(); } OSSuspendThread(&DvdErr_thread); diff --git a/src/m_Do/m_Do_MemCard.cpp b/src/m_Do/m_Do_MemCard.cpp index 47c29af4a1..1467bd56c2 100644 --- a/src/m_Do/m_Do_MemCard.cpp +++ b/src/m_Do/m_Do_MemCard.cpp @@ -857,7 +857,7 @@ s32 mDoMemCd_Ctrl_c::checkspaceNAND() { mDoMemCd_Ctrl_c g_mDoMemCd_control; static int mDoMemCd_main(void*) { - { JKRThread thread(OSGetCurrentThread(), 0); } + JKRThread(OSGetCurrentThread(), 0); JKRSetCurrentHeap(mDoExt_getAssertHeap()); diff --git a/src/m_Do/m_Do_MemCardRWmng.cpp b/src/m_Do/m_Do_MemCardRWmng.cpp index dacaba3bee..e0eb777374 100644 --- a/src/m_Do/m_Do_MemCardRWmng.cpp +++ b/src/m_Do/m_Do_MemCardRWmng.cpp @@ -411,45 +411,42 @@ static BOOL mDoMemCdRWm_CheckCardStat(CARDFileInfo* file) { } static u32 mDoMemCdRWm_CalcCheckSum(void* data, u32 size) { - u16 high; - u16 low; - - low = 0; - high = 0; - - u16* d = (u16*)data; - for (int i = 0; i < size / 2; i++) { + int i; + u16 high, low; + high = low = 0; + u16* d; + for (i = 0, d = (u16*)data; i < size / 2; i++, d++) { high += *d; low += ~*d; - d++; } return high << 16 | low; } static u64 mDoMemCdRWm_CalcCheckSumGameData(void* data, u32 size) { - u32 high; - u32 low; + int i; + u32 high, low; + high = low = 0; - low = 0; - high = 0; - - u8* d = (u8*)data; - for (int i = 0; i < size; i++) { + u8* d; + for (i = 0, d = (u8*)data; i < size; i++, d++) { high += *d; low += ~*d; - d++; } - return (u64)high << 32 | low; + u64 tmp = high; + return tmp << 32 | low; } BOOL mDoMemCdRWm_TestCheckSumGameData(void* data) { - u64 checksum = mDoMemCdRWm_CalcCheckSumGameData(data, (SAVEDATA_SIZE - sizeof(u64))); - return checksum == *(u64*)((u8*)data + (SAVEDATA_SIZE - sizeof(u64))); + u64 checksum; + u8* file_ptr = (u8*)data; + checksum = mDoMemCdRWm_CalcCheckSumGameData(data, (SAVEDATA_SIZE - sizeof(u64))); + return checksum == *(u64*)(file_ptr + (SAVEDATA_SIZE - sizeof(u64))); } void mDoMemCdRWm_SetCheckSumGameData(u8* data, u8 dataNum) { u8* file_ptr = data + (dataNum * SAVEDATA_SIZE); - *(u64*)(file_ptr + (SAVEDATA_SIZE - sizeof(u64))) = mDoMemCdRWm_CalcCheckSumGameData(file_ptr, (SAVEDATA_SIZE - sizeof(u64))); + u64 checksum = mDoMemCdRWm_CalcCheckSumGameData(file_ptr, (SAVEDATA_SIZE - sizeof(u64))); + *(u64*)(file_ptr + (SAVEDATA_SIZE - sizeof(u64))) = checksum; } diff --git a/src/m_Do/m_Do_Reset.cpp b/src/m_Do/m_Do_Reset.cpp index a19ca6ff99..5d7fc36d88 100644 --- a/src/m_Do/m_Do_Reset.cpp +++ b/src/m_Do/m_Do_Reset.cpp @@ -11,8 +11,13 @@ #include "dolphin/gx.h" #include "m_Do/m_Do_audio.h" #include "m_Do/m_Do_DVDError.h" +#include "m_Do/m_Do_ext.h" #include "m_Do/m_Do_MemCard.h" +#if !PLATFORM_GCN +#include "revolution/os.h" +#endif + static void my_OSCancelAlarmAll() {} static void destroyVideo() { @@ -26,16 +31,15 @@ static void destroyVideo() { mDoRstData* mDoRst::mResetData; -void mDoRst_reset(int param_0, u32 param_1, int param_2) { +void mDoRst_reset(int reset, u32 resetCode, int forceMenu) { + JUT_ASSERT(83, mDoExt_GetCurrentRunningThread() != 0); JUTXfb::getManager()->clearIndex(); mDoDvdErr_ThdCleanup(); cAPICPad_recalibrate(); if (mDoAud_zelAudio_c::isInitFlag()) { - bool audioReset; do { - audioReset = Z2AudioMgr::getInterface()->hasReset(); - } while (!audioReset); + } while (!Z2AudioMgr::getInterface()->hasReset()); } if (DVDGetDriveStatus() == DVD_STATE_BUSY) { @@ -76,33 +80,68 @@ void mDoRst_reset(int param_0, u32 param_1, int param_2) { my_OSCancelAlarmAll(); LCDisable(); +#if PLATFORM_GCN OSSetSaveRegion(mDoRst::mResetData, (u8*)&mDoRst::getResetData + 0x18); - OSResetSystem(param_0, param_1, param_2); + OSResetSystem(reset, resetCode, forceMenu); +#else + if (reset == 2) { + OSShutdownSystem(); + } else if (reset == 0) { + OSRestart(resetCode); + } else { + OSReturnToMenu(); + } +#endif do { VIWaitForRetrace(); } while (true); } +void checkDiskCallback(s32 result, DVDCommandBlock* block) { + block->userData = (void*)result; +} + void mDoRst_resetCallBack(int port, void*) { - if (!mDoRst::isReset()) { - if (port == -1) { - cAPICPad_recalibrate(); - } else { - if (mDoRst::is3ButtonReset()) { - JUTGamePad::C3ButtonReset::sResetOccurred = false; - JUTGamePad::C3ButtonReset::sCallback = mDoRst_resetCallBack; - JUTGamePad::C3ButtonReset::sCallbackArg = NULL; - return; - } - mDoRst::on3ButtonReset(); - mDoRst::set3ButtonResetPort(port); - cAPICPad_recalibrate(); + if (mDoRst::isReset()) { + return; + } + if (port == -1) { + cAPICPad_recalibrate(); + } else { + if (mDoRst::is3ButtonReset()) { +#if PLATFORM_GCN + JUTGamePad::C3ButtonReset::sResetOccurred = false; + JUTGamePad::C3ButtonReset::sCallback = mDoRst_resetCallBack; + JUTGamePad::C3ButtonReset::sCallbackArg = NULL; +#endif + return; } + mDoRst::on3ButtonReset(); + mDoRst::set3ButtonResetPort(port); + cAPICPad_recalibrate(); + } - if (DVDCheckDisk() == 0 && DVDGetDriveStatus() != DVD_STATE_FATAL_ERROR) { + int check; +#if PLATFORM_GCN + check = DVDCheckDisk(); +#else + DVDCommandBlock block; + block.userData = (void*)-1; + while (DVDCheckDiskAsync(&block, checkDiskCallback)); + do { + check = (int)block.userData; + } while (check == -1); +#endif + if (check == 0) { + s32 status = DVDGetDriveStatus(); + if (status != DVD_STATE_FATAL_ERROR) { mDoRst::onReturnToMenu(); } - mDoRst::onReset(); } + mDoRst::onReset(); +} + +void mDoRst_shutdownCallBack() { + mDoRst::onShutdown(); } diff --git a/src/m_Do/m_Do_audio.cpp b/src/m_Do/m_Do_audio.cpp index 07e593642c..a7c490a691 100644 --- a/src/m_Do/m_Do_audio.cpp +++ b/src/m_Do/m_Do_audio.cpp @@ -18,9 +18,9 @@ #include <revolution/sc.h> #endif -bool mDoAud_zelAudio_c::mInitFlag; +u8 mDoAud_zelAudio_c::mInitFlag; -bool mDoAud_zelAudio_c::mResetFlag; +u8 mDoAud_zelAudio_c::mResetFlag; bool mDoAud_zelAudio_c::mBgmSet; diff --git a/src/m_Do/m_Do_dvd_thread.cpp b/src/m_Do/m_Do_dvd_thread.cpp index 3a17914eec..0d9eabfad9 100644 --- a/src/m_Do/m_Do_dvd_thread.cpp +++ b/src/m_Do/m_Do_dvd_thread.cpp @@ -5,17 +5,20 @@ #include "m_Do/m_Do_dvd_thread.h" #include "JSystem/JAudio2/JASDvdThread.h" +#include "JSystem/JKernel/JKRAramArchive.h" #include "JSystem/JKernel/JKRAssertHeap.h" #include "JSystem/JKernel/JKRDvdRipper.h" #include "JSystem/JKernel/JKRExpHeap.h" #include "JSystem/JKernel/JKRMemArchive.h" #include "m_Do/m_Do_Reset.h" +#include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_ext.h" s32 mDoDvdThd::main(void* param_0) { - { JKRThread jkrThread(OSGetCurrentThread(), 0); } - mDoExt_getAssertHeap()->becomeCurrentHeap(); - static_cast<mDoDvdThd_param_c*>(param_0)->mainLoop(); + JKRThread(OSGetCurrentThread(), 0); + JKRSetCurrentHeap(mDoExt_getAssertHeap()); + mDoDvdThd_param_c* param = static_cast<mDoDvdThd_param_c*>(param_0); + param->mainLoop(); return 0; } @@ -30,6 +33,11 @@ u8 mDoDvdThd::verbose; u8 mDoDvdThd::DVDLogoMode; bool mDoDvdThd::SyncWidthSound; u8 mDoDvdThd::Report_DVDRead; +OSBootInfo* mDoDvdHack::BootInfo; +mDoDvdHack::FSTEntry* mDoDvdHack::FstStart; +const char* mDoDvdHack::FstStringStart; +u32 mDoDvdHack::MaxEntryNum; +mDoDvdHack::Manager mDoDvdHack::Manager::sManager; #else bool mDoDvdThd::SyncWidthSound; #endif @@ -48,14 +56,61 @@ void mDoDvdThd::create(s32 param_0) { } void mDoDvdThd::suspend() { + OS_REPORT("DVD読み込みスレッドを停止しました\n"); OSSuspendThread(&l_thread); } -static s32 my_DVDConvertPathToEntrynum(char const* param_0) { - return DVDConvertPathToEntrynum(param_0); +#if DEBUG +void mDoDvdHack::__DVDFSInit() { + BootInfo = (OSBootInfo*)OSPhysicalToCached(0); + FstStart = (FSTEntry*)BootInfo->FSTLocation; + if (FstStart) { + MaxEntryNum = FstStart->nextEntryOrLength; + FstStringStart = (char*)FstStart + (MaxEntryNum* sizeof(FSTEntry)); + } +} + +const char* mDoDvdHack::EntryToName(s32 entry) { + if (entry < 0) { + return "*ERROR*"; + } + if (entry == 0) { + return "/"; + } + return FstStringStart + (FstStart[entry].isDirAndStringOff & ~0xff000000); +} + +const char* mDoDvdHack::ConvertEntrynumToName(s32 entry) { + __DVDFSInit(); + return EntryToName(entry); +} +#endif + +static void dummy1() { + OS_REPORT(__FILE__); + OS_REPORT("DVDConvertEntrynumToPath: specified entrynum(%d) is out of range "); + OS_REPORT("DVDConvertEntrynumToPath: maxlen should be more than 1 (%d is specified)"); } -mDoDvdThd_command_c::~mDoDvdThd_command_c() {} + +static s32 my_DVDConvertPathToEntrynum(char const* path) { + s32 entrynum = DVDConvertPathToEntrynum(path); +#if DEBUG + if (entrynum < 0) { + BOOL connected = mDoCPd_c::isConnect(2); + if (connected) { + JUT_WARN(437, "can\'t open:[%s]\n", path); + } + } +#endif + return entrynum; +} + +mDoDvdThd_command_c::~mDoDvdThd_command_c() { + if (!mIsDone) { + OS_REPORT_ERROR("mDoDvdThd_command_c::~mDoDvdThd_command_c() 完了していないコマンドがデストラクトされました\nきっとカタストロフィが発生することでしょう\n"); + } +} mDoDvdThd_param_c::mDoDvdThd_param_c() { OSInitMessageQueue(&mMessageQueue, &mMessageQueueMessages, 1); @@ -90,16 +145,17 @@ void mDoDvdThd_param_c::cut(mDoDvdThd_command_c* param_0) { } static void cb(void* param_0) { - mDoDvdThd_command_c** pCmd = (mDoDvdThd_command_c**)param_0; - s32 result = (*pCmd)->execute(); + mDoDvdThd_command_c* pCmd = *(mDoDvdThd_command_c**)param_0; + s32 result = pCmd->execute(); if (result != 1) { OSReport_Error("mDoDvdThd_param_c::mainLoop() コマンドの実行が失敗しました。\n"); } } void mDoDvdThd_param_c::mainLoop() { + mDoDvdThd_command_c* command; while (this->waitForKick() != 0) { - while (mDoDvdThd_command_c* command = this->getFirstCommand()) { + while (command = this->getFirstCommand()) { this->cut(command); if (mDoDvdThd::SyncWidthSound) { JASDvd::getThreadPointer()->sendCmdMsg(cb, &command, 4); @@ -128,6 +184,9 @@ mDoDvdThd_callback_c* mDoDvdThd_callback_c::create(mDoDvdThd_callback_func pFunc new (mDoExt_getCommandHeap(), -4) mDoDvdThd_callback_c(pFunc, pData); if (callCmd != NULL) { mDoDvdThd::l_param.addition(callCmd); + if (mDoDvdThd::DVDLogoMode) { + OS_REPORT("\x1b[34m<DVD> callback %08x %08x %08x\n\x1b[m", callCmd, pFunc, pData); + } } return callCmd; } @@ -163,19 +222,28 @@ mDoDvdThd_mountArchive_c* mDoDvdThd_mountArchive_c::create(char const* pArchiveP } else { mountArcCmd->mHeap = pHeap; mDoDvdThd::l_param.addition(mountArcCmd); + if (mDoDvdThd::DVDLogoMode) { + OS_REPORT("\x1b[34m<DVD> mountArchive(%d:%s)\n\x1b[m", mountArcCmd->mEntryNumber, pArchivePath); + } } } return mountArcCmd; } s32 mDoDvdThd_mountArchive_c::execute() { +#if PLATFORM_GCN bool isZeldaHeap = false; bool isGameHeap = false; bool isArcHeap = false; bool isJ2DHeap = false; +#endif JKRHeap* heap = mHeap != NULL ? mHeap : mDoExt_getArchiveHeap(); - JKRMemArchive* memArchive; + JKRMemArchive* memArchive = NULL; +#if DEBUG + OSTime time1 = OSGetTime(); +#endif while (true) { +#if PLATFORM_GCN if (heap == mDoExt_getArchiveHeapPtr()) { isArcHeap = true; } else if (heap == mDoExt_getZeldaHeap()) { @@ -185,6 +253,7 @@ s32 mDoDvdThd_mountArchive_c::execute() { } else if (heap == mDoExt_getJ2dHeap()) { isJ2DHeap = true; } +#endif if (mMountDirection == 0) { memArchive = new (heap, 0) JKRMemArchive(mEntryNumber, JKRArchive::MOUNT_DIRECTION_HEAD); @@ -194,12 +263,22 @@ s32 mDoDvdThd_mountArchive_c::execute() { } if (memArchive != NULL && memArchive->isMounted()) { mArchive = memArchive; +#if DEBUG + OSTime time2 = OSGetTime(); + u32 msec = OS_TICKS_TO_MSEC(time2 - time1); + if (mArchive && mDoDvdThd::verbose) { + OS_REPORT("mDoDvdThd_mountArchive_c::execute: mArchive=%08x mArcHeader=%08x mMountDirection=%d Time=%4dms %s\n", mArchive, mArchive->mArcHeader, mMountDirection, msec, mDoDvdHack::ConvertEntrynumToName(mEntryNumber)); + } +#endif break; } OSReport_Error("mDoDvdThd_mountArchive_c::execute マウント失敗\n"); + OS_REPORT_ERROR("Name = %s\n", mDoDvdHack::ConvertEntrynumToName(mEntryNumber)); if (memArchive) { delete memArchive; } + memArchive = NULL; +#if PLATFORM_GCN if (!isZeldaHeap) { OSReport_Error("mDoDvdThd_mountArchive_c::execute ゼルダヒープで再チャレンジ!\n"); heap = mDoExt_getZeldaHeap(); @@ -216,11 +295,60 @@ s32 mDoDvdThd_mountArchive_c::execute() { OSReport_FatalError("mDoDvdThd_mountArchive_c::execute ヒープが致命的に足りません!\n"); break; } +#else + if (heap != mDoExt_getZeldaHeap()) { + OSReport_Error("mDoDvdThd_mountArchive_c::execute システムヒープで再チャレンジ!\n"); + heap = mDoExt_getZeldaHeap(); + } else { + OSReport_FatalError("mDoDvdThd_mountArchive_c::execute ヒープが致命的に足りません!\n"); + break; + } +#endif } mIsDone = true; return mArchive != NULL; } +mDoDvdThd_mountAramArchive_c::~mDoDvdThd_mountAramArchive_c() {} + +static void dummy_mDoDvdThd_mountAramArchive_c__create() { + OS_REPORT("<DVD> mountAramArchive(%d:%s)\n"); +} + +s32 mDoDvdThd_mountAramArchive_c::execute() { + JKRHeap* heap = mDoExt_getArchiveHeap(); + BOOL result = FALSE; + if (!mArchive) { + if (mMountDirection == 0) { + mArchive = new (heap, 0x20) JKRAramArchive(); + } else { + mArchive = new (heap, -0x20) JKRAramArchive(); + } +#if DEBUG + if (mDoDvdThd::verbose) { + OS_REPORT("mDoDvdThd_mountAramArchive_c::execute mArchive=%08x size=%08x\n", mArchive, JKRGetMemBlockSize(heap, mArchive)); + } +#endif + JUT_ASSERT(880, mArchive != NULL); + } + if (mArchive) { + JKRArchive::EMountDirection mountDirection = mMountDirection == 0 ? JKRArchive::MOUNT_DIRECTION_HEAD : JKRArchive::MOUNT_DIRECTION_TAIL; +#if DEBUG + OSTime time1 = OSGetTime(); +#endif + result = mArchive->mountFixed(mEntryNum, mountDirection); +#if DEBUG + OSTime time2 = OSGetTime(); + u32 msec = OS_TICKS_TO_MSEC(time2 - time1); + if (mDoDvdThd::verbose) { + OS_REPORT("mDoDvdThd_mountAramArchive_c::execute: mArchive=%08x ->mAramCache=%08x ->mFileSystem=%08x %s\n", mArchive, mArchive->mBlock, mArchive->mDvdFile, mDoDvdHack::ConvertEntrynumToName(mEntryNum)); + } +#endif + } + mIsDone = true; + return result; +} + mDoDvdThd_mountXArchive_c::~mDoDvdThd_mountXArchive_c() {} mDoDvdThd_mountXArchive_c::mDoDvdThd_mountXArchive_c(u8 mountDirection, JKRArchive::EMountMode mountMode) { @@ -249,21 +377,70 @@ mDoDvdThd_mountXArchive_c* mDoDvdThd_mountXArchive_c::create(char const* pArchiv } else { mountXArcCmd->mHeap = pHeap; mDoDvdThd::l_param.addition(mountXArcCmd); + if (mDoDvdThd::DVDLogoMode) { + OS_WARNING("<DVD> mountXArchive(%d:%s)\n", mountXArcCmd->mEntryNum, pArchivePath); + } } } return mountXArcCmd; } s32 mDoDvdThd_mountXArchive_c::execute() { +#if DEBUG + OSTime time1 = OSGetTime(); +#endif JKRArchive::EMountDirection mountDirection = mMountDirection == 0 ? JKRArchive::MOUNT_DIRECTION_HEAD : JKRArchive::MOUNT_DIRECTION_TAIL; JKRHeap* heap = mHeap != NULL ? mHeap : mDoExt_getArchiveHeap(); + s32 result = 0; mArchive = JKRArchive::mount(mEntryNum, mMountMode, heap, mountDirection); - s32 result = mArchive != NULL; + result = mArchive != NULL; +#if DEBUG + if (result) { + OSTime time2 = OSGetTime(); + u32 msec = OS_TICKS_TO_MSEC(time2 - time1); + if (mDoDvdThd::verbose) { + OS_REPORT("mDoDvdThd_mountXArchive_c::execute: mArchive=%08x %s\n", mArchive, mDoDvdHack::ConvertEntrynumToName(mEntryNum)); + } + } +#endif mIsDone = true; return result; } +mDoDvdThd_getResource_c::~mDoDvdThd_getResource_c() {} + +static void dummy_mDoDvdThd_getResource_c__create() { + OS_REPORT("<DVD> getResource(%x,%d)\n"); + OSReport("mDoDvdThd_getResource_c::create() クラス生成に失敗\n"); + OSReport("mDoDvdThd_getResource_c::create() リソース取得に失敗\n"); +} + +s32 mDoDvdThd_getResource_c::execute() { +#if DEBUG + OSTime time1 = OSGetTime(); +#endif + JUT_ASSERT(1080, mArchive); + mResource = mArchive->getResource(mResourceId); +#if DEBUG + OSTime time2 = OSGetTime(); + u32 msec = OS_TICKS_TO_MSEC(time2 - time1); + if (mArchive && mDoDvdThd::verbose) { + OS_REPORT("mDoDvdThd_getResource_c::execute: mResouce=%08x Time=%4dms\n", mResource, msec); + } +#endif + if (!mResource) { + OSReport_Error("mDoDvdThd_getResource_c::execute() リソース取得に失敗\n"); + } + mIsDone = true; + return mResource != NULL; +} + +static void dummy2() { + OS_REPORT("mEntryNum != -1"); + OS_REPORT("mDoDvdThd_toMainRam_c(%d:%s)\n"); +} + mDoDvdThd_toMainRam_c::mDoDvdThd_toMainRam_c(u8 param_0) { mMountDirection = param_0; if (param_0 == 0) { @@ -284,6 +461,9 @@ mDoDvdThd_toMainRam_c* mDoDvdThd_toMainRam_c::create(char const* pArchivePath, u } else { toMainRAMCmd->mHeap = pHeap; mDoDvdThd::l_param.addition(toMainRAMCmd); + if (mDoDvdThd::DVDLogoMode) { + OS_WARNING("<DVD> toMainRam(%d:%s)\n", toMainRAMCmd->mEntryNum, pArchivePath); + } } } return toMainRAMCmd; @@ -292,6 +472,9 @@ mDoDvdThd_toMainRam_c* mDoDvdThd_toMainRam_c::create(char const* pArchivePath, u mDoDvdThd_toMainRam_c::~mDoDvdThd_toMainRam_c() {} s32 mDoDvdThd_toMainRam_c::execute() { +#if DEBUG + OSTime time1 = OSGetTime(); +#endif JKRHeap* heap; if (mHeap != NULL) { heap = mHeap; @@ -301,17 +484,18 @@ s32 mDoDvdThd_toMainRam_c::execute() { JKRDvdRipper::EAllocDirection allocDir = mMountDirection == 0 ? JKRDvdRipper::ALLOC_DIRECTION_FORWARD : JKRDvdRipper::ALLOC_DIRECTION_BACKWARD; - mData = JKRDvdRipper::loadToMainRAM(mEntryNum, NULL, EXPAND_SWITCH_UNKNOWN1, 0, heap, allocDir, + mData = JKRDvdToMainRam(mEntryNum, NULL, EXPAND_SWITCH_UNKNOWN1, 0, heap, allocDir, 0, NULL, NULL); if (mData != NULL) { mDataSize = heap->getSize(mData); } +#if DEBUG + OSTime time2 = OSGetTime(); + u32 msec = OS_TICKS_TO_MSEC(time2 - time1); + if (mDoDvdThd::verbose) { + OS_REPORT("mDoDvdThd_toMainRam_c::execute: mMemAddress=%08x mMemSize=%08x %s\n", mData, mDataSize, mDoDvdHack::ConvertEntrynumToName(mEntryNum)); + } +#endif mIsDone = true; return mData != NULL; } - -static void dummy() { - OSReport("mDoDvdThd_getResource_c::create() クラス生成に失敗\n"); - OSReport("mDoDvdThd_getResource_c::create() リソース取得に失敗\n"); - OSReport("mDoDvdThd_getResource_c::execute() リソース取得に失敗\n"); -} diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 07ad32028e..7f4bf6f8f9 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -24,13 +24,9 @@ #include "m_Do/m_Do_mtx.h" #include <cstdio> -namespace m_Do_ext { -u8 CurrentHeapAdjustVerbose; -u8 HeapAdjustVerbose; -u8 HeapAdjustQuiet; -} - -static intptr_t safeGameHeapSize = -1; +u8 mDoExt::CurrentHeapAdjustVerbose; +u8 mDoExt::HeapAdjustVerbose; +u8 mDoExt::HeapAdjustQuiet; static void mDoExt_setJ3DData(Mtx mtx, const J3DTransformInfo* transformInfo, u16 param_2) { bool local_28; @@ -681,6 +677,7 @@ JKRExpHeap* mDoExt_getDbPrintHeap() { } JKRExpHeap* gameHeap; +static intptr_t safeGameHeapSize = -1; JKRExpHeap* mDoExt_createGameHeap(u32 heapSize, JKRHeap* parentHeap) { JUT_ASSERT(1739, gameHeap == NULL || heapSize == 0); @@ -2344,18 +2341,6 @@ static u8 l_matDL[132] ATTRIBUTE_ALIGN(32) = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -static u8 l_mat1DL[141] ATTRIBUTE_ALIGN(32) = { - 0x10, 0x00, 0x00, 0x10, 0x40, 0xFF, 0xFF, 0x42, 0x80, 0x08, 0x30, 0x3C, 0xF3, 0xCF, 0x00, 0x10, - 0x00, 0x00, 0x10, 0x18, 0x3C, 0xF3, 0xCF, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0E, 0x00, 0x00, 0x7F, - 0x32, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0C, 0xFF, - 0xFF, 0xFF, 0xFF, 0x61, 0x28, 0x38, 0x00, 0x40, 0x61, 0xC0, 0x28, 0xFA, 0x8F, 0x61, 0xC1, 0x08, - 0xFF, 0xF0, 0x61, 0x43, 0x00, 0x00, 0x41, 0x61, 0x40, 0x00, 0x00, 0x17, 0x61, 0x41, 0x00, 0x00, - 0x0C, 0x61, 0xF3, 0x7F, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x01, 0x10, - 0x00, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - void mDoExt_3DlineMat0_c::setMaterial() { j3dSys.reinitGX(); GXSetNumIndStages(0); @@ -2659,6 +2644,18 @@ int mDoExt_3DlineMat1_c::init(u16 param_0, u16 param_1, ResTIMG* param_2, int pa return 1; } +static u8 l_mat1DL[141] ATTRIBUTE_ALIGN(32) = { + 0x10, 0x00, 0x00, 0x10, 0x40, 0xFF, 0xFF, 0x42, 0x80, 0x08, 0x30, 0x3C, 0xF3, 0xCF, 0x00, 0x10, + 0x00, 0x00, 0x10, 0x18, 0x3C, 0xF3, 0xCF, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0E, 0x00, 0x00, 0x7F, + 0x32, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0C, 0xFF, + 0xFF, 0xFF, 0xFF, 0x61, 0x28, 0x38, 0x00, 0x40, 0x61, 0xC0, 0x28, 0xFA, 0x8F, 0x61, 0xC1, 0x08, + 0xFF, 0xF0, 0x61, 0x43, 0x00, 0x00, 0x41, 0x61, 0x40, 0x00, 0x00, 0x17, 0x61, 0x41, 0x00, 0x00, + 0x0C, 0x61, 0xF3, 0x7F, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x01, 0x10, + 0x00, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + void mDoExt_3DlineMat1_c::setMaterial() { j3dSys.reinitGX(); GXSetNumIndStages(0); diff --git a/src/m_Do/m_Do_ext2.cpp b/src/m_Do/m_Do_ext2.cpp new file mode 100644 index 0000000000..9d4c18228f --- /dev/null +++ b/src/m_Do/m_Do_ext2.cpp @@ -0,0 +1,138 @@ + +#include "d/dolzel.h" // IWYU pragma: keep + +#include "m_Do/m_Do_ext2.h" + +FixedMemoryCheck* FixedMemoryCheck::sFirst; + +FixedMemoryCheck::FixedMemoryCheck(u32* param_1, u32 size, JKRHeap* heap) { + mNowCode = param_1; + mSize = size; + mSaveCode = NULL; + mpHeap = heap; + field_0x10 = 0; + field_0x14 = false; + mNext = NULL; + if (sFirst) { + mNext = sFirst; + } + sFirst = this; +} + +FixedMemoryCheck* FixedMemoryCheck::easyCreate(void* param_1, u32 size) { + JKRHeap* heap = JKRGetRootHeap2(); + FixedMemoryCheck* memCheck = new (heap, 0) FixedMemoryCheck((u32*)param_1, size, heap); + if (!memCheck) { + memCheck = new (JKRGetSystemHeap(), 0) FixedMemoryCheck((u32*)param_1, size, NULL); + } + if (memCheck) { + memCheck->alloc(); + memCheck->save(); + memCheck->check(); + } + return memCheck; +} + +BOOL FixedMemoryCheck::checkAll() { + BOOL result = true; + for (FixedMemoryCheck* memCheck = sFirst; memCheck; memCheck = memCheck->mNext) { + if (!memCheck->check()) { + result = false; + } + } + return result; +} + +BOOL FixedMemoryCheck::diffAll() { + BOOL result = true; + for (FixedMemoryCheck* memCheck = sFirst; memCheck; memCheck = memCheck->mNext) { + if (!memCheck->diff()) { + result = false; + } + } + return result; +} + +BOOL FixedMemoryCheck::saveAll() { + BOOL result = true; + for (FixedMemoryCheck* memCheck = sFirst; memCheck; memCheck = memCheck->mNext) { + if (!memCheck->save()) { + result = false; + } + } + return result; +} + +BOOL FixedMemoryCheck::alloc() { + if (!mpHeap) { + OSReport_Error("FixedMemoryCheck::alloc ヒープ未設定\n"); + return false; + } + + if (mSaveCode) { + OSReport_Error("FixedMemoryCheck::alloc セーブ確保済み\n"); + return false; + } + + mSaveCode = (u32*)JKRAllocFromHeap(mpHeap, mSize, 4); + OSReport("FixedMemoryCheck::alloc: %dKB確保\n", mSize >> 10); + return mSaveCode != NULL; +} + +BOOL FixedMemoryCheck::save() { + if (!mNowCode) { + OSReport_Error("FixedMemoryCheck::save 設定ミス\n"); + return false; + } + if (mSaveCode) { + memcpy(mSaveCode, mNowCode, mSize); + } + u32 r28 = 0; + for (int i = 0; i < mSize / 4; i++) { + r28 += mNowCode[i]; + } + field_0x10 = r28; + OSReport("FixedMemoryCheck::save: チェックサム=%08x\n", field_0x10); + field_0x14 = false; + return true; +} + +BOOL FixedMemoryCheck::check() { + BOOL result = true; + if (!mSaveCode || !mNowCode) { + OSReport_Error("FixedMemoryCheck::check 設定ミス\n"); + return false; + } + u32 r29 = 0; + for (int i = 0; i < mSize / 4; i++) { + r29 += mNowCode[i]; + } + if (r29 != field_0x10) { + OSReport_Error("FixedMemoryCheck::check: チェックサム不一致 %08x : %08x\n", field_0x10, r29); + result = false; + } + if (mSaveCode) { + int cmp = memcmp(mSaveCode, mNowCode, mSize); + if(cmp) { + OSReport_Error("FixedMemoryCheck::check メモリ破壊発見 %08x %08x\n", mNowCode, mSize); + result = false; + if (!field_0x14) { + diff(); + field_0x14 = true; + } + } + } + return result; +} + +BOOL FixedMemoryCheck::diff() { + BOOL result = true; + OSReport("Address SaveCode NowCode\n"); + for (int i = 0; i < mSize / 4; i++) { + if (mSaveCode[i] != mNowCode[i]) { + result = false; + OSReport("%08x %08x %08x\n", mNowCode + i, mSaveCode[i], mNowCode[i]); + } + } + return result; +} diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index 7aed86fb99..1708067ac4 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -387,7 +387,7 @@ mDoGph_gInf_c::bloom_c mDoGph_gInf_c::m_bloom; Mtx mDoGph_gInf_c::mBlureMtx; -#if DEBUG +#if !PLATFORM_GCN cXyz mDoGph_gInf_c::csr_c::m_nowEffPos(0.0f, 0.0f, 0.0f); cXyz mDoGph_gInf_c::csr_c::m_oldEffPos(0.0f, 0.0f, 0.0f); cXyz mDoGph_gInf_c::csr_c::m_oldOldEffPos(0.0f, 0.0f, 0.0f); @@ -2105,6 +2105,10 @@ int mDoGph_Painter() { mDoGph_HIO_c mDoGph_HIO; #endif +static void dummy() { + OS_REPORT("mDoGph_Create():Initial of Graphic \n"); +} + int mDoGph_Create() { JKRSolidHeap* heap = mDoExt_createSolidHeapToCurrent(0, NULL, 0); mDoGph_gInf_c::create(); diff --git a/src/m_Do/m_Do_lib.cpp b/src/m_Do/m_Do_lib.cpp index 9b68a1a1c3..dc1b789d7a 100644 --- a/src/m_Do/m_Do_lib.cpp +++ b/src/m_Do/m_Do_lib.cpp @@ -119,6 +119,7 @@ void mDoLib_pos2camera(Vec* src, Vec* dst) { } static void dummy() { + std::tan(0.0f); J3DAlphaComp* alphaComp = NULL; alphaComp->setAlphaCompInfo((J3DAlphaCompInfo){}); J3DPEBlock* peBlock = NULL; diff --git a/src/m_Do/m_Do_machine.cpp b/src/m_Do/m_Do_machine.cpp index 34217648c7..30977fa34d 100644 --- a/src/m_Do/m_Do_machine.cpp +++ b/src/m_Do/m_Do_machine.cpp @@ -491,7 +491,7 @@ void forever() { #if !PLATFORM_GCN void exceptionShutdown() { mDoRst_reset(2, 0, 0); - //OSShutdownSystem(); + OSShutdownSystem(); forever(); } #endif @@ -501,7 +501,7 @@ void exceptionRestart() { #if PLATFORM_GCN OSResetSystem(0, 0, 0); #else - //OSRestart(0); + OSRestart(0); #endif while (true) {} } diff --git a/src/m_Do/m_Do_machine_exception.cpp b/src/m_Do/m_Do_machine_exception.cpp index 9588919d7f..93cfb59e9e 100644 --- a/src/m_Do/m_Do_machine_exception.cpp +++ b/src/m_Do/m_Do_machine_exception.cpp @@ -16,7 +16,7 @@ static JUTConsole* sConsole; void print_f(char const* fmt, ...) { va_list args; va_start(args, fmt); - JUTConsole_print_f_va_(sConsole, fmt, args); + sConsole->print_f_va(fmt, args); va_end(args); } @@ -44,8 +44,9 @@ void dispHeapInfo() { print_f("Archive %5d / %5d\n", archiveFree / 1024, archiveTotal / 1024); print("--------------------------------\n"); - if (JKRAram::getAramHeap()) { - JKRAram::getAramHeap()->dump(); + JKRAramHeap* aramHeap = JKRAram::getAramHeap(); + if (aramHeap) { + aramHeap->dump(); } DynamicModuleControlBase::dump(); g_dComIfG_gameInfo.mResControl.dump(); @@ -62,8 +63,13 @@ void dispGameInfo() { void dispDateInfo() { print("------------- Date Infomation ---------\n"); +#if DEBUG + print(" DEBUG VERSION\n"); + print("COMPILE USER: Authorized User\n"); +#else print(" FINAL VERSION\n"); print("COMPILE USER: FINAL\n"); +#endif print_f("COPYDATE : %17s\n", mDoMain::COPYDATE_STRING); OSCalendarTime time; @@ -84,7 +90,8 @@ void dispDateInfo() { } void dispConsoleToTerminal() { - JFWSystem::getSystemConsole()->dumpToTerminal(0xFFFFFFFF); + JUTConsole* console = JFWSystem::getSystemConsole(); + console->dumpToTerminal(0xFFFFFFFF); } void exception_addition(JUTConsole* pConsole) { diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 311685d165..84987d33ef 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -805,7 +805,7 @@ void parse_args(int argc, const char* argv[]) { dStage_roomControl_c::onNoArcBank(); OS_REPORT("\x1b[33mアーカイブバンクを無効にしました\n\x1b[m"); } else if (strcmp(argv[i], "--particle254") == 0) { - // data_8074c494 = 1; + fapGm_HIO_c::mParticle254Fix = 1; OSReport_Warning("パーティクル254固定にしました\n"); } else if (strncmp(argv[i], "--menu=", sizeof("--menu=") - 1) == 0) { char* var_r27 = strchr(argv[i] + 7, ','); @@ -822,15 +822,15 @@ void parse_args(int argc, const char* argv[]) { if (spC != NULL) { *spC = 0; spC++; - sscanf(spC, "%d", dScnMenu_c::cursolPoint); + sscanf(spC, "%d", &dScnMenu_c::cursolPoint); dScnMenu_c::m_error_flags |= (u8)8; } - sscanf(var_r26, "%d", dScnMenu_c::cursolLayer); + sscanf(var_r26, "%d", &dScnMenu_c::cursolLayer); dScnMenu_c::m_error_flags |= (u8)4; } - sscanf(var_r27, "%d", dScnMenu_c::cursolRoomNo); + sscanf(var_r27, "%d", &dScnMenu_c::cursolRoomNo); dScnMenu_c::m_error_flags |= (u8)2; } diff --git a/src/m_Do/m_Do_printf.cpp b/src/m_Do/m_Do_printf.cpp index 1cca26b3a1..154d54c737 100644 --- a/src/m_Do/m_Do_printf.cpp +++ b/src/m_Do/m_Do_printf.cpp @@ -214,57 +214,63 @@ void OSReport_FatalError(const char* fmt, ...) { void OSReport_Error(const char* fmt, ...) { print_errors++; - if (!__OSReport_Error_disable) { - #if DEBUG - OSThread* thread = mDoExt_GetCurrentRunningThread(); - if (thread != NULL) { - OSLockMutex(&print_mutex); - } - #endif + if (__OSReport_Error_disable) { + return; + } - va_list args; - va_start(args, fmt); - OSReportForceEnableOn(); - my_PutString("\x1B[41;37m[ERROR]"); - OSVReport(fmt, args); - my_PutString("\x1B[m"); - OSReportForceEnableOff(); - fflush(stdout); - va_end(args); + #if DEBUG + OSThread* thread = mDoExt_GetCurrentRunningThread(); + if (thread != NULL) { + OSLockMutex(&print_mutex); + } + #endif - #if DEBUG - if (thread != NULL) { - OSUnlockMutex(&print_mutex); - } - #endif + va_list args; + va_start(args, fmt); + OSReportForceEnableOn(); + my_PutString("\x1B[41;37m[ERROR]"); + OSVReport(fmt, args); + my_PutString("\x1B[m"); + OSReportForceEnableOff(); + fflush(stdout); + va_end(args); + + #if DEBUG + if (thread != NULL) { + OSUnlockMutex(&print_mutex); } + #endif } void OSReport_Warning(const char* fmt, ...) { print_warings++; - if (!__OSReport_Warning_disable) { - va_list args; - va_start(args, fmt); - OSReportForceEnableOn(); - my_PutString("\x1B[43;30m[WARN]"); - OSVAttention(fmt, args); - my_PutString("\x1B[m"); - OSReportForceEnableOff(); - fflush(stdout); - va_end(args); + if (__OSReport_Warning_disable) { + return; } + + va_list args; + va_start(args, fmt); + OSReportForceEnableOn(); + my_PutString("\x1B[43;30m[WARN]"); + OSVAttention(fmt, args); + my_PutString("\x1B[m"); + OSReportForceEnableOff(); + fflush(stdout); + va_end(args); } void OSReport_System(const char* fmt, ...) { print_systems++; - if (!__OSReport_System_disable) { - va_list args; - va_start(args, fmt); - OSReportForceEnableOn(); - OSVAttention(fmt, args); - OSReportForceEnableOff(); - va_end(args); + if (__OSReport_System_disable) { + return; } + + va_list args; + va_start(args, fmt); + OSReportForceEnableOn(); + OSVAttention(fmt, args); + OSReportForceEnableOff(); + va_end(args); } void OSPanic(const char* file, int line, const char* fmt, ...) { @@ -286,6 +292,6 @@ void OSPanic(const char* file, int line, const char* fmt, ...) { // force a crash by writing to an invalid address tmp = (u32*)0x1234567; - *tmp = 0x1234567; + *tmp = (uintptr_t)tmp; PPCHalt(); } diff --git a/src/revolution/os/OSReset.c b/src/revolution/os/OSReset.c index f0dbc50ba2..2bf9e8fbb1 100644 --- a/src/revolution/os/OSReset.c +++ b/src/revolution/os/OSReset.c @@ -175,7 +175,7 @@ static void KillThreads(void) { } } -void OSShutdownSystem(BOOL reset, u32 resetCode, BOOL forceMenu) { +void OSShutdownSystem() { SCIdleModeInfo idleModeInfo; OSIOSRev iosRev; OSStateFlags state; |
