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.

This guide will require a lot of reading on your part, mainly to get your PC connected to a CRT display. I am not an expert on this matter and there are far better sources to explain how this is done. There is a ton of different specifications and display settings that are supported, so there isn’t a one guide fits all. You can also damage your CRT if you use the incorrect settings. So when I mention a link that you need to read – read it.

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_driver=”rgui”
  • 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.

Closing words

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.

C D C R U Z E

C D C R U Z E

Chad is someone who wishes arcades were still around. This also happens to be his site where he rambles on and on about games and emulation. He can also cook a mean cheese toastie.

42 Comments

  • Mike Wasilewski says:

    Great guide!!!!!! Been searching for hours as to how I could set up my PC for CRT gaming and was sent on a wild goose chase until I came across your guide.
    Amazing work. Thanks!

  • Arnie says:

    Im going to try this tomorrow. Thanks for the guide!

  • Andy says:

    thank you SO much!!!

    Been trying forever to get 15khz without any luck so you saved my day (and life, possibly 🙂

    Andy

  • Patrick says:

    Thanks for your tutorial !

    I did everything like in the tutorial.the retroarch menu is displayed in 240p, but the image of the sega genesis game is 5 cm cut at the bottom. furthermore i can’t exit retroarch properly. the resolution is not changed on exit and i don’t recognize anything anymore and have to press pc reset.
    after restarting the pc and I start retroarch sometimes the 240p menu is only 1/3 visible on the CRT i can’t adjust anything.
    I use Groovymame on the same PC and that runs perfectly, only Retroarch doesn’t want it. I somehow feel that retroarch is buggy.
    Your tutorial is also really easy to use, you can’t do much wrong there !

  • Patrick says:

    Thanks for your tutorial !

    I did everything like in the tutorial.the retroarch menu is displayed in 240p, but the image of the sega genesis game is 5 cm cut at the bottom. furthermore i can’t exit retroarch properly. the resolution is not changed on exit and i don’t recognize anything anymore and have to press pc reset.
    after restarting the pc and I start retroarch sometimes the 240p menu is only 1/3 visible on the CRT i can’t adjust anything.
    I use Groovymame on the same PC and that runs perfectly, only Retroarch doesn’t want it. I somehow feel that retroarch is buggy.
    Your tutorial is also really easy to use, you can’t do much wrong there !

    • C D C R U Z E says:

      Can you upload your retroarch.cfg file and I’ll take a look for you! (Upload it to Google Drive or something similar)

  • Patrick says:

    Hello CDCRUZE,

    https://www.docdroid.net/rZcVoHO/retroarch.txt

    Here a video where you can see the screen errors:
    https://www.youtube.com/watch?v=f9DyyS5UEoI

    Thanks!

  • Sendar says:

    I watched your vid, looks like you’re in Germany, so you presumeably have a PAL TV… might this issue be an NTSC/PAL thing? I’m certainly no expert, but I think 240p is an NTSC resolution, the PAL equivalent is like 288 or something. Looking forward to OP chiming in on this, I’m also in Europe, will soon try to follow this guide:)

    • C D C R U Z E says:

      Hey there sorry for the late reply! I’ve tried to look at my setup and its a bit tough for me to replicate causing I’m using an arcade monitor (AstroCity) and so I can’t reproduce accurate results. However (I’m not sure if you started the thread on BYOC forums) but theres a few threads that discuss similar issues. Check it out here: http://forum.arcadecontrols.com/index.php/topic,160691.html

      Also another thing, make sure you disable Fast Startup if you’re using Windows 10. This is verbatim from Calamity himself:

      “This happens because you flashed the card, and fast startup bypasses the normal driver initialization that is required to clean some hardware configurations that we use to boot on 15 kHz.”

      http://forum.arcadecontrols.com/index.php/topic,160820.0.html

      • Patrick says:

        Finally retroarch is running,

        There were two mistakes.
        The error was the wrong desktop resolution. I used 640x480i and had to set to 320x240p. then i had to set the super_mode of 2560x…. on 1920x…..

  • Matt says:

    Thanks, this was a great guide, I have a nice multi-emulator running several consoles and some arcade games on a Sony PVM.
    One issue I’m having is that some games launch and the entire screen area is smashed into a narrow horizontal bar across the screen. Two examples are Battle Chopper (384 x 256) and NBA Jam (400 x 256).
    Is there a fix for this? Does it have anything to do with the 256 vertical resolution? Or something with the horizontal sizes and the superresolution value of 2560?
    May retroarch.cfg is set up exactly like you describe above.

    • C D C R U Z E says:

      Have a read of my reply above, and check out the links, sounds similar! 🙂

      • Matt says:

        It appears to be a different issue, not sure. But I think the key for a few games is to dump superresolutions and just go with 400×256 full screen, which can accommodate all the games that seem to have an issue. Another one was Rampage World Tour…

        I can also run them at 640×480 but then it doesn’t look very good, you get the interlace flicker.

        • Patrick says:

          Please test the desktop resolution 320x240p in arcade osd and change the super_modes_resolution.txt from 2560 to 1920x………@60hz all

          • Patrick says:

            Don’t forget to adjust the retroarch.cfg with desktop resolution 320x240p and the new resolution 1920 before you test it.

          • Matt says:

            Yeah, I just tried that. Set desktop to 320×240. Changed the superres text file so that all the super resolutions were 1920 instead of 2560, and installed the modes. I also played with changing the Retroarch super resolution setting from 2560 to 1920, and the custom viewport width. Still those problem games launch in a squished view.

  • Patrick says:

    I also have a game where the score ad is missing above, sega cd game Sol-Feace.
    Maybe it’s a bug in retroarch.

    • Matt says:

      Yeah I don’t really even care it’s just a technical thing I am curious about at this point. I do know both Rampage World Tour and NBA Jam worked fine on a Windows 10 based cab I had that used arcade monitor with an Ultimarc ArcadeVGA card. Not sure if that detail might point to a solution.

      • Matt says:

        I kludged together a fix… just listing it here in case someone stumbles on this. I had to create a fresh retroarch.cfg without super-resolutions. When you make this, make sure the first thing you do it turn off the “save on exit” option and rename this config something else (I called mine 400×256.cfg). You don’t want to blow away the config file you made following the instructions in the article above. Set the aspect ratio to 1:1 PAR (the RA value for this is 21 I think), turn off bilinear filtering. You will not be using superresolutions for these games.

        So now I have my front end (in my case Attract Mode) launch a special Autohotkey script for these problem games. The script changes the desktop resolution to 400×256 before launching the game ROM and specifying the custom config file I made above. The script also has a line to change the desktop resolution back to whatever it was when you exit the game.

        I only had 3 games that were a problem, so it wasn’t that bad… once you have one script for a game it’s just mostly cut-n-paste to do the others.

        • Patrick says:

          Super Matt !!!

        • C D C R U Z E says:

          Hey Matt, do you mind if I paraphrase this and add this to the guide? Will give full credit of course.

          • Matt says:

            Of course! Honored.

            I can get you the actual script, it’s only like 3 lines. Even if people don’t use Autohotkey they can easily translate it into whatever they use (batch file or whatever). But I’m not at home at the moment so I don’t have access.

  • Ricardo Machado says:

    Man, great tutorial!

    Do you have a suggestion of front end to use with CRT?

    I loved Launchbox, but with my system running in 2560×240, it’s almost impossible to continue to use it.
    (I will do some research to see if I found a way to keep using Launchbox)

    Thanks!

  • Bernd Stromberg says:

    I’m also on PAL systems and with your RetroArch config it does NEVER switch any resolution. So 50 Hz PAL mode never used.
    Also the Master System is not exactly 60.00 Hz in NTSC it also does not switch the refresh rate.
    The modes ARE there for Groovymame, it also has some machines using PAL with 49.89 Hz 50.125 Hz etc. There it does switching Res/Refresh. But not in RetroArch.
    I’m using a VGA CRT, 31 kHz+, no 15 kHz.
    As said Groovymame works like a charm, RetroArch does not (yet).

  • Dan C says:

    Thanks for the guide!
    Ive installed crt emu-driver and all the custom modelines in your guide.
    I have groovymame running from bigbox fine and it looks amazing!

    My problem is with retroarch. It took me days of trial and error with the config file to get retroarch to launch roms that would display properly in 240p super res. It would only work by setting video_refresh_rate to 30 and save_on_exit to false or it would keep starting in 60hz and my games wouldnt load right. After doing the above, every rom/core is running fine in retroarch directly but if ran from bigbox i get an out of sync looking screen.
    I feel like its something to do with retroarch being able to switch resolutions fine on its own but when ran through bigbox it gets messed up. Do I need to run the crt at a specific resolution since it seems bigbox just takes whatever resolution the monitor its on is ran at? Ive tried 640×480 30hz interlaced, 60hz interlaced, 120hz interlaced and all give me the same out of sync image when a games loaded through bigbox. I think once when I set crt to 60hz interlaced the game would load but it wasnt in 240p super res it was in mushy 480i. Ive tried setting descktop res on crt to 2560×240 also but just get a squished image but its there and isnt out of sync.

    Ive been at this for a week and about to loose my mind lol.
    Heres a link to a thread I started with pics
    https://forums.libretro.com/t/retroarch-on-crt-certain-cores-not-outputting-signal/27170/16?u=deezdrama

    Any help is appreciated!

  • Twippy6 says:

    Thanks for that guide using user_mode – super retroarch.ini
    Saved me hours of life.

  • KW says:

    Thank you so much for this. You saved me with the RetroArch config and also that AMD service… I’ve been struggling for days! Finally finished my setup today. It consist of RetroArch + GroovyMame + other PC shmups. Thanks again man!

  • john says:

    Hi there, thank you for this guide! With the directions to create the user_mode – super.ini file, I’ve gotten many systems in addition to Mame/arcade to work on my CRT cab!

    I am continuing to struggle with N64 (retroarch), Sega Saturn (medafin), Dreamcast (Redream) and Gamecube (Dolphin). When I attempt to load any of these, my CRT loses sync and I have to restart the PC. I’m thinking there’s just additional modelines I need to add to the .ini, but I’m not sure where to go to find a guide! Thanks for any help!

    • C D C R U Z E says:

      Whats your setup? (PC, monitor etc). It’s a bit different for everyone depending on your specs but I’ll try and help. I’m running RE through an Astro City arcade machine (with the Nanao monitor) and Dolphin + Flycast stuff works fine with CRT EmuDriver.

      Can you try and enable Debug logs on RetroArch, try run the games, force quit and post the results here? (Upload them to pastebin.com)

      https://docs.libretro.com/guides/generating-retroarch-logs/

      • C D C R U Z E says:

        Also can you upload your retroarch.cfg so I can analyse that too (same deal use Pastebin or a similar site)

  • Pixelperfect says:

    You are missing a lot of modelines…. What about PAL? 🤣

  • Se77vy says:

    Hi there, thank you for this great tutorial ! I followed it with the last version of RetroArch
    and everything works like a charm on my CRT Trinitron. But I still have a few questions …
    I didn’t have to modify these settings :
    – Use Custom Refresh Rate
    – Config Aspect Ratio
    – Custom Aspect Ratio Width
    – Custom Aspect Ratio Height

    I let all by default and everything seems to work great.
    So I would just like to know what these functions are for ?
    And I do not understand why we must configure “Config Aspect Ratio” and “Custom Aspect Ratio” in the same time
    since we must choose between one and the other in the rgui interface.

    I would be very grateful if you can give me answers to my questions.
    Anyway, thank you again for everything

  • Rian Sigit says:

    Thanks for your tutorial, but i have a problem, the refresh rate always set to 50hz, i change it to 60hz but not saved and always back to 50hz on startup

    I’m using 1920 super res, windows 10, retroarch 1.9.6

  • Rian Sigit says:

    Nevermind my question, i just delete the 50hz modeline

  • Pistrielo says:

    I also have would be interested in the correct PAL modelines. Any chance you can update the guide also for PAL?

  • Alessandro says:

    Thank you for the great tutorial,
    It works on my 15khz arcade cabinet, but when I exit a game from
    Retroarch and go back to the desktop/frontend the image goes this way (out of sync?) and I need to reboot the computer to set it back.

    https://ibb.co/3YXFKhC

    This only happens with Retroarch games and not groovymame.

    • C D C R U Z E says:

      This sounds like an issue with your frontend / program you use the launch games. Have you tried launching your frontend or RA in debug mode to generate a log?

  • Nate says:

    What version of RetroArch did you use to make this write-up?

Leave a Reply to Rian Sigit Cancel Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

C D C R U Z E is ..

Someone who wants to ramble on about games, arcade, emulation and design. Maybe a few other things too.

Where can you reach me?

I’m available on a few other social media platforms! Have a gander at the below.