From 7b60dc8f24c03656ca69d51cacec84832df9e227 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Tue, 29 Sep 2026 21:38:55 -0600 Subject: [PATCH] Fix save issue when switching game mode after reset --- src/m_Do/m_Do_MemCard.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/m_Do/m_Do_MemCard.cpp b/src/m_Do/m_Do_MemCard.cpp index 8f821a9187..4eb0b641e4 100644 --- a/src/m_Do/m_Do_MemCard.cpp +++ b/src/m_Do/m_Do_MemCard.cpp @@ -98,6 +98,7 @@ void mDoMemCd_Ctrl_c::ThdInit() { #if TARGET_PC mCardCommand = COMM_ATTACH_e; + mReattachPending = false; mInitialized = true; #else mCardCommand = COMM_NONE_e; @@ -177,7 +178,17 @@ void mDoMemCd_Ctrl_c::main() { } OSLockMutex(&mMutex); +#if TARGET_PC + if (mReattachPending) { + mReattachPending = false; + mCardState = CARD_STATE_13_e; + mCardCommand = COMM_ATTACH_e; + } else { + mCardCommand = COMM_NONE_e; + } +#else mCardCommand = COMM_NONE_e; +#endif OSUnlockMutex(&mMutex); } while (true); } @@ -940,8 +951,19 @@ void mDoMemCd_Ctrl_c::setFileName(const std::string& fileName) { mFileName = fileName; } else { OSLockMutex(&mMutex); + if (mFileName == fileName) { + OSUnlockMutex(&mMutex); + return; + } mFileName = fileName; + if (mCardCommand == COMM_NONE_e) { + mCardState = CARD_STATE_13_e; + mCardCommand = COMM_ATTACH_e; + } else { + mReattachPending = true; + } OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); } }