From 4df6e8edea459eea6b13a0aa5c348d457d15edd5 Mon Sep 17 00:00:00 2001 From: hatal175 Date: Thu, 23 Feb 2023 17:41:05 +0200 Subject: [PATCH] Various matches and improvements (#299) * Various matches and improvements * Remove unnecessary comment --- Progress.md | 8 +- ...3d_Cross_AabSph__FPC8cM3dGAabPC8cM3dGSph.s | 48 ---------- .../Z2SceneMgr/__ct__10Z2SceneMgrFv.s | 29 ------ .../Z2SceneMgr/setFieldBgmPlay__8Z2SeqMgrFb.s | 5 - .../setInDarkness__10Z2SceneMgrFb.s | 14 --- include/Z2AudioLib/Z2SeqMgr.h | 4 + libs/SSystem/SComponent/c_m3d.cpp | 44 ++++----- libs/Z2AudioLib/Z2SceneMgr.cpp | 94 +++++++++---------- src/m_Do/m_Do_MemCardRWmng.cpp | 76 +++++++++------ src/m_Do/m_Do_machine.cpp | 34 ++----- 10 files changed, 129 insertions(+), 227 deletions(-) delete mode 100644 asm/SSystem/SComponent/c_m3d/cM3d_Cross_AabSph__FPC8cM3dGAabPC8cM3dGSph.s delete mode 100644 asm/Z2AudioLib/Z2SceneMgr/__ct__10Z2SceneMgrFv.s delete mode 100644 asm/Z2AudioLib/Z2SceneMgr/setFieldBgmPlay__8Z2SeqMgrFb.s delete mode 100644 asm/Z2AudioLib/Z2SceneMgr/setInDarkness__10Z2SceneMgrFb.s diff --git a/Progress.md b/Progress.md index 55840236c42..d61bca959d7 100644 --- a/Progress.md +++ b/Progress.md @@ -7,22 +7,22 @@ Section | Percentage | Decompiled (bytes) | Total (bytes) .init | 97.972973% | 9280 | 9472 .extab | 100.000000% | 96 | 96 .extabindex | 100.000000% | 96 | 96 -.text | 24.679693% | 887616 | 3596544 +.text | 24.689257% | 887960 | 3596544 .ctors | 100.000000% | 448 | 448 .dtors | 100.000000% | 32 | 32 .rodata | 100.000000% | 193856 | 193856 .data | 100.000000% | 197632 | 197632 .sdata | 100.000000% | 1408 | 1408 .sdata2 | 100.000000% | 20832 | 20832 -Total | 32.620219% | 1311552 | 4020672 +Total | 32.628774% | 1311896 | 4020672 ## Total Section | Percentage | Decompiled (bytes) | Total (bytes) ---|---|---|--- -main.dol | 32.620219% | 1311552 | 4020672 +main.dol | 32.628774% | 1311896 | 4020672 RELs | 33.287306% | 3828148 | 11500324 -Total | 33.114499% | 5139700 | 15520996 +Total | 33.116715% | 5140044 | 15520996 ## RELs diff --git a/asm/SSystem/SComponent/c_m3d/cM3d_Cross_AabSph__FPC8cM3dGAabPC8cM3dGSph.s b/asm/SSystem/SComponent/c_m3d/cM3d_Cross_AabSph__FPC8cM3dGAabPC8cM3dGSph.s deleted file mode 100644 index 000fc022dba..00000000000 --- a/asm/SSystem/SComponent/c_m3d/cM3d_Cross_AabSph__FPC8cM3dGAabPC8cM3dGSph.s +++ /dev/null @@ -1,48 +0,0 @@ -lbl_80268BB4: -/* 80268BB4 C0 44 00 0C */ lfs f2, 0xc(r4) -/* 80268BB8 C0 64 00 00 */ lfs f3, 0(r4) -/* 80268BBC C0 23 00 00 */ lfs f1, 0(r3) -/* 80268BC0 EC 03 10 2A */ fadds f0, f3, f2 -/* 80268BC4 FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 80268BC8 40 81 00 0C */ ble lbl_80268BD4 -/* 80268BCC 38 60 00 00 */ li r3, 0 -/* 80268BD0 4E 80 00 20 */ blr -lbl_80268BD4: -/* 80268BD4 C0 23 00 0C */ lfs f1, 0xc(r3) -/* 80268BD8 EC 03 10 28 */ fsubs f0, f3, f2 -/* 80268BDC FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 80268BE0 40 80 00 0C */ bge lbl_80268BEC -/* 80268BE4 38 60 00 00 */ li r3, 0 -/* 80268BE8 4E 80 00 20 */ blr -lbl_80268BEC: -/* 80268BEC C0 64 00 08 */ lfs f3, 8(r4) -/* 80268BF0 C0 23 00 08 */ lfs f1, 8(r3) -/* 80268BF4 EC 03 10 2A */ fadds f0, f3, f2 -/* 80268BF8 FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 80268BFC 40 81 00 0C */ ble lbl_80268C08 -/* 80268C00 38 60 00 00 */ li r3, 0 -/* 80268C04 4E 80 00 20 */ blr -lbl_80268C08: -/* 80268C08 C0 23 00 14 */ lfs f1, 0x14(r3) -/* 80268C0C EC 03 10 28 */ fsubs f0, f3, f2 -/* 80268C10 FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 80268C14 40 80 00 0C */ bge lbl_80268C20 -/* 80268C18 38 60 00 00 */ li r3, 0 -/* 80268C1C 4E 80 00 20 */ blr -lbl_80268C20: -/* 80268C20 C0 64 00 04 */ lfs f3, 4(r4) -/* 80268C24 C0 23 00 04 */ lfs f1, 4(r3) -/* 80268C28 EC 03 10 2A */ fadds f0, f3, f2 -/* 80268C2C FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 80268C30 40 81 00 0C */ ble lbl_80268C3C -/* 80268C34 38 60 00 00 */ li r3, 0 -/* 80268C38 4E 80 00 20 */ blr -lbl_80268C3C: -/* 80268C3C C0 23 00 10 */ lfs f1, 0x10(r3) -/* 80268C40 EC 03 10 28 */ fsubs f0, f3, f2 -/* 80268C44 FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 80268C48 7C 00 00 26 */ mfcr r0 -/* 80268C4C 54 00 0F FE */ srwi r0, r0, 0x1f -/* 80268C50 7C 00 00 34 */ cntlzw r0, r0 -/* 80268C54 54 03 D9 7E */ srwi r3, r0, 5 -/* 80268C58 4E 80 00 20 */ blr diff --git a/asm/Z2AudioLib/Z2SceneMgr/__ct__10Z2SceneMgrFv.s b/asm/Z2AudioLib/Z2SceneMgr/__ct__10Z2SceneMgrFv.s deleted file mode 100644 index 41e2756df72..00000000000 --- a/asm/Z2AudioLib/Z2SceneMgr/__ct__10Z2SceneMgrFv.s +++ /dev/null @@ -1,29 +0,0 @@ -lbl_802B6840: -/* 802B6840 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 802B6844 90 6D 86 00 */ stw r3, __OSReport_disable-0x18(r13) -/* 802B6848 38 00 FF FF */ li r0, -1 -/* 802B684C 90 03 00 04 */ stw r0, 4(r3) -/* 802B6850 90 01 00 08 */ stw r0, 8(r1) -/* 802B6854 90 03 00 00 */ stw r0, 0(r3) -/* 802B6858 98 03 00 0C */ stb r0, 0xc(r3) -/* 802B685C 38 00 00 00 */ li r0, 0 -/* 802B6860 98 03 00 0D */ stb r0, 0xd(r3) -/* 802B6864 98 03 00 0E */ stb r0, 0xe(r3) -/* 802B6868 98 03 00 0F */ stb r0, 0xf(r3) -/* 802B686C 98 03 00 10 */ stb r0, 0x10(r3) -/* 802B6870 98 03 00 11 */ stb r0, 0x11(r3) -/* 802B6874 98 03 00 12 */ stb r0, 0x12(r3) -/* 802B6878 98 03 00 13 */ stb r0, 0x13(r3) -/* 802B687C 98 03 00 14 */ stb r0, 0x14(r3) -/* 802B6880 98 03 00 15 */ stb r0, 0x15(r3) -/* 802B6884 98 03 00 16 */ stb r0, 0x16(r3) -/* 802B6888 98 03 00 18 */ stb r0, 0x18(r3) -/* 802B688C 98 03 00 19 */ stb r0, 0x19(r3) -/* 802B6890 98 03 00 1A */ stb r0, 0x1a(r3) -/* 802B6894 98 03 00 1B */ stb r0, 0x1b(r3) -/* 802B6898 98 03 00 1D */ stb r0, 0x1d(r3) -/* 802B689C 98 03 00 1C */ stb r0, 0x1c(r3) -/* 802B68A0 98 03 00 1E */ stb r0, 0x1e(r3) -/* 802B68A4 98 03 00 17 */ stb r0, 0x17(r3) -/* 802B68A8 38 21 00 10 */ addi r1, r1, 0x10 -/* 802B68AC 4E 80 00 20 */ blr diff --git a/asm/Z2AudioLib/Z2SceneMgr/setFieldBgmPlay__8Z2SeqMgrFb.s b/asm/Z2AudioLib/Z2SceneMgr/setFieldBgmPlay__8Z2SeqMgrFb.s deleted file mode 100644 index 18f1436abbd..00000000000 --- a/asm/Z2AudioLib/Z2SceneMgr/setFieldBgmPlay__8Z2SeqMgrFb.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_802B9968: -/* 802B9968 88 03 00 D0 */ lbz r0, 0xd0(r3) -/* 802B996C 50 80 17 7A */ rlwimi r0, r4, 2, 0x1d, 0x1d -/* 802B9970 98 03 00 D0 */ stb r0, 0xd0(r3) -/* 802B9974 4E 80 00 20 */ blr diff --git a/asm/Z2AudioLib/Z2SceneMgr/setInDarkness__10Z2SceneMgrFb.s b/asm/Z2AudioLib/Z2SceneMgr/setInDarkness__10Z2SceneMgrFb.s deleted file mode 100644 index db43c6d2f46..00000000000 --- a/asm/Z2AudioLib/Z2SceneMgr/setInDarkness__10Z2SceneMgrFb.s +++ /dev/null @@ -1,14 +0,0 @@ -lbl_802B68B0: -/* 802B68B0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 802B68B4 7C 08 02 A6 */ mflr r0 -/* 802B68B8 90 01 00 14 */ stw r0, 0x14(r1) -/* 802B68BC 98 83 00 1E */ stb r4, 0x1e(r3) -/* 802B68C0 54 80 06 3F */ clrlwi. r0, r4, 0x18 -/* 802B68C4 40 82 00 0C */ bne lbl_802B68D0 -/* 802B68C8 80 6D 85 E0 */ lwz r3, __OSReport_disable-0x38(r13) -/* 802B68CC 4B FF 3B 65 */ bl resetFilterAll__10Z2SoundMgrFv -lbl_802B68D0: -/* 802B68D0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 802B68D4 7C 08 03 A6 */ mtlr r0 -/* 802B68D8 38 21 00 10 */ addi r1, r1, 0x10 -/* 802B68DC 4E 80 00 20 */ blr diff --git a/include/Z2AudioLib/Z2SeqMgr.h b/include/Z2AudioLib/Z2SeqMgr.h index 767ea82bd66..97bc1fba376 100644 --- a/include/Z2AudioLib/Z2SeqMgr.h +++ b/include/Z2AudioLib/Z2SeqMgr.h @@ -90,6 +90,10 @@ public: field_0x44.move(1.0f, count); } + void bgmAllMute(u32 count, f32 val) { + mAllBgmMaster.mTransition.set(val, mAllBgmMaster.mIntensity, count); + } + private: /* 0x00 */ JAISoundHandle mMainBgmHandle; /* 0x04 */ JAISoundHandle mSubBgmHandle; diff --git a/libs/SSystem/SComponent/c_m3d.cpp b/libs/SSystem/SComponent/c_m3d.cpp index 6fd69c5e49b..28dda82caae 100644 --- a/libs/SSystem/SComponent/c_m3d.cpp +++ b/libs/SSystem/SComponent/c_m3d.cpp @@ -314,35 +314,31 @@ bool cM3d_Cross_AabCyl(const cM3dGAab* pAab, const cM3dGCyl* pCyl) { /* 80268BB4-80268C5C 2634F4 00A8+00 0/0 2/2 0/0 .text cM3d_Cross_AabSph__FPC8cM3dGAabPC8cM3dGSph */ -#ifdef NONMATCHING bool cM3d_Cross_AabSph(const cM3dGAab* pAab, const cM3dGSph* pSph) { f32 radius = pSph->GetR(); - if (pAab->GetMinX() > pSph->GetC().x + radius) { // addition registers are flipped + f32 cx = pSph->GetC().x; + if (pAab->GetMinX() > cx + radius) { return false; - } else if (pAab->GetMaxX() < pSph->GetC().x - radius) { - return false; - } else if (pAab->GetMinZ() > pSph->GetC().z + radius) { - return false; - } else if (pAab->GetMaxZ() < pSph->GetC().z - radius) { - return false; - } else if (pAab->GetMinY() > pSph->GetC().y + radius) { - return false; - } else if (pAab->GetMaxY() < pSph->GetC().y - radius) { - return false; - } else { - return true; } + else if (pAab->GetMaxX() < cx - radius) { + return false; + } + + f32 cz = pSph->GetC().z; + if (pAab->GetMinZ() > cz + radius) { + return false; + } else if (pAab->GetMaxZ() < cz - radius) { + return false; + } + + f32 cy = pSph->GetC().y; + if (pAab->GetMinY() > cy + radius) { + return false; + } else if (pAab->GetMaxY() < cy - radius) { + return false; + } + return true; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm bool cM3d_Cross_AabSph(cM3dGAab const* param_0, cM3dGSph const* param_1) { - nofralloc -#include "asm/SSystem/SComponent/c_m3d/cM3d_Cross_AabSph__FPC8cM3dGAabPC8cM3dGSph.s" -} -#pragma pop -#endif /* 80268C5C-80268ED4 26359C 0278+00 3/3 0/0 0/0 .text * cM3d_Check_LinLin__FPC8cM3dGLinPC8cM3dGLinPfPf */ diff --git a/libs/Z2AudioLib/Z2SceneMgr.cpp b/libs/Z2AudioLib/Z2SceneMgr.cpp index a533c5630fe..09ad2d587d3 100644 --- a/libs/Z2AudioLib/Z2SceneMgr.cpp +++ b/libs/Z2AudioLib/Z2SceneMgr.cpp @@ -6,6 +6,8 @@ #include "Z2AudioLib/Z2SceneMgr.h" #include "Z2AudioLib/Z2SoundMgr.h" #include "Z2AudioLib/Z2SeqMgr.h" +#include "Z2AudioLib/Z2SeMgr.h" +#include "Z2AudioLib/Z2StatusMgr.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -29,25 +31,12 @@ struct dSv_event_c { /* 800349BC */ void isEventBit(u16) const; }; -struct Z2StatusMgr { - /* 802B617C */ void menuOut(); - /* 802B61E8 */ void setDemoName(char*); - /* 802B6734 */ void checkDayTime(); -}; - struct Z2SoundObjMgr { /* 802BF980 */ void setForceBattleArea(bool, u16, u16, u16); /* 802BFFEC */ void setGhostEnemyState(u8); /* 802C013C */ void deleteEnemyAll(); }; -struct Z2SeMgr { - /* 802AB80C */ void resetModY(); - /* 802AD94C */ void seStopAll(u32); - /* 802AD9F4 */ void seMoveVolumeAll(f32, u32); - /* 802B9AC4 */ void resetCrowdSize(); -}; - struct Z2FxLineMgr { /* 802BAEB8 */ void setSceneFx(s32); }; @@ -172,12 +161,10 @@ extern "C" extern u8 __OSReport_disable; // /* 802B6840-802B68B0 2B1180 0070+00 0/0 1/1 0/0 .text __ct__10Z2SceneMgrFv */ -// Missing 2 instructions (beginning and end) -#ifdef NONMATCHING -Z2SceneMgr::Z2SceneMgr(void) { - data_80450B80 = this; +Z2SceneMgr::Z2SceneMgr(void) : JASGlobalInstance(this) { + volatile int timerx; sceneNum = -1; - timer = -1; + timerx = -1; BGM_ID = -1; roomNum = -1; SeWave_1 = 0; @@ -198,28 +185,15 @@ Z2SceneMgr::Z2SceneMgr(void) { inGame = 0; inDarkness = false; field_0x17 = 0; - return; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm Z2SceneMgr::Z2SceneMgr() { - nofralloc -#include "asm/Z2AudioLib/Z2SceneMgr/__ct__10Z2SceneMgrFv.s" -} -#pragma pop -#endif /* 802B68B0-802B68E0 2B11F0 0030+00 0/0 1/1 0/0 .text setInDarkness__10Z2SceneMgrFb */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void Z2SceneMgr::setInDarkness(bool param_0) { - nofralloc -#include "asm/Z2AudioLib/Z2SceneMgr/setInDarkness__10Z2SceneMgrFb.s" +void Z2SceneMgr::setInDarkness(bool param_0) { + inDarkness = param_0; + if (!param_0) { + Z2SoundMgr::getInstance()->resetFilterAll(); + } } -#pragma pop /* ############################################################################################## */ /* 80455A38-80455A3C 004038 0004+00 8/8 0/0 0/0 .sdata2 @3511 */ @@ -278,6 +252,16 @@ SECTION_SDATA2 static f32 lit_3529[1 + 1 /* padding */] = { SECTION_SDATA2 static f64 lit_3531 = 4503599627370496.0 /* cast u32 to float */; /* 802B697C-802B6A18 2B12BC 009C+00 0/0 1/1 0/0 .text setFadeOutStart__10Z2SceneMgrFUc */ +#ifdef NONMATCHING +void Z2SceneMgr::setFadeOutStart(u8 param_0) { + setSceneExist(false); + Z2SeqMgr::getInstance()->bgmAllMute(33, 3.0f / 10.0f); + Z2SeMgr::getInstance()->seMoveVolumeAll(FLOAT_LABEL(lit_3511), 33); + Z2SeqMgr::getInstance()->setBattleBgmOff(true); + field_0x17 = 40; + timer = -1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -286,8 +270,31 @@ asm void Z2SceneMgr::setFadeOutStart(u8 param_0) { #include "asm/Z2AudioLib/Z2SceneMgr/setFadeOutStart__10Z2SceneMgrFUc.s" } #pragma pop +#endif /* 802B6A18-802B6AF8 2B1358 00E0+00 0/0 1/1 0/0 .text setFadeInStart__10Z2SceneMgrFUc */ +#ifdef NONMATCHING +void Z2SceneMgr::setFadeInStart(u8 param_0) { + if (SeWave_3 == 0x7f) { + Z2SeMgr::getInstance()->seMoveVolumeAll(FLOAT_LABEL(lit_3511), 0); + } else { + Z2SeMgr::getInstance()->seMoveVolumeAll(FLOAT_LABEL(lit_3512), 33); + + if (SeWave_3 == 0x85) { + JAISeMgr* seMgr = Z2SoundMgr::getInstance()->getSeMgr(); + seMgr->getCategory(9)->getParams()->moveVolume(FLOAT_LABEL(lit_3511), 0); + } + } + Z2SeqMgr::getInstance()->i_setTwilightGateVol(FLOAT_LABEL(lit_3512)); + Z2StatusMgr::getInstance()->menuOut(); + + if (field_0x1a == 0) { + Z2SeqMgr::getInstance()->bgmAllMute(33, 3.0f / 10.0f); + } + + inGame = true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -296,6 +303,7 @@ asm void Z2SceneMgr::setFadeInStart(u8 param_0) { #include "asm/Z2AudioLib/Z2SceneMgr/setFadeInStart__10Z2SceneMgrFUc.s" } #pragma pop +#endif /* ############################################################################################## */ /* 8039BFA8-8039BFA8 028608 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -712,21 +720,9 @@ extern "C" void __ct__10JAISoundIDFRC10JAISoundID(JAISoundID* this_, JAISoundID } /* 802B9968-802B9978 2B42A8 0010+00 1/1 0/0 0/0 .text setFieldBgmPlay__8Z2SeqMgrFb */ -// 1 Instruction off -#ifdef NONMATCHING void Z2SeqMgr::setFieldBgmPlay(bool param_1) { - mFlags = (param_1 & 1U) << 2 | mFlags & 0xfb; + mFlags = (param_1 & 1U) << 2 | (mFlags & ~4); } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void Z2SeqMgr::setFieldBgmPlay(bool param_0) { - nofralloc -#include "asm/Z2AudioLib/Z2SceneMgr/setFieldBgmPlay__8Z2SeqMgrFb.s" -} -#pragma pop -#endif /* 802B9978-802B9988 2B42B8 0010+00 1/1 0/0 0/0 .text isActive__12JAIStreamMgrCFv */ #pragma push diff --git a/src/m_Do/m_Do_MemCardRWmng.cpp b/src/m_Do/m_Do_MemCardRWmng.cpp index 4d0f07b23d7..532aba47408 100644 --- a/src/m_Do/m_Do_MemCardRWmng.cpp +++ b/src/m_Do/m_Do_MemCardRWmng.cpp @@ -49,40 +49,60 @@ s32 mDoMemCdRWm_Store(CARDFileInfo* file, void* data, u32 length) { mDoMemCdRWm_BuildHeader((mDoMemCdRWm_HeaderData*)sTmpBuf); s32 card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf), 0); - if (card_state != CARD_ERROR_READY) { - if (!mDoMemCdRWm_CheckCardStat(file)) { - memset(sTmpBuf, 0, sizeof(sTmpBuf)); + if (card_state != CARD_RESULT_READY) { + return card_state; + } - card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000); - if (card_state == CARD_ERROR_READY) { - return; - } + if (!mDoMemCdRWm_CheckCardStat(file)) { + memset(sTmpBuf, 0, sizeof(sTmpBuf)); - card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000); - if (card_state == CARD_ERROR_READY) { - return; - } + card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000); + if (card_state != CARD_RESULT_READY) { + return card_state; } - memset(sTmpBuf, 0, sizeof(sTmpBuf)); - *(int*)(sTmpBuf + 4) = 6; - memcpy(sTmpBuf + 8, data, length); - *(int*)(sTmpBuf) = 0; - u32 checksum = mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC); - *(u32*)(sTmpBuf + 0x1FFC) = checksum; - - if (CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000) == CARD_ERROR_READY && - CARDRead(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000) == CARD_ERROR_READY) { - if (checksum == mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC)) { - if (CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000) == CARD_ERROR_READY && - CARDRead(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000) == CARD_ERROR_READY) { - if (checksum == mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC)) { - mDoMemCdRWm_SetCardStat(file); - } - } - } + card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000); + if (card_state != CARD_RESULT_READY) { + return card_state; } } + + memset(sTmpBuf, 0, sizeof(sTmpBuf)); + *(int*)(sTmpBuf + 4) = 6; + memcpy(sTmpBuf + 8, data, length); + *(int*)(sTmpBuf) = 0; + u32 checksum = mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC); + *(u32*)(sTmpBuf + 0x1FFC) = checksum; + + card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000); + if (card_state != CARD_RESULT_READY) { + return card_state; + } + + card_state = CARDRead(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000); + if (card_state != CARD_RESULT_READY) { + return card_state; + } + + if (checksum != mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC)) { + return card_state; + } + + card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000); + if (card_state != CARD_RESULT_READY) { + return card_state; + } + + card_state = CARDRead(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000); + if (card_state != CARD_RESULT_READY) { + return card_state; + } + + if (checksum != mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC)) { + return card_state; + } + mDoMemCdRWm_SetCardStat(file); + return card_state; } #else #pragma push diff --git a/src/m_Do/m_Do_machine.cpp b/src/m_Do/m_Do_machine.cpp index bee4c70dd29..76d36920982 100644 --- a/src/m_Do/m_Do_machine.cpp +++ b/src/m_Do/m_Do_machine.cpp @@ -406,6 +406,7 @@ 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 +// Everything matches but there are issues with dead section static void fault_callback_scroll(u16, OSContext* p_context, u32, u32) { JUTException* manager = JUTException::getManager(); JUTConsole* exConsole = manager->getConsole(); @@ -469,34 +470,12 @@ static void fault_callback_scroll(u16, OSContext* p_context, u32, u32) { } 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); + exConsole->scroll(holdUpCount < 3 ? -1 : (holdUpCount < 5 ? -2 : (holdUpCount < 7 ? -4 : -8))); 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); + exConsole->scroll(holdDownCount < 3 ? 1 : (holdDownCount < 5 ? 2 : (holdDownCount < 7 ? 4 : 8))); waitRetrace = true; holdUpCount = 0; holdDownCount++; @@ -537,8 +516,11 @@ static void fault_callback_scroll(u16, OSContext* p_context, u32, u32) { } JUTException::waitTime(3000); - } while ((exConsole->getUsedLine() - exConsole->getHeight()) + 1 <= - exConsole->getLineOffset()); + if ((exConsole->getUsedLine() - exConsole->getHeight()) + 1 <= + exConsole->getLineOffset()) { + break; + } + } while (true); } while (true); } #else