From 547b2fc9e822d628cb9eac48d4982dd5a208abdf Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Mon, 6 Jun 2022 22:48:23 +1000 Subject: [PATCH] VMManager: Cycle/autoeject memory cards when files change Hopefully should fix card changes not getting picked up in some games. --- pcsx2/Sio.h | 1 + pcsx2/VMManager.cpp | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/pcsx2/Sio.h b/pcsx2/Sio.h index afcb851b93..171af30741 100644 --- a/pcsx2/Sio.h +++ b/pcsx2/Sio.h @@ -121,6 +121,7 @@ extern void sioWrite8(u8 value); extern void sioWriteCtrl16(u16 value); extern void sioInterrupt(); extern void sioInterruptR(); +extern void SetForceMcdEjectTimeoutNow(uint port, uint slot); extern void SetForceMcdEjectTimeoutNow(); extern void ClearMcdEjectTimeoutNow(); extern void sioStatRead(); diff --git a/pcsx2/VMManager.cpp b/pcsx2/VMManager.cpp index 07f41a3a98..7c348304d8 100644 --- a/pcsx2/VMManager.cpp +++ b/pcsx2/VMManager.cpp @@ -1535,6 +1535,21 @@ void VMManager::CheckForMemoryCardConfigChanges(const Pcsx2Config& old_config) FileMcd_EmuClose(); FileMcd_EmuOpen(); + // force card eject when files change + for (u32 port = 0; port < 2; port++) + { + for (u32 slot = 0; slot < 4; slot++) + { + const uint index = FileMcd_ConvertToSlot(port, slot); + if (EmuConfig.Mcd[index].Enabled != old_config.Mcd[index].Enabled || + EmuConfig.Mcd[index].Filename != old_config.Mcd[index].Filename) + { + Console.WriteLn("Replugging memory card %u (port %u slot %u) due to source change", index, port, slot); + SetForceMcdEjectTimeoutNow(port, slot); + } + } + } + // force reindexing, mc folder code is janky std::string sioSerial; {