I've found that many TVs do OK at close to both 60hz or 50hz, but lose sync at close to ~55hz.
This being the case, the default generic_15 and arcade_15 default presets are insufficient as they cover a large range from 49.50hz to 65.00hz, without blocking out the middle frequencies. This means they can generate modes at ~55hz that the TV cannot display.
My solution was to create a custom monitor preset that includes multiple ranges, for both "NTSC" and "PAL". That way you can specify the valid frequencies for each. It looks something like this
monitor "ChinaTV1", "China TV - 50/60 Hz", "4:3"
crt_range0 15625.00-15750, 49.50-55.00, 1.500, 4.700, 5.800, 0.191, 0.191, 1.056, 0, 0, 192, 288, 448, 576
crt_range1 15625.00-15750, 55.01-62.00, 2.000, 4.700, 6.200, 0.256, 0.191, 1.200, 0, 0, 192, 248, 448, 480
The above example is what I use with my "China" TV. The switchres driver chooses the most appropriate crt_range based on the maximum number of permitted lines allowed. Each range has a max progressive lines specified, which I've bolded above.
For example: if you chose to launch MK2, which wants 254p, switchres checks the lowest range (crt_range1, "NTSC") first. This allows max 248 progressive lines, or 248p, not enough. So it moves onto the next range (crt_range0, "PAL"), which allows up to 288p, and uses a 256p video mode generated from that range.
You might have noticed that, in the above example, I didn't actually block out any frequencies around 55hz - that is because my "China" TVs are fine with handling 55hz. So why do I even use the split ranges? Because the TVs default to different screen geometries based around "NTSC" and "PAL" signals, and automatically change depending the signal received! By modifying the crt_ranges to align with this, the front/backporch values can be further tweaked to ensure a better "screen fit" for the video modes.
If you wanted to limit video modes to just those close to 50hz and 60hz, and block out most frequencies in-between, you might use a preset like this:
monitor "NTSC/PAL only", "PAL/NTSC 50/60hz only", "4:3"
crt_range0 15600-15900, 49.50-50.00, 2.000, 4.700, 4.700, 0.064, 0.192, 1.056, 0, 0, 192, 288, 448, 576
crt_range1 15600-15900, 59.50-61.00, 2.000, 4.700, 5.800, 0.064, 0.192, 0.898, 0, 0, 192, 248, 448, 480
You could even specify PAL for only 50hz exactly, and NTSC for only 59.94hz exactly, if you really wanted to.
The horizontal frequencies specified are less important. I usually just use the same for each crt_range, covering the total for both.
I guess you could specify a preset with three separate sets of crt_range values, hone in on those 55hz modes, but I don't see a compelling reason to do so with TVs - especially given they seem to usually default to "NTSC" or "PAL" modes of operation.
I don't know how Calamity thinks about this, or if this is what was intended - I "improvised" this approach based on existing implementations for dual-sync monitors. Looking at it a certain way, TVs that work for both 50hz and 60hz
ARE dual-sync, auto-switching monitors. I don't know if this will work the same for you, but is what I've found works for me. Feel free to tinker, try playing around with it to see what works for you.
** Disclaimer: I use Win7+CRT_emulator+GM, not Retroarch, but I think all the same theory applies.
For further queries, maybe attach a log file.