RetroArch - Native CRT Support

I don’t know if this has come up before, but here it is. I’m willing to place money on a bounty that adds native 15khz with mode switching in a similar fashion to what GroovyMame does. I understand that you can do Superwide resolutions with Retroarch and the RGUI, but that still doesn’t solve the mode changing that occurs in certain consoles, especially when a mode switch occurs between interlaced and progressive (Snes and PSX both do this, for example).

This is a suggestion in the sense that I don’t know if the authors would be willing to merge this work assuming someone would want to do it. In case such a feature would be acceptable, I’d be willing to offer the amount myself, starting from $50 depending on the amount of work required.

I know that some might consider me a looney, but I just enjoy the experience that much. GroovyMame works great, but I’d love it if I could also enjoy consoles the same way through Retroarch.

Thanks for reading.


This is a thing we have discussed before and would definitely be interested in merging. It shouldn’t be terribly hard to implement, it was just that the only people with the ability to do it at the time didn’t have CRTs to test with.

Create an account on Github and Bountysource, create the Github issue first, then login to Bountysource, copy and paste the Github URL into Bountysource’s ‘post URL’ bar, then add some money to it to start the bounty.


Was this bounty ever fully created? I would be interested in adding to the bounty

The people who can do it, maybe instead of a bounty, they could be donated an LCD that can do 15khz? (If that’s an option)

(Do you need a CRT to do 15khz?)

There are plenty of LCD monitors that do 15khz natively. Or, well, there are probably more LCDs around that do 15Khz than CRTs at this stage.

My NEC Multisync EA241WM for instance works fine at 15khz.

There are a few lists around of modern monitors that accept lower refresh rates.


Hi hunterk

I am currently looking into this. I have a PC set up with a CRT. Well actually I have a couple of them.

I have cloned the git and run a test compile. However, I have not looked at any code as yet. If you could help out by giving me a starting point, this could speed things along.

My code knowledge is good. I have built applications and games in C, C++ and currently work for a DEV team coding in C#.

If you can get anyone involved from the team to help that would be great.

Hey, that’s awesome!

Here’s the thread where we’ve discussed this a bit in the past:

I believe it will need to be added on a per-driver basis, though I think adding it to any one should fulfil the bounty and the functionality can be added to the other drivers later as needed. Our OpenGL driver is the most used, AFAIK, so it’s a good place to start. I believe this is the appropriate file:

If possible, I would recommend joining us on discord (#libretro) and/or IRC (#retroarch on Freenode IRC).

I will join on discord and irc, can you give me the details. Your Discord IDs and irc chanel info.

I’ve had a quick look through the gl.c and it seems that the framework for a screen resize is already there, should be a case of calling the function. May need to setup a temp veiwport function before switching though.

One question do you know if any of the cores currently check if the rom asks for a resolution change? If so this would be the best place to start.

I currently have two assements due this month for my computer sience degree. Progress may be slow but we’ll get there.

1 Like

Has this bounty been setup yet? I’m currently woking on it now. An incentive would be great :wink: here is my proff is concept.

Latest update for Retroarch native swithing. On the fly switch is working, but in early stages of alpha testing.

Chech out my latest video.


I’m beyond excited for this! I also have a CRT_Emudriver PC hooked up I’m not sure if it’d be any help but if you are ever looking for any additional testing I’d be happy to help. Also I’d be happy to contribute at least $20 towards a bounty however all the BountySource listings seem to be closed I’m not quite sure how to open up a bounty of my own for this. Please just reach out to me if you happen to be interested!

1 Like

The bounty for this thread was originally posted here:

It seems the $50 bounty expired after he closed the issue for some reason. So either that issue would need to be reopened or someone posts a new issue to add a bounty to.

I don’t believe you can have a bountysource bounty for a closed github issue. Since the original github issue is closed, someone will presumably need to create a new issue and the post the bounty to it.

Another update for you guys to check out. This is Saturn switching between multiple resolutions, progressive and interlaced.


Ok guys this is a alpha release for RetroArch_Switch_Res. It is for bug testing only and should not be used as a replacement. This is currently Windows only.

Be aware you will have to manually reset your desktop resolution. This will be made easier by loading a hi-res games before exiting RA.

There are two files in this zip. One of which is the current wrapper we are using to switch the windows resolution. The other being retroarch.exe. Please backup your retroarch.exe before going any further.

Extract the file to your retroarch install, replacing retroarch.exe.

Prerequisites Ctremudriver and modelines created by vmmaker.

We are currently working on frequency switching! it is half incorporated but not fully working yet.

Currently swithing to all resolution is posible progreesive and interlaced @60hz, some roslutions may swith to 50hz depending in your modeline setup.

We are currently building a modeline database to enable correct 50hz - 60hz switching.

A file will be created with your retroarch folder called ra_res_hz.txt this file will show you the resolution that it is trying to switch to, if these are not available switching will not happen. So, you may need to create these modelins.

Please message my any bugs crashes and such so we can wrap this up for release ASAP.

files can be found here.


Hi I just had a moment to test this alpha and want to update you so far. Here’s a short video of me testing it:

It absolutely is finding my CRT and switching the resolution at launch that works great. However once I launch a game with interlaced mode it sends my TV out of sync. I believe this is actually an issue on my end I’ve yet to find a fix for, for some reason 640x480i always sends my screen out of sync unless I’m switching to it from another already interlaced resolution (i.e using ArcadeOSD and switching from to 2560x480i works and then if I switch to 640x480i it will work). Also when the game displays in progressive it is stretched off screen, I believe that is because it’s reading the aspect ratio settings from my config that are set up for super resolutions as opposed to native resolution, here is an image of that to clarify!

Lastly after running your fork of retroarch and launching a game I’m still unable to find the ra_res_hz.txt file, it should be in the root retroarch directory right? Other than those issues though it is clear that the switch res functionality is working. My question is if you are able to make this support Super Resolutions widths like 2560x240p & 2540x480i? I was having this same issue with switch res sending my monitor out of sync on interlaced modes with the Emu4CRT Mednafen fork (located here: if you’d like to look at it) but when the author added support for super resolutions it resolved that issue immediately, please let me know if this is possible. Also if there is any prior setup to the retroarch.cfg file that needs done please let me know, it may help you to know I use a frontend with individual .cfg files for every platform.

Is this a hard requirement? I’ve been using CRU (Custom Resolution Utility) to get 240p & 480i pushed to my CRT monitor. In some other context it seems to have done the jobs CRT_Emudriver is used for.

I’m very curious about this as well. It’s become my understanding that 3840/1920 x 240/480 are the go-to resolution settings for these setups.

– Not to detract from the awesome progress you are making here. Gave both your vids a thumbs up.

I may have uploaded a version that does not output this file. I will link to the latest version which definitely does. Your issue could be with your CRT. As you can see from one of my earlier videos PSX works fine. However, It could be your installed resolutions. Check the ra_res_hz.txt to see the resolutions being asked for. It will be the last resolution in the list.

This version still does not restore your desktop resolution so be aware.

When it comes to super resolutions I am hoping to eventually incorporate Calamity’s SwitchRes further down the line. I believe that I am collecting all the information needed to be passed to SwitchRes, however, I have not looked into it yet.

This latest version now switches your screen refresh rate between 50hz an 60hz if these frequencies are available for the resolution. I have someone working on building an ini for vmmaker to incorporate the correct resolutions and refresh rates. I know there is a lot of people interested in this so, my plan is to complete this version using the current methods before moving onto SwitchRes and incorporating Super resolutions.

@SkyHighGam3r Vmmaker creates modelines for windows so that an application can ask for the resolutions installed. I’m not sure about CRU, I know that it can force resolution However, I don’t think it can install modes for automatic switching!? Please correct me if I am wrong here.

Here is a video of the latest version, Switching resolution, P to I and screen frequency.


The new linked version does output the file for me and after switching the aspect ratio settings in my default config the progressive modes fill my entire screen perfectly! Unfortunately interlaced modes still send my screen out of sync, this shouldn’t be an issue with the TV itself, also I have the modes installed that ra_res_hz.txt asks for, something causes this program and Emu4CRT Mednafen to select the wrong refresh rate for 480i but seeing as how this is such a niche issue it’s hard to find why I experience this but not other people with CRT Emudriver GPU’s. I may take this issue to the CRT Emudriver forums that may be the only way to get on track to resolving it but in the meantime I’ll attempt to test any other builds you make just in case

1 Like

Hi man

I’ve quickly put together a superres version it is using the full scale, you will have to correct your ratios in RA as things may look squished. For example genesis will need 8:1 and Snes will need 5:1. if all goes well here I may incorporate auto scaling You mentioned before this fixed your interlaced issues. So I am intruded on how this will work.

Thanks for doing some testing for me during these early stages. Each machine seems to have slightly different setups which seem to cause some weird bugs.

Give it a try and let me know how you get on.