SIO/MCD: hugely improved memcard swapping + reinsertion

This commit is contained in:
refractionpcsx2 2023-06-23 03:05:36 +01:00
parent f8f54bd892
commit c40e132284
8 changed files with 205 additions and 188 deletions

View File

@ -3673,42 +3673,42 @@ Achievements: %5 (%6)
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="437"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="431"/>
<source>Saving screenshot to &apos;{}&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="449"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="443"/>
<source>Saved screenshot to &apos;{}&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="456"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="450"/>
<source>Failed to save screenshot to &apos;{}&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="527"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="521"/>
<source>Host GPU device encountered an error and was recovered. This may have broken rendering.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="631"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="625"/>
<source>CAS is not available, your graphics driver does not support the required functionality.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="706"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="700"/>
<source>Saving {0} GS dump {1} to &apos;{2}&apos;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="727"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="721"/>
<source>Failed to render/download screenshot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="738"/>
<location filename="../../pcsx2/GS/Renderers/Common/GSRenderer.cpp" line="732"/>
<source>Saved GS dump to &apos;{}&apos;.</source>
<translation type="unfinished"></translation>
</message>
@ -3728,7 +3728,7 @@ Achievements: %5 (%6)
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp" line="2952"/>
<location filename="../../pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp" line="2942"/>
<source>Spin GPU During Readbacks is enabled, but calibrated timestamps are unavailable. This might be really slow.</source>
<translation type="unfinished"></translation>
</message>
@ -6695,272 +6695,272 @@ Swap chain: see Microsoft&apos;s Terminology Portal.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="47"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="48"/>
<source>Target speed set to {:.0f}%.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="65"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="66"/>
<source>Volume: Muted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="70"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="71"/>
<source>Volume: {}%</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="105"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="106"/>
<source>Save slot {} selected (last save: {}).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="111"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="112"/>
<source>Save slot {} selected (no save yet).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="123"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="124"/>
<source>No save state found in slot {}.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="137"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="143"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="148"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="155"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="159"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="164"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="173"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="181"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="189"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="206"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="211"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="216"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="221"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="226"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="231"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="235"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="240"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="245"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="138"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="144"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="149"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="156"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="160"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="165"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="174"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="182"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="190"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="207"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="212"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="217"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="222"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="227"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="232"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="236"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="241"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="246"/>
<source>System</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="137"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="138"/>
<source>Open Pause Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="144"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="145"/>
<source>Open Achievements List</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="149"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="150"/>
<source>Open Leaderboards List</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="155"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="156"/>
<source>Toggle Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="159"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="160"/>
<source>Toggle Fullscreen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="164"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="165"/>
<source>Toggle Frame Limit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="174"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="175"/>
<source>Toggle Turbo / Fast Forward</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="181"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="182"/>
<source>Toggle Slow Motion</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="190"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="191"/>
<source>Turbo / Fast Forward (Hold)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="206"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="207"/>
<source>Increase Target Speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="211"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="212"/>
<source>Decrease Target Speed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="216"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="217"/>
<source>Increase Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="221"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="222"/>
<source>Decrease Volume</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="226"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="227"/>
<source>Toggle Mute</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="231"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="232"/>
<source>Frame Advance</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="235"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="236"/>
<source>Shut Down Virtual Machine</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="240"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="241"/>
<source>Reset Virtual Machine</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="246"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="247"/>
<source>Toggle Input Recording Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="251"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="256"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="261"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="266"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="252"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="257"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="262"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="267"/>
<source>Save States</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="252"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="253"/>
<source>Select Previous Save Slot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="257"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="258"/>
<source>Select Next Save Slot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="262"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="263"/>
<source>Save State To Selected Slot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="267"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="268"/>
<source>Load State From Selected Slot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="282"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="283"/>
<source>Save State To Slot 1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="283"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="284"/>
<source>Load State From Slot 1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="284"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="285"/>
<source>Save State To Slot 2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="285"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="286"/>
<source>Load State From Slot 2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="286"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="287"/>
<source>Save State To Slot 3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="287"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="288"/>
<source>Load State From Slot 3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="288"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="289"/>
<source>Save State To Slot 4</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="289"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="290"/>
<source>Load State From Slot 4</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="290"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="291"/>
<source>Save State To Slot 5</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="291"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="292"/>
<source>Load State From Slot 5</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="292"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="293"/>
<source>Save State To Slot 6</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="293"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="294"/>
<source>Load State From Slot 6</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="294"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="295"/>
<source>Save State To Slot 7</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="295"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="296"/>
<source>Load State From Slot 7</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="296"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="297"/>
<source>Save State To Slot 8</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="297"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="298"/>
<source>Load State From Slot 8</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="298"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="299"/>
<source>Save State To Slot 9</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="299"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="300"/>
<source>Load State From Slot 9</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="300"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="301"/>
<source>Save State To Slot 10</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Hotkeys.cpp" line="301"/>
<location filename="../../pcsx2/Hotkeys.cpp" line="302"/>
<source>Load State From Slot 10</source>
<translation type="unfinished"></translation>
</message>
@ -8324,18 +8324,13 @@ The saves will not be recoverable.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Sio.cpp" line="212"/>
<source>Memory Card in port %d / slot %d reinserted</source>
<location filename="../../pcsx2/Sio.cpp" line="912"/>
<source>Memory card in port {} / slot {} reinserted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Sio.cpp" line="594"/>
<source>Memory Card in port {} / slot {} reinserted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Sio.cpp" line="934"/>
<source>Force ejecting all Memory Cards.</source>
<location filename="../../pcsx2/Sio.cpp" line="938"/>
<source>Force ejecting all Memory Cards. Reinserting in 1 second.</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -10861,207 +10856,207 @@ The URL was: %1</source>
<context>
<name>VMManager</name>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1549"/>
<location filename="../../pcsx2/VMManager.cpp" line="1538"/>
<source>Failed to back up old save state {}.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1572"/>
<location filename="../../pcsx2/VMManager.cpp" line="1561"/>
<source>Failed to save save state: {}.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1589"/>
<location filename="../../pcsx2/VMManager.cpp" line="1578"/>
<source>State saved to slot {}.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1596"/>
<location filename="../../pcsx2/VMManager.cpp" line="1585"/>
<source>Failed to save save state to slot {}.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1683"/>
<location filename="../../pcsx2/VMManager.cpp" line="1672"/>
<source>There is no save state in slot {}.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1696"/>
<location filename="../../pcsx2/VMManager.cpp" line="1685"/>
<source>Loading state from slot {}...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1713"/>
<location filename="../../pcsx2/VMManager.cpp" line="1702"/>
<source>Saving state to slot {}...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1775"/>
<location filename="../../pcsx2/VMManager.cpp" line="1764"/>
<source>Disc removed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1781"/>
<location filename="../../pcsx2/VMManager.cpp" line="1770"/>
<source>Disc changed to &apos;{}&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1788"/>
<location filename="../../pcsx2/VMManager.cpp" line="1777"/>
<source>Failed to open new disc image &apos;{}&apos;. Reverting to old image.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="1796"/>
<location filename="../../pcsx2/VMManager.cpp" line="1785"/>
<source>Failed to switch back to old disc image. Removing disc.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2228"/>
<location filename="../../pcsx2/VMManager.cpp" line="2216"/>
<source>Cheats have been disabled due to achievements hardcore mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2282"/>
<location filename="../../pcsx2/VMManager.cpp" line="2270"/>
<source>Fast CDVD is enabled, this may break games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2286"/>
<location filename="../../pcsx2/VMManager.cpp" line="2274"/>
<source>Cycle rate/skip is not at default, this may crash or make games run too slow.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2291"/>
<location filename="../../pcsx2/VMManager.cpp" line="2279"/>
<source>Audio is using async mix, expect desynchronization in FMVs.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2294"/>
<location filename="../../pcsx2/VMManager.cpp" line="2282"/>
<source>Upscale multiplier is below native, this will break rendering.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2298"/>
<location filename="../../pcsx2/VMManager.cpp" line="2286"/>
<source>Mipmapping is not set to automatic. This may break rendering in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2303"/>
<location filename="../../pcsx2/VMManager.cpp" line="2291"/>
<source>Texture filtering is not set to Bilinear (PS2). This will break rendering in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2309"/>
<location filename="../../pcsx2/VMManager.cpp" line="2297"/>
<source>Trilinear filtering is not set to automatic. This may break rendering in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2315"/>
<location filename="../../pcsx2/VMManager.cpp" line="2303"/>
<source>Blending is below basic, this may break effects in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2320"/>
<location filename="../../pcsx2/VMManager.cpp" line="2308"/>
<source>Hardware Download Mode is not set to Accurate, this may break rendering in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2326"/>
<location filename="../../pcsx2/VMManager.cpp" line="2314"/>
<source>EE FPU Round Mode is not set to default, this may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2332"/>
<location filename="../../pcsx2/VMManager.cpp" line="2320"/>
<source>EE FPU Clamp Mode is not set to default, this may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2338"/>
<location filename="../../pcsx2/VMManager.cpp" line="2326"/>
<source>VU Round Mode is not set to default, this may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2345"/>
<location filename="../../pcsx2/VMManager.cpp" line="2333"/>
<source>VU Clamp Mode is not set to default, this may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2350"/>
<location filename="../../pcsx2/VMManager.cpp" line="2338"/>
<source>Game Fixes are not enabled. Compatibility with some games may be affected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2355"/>
<location filename="../../pcsx2/VMManager.cpp" line="2343"/>
<source>Compatibility Patches are not enabled. Compatibility with some games may be affected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2359"/>
<location filename="../../pcsx2/VMManager.cpp" line="2347"/>
<source>Frame rate for NTSC is not default. This may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2361"/>
<location filename="../../pcsx2/VMManager.cpp" line="2349"/>
<source>Frame rate for PAL is not default. This may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2380"/>
<location filename="../../pcsx2/VMManager.cpp" line="2368"/>
<source>EE Recompiler is not enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2385"/>
<location filename="../../pcsx2/VMManager.cpp" line="2373"/>
<source>VU0 Recompiler is not enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2390"/>
<location filename="../../pcsx2/VMManager.cpp" line="2378"/>
<source>VU1 Recompiler is not enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2395"/>
<location filename="../../pcsx2/VMManager.cpp" line="2383"/>
<source>IOP Recompiler is not enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2400"/>
<location filename="../../pcsx2/VMManager.cpp" line="2388"/>
<source>EE Cache is enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2405"/>
<location filename="../../pcsx2/VMManager.cpp" line="2393"/>
<source>EE Wait Loop Detection is not enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2410"/>
<location filename="../../pcsx2/VMManager.cpp" line="2398"/>
<source>INTC Spin Detection is not enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2415"/>
<location filename="../../pcsx2/VMManager.cpp" line="2403"/>
<source>Instant VU1 is disabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2420"/>
<location filename="../../pcsx2/VMManager.cpp" line="2408"/>
<source>mVU Flag Hack is not enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2425"/>
<location filename="../../pcsx2/VMManager.cpp" line="2413"/>
<source>GPU Palette Conversion is enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2430"/>
<location filename="../../pcsx2/VMManager.cpp" line="2418"/>
<source>Texture Preloading is not Full, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="2435"/>
<location filename="../../pcsx2/VMManager.cpp" line="2423"/>
<source>Estimate texture region is enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>

View File

@ -19,6 +19,7 @@
#include "IopHw.h"
#include "IopDma.h"
#include "VMManager.h"
#include "Sio.h"
#include <cctype>
#include <ctime>
@ -1528,6 +1529,7 @@ void cdvdVsync()
cdvd.RTCcount = 0;
cdvdUpdateTrayState();
AutoEject::CountDownTicks();
cdvd.RTC.second++;
if (cdvd.RTC.second < 60)

View File

@ -24,6 +24,7 @@
#include "MemoryCardFile.h"
#include "MemoryCardFolder.h"
#include "Sio.h"
#include "System.h"
#include "Config.h"
@ -292,14 +293,11 @@ void FileMemoryCard::Open()
cont = true;
}
if (EmuConfig.Mcd[slot].Type != MemoryCardType::File)
{
str = "[is not memcard file]";
if (EmuConfig.Mcd[slot].Type == MemoryCardType::File)
Console.WriteLn(cont ? Color_Gray : Color_Green, fmt::format("McdSlot {} [File]: {}", slot, str));
else
cont = true;
}
Console.WriteLn(cont ? Color_Gray : Color_Green, "McdSlot %u [File]: %.*s", slot,
static_cast<int>(str.size()), str.data());
if (cont)
continue;
@ -660,6 +658,20 @@ void FileMcd_EmuClose()
Mcd::impl.Close();
}
void FileMcd_CancelEject()
{
AutoEject::ClearAll();
}
void FileMcd_Reopen(std::string new_serial)
{
Console.WriteLn("Reopening memory cards...");
FileMcd_EmuClose();
FileMcd_EmuOpen();
sioSetGameSerial(new_serial);
}
s32 FileMcd_IsPresent(uint port, uint slot)
{
const uint combinedSlot = FileMcd_ConvertToSlot(port, slot);
@ -776,20 +788,25 @@ void FileMcd_NextFrame(uint port, uint slot)
}
}
bool FileMcd_ReIndex(uint port, uint slot, const std::string& filter)
int FileMcd_ReIndex(uint port, uint slot, const std::string& filter)
{
const uint combinedSlot = FileMcd_ConvertToSlot(port, slot);
const int combinedSlot = FileMcd_ConvertToSlot(port, slot);
switch (EmuConfig.Mcd[combinedSlot].Type)
{
//case MemoryCardType::File:
// return Mcd::impl.ReIndex( combinedSlot, filter );
// break;
case MemoryCardType::Folder:
return Mcd::implFolder.ReIndex(combinedSlot, EmuConfig.McdFolderAutoManage, filter);
if (!Mcd::implFolder.ReIndex(combinedSlot, EmuConfig.McdFolderAutoManage, filter))
return -1;
break;
default:
return false;
return -1;
break;
}
return combinedSlot;
}
// --------------------------------------------------------------------------------------

View File

@ -47,6 +47,8 @@ extern std::string FileMcd_GetDefaultName(uint slot);
uint FileMcd_ConvertToSlot(uint port, uint slot);
void FileMcd_EmuOpen();
void FileMcd_EmuClose();
void FileMcd_CancelEject();
void FileMcd_Reopen(std::string new_serial);
s32 FileMcd_IsPresent(uint port, uint slot);
void FileMcd_GetSizeInfo(uint port, uint slot, McdSizeInfo* outways);
bool FileMcd_IsPSX(uint port, uint slot);
@ -55,7 +57,7 @@ s32 FileMcd_Save(uint port, uint slot, const u8* src, u32 adr, int size);
s32 FileMcd_EraseBlock(uint port, uint slot, u32 adr);
u64 FileMcd_GetCRC(uint port, uint slot);
void FileMcd_NextFrame(uint port, uint slot);
bool FileMcd_ReIndex(uint port, uint slot, const std::string& filter);
int FileMcd_ReIndex(uint port, uint slot, const std::string& filter);
std::vector<AvailableMcdInfo> FileMcd_GetAvailableCards(bool include_in_use_cards);
std::optional<AvailableMcdInfo> FileMcd_GetCardInfo(const std::string_view& name);

View File

@ -1373,7 +1373,6 @@ Pcsx2Config::Pcsx2Config()
{
Mcd[slot].Enabled = !FileMcd_IsMultitapSlot(slot); // enables main 2 slots
Mcd[slot].Filename = FileMcd_GetDefaultName(slot);
// Folder memory card is autodetected later.
Mcd[slot].Type = MemoryCardType::File;
}

View File

@ -204,15 +204,6 @@ void Sio0::SetTxData(u8 value)
if (mcd->autoEjectTicks)
{
SetRxData(0x00);
mcd->autoEjectTicks--;
if (mcd->autoEjectTicks == 0)
{
Host::AddKeyedOSDMessage(fmt::format("AutoEjectSlotClear{}{}", port, slot),
fmt::format(TRANSLATE_SV("MemoryCard", "Memory Card in port %d / slot %d reinserted"),
port + 1, slot + 1),
Host::OSD_INFO_DURATION);
}
return;
}
@ -585,16 +576,6 @@ void Sio2::Memcard()
fifoOut.push_back(0x00);
}
mcd->autoEjectTicks--;
if (mcd->autoEjectTicks == 0)
{
Host::AddKeyedOSDMessage(fmt::format("AutoEjectSlotClear{}{}", port, slot),
fmt::format(
TRANSLATE_SV("MemoryCard", "Memory Card in port {} / slot {} reinserted."), port + 1, slot + 1),
Host::OSD_INFO_DURATION);
}
return;
}
@ -833,7 +814,8 @@ void sioNextFrame() {
void sioSetGameSerial( const std::string& serial ) {
for ( uint port = 0; port < 2; ++port ) {
for ( uint slot = 0; slot < 4; ++slot ) {
if ( mcds[port][slot].ReIndex( serial ) ) {
if ( int index = mcds[port][slot].ReIndex( serial ) >= 0 ) {
Console.WriteLn("Ejecting Memory Card %u (port %u slot %u) due to source change. Reinsert in 1 second.", index, port, slot);
AutoEject::Set( port, slot );
}
}
@ -915,11 +897,33 @@ bool sioPortAndSlotIsMultitap(u32 port, u32 slot)
return (slot != 0);
}
void AutoEject::CountDownTicks()
{
bool reinserted = false;
for (size_t port = 0; port < SIO::PORTS; port++)
{
for (size_t slot = 0; slot < SIO::SLOTS; slot++)
{
if (mcds[port][slot].autoEjectTicks > 0)
{
if (--mcds[port][slot].autoEjectTicks == 0)
{
Host::AddKeyedOSDMessage(fmt::format("AutoEjectSlotClear{}{}", port, slot),
fmt::format(TRANSLATE_SV("MemoryCard", "Memory card in port {} / slot {} reinserted"),
port + 1, slot + 1),
Host::OSD_INFO_DURATION);
}
}
}
}
}
void AutoEject::Set(size_t port, size_t slot)
{
if (EmuConfig.McdEnableEjection)
if (EmuConfig.McdEnableEjection && mcds[port][slot].autoEjectTicks == 0)
{
mcds[port][slot].autoEjectTicks = 60;
mcds[port][slot].autoEjectTicks = 1; // 1 second is enough.
mcds[port][slot].term = 0x55; // Reset terminator to default (0x55), forces the PS2 to recheck the memcard.
}
}
@ -931,7 +935,7 @@ void AutoEject::Clear(size_t port, size_t slot)
void AutoEject::SetAll()
{
Host::AddIconOSDMessage("AutoEjectAllSet", ICON_FA_SD_CARD,
TRANSLATE_SV("MemoryCard", "Force ejecting all Memory Cards."), Host::OSD_INFO_DURATION);
TRANSLATE_SV("MemoryCard", "Force ejecting all Memory Cards. Reinserting in 1 second."), Host::OSD_INFO_DURATION);
for (size_t port = 0; port < SIO::PORTS; port++)
{

View File

@ -99,7 +99,7 @@ struct _mcd
FileMcd_NextFrame( port, slot );
}
bool ReIndex(const std::string& filter) {
int ReIndex(const std::string& filter) {
return FileMcd_ReIndex(port, slot, filter);
}
};
@ -243,6 +243,7 @@ extern void sioSetGameSerial(const std::string& serial);
namespace AutoEject
{
extern void CountDownTicks();
extern void Set(size_t port, size_t slot);
extern void Clear(size_t port, size_t slot);
extern void SetAll();

View File

@ -627,9 +627,16 @@ void VMManager::Internal::UpdateEmuFolders()
if (EmuFolders::MemoryCards != old_memcards_directory)
{
FileMcd_EmuClose();
FileMcd_EmuOpen();
std::string memcardFilters = "";
if (const GameDatabaseSchema::GameEntry* game = GameDatabase::findGame(s_disc_serial))
{
memcardFilters = game->memcardFiltersAsString();
}
AutoEject::SetAll();
if(!GSDumpReplayer::IsReplayingDump())
FileMcd_Reopen(memcardFilters.empty() ? s_disc_serial : memcardFilters);
}
if (EmuFolders::Textures != old_textures_directory)
@ -882,13 +889,6 @@ void VMManager::UpdateDiscDetails(bool booting)
Console.WriteLn(Color_StrongGreen, fmt::format(" Version: {}", s_disc_version));
Console.WriteLn(Color_StrongGreen, fmt::format(" CRC: {:08X}", s_disc_crc));
sioSetGameSerial(memcardFilters.empty() ? s_disc_serial : memcardFilters);
// If we don't reset the timer here, when using folder memcards the reindex will cause an eject,
// which a bunch of games don't like since they access the memory card on boot.
if (booting)
AutoEject::ClearAll();
UpdateGameSettingsLayer();
ApplySettings();
@ -903,6 +903,9 @@ void VMManager::UpdateDiscDetails(bool booting)
Achievements::GameChanged(s_disc_crc, s_current_crc);
ReloadPINE();
UpdateDiscordPresence(Achievements::GetRichPresenceString());
if (!GSDumpReplayer::IsReplayingDump())
FileMcd_Reopen(memcardFilters.empty() ? s_disc_serial : memcardFilters);
}
void VMManager::ClearDiscDetails()
@ -1145,17 +1148,11 @@ bool VMManager::Initialize(VMBootParameters boot_params)
}
ScopedGuard close_cdvd(&DoCDVDclose);
// Must be before updating serial because of folder memcards.
if (!GSDumpReplayer::IsReplayingDump())
{
Console.WriteLn("Opening Memory cards...");
FileMcd_EmuOpen();
}
ScopedGuard close_memcards(&FileMcd_EmuClose);
// Figure out which game we're running! This also loads game settings.
UpdateDiscDetails(true);
ScopedGuard close_memcards(&FileMcd_EmuClose);
// Read fast boot setting late so it can be overridden per-game.
// ELFs must be fast booted, and GS dumps are never fast booted.
s_fast_boot_requested =
@ -1958,7 +1955,9 @@ void VMManager::Internal::EntryPointCompilingOnCPUThread()
HandleELFChange(true);
Patch::ApplyLoadedPatches(Patch::PPT_ONCE_ON_LOAD);
// If the config changes at this point, it's a reset, so the game doesn't currently know about the memcard
// so there's no need to leave the eject running.
FileMcd_CancelEject();
// Toss all the recs, we're going to be executing new code.
SysClearExecutionCache();
}
@ -2113,9 +2112,6 @@ void VMManager::CheckForMemoryCardConfigChanges(const Pcsx2Config& old_config)
Console.WriteLn("Updating memory card configuration");
FileMcd_EmuClose();
FileMcd_EmuOpen();
// force card eject when files change
for (u32 port = 0; port < 2; port++)
{
@ -2130,7 +2126,6 @@ void VMManager::CheckForMemoryCardConfigChanges(const Pcsx2Config& old_config)
}
}
}
// force reindexing, mc folder code is janky
std::string sioSerial;
{
@ -2140,7 +2135,9 @@ void VMManager::CheckForMemoryCardConfigChanges(const Pcsx2Config& old_config)
if (sioSerial.empty())
sioSerial = s_disc_serial;
}
sioSetGameSerial(sioSerial);
if (!GSDumpReplayer::IsReplayingDump())
FileMcd_Reopen(sioSerial);
}
void VMManager::CheckForMiscConfigChanges(const Pcsx2Config& old_config)