I find bad documentation really annoying. If you want to setup RetroArch and connect it to a CRT display, instructions are pretty weak. You have to jump around 3 different sites to get some cohesive information and the official libretro wiki doesn’t mention anything. Don’t get me wrong, the guys at libretro do amazing things but if it isn’t documented properly there’s just going to be an endless stream of forum posts asking how to set it up. Anyway /rantover, let’s get RetroArch connected to your CRT display, pumping out glorious 240p or whichever natively resolutions you’ll be using.
Getting a 15hz signal
The first thing that’s needed is a 15hz signal (or the one your CRT supports) out from your PC and into your CRT display. CRTs operate on a different frequency compared to modern PC monitors hence why this is needed. Graphics cards out of the box cannot natively do this. Fortunately enough, a person named Calamity has developed custom drivers for a set of ATI cards to do exactly that – delivering a safe signal to a CRT. This driver and software package they created contains a few tools and other bits of software. Below is a quick summary of the tools and programs that go hand in hand with CRT EmuDriver.
- CRT EmuDriver – A driver package developed by Calamity which allows certain AMD ATI graphics cards to output a 15hz signal.
- ArcadeOSD and Video Mode Maker (VMM) – Utilities which can generate, test and modify adjustments for custom video modes.
- GroovyMAME + SwitchRES – A special fork of MAME which can change to the original native resolution of each game.
On the official CRT EmuDriver website, there’s a list of all the compatible graphics cards you can use. I’d highly suggest you get a least HD 5000+ series as it makes installation a lot easier due to EDID support. All the graphics card is doing is outputting the compatible signal, it doesn’t do a lot of heavy lifting when it comes to actual emulation (depends on what emulator and or system), but for the most part that’s all on your CPU.
The card pictured here is an ATI HD 7570. Older graphics card that weren’t the flagship models at the time go for extremely cheap these days and are usually plentiful. I’ve seen cards go for as low as $15 AUD. Do your research on what cards work with CRT EmuDriver and try scope out deals on the lesser known cards from each generation from ATI.
Now for your homework. Please have a read all these links below to get an understanding of how this all comes together.
- Official CRT EmuDriver website – Has the drivers and graphics cards that will work with our setup. Take note to get the correct driver package for which ever graphics card you get.
- Install guide for CRT EmuDriver – Don’t follow this right now but read and see what’s involved in getting your graphics card to work. We’ll be using this guide later but adding some additional parts needed.
- Connecting Windows PC to CRT – Buttersoft over at Aussie Arcade has written an incredible 101 on everything related to getting a PC connected to a CRT. It’s a long read but well worth it.
- A DIY Arcade Console Guide – This link is a bit old but is still very useful, it’s a complete guide on how to make an emulation arcade PC for CRTs. Similar to what we are doing.
So read all those links and get yourself an ATI graphics card that will work. Once you’re happy to move forward it’s time to install the graphics card with CRT EmuDriver.
Install the drivers
I won’t be explaining every step of this section in detail. The guide that Calamity has provided more than comprehensive and if followed correctly, you should be good. However, there is one part within that guide that we need to adjust to make it work with RetroArch.
Follow the guide until you reach a section called Step 3 – Setting Up Mame. It will mention that you need to grab a .ini file and load this into VMM. This file basically contains all the resolutions needed for all our games to work. If we try to load a game and the resolution isn’t in this file, we’ll get a bunch of weird results.
The ini file mentioned in the original guide is fine if you’re just going to use GroovyMAME, but since we’re expanding to RetroArch, we need to add some more resolutions to ensure it works with console games.
If you’re not comfortable editing the file, I’ve attached the one I used here. This is exactly what my guide mentions with the new modelines for RetroArch.
- Make a copy of the user_mode – super.ini file.
- Rename the copied file to user_mode – super retroarch.ini.
- Open the new file you copied with a text editor (Notepad).
- Add the following lines to the file at the top.
- 2560 x 192 @ 60.000000 retroarch
- 2560 x 200 @ 60.000000 retroarch
- 2560 x 240 @ 60.000000 retroarch
- 2560 x 224 @ 60.000000 retroarch
- 2560 x 237 @ 60.000000 retroarch
- 2560 x 256 @ 50.000000 retroarch
- 2560 x 254 @ 55.000000 retroarch
- 2560 x 448 @ 60.000000 retroarch
- 2560 x 480 @ 60.000000 retroarch
- Save the file.
- Back to the guide, choose the newly created user_mode – super retroarch.ini file.
Then continue with the rest of the walk through. By the end of guide you should have successfully connected your PC to a CRT display.
One last thing before we move onto RetroArch, we must disable a Windows service. This service is known to interfere with the CRT EmuDriver package, mainly when switching resolutions, so it important we nip this in the bud before it causes head aches.
- In Windows, Press Win Key + R > in the Run dialogue box type in > services.msc.
- Find a service called AMD External Events Utility.
- Right click it > Properties.
- Hit Stop.
- Then change startup type to Disabled.
- Hit Ok.
Setting up RetroArch
At the time of writing, RetroArch officially has support for CRT displays and switching resolutions. In a nutshell, RetroArch will automatically change the resolution of our game to its intended native resolution. On the official libretro wiki there’s no mention of how to set this up properly (aside from a forum post) so we’ll be breaking down how to get your setup configured correctly.
Before we touch RetroArch, make sure that your games are loading fine before we start. You don’t compatibility issues when troubleshooting the CRT parameters.
First thing we need to do change is the menu driver. The default XMB menu won’t work on your CRT display as its not designed for that frequency range so we’ll need to rollback to the old RGUI one. If you’ve already connected your PC to your CRT then doing this via the GUI might be difficult so open we’ll edit the config file instead.
- Open up your retroarch.cfg file in Notepad
- Press CTRL + F.
- Search for menu_driver
- Change xmb to rgui (So it should look like menu_driver = “rgui”)
- Save the file.
- Launch RetroArch.
RetroArch should now boot into the old school RGUI menu. Once you have RetroArch open, go through the below settings and make sure they match up correctly. The following settings are from a fresh install so some parameters might be different.
- Settings > User Interface > Show Advanced Settings > On
- Settings > Driver > Video > d3d11
- Settings > Video
- CRT SwitchRes > On
- Start in Fullscreen Mode > On
- CRT Super Resolution > 2560
- Use Custom Refresh Rate > On
- Windowed Full Screen Mode > Off
- Config Aspect Ratio > 8.00
- Custom Aspect Ratio Width > 2560
- Custom Aspect Ratio Height > 240
- Bilinear Filtering > Off
Now if you do this via the RetroArch GUI and it screws up your video signal, you can change all these settings directly into the config file. If you would like to do that, change your retroarch.cfg with the settings as per below:
- menu_show_advanced_settings = “true”
- video_driver = “d3d11”
- video_frame_delay = “0”
- video_fullscreen = “true”
- video_smooth = “false”
- video_aspect_ratio = “8.000000”
- crt_switch_resolution = “1”
- crt_switch_resolution_super = “2560”
- crt_switch_resolution_use_custom_refresh_rate = “true”
- custom_viewport_height = “240”
- custom_viewport_width = “2560”
Now try load a game like you usually would via RetroArch and if all works well, it will automatically change to the native resolution requested by the ROM / RetroArch. If you combo this with run ahead lag settings, you’ll have near perfect 1 for 1 emulation with original hardware. The above settings is what I’m running on my AstroCity and I’ve managed to run SNES, NES, PS1 and Mega Drive games all perfectly.
As I mentioned before, this is very much a starter guide to get all the pieces working together with RetroArch and CRT displays. Due to the nature of CRT setups and resolutions, these settings might not be perfect for your configuration. If something doesn’t work please keep this in mind and be sure to do your research and read the links mentioned above. Triple check everything from top to bottom, especially the correct specifications for your display. Getting mixed up with resolutions and refresh rates can be fiddly so always ensure you have your information correct.
If you’re having issues let me know in the comments below and I’ll try my best to assist. Happy gaming in 240p.