m_Do debug (#3052)

* m_Do debug

* m_Do wii data
This commit is contained in:
Jcw87
2026-01-18 17:59:57 -08:00
committed by GitHub
parent 52a1e1363a
commit 87a3705039
43 changed files with 862 additions and 446 deletions
+2 -1
View File
@@ -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"
@@ -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;
+4 -4
View File
@@ -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;
}
+27 -16
View File
@@ -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);
+1 -1
View File
@@ -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());
+18 -21
View File
@@ -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;
}
+61 -22
View File
@@ -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 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();
}
void checkDiskCallback(s32 result, DVDCommandBlock* block) {
block->userData = (void*)result;
}
if (DVDCheckDisk() == 0 && DVDGetDriveStatus() != DVD_STATE_FATAL_ERROR) {
void mDoRst_resetCallBack(int port, void*) {
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();
}
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();
}
+2 -2
View File
@@ -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;
+202 -18
View File
@@ -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));
}
}
mDoDvdThd_command_c::~mDoDvdThd_command_c() {}
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)");
}
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");
}
+16 -19
View File
@@ -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);
+138
View File
@@ -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;
}
+5 -1
View File
@@ -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();
+1
View File
@@ -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;
+2 -2
View File
@@ -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) {}
}
+11 -4
View File
@@ -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) {
+4 -4
View File
@@ -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;
}
+47 -41
View File
@@ -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
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
if (__OSReport_Error_disable) {
return;
}
#if DEBUG
OSThread* thread = mDoExt_GetCurrentRunningThread();
if (thread != NULL) {
OSLockMutex(&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();
}
+1 -1
View File
@@ -175,7 +175,7 @@ static void KillThreads(void) {
}
}
void OSShutdownSystem(BOOL reset, u32 resetCode, BOOL forceMenu) {
void OSShutdownSystem() {
SCIdleModeInfo idleModeInfo;
OSIOSRev iosRev;
OSStateFlags state;