summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhatal175 <hatal175@users.noreply.github.com>2023-02-23 17:41:05 +0200
committerGitHub <noreply@github.com>2023-02-23 08:41:05 -0700
commit4df6e8edea459eea6b13a0aa5c348d457d15edd5 (patch)
tree2b1a9fe520310953c358dfdf92e1c8475ec8bf62
parentfa1f47f7a134cdc203207ec0b273ca7d32542d52 (diff)
Various matches and improvements (#299)
* Various matches and improvements * Remove unnecessary comment
-rw-r--r--Progress.md8
-rw-r--r--asm/SSystem/SComponent/c_m3d/cM3d_Cross_AabSph__FPC8cM3dGAabPC8cM3dGSph.s48
-rw-r--r--asm/Z2AudioLib/Z2SceneMgr/__ct__10Z2SceneMgrFv.s29
-rw-r--r--asm/Z2AudioLib/Z2SceneMgr/setFieldBgmPlay__8Z2SeqMgrFb.s5
-rw-r--r--asm/Z2AudioLib/Z2SceneMgr/setInDarkness__10Z2SceneMgrFb.s14
-rw-r--r--include/Z2AudioLib/Z2SeqMgr.h4
-rw-r--r--libs/SSystem/SComponent/c_m3d.cpp34
-rw-r--r--libs/Z2AudioLib/Z2SceneMgr.cpp94
-rw-r--r--src/m_Do/m_Do_MemCardRWmng.cpp80
-rw-r--r--src/m_Do/m_Do_machine.cpp34
10 files changed, 126 insertions, 224 deletions
diff --git a/Progress.md b/Progress.md
index 55840236c4..d61bca959d 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 000fc022db..0000000000
--- 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 41e2756df7..0000000000
--- 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 18f1436abb..0000000000
--- 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 db43c6d2f4..0000000000
--- 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 767ea82bd6..97bc1fba37 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 6fd69c5e49..28dda82caa 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) {
+ }
+ else if (pAab->GetMaxX() < cx - radius) {
return false;
- } else if (pAab->GetMinZ() > pSph->GetC().z + radius) {
+ }
+
+ f32 cz = pSph->GetC().z;
+ if (pAab->GetMinZ() > cz + radius) {
return false;
- } else if (pAab->GetMaxZ() < pSph->GetC().z - radius) {
+ } else if (pAab->GetMaxZ() < cz - radius) {
return false;
- } else if (pAab->GetMinY() > pSph->GetC().y + radius) {
+ }
+
+ f32 cy = pSph->GetC().y;
+ if (pAab->GetMinY() > cy + radius) {
return false;
- } else if (pAab->GetMaxY() < pSph->GetC().y - radius) {
+ } else if (pAab->GetMaxY() < cy - radius) {
return false;
- } else {
- return true;
}
+ 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 a533c5630f..09ad2d587d 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<Z2SceneMgr>(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 4d0f07b23d..532aba4740 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));
-
- card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000);
- if (card_state == CARD_ERROR_READY) {
- return;
- }
-
- card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000);
- if (card_state == CARD_ERROR_READY) {
- return;
- }
- }
+ if (card_state != CARD_RESULT_READY) {
+ return card_state;
+ }
+ if (!mDoMemCdRWm_CheckCardStat(file)) {
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, 0x4000);
+ if (card_state != CARD_RESULT_READY) {
+ return card_state;
+ }
+
+ 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 bee4c70dd2..76d3692098 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