mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-05-25 15:05:06 -04:00
a91d7c4539
* work on fop actor / actor mng, daalink, d_a_obj_item * d_a_title mostly decompiled * daalink / d_event / JMessage / dmsg_out_font work * msg_scrn_base / msg_scrn_boss * some work on mDo machine, d_menu_save, d_tresure, and various * remove asm * progress
765 lines
26 KiB
C++
765 lines
26 KiB
C++
//
|
|
// Generated By: dol2asm
|
|
// Translation Unit: m_Do/m_Do_machine
|
|
//
|
|
|
|
#include "m_Do/m_Do_machine.h"
|
|
#include "JSystem/JFramework/JFWSystem.h"
|
|
#include "JSystem/JKernel/JKRAram.h"
|
|
#include "JSystem/JKernel/JKRAramStream.h"
|
|
#include "JSystem/JKernel/JKRDvdAramRipper.h"
|
|
#include "JSystem/JUtility/JUTAssert.h"
|
|
#include "JSystem/JUtility/JUTDbPrint.h"
|
|
#include "JSystem/JUtility/JUTException.h"
|
|
#include "SSystem/SComponent/c_API_controller_pad.h"
|
|
#include "SSystem/SComponent/c_malloc.h"
|
|
#include "SSystem/SComponent/c_math.h"
|
|
#include "dol2asm.h"
|
|
#include "dolphin/types.h"
|
|
#include "m_Do/m_Do_DVDError.h"
|
|
#include "m_Do/m_Do_MemCard.h"
|
|
#include "m_Do/m_Do_dvd_thread.h"
|
|
#include "m_Do/m_Do_ext.h"
|
|
#include "m_Do/m_Do_machine_exception.h"
|
|
|
|
//
|
|
// Forward References:
|
|
//
|
|
|
|
extern "C" static void myGetHeapTypeByString__FP7JKRHeap();
|
|
extern "C" static void myMemoryErrorRoutine__FPvUli();
|
|
extern "C" void myHeapCheckRecursive__FP7JKRHeap();
|
|
extern "C" void mDoMch_HeapCheckAll__Fv();
|
|
extern "C" static s8 developKeyCheck__FUlUl(u32, u32);
|
|
extern "C" bool mDoMch_IsProgressiveMode__Fv();
|
|
extern "C" bool exceptionReadPad__FPUlPUl(u32*, u32*);
|
|
extern "C" void exceptionRestart__Fv();
|
|
extern "C" void myExceptionCallback__FUsP9OSContextUlUl();
|
|
extern "C" static void fault_callback_scroll__FUsP9OSContextUlUl();
|
|
extern "C" static void my_PrintHeap__FPCcUl();
|
|
extern "C" void my_SysPrintHeap__FPCcPvUl();
|
|
extern "C" void mDoMch_Create__Fv();
|
|
extern "C" extern char const* const m_Do_m_Do_machine__stringBase0;
|
|
extern "C" void* mRenderModeObj__15mDoMch_render_c[1 + 1 /* padding */];
|
|
|
|
//
|
|
// External References:
|
|
//
|
|
|
|
extern "C" void OSReportDisable();
|
|
extern "C" void OSReportEnable();
|
|
extern "C" void mDoExt_createAssertHeap__FP7JKRHeap();
|
|
extern "C" void mDoExt_createDbPrintHeap__FUlP7JKRHeap();
|
|
extern "C" void mDoExt_getDbPrintHeap__Fv();
|
|
extern "C" void mDoExt_createGameHeap__FUlP7JKRHeap();
|
|
extern "C" void mDoExt_getGameHeap__Fv();
|
|
extern "C" void mDoExt_createZeldaHeap__FUlP7JKRHeap();
|
|
extern "C" void mDoExt_getZeldaHeap__Fv();
|
|
extern "C" void mDoExt_createCommandHeap__FUlP7JKRHeap();
|
|
extern "C" void mDoExt_getCommandHeap__Fv();
|
|
extern "C" void mDoExt_createArchiveHeap__FUlP7JKRHeap();
|
|
extern "C" void mDoExt_getArchiveHeap__Fv();
|
|
extern "C" void mDoExt_createJ2dHeap__FUlP7JKRHeap();
|
|
extern "C" void mDoExt_getJ2dHeap__Fv();
|
|
extern "C" void mDoRst_reset__FiUli();
|
|
extern "C" void create__9mDoDvdThdFl();
|
|
extern "C" void mDoDvdErr_ThdInit__Fv();
|
|
extern "C" void ThdInit__15mDoMemCd_Ctrl_cFv();
|
|
extern "C" void exception_addition__FP10JUTConsole();
|
|
extern "C" void init__3cMlFP7JKRHeap();
|
|
extern "C" void cAPICPad_recalibrate__Fv();
|
|
extern "C" void cM_initRnd__Fiii();
|
|
extern "C" void firstInit__9JFWSystemFv();
|
|
extern "C" void init__9JFWSystemFv();
|
|
extern "C" void becomeCurrentHeap__7JKRHeapFv();
|
|
extern "C" void getFreeSize__7JKRHeapFv();
|
|
extern "C" void getTotalFreeSize__7JKRHeapFv();
|
|
extern "C" void setErrorFlag__7JKRHeapFb();
|
|
extern "C" void setErrorHandler__7JKRHeapFPFPvUli_v();
|
|
extern "C" void* __nw__FUl();
|
|
extern "C" void __ct__9JKRThreadFP8OSThreadi();
|
|
extern "C" void createManager__15JKRThreadSwitchFP7JKRHeap();
|
|
extern "C" void setTransBuffer__13JKRAramStreamFPUcUlP7JKRHeap();
|
|
extern "C" void start__10JUTDbPrintFP7JUTFontP7JKRHeap();
|
|
extern "C" void __ct__10JUTGamePadFQ210JUTGamePad8EPadPort();
|
|
extern "C" void __dt__10JUTGamePadFv();
|
|
extern "C" void isEnablePad__12JUTExceptionCFv();
|
|
extern "C" void readPad__12JUTExceptionFPUlPUl();
|
|
extern "C" void waitTime__12JUTExceptionFl();
|
|
extern "C" void setPreUserCallback__12JUTExceptionFPFUsP9OSContextUlUl_v();
|
|
extern "C" void setPostUserCallback__12JUTExceptionFPFUsP9OSContextUlUl_v();
|
|
extern "C" void appendMapFile__12JUTExceptionFPCc();
|
|
extern "C" void setVisible__12JUTAssertionFb();
|
|
extern "C" void destroyManager__8JUTVideoFv();
|
|
extern "C" void print_f__10JUTConsoleFPCce();
|
|
extern "C" void print__10JUTConsoleFPCc();
|
|
extern "C" void scroll__10JUTConsoleFi();
|
|
extern "C" void getUsedLine__10JUTConsoleCFv();
|
|
extern "C" void getLineOffset__10JUTConsoleCFv();
|
|
extern "C" void drawDirect__17JUTConsoleManagerCFb();
|
|
extern "C" void setDirectConsole__17JUTConsoleManagerFP10JUTConsole();
|
|
extern "C" void PPCHalt();
|
|
extern "C" u32 OSGetProgressiveMode();
|
|
extern "C" void OSSetProgressiveMode(u32);
|
|
extern "C" u32 VIGetDTVStatus();
|
|
extern "C" void _savegpr_28();
|
|
extern "C" void _restgpr_28();
|
|
extern "C" extern s8 data_80450580;
|
|
extern "C" u32 memMargin__7mDoMain;
|
|
extern "C" u32 maxStdHeaps__Q29JFWSystem11CSetUpParam;
|
|
extern "C" u32 sysHeapSize__Q29JFWSystem11CSetUpParam;
|
|
extern "C" u32 fifoBufSize__Q29JFWSystem11CSetUpParam;
|
|
extern "C" u32 aramAudioBufSize__Q29JFWSystem11CSetUpParam;
|
|
extern "C" u32 aramGraphBufSize__Q29JFWSystem11CSetUpParam;
|
|
extern "C" void* renderMode__Q29JFWSystem11CSetUpParam;
|
|
extern "C" u32 sSZSBufferSize__7JKRAram[1 + 1 /* padding */];
|
|
extern "C" u32 sSZSBufferSize__12JKRDvdRipper;
|
|
extern "C" u32 sSZSBufferSize__16JKRDvdAramRipper;
|
|
extern "C" u8 sHungUpTime__7mDoMain[4];
|
|
extern "C" extern u8 data_80450B14[4];
|
|
extern "C" u8 mResetData__6mDoRst[4 + 4 /* padding */];
|
|
extern "C" u8 systemHeap__9JFWSystem[4];
|
|
extern "C" u8 systemConsole__9JFWSystem[4];
|
|
extern "C" u8 sSystemHeap__7JKRHeap[4];
|
|
extern "C" u8 sRootHeap__7JKRHeap[4];
|
|
extern "C" u8 sDebugPrint__10JUTDbPrint[4 + 4 /* padding */];
|
|
extern "C" extern bool struct_80451500;
|
|
extern "C" u8 sErrorManager__12JUTException[4];
|
|
extern "C" u8 sConsole__12JUTException[4];
|
|
extern "C" u8 sManager__17JUTConsoleManager[4];
|
|
|
|
//
|
|
// Declarations:
|
|
//
|
|
|
|
/* 80450BF0-80450BF4 0000F0 0004+00 1/1 0/0 0/0 .sbss None */
|
|
static u8 data_80450BF0;
|
|
|
|
/* 80450BF4-80450BF8 0000F4 0004+00 1/1 0/0 0/0 .sbss solidHeapErrors */
|
|
static int solidHeapErrors;
|
|
|
|
/* 80450BF8-80450BFC 0000F8 0004+00 1/1 0/0 0/0 .sbss gameHeapErrors */
|
|
static int gameHeapErrors;
|
|
|
|
/* 80450BFC-80450C00 0000FC 0004+00 1/1 0/0 0/0 .sbss zeldaHeapErrors */
|
|
static int zeldaHeapErrors;
|
|
|
|
/* 80450C00-80450C04 000100 0004+00 1/1 0/0 0/0 .sbss commandHeapErrors */
|
|
static int commandHeapErrors;
|
|
|
|
/* 80450C04-80450C08 000104 0004+00 1/1 0/0 0/0 .sbss archiveHeapErrors */
|
|
static int archiveHeapErrors;
|
|
|
|
/* 80450C08-80450C0C 000108 0004+00 1/1 0/0 0/0 .sbss unknownHeapErrors */
|
|
static int unknownHeapErrors;
|
|
|
|
/* 80450C0C-80450C10 00010C 0004+00 1/1 0/0 0/0 .sbss heapErrors */
|
|
static u32 heapErrors;
|
|
|
|
/* 8000B1EC-8000B3EC 005B2C 0200+00 2/2 0/0 0/0 .text myGetHeapTypeByString__FP7JKRHeap
|
|
*/
|
|
static char* myGetHeapTypeByString(JKRHeap* p_heap) {
|
|
static char tmpString[5];
|
|
|
|
if (p_heap == JKRHeap::getSystemHeap()) {
|
|
return "SystemHeap";
|
|
}
|
|
|
|
if (p_heap == mDoExt_getZeldaHeap()) {
|
|
return "ZeldaHeap";
|
|
}
|
|
|
|
if (p_heap == mDoExt_getGameHeap()) {
|
|
return "GameHeap";
|
|
}
|
|
|
|
if (p_heap == mDoExt_getArchiveHeap()) {
|
|
return "ArchiveHeap";
|
|
}
|
|
|
|
if (p_heap == mDoExt_getCommandHeap()) {
|
|
return "CommandHeap";
|
|
}
|
|
|
|
if (p_heap == mDoExt_getDbPrintHeap()) {
|
|
return "DbPrintHeap";
|
|
}
|
|
|
|
if (p_heap == mDoExt_getJ2dHeap()) {
|
|
return "J2dHeap";
|
|
}
|
|
|
|
u32 heapType = p_heap->getHeapType();
|
|
switch (heapType) {
|
|
case 'ASTH':
|
|
return "ASTH";
|
|
case 'EXPH':
|
|
return "EXPH";
|
|
case 'SLID':
|
|
return "SLID";
|
|
case 'STDH':
|
|
return "STDH";
|
|
case 'UNIT':
|
|
return "UNIT";
|
|
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];
|
|
tmpString[4] = 0;
|
|
return tmpString;
|
|
}
|
|
}
|
|
|
|
/* 8000B3EC-8000B5C8 005D2C 01DC+00 1/1 0/0 0/0 .text myMemoryErrorRoutine__FPvUli */
|
|
static void myMemoryErrorRoutine(void* p_heap, u32 size, int alignment) {
|
|
JKRHeap* heap = (JKRHeap*)p_heap;
|
|
|
|
BOOL notSolidHeap = true;
|
|
if (heap->getHeapType() == 'SLID') {
|
|
notSolidHeap = false;
|
|
}
|
|
|
|
if (notSolidHeap) {
|
|
// "Error: Can't allocate memory %d(0x%x)Bytes, %d Byte Alignment from %08x\n"
|
|
OSReport_Error(
|
|
"エラー: メモリを確保できません %d(0x%x)バイト、 %d バイトアライメント from %08x\n",
|
|
size, size, alignment, p_heap);
|
|
}
|
|
|
|
u32 heapType = heap->getHeapType();
|
|
u8* tmpString = (u8*)&heapType;
|
|
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));
|
|
}
|
|
|
|
if (heapErrors == 0) {
|
|
heap->dump_sort();
|
|
}
|
|
heapErrors++;
|
|
|
|
if (p_heap == zeldaHeap) {
|
|
zeldaHeapErrors++;
|
|
} else if (p_heap == gameHeap) {
|
|
gameHeapErrors++;
|
|
} else if (p_heap == commandHeap) {
|
|
commandHeapErrors++;
|
|
} else if (p_heap == archiveHeap) {
|
|
archiveHeapErrors++;
|
|
} else if (heap->getHeapType() == 'SLID') {
|
|
solidHeapErrors++;
|
|
} else {
|
|
unknownHeapErrors++;
|
|
}
|
|
}
|
|
|
|
/* 8000B5C8-8000B668 005F08 00A0+00 1/1 0/0 0/0 .text myHeapCheckRecursive__FP7JKRHeap */
|
|
void myHeapCheckRecursive(JKRHeap* p_heap) {
|
|
if (!p_heap->check()) {
|
|
char* type = myGetHeapTypeByString(p_heap);
|
|
OSReport_Error("error in %08x(%s)\n", p_heap, type);
|
|
}
|
|
|
|
JSUTree<JKRHeap>* heapTree = &p_heap->getHeapTree();
|
|
for (JSUTree<JKRHeap>* i = heapTree->getFirstChild(); i != NULL; i = i->getNextChild()) {
|
|
myHeapCheckRecursive(i->getObject());
|
|
}
|
|
}
|
|
|
|
/* 8000B668-8000B68C 005FA8 0024+00 0/0 2/2 0/0 .text mDoMch_HeapCheckAll__Fv */
|
|
void mDoMch_HeapCheckAll() {
|
|
myHeapCheckRecursive(JKRHeap::sRootHeap);
|
|
}
|
|
|
|
static u8 debug_key0;
|
|
static u8 debug_key1;
|
|
static u8 debug_key2;
|
|
|
|
/* 8000B68C-8000B73C 005FCC 00B0+00 1/1 0/0 0/0 .text developKeyCheck__FUlUl */
|
|
static int developKeyCheck(u32 btnTrig, u32 btnHold) {
|
|
if (btnHold == (CButton::L | CButton::R | CButton::Z | CButton::DPAD_DOWN) &&
|
|
btnTrig == CButton::DPAD_DOWN) {
|
|
if (debug_key0 == 3 && debug_key1 == 6 && debug_key2 == 5) {
|
|
data_80450580 = 1;
|
|
} else {
|
|
debug_key0 = 0;
|
|
debug_key1 = 0;
|
|
debug_key2 = 0;
|
|
}
|
|
}
|
|
|
|
if (btnHold == (CButton::L | CButton::DPAD_RIGHT) && btnTrig == CButton::L) {
|
|
debug_key0++;
|
|
}
|
|
|
|
if (btnHold == (CButton::R | CButton::DPAD_UP) && btnTrig == CButton::R) {
|
|
debug_key1++;
|
|
}
|
|
|
|
if (btnHold == (CButton::Z | CButton::DPAD_LEFT) && btnTrig == CButton::Z) {
|
|
debug_key2++;
|
|
}
|
|
|
|
return data_80450580;
|
|
}
|
|
|
|
/* 8000B73C-8000B768 00607C 002C+00 1/1 0/0 0/0 .text mDoMch_IsProgressiveMode__Fv */
|
|
BOOL mDoMch_IsProgressiveMode() {
|
|
return OSGetProgressiveMode() == true;
|
|
}
|
|
|
|
/* 8000B768-8000B798 0060A8 0030+00 2/2 0/0 0/0 .text exceptionReadPad__FPUlPUl */
|
|
bool exceptionReadPad(u32* p_btnTrig, u32* p_btnHold) {
|
|
return JUTException::getManager()->readPad(p_btnTrig, p_btnHold);
|
|
}
|
|
|
|
/* 8000B798-8000B7C8 0060D8 0030+00 1/1 0/0 0/0 .text exceptionRestart__Fv */
|
|
void exceptionRestart() {
|
|
mDoRst_reset(0, 0, 0);
|
|
OSResetSystem(0, 0, 0);
|
|
do {
|
|
} while (true);
|
|
}
|
|
|
|
/* 8000B7C8-8000B95C 006108 0194+00 1/1 0/0 0/0 .text myExceptionCallback__FUsP9OSContextUlUl */
|
|
void myExceptionCallback(u16, OSContext*, u32, u32) {
|
|
u32 btnHold;
|
|
u32 btnTrig;
|
|
|
|
mDoMain::sHungUpTime = OSGetTime();
|
|
OSReportEnable();
|
|
cAPICPad_recalibrate();
|
|
// "Vibration stopping & resetting to default\n"
|
|
OSReport("振動停止&原点復帰\n");
|
|
|
|
JUTException* manager = JUTException::getManager();
|
|
|
|
if (manager == NULL) {
|
|
// "Exception Manager doesn't exist\n"
|
|
OSReport("例外マネージャがありません\n");
|
|
PPCHalt();
|
|
} else {
|
|
manager->setTraceSuppress(0x80);
|
|
if (data_80450580 == 0) {
|
|
JUTGamePad pad(JUTGamePad::Port_1);
|
|
manager->setGamePad(&pad);
|
|
|
|
if (manager != NULL) {
|
|
OSEnableInterrupts();
|
|
// "Accepting Key input\n"
|
|
OSReport("キー入力を受け付けています\n");
|
|
while (data_80450580 == 0) {
|
|
exceptionReadPad(&btnTrig, &btnHold);
|
|
developKeyCheck(btnTrig, btnHold);
|
|
JUTException::waitTime(30);
|
|
if (struct_80451501) {
|
|
exceptionRestart();
|
|
}
|
|
}
|
|
// "JUTAssertion is visible\n"
|
|
OSReport("JUTAssertionを可視化しました\n");
|
|
JUTAssertion::setVisible(true);
|
|
JUTDbPrint::getManager()->setVisible(true);
|
|
JFWSystem::getSystemConsole()->setOutput(JUTConsole::OUTPUT_OSREPORT |
|
|
JUTConsole::OUTPUT_CONSOLE);
|
|
} else {
|
|
PPCHalt();
|
|
}
|
|
} else {
|
|
// "Wait for 3 seconds\n"
|
|
OSReport("3秒間停止\n");
|
|
JUTException::waitTime(3000);
|
|
}
|
|
}
|
|
DVDChangeDir("/map/Final/Release");
|
|
JUTVideo::destroyManager();
|
|
GXSetDrawDoneCallback(NULL);
|
|
VISetBlack(0);
|
|
VIFlush();
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
/* 80373DE8-80373DE8 000448 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_DEAD static char const* const stringBase_80373F89 = "(SRR0-3):%08X %08X %08X %08X\n";
|
|
SECTION_DEAD static char const* const stringBase_80373FA7 =
|
|
"PUSH START BUTTON TO ADDITIONAL INFOMATION\n";
|
|
SECTION_DEAD static char const* const stringBase_80373FD3 =
|
|
"--------------------------------------\n";
|
|
#pragma pop
|
|
|
|
/* 80451B00-80451B04 000100 0004+00 1/1 0/0 0/0 .sdata2 @3940 */
|
|
SECTION_SDATA2 static f32 lit_3940 = 8.0f;
|
|
|
|
/* 80451B04-80451B08 000104 0004+00 1/1 0/0 0/0 .sdata2 @3941 */
|
|
SECTION_SDATA2 static f32 lit_3941 = 6.0f;
|
|
|
|
/* 8000B95C-8000BCF4 00629C 0398+00 1/1 0/0 0/0 .text fault_callback_scroll__FUsP9OSContextUlUl */
|
|
#ifdef NONMATCHING
|
|
static void fault_callback_scroll(u16, OSContext* p_context, u32, u32) {
|
|
JUTException* manager = JUTException::getManager();
|
|
JUTConsole* exConsole = manager->getConsole();
|
|
|
|
u32 srr0 = p_context->srr0 & -4;
|
|
if (srr0 >= 0x8000000C && srr0 < 0x82FFFFFF) {
|
|
exConsole->print_f("(SRR0-3):%08X %08X %08X %08X\n", *(u32*)(srr0 - 0xC),
|
|
*(u32*)(srr0 - 0x8), *(u32*)(srr0 - 0x4), *(u32*)srr0);
|
|
}
|
|
|
|
JUTGamePad pad(JUTGamePad::Port_1);
|
|
manager->setGamePad(&pad);
|
|
|
|
BOOL padDisabled = manager->isEnablePad() == false;
|
|
if (!padDisabled) {
|
|
exConsole->print("PUSH START BUTTON TO ADDITIONAL INFOMATION\n");
|
|
exConsole->print("--------------------------------------\n");
|
|
JUTConsoleManager::getManager()->drawDirect(true);
|
|
OSEnableInterrupts();
|
|
int holdUpCount = 0;
|
|
int holdDownCount = 0;
|
|
|
|
while (true) {
|
|
u32 btnHold, btnTrig;
|
|
exceptionReadPad(&btnTrig, &btnHold);
|
|
|
|
if (struct_80451501) {
|
|
OSResetSystem(1, 0, 0);
|
|
}
|
|
|
|
bool waitRetrace = false;
|
|
if (btnTrig == CButton::START) {
|
|
exception_addition(exConsole);
|
|
waitRetrace = true;
|
|
}
|
|
|
|
if (btnTrig == CButton::Z) {
|
|
JUTConsole* sysConsole = JFWSystem::getSystemConsole();
|
|
if (JUTConsoleManager::getManager()->getDirectConsole() != 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);
|
|
} else {
|
|
exConsole = JUTException::getConsole();
|
|
}
|
|
JUTConsoleManager::getManager()->setDirectConsole(exConsole);
|
|
waitRetrace = true;
|
|
}
|
|
|
|
if (btnTrig == CButton::A) {
|
|
exConsole->scrollToLastLine();
|
|
waitRetrace = true;
|
|
}
|
|
|
|
if (btnTrig == CButton::B) {
|
|
exConsole->scrollToFirstLine();
|
|
waitRetrace = true;
|
|
}
|
|
|
|
if (btnHold == CButton::DPAD_UP) {
|
|
int scrollAmnt;
|
|
if (holdUpCount < 3) {
|
|
scrollAmnt = -1;
|
|
} else if (holdUpCount < 5) {
|
|
scrollAmnt = -2;
|
|
} else {
|
|
scrollAmnt = -8;
|
|
if (holdUpCount < 7) {
|
|
scrollAmnt = -4;
|
|
}
|
|
}
|
|
exConsole->scroll(scrollAmnt);
|
|
waitRetrace = true;
|
|
holdDownCount = 0;
|
|
holdUpCount++;
|
|
} else if (btnHold == CButton::DPAD_DOWN) {
|
|
int scrollAmnt;
|
|
if (holdDownCount < 3) {
|
|
scrollAmnt = 1;
|
|
} else if (holdDownCount < 5) {
|
|
scrollAmnt = 2;
|
|
} else {
|
|
scrollAmnt = 8;
|
|
if (holdDownCount < 7) {
|
|
scrollAmnt = 4;
|
|
}
|
|
}
|
|
exConsole->scroll(scrollAmnt);
|
|
waitRetrace = true;
|
|
holdUpCount = 0;
|
|
holdDownCount++;
|
|
} else {
|
|
holdUpCount = 0;
|
|
holdDownCount = 0;
|
|
}
|
|
|
|
if (waitRetrace == true) {
|
|
u32 count = VIGetRetraceCount();
|
|
do {
|
|
} while (count == VIGetRetraceCount());
|
|
JUTConsoleManager::getManager()->drawDirect(true);
|
|
}
|
|
|
|
JUTException::waitTime(30);
|
|
}
|
|
}
|
|
|
|
exception_addition(exConsole);
|
|
JUTConsoleManager::getManager()->drawDirect(true);
|
|
|
|
do {
|
|
exConsole->scrollToFirstLine();
|
|
JUTConsoleManager::getManager()->drawDirect(true);
|
|
JUTException::waitTime(2000);
|
|
|
|
do {
|
|
for (u32 i = exConsole->getHeight(); i != 0; i--) {
|
|
exConsole->scroll(1);
|
|
JUTConsoleManager::getManager()->drawDirect(true);
|
|
|
|
if ((exConsole->getUsedLine() - exConsole->getHeight()) + 1 <=
|
|
exConsole->getLineOffset()) {
|
|
break;
|
|
}
|
|
JUTException::waitTime(20);
|
|
}
|
|
|
|
JUTException::waitTime(3000);
|
|
} while ((exConsole->getUsedLine() - exConsole->getHeight()) + 1 <=
|
|
exConsole->getLineOffset());
|
|
} while (true);
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
static asm void fault_callback_scroll(u16 param_0, OSContext* param_1, u32 param_2, u32 param_3) {
|
|
nofralloc
|
|
#include "asm/m_Do/m_Do_machine/fault_callback_scroll__FUsP9OSContextUlUl.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 8000BCF4-8000BCF8 006634 0004+00 1/1 0/0 0/0 .text my_PrintHeap__FPCcUl */
|
|
static void my_PrintHeap(char const* heapName, u32 heapSize) {
|
|
/* empty function */
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
/* 80373DE8-80373DE8 000448 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_DEAD static char const* const stringBase_80373FFB = ""
|
|
"\x1B"
|
|
"[32m%-24s = size=%d KB\n"
|
|
"\x1B"
|
|
"[m";
|
|
SECTION_DEAD static char const* const stringBase_80374017 = ""
|
|
"\x1B"
|
|
"[32m%-24s = %08x-%08x size=%d KB\n"
|
|
"\x1B"
|
|
"[m";
|
|
#pragma pop
|
|
|
|
/* 8000BCF8-8000BD44 006638 004C+00 1/1 0/0 0/0 .text my_SysPrintHeap__FPCcPvUl */
|
|
void my_SysPrintHeap(char const* message, void* start, u32 size) {
|
|
// "32m%-24s = %08x-%08x size=%d KB\n"
|
|
OSReport_System("\x1b[32m%-24s = %08x-%08x size=%d KB\n\x1b[m", message, start,
|
|
(u32)start + size, size / 1024);
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
/* 80373DE8-80373DE8 000448 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_DEAD static char const* const stringBase_8037403D = "アリーナ";
|
|
SECTION_DEAD static char const* const stringBase_80374046 = "システムヒープ";
|
|
SECTION_DEAD static char const* const stringBase_80374055 = "コマンドヒープ";
|
|
SECTION_DEAD static char const* const stringBase_80374064 = "アーカイブヒープ";
|
|
SECTION_DEAD static char const* const stringBase_80374075 = "J2D用ヒープ";
|
|
SECTION_DEAD static char const* const stringBase_80374084 = "ゲームヒープ";
|
|
SECTION_DEAD static char const* const stringBase_80374091 = "ゼルダヒープ";
|
|
SECTION_DEAD static char const* const stringBase_8037409E = "/map/Final/Release/frameworkF.map";
|
|
#pragma pop
|
|
|
|
/* 803A2F60-803A2F9C 000080 003C+00 1/0 0/0 0/0 .data g_ntscZeldaIntDf */
|
|
SECTION_DATA static _GXRenderModeObj g_ntscZeldaIntDf = {
|
|
0,
|
|
608,
|
|
448,
|
|
448,
|
|
27,
|
|
16,
|
|
666,
|
|
448,
|
|
1,
|
|
0,
|
|
0,
|
|
{{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6}},
|
|
{8, 8, 10, 12, 10, 8, 8},
|
|
};
|
|
|
|
/* 803A2F9C-803A2FD8 0000BC 003C+00 1/1 1/1 0/0 .data g_ntscZeldaProg */
|
|
SECTION_DATA extern _GXRenderModeObj g_ntscZeldaProg = {
|
|
2,
|
|
608,
|
|
448,
|
|
448,
|
|
27,
|
|
16,
|
|
666,
|
|
448,
|
|
0,
|
|
0,
|
|
0,
|
|
{{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6},
|
|
{6, 6}},
|
|
{0, 0, 21, 22, 21, 0, 0},
|
|
};
|
|
|
|
/* 804505A0-804505A8 -00001 0004+04 1/1 3/3 0/0 .sdata mRenderModeObj__15mDoMch_render_c
|
|
*/
|
|
SECTION_SDATA GXRenderModeObj* mDoMch_render_c::mRenderModeObj = &g_ntscZeldaIntDf;
|
|
|
|
/* 8000BD44-8000C0CC 006684 0388+00 0/0 2/1 0/0 .text mDoMch_Create__Fv */
|
|
// reg alloc r30 - r31
|
|
#ifdef NONMATCHING
|
|
int mDoMch_Create() {
|
|
if (data_80450580 == 0 || !(OSGetConsoleType() & 0x10000000)) {
|
|
OSReportDisable();
|
|
}
|
|
|
|
JKRHeap::setDefaultDebugFill(data_80450BF0);
|
|
JFWSystem::setMaxStdHeap(1);
|
|
|
|
u32 arenaHi = OSGetArenaHi();
|
|
u32 arenaLo = OSGetArenaLo();
|
|
if (arenaHi > 0x81800000 && arenaHi - 0x1800000 > arenaLo) {
|
|
OSSetArenaHi(arenaHi - 0x1800000);
|
|
}
|
|
|
|
u32 arenaSize = (OSGetArenaHi() - OSGetArenaLo()) - 0xF0;
|
|
my_PrintHeap("アリーナ", arenaSize);
|
|
|
|
if (mDoMain::memMargin != -1) {
|
|
arenaSize += mDoMain::memMargin;
|
|
}
|
|
|
|
JFWSystem::setSysHeapSize(arenaSize - 0xDACD30);
|
|
my_PrintHeap("システムヒープ", arenaSize - 0xDACD30);
|
|
|
|
JFWSystem::setFifoBufSize(0xA0000);
|
|
JFWSystem::setAramAudioBufSize(0xA00000);
|
|
JFWSystem::setAramGraphBufSize(-1);
|
|
|
|
if (!(OSGetResetCode() >> 0x1F)) {
|
|
if (VIGetDTVStatus() == 0) {
|
|
OSSetProgressiveMode(0);
|
|
}
|
|
} else if (mDoRst::getProgSeqFlag() != 0) {
|
|
if (VIGetDTVStatus() != 0 && mDoMch_IsProgressiveMode()) {
|
|
mDoMch_render_c::setProgressiveMode();
|
|
}
|
|
}
|
|
|
|
JFWSystem::setRenderMode(mDoMch_render_c::getRenderModeObj());
|
|
JFWSystem::firstInit();
|
|
JUTDbPrint::start(NULL, mDoExt_createDbPrintHeap(0x1800, JKRHeap::getRootHeap()));
|
|
mDoExt_createAssertHeap(JKRHeap::getRootHeap());
|
|
JFWSystem::init();
|
|
|
|
if (data_80450580 == 0) {
|
|
JUTAssertion::setVisible(false);
|
|
JUTDbPrint::getManager()->setVisible(false);
|
|
}
|
|
|
|
JKRHeap::setErrorHandler(myMemoryErrorRoutine);
|
|
JKRHeap::getRootHeap()->setErrorFlag(true);
|
|
JFWSystem::getSystemHeap()->setErrorFlag(true);
|
|
|
|
JKRHeap* rootHeap = JKRHeap::getRootHeap();
|
|
// Command Heap size: 4 KB
|
|
my_SysPrintHeap("コマンドヒープ", mDoExt_createCommandHeap(0x1000, rootHeap), 0x1000);
|
|
|
|
// Archive Heap size: 9085 KB
|
|
my_SysPrintHeap("アーカイブヒープ", mDoExt_createArchiveHeap(0x8DF400, rootHeap), 0x8DF400);
|
|
|
|
// J2D Heap size: 500 KB
|
|
my_SysPrintHeap("J2D用ヒープ", mDoExt_createJ2dHeap(0x7D000, rootHeap), 0x7D000);
|
|
|
|
// Game Heap size: 4408 KB
|
|
my_SysPrintHeap("ゲームヒープ", mDoExt_createGameHeap(0x44E000, rootHeap), 0x44E000);
|
|
|
|
JKRHeap* sysHeap = JKRHeap::getSystemHeap();
|
|
u32 zeldaHeapSize = sysHeap->getFreeSize() - 0x10000;
|
|
JKRHeap* zeldaHeap = mDoExt_createZeldaHeap(zeldaHeapSize, sysHeap);
|
|
my_SysPrintHeap("ゼルダヒープ", zeldaHeap, zeldaHeapSize);
|
|
zeldaHeap->becomeCurrentHeap();
|
|
|
|
JKRAramStream::setTransBuffer(NULL, 0x2000, JKRHeap::getSystemHeap());
|
|
JKRThreadSwitch::createManager(NULL);
|
|
JKRThread* thread = new JKRThread(OSGetCurrentThread(), 0);
|
|
|
|
JUTConsole* sysConsole = JFWSystem::getSystemConsole();
|
|
sysConsole->setOutput(JUTConsole::OUTPUT_CONSOLE | JUTConsole::OUTPUT_OSREPORT);
|
|
sysConsole->setPosition(16, 42);
|
|
|
|
JUTException::appendMapFile("/map/Final/Release/frameworkF.map");
|
|
JUTException::setPreUserCallback(myExceptionCallback);
|
|
JUTException::setPostUserCallback(fault_callback_scroll);
|
|
|
|
cMl::init(mDoExt_getZeldaHeap());
|
|
cM_initRnd(100, 100, 100);
|
|
JKRDvdRipper::setSZSBufferSize(0x4000);
|
|
JKRDvdAramRipper::setSZSBufferSize(0x4000);
|
|
JKRAram::setSZSBufferSize(0x2000);
|
|
mDoDvdThd::create(OSGetThreadPriority(OSGetCurrentThread()) - 2);
|
|
mDoDvdErr_ThdInit();
|
|
mDoMemCd_ThdInit();
|
|
return 1;
|
|
}
|
|
#else
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm int mDoMch_Create() {
|
|
nofralloc
|
|
#include "asm/m_Do/m_Do_machine/mDoMch_Create__Fv.s"
|
|
}
|
|
#pragma pop
|
|
#endif
|
|
|
|
/* 80373DE8-80373DE8 000448 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
|