6bd578ccbe
This means that we are now no longer touching files that haven't technically been written to. Some games use timestamp information to automatically highlight the save that was last written to, so this should fix a small but annoying bug where it would highlight the wrong one. Do note that while there is a much simpler check that looks like this: // Remove (== don't flush) all memory card pages that haven't actually changed. for ( auto oldIt = m_oldDataCache.begin(); oldIt != m_oldDataCache.end(); ++oldIt ) { auto newIt = m_cache.find( oldIt->first ); assert( newIt != m_cache.end() ); // if this isn't true something broke somewhere, the two maps should always contain the same pages if ( memcmp( &oldIt->second.raw[0], &newIt->second.raw[0], PageSize ) == 0 ) { m_cache.erase( newIt ); } } m_oldDataCache.clear(); It can fail in edge cases that don't actually seem too unlikely. Imagine a save being deleted, and then a new save from the same game but in a different slot being created quickly afterwards. It seems quite possible that the new save's file data then occupies the exact same pages as the old save's, and since it's from the same game it might be close enough to where a page sized section (juse 0x200 bytes!) matches the data from the old save that previously resided in that location -- which would cause this code to throw away and not flush this data! It's a shame too, since this variant would be a few ms faster as well, but I feel it's better to be safe than sorry here. |
||
---|---|---|
3rdparty | ||
bin | ||
cmake | ||
common | ||
debian-packager | ||
fps2bios | ||
linux_various | ||
locales | ||
nsis | ||
pcsx2 | ||
plugins | ||
tools | ||
.gitignore | ||
CMakeLists.txt | ||
CONTRIBUTING.md | ||
COPYING.GPLv2 | ||
COPYING.GPLv3 | ||
COPYING.LGPLv2.1 | ||
COPYING.LGPLv3 | ||
README.md | ||
build.cmd | ||
build.sh | ||
clean_msvc.cmd | ||
old_plugins_2013.sln | ||
pcsx2_suite_2012.sln | ||
pcsx2_suite_2013.sln | ||
rebuild.sh |
README.md
PCSX2 is an open source Playstation 2 emulator. Its purpose is to mimic the the PS2 hardware, using a combination of MIPS CPU Interpreters, Recompilers and a Virtual Machine which manages hardware states and PS2 system memory.
Project Details
The PCSX2 project has been running for more than ten years. Once able to run only a few public domain demos, recent versions enable many games to work at full speed, including popular titles such as Final Fantasy X or Devil May Cry 3. Visit the PCSX2 homepage to check the latest compatibility status of games (with more than 2000 titles tested), or ask your doubts in the Official forums.
The latest officially released version is 1.2.1 (SVN r5875). Installers and binaries for both Windows and Linux are available from our homepage.
System Requirements
Minimum
- Windows/Linux OS
- CPU: Any that supports SSE2 (Pentium 4 and up, Athlon64 and up)
- GPU: Any that supports Pixel Shader model 2.0, except Nvidia FX series (broken SM2.0, too slow anyway)
- 512MB RAM (note Vista needs at least 2GB to run reliably)
Recommended
- Windows Vista / Windows 7 (32bit or 64bit) with the latest DirectX
- CPU: Intel Core 2 Duo @ 3.2ghz or better
- GPU: 8800gt or better (for Direct3D10 support)
- RAM: 1GB on Linux/Windows XP, 2GB or more on Vista
Note: Because of copyright issues, and the complexity of trying to work around it, you need a BIOS dump extracted from a legitimately owned Playstation 2 console to use the emulator.
Note: PCSX2 mainly takes advantage of 2 CPU cores. As of r4865 PCSX2 can now take advantage of a 3rd core using the MTVU speedhack. This can be a significant speedup on CPUs with 3+ cores, however on GS limited games (or on dual core CPUs) it may be a slowdown.