diff options
| author | TakaRikka <takarikka@outlook.com> | 2022-06-01 03:49:32 -0700 |
|---|---|---|
| committer | TakaRikka <takarikka@outlook.com> | 2022-06-01 03:49:32 -0700 |
| commit | 3f22fa448376893fffd83815ecd4cdccb197f1a4 (patch) | |
| tree | ee4fc3c63d8d1d36d5705c7d75a6ba3c47c6549c /src/m_Do | |
| parent | 36e62e0b80225b6ef6cbe6a7322397899d3a0ffd (diff) | |
m_Do / d_a_npc work
Diffstat (limited to 'src/m_Do')
| -rw-r--r-- | src/m_Do/m_Do_DVDError.cpp | 127 | ||||
| -rw-r--r-- | src/m_Do/m_Do_Reset.cpp | 158 | ||||
| -rw-r--r-- | src/m_Do/m_Do_audio.cpp | 92 | ||||
| -rw-r--r-- | src/m_Do/m_Do_graphic.cpp | 2 | ||||
| -rw-r--r-- | src/m_Do/m_Do_main.cpp | 418 |
5 files changed, 284 insertions, 513 deletions
diff --git a/src/m_Do/m_Do_DVDError.cpp b/src/m_Do/m_Do_DVDError.cpp index 6fc91edc2a..64b2811856 100644 --- a/src/m_Do/m_Do_DVDError.cpp +++ b/src/m_Do/m_Do_DVDError.cpp @@ -4,120 +4,71 @@ // #include "m_Do/m_Do_DVDError.h" +#include "m_Do/m_Do_dvd_thread.h" +#include "m_Do/m_Do_reset.h" +#include "m_Do/m_Do_ext.h" #include "dol2asm.h" #include "dolphin/types.h" // -// Types: -// - -struct mDoDvdThd { - /* 800158B4 */ void suspend(); -}; - -struct OSThread {}; - -struct OSContext {}; - -struct OSAlarm {}; - -struct JKRThread { - /* 802D16B8 */ JKRThread(OSThread*, int); - /* 802D1758 */ ~JKRThread(); -}; - -struct JKRHeap { - /* 802CE438 */ void becomeCurrentHeap(); -}; - -// -// Forward References: -// - -extern "C" void mDoDvdErr_ThdInit__Fv(); -extern "C" void mDoDvdErr_ThdCleanup__Fv(); -extern "C" static void mDoDvdErr_Watch__FPv(); -extern "C" static void AlarmHandler__FP7OSAlarmP9OSContext(); - -// -// External References: -// - -extern "C" void mDoExt_getAssertHeap__Fv(); -extern "C" void suspend__9mDoDvdThdFv(); -extern "C" void becomeCurrentHeap__7JKRHeapFv(); -extern "C" void __ct__9JKRThreadFP8OSThreadi(); -extern "C" void __dt__9JKRThreadFv(); -extern "C" void OSCreateAlarm(); -extern "C" void OSSetPeriodicAlarm(); -extern "C" void OSCancelAlarm(); -extern "C" void OSDisableInterrupts(); -extern "C" void OSGetCurrentThread(); -extern "C" void OSCreateThread(); -extern "C" void OSCancelThread(); -extern "C" void OSResumeThread(); -extern "C" void OSSuspendThread(); -extern "C" void OSGetThreadPriority(); -extern "C" void OSGetTime(); -extern "C" void DVDGetDriveStatus(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); -extern "C" extern u8 data_80450C88[8]; - -// // Declarations: // /* ############################################################################################## */ /* 803DECC0-803DEFE0 00B9E0 0318+08 4/4 0/0 0/0 .bss DvdErr_thread */ -static u8 DvdErr_thread[792 + 8 /* padding */]; +static OSThread DvdErr_thread; /* 803DEFE0-803DFBE0 00BD00 0C00+00 0/1 0/0 0/0 .bss DvdErr_stack */ #pragma push #pragma force_active on -static u8 DvdErr_stack[3072]; +static u8 DvdErr_stack[3072] ALIGN_DECL(16); #pragma pop /* 803DFBE0-803DFC20 00C900 0028+18 1/2 0/0 0/0 .bss Alarm */ -static u8 Alarm[40 + 24 /* padding */]; +static OSAlarm Alarm; /* 8001659C-8001665C 010EDC 00C0+00 0/0 1/1 0/0 .text mDoDvdErr_ThdInit__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoDvdErr_ThdInit() { - nofralloc -#include "asm/m_Do/m_Do_DVDError/mDoDvdErr_ThdInit__Fv.s" +void mDoDvdErr_ThdInit() { + if (!data_80450C88) { + OSTime time = OSGetTime(); + OSThread* curThread = OSGetCurrentThread(); + s32 priority = OSGetThreadPriority(curThread); + + OSCreateThread(&DvdErr_thread, 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); + + data_80450C88 = 1; + } } -#pragma pop /* 8001665C-800166A4 010F9C 0048+00 0/0 1/1 0/0 .text mDoDvdErr_ThdCleanup__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoDvdErr_ThdCleanup() { - nofralloc -#include "asm/m_Do/m_Do_DVDError/mDoDvdErr_ThdCleanup__Fv.s" +void mDoDvdErr_ThdCleanup() { + if (data_80450C88) { + OSCancelThread(&DvdErr_thread); + OSCancelAlarm(&Alarm); + data_80450C88 = 0; + } } -#pragma pop /* 800166A4-80016704 010FE4 0060+00 1/1 0/0 0/0 .text mDoDvdErr_Watch__FPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void mDoDvdErr_Watch(void* param_0) { - nofralloc -#include "asm/m_Do/m_Do_DVDError/mDoDvdErr_Watch__FPv.s" +static void mDoDvdErr_Watch(void*) { + OSDisableInterrupts(); + { JKRThread thread(OSGetCurrentThread(), 0); } + + mDoExt_getAssertHeap()->becomeCurrentHeap(); + + do { + if (DVDGetDriveStatus() == DVD_STATE_FATAL_ERROR) { + mDoDvdThd::suspend(); + } + OSSuspendThread(&DvdErr_thread); + } while (true); } -#pragma pop /* 80016704-8001672C 011044 0028+00 1/1 0/0 0/0 .text AlarmHandler__FP7OSAlarmP9OSContext */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void AlarmHandler(OSAlarm* param_0, OSContext* param_1) { - nofralloc -#include "asm/m_Do/m_Do_DVDError/AlarmHandler__FP7OSAlarmP9OSContext.s" +static void AlarmHandler(OSAlarm*, OSContext*) { + OSResumeThread(&DvdErr_thread); } -#pragma pop diff --git a/src/m_Do/m_Do_Reset.cpp b/src/m_Do/m_Do_Reset.cpp index 5abaa68cea..e1996726ef 100644 --- a/src/m_Do/m_Do_Reset.cpp +++ b/src/m_Do/m_Do_Reset.cpp @@ -4,40 +4,17 @@ // #include "m_Do/m_Do_Reset.h" +#include "m_Do/m_Do_DVDError.h" +#include "m_Do/m_Do_Audio.h" +#include "m_Do/m_Do_MemCard.h" #include "dol2asm.h" #include "dolphin/gx/GX.h" #include "dolphin/types.h" - -// -// Types: -// - -struct Z2AudioMgr { - /* 802CDA6C */ void hasReset() const; - - static u8 mAudioMgrPtr[4 + 4 /* padding */]; -}; - -struct JUTXfb { - /* 802E5214 */ void clearIndex(); - - static u8 sManager[4 + 4 /* padding */]; -}; - -struct JUTVideo { - /* 802E4CAC */ void destroyManager(); -}; - -struct JUTGamePad { - struct C3ButtonReset { - static u8 sCallback[4]; - static u8 sCallbackArg[4 + 4 /* padding */]; - }; -}; - -struct JASTaskThread { - /* 8028FE88 */ void pause(bool); -}; +#include "JSystem/JUtility/JUTGamePad.h" +#include "JSystem/JUtility/JUTVideo.h" +#include "JSystem/JUtility/JUTXfb.h" +#include "JSystem/JAudio2/JASDvdThread.h" +#include "SSystem/SComponent/c_API_controller_pad.h" // // Forward References: @@ -51,13 +28,11 @@ extern "C" u32 getResetData__6mDoRstFv(); extern "C" extern char const* const m_Do_m_Do_Reset__stringBase0; extern "C" u8 mResetData__6mDoRst[4 + 4 /* padding */]; extern "C" extern u8 struct_80450C80; -extern "C" extern u8 data_80450C88[8]; // // External References: // -extern "C" void OSAttention(); extern "C" void mDoDvdErr_ThdCleanup__Fv(); extern "C" void cAPICPad_recalibrate__Fv(); extern "C" void pause__13JASTaskThreadFb(); @@ -66,29 +41,15 @@ extern "C" void hasReset__10Z2AudioMgrCFv(); extern "C" void destroyManager__8JUTVideoFv(); extern "C" void clearIndex__6JUTXfbFv(); extern "C" void LCDisable(); -extern "C" void OSDisableInterrupts(); -extern "C" void OSRestoreInterrupts(); -extern "C" void OSSetSaveRegion(); -extern "C" void OSResetSystem(); -extern "C" void OSGetCurrentThread(); -extern "C" void OSCancelThread(); -extern "C" void OSDetachThread(); -extern "C" void OSSuspendThread(); -extern "C" void DVDGetDriveStatus(); -extern "C" void DVDCheckDisk(); extern "C" void VIWaitForRetrace(); extern "C" void VIFlush(); -extern "C" void VISetBlack(s32); extern "C" void GXFlush(); extern "C" void GXAbortFrame(); extern "C" void GXDrawDone(); extern "C" void _savegpr_27(); -extern "C" extern u8 g_mDoMemCd_control[8192]; -extern "C" extern u8 struct_80450BB8[4]; extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; extern "C" u8 sCallback__Q210JUTGamePad13C3ButtonReset[4]; extern "C" u8 sCallbackArg__Q210JUTGamePad13C3ButtonReset[4 + 4 /* padding */]; -extern "C" extern u8 struct_80451500[4]; extern "C" u8 sManager__6JUTXfb[4 + 4 /* padding */]; // @@ -100,7 +61,7 @@ static void my_OSCancelAlarmAll() { } static void destroyVideo() { - destroyManager__8JUTVideoFv(); + JUTVideo::destroyManager(); GXSetDrawDoneCallback(NULL); VISetBlack(1); VIFlush(); @@ -108,40 +69,30 @@ static void destroyVideo() { return; } -/* ############################################################################################## */ -/* 80374198-80374198 0007F8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80374198 = "DVD_STATE_BUSY\n"; -#pragma pop - /* 80450C78-80450C80 000178 0004+04 3/2 42/42 2/2 .sbss mResetData__6mDoRst */ mDoRstData* mDoRst::mResetData; /* 80015614-8001574C 00FF54 0138+00 0/0 3/3 0/0 .text mDoRst_reset__FiUli */ -#ifdef NONMATCHING -void mDoRst_reset(int p1, u32 p2, int p3) { - mDoCPd_c* pmVar1; - u32 uVar2; - DVDState DVar3; - OSThread* thread; - s32 enable; - /* sManager */ lbl_80451550->clearIndex(); - mDoDvdErr_ThdCleanup__Fv(); - cAPICPad_recalibrate__Fv(); - if (lbl_80450BB8 != false) { +void mDoRst_reset(int param_0, u32 param_1, int param_2) { + JUTXfb::getManager()->clearIndex(); + mDoDvdErr_ThdCleanup(); + cAPICPad_recalibrate(); + + if (mDoAud_zelAudio_c::isInitFlag()) { + bool audioReset; do { - uVar2 = lbl_80451368->hasReset(); - } while ((uVar2 & 0xff) == 0); + audioReset = Z2AudioMgr::getInterface()->hasReset(); + } while (!audioReset); } - if ((s32)DVDGetDriveStatus() == (s32)DVD_STATE_BUSY) { - OSAttention(lbl_80374198); + if (DVDGetDriveStatus() == DVD_STATE_BUSY) { + OSAttention("DVD_STATE_BUSY\n"); } - JASTaskThread* task_thread = getThreadPointer__6JASDvdFv(); + + JASTaskThread* task_thread = JASDvd::getThreadPointer(); if (task_thread != NULL) { - pause__13JASTaskThreadFb(task_thread, true); - thread = task_thread->thread; + task_thread->pause(true); + OSThread* thread = task_thread->getThreadRecord(); if (thread != NULL) { OSSuspendThread(thread); OSDetachThread(thread); @@ -152,79 +103,57 @@ void mDoRst_reset(int p1, u32 p2, int p3) { VIWaitForRetrace(); VIWaitForRetrace(); - thread = GXGetCurrentGXThread(); - enable = OSDisableInterrupts(); - OSThread* ourThread = OSGetCurrentThread(); - if (thread != ourThread) { - OSCancelThread(thread); + OSThread* gxThread = GXGetCurrentGXThread(); + s32 enable = OSDisableInterrupts(); + + if (gxThread != OSGetCurrentThread()) { + OSCancelThread(gxThread); GXSetCurrentGXThread(); } + GXFlush(); GXAbortFrame(); GXDrawDone(); - OSRestoreInterrupts(enable); destroyVideo(); - while (mDoMemCd_isCardCommNone() != 0) { + while (!mDoMemCd_isCardCommNone()) { VIWaitForRetrace(); } my_OSCancelAlarmAll(); LCDisable(); - // probably false match; check out 80015728 or thereabouts in Ghidra - OSSetSaveRegion(mDoRst::mResetData, (u8*)(&mDoRst::getResetData()) + 0x18); - OSResetSystem(p1, p2, p3); + OSSetSaveRegion(mDoRst::mResetData, (u8*)&mDoRst::getResetData + 0x18); + OSResetSystem(param_0, param_1, param_2); + do { VIWaitForRetrace(); } while (true); } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoRst_reset(int param_0, u32 param_1, int param_2) { - nofralloc -#include "asm/m_Do/m_Do_Reset/mDoRst_reset__FiUli.s" -} -#pragma pop -#endif /* 8001574C-800157F4 01008C 00A8+00 0/0 3/3 0/0 .text mDoRst_resetCallBack__FiPv */ -// fix JUTGamePad data -#ifdef NONMATCHING -void mDoRst_resetCallBack(int port, void* p2) { +void mDoRst_resetCallBack(int port, void*) { if (!mDoRst::isReset()) { if (port == -1) { - cAPICPad_recalibrate__Fv(); + cAPICPad_recalibrate(); } else { - if (mDoRst::is3ButtonReset() != 0) { - lbl_80451501 = false; - /* sCallback */ lbl_804514EC = &mDoRst_resetCallBack; - /* sCallbackArg */ lbl_804514F0 = 0; + if (mDoRst::is3ButtonReset()) { + struct_80451501 = false; + JUTGamePad::C3ButtonReset::sCallback = mDoRst_resetCallBack; + JUTGamePad::C3ButtonReset::sCallbackArg = NULL; return; } mDoRst::on3ButtonReset(); mDoRst::set3ButtonResetPort(port); - cAPICPad_recalibrate__Fv(); + cAPICPad_recalibrate(); } - if ((DVDCheckDisk() == 0) && (DVDGetDriveStatus() != DVD_STATE_FATAL_ERROR)) { + if (DVDCheckDisk() == 0 && DVDGetDriveStatus() != DVD_STATE_FATAL_ERROR) { mDoRst::onReturnToMenu(); } mDoRst::onReset(); } } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoRst_resetCallBack(int param_0, void* param_1) { - nofralloc -#include "asm/m_Do/m_Do_Reset/mDoRst_resetCallBack__FiPv.s" -} -#pragma pop -#endif /* 800157F4-800157FC -00001 0008+00 0/0 0/0 0/0 .text getResetData__6mDoRstFv */ mDoRstData* mDoRst::getResetData() { @@ -253,7 +182,6 @@ u8 struct_80450C87; #pragma pop /* 80450C88-80450C90 000188 0008+00 0/0 2/2 0/0 .sbss None */ -extern u8 data_80450C88[8]; -u8 data_80450C88[8]; +u8 data_80450C88; /* 80374198-80374198 0007F8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/m_Do/m_Do_audio.cpp b/src/m_Do/m_Do_audio.cpp index b5365c30af..2ae9e42e30 100644 --- a/src/m_Do/m_Do_audio.cpp +++ b/src/m_Do/m_Do_audio.cpp @@ -6,23 +6,14 @@ #include "m_Do/m_Do_audio.h" #include "dol2asm.h" #include "dolphin/types.h" +#include "m_Do/m_Do_Reset.h" +#include "m_Do/m_Do_dvd_thread.h" +#include "d/com/d_com_inf_game.h" // // Types: // -struct mDoRst { - static u8 mResetData[4 + 4 /* padding */]; -}; - -struct mDoDvdThd_toMainRam_c { - /* 80016394 */ void create(char const*, u8, JKRHeap*); -}; - -struct mDoDvdThd_mountXArchive_c { - /* 800161E0 */ void create(char const*, u8, JKRArchive::EMountMode, JKRHeap*); -}; - struct JAIStreamDataMgr { /* 802A3AD8 */ ~JAIStreamDataMgr(); }; @@ -96,7 +87,6 @@ extern "C" extern void* __vt__14Z2SoundStarter[5 + 1 /* padding */]; extern "C" extern void* __vt__11Z2SoundInfo[20]; extern "C" extern void* __vt__15Z2SpeechStarter[5]; extern "C" extern void* __vt__10Z2AudioMgr[3]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" extern u8 data_80450B40[4]; extern "C" extern u8 data_80450B48[4]; extern "C" extern u8 data_80450B4C[4]; @@ -112,7 +102,7 @@ extern "C" extern u8 data_80450B80[4]; extern "C" extern u8 data_80450B84[4]; extern "C" extern u8 data_80450B88[4]; extern "C" u8 mResetData__6mDoRst[4 + 4 /* padding */]; -extern "C" extern u8 struct_80450C80[8]; +extern "C" extern bool struct_80450C80; extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; extern "C" u8 sCurrentHeap__7JKRHeap[4]; @@ -140,18 +130,6 @@ void mDoAud_zelAudio_c::reset() { data_80450bba = false; } -/* ############################################################################################## */ -/* 80373D68-80373D68 0003C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80373D68 = "/Audiores/Z2Sound.baa"; -SECTION_DEAD static char const* const stringBase_80373D7E = "/Audiores/Seqs/Z2SoundSeqs.arc"; -SECTION_DEAD static char const* const stringBase_80373D9D = - "ヒープ確保失敗につきオーディオ初期化できません\n"; -/* @stringBase0 padding */ -SECTION_DEAD static char const* const pad_80373DCD = "\0\0"; -#pragma pop - /* 803DBF40-803DBF4C 008C60 000C+00 1/1 0/1 0/0 .bss @3620 */ static u8 lit_3620[12]; @@ -168,24 +146,58 @@ static mDoDvdThd_toMainRam_c* l_affCommand; static mDoDvdThd_mountXArchive_c* l_arcCommand; /* 80006FC0-80007164 001900 01A4+00 1/1 0/0 0/0 .text mDoAud_Create__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void mDoAud_Create() { - nofralloc -#include "asm/m_Do/m_Do_audio/mDoAud_Create__Fv.s" +static void mDoAud_Create() { + if (l_affCommand == NULL) { + l_affCommand = mDoDvdThd_toMainRam_c::create("/Audiores/Z2Sound.baa", 2, NULL); + + if (l_affCommand == NULL) { + return; + } + } + + if (l_arcCommand == NULL) { + l_arcCommand = mDoDvdThd_mountXArchive_c::create("/Audiores/Seqs/Z2SoundSeqs.arc", 0, JKRArchive::MOUNT_DVD, NULL); + + if (l_arcCommand == NULL) { + return; + } + } + + if (l_affCommand->sync() && l_arcCommand->sync()) { + if (g_mDoAud_audioHeap != NULL) { + s32 groupID = JKRHeap::sCurrentHeap->changeGroupID(5); + (*(mDoAud_zelAudio_c*)g_mDoAud_zelAudio).mAudioMgr.init(g_mDoAud_audioHeap, 0xA00000, l_affCommand->getMemAddress(), l_arcCommand->getArchive()); + JKRHeap::sCurrentHeap->changeGroupID(groupID); + g_mDoAud_audioHeap->adjustSize(); + } else { + // "Cannot initialize audio due to heap allocation failure\n" + OSReport_Error("ヒープ確保失敗につきオーディオ初期化できません\n"); + } + + (*(mDoAud_zelAudio_c*)g_mDoAud_zelAudio).mAudioMgr.mStatusMgr.setEventBit(dComIfGs_getPEventBit()); + (*(mDoAud_zelAudio_c*)g_mDoAud_zelAudio).reset(); + + u32 soundMode = OSGetSoundMode(); + Z2AudioMgr::getInterface()->setOutputMode(soundMode); + JKRHeap::free(l_affCommand->getMemAddress(), NULL); + l_affCommand->destroy(); + l_arcCommand->destroy(); + + mDoAud_zelAudio_c::onInitFlag(); + struct_80450C80 = true; + } } -#pragma pop /* 80007164-800071BC 001AA4 0058+00 0/0 1/1 0/0 .text mDoAud_Execute__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoAud_Execute() { - nofralloc -#include "asm/m_Do/m_Do_audio/mDoAud_Execute__Fv.s" +void mDoAud_Execute() { + if (!mDoAud_zelAudio_c::isInitFlag()) { + if (!mDoRst::isShutdown() && !mDoRst::isReturnToMenu()) { + mDoAud_Create(); + } + } else { + (*(mDoAud_zelAudio_c*)g_mDoAud_zelAudio).mAudioMgr.gframeProcess(); + } } -#pragma pop /* 800071BC-800071F8 001AFC 003C+00 0/0 3/3 0/0 .text mDoAud_setSceneName__FPCcll */ void mDoAud_setSceneName(char const* spot, s32 room, s32 layer) { diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index 4718a4deae..5008983ab4 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -140,13 +140,11 @@ extern "C" void _restgpr_28(); extern "C" extern void* __vt__14J2DGrafContext[10]; extern "C" extern void* __vt__13J2DOrthoGraph[10]; extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_env_light[4880]; extern "C" f32 Zero__4cXyz[3]; extern "C" u8 mPadStatus__10JUTGamePad[48]; extern "C" u8 sincosTable___5JMath[65536]; extern "C" extern s8 data_80450580; extern "C" void* mRenderModeObj__15mDoMch_render_c[1 + 1 /* padding */]; -; extern "C" u8 systemConsole__9JFWSystem[4]; extern "C" u8 sManager__10JFWDisplay[4]; extern "C" u8 sCurrentHeap__7JKRHeap[4]; diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 9e206cc8ca..86f291d94c 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -17,14 +17,8 @@ #include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_dvd_thread.h" #include "m_Do/m_Do_graphic.h" - -// -// Types: -// - -struct DynamicModuleControlBase { - /* 80262470 */ void dump(); -}; +#include "m_Do/m_Do_machine.h" +#include "DynamicLink.h" // // Forward References: @@ -220,21 +214,21 @@ static HeapCheck CommandHeapCheck; /* 8000578C-80005848 0000CC 00BC+00 1/1 0/0 0/0 .text CheckHeap__FUl */ void CheckHeap(u32 i_padNo) { - mDoMch_HeapCheckAll__Fv(); + mDoMch_HeapCheckAll(); OSCheckActiveThreads(); bool comboCheck = false; - // if L + R + Z is pressed... + // if L + R + Z is pressed if ((mDoCPd_c::getHold(i_padNo) & ~CButton::Z) == (CButton::L + CButton::R) && mDoCPd_c::getTrig(i_padNo) & CButton::Z) { comboCheck = true; } - int unk2 = comboCheck; + int saveRel = comboCheck; for (int i = 0; i < 8; i++) { HeapCheckTable[i]->CheckHeap1(); - if (unk2) { + if (saveRel) { HeapCheckTable[i]->saveRelBase(); } } @@ -266,59 +260,24 @@ void HeapCheck::heapDisplay() const { s32 total_free_size = mHeap->getTotalFreeSize(); s32 heap_free_size = mHeap->getFreeSize(); - JUTReport(0x64, 0xd4, "[%sName]", mName); - JUTReport(0x64, 0xe3, "HeapSize %8ld", heap_size); - JUTReport(0x64, 0xf0, "TargetHeapSize %8ld", mTargetHeapSize); - JUTReport(0x64, 0xfd, "TotalFree %8ld", total_free_size - used_count); - JUTReport(0x64, 0x10a, "FreeSize %8ld", heap_free_size - used_count); - JUTReport(0x64, 0x117, "TotalUsedSize %8ld", total_used_size); - JUTReport(0x64, 0x124, "TotalUsedRate %3ld%%", + JUTReport(100, 212, "[%sName]", mName); + JUTReport(100, 227, "HeapSize %8ld", heap_size); + JUTReport(100, 240, "TargetHeapSize %8ld", mTargetHeapSize); + JUTReport(100, 253, "TotalFree %8ld", total_free_size - used_count); + JUTReport(100, 266, "FreeSize %8ld", heap_free_size - used_count); + JUTReport(100, 279, "TotalUsedSize %8ld", total_used_size); + JUTReport(100, 292, "TotalUsedRate %3ld%%", (int)(total_used_size * 0x64) / (int)mTargetHeapSize); - JUTReport(0x64, 0x131, "MaxTotalUsedSize %8ld", mMaxTotalUsedSize); - JUTReport(0x64, 0x13e, "MaxTotalUsedRate %3ld%%", + JUTReport(100, 305, "MaxTotalUsedSize %8ld", mMaxTotalUsedSize); + JUTReport(100, 318, "MaxTotalUsedRate %3ld%%", (mMaxTotalUsedSize * 0x64) / (int)mTargetHeapSize); - JUTReport(0x64, 0x14b, "MinFreeSize %8ld", mMaxTotalFreeSize - used_count); - JUTReport(0x64, 0x158, "MinFreeRate %3ld%%", + JUTReport(100, 331, "MinFreeSize %8ld", mMaxTotalFreeSize - used_count); + JUTReport(100, 344, "MinFreeRate %3ld%%", ((mMaxTotalFreeSize - used_count) * 0x64) / (int)mTargetHeapSize); used_count = countUsed(mHeap); - JUTReport(0x64, 0x165, "UsedCount %3ld%", used_count); + JUTReport(100, 357, "UsedCount %3ld%", used_count); } -/* ############################################################################################## */ -/* 803739A0-803739A0 000000 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80373AEF = ""; -SECTION_DEAD static char const* const stringBase_80373AF0 = "TotalFree"; -SECTION_DEAD static char const* const stringBase_80373AFA = "MaxUsed "; -SECTION_DEAD static char const* const stringBase_80373B04 = "Used "; -SECTION_DEAD static char const* const stringBase_80373B0E = "RelUsed "; -SECTION_DEAD static char const* const stringBase_80373B18 = "/ MaxFree"; -SECTION_DEAD static char const* const stringBase_80373B22 = "/HeapSize"; -SECTION_DEAD static char const* const stringBase_80373B2C = "Blk/Bytes"; -SECTION_DEAD static char const* const stringBase_80373B36 = "ARAM Free"; -SECTION_DEAD static char const* const stringBase_80373B40 = "%d"; -SECTION_DEAD static char const* const stringBase_80373B43 = "%s"; -SECTION_DEAD static char const* const stringBase_80373B46 = " [%s]"; -SECTION_DEAD static char const* const stringBase_80373B4C = "%10d"; -#pragma pop - -/* 803A2F14-803A2F28 -00001 0014+00 0/1 0/0 0/0 .data desc1$3717 */ -#pragma push -#pragma force_active on -SECTION_DATA static char* desc1[5] = { - "", "TotalFree", "MaxUsed ", "Used ", "RelUsed ", -}; -#pragma pop - -/* 803A2F28-803A2F40 -00001 0014+04 0/1 0/0 0/0 .data desc2$3718 */ -#pragma push -#pragma force_active on -SECTION_DATA static char* desc2[5] = { - "", "/ MaxFree", "/HeapSize", "Blk/Bytes", "Blk/Bytes", -}; -#pragma pop - /* 80450580-80450584 000000 0004+00 3/3 6/6 0/0 .sdata None */ SECTION_SDATA s8 data_80450580 = 0xFF; @@ -326,10 +285,7 @@ SECTION_SDATA s8 data_80450580 = 0xFF; SECTION_SDATA u32 mDoMain::memMargin = 0xFFFFFFFF; /* 80450588-80450590 000008 0008+00 2/2 0/0 0/0 .sdata None */ -// 0x04 is mDoMain::mHeapBriefType -SECTION_SDATA static u8 data_80450588[8] = { - 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; +SECTION_SDATA u8 mDoMain::mHeapBriefType = 4; /* 80450B00-80450B08 000000 0008+00 1/1 0/0 0/0 .sbss None */ static u8 data_80450B00; @@ -344,201 +300,135 @@ OSTime mDoMain::sHungUpTime; /* 80450B18 0001+00 data_80450B18 None */ /* 80450B19 0001+00 data_80450B19 None */ /* 80450B1A 0002+00 data_80450B1A None */ -static u8 struct_80450B18[2]; - -static u8 data_80450B1A; -static u8 data_80450B1B; +static bool struct_80450B18; // sDisplayHeapDebug +static u8 sDisplayHeap; +static bool sCheckHeap; /* 80005AD8-80005D4C 000418 0274+00 1/1 0/0 0/0 .text debugDisplay__Fv */ -#ifdef NONMATCHING -void debugDisplay(void) { - int tmp1; - int tmp2; +void debugDisplay() { + static char* desc1[5] = { + "", "TotalFree", "MaxUsed ", "Used ", "RelUsed ", + }; - if (struct_80450B18[1] >= 1 && struct_80450B18[1] <= 6) { - HeapCheckTable[struct_80450B18[1]]->heapDisplay(); + static char* desc2[5] = { + "", "/ MaxFree", "/HeapSize", "Blk/Bytes", "Blk/Bytes", + }; + + if (sDisplayHeap >= 1 && sDisplayHeap <= 6) { + HeapCheckTable[sDisplayHeap - 1]->heapDisplay(); } - if (data_80450588[0] == 5) { + if (mDoMain::mHeapBriefType == 5) { JKRAramHeap* heap = JKRAram::getAramHeap(); if (heap) { - JUTReport(0x1db, 100, "ARAM Free"); - JUTReport(0x1db, 0x72, "%d", heap->getFreeSize()); - JUTReport(0x1db, 0x80, "TotalFree"); - JUTReport(0x1db, 0x8e, "%d", heap->getTotalFreeSize()); + JUTReport(475, 100, "ARAM Free"); + JUTReport(475, 114, "%d", heap->getFreeSize()); + JUTReport(475, 128, "TotalFree"); + JUTReport(475, 142, "%d", heap->getTotalFreeSize()); + return; } - } else { - if (data_80450588[0] != 0) { - JUTReport(0x1db, 100, "%s", desc1[data_80450588[0]]); - JUTReport(0x1db, 0x72, "%s", lbl_803A2F28[data_80450588[0]]); - - int k = 0; - for (int i = 0; i < 8; i++, k += 0x2C) { - HeapCheck* heap_check = HeapCheckTable[i]; - - switch (data_80450588[0]) { - case 3: { - tmp1 = heap_check->getUsedCount(); - tmp2 = heap_check->getHeap()->getTotalUsedSize(); - break; - } - case 1: { - tmp1 = heap_check->getHeap()->getTotalFreeSize(); - tmp2 = heap_check->getHeap()->getFreeSize(); - break; - } - case 2: { - tmp1 = heap_check->getMaxTotalUsedSize(); - tmp2 = heap_check->getHeap()->getSize(); - break; - } - case 4: { - tmp1 = heap_check->getUsedCount() - heap_check->getUsedCountRef(); - tmp2 = heap_check->getHeap()->getTotalUsedSize() - - heap_check->getTotalUsedSizeRef(); - break; - } - - JUTReport(0x1db, k + 0x96, " [%s]", heap_check->getName()); - JUTReport(0x1db, k + 0xA4, "%10d", tmp1); - JUTReport(0x1db, k + 0xB2, "%10d", tmp2); - } + } else if (mDoMain::mHeapBriefType != 0) { + JUTReport(475, 100, "%s", desc1[mDoMain::mHeapBriefType]); + JUTReport(475, 114, "%s", desc2[mDoMain::mHeapBriefType]); + + for (int i = 0; i < 8; i++) { + HeapCheck* heap_check = HeapCheckTable[i]; + JKRExpHeap* expHeap = heap_check->getHeap(); + + s32 check1; + s32 check2; + switch (mDoMain::mHeapBriefType) { + case 1: + check1 = expHeap->getTotalFreeSize(); + check2 = expHeap->getFreeSize(); + break; + case 2: + check1 = heap_check->getMaxTotalUsedSize(); + check2 = expHeap->getHeapSize(); + break; + case 3: + check1 = heap_check->getUsedCount(); + check2 = expHeap->getTotalUsedSize(); + break; + case 4: + check1 = heap_check->getRelUsedCount(); + check2 = heap_check->getRelTotalUsedSize(); + break; } + + JUTReport(475, (i * 44) + 150, " [%s]", heap_check->getName()); + JUTReport(475, (i * 44) + 164, "%10d", check1); + JUTReport(475, (i * 44) + 178, "%10d", check2); } } } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void debugDisplay() { - nofralloc -#include "asm/m_Do/m_Do_main/debugDisplay__Fv.s" -} -#pragma pop -#endif - -/* ############################################################################################## */ -/* 803739A0-803739A0 000000 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80373B51 = "Press X+Y+START to CLEAR console."; -SECTION_DEAD static char const* const stringBase_80373B73 = "3DStick UP/Down to scroll"; -SECTION_DEAD static char const* const stringBase_80373B8D = - "Press A to output terminal from console."; -SECTION_DEAD static char const* const stringBase_80373BB6 = "SCROLL:%3d %3d %3d Output=%1x"; -SECTION_DEAD static char const* const stringBase_80373BD5 = "Press L+R trigger to control console."; -SECTION_DEAD static char const* const stringBase_80373BFB = - "Press [Z] trigger to close this window."; -#pragma pop - -/* 80450B1C-80450B20 00001C 0004+00 1/1 0/0 0/0 .sbss console_position_x$3776 */ -static f32 console_position_x; - -/* 80450B20-80450B24 000020 0004+00 1/1 0/0 0/0 .sbss None */ -static s8 data_80450B20; - -/* 80450B24-80450B28 000024 0004+00 1/1 0/0 0/0 .sbss console_position_y$3779 */ -static f32 console_position_y; - -/* 80450B28-80450B2C 000028 0004+00 1/1 0/0 0/0 .sbss None */ -static s8 data_80450B28; - -/* 80450B2C-80450B30 00002C 0004+00 1/1 0/0 0/0 .sbss console_scroll$3782 */ -static f32 console_scroll; - -/* 80450B30-80450B34 000030 0004+00 1/1 0/0 0/0 .sbss None */ -static s8 data_80450B30; - -/* 80451A00-80451A04 000000 0004+00 1/1 0/0 0/0 .sdata2 @3884 */ -SECTION_SDATA2 static f32 lit_3884 = 20.0f; - -/* 80451A04-80451A08 000004 0004+00 1/1 0/0 0/0 .sdata2 @3885 */ -SECTION_SDATA2 static f32 lit_3885 = 30.0f; - -/* 80451A08-80451A0C 000008 0004+00 1/1 0/0 0/0 .sdata2 @3886 */ -SECTION_SDATA2 static u8 lit_3886[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; - -/* 80451A0C-80451A10 00000C 0004+00 1/1 0/0 0/0 .sdata2 @3887 */ -SECTION_SDATA2 static f32 lit_3887 = 1.0f; - -/* 80451A10-80451A18 000010 0004+04 1/1 0/0 0/0 .sdata2 @3888 */ -SECTION_SDATA2 static f32 lit_3888[1 + 1 /* padding */] = { - -1.0f, - /* padding */ - 0.0f, -}; - -/* 80451A18-80451A20 000018 0008+00 1/1 0/0 0/0 .sdata2 @3890 */ -SECTION_SDATA2 static f64 lit_3890 = 4503601774854144.0 /* cast s32 to float */; /* 80005D4C-8000614C 00068C 0400+00 1/1 0/0 0/0 .text Debug_console__FUl */ -// middle section has lots of issues -#ifdef NONMATCHING bool Debug_console(u32 i_padNo) { - float tmp2; - float tmp3; - int tmp6; + static f32 console_position_x; + static s8 console_x_init; + + static f32 console_position_y; + static s8 console_y_init; + + static f32 console_scroll; + static s8 console_scroll_init; JUTConsole* console = JFWSystem::getSystemConsole(); if (console) { - if (!data_80450B20) { + if (!console_x_init) { console_position_x = 20.0f; - data_80450B20 = 1; + console_x_init = 1; } - if (!data_80450B28) { + if (!console_y_init) { console_position_y = 30.0f; - data_80450B28 = 1; + console_y_init = 1; } - if (!data_80450B30) { + if (!console_scroll_init) { console_scroll = 0.0f; - data_80450B30 = 1; + console_scroll_init = 1; } - if (mDoCPd_c::getTrig(i_padNo) & CButton::Z && - !(mDoCPd_c::getHold(i_padNo) & ~CButton::Z)) { - bool visible = console->isVisible() == false; - console->setVisible(visible); + if (mDoCPd_c::getTrig(i_padNo) & CButton::Z && !(mDoCPd_c::getHold(i_padNo) & ~CButton::Z)) { + console->setVisible(console->isVisible() == false); JUTAssertion::setMessageCount(0); } if (console->isVisible()) { - // if R and L are pressed - if ((mDoCPd_c::getHold(i_padNo) & CButton::L && - mDoCPd_c::getHold(i_padNo) & CButton::R) || - ((mDoCPd_c::getAnalogL(i_padNo) > 0.0f && - (0.0f > mDoCPd_c::getAnalogR(i_padNo))))) { - if (mDoCPd_c::getTrig(i_padNo) & (CButton::Y | CButton::X) && + u32 holdButtons = mDoCPd_c::getHold(i_padNo); + if ((holdButtons & CButton::L && holdButtons & CButton::R) || + ((mDoCPd_c::getAnalogL(i_padNo) > 0.0f && mDoCPd_c::getAnalogR(i_padNo) > 0.0f))) { + f32 stick_x = mDoCPd_c::getStickX(i_padNo); + f32 stick_y = mDoCPd_c::getStickY(i_padNo); + + if (holdButtons & (CButton::Y | CButton::X) && mDoCPd_c::getTrig(i_padNo) & CButton::START) { console->clear(); } if (!(mDoCPd_c::getHold(i_padNo) & (CButton::Y | CButton::X))) { - // subtract console scroll value from stick Y - console_scroll -= mDoCPd_c::getStickY(i_padNo); - int tmp; - if (1.0f <= console_scroll) { - -1.0f <= console_scroll ? tmp = 0 : tmp = -console_scroll; + console_scroll -= stick_y; + + int scrollAmount; + if (console_scroll > 1.0f) { + scrollAmount = console_scroll; + } else if (console_scroll < -1.0f) { + scrollAmount = -(int)-console_scroll; } else { - tmp = mDoCPd_c::getStickX(i_padNo) - mDoCPd_c::getStickY(i_padNo); + scrollAmount = 0; } - if (tmp) { - console_scroll -= tmp; - console->scroll(tmp); + if (scrollAmount != 0) { + console_scroll -= scrollAmount; + console->scroll(scrollAmount); } } else { if (mDoCPd_c::getHold(i_padNo) & CButton::X) { - console_position_x += mDoCPd_c::getStickX(i_padNo); + console_position_x += stick_x; } if (mDoCPd_c::getHold(i_padNo) & CButton::Y) { - console_position_y -= mDoCPd_c::getStickY(i_padNo); + console_position_y -= stick_y; } } @@ -547,54 +437,46 @@ bool Debug_console(u32 i_padNo) { console->setOutput(JUTConsole::OUTPUT_OSREPORT | JUTConsole::OUTPUT_CONSOLE); } - JUTReport(0x1E, 0x186, 1, "Press X+Y+START to CLEAR console."); - JUTReport(0x1E, 400, 1, "3DStick UP/Down to scroll"); - JUTReport(0x1E, 0x19A, 1, "Press A to output terminal from console."); - JUTReport(0x1E, 0x1A4, 1, "SCROLL:%3d %3d %3d Output=%1x", + JUTReport(30, 390, 1, "Press X+Y+START to CLEAR console."); + JUTReport(30, 400, 1, "3DStick UP/Down to scroll"); + JUTReport(30, 410, 1, "Press A to output terminal from console."); + JUTReport(30, 420, 1, "SCROLL:%3d %3d %3d Output=%1x", console->getLineOffset(), console->getPositionX(), console->getPositionY(), console->getOutput()); - } - } else { - if (mDoCPd_c::getTrig(i_padNo) & CButton::DPAD_DOWN) { - g_HIO.mDisplayMeter ^= 1; - } + } else { + u32 pressButtons = mDoCPd_c::getTrig(i_padNo); - if (mDoCPd_c::getTrig(i_padNo) & CButton::DPAD_LEFT) { - if (JKRAram::getAramHeap()) { - JKRAram::getAramHeap()->dump(); + if (pressButtons & CButton::DPAD_DOWN) { + g_HIO.mDisplayMeter ^= 1; } - dump__24DynamicModuleControlBaseFv(); - g_dComIfG_gameInfo.mResControl.dump(); - } + if (pressButtons & CButton::DPAD_LEFT) { + if (JKRAram::getAramHeap()) { + JKRAram::getAramHeap()->dump(); + } - if (mDoCPd_c::getTrig(i_padNo) & CButton::DPAD_RIGHT) { - JKRHeap::getSystemHeap()->dump_sort(); - } + dump__24DynamicModuleControlBaseFv(); + g_dComIfG_gameInfo.mResControl.dump(); + } - if (mDoCPd_c::getTrig(i_padNo) & CButton::DPAD_UP) { - zeldaHeap->dump_sort(); - gameHeap->dump_sort(); - archiveHeap->dump_sort(); + if (mDoCPd_c::getTrig(i_padNo) & CButton::DPAD_RIGHT) { + JKRHeap::getSystemHeap()->dump_sort(); + } + + if (mDoCPd_c::getTrig(i_padNo) & CButton::DPAD_UP) { + zeldaHeap->dump_sort(); + gameHeap->dump_sort(); + archiveHeap->dump_sort(); + } + JUTReport(30, 440, 1, "Press L+R trigger to control console."); + JUTReport(30, 450, 1, "Press [Z] trigger to close this window."); } - JUTReport(0x1E, 0x1B8, 1, "Press L+R trigger to control console."); - JUTReport(0x1E, 0x1C2, 1, "Press [Z] trigger to close this window."); + console->setPosition(console_position_x, console_position_y); + return 1; } - console->setPosition(console_position_x, console_position_y); - return 1; } return 0; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void Debug_console(u32 param_0) { - nofralloc -#include "asm/m_Do/m_Do_main/Debug_console__FUl.s" -} -#pragma pop -#endif /* ############################################################################################## */ /* 803739A0-803739A0 000000 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -633,25 +515,25 @@ asm void* LOAD_COPYDATE(void* param_0) { static void debug() { if (data_80450580) { - if (data_80450B1A) { - CheckHeap(2); + if (sCheckHeap) { + CheckHeap(PAD_3); } - if ((mDoCPd_c::getGamePad(2)->getButton() & ~CButton::Z) == CButton::R && - mDoCPd_c::getGamePad(2)->testTrigger(CButton::Z)) { - struct_80450B18[0] ^= 0x1; + if ((mDoCPd_c::getGamePad(PAD_3)->getButton() & ~CButton::Z) == CButton::R && + mDoCPd_c::getGamePad(PAD_3)->testTrigger(CButton::Z)) { + struct_80450B18 ^= 1; } - if (struct_80450B18[0]) { - if ((mDoCPd_c::getGamePad(2)->getButton() & ~CButton::Z) == CButton::L && - mDoCPd_c::getGamePad(2)->testTrigger(CButton::Z)) { - data_80450588[0] < 0x5 ? data_80450588[0]++ : data_80450588[0] = 0x1; + if (struct_80450B18) { + if ((mDoCPd_c::getGamePad(PAD_3)->getButton() & ~CButton::Z) == CButton::L && + mDoCPd_c::getGamePad(PAD_3)->testTrigger(CButton::Z)) { + mDoMain::mHeapBriefType < 5 ? mDoMain::mHeapBriefType++ : mDoMain::mHeapBriefType = 1; } debugDisplay(); } - Debug_console(2); + Debug_console(PAD_3); } } @@ -660,7 +542,7 @@ static void debug() { static u32 frame; /* 8000628C-80006454 000BCC 01C8+00 1/1 0/0 0/0 .text main01__Fv */ -// almost +// only issue is output check section with weird code gen #ifdef NONMATCHING void main01(void) { mDoMch_Create__Fv(); @@ -708,18 +590,18 @@ void main01(void) { } JUTConsole* console = JFWSystem::getSystemConsole(); - u32 output = JUTConsole::OUTPUT_OSREPORT | JUTConsole::OUTPUT_CONSOLE; + s32 output = 0; if (data_80450580 != 0) { - data_80450580 = JUTConsole::OUTPUT_NONE; + output = JUTConsole::OUTPUT_OSREPORT | JUTConsole::OUTPUT_CONSOLE; } - console->setOutput(output); + console->setOutput(output); console->setPosition(32, 42); mDoDvdThd_callback_c::create(LOAD_COPYDATE, NULL); fapGm_Create__Fv(); fopAcM_initManager__Fv(); - struct_80450B18[0] = 0; + struct_80450B18 = 0; cDyl_InitAsync__Fv(); g_mDoAud_audioHeap = JKRSolidHeap::create(0x14D800, JKRHeap::getCurrentHeap(), false); @@ -761,7 +643,7 @@ static OSThread mainThread; /* 80006454-800065D8 000D94 0184+00 0/0 1/1 0/0 .text main */ void main() { OSThread* current_thread = OSGetCurrentThread(); - u8* stack = &mainThreadStack[0]; + u8* stack = mainThreadStack; mDoMain::sPowerOnTime = OSGetTime(); OSReportInit(); version_check(); @@ -795,7 +677,7 @@ void main() { data_80450580 = 1; } else if (disk_id->game_version > 0x80) { u32 consoleType = OSGetConsoleType(); - data_80450580 = (consoleType >> 0x1c) & 1; + data_80450580 = (consoleType >> 0x1C) & 1; } else { data_80450580 = 0; } |
