CRT SwitchRes Not Working for Beetle PSX

Hello, everyone.

I recently got a setup working that uses an HDMI to YPbPr transcoder and 2560x* super resolutions that should work well with resolution switching when playing games. So far, I have been able to run Higan, GensisPlusGX, Beetle PCE, Desmume, Flycast, mGBA, and Parallel N64 to run at their proper resolutions. DS and GBA games run in a boxed mode in 240p (as expected), SNES works with high resolution and standard resolution modes, and Flycast handles 480i with no problems.

I have been having issues with Beetle PSX and Saturn, however. I have used the emu4crt fork of Mednafen and that handles resolution switching between 240p and 480i without any issues on both systems, but the RetroArch cores refuse to actually switch to 480i during the intro sequences or in certain menus (e.g. Chrono Cross). As I stated previously, 480i works in Flycast without any issues.

I have managed to get this working with just two modelines added with CRU (2560x240p and 2560x480i). I haven’t needed to use CRT Emudriver for any part of this process, and emu4crt makes me believe that I won’t need to (and I would like to avoid using it, as test signing mode would prevent me from using my PC with certain modern games that use EasyAntiCheat).

Am I missing something somewhere? What would make emu4crt work while these RetroArch refuse to? I do not believe this has been covered before, and I have searched the forums a few times now, but if I missed this, I am sorry.

Any advice is greatly appreciated.

1 Like

Hi @yomikoto

Are you just using 60hz? if you are loading 50hz games they requires different resolutions. Also there are core options for overscan this removes or adds overscan which changes the internal resolution. So, depending on this option the resolution you require may not be 2560x480@60. I believe you want to remove the overscan to generate the correct internal resolution.

RetroArch CRTSwitchRes is not based upon emu4crt or GrooveyMame.

Thanks for replying so quickly, @Alphanu.

I am just using 60 Hz, that is correct. I don’t have any PAL region games or games that would otherwise run at 50 Hz (the only exeception is Shenmue, but that has a 60 Hz option and, as I said, runs just fine at 480i).

I could have sworn I had disabled all overscan cropping or adding RetroArch has (for both cores and overall settings). Let me double-check…

Well, I didn’t have “Crop Overscan” for Beetle PSX disabled, but changing that did not fix the issue.

Beetle PSX Core Options:

beetle_psx_analog_calibration = "disabled"
beetle_psx_analog_toggle = "enabled"
beetle_psx_cd_access_method = "sync"
beetle_psx_cd_fastload = "2x (native)"
beetle_psx_cpu_freq_scale = "100% (native)"
beetle_psx_crop_overscan = "disabled"
beetle_psx_display_internal_fps = "disabled"
beetle_psx_dither_mode = "1x(native)"
beetle_psx_enable_memcard1 = "enabled"
beetle_psx_enable_multitap_port1 = "disabled"
beetle_psx_enable_multitap_port2 = "disabled"
beetle_psx_frame_duping = "disabled"
beetle_psx_gpu_overclock = "1x(native)"
beetle_psx_gte_overclock = "disabled"
beetle_psx_gun_cursor = "Cross"
beetle_psx_gun_input_mode = "Lightgun"
beetle_psx_image_crop = "disabled"
beetle_psx_image_offset = "disabled"
beetle_psx_initial_scanline = "0"
beetle_psx_initial_scanline_pal = "0"
beetle_psx_internal_resolution = "1x(native)"
beetle_psx_last_scanline = "239"
beetle_psx_last_scanline_pal = "287"
beetle_psx_lineRender = "default"
beetle_psx_mouse_sensitivity = "100%"
beetle_psx_negcon_deadzone = "0"
beetle_psx_negcon_response = "linear"
beetle_psx_shared_memory_cards = "disabled"
beetle_psx_skip_bios = "disabled"
beetle_psx_use_mednafen_memcard0_method = "libretro"
beetle_psx_widescreen_hack = "disabled"
beetle_saturn_analog_stick_deadzone = "15%"
beetle_saturn_autortc = "enabled"
beetle_saturn_autortc_lang = "english"
beetle_saturn_cart = "Auto Detect"
beetle_saturn_cdimagecache = "disabled"
beetle_saturn_horizontal_blend = "disabled"
beetle_saturn_horizontal_overscan = "0"
beetle_saturn_initial_scanline = "0"
beetle_saturn_initial_scanline_pal = "0"
beetle_saturn_last_scanline = "239"
beetle_saturn_last_scanline_pal = "271"
beetle_saturn_midsync = "disabled"
beetle_saturn_mouse_sensitivity = "100%"
beetle_saturn_multitap_port1 = "disabled"
beetle_saturn_multitap_port2 = "disabled"
beetle_saturn_region = "Auto Detect"
beetle_saturn_trigger_deadzone = "15%"
beetle_saturn_virtuagun_crosshair = "Cross"
beetle_saturn_virtuagun_input = "Lightgun"

Some settings from retroarch.cfg; the video_fullscreen values do not affect the cores (nor should they, I don’t think):

crt_switch_center_adjust = "0"
crt_switch_resolution = "1"
crt_switch_resolution_super = "2560"
crt_switch_resolution_use_custom_refresh_rate = "true"
crt_video_refresh_rate = "60.000000"
video_driver = "glcore"
video_crop_overscan = "false"
video_fullscreen = "true"
video_fullscreen_x = "2560"
video_fullscreen_y = "240"

Also, here are the custom resolutions I am using, if that would help at all:

Is it possibly creating a conflict because the two resolutions do not have the same pixel clock? I don’t know why that would cause issues with Beetle PSX and not something like Flycast, but I figure it doesn’t hurt to consider that.

Let me know if I can provide any other relevant information and, again, thank you for responding so quickly.


EDIT: I just remembered that Mesen-S shares the same behavior whenever it should be switching to the high resolution mode for the SNES (in games such as Secret of Mana, this is apparent as soon as you press Start, since the first menu is in that high resolution 512x448 mode).

In both cores, I can force RetroArch to switch to 2560x480i and it will scale properly (looks perfect, actually), and then it will also go back to 2560x240p when it is supposed to, but it will not automatically choose an interlaced resolution for these switches.

Whenever it refuses to properly switch resolutions, the games look squashed horizontally. They almost look like they are trying to run at native resolution instead of the 2560x* super resolution. Even so, that wouldn’t explain why they won’t switch to an interlaced resolution…If I had the spare money/parts lying around, I’d be keen on setting up a proper CRT Emudriver setup, but this is the only PC I have.

I’ve had a lot of issues with PSX in relation to CRT Switch Res using CRU myself (I detest CRTEmuDriver). I’m not at home right now so I can’t look at my exact settings - but I was going to suggest flipping the crop switch in core options as well. If you’ve already done that it’s probably the modeline itself. What I mean by that is I recall having to enter very specific vertical resolutions and refresh rates for this to work.

I notice in your CRU screenshots you’ve got timing set to manual as well. I’m not gonna even feign knowing what things like “back porch” are, let alone how to set them, but I will say that in the timing drop-down the CRT preset works beautifully for me.

Of course, this then begs the question of what kind of screen are you using? Are you running a 15Khz Consumer TV or a 31Khz PC Monitor? If it’s a 31Khz PC Monitor you’re gonna wanna pump that refresh rate up to 120.0Hz to get it to switch correctly, and you’ll want to uncheck interlaced and switch vertical resolution to the full 480. I can’t speak for all models, but my PC CRT doesn’t “do” interlaced, and I have to simulate it with the “interlacing” shader. I’m guessing from your super-resolution that you are using a 31Khz screen though.

I hope any of that helps, I had a lot of issues with PSX and CRTRS combining. I think that’s down to quirks of the core more than CRTRS though. I think I might have even played with the manual core options first and last scanline parts… but I’m pretty sure that was when I was messing with PAL games - which sounds like it won’t apply here.

I can try to pull up my resolution list when I get home later tonight and post it, I played with CRU and my monitor for ages to get it all to work, so hopefully it will help out here.

Hey @SkyHighGam3r.

I tried using the default CRT timings, but it caused my signal to be jumpy and jittery, so no dice there. It’s a consumer JVC I’Art TV, so 15 kHz is the goal.

I haven’t messed with the first or last scanline options. As I said, this is specifically tied to switching from 240p to 480i in both Mesen-S and Beetle PSX. Flycast works just fine with 480i. It must be a core by core issue. Beetle Saturn does not switch to 480i for the BIOS boot screen, either, now that I think about it.

I’ll tinker with it more tomorrow morning. Might just be down to someone changing how those cores handle switching on Windows. If I recall correctly, they didn’t work when I used a CRT Emudriver setup, either (back then, I used an R7 240 or something along those lines).

Fingers crossed we can find a solution!

Last time i checked I don’t think switching from interlaced to progressive modes (and vice versa) mid-game was actually supported. Someone who maintains the core will have to confirm this though. In the meantime you can just use a 240p resolution and use an interlacing shader which will automatically kick in when it detects the vertical resolution going above 240p so your bios screen will appear correctly etc.

Hey, @butanebob.

Unfortunately, when I use the interlacing.slang shader, it does not fix the squashed aspect ratio of 480i content, and it also causes flickering since it is causing the drawn fields to go black every other frame (as one would expect with interlacing, but it does not work at all with a 240p signal).

I wonder if switching isn’t supported, like you said. Switching from interlaced to progressive has always worked for me, but it won’t go the other way.

interlacing shader is meant to mimic 240p/480i on 480p screens.

Yeah, interlacing.slang def won’t fix the resolution or anything. I was just referring to how my personal monitor won’t allow modelines that are marked with interlacing, so I have to rely on the shader for the effect.