Introducing PCSX2 2.0!
Present Day, Present Time
It has been over four years since the last stable PCSX2 revision released. A lot of things can happen in four years, but we could not have predicted just how much progress would be made in that time. PCSX2 has received over 6000 changes, passed 100 million downloads, and celebrated its 20th aniversary! There are lots of design changes, technical discoveries, and more to discuss. Let's jump right in and get started with the highlights from four years of development.
The Elephant in the Room: PCSX2 Enters Its Qt Era
You might know the name wxWidgets from its time as PCSX2's choice of GUI, or from other emulators like Dolphin which used it before migrating to Qt. For a long time, it served us sufficiently well, but its age and implementation began to show rather quickly. Threading issues resulted in deadlocks and race conditions, because it was not properly separated from the emulation core. The technical debt started high and only got worse as the project tried to keep moving forward.
But now, wxWidgets is gone. No more desktop experience reminding you of what Windows desktop apps looked like in 2006. Qt brings with it a slick appearance, more efficient UI backend, and provided the perfect opportunity to redo all our menus and widgets. The addition of themes allows you to personalize your PCSX2 to your liking. The result is by far our best user experience to date. Massive thanks to Stenzek for bringing his Qt expertise from DuckStation and leading the charge on PCSX2's new Qt design!
Saying Goodbye to Plugins
We had a good run with plugins, but their time has come. A relic of a simpler time, plugins were once hailed as the solution where there was no single great solution to the challenges of emulation. Don't like one plugin's design? Use another. One plugin breaks a game? Use another. But in the modern era where accuracy is paramount and user experience is of ever-increasing importance, their limitations, fragmentation of the development space, and antiquated codebases have shown their age. It is time to say goodbye, and GovanifY spearheaded this major piece of development.
A difficult decision had to be made: how do we get rid of plugins, but keep feature parity with what they once had? Getting rid of plugins fixes a number of issues, but it would bring up many more if features or accuracy were lost. A middle ground was reached: plugin authors were contacted, and their was code assimilated into the core PCSX2 project. This meant the program could be built out of a single project file; no longer were plugins compiled separately and dynamically linked! You will find that there are a lot of similarities but also a lot of differences in how PCSX2's settings work now. Many common terms and options remain, while others have been upgraded, changed, or removed to keep up with the times.
Simplifying Configuration With Automatic Game Fixes
A major priority for the team has been a focus on automation. How many things are there for users to deal with that they really shouldn't need to? The answer was... A lot. Really, a lot. You might recall our old interface had graphics fixes buried in the graphics plugin. Or perhaps the CPU modes which were handled in their own tabs. Speed hacks had another tab. More graphics settings were on their own – somehow not connected to the plugin. Game fixes which were somehow supposed to be different from everything else... We could keep going. It was confusing.
But then we had a thought: since we are already shipping a database file with information on games, why not include more information about what settings a game needs to run correctly? And so PCSX2's new "game index" was made a reality. It contains a complete list of all known games, and with this index, we now ship pre-configured fixes to ensure your games will automatically run smoothly. You no longer need to remember to enable those graphics fixes every time you switch games - PCSX2 will already know what that game needs and do it for you!
Goodbye Goldfish Brain, Hello Per-Game Settings
A long-standing issue from wxWidgets was the burden of changing your settings every time you switched games. Even though automated game fixes have mostly solved this problem on their own, there remain any personal touches you might make. Say you want to run different games at different resolutions; that's still something you have to change every time you switch games, right? Not any longer!
PCSX2 now includes per-game settings which are detached from your global settings. The per-game settings will always default to inherit from your global settings, but they allow you to explicitly set a value for one game in particular. Now if you want to run a game at a higher resolution than the rest or use specific memory cards for different games, you can set it once in your per-game settings and forget about it.
The Final Frontier of Compatibility
Game compatibility has always been an odd duck in the PS2 space. For the most part, there aren't nasty surprises keeping games from running, and the number of problematic games relative to those which are fine is extremely low. However, those few problem games continue to be incredibly stubborn. Right now, the list of games which aren't playable has been whittled down to a small handful with servers which have gone offline, highly obscure peripherals that no one has replicated in emulation yet, bizarre FPU math causing games to break themselves, or over-engineered engines which would bring even the best PC hardware to a literal crawl if it were emulated correctly.
All that remains of the 'Nothing' category is a single game which refuses to boot on Windows. Boot a game in PCSX2 besides that one, and it will at least get you into a menu. Provided no one uncovers any more obscure PS2 games that have been lost to time, it is safe to say PCSX2 has entered the final frontier of compatibility. The challenge now is to get the last few games up and running.
Big Picture Mode: Coming Soon to a TV Near You!
Couch gamers have been making themselves increasingly known in the emulation space, embracing the thrill and enjoyment of their classic games with the convenience and simplicity of a controller, couch, and a TV comfortably at the other end of the room. PCSX2 classically has been a desktop application, and it sure handled like one. While those roots haven't been abandoned, what we've done is add the option to pick what experience you'd like to have.
PCSX2 now has a big picture mode! Want to use your controller to navigate PCSX2's menus on the big screen? Just hit the big picture button, or skip the main interface entirely and start PCSX2 directly into big picture mode with a single extra parameter in your shortcut. Using a brand new ImGui implementation courtesy of Stenzek, you can boot your games without getting up from the couch, and all critical PCSX2 menus now have a Big Picture accessible option. There are other parameters too, for things like fullscreen or closing PCSX2 when you shut down your game. See our documentation for a comprehensive list of supported CLI arguments you can add to your shortcuts or launchers.
A Fresh Approach to Translation
Translation historically has been cumbersome and time-consuming. One of the limits of wxWidgets used to be a rather clunky translation system where PO files had to be manually updated and managed. We also needed dedicated resources to maintain individual languages. This ended up being a significant time delay for our 1.6.0 release. That all changes going out from here!
PCSX2 is now on Crowdin, and our build system is set to automatically update translations as they are made. Anyone can contribute to translations, and the best contributions – as voted on by the community – will be what you get in the emulator. If you see something in your language that isn't translated or doesn't look right, consider going over to our Crowdin page and making some suggestions!
PCSX2 Joins GitHub Sponsors
We made the move to set ourselves up on GitHub Sponsors! PCSX2's GitHub Sponsors page is available for anyone who wants to help us keep the lights on with donations. All contributions are greatly appreciated and go towards keeping our servers for the website and forums nice and healthy.
The... Mastodon in the Room?
For over 14 years, PCSX2 has retained a presence on the microblogging platform Twitter, and that continues to this day. In addition, however, PCSX2 joins the fediverse as it creates a brand-new Mastodon account where we'll be giving you tips and tricks, regular updates, and even juicy sneak peeks. We hope to see you over there.
The Requirements Update
As times change, so do we. Our priority as a project is always to improve, and unfortunately that means saying goodbye to some old tools and tech that we've come to love (or hate) over the years. This time is no different.
Windows Minimum Version
With this release, Windows 7, 8, and 8.1 support are gone. The new minimum Windows version is Windows 10 build 1809. We dropped support for these operating systems at the same time as Microsoft. PCSX2's functionality on these operating systems has since ceased as modern features such as fastmem, covered later below, are added to propel PCSX2 into the future.
The Rumors Were True, MacOS Is Back!
For a while, Mac support had disappeared into the void, and now it has returned in full capacity! TellowKrinkle has brought PCSX2 to macOS, and you can now enjoy feature parity with Windows and Linux. PCSX2 is still recompiling to x86-64 and will work natively on older Intel Macs and with Rosetta on newer Apple Silicon Macs. The minimum version of macOS required is Big Sur (version 11.0).
Introducing PCSX2 Patches! Kind Of.
With the new era comes a partial reconstruction of how cheats and patches work. The same pnach system remains, but with some alterations and additions to make it simpler to use.
The Pnach 2.0 Format Has Arrived
Pnach 2.0 is an incremental update to the patching system which introduces INI-like labels to pnach files. The addition of these labels allows for significant quality-of-life improvements. Each individual cheat or patch can now be labelled, and each labelled cheat or patch will appear as its own item in the PCSX2 UI! This lets you then enable or disable individual cheats or patches from your per-game settings without ever having to touch the pnach files.
The PCSX2 Patches Repository
The PCSX2 team now has a separate repository set up for collecting and tracking version history of patches. Any patches present in this repository will be shipped with the emulator. As of now, we generally accept widescreen, no-interlacing, and 60 FPS patches. We have also included a small selection of well-tested, hand-picked quality-of-life improvements for especially troublesome games.
Please note that we do not create or fix patches; we operate this repository as curators, and the success of patches depends on the patch authors to reliably test their work. Like our game index, this repository is a constant work in progress and will need community feedback to succeed!
The Core Exploded! Wait, No It Didn't!
PCSX2's emulation core has been a major focus with a lot of work going in to reduce inconsistency, improve stability, and reel in a bunch of speed improvements.
Introducing Fastmem!
Stenzek introduced "Fastmem", shorthand for "Fast Memory Access", to PCSX2's EE and VU recompilers to accelerate host memory access. This produces significant speed increases with no penalties to accuracy – not even any side effects from games doing unusual memory operations! It was quite literally free performance. No configuration changes necessary, just lean back and enjoy.
Tying Up Loose Ends: New Recompiler Instructions
A few scarce CPU instructions for the Emotion Engine finally got recompiler support! Previously thought to be unimportant, these instructions were found to create a noticeable performance hit for certain games which abused them in unusual ways. With proper recompiler support, these instructions no longer incur huge performance penalties from dropping down into the interpreter.
EE and VU Recompiler Optimization
Stenzek brought us some of his expertise from DuckStation and helped tidy up some instructions which were not running efficiently. Results can vary depending on how frequently these instructions were used by games.
Who Needed Infinity and NaN Anyways? Gran Turismo 4 Does!
If you've occupied the same space as a PS2 emulator developer, you might have heard them using floating point math terms in place of swear words. One of the benefits of that unbridled rage is that they might go and fix some long-standing floating point math errors.
The kind which caused issues like Gran Turismo 4 needing different clamping modes depending on what events you were doing. Yep, that's right Gran Turismo friends, rest easy now as you no longer need to touch your clamping settings! It's automatically handled for you now.
The Bane of Developers: Graphics Improvements
The graphics scene has been flipped on its head. Starting with kojin cracking the case on some of the GS backend's mysteries, the torch was passed on to Refraction and Stenzek, and kept aflame by the efforts of our testers along the way. Many games which looked to be broken beyond belief suddenly have a fresh coat of paint.
A New Challenger: Vulkan Enters the Fight!
The newest, feature-complete challenger to the graphics world, Vulkan is our long-term solution to the evolving challenges of converting PS2 graphics into tasks understood by modern computers. Vulkan combines the feature completeness of OpenGL with a fast backend to give you the best experience possible.
But Perhaps an Automated Solution Would Be Better!
The GPU world has become increasingly confusing. To keep performance up and accuracy with it, PCSX2 calls upon some advanced GPU features which, while within specification, aren't exactly handled well by all GPU vendors. Intel iGPUs crash randomly with Vulkan or OpenGL. AMD still has OpenGL performance issues. Direct3D still can't draw the majority of blending effects because of its limited feature set. It's become a bit of a mess, and users shouldn't have to deal with that.
That's where PCSX2's Automatic renderer comes in. Our testers have gone through the pain of figuring out what renderer works for what GPU architecture, and PCSX2 is now set up to pick the best option for you. Priority goes first to stability, then accuracy. Trust the Automatic renderer, and it will not lead you astray.
Blending Gets a Face Lift
As if using floating point math terms as swears wasn't enough, blending effects haunt graphics developers with nightmares that make even the best horror films look like a joke. Blending is a special technique seen in PS2 games generally used to blend two layers of graphics together. If there's a really cool looking light, bloom, shadow, transparency, reflection, or overlay in your game, there's a fair chance blends are making that happen.
Blending performance overall has been substantially improved and is a major reason for overall graphics performance improvements. Three major techniques are used in PC graphics to help replicate blends: barriers, render passes, and readbacks. These have received a lot more attention than usual, because too many of these means performance begins to fall off a cliff. These counts are down across the board, meaning more frames for you. Plus, now these statistics are viewable directly in our new and revamped on-screen display (OSD)!
Historically, some games may need higher blending accuracy than basic to emulate certain graphical effects, which can absolutely tank the performance – especially on older GPUs. That is no longer the case as basic blending should cover a good chunk of it across all renderers!
Here are some benchmarks in a few selected games:
Ghostbusting with Native Scaling
A long-standing issue with upscaling games has been with misaligned bloom, or "ghosting". In some games, this ghosting becomes so bad that it renders the game nauseating to play. Created by Refraction and refined by Stenzek, native scaling is a new option which we automatically apply to games that need it. This clever trick attempts to detect a game's efforts to downscale the picture in order to do post-processing bloom effects. These effects were intended to be done at native resolution and tend to break down when upscaling.
In short, native scaling unbreaks the bloom when upscaling. Other automatically applied tools such as new, more sophisticated half-pixel offset modes mean that hundreds of games are now more playable than ever when upscaled.
Everybody's Shufflin'
Blending isn't the only star of the show. Shuffles are another advanced graphics technique used by PS2 games to exploit the memory layout of the GS and perform crazy effects within its limited space. A lot of optimizations went into these to keep them working nicely with blends, and along the way this fixed some graphics bugs and brought a lot of performance with it too.
Video Capture With FFMPEG
You might remember if you ever tried to capture video with PCSX2's built in capture tools that it was clunky at best. All of that is gone now... And replaced with a shiny new implementation using FFMPEG! You can now enjoy modern file formats and encodings, including the highly anticipated AV1 (hardware support permitting, of course).
Due to licensing restrictions, FFMPEG libraries cannot be distributed directly with PCSX2. You can find our FFMPEG bundle in our dependencies repository.
A Coat of Paint: Texture Replacements!
A major limitation to upscaling is that, while you can make a high-resolution framebuffer to get super smooth edges, your source textures can't magically have detail restored to them. Texture replacement is the solution; yank out those low-resolution textures and replace them with your own!
PCSX2 now supports texture replacements! You can dump textures from any game, edit them, and load them back. Not interested in doing it yourself? Have a look around and see if anyone's made a pack for your game!
Here is Crash Twinsanity for comparison (with texture replacements applied):
That said, we would like to be serious for a moment and set some ground rules for these.
Texture pack users: The PCSX2 community does not provide support for texture packs or allow sharing packs on any PCSX2 sites. This includes our forums, Discord, GitHub, etc. Issues with texture packs should be sent to the creators of those packs.
Texture pack creators: Due to the design of the PS2 GS and how many games use it, there are some textures which will not be replaceable, as they generate new hashes every time they are loaded. This cannot be worked around, this cannot be fixed, this is the PS2 GS working as intended. This is a side effect of the GS having no restrictions, or really any standard API at all. It is possible these hashes will continue to change as emulation gets more accurate, so be prepared to update your packs as PCSX2 continues to change. We are glad to answer any technical questions about what may have changed, but we cannot assist in fixing your packs.
Graphics Honorable Mentions
Among the pile of graphics improvements, some games deserve shout-outs because they have been problematic for so long. Some are more interesting than others, some more popular than others. See if anything stands out to you!
Burnout
The Burnout community joked about putting anime characters in the sky to get the PCSX2 team to fix the game. We will tell you correlation doesn't equal causation, but ultimately it's up to you whether you trust us on that one! That said, there's no more black sky in Burnout games, so you can enjoy hues of blue again.
Ratchet and Clank
These games were relatively solid considering how temperamental they can be. However, one pesky remnant was the pause menu background, as well as the main menu background some of the later games, only rendering correctly in the top left corner. This is resolved, so you can now properly see the background in all the games!
Destroy All Humans!
This game was a complete fever dream and really just not working correctly at all. Thanks to some serious work by Stenzek and Refraction, it is now actually playable without software rendering! Some oddities do remain, but it is quite manageable now compared to where it began.
Ace Combat
Everyone had their own way of fixing this game, and then it turned out software rendering was the only solution that worked. No more! The black plane and lighting issues are resolved, and hardware renderers are all capable of running these games now.
Need for Speed
Remember how these games just slowed to a crawl for no good reason? Turns out blending was the reason! A lot of work has gone into optimizing blends, shuffles, clears – all the special effects that made PS2 games look great. And because of that, we now get a lovely, accurate, and fast way to play Need for Speed games. All those shadows, lights, and reflections should look nice and crisp now without taking too many frames away.
The Sound of Everything but Silence
Sound has been a point of continuous improvement over the last few years. Little details seem to keep popping up with big effects on how sound emulation works. There never was too much fanfare about sound, and we generally noticed that no one really seemed to care that much. That is, until we realized exactly how off things really were. Our thanks go to Ziemas for overhauling sound as well as most of the improvements to how your games now sound!
Less Attack, More Sustain!
A tweaked ADSR envelope helps prevent hangs and makes your games sound better. You heard that right: games can hang if you don't handle their ADSR envelopes right! You might not be able to hear too much difference, but you might catch a little smoother and less abrupt of a stop on sequenced sounds now.
Fresh, Buttery Smooth Interpolation!
PCSX2 has always had a pile of interpolation options for sound. Historically, this was to let users squeeze every bit of power out of their PC by sacrificing sound quality. In modern times, this has become negligible if not pointless, and emphasis has switched almost fully to making things sound the best they can. Older interpolation methods generated harsh peaks and valleys in the waveforms they output. The new Gaussian mode is buttery smooth in comparison and was validated against actual PS2 audio. The audio levels are the same!
Your Ears Can Relax Now!
You might also notice your ears find things to be a bit quieter. Quieter, but also more pleasant! Older SPU plugins were cranking the output higher than it needed to, and this resulted in overall louder audio that could even cause clipping. Audio output levels have now been lowered and should match what a real PS2 would put out.
The New Era of Controller Mapping
A particular weakness of PCSX2 used to be the fragmentation of controller code across operating systems. Windows and Linux used different plugins, and these plugins handled things quite differently. LilyPad only supported XInput and DInput. OnePad used SDL and a database file to store static, unchangeable mappings. Something had to change, and with Qt came the perfect opportunity to bring new life to controller setup.
The New Input Options
PCSX2 now has a cross-platform input system that still offers multiple options where available. SDL services Windows, Mac, and Linux and is an all-in-one solution supporting most controllers with little to no effort on your part. For compatibility with other controllers on Windows, XInput and DInput remain as options.
Introducing Automatic Mapping
With the introduction of SDL and Qt came the opportunity to add automatic controller mapping. What does this mean? For anyone using SDL or XInput, you're just two button clicks away from mapping your controller. Simply click the button, then select your controller from the list. Done!
Achievement Unlocked!
Do you like hunting for achievements? Well you're in luck as PCSX2 now supports RetroAchievements (also known as Rcheevos)!
RetroAchievements is a community which brings modern achievements to games which were released before the concept existed. This community-driven feature supports more than 500 games so far as of the writing of this blog.
PINE Isn't a Tree, It's a Protocol!
Introduced by GovanifY, PINE is a protocol we adopted for networked software to access PCSX2. If you've ever wanted to have external software be able to probe PS2 memory, write into it, or even command savestate loads or saves, it's your lucky day. PINE opens the door to automation like never before and gives developers the opportunity to make companion apps for PCSX2. Apps like KAMI have already been made to add native mouse support to games, and we can't wait to see what else people come up with!
Debugging Just Got Less Buggy
The wxWidgets PCSX2 debugger might have been the "Old Yeller" of the project. Abandoned. Then run over with a truck. And for good measure, set on fire. So it's no surprise then that fobes, in his maddening quest to explore the world of PS2 homebrew, took it personally and began the quest to replace it.
It started as a fresh coat of paint. Paint turned into more register views. More register views turned into more breakpoint features. More breakpoint features turned into memory searches. To top it all off, those of you interested in the lesser of the two main CPUs in the PS2, the IOP, will be pleased to find native support for exported function symbols in the debugger. The PCSX2 debugger is now a wonderfully rich companion for anyone trying to debug PS2 games in real time.
All Aboard the Compression Train
Compression started becoming a critical component of emulation when emulators for the PS1 and other disc-based consoles began to pop up. The rapid growth in size relative to PC storage space at the time meant solutions had to be found to squeeze every bit of size out of games. Over the years compression methods have only improved, and PCSX2 is proud to introduce support for two popular compression methods!
The Long-Awaited Arrival of CHD
Support for CHD has arrived! For anyone unaware, CHD is a compression format similar to CSO in performance. Unlike CSO which is specifically designed for the DVD-based ISO format, CHD can operate on both the DVD-based ISO format and the CD-based BIN/CUE format. You can compress your entire library with CHD, or pick and choose depending on which format works best for you. Refraction has made a Windows script that can compress to or extract from CHD and CSO. If you have a lot of games you wish to compress, here are some scripts to help speed up the process.
Introducing ZSO: A Cross Platform Compression Option
Those who use OPL on their PS2 might be familiar with ZSO. It has become a bit of a hit lately with OPL's recent experimental support, and now you can use it on PCSX2! For those who want to only keep one copy of their games and have them compressed, ZSO is a great option because you can now use them both for OPL and PCSX2.
A Wild Automatic Updater Has Appeared!
A long-standing pain point of PCSX2's wxWidgets era was that every update meant extracting a new archive file. Then you would have to move your saves, settings, and other files around; this led to lots of confusion and problems with all the files moving around. With the introduction of Qt, PCSX2 has also introduced an automatic updater! The updater will let you know when a new PCSX2 version is available and let you download and install it with the click of a button.
Looking Towards the Future
It has been quite the journey getting to this point, and we all still have plenty more we want to see done. So much of this wouldn't be possible without your support, and we hope to see you around. If you ever need help, are looking for ways to get involved, or just want a place to talk all things PS2 and PCSX2, consider joining our Discord. Special thanks goes to our hardworking team of testers, codebase contributors, translators, documentation authors, community moderators, and everyone else whose passion makes this project possible. We hope you enjoy the latest we have to offer for PCSX2!
— The PCSX2 Team