summaryrefslogtreecommitdiff
path: root/src/m_Do/m_Do_machine.cpp
diff options
context:
space:
mode:
authorJcw87 <Jcw87@users.noreply.github.com>2026-01-05 02:19:14 -0800
committerGitHub <noreply@github.com>2026-01-05 02:19:14 -0800
commitb897ed3ec9b63001ce74411569a087cacc4f23d9 (patch)
tree5fe811f8a813474bc6edd6abf78a643f6f706b7a /src/m_Do/m_Do_machine.cpp
parentdeb7bead205cb35ff5f57ee3d466179defde44cb (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.cpp211
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);