From f0958eab1096bcde7642a6f0a7ca2d316ec4631b Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Tue, 26 Dec 2023 22:20:41 -0500 Subject: [PATCH] m_Do_MemCard OK --- configure.py | 2 +- include/m_Do/m_Do_MemCard.h | 8 +++++- include/m_Do/m_Do_MemCardRWmng.h | 3 +++ src/m_Do/m_Do_MemCard.cpp | 46 ++++++++++++++++++++++++++++++-- src/m_Do/m_Do_MemCardRWmng.cpp | 6 +++++ 5 files changed, 61 insertions(+), 4 deletions(-) diff --git a/configure.py b/configure.py index cf0d7b2b6..64eaadb34 100644 --- a/configure.py +++ b/configure.py @@ -264,7 +264,7 @@ config.libs = [ Object(Matching, "m_Do/m_Do_Reset.cpp"), Object(Matching, "m_Do/m_Do_dvd_thread.cpp"), Object(Matching, "m_Do/m_Do_DVDError.cpp"), - Object(NonMatching, "m_Do/m_Do_MemCard.cpp"), + Object(Matching, "m_Do/m_Do_MemCard.cpp"), Object(NonMatching, "m_Do/m_Do_MemCardRWmng.cpp"), Object(Matching, "m_Do/m_Do_gba_com.cpp"), Object(Matching, "m_Do/m_Do_machine_exception.cpp"), diff --git a/include/m_Do/m_Do_MemCard.h b/include/m_Do/m_Do_MemCard.h index 763719b83..f5551a5ca 100644 --- a/include/m_Do/m_Do_MemCard.h +++ b/include/m_Do/m_Do_MemCard.h @@ -13,6 +13,9 @@ public: CARD_FORMAT, CARD_ATTACH, CARD_DETACH, +#if VERSION == VERSION_PAL + CARD_RESTORE2, +#endif }; mDoMemCd_Ctrl_c(); @@ -20,10 +23,13 @@ public: void main(); void update(); void load(); - void load2(); void restore(); s32 LoadSync(void*, u32, u32); +#if VERSION == VERSION_PAL + void load2(); + void restore2(); s32 LoadSync2(); +#endif void save(void*, u32, u32); void store(); s32 SaveSync(); diff --git a/include/m_Do/m_Do_MemCardRWmng.h b/include/m_Do/m_Do_MemCardRWmng.h index 30889580d..709b5d370 100644 --- a/include/m_Do/m_Do_MemCardRWmng.h +++ b/include/m_Do/m_Do_MemCardRWmng.h @@ -8,6 +8,9 @@ struct mDoMemCdRWm_HeaderData; s32 mDoMemCdRWm_Store(CARDFileInfo*, void*, u32); s32 mDoMemCdRWm_Restore(CARDFileInfo*, void*, u32); +#if VERSION == VERSION_PAL +s32 mDoMemCdRWm_Restore2(CARDFileInfo*); +#endif void mDoMemCdRWm_BuildHeader(mDoMemCdRWm_HeaderData*); void mDoMemCdRWm_SetCardStat(CARDFileInfo*); void mDoMemCdRWm_CheckCardStat(CARDFileInfo*); diff --git a/src/m_Do/m_Do_MemCard.cpp b/src/m_Do/m_Do_MemCard.cpp index 71f06bae2..06499eb81 100644 --- a/src/m_Do/m_Do_MemCard.cpp +++ b/src/m_Do/m_Do_MemCard.cpp @@ -62,8 +62,8 @@ void mDoMemCd_Ctrl_c::main() { detach(); break; #if VERSION == VERSION_PAL - case 6: - // restore2(); + case CARD_RESTORE2: + restore2(); break; #endif } @@ -211,6 +211,48 @@ s32 mDoMemCd_Ctrl_c::SaveSync() { return ret; } +#if VERSION == VERSION_PAL +void mDoMemCd_Ctrl_c::restore2() { + if (field_0x1660 != 1) { + return; + } + CARDFileInfo cardInfo; + s32 ret = CARDOpen(mCardSlot, "gczelda", &cardInfo); + if (ret == CARD_ERROR_READY) { + if (!mDoMemCdRWm_Restore2(&cardInfo)) { + field_0x1660 = 3; + } else { + setCardState(ret); + } + CARDClose(&cardInfo); + } else { + setCardState(ret); + } +} + +void mDoMemCd_Ctrl_c::load2() { + if (OSTryLockMutex(&mMutex)) { + mCommand = CARD_RESTORE2; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } +} + +s32 mDoMemCd_Ctrl_c::LoadSync2() { + s32 ret = 0; + if (OSTryLockMutex(&mMutex)) { + if (field_0x1660 == 3) { + field_0x1660 = 1; + ret = 1; + } else { + ret = 2; + } + OSUnlockMutex(&mMutex); + } + return ret; +} +#endif + /* 8001939C-80019480 .text getStatus__15mDoMemCd_Ctrl_cFUl */ u32 mDoMemCd_Ctrl_c::getStatus(u32) { if (OSTryLockMutex(&mMutex)) { diff --git a/src/m_Do/m_Do_MemCardRWmng.cpp b/src/m_Do/m_Do_MemCardRWmng.cpp index 74eef405a..c03251cc6 100644 --- a/src/m_Do/m_Do_MemCardRWmng.cpp +++ b/src/m_Do/m_Do_MemCardRWmng.cpp @@ -16,6 +16,12 @@ s32 mDoMemCdRWm_Restore(CARDFileInfo*, void*, u32) { /* Nonmatching */ } +#if VERSION == VERSION_PAL +s32 mDoMemCdRWm_Restore2(CARDFileInfo*) { + /* Nonmatching */ +} +#endif + /* 80019F4C-8001A0A8 .text mDoMemCdRWm_BuildHeader__FP22mDoMemCdRWm_HeaderData */ void mDoMemCdRWm_BuildHeader(mDoMemCdRWm_HeaderData*) { /* Nonmatching */