diff options
| author | Jcw87 <Jcw87@users.noreply.github.com> | 2026-01-05 02:19:14 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-05 02:19:14 -0800 |
| commit | b897ed3ec9b63001ce74411569a087cacc4f23d9 (patch) | |
| tree | 5fe811f8a813474bc6edd6abf78a643f6f706b7a /src/m_Do/m_Do_machine.cpp | |
| parent | deb7bead205cb35ff5f57ee3d466179defde44cb (diff) | |
m_Do debug (#3017)
* m_Do debug
* d_particle fix
Diffstat (limited to 'src/m_Do/m_Do_machine.cpp')
| -rw-r--r-- | src/m_Do/m_Do_machine.cpp | 211 |
1 files changed, 172 insertions, 39 deletions
diff --git a/src/m_Do/m_Do_machine.cpp b/src/m_Do/m_Do_machine.cpp index d58a1766b8..34217648c7 100644 --- a/src/m_Do/m_Do_machine.cpp +++ b/src/m_Do/m_Do_machine.cpp @@ -28,6 +28,33 @@ #include "m_Do/m_Do_main.h" #include "DynamicLink.h" +#if !PLATFORM_GCN +#include "revolution/sc.h" +#include "revolution/wpad.h" +#endif + +#if PLATFORM_GCN +#define MAP_FILE_PLATFORM "" +#define MAP_FOLDER_PLATFORM "/Final" +#elif PLATFORM_WII +#define MAP_FILE_PLATFORM "R" +#define MAP_FOLDER_PLATFORM "/Rfinal" +#else +#define MAP_FILE_PLATFORM "R" +#define MAP_FOLDER_PLATFORM "/RVL" +#endif + +#if DEBUG +#define MAP_FILE_SUFFIX "D" +#define MAP_FOLDER_MODE "/Debug" +#else +#define MAP_FILE_SUFFIX "F" +#define MAP_FOLDER_MODE "/Release" +#endif + +#define MAP_FOLDER "/map" MAP_FOLDER_PLATFORM MAP_FOLDER_MODE +#define MAP_FILE "/" MAP_FILE_PLATFORM "framework" MAP_FILE_SUFFIX ".map" + #if DEBUG u8 mDoMch::mDebugFill = true; u8 mDoMch::mDebugFillNotUse = 0xDD; @@ -292,13 +319,16 @@ static const char* myGetHeapTypeByString(JKRHeap* p_heap) { case 0: return "(Null)"; default: - u32 tmpType = heapType; - char* typeStr = (char*)&tmpType; - - tmpString[0] = typeStr[0]; - tmpString[1] = typeStr[1]; - tmpString[2] = typeStr[2]; - tmpString[3] = typeStr[3]; + union { + char c[4]; + u32 word; + } typeStr; + typeStr.word = heapType; + + tmpString[0] = typeStr.c[0]; + tmpString[1] = typeStr.c[1]; + tmpString[2] = typeStr.c[2]; + tmpString[3] = typeStr.c[3]; tmpString[4] = 0; return tmpString; } @@ -319,13 +349,16 @@ static void myMemoryErrorRoutine(void* p_heap, u32 size, int alignment) { size, size, alignment, p_heap); } - u32 heapType = heap->getHeapType(); - u8* tmpString = (u8*)&heapType; + union { + u8 c[4]; + u32 word; + } heapType; + heapType.word = heap->getHeapType(); if (notSolidHeap) { OSReport_Error( "FreeSize=%08x TotalFreeSize=%08x HeapType=%08x(%c%c%c%c) HeapSize=%08x %s\n", - heap->getFreeSize(), heap->getTotalFreeSize(), heapType, tmpString[0], tmpString[1], - tmpString[2], tmpString[3], heap->getHeapSize(), myGetHeapTypeByString(heap)); + heap->getFreeSize(), heap->getTotalFreeSize(), heapType.word, heapType.c[0], heapType.c[1], + heapType.c[2], heapType.c[3], heap->getHeapSize(), myGetHeapTypeByString(heap)); } if (heapErrors == 0) { @@ -350,18 +383,26 @@ static void myMemoryErrorRoutine(void* p_heap, u32 size, int alignment) { void myHeapCheckRecursive(JKRHeap* p_heap) { if (!p_heap->check()) { - const char* type = myGetHeapTypeByString(p_heap); - OSReport_Error("error in %08x(%s)\n", p_heap, type); + OSReport_Error("error in %08x(%s)\n", p_heap, myGetHeapTypeByString(p_heap)); } - JSUTree<JKRHeap>* heapTree = &p_heap->getHeapTree(); - for (JSUTree<JKRHeap>* i = heapTree->getFirstChild(); i != NULL; i = i->getNextChild()) { + for (JSUTree<JKRHeap>* i = p_heap->getHeapTree().getFirstChild(); i != NULL; i = i->getNextChild()) { myHeapCheckRecursive(i->getObject()); } } void mDoMch_HeapCheckAll() { - myHeapCheckRecursive(JKRHeap::sRootHeap); + myHeapCheckRecursive(JKRGetRootHeap()); +#if PLATFORM_WII || PLATFORM_SHIELD + myHeapCheckRecursive(JKRGetRootHeap2()); +#endif +#if DEBUG + DummyCheckHeap_check(); +#endif +} + +void mDoMch_HeapFreeFillAll() { + myHeapCheckRecursive(JKRGetRootHeap()); } static int developKeyCheck(u32 btnTrig, u32 btnHold) { @@ -396,18 +437,73 @@ static int developKeyCheck(u32 btnTrig, u32 btnHold) { } BOOL mDoMch_IsProgressiveMode() { - return OSGetProgressiveMode() == true; +#if PLATFORM_GCN + bool result = OSGetProgressiveMode() == true; +#else + bool result = SCGetProgressiveMode() == true; +#endif + return result; } -bool exceptionReadPad(u32* p_btnTrig, u32* p_btnHold) { - return JUTException::getManager()->readPad(p_btnTrig, p_btnHold); +#if !PLATFORM_GCN +void exceptionNNGCReadPad(u32* p_btnTrig, u32* p_btnHold) { + static u32 l_cnvButton[10][2] = { + WPAD_BUTTON_MINUS, 0x40, + WPAD_BUTTON_PLUS, 0x20, + WPAD_BUTTON_HOME, 0x10, + WPAD_BUTTON_UP, 0x8, + WPAD_BUTTON_DOWN, 0x4, + WPAD_BUTTON_LEFT, 0x1, + WPAD_BUTTON_RIGHT, 0x2, + WPAD_BUTTON_1, 0x100, + WPAD_BUTTON_2, 0x200, + WPAD_BUTTON_A, 0x1000, + }; + static u32 l_oldButton; + + WPADStatus status; + WPADRead(0, &status); + *p_btnHold = 0; + u32* r29 = l_cnvButton[0]; + for (u32 i = 0; i < 10; i++) { + if (status.button & r29[0]) { + *p_btnHold |= r29[1]; + } + r29 += 2; + } + *p_btnTrig = *p_btnHold & (*p_btnHold ^ l_oldButton); + l_oldButton = *p_btnHold; } +#endif + +void exceptionReadPad(u32* p_btnTrig, u32* p_btnHold) { +#if PLATFORM_GCN + JUTException::getManager()->readPad(p_btnTrig, p_btnHold); +#else + exceptionNNGCReadPad(p_btnTrig, p_btnHold); +#endif +} + +void forever() { + while (true) {} +} + +#if !PLATFORM_GCN +void exceptionShutdown() { + mDoRst_reset(2, 0, 0); + //OSShutdownSystem(); + forever(); +} +#endif void exceptionRestart() { mDoRst_reset(0, 0, 0); +#if PLATFORM_GCN OSResetSystem(0, 0, 0); - do { - } while (true); +#else + //OSRestart(0); +#endif + while (true) {} } void myExceptionCallback(u16, OSContext*, u32, u32) { @@ -429,9 +525,10 @@ void myExceptionCallback(u16, OSContext*, u32, u32) { } else { manager->setTraceSuppress(0x80); if (mDoMain::developmentMode == 0) { +#if PLATFORM_GCN JUTGamePad pad(JUTGamePad::EPort1); manager->setGamePad(&pad); - +#endif if (manager != NULL) { OSEnableInterrupts(); // "Accepting Key input\n" @@ -440,16 +537,29 @@ void myExceptionCallback(u16, OSContext*, u32, u32) { exceptionReadPad(&btnTrig, &btnHold); developKeyCheck(btnTrig, btnHold); JUTException::waitTime(30); +#if PLATFORM_GCN if (JUTGamePad::C3ButtonReset::sResetOccurred) { exceptionRestart(); } +#else + if (mDoRst::isShutdown()) { + exceptionShutdown(); + } + if (OSGetResetButtonState()) { + // lbl_8074C385 = 1; + } else { +#if !DEBUG + exceptionRestart(); +#endif + } +#endif } // "JUTAssertion is visible\n" OSReport("JUTAssertionを可視化しました\n"); JUTAssertion::setVisible(true); JUTDbPrint::getManager()->setVisible(true); - JFWSystem::getSystemConsole()->setOutput(JUTConsole::OUTPUT_OSREPORT | - JUTConsole::OUTPUT_CONSOLE); + JUTConsole* console = JFWSystem::getSystemConsole(); + console->setOutput(JUTConsole::OUTPUT_OSREPORT | JUTConsole::OUTPUT_CONSOLE); } else { PPCHalt(); } @@ -459,7 +569,7 @@ void myExceptionCallback(u16, OSContext*, u32, u32) { JUTException::waitTime(3000); } } - DVDChangeDir("/map/Final/Release"); + DVDChangeDir(MAP_FOLDER); JUTDestroyVideoManager(); GXSetDrawDoneCallback(NULL); VISetBlack(0); @@ -476,10 +586,14 @@ static void fault_callback_scroll(u16, OSContext* p_context, u32, u32) { *(u32*)(srr0 - 0x8), *(u32*)(srr0 - 0x4), *(u32*)srr0); } +#if PLATFORM_GCN JUTGamePad pad(JUTGamePad::EPort1); manager->setGamePad(&pad); BOOL padDisabled = manager->isEnablePad() == false; +#else + bool padDisabled = false; +#endif if (!padDisabled) { exConsole->print("PUSH START BUTTON TO ADDITIONAL INFOMATION\n"); exConsole->print("--------------------------------------\n"); @@ -491,10 +605,11 @@ static void fault_callback_scroll(u16, OSContext* p_context, u32, u32) { while (true) { u32 btnHold, btnTrig; exceptionReadPad(&btnTrig, &btnHold); - +#if PLATFORM_GCN if (JUTGamePad::C3ButtonReset::sResetOccurred) { OSResetSystem(1, 0, 0); } +#endif bool waitRetrace = false; if (btnTrig == PAD_BUTTON_START) { @@ -504,13 +619,14 @@ static void fault_callback_scroll(u16, OSContext* p_context, u32, u32) { if (btnTrig == PAD_TRIGGER_Z) { JUTConsole* sysConsole = JFWSystem::getSystemConsole(); - if (JUTConsoleManager::getManager()->getDirectConsole() != sysConsole) { + JUTConsole* directConsole = JUTConsoleManager::getManager()->getDirectConsole(); + if (directConsole != sysConsole) { exConsole = sysConsole; - exConsole->setFontSize(8.0f, 6.0f); - exConsole->setPosition(8, 32); - exConsole->setHeight(23); - exConsole->setVisible(true); - exConsole->setOutput(JUTConsole::OUTPUT_CONSOLE | JUTConsole::OUTPUT_OSREPORT); + sysConsole->setFontSize(8.0f, 6.0f); + sysConsole->setPosition(8, 32); + sysConsole->setHeight(23); + sysConsole->setVisible(true); + sysConsole->setOutput(JUTConsole::OUTPUT_CONSOLE | JUTConsole::OUTPUT_OSREPORT); } else { exConsole = JUTException::getConsole(); } @@ -531,13 +647,13 @@ static void fault_callback_scroll(u16, OSContext* p_context, u32, u32) { if (btnHold == PAD_BUTTON_UP) { exConsole->scroll(holdUpCount < 3 ? -1 : (holdUpCount < 5 ? -2 : (holdUpCount < 7 ? -4 : -8))); waitRetrace = true; - holdDownCount = 0; holdUpCount++; + holdDownCount = 0; } else if (btnHold == PAD_BUTTON_DOWN) { exConsole->scroll(holdDownCount < 3 ? 1 : (holdDownCount < 5 ? 2 : (holdDownCount < 7 ? 4 : 8))); waitRetrace = true; - holdUpCount = 0; holdDownCount++; + holdUpCount = 0; } else { holdUpCount = 0; holdDownCount = 0; @@ -597,6 +713,27 @@ void my_SysPrintHeap(char const* message, void* start, u32 size) { end, size / 1024); } +#if DEBUG +u8 myWarningCount[115]; + +void myGXVerifyCallback(GXWarningLevel param_1, u32 param_2, const char* param_3) { + if (param_2 < ARRAY_SIZE(myWarningCount)) { + if (myWarningCount[param_2] >= 255) { + return; + } + if (myWarningCount[param_2] == 0) { + static const char* color[] = {"\x1b[34m", "\x1b[41;37m", "\x1b[43;30m", "\x1b[33m"}; + OSReport("%sGX L%1d, Warning %03d: %s\n\x1b[m", color[param_1], param_1, param_2, param_3); + JUTReportConsole_f("GX L%1d, Warning %03d: %s\n", param_1, param_2, param_3); + } + myWarningCount[param_2]++; + } else { + OSReport_Warning("GX L%1d, Warning %03d: %s\n", param_1, param_2, param_3); + JUTReportConsole_f("GX L%1d, Warning %03d: %s\n", param_1, param_2, param_3); + } +} +#endif + int mDoMch_Create() { if (mDoMain::developmentMode == 0 || !(OSGetConsoleType() & 0x10000000)) { OSReportDisable(); @@ -813,11 +950,7 @@ int mDoMch_Create() { sysConsole->setOutput(JUTConsole::OUTPUT_CONSOLE | JUTConsole::OUTPUT_OSREPORT); sysConsole->setPosition(16, 42); -#if DEBUG - JUTException::setMapFile("/map/RVL/Debug/RframeworkD.map"); -#else - JUTException::appendMapFile("/map/Final/Release/frameworkF.map"); -#endif + JUTException::setMapFile(MAP_FOLDER MAP_FILE); JUTException::setPreUserCallback(myExceptionCallback); JUTException::setPostUserCallback(fault_callback_scroll); |
