PSX (Playstation 1) Emulation With PCSX Howto
There is already a howto for doing PSX emulation with ePSXe posted here, however my howto may be more useful to you for the following reasons:
- PCSX is generally a more compatible emulator than ePSXe. (This is at the expense of speed. PCSX is slower than ePSXe. However, most of us have computers more than fast enough for both emulators.)
- PCSX has more controller configurability as it has an input plugin system whereas ePSXe is restricted to its built in controller config. (This does, however, add complexity to PCSX whereas ePSXe is simpler.)
- PCSX is open source software, whereas ePSXe is not.
In the end they are both excellent emulators and we are lucky to have two great ones available to us in the Linux world. The choice is purely a matter of preference, and I prefer PCSX, so my guide is about PCSX!**
Into the thick of things...
My guide presumes the following:
- You are running Ubuntu Linux. (My guide reportedly works in Debian as well.)
- You have an NVIDIA card with their proprietary binary drivers installed. Sorry, ATI people. I can't help you. Anyone want to report success/failure or special configs specific for ATI people? I'll add it to the guide!
The easy way, download kethipcsx, my preconfigured PCSX package
- The easy way to get up and running fast is to download my custom PCSX build designed for easy PCSX deployments on Linux systems. It contains PCSX 1.5 and every known Linux input, gpu, and spu plugin is properly installed. I compiled omnijoy for you, and I included my hidden config file patch. This package should contain everything you need to play PSX games in Linux. All you need to do is supply a BIOS image (don't ask me for one, Google is your friend...) and pick which plugins you want to use, then load a game! Download it here.
Screw you and your preconfigured package! I want to do it myself! (Skip this section if you're just using my package.)
Okay, here's what you need to know.
- You will need a copy of PCSX which you can get here.
- You will need Linux input, gpu, and spu plugins which you can get from this website (among others).
- When you're setting up your plugins, keep in mind there is a special thing you must do to get Pete's plugins to work correctly. You must place the plugins (the .so files) in the plugins directory, but you must place the binary configuration programs in the root emulator directory, with the emulator binary. Otherwise, the emulator cannot configure the plugins.
- There is a special thing you must do to get the padJoy plugin to work too. Like Pete's plugins, padJoy's config program needs to be moved somewhere (else) special. You must create a /cfg directory in your emulator's root folder. Place the plugin in the emulator's plugins folder, but place the binary configuration program in the /cfg directory you created. If you do not do this, the plugin will not work. (This is all true for Omnipad as well, should you compile it.)
- PCSX by default creates a configuration file in your home directory representing your settings named Pcsx.cfg. This annoyed the **** out of me, because every other UNIX program under the sun makes that a hidden file, so you never have to bloody see it there constantly. Luckily though, PCSX is open source. If you hate unhidden config files as much as I do, you can download the PCSX source and replace the LnxMain.c with my hacked version of LnxMain.c in PcsxSrc-1.5/Linux. My hack changes the config file from Pcsx.cfg to .pcsx.cfg. Once you have replaced the LnxMain.c, simply cd /path/to/PcsxSrc-1.5/Linux then ./configure then make. You should get no errors doing that. If you do, you don't have gcc, libgtk or some of the other deps you need. Check the PCSX documentation for the list of deps, or you can simply download my precompiled binary. Both the binary and source hack are use at your own risk stuff etc, etc, ad nauseum.
- I tried out all the GPU plugins thoroughly, and Pete's MesaGL Driver seems to be the fastest, most accurate, highest quality one.
- Unfortunately, Pete's MesaGL GPU plugin has severe issues with doing fullscreen. In the image below, PCSX is shown loading the BIOS in fullscreen mode. The red lines represent the visible screen area, proportional to the rest of my desktop. (For the record, no, this has nothing to do with my NVIDIA TwinView setup. I disabled the TwinView setup and tested it again to make sure and got the exact same results.)
(Click for full size)
It looks like Pete's MesaGL Driver does fullscreen by simply removing the window border, maximizing the window, drawing the game screen at the desired resolution in the top left corner, changing the screen resolution, and moving the monitor viewport to the top left corner. This isn't real fullscreen, it's fake fullscreen and is subject to number of compatibility issues. For one, the gnome-panel at the top of my screen is forcing the maximized pseudo-fullscreen PCSX window down several pixels. Secondly, the viewport is not fixed. The resolution of the X11 session is still in fact 2880x1200, and you can move anywhere within this much larger real estate simply by moving the mouse. In some ways this can be an advantage though. You could use the mouse to carefully recenter the viewport over the game screen so that it's not cut off anymore. But that's annoying. And it won't work anyway... here's why:
(Click for full size)
After PCSX is done doing its BIOS thing, Pete's MesaGL Driver moves the game screen to the bottom left of the viewport, for some odd reason. And since gnome-panel is forcing the absolutely sized PCSX window down several pixels, the bottom of the game screen is cut off once again. And this time no amount of recentering with the mouse can help you. What you can do, is move all your gnome-panels to the bottom of your screen and set them to auto hide. If you do that, then use your mouse to recenter the game screen to the bottom after you load PCSX, you can have a totally full screened PCSX with nothing cut off. Note: If you select a full screen resolution that is exactly the same as your monitor's current resolution, you won't need to recenter with the mouse. Also, if you use KDE, you shouldn't have to worry about its panel (kicker) doing this kind of stuff. But if your fullscreen resolution is smaller than your monitor's normal resolution, you will have to do the recentering stuff. Finally, another workaround you can use is to use P.E.Op.S. SoftX Driver. It does the same fake fullscreen nonsense that the Pete's MesaGL Driver does, but it also automatically (yay!) centers centers the viewport to where it needs to be, and don't pull any shenanigans on you moving the game screen around the viewport. It doesn't lock it there though. If you move the mouse while playing, you will reveal gnome-panel. See below.
Even with this, P.E.Op.S. SoftX Driver is still the much more convenient option so long as you don't touch the mouse once you go fullscreen. But personally I think Pete's MesaGL Driver looks and performs leaps and bounds better, and I'd rather play it windowed, or deal with its funny fullscreen behavior then use the more convenient, but less pretty, and slower P.E.Op.S. SoftX Driver instead.
- Given only two choices for SPU plugins, Eternal's and P.E.Op.S. OSS Audio Driver, I was forced to use P.E.Op.S. OSS Audio Driver when Eternal's wouldn't work. Luckily, P.E.Op.S. OSS Audio Driver works nicely. (This was tested with a Soundblaster Audigy.)
- If when you try to load a plugin's config screens and they do not appear, try running it from the terminal. If the terminal output says something like error while loading shared libraries: libgtk-1.2.so.0: cannot open shared object file: No such file or directory, then you need to sudo apt-get install libgtk1.2.
- If when you initially launch PCSX it says "PCSX needs to be configured" and then just closes, try running it from the terminal. If the terminal output when it closes says libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory, then you need to sudo apt-get install libstdc++2.10-glibc2.2.
- If you have spaces in any of your PSX BIOS files, PCSX will segfault. Remove all spaces from your PCSX BIOS files.
- Last but most certainly not least, I've found that once you load a game into PCSX, if you press escape and load a different game, it will occasionally lockup X forcing you to reboot. To prevent this, if you want to load a different game, close PCSX and reopen it.
**This guide is a modified version of the comprehensive Linux PSX howto on my website.
Last edited by Kethinov; November 20th, 2007 at 06:24 AM.