Lola Retro: CRT shader simulating the full analog signal chain

Hi all. I’d like to share a slang shader pack I’ve been working on and get feedback from people who know this area better than me.

What it does

Instead of drawing scanlines on top of the picture, it runs the whole analog chain:

console encoder → cable → TV decoder → electron beam → phosphor mask → glass

  • Encoder: RGB → YUV → QAM onto the subcarrier, with each console’s real pixel clock and per-line/per-field subcarrier phase (SNES 227⅓ cycles per line, Mega Drive 228, PS1 227½).
  • TV decoder: luma trap or 2-line comb, narrow consumer chroma, PAL delay line, and the US “red push” demodulator from the CXA2025AS datasheet.
  • Beam: spot width grows with brightness, so bright detail merges and dark detail stays sharp.
  • Mask and glass: aperture grille, slot or shadow mask, curvature, halation.

Dither blending and rainbow aren’t tuned per game; they come out of the timing. I’ve checked it against the 240p Test Suite and NTSC test patterns, not only by eye.

PC monitors and the Amiga 1084S are described in millimetres (mask pitch, spot size), so each video mode looks as it did on that tube.

Details

  • 13 presets, each curved, flat and HDR
  • The 1084S preset is also available as GLSL for Amiberry, and the PC monitor presets for 86Box
  • Needs Vulkan, glcore, D3D11/12 or Metal
  • PS1/PS2 cores at higher internal resolution cost about the same as native
  • MIT licensed

Known gaps: no rotated/vertical games yet, and an upscaled PS1/PS2 frame can’t always be told apart from a 480i one, so sometimes Console timing has to be set by hand.

GitHub: https://github.com/zoran123456/lola-retro

Videos

Sonic 1 (Sega Genesis): waterfall scene, RGB vs composite

https://www.youtube.com/watch?v=z7zlLLQVhZQ

More gameplay:

Feedback welcome

I’d especially like to hear where the composite or decoder model is wrong compared to real hardware. Notes, corrections or comparisons with your own captures are very welcome.


Disclosure: lot of the code was written with an AI assistant (Claude). I set the direction and checked the results against datasheets, test patterns and photos of real CRTs.

8 Likes

There is certainly some magic in “tv-show-broadcast” , admittedly , I’m increasing the sharpness of my display tho.

I can’t seems to color match “consumer-tv-scart-rgb” with “tv-show-broadcast”. there is also some cropping happening to me with a slight horizontal stretching. The Dither blending in “tv-show-broadcast” is spot on tho!

Thanks, glad the dither blending looks right to you!

On colour: the two are meant to differ a bit. tv-show-broadcast is a European programme (PAL), so the TV uses EBU phosphors, while consumer-tv-scart-rgb uses SMPTE-C phosphors for an NTSC game. The broadcast chain also changes colour a little: tape, the station’s PAL encoder, and the transmitter’s white clipper, which tames the brightest saturated yellows and cyans. To compare like with like, set Phosphors to 3 (EBU) on consumer-tv-scart-rgb. What remains is the broadcast chain itself.

On cropping and stretching: with the same frame both presets give me exactly the same picture area, so something else may be going on. Which core and game is it, is it a PAL game, and what internal resolution and aspect ratio setting do you use? A screenshot would help too. One common cause: a PS1 core at 2× internal resolution sends 640×480, which reads as interlaced unless Console timing is set to 4.

And here’s how close it gets to real hardware: CRTpixels’ photo of a Sony KV-13M51 on composite next to Lola Retro, all from the same raw Dracula frame.

1 Like

1 Like

Trying the VGA preset on my OLED. Looks nice!

Looks great, thanks for sharing the photo! :grin: If you haven’t yet, try the HDR presets on that OLED (lola-retro/hdr/flat or hdr/curved, with HDR on in the system and in RetroArch). The mask and the lines take away a lot of light; with HDR the shader can use the OLED’s extra brightness to put it back, so the picture gets closer to a real tube. Set HDR: display peak (nits) to your OLED’s peak and adjust HDR: paper white to taste. The steps are in the README under HDR.

Best, Z

1 Like

This shader is absolutely incredible, I love how the NTSC color decoder matches my real CRT to a large extent (looks closer in person with default TV settings):

2 Likes

I posted this on your Reddit thread the other day, but Reddit seems to have swallowed the comment. I’m just copy+pasting it here. This was from before you added some more features, so I apologize if anything is out of date.

Hi! I’m the developer of crt-beans (and I still have a CRT with a few retro consoles). If you’re open to feedback, I have a few thoughts:

  • You probably understand this, but detecting the console by frame size isn’t reliable because there is too much overlap. For example, the NES, PCEngine/TurboGrafx-16, SNES, Master System, Genesis/Mega Drive, and PS1 all had 256-pixel-wide output modes. The auto-detection sounds nice but I do wonder how often it will be incorrect.
  • The NTSC decoding is similar to the way I’ve been doing it (in the unreleased version of crt-beans on the libretro forums): demodulate the chroma, low pass filter it, then remodulate it and subtract it from the composite signal to get luma. I think it’s a good idea. :slight_smile:
  • There is a really clever trick in the NTSC demodulation to avoid either calling sin/cos in the loop or writing out a separate demodulated texture. I might want to steal this!
  • There seems to be too much dot crawl with the “no flicker” option turned off. I was testing in SNES mode. I’m not sure what is causing this, but I don’t see that much dot crawl on my SNES or in crt-beans.
  • The way you maintain the beam shape while having separate horizontal and vertical passes is very similar to an update to crt-beans that I’m working on. You pack the harmonic mean of the spot width into the alpha channel in the horizontal pass. In my case, I found that the first absolute moment was a better estimation in gamma-space than the harmonic mean. I also pack separate values for red, green, and blue into a R32G32B32A32_UINT texture using packHalf2x16() , which preserves the different widths of each color instead of collapsing them into one. It also looks like you use this technique only in monitor mode. I’m not sure why? I believe it should be applicable in both modes and you could simplify the code paths.
  • Overall the beam shaping has a lot of similarities to crt-beans. It seems to maintain energy conservation, it analytically integrates over a piecewise-constant representation of the pixel data in monitor mode, etc. Obviously I think there are some good ideas here. :slight_smile:
  • The way you mitigate the brightness lost from the mask causes compression of the highlights and doesn’t maintain the original tonality of the image in SDR mode. When you boost the brightness, you will get peaks well over 1.0. Then the tone mapping at the end of the shader compresses these peaks, reducing the relative contrast of the image in bright areas. Most shaders basically do this. The only ways around this are:
    • Accept the brightness loss. This is what you do in HDR mode, where a lot more brightness might be available. A low-quality HDR display might still apply tone mapping on its own with basically the same result, but you can’t really control that.
    • Fade out the mask in the bright areas to let all the light through. This works in SDR mode but reduces the strength of the mask. This is what crt-beans does.
  • The way you are doing dithering will result in a gamma shift. This is mostly relevant for long-tailed halation gradients over dark backgrounds. See here for an example fix. This technique can be extended to ordered dithering. Also, the hash you are using probably generates something like white noise. You will get better dithering results with blue noise or some other screen-space technique that mimics high frequency noise. The current technique might be “good enough,” though.
  • I don’t like the lifted black level with the room reflections on by default. That’s just personal preference, though.

This is the best AI-assisted CRT shader I’ve seen so far. I’m curious what your process was in creating this. I’m also curious whether you have previous experience with signal processing and shader development or whether this was all vibe-coded.

4 Likes

I’m not sure I am doing something wrong or not.

I get this when I load the amiga-1084s.slangp preset:

fps wont go higher than that (yeah, a poor Haswell IGP), and there is noise at the borders; but with GLCore is way worse:

Some workaround?

I was playing around a bit with this shader and I really like what it is trying to do. For the last few years focus was mainly on making masks as accurate as possible. While that is cool and impressive on its own it does not really make shaders look like real CRT imo. Those kind of shaders always end up way to pixelated unless you are siting half a room away.

Approaches like this and similar should be way forward to emulate old look.

Here are few pictures i took

Consumer composite - Nice blending while not making picture blurry. Very impressive

Trinitron S-video - Cleaner and sharper. This could be good for ps2 era games maybe

Studio monitor rgb - Even more clean than S-video while retaining nice CRT look

PC monitor VGA - At first I was what is this even doing? But with shaders on and off you can clearly see all effects it does to the picture. Testing with 640x480 PC games like Baldurs gate ect needed.

1 Like

I have noticed some issues with the auto-detection as well and i am not sure if it is due to certain shaders only being usable for certain resolutions.

For example the TV composite shader works fine for Famicon and megadrive, but is unusable for the PC-98 as it cuts out large portions of the screen.

S-video and higher signals are not supposed to be pixlated, while some models did that , that’s thanks to the newer models VM aka VSM. I did have panasonic model with a forced VSM

Here’s the same shot on my hitachi through component. I do suck at photography, colors are way better irl

IMO, the real challenge is to have a sharp mask while allowing both chroma and luma to pass said sharp mask.

Hi, and thank you, this is exactly the kind of feedback I was hoping for. Sorry Reddit ate it the first time. I noticed the notification, but the comment was deleted.

  • Dot crawl: you were right, and it was a real bug. With the skipped dot (NES) or short line (SNES) on every other frame, the phase alternates between two positions instead of cycling through three. Fixed in v1.11, both live and in “No flicker”, which now halves the artefacts instead of cancelling them.
  • Console detection: v1.11 adds a systems/ folder with one preset per system and the timing already set, and 256×192 is now detected as Master System timing.
  • Dither: done. It now picks the lower or upper code with the probability that keeps the linear-light average, with interleaved gradient noise. The darkest grey was 11% too bright before; now it’s within 0.5%.
  • Spot width: thanks for the first-moment and packHalf2x16 ideas. For now it stays in the mm path, but it’s a good idea for later.
  • Highlights: fair point. I keep the mask at full strength because the real tube never lost it, and accept the shoulder, but I see the trade-off.
  • Room reflection: one parameter, set it to 0.

Thank you for your thorough review! Really appreciate it!

1 Like

Thanks for the report! v1.11 adds a PC-98 preset (systems/pc-98): 640×400 at 24 kHz on an RGB monitor, every line drawn once. A TV couldn’t show the PC-98’s signal at all, so the TV presets aren’t the right fit. If the picture is still cut off, which core do you use, and what resolution does RetroArch show for it?

1 Like

Thanks for testing and for the screenshots! Haswell graphics is on the slow side for this shader, I’m afraid. :frowning: The beam pass works on an 8192-pixel-wide texture and the chain has eight passes, so about 24 fps at 1080p is roughly what to expect there. A smaller window or a lower resolution helps the most.

The GLCore picture is a different matter: that’s not slowness, the shader isn’t running correctly on that driver. Could you post the RetroArch log from a GLCore run (Settings → Logging, log to file)? Shader errors would show up there. Until then, Vulkan is the way to go on that GPU.

About the noise at the borders: is it inside the picture area, or in the part PUAE sends around it (the overscan border)? A close-up would help me see which one it is.

I tried the PC-98 preset and it works fine as far as resolution goes.

I also tried the HDR preset as you suggested and it does look quite nice. Here is the VGA one in HDR. There is a lot of background light in my room and is being reflected on the screen.

And here is the PC-98 shader in SDR

I would not mind an HDR version of the PC-98 shader! Although I do find the PC-98 to be a little too blurry when it comes to text.

I also wonder if there is a recommended “universal shader”? I usually like to just pick one shader and stick with that for everything.

Thanks for testing and for the photos, they look great! You’re right about the PC-98 text, that was my mistake: the preset drew it through a TV’s video amplifier, which smears 640-dot text, while a PC-98 monitor was a computer monitor built for sharp kanji. Fixed in v1.11.1: systems/pc-98 now uses the PC monitor model you liked, so the text is sharp, and for HDR you can use hdr/curved/pc-monitor-vga (it’s the same picture).

A universal shader: not really, because each system was played on a different screen (a TV over composite, a computer monitor, an Amiga monitor). But you can make it “set and forget”: load the right preset once per core and use Shaders → Save → Save Core Preset , and every system starts with its own. If you want just one for all consoles, consumer-tv-scart-rgb is the cleanest all-rounder, with pc-monitor-vga for computers.

1 Like

Thank you for the update!

Out of all the VGA presets, VGA-GOOD might be the best middle ground. The default VGA looks a little too blurry while the premium and extreme are too sharp and causes eye-strain.

Here is VGA-GOOD in HDR. Text looks nice!

2 Likes

Finished the game with the HDR preset. The colors look great.

1 Like
Here is the log
[INFO] RetroArch 1.22.2 (Git 69a4f0ea1e)
[INFO] === Build =======================================
[INFO] CPU Model Name: Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
[INFO] Capabilities: MMX MMXEXT SSE SSE2 SSE3 SSSE3 SSE4 SSE42 AES AVX AVX2 
[INFO] Version: 1.22.2
[INFO] Git: 69a4f0ea1e
[INFO] Built: Aug  5 2026
[INFO] =================================================
[INFO] [Input] Found input driver: "udev".
[INFO] [Environ] SET_PIXEL_FORMAT: RGB565.
[INFO] [Core] Version of libretro API: 1, Compiled against API: 1
[INFO] [Core] Geometry: 320x240, Aspect: 1.333, FPS: 60.00, Sample rate: 48000.00 Hz.
[INFO] [Video] Set video size to: 960x720.
[ERROR] [Wayland] Failed to connect to Wayland server.
[INFO] [GLX] GLX_EXT_swap_control_tear supported.
[INFO] [GLCore] Found GL context: "x".
[INFO] [GLCore] Detecting screen resolution: 3840x1080.
[DEBUG] [GLX] X = 0, Y = 0, W = 960, H = 720.
[INFO] [GLX] Creating context for requested version 3.2.
[INFO] [GLX] Found swap function: glXSwapIntervalEXT.
[INFO] [GLCore] Vendor: Intel, Renderer: Mesa Intel(R) HD Graphics 4600 (HSW GT2).
[INFO] [GLCore] Version: 4.6 (Core Profile) Mesa 26.2.4-arch1.1.
[INFO] [GLCore] Using resolution 960x720.
[DEBUG] [udev] Adding devices of type 0 -> "ID_INPUT_KEY".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.0/0003:04D9:A12A.0001/input/input2".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.0/0003:04D9:A12A.0001/input/input2/event2".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input4".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input4/event4".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input5".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input5/event5".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input7".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input7/event7".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.7/1-1.7:1.1/0003:1038:1824.0006/input/input9".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.7/1-1.7:1.1/0003:1038:1824.0006/input/input9/event9".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/acpi.video_bus.0/input/input19".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/acpi.video_bus.0/input/input19/event19".
[DEBUG] [udev] Adding device (t0) "/sys/devices/platform/LNXPWRBN:00/input/input1".
[DEBUG] [udev] Adding device (t0) "/sys/devices/platform/LNXPWRBN:00/input/input1/event1".
[DEBUG] [udev] Adding device (t0) "/sys/devices/platform/PNP0C0C:00/input/input0".
[DEBUG] [udev] Adding device (t0) "/sys/devices/platform/PNP0C0C:00/input/input0/event0".
[DEBUG] [udev] Adding device (t0) "/sys/devices/platform/eeepc-wmi/input/input23".
[DEBUG] [udev] Adding device (t0) "/sys/devices/platform/eeepc-wmi/input/input23/event23".
[DEBUG] [udev] Adding devices of type 1 -> "ID_INPUT_MOUSE".
[DEBUG] [udev] Adding device (t1) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input3".
[DEBUG] [udev] Adding device (t1) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input3/event3".
[DEBUG] [udev] Adding device (t1) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input3/mouse0".
[DEBUG] [udev] Adding device (t1) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.7/1-1.7:1.0/0003:1038:1824.0005/input/input8".
[DEBUG] [udev] Adding device (t1) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.7/1-1.7:1.0/0003:1038:1824.0005/input/input8/event8".
[DEBUG] [udev] Adding device (t1) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.7/1-1.7:1.0/0003:1038:1824.0005/input/input8/mouse1".
[DEBUG] [udev] Adding devices of type 2 -> "ID_INPUT_TOUCHPAD".
[INFO] [udev] Keyboard #0: "OZONE Ozone Strike Pro Spectra" (/dev/input/event2).
[INFO] [udev] Keyboard #1: "OZONE Ozone Strike Pro Spectra System Control" (/dev/input/event4).
[INFO] [udev] Keyboard #2: "OZONE Ozone Strike Pro Spectra Consumer Control" (/dev/input/event5).
[INFO] [udev] Keyboard #3: "OZONE Ozone Strike Pro Spectra Keyboard" (/dev/input/event7).
[INFO] [udev] Keyboard #4: "SteelSeries SteelSeries Rival 3 Keyboard" (/dev/input/event9).
[INFO] [udev] Keyboard #5: "Video Bus" (/dev/input/event19).
[INFO] [udev] Keyboard #6: "Power Button" (/dev/input/event1).
[INFO] [udev] Keyboard #7: "Power Button" (/dev/input/event0).
[INFO] [udev] Keyboard #8: "Eee PC WMI hotkeys" (/dev/input/event23).
[INFO] [udev] Mouse/Touch #0: "OZONE Ozone Strike Pro Spectra Mouse" (REL) /dev/input/event3.
[INFO] [udev] Mouse/Touch #1: "SteelSeries SteelSeries Rival 3" (REL) /dev/input/event8.
[DEBUG] [udev] Couldn't open any joypads. Are permissions set correctly for /dev/input/event* and /run/udev/?
[INFO] [Input] Found joypad driver: "udev".
[INFO] [GLCore] Using Slang shader backend.
[INFO] [GLCore] Loading stock shader.
[INFO] [GLCore] Building pass #0 (N/A)
[INFO] [GLCore] Not using frame history.
[INFO] [GLCore] Not using framebuffer feedback.
[INFO] [DBus] Suspended screensaver via DBus.
[INFO] [Video] Found display server: "x11".
[INFO] [Audio] Set audio input rate to: 48000.00 Hz.
[DEBUG] [PulseAudio] Sink detected: alsa_output.pci-0000_00_1b.0.analog-stereo.
[INFO] [PulseAudio] Requested 24576 bytes buffer, got 18432.
[INFO] [Audio] Started synchronous audio driver.
[INFO] [Microphone] Initialized microphone driver.
[INFO] [Display] Found display driver: "glcore".
[INFO] [NetCMD] bringing_up_command_interface_at_port 55355.
[INFO] [Playlist] Loading favorites file: "/home/koko/.config/retroarch/playlists/builtin/content_favorites.lpl".
[INFO] [Playlist] Loading history file: "/home/koko/.config/retroarch/playlists/builtin/content_history.lpl".
[INFO] [Playlist] Loading history file: "/home/koko/.config/retroarch/playlists/builtin/content_image_history.lpl".
[INFO] [Playlist] Loading history file: "/home/koko/.config/retroarch/playlists/builtin/content_music_history.lpl".
[INFO] [Playlist] Loading history file: "/home/koko/.config/retroarch/playlists/builtin/content_video_history.lpl".
[DEBUG] [Audio] Stopped audio driver "pulse".
[INFO] [Core] Using content: "/mnt/nas.crypt/Giochi/roms/Megadrive - nointro/Sonic The Hedgehog (USA, Europe).zip#Sonic The Hedgehog (USA, Europe).md".
[INFO] [Core] Unloading core...
[INFO] [Core] Unloading core symbols...
[INFO] [XINERAMA] Xinerama version: 1.1.
[INFO] [XINERAMA] Xinerama screens: 2.
[INFO] [XINERAMA] Saved monitor #0.
[DEBUG] [Video] Does not have enough samples for monitor refresh rate estimation. Requires to run for at least 4096 frames.
[INFO] RetroArch 1.22.2 (Git 69a4f0ea1e)
[INFO] === Build =======================================
[INFO] CPU Model Name: Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
[INFO] Capabilities: MMX MMXEXT SSE SSE2 SSE3 SSSE3 SSE4 SSE42 AES AVX AVX2 
[INFO] Version: 1.22.2
[INFO] Git: 69a4f0ea1e
[INFO] Built: Aug  5 2026
[INFO] =================================================
[INFO] [Input] Found input driver: "udev".
[INFO] [Core] Loading dynamic libretro core from: "/home/koko/.config/retroarch/cores/genesis_plus_gx_libretro.so".
[INFO] [Override] Redirecting save file to "/home/koko/.config/retroarch/saves/Sonic The Hedgehog (USA, Europe).srm".
[INFO] [Override] Redirecting save state to "/home/koko/.config/retroarch/states/Sonic The Hedgehog (USA, Europe).state".
[INFO] [Environ] GET_CORE_OPTIONS_VERSION.
[INFO] [Environ] GET_LANGUAGE: "0".
[INFO] [Environ] SET_CORE_OPTIONS_V2_INTL.
[DEBUG] [Environ] SET_CORE_OPTIONS_DISPLAY: genesis_plus_gx_show_advanced_audio_settings = hidden
[INFO] [Environ] SET_CONTROLLER_INFO.
[INFO] [Environ] SET_INPUT_DESCRIPTORS.
[INFO] [Environ] SET_CONTENT_INFO_OVERRIDE.
[INFO] [Content Override] File Extension: 'mdx' - need_fullpath: FALSE, persistent_data: FALSE
[INFO] [Content Override] File Extension: ' md' - need_fullpath: FALSE, persistent_data: FALSE
[INFO] [Content Override] File Extension: 'bin' - need_fullpath: FALSE, persistent_data: FALSE
[INFO] [Content Override] File Extension: 'smd' - need_fullpath: FALSE, persistent_data: FALSE
[INFO] [Content Override] File Extension: 'gen' - need_fullpath: FALSE, persistent_data: FALSE
[INFO] [Content Override] File Extension: 'bms' - need_fullpath: FALSE, persistent_data: FALSE
[INFO] [Content Override] File Extension: 'sms' - need_fullpath: FALSE, persistent_data: FALSE
[INFO] [Content Override] File Extension: ' gg' - need_fullpath: FALSE, persistent_data: FALSE
[INFO] [Content Override] File Extension: ' sg' - need_fullpath: FALSE, persistent_data: FALSE
[INFO] [Content Override] File Extension: '68k' - need_fullpath: FALSE, persistent_data: FALSE
[INFO] [Content Override] File Extension: 'sgd' - need_fullpath: FALSE, persistent_data: FALSE
[INFO] [Environ] GET_VFS_INTERFACE. Core requested version >= V2, providing V3.
[INFO] [Environ] GET_LED_INTERFACE.
[INFO] [Environ] SET_PERFORMANCE_LEVEL: 1.
[INFO] [Environ] GET_LOG_INTERFACE.
[INFO] [Environ] SET_PERFORMANCE_LEVEL: 7.
[INFO] [Environ] SET_SERIALIZATION_QUIRKS.
[INFO] [Environ] SET_DISK_CONTROL_INTERFACE.
[INFO] [Content] Loading content file: "/mnt/nas.crypt/Giochi/roms/Megadrive - nointro/Sonic The Hedgehog (USA, Europe).zip#Sonic The Hedgehog (USA, Europe).md".
[INFO] [Content] CRC32: 0xf9394e97.
[INFO] [Environ] GET_GAME_INFO_EXT.
[INFO] [Environ] SET_PIXEL_FORMAT: RGB565.
[libretro INFO] Frontend supports RGB565 - will use that instead of XRGB1555.
[INFO] [Environ] GET_SYSTEM_DIRECTORY: "/home/koko/.config/retroarch/system".
[INFO] [Environ] GET_SAVE_DIRECTORY: "/home/koko/.config/retroarch/saves".
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_system_bram = "per bios"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_cart_size = "4meg"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_cart_bram = "per cart"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_system_hw = "auto"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_bios = "disabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_region_detect = "auto"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_vdp_mode = "auto"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_force_dtack = "enabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_addr_error = "enabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_cd_latency = "enabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_cd_precache = "disabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_add_on = "auto"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_lock_on = "disabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_ym2413 = "auto"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_ym2413_core = "mame"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_sound_output = "stereo"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_psg_preamp = "150"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_fm_preamp = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_cdda_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_pcm_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_audio_filter = "disabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_lowpass_range = "60"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_audio_eq_low = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_audio_eq_mid = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_audio_eq_high = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_ym2612 = "mame (ym2612)"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_frameskip = "disabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_frameskip_threshold = "33"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_blargg_ntsc_filter = "disabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_lcd_filter = "disabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_overscan = "disabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_gg_extra = "disabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_aspect_ratio = "4:3"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_render = "single field"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_gun_cursor = "disabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_gun_input = "lightgun"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_invert_mouse = "disabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_left_border = "left border"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_overclock = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_no_sprite_limit = "disabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_enhanced_vscroll = "disabled"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_enhanced_vscroll_limit = "8"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_psg_channel_0_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_psg_channel_1_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_psg_channel_2_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_psg_channel_3_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_md_channel_0_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_md_channel_1_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_md_channel_2_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_md_channel_3_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_md_channel_4_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_md_channel_5_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_sms_fm_channel_0_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_sms_fm_channel_1_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_sms_fm_channel_2_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_sms_fm_channel_3_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_sms_fm_channel_4_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_sms_fm_channel_5_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_sms_fm_channel_6_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_sms_fm_channel_7_volume = "100"
[DEBUG] [Environ] GET_VARIABLE: genesis_plus_gx_sms_fm_channel_8_volume = "100"
[INFO] [Environ] SET_DISK_CONTROL_INTERFACE.
[INFO] [Environ] SET_AUDIO_BUFFER_STATUS_CALLBACK.
[DEBUG] [State] Save state scanning finished, used slots (in range): 6 (5), max:994, load index 3, gap index 4, delete index 5.
[INFO] [State] found_last_state_slot: #3.
[INFO] [SRAM] Skipping SRAM load.
[INFO] [Core] Version of libretro API: 1, Compiled against API: 1
[INFO] [Core] Geometry: 256x192, Aspect: 1.333, FPS: 59.92, Sample rate: 44100.00 Hz.
[INFO] [Video] Set video size to: 768x576.
[ERROR] [Wayland] Failed to connect to Wayland server.
[INFO] [GLX] GLX_EXT_swap_control_tear supported.
[INFO] [GLCore] Found GL context: "x".
[INFO] [GLCore] Detecting screen resolution: 3840x1080.
[DEBUG] [GLX] X = 0, Y = 0, W = 768, H = 576.
[INFO] [GLX] Creating context for requested version 3.2.
[INFO] [GLX] Found swap function: glXSwapIntervalEXT.
[INFO] [GLCore] Vendor: Intel, Renderer: Mesa Intel(R) HD Graphics 4600 (HSW GT2).
[INFO] [GLCore] Version: 4.6 (Core Profile) Mesa 26.2.4-arch1.1.
[INFO] [GLCore] Using resolution 768x576.
[DEBUG] [udev] Adding devices of type 0 -> "ID_INPUT_KEY".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.0/0003:04D9:A12A.0001/input/input2".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.0/0003:04D9:A12A.0001/input/input2/event2".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input4".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input4/event4".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input5".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input5/event5".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input7".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input7/event7".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.7/1-1.7:1.1/0003:1038:1824.0006/input/input9".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.7/1-1.7:1.1/0003:1038:1824.0006/input/input9/event9".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/acpi.video_bus.0/input/input19".
[DEBUG] [udev] Adding device (t0) "/sys/devices/pci0000:00/acpi.video_bus.0/input/input19/event19".
[DEBUG] [udev] Adding device (t0) "/sys/devices/platform/LNXPWRBN:00/input/input1".
[DEBUG] [udev] Adding device (t0) "/sys/devices/platform/LNXPWRBN:00/input/input1/event1".
[DEBUG] [udev] Adding device (t0) "/sys/devices/platform/PNP0C0C:00/input/input0".
[DEBUG] [udev] Adding device (t0) "/sys/devices/platform/PNP0C0C:00/input/input0/event0".
[DEBUG] [udev] Adding device (t0) "/sys/devices/platform/eeepc-wmi/input/input23".
[DEBUG] [udev] Adding device (t0) "/sys/devices/platform/eeepc-wmi/input/input23/event23".
[DEBUG] [udev] Adding devices of type 1 -> "ID_INPUT_MOUSE".
[DEBUG] [udev] Adding device (t1) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input3".
[DEBUG] [udev] Adding device (t1) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input3/event3".
[DEBUG] [udev] Adding device (t1) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.4/1-1.4:1.2/0003:04D9:A12A.0003/input/input3/mouse0".
[DEBUG] [udev] Adding device (t1) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.7/1-1.7:1.0/0003:1038:1824.0005/input/input8".
[DEBUG] [udev] Adding device (t1) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.7/1-1.7:1.0/0003:1038:1824.0005/input/input8/event8".
[DEBUG] [udev] Adding device (t1) "/sys/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1.7/1-1.7:1.0/0003:1038:1824.0005/input/input8/mouse1".
[DEBUG] [udev] Adding devices of type 2 -> "ID_INPUT_TOUCHPAD".
[INFO] [udev] Keyboard #0: "OZONE Ozone Strike Pro Spectra" (/dev/input/event2).
[INFO] [udev] Keyboard #1: "OZONE Ozone Strike Pro Spectra System Control" (/dev/input/event4).
[INFO] [udev] Keyboard #2: "OZONE Ozone Strike Pro Spectra Consumer Control" (/dev/input/event5).
[INFO] [udev] Keyboard #3: "OZONE Ozone Strike Pro Spectra Keyboard" (/dev/input/event7).
[INFO] [udev] Keyboard #4: "SteelSeries SteelSeries Rival 3 Keyboard" (/dev/input/event9).
[INFO] [udev] Keyboard #5: "Video Bus" (/dev/input/event19).
[INFO] [udev] Keyboard #6: "Power Button" (/dev/input/event1).
[INFO] [udev] Keyboard #7: "Power Button" (/dev/input/event0).
[INFO] [udev] Keyboard #8: "Eee PC WMI hotkeys" (/dev/input/event23).
[INFO] [udev] Mouse/Touch #0: "OZONE Ozone Strike Pro Spectra Mouse" (REL) /dev/input/event3.
[INFO] [udev] Mouse/Touch #1: "SteelSeries SteelSeries Rival 3" (REL) /dev/input/event8.
[DEBUG] [udev] Couldn't open any joypads. Are permissions set correctly for /dev/input/event* and /run/udev/?
[INFO] [Input] Found joypad driver: "udev".
[INFO] [GLCore] Using Slang shader backend.
[DEBUG] [Shaders] Load parameter value: "LR_CONSOLE" = 0.000000.
[DEBUG] [Shaders] Load parameter value: "LR_NORM" = 0.000000.
[DEBUG] [Shaders] Load parameter value: "LR_CABLE" = 3.000000.
[DEBUG] [Shaders] Load parameter value: "LR_COMB" = 0.000000.
[DEBUG] [Shaders] Load parameter value: "LR_YTRAP" = 0.750000.
[DEBUG] [Shaders] Load parameter value: "LR_SHARP" = 0.100000.
[DEBUG] [Shaders] Load parameter value: "LR_SAT" = 1.120000.
[DEBUG] [Shaders] Load parameter value: "LR_TINT" = 0.000000.
[DEBUG] [Shaders] Load parameter value: "LR_DEMOD" = 0.000000.
[DEBUG] [Shaders] Load parameter value: "LR_BRIGHT" = 0.000000.
[DEBUG] [Shaders] Load parameter value: "LR_CONTRAST" = 1.050000.
[DEBUG] [Shaders] Load parameter value: "LR_NOISE" = 0.000000.
[DEBUG] [Shaders] Load parameter value: "LR_STEADY" = 1.000000.
[DEBUG] [Shaders] Load parameter value: "LR_SIG_LO" = 0.200000.
[DEBUG] [Shaders] Load parameter value: "LR_SIG_HI" = 0.420000.
[DEBUG] [Shaders] Load parameter value: "LR_HFOCUS" = 0.450000.
[DEBUG] [Shaders] Load parameter value: "LR_GAMMA" = 2.400000.
[DEBUG] [Shaders] Load parameter value: "LR_PERSIST" = 0.050000.
[DEBUG] [Shaders] Load parameter value: "LR_CONV" = 0.250000.
[DEBUG] [Shaders] Load parameter value: "LR_MASK_TYPE" = 2.000000.
[DEBUG] [Shaders] Load parameter value: "LR_MASK_STR" = 0.500000.
[DEBUG] [Shaders] Load parameter value: "LR_MASK_TRIADS" = 470.000000.
[DEBUG] [Shaders] Load parameter value: "LR_WHITE" = 6500.000000.
[DEBUG] [Shaders] Load parameter value: "LR_PHOS" = 3.000000.
[DEBUG] [Shaders] Load parameter value: "LR_CURV_X" = 0.035000.
[DEBUG] [Shaders] Load parameter value: "LR_CURV_Y" = 0.045000.
[DEBUG] [Shaders] Load parameter value: "LR_BEND" = 0.300000.
[DEBUG] [Shaders] Load parameter value: "LR_CORNER" = 0.045000.
[DEBUG] [Shaders] Load parameter value: "LR_GLOW" = 0.060000.
[DEBUG] [Shaders] Load parameter value: "LR_GLOW_SIZE" = 0.500000.
[DEBUG] [Shaders] Load parameter value: "LR_VIGNETTE" = 0.250000.
[DEBUG] [Shaders] Load parameter value: "LR_OVERSCAN" = 0.100000.
[DEBUG] [Shaders] Load parameter value: "LR_AMBIENT" = 0.002000.
[DEBUG] [Shaders] Load parameter value: "LR_MON_MM" = 1.000000.
[DEBUG] [Shaders] Load parameter value: "LR_MON_SIZE" = 14.000000.
[DEBUG] [Shaders] Load parameter value: "LR_MON_PITCH" = 0.420000.
[DEBUG] [Shaders] Load parameter value: "LR_MON_SPOT_LO" = 0.280000.
[DEBUG] [Shaders] Load parameter value: "LR_MON_SPOT_HI" = 0.650000.
[DEBUG] [Shaders] Load parameter value: "LR_MON_CORNER" = 1.500000.
[INFO] [Slang] Compiling shader: "/koko/tmp/lola-retro/shaders/lola-retro/shaders/native.slang".
[INFO] [GLCore] Using render target format R16G16B16A16_SFLOAT for pass output #0.
[INFO] [Slang] Compiling shader: "/koko/tmp/lola-retro/shaders/lola-retro/shaders/encode.slang".
[INFO] [GLCore] Using render target format R16G16B16A16_SFLOAT for pass output #1.
[INFO] [Slang] Compiling shader: "/koko/tmp/lola-retro/shaders/lola-retro/shaders/decode.slang".
[INFO] [GLCore] Using render target format R16G16B16A16_SFLOAT for pass output #2.
[INFO] [Slang] Compiling shader: "/koko/tmp/lola-retro/shaders/lola-retro/shaders/glow-h.slang".
[INFO] [GLCore] Using render target format R16G16B16A16_SFLOAT for pass output #3.
[INFO] [Slang] Compiling shader: "/koko/tmp/lola-retro/shaders/lola-retro/shaders/glow-v.slang".
[INFO] [GLCore] Using render target format R16G16B16A16_SFLOAT for pass output #4.
[INFO] [Slang] Compiling shader: "/koko/tmp/lola-retro/shaders/lola-retro/shaders/beam.slang".
[INFO] [GLCore] Using render target format R16G16B16A16_SFLOAT for pass output #5.
[INFO] [Slang] Compiling shader: "/koko/tmp/lola-retro/shaders/lola-retro/shaders/crt.slang".
[INFO] [GLCore] Using render target format R16G16B16A16_SFLOAT for pass output #6.
[INFO] [Slang] Compiling shader: "/koko/tmp/lola-retro/shaders/lola-retro/shaders/present.slang".
[INFO] [GLCore] Using render target format R8G8B8A8_UNORM for pass output #7.
[INFO] [GLCore] Building pass #0 (N/A)
[INFO] [GLCore] Building pass #1 (LR_Signal)
[INFO] [GLCore] Building pass #2 (LR_Decoded)
[INFO] [GLCore] Building pass #3 (N/A)
[INFO] [GLCore] Building pass #4 (LR_Glow)
[INFO] [GLCore] Building pass #5 (LR_Beam)
[INFO] [GLCore] Building pass #6 (LR_CRT)
[INFO] [GLCore] Building pass #7 (N/A)
[INFO] [GLCore] Building pass #8 (N/A)
[INFO] [GLCore] Not using frame history.
[INFO] [GLCore] Using framebuffer feedback for pass #6.
[INFO] [DBus] Suspended screensaver via DBus.
[INFO] [Video] Found display server: "x11".
[INFO] [Audio] Set audio input rate to: 44153.54 Hz.
[DEBUG] [PulseAudio] Sink detected: alsa_output.pci-0000_00_1b.0.analog-stereo.
[INFO] [PulseAudio] Requested 24576 bytes buffer, got 18432.
[INFO] [Audio] Started synchronous audio driver.
[INFO] [Microphone] Initialized microphone driver.
[INFO] [Display] Found display driver: "glcore".
[INFO] [NetCMD] bringing_up_command_interface_at_port 55355.
[INFO] [Environ] SET_MINIMUM_AUDIO_LATENCY.
[DEBUG] [Shaders] Load parameter value: "LR_CONSOLE" = 0.000000.
[DEBUG] [Shaders] Load parameter value: "LR_NORM" = 0.000000.
[DEBUG] [Shaders] Load parameter value: "LR_CABLE" = 3.000000.
[DEBUG] [Shaders] Load parameter value: "LR_COMB" = 0.000000.
[DEBUG] [Shaders] Load parameter value: "LR_YTRAP" = 0.750000.
[DEBUG] [Shaders] Load parameter value: "LR_SHARP" = 0.100000.
[DEBUG] [Shaders] Load parameter value: "LR_SAT" = 1.120000.
[DEBUG] [Shaders] Load parameter value: "LR_TINT" = 0.000000.
[DEBUG] [Shaders] Load parameter value: "LR_DEMOD" = 0.000000.
[DEBUG] [Shaders] Load parameter value: "LR_BRIGHT" = 0.000000.
[DEBUG] [Shaders] Load parameter value: "LR_CONTRAST" = 1.050000.
[DEBUG] [Shaders] Load parameter value: "LR_NOISE" = 0.000000.
[DEBUG] [Shaders] Load parameter value: "LR_STEADY" = 1.000000.
[DEBUG] [Shaders] Load parameter value: "LR_SIG_LO" = 0.200000.
[DEBUG] [Shaders] Load parameter value: "LR_SIG_HI" = 0.420000.
[DEBUG] [Shaders] Load parameter value: "LR_HFOCUS" = 0.450000.
[DEBUG] [Shaders] Load parameter value: "LR_GAMMA" = 2.400000.
[DEBUG] [Shaders] Load parameter value: "LR_PERSIST" = 0.050000.
[DEBUG] [Shaders] Load parameter value: "LR_CONV" = 0.250000.
[DEBUG] [Shaders] Load parameter value: "LR_MASK_TYPE" = 2.000000.
[DEBUG] [Shaders] Load parameter value: "LR_MASK_STR" = 0.500000.
[DEBUG] [Shaders] Load parameter value: "LR_MASK_TRIADS" = 470.000000.
[DEBUG] [Shaders] Load parameter value: "LR_WHITE" = 6500.000000.
[DEBUG] [Shaders] Load parameter value: "LR_PHOS" = 3.000000.
[DEBUG] [Shaders] Load parameter value: "LR_CURV_X" = 0.035000.
[DEBUG] [Shaders] Load parameter value: "LR_CURV_Y" = 0.045000.
[DEBUG] [Shaders] Load parameter value: "LR_BEND" = 0.300000.
[DEBUG] [Shaders] Load parameter value: "LR_CORNER" = 0.045000.
[DEBUG] [Shaders] Load parameter value: "LR_GLOW" = 0.060000.
[DEBUG] [Shaders] Load parameter value: "LR_GLOW_SIZE" = 0.500000.
[DEBUG] [Shaders] Load parameter value: "LR_VIGNETTE" = 0.250000.
[DEBUG] [Shaders] Load parameter value: "LR_OVERSCAN" = 0.100000.
[DEBUG] [Shaders] Load parameter value: "LR_AMBIENT" = 0.002000.
[DEBUG] [Shaders] Load parameter value: "LR_MON_MM" = 1.000000.
[DEBUG] [Shaders] Load parameter value: "LR_MON_SIZE" = 14.000000.
[DEBUG] [Shaders] Load parameter value: "LR_MON_PITCH" = 0.420000.
[DEBUG] [Shaders] Load parameter value: "LR_MON_SPOT_LO" = 0.280000.
[DEBUG] [Shaders] Load parameter value: "LR_MON_SPOT_HI" = 0.650000.
[DEBUG] [Shaders] Load parameter value: "LR_MON_CORNER" = 1.500000.
[INFO] [Qt] Reloading shader parameters.
[INFO] [Playlist] Loading favorites file: "/home/koko/.config/retroarch/playlists/builtin/content_favorites.lpl".
[INFO] [Playlist] Loading history file: "/home/koko/.config/retroarch/playlists/builtin/content_history.lpl".
[INFO] [Playlist] Loading history file: "/home/koko/.config/retroarch/playlists/builtin/content_image_history.lpl".
[INFO] [Playlist] Loading history file: "/home/koko/.config/retroarch/playlists/builtin/content_music_history.lpl".
[INFO] [Playlist] Loading history file: "/home/koko/.config/retroarch/playlists/builtin/content_video_history.lpl".
[DEBUG] [Audio] Started audio driver "pulse" (is_shutdown=false)
[INFO] [Playlist] Written to file: "/home/koko/.config/retroarch/playlists/builtin/content_history.lpl".
[INFO] [Environ] SET_GEOMETRY: 320x224, Aspect: 1.333.
^C[INFO] [Config] Saved config to "/home/koko/.config/retroarch/retroarch.cfg".
[DEBUG] [Audio] Started audio driver "pulse" (is_shutdown=true)
[INFO] [Runtime] Content ran for a total of: 00 hours, 00 minutes, 03 seconds.
[INFO] [Runtime] Saving runtime log file: "/home/koko/.config/retroarch/playlists/logs/Genesis Plus GX/Sonic The Hedgehog (USA, Europe).lrtl".
[INFO] [Core] Unloading game...
[DEBUG] [Audio] Stopped audio driver "pulse".
[INFO] [Core] Unloading core...
[INFO] [Core] Unloading core symbols...
[INFO] [Core] Saved core options file to "/home/koko/.config/retroarch/config/Genesis Plus GX/Genesis Plus GX.opt".
[INFO] [XINERAMA] Xinerama version: 1.1.
[INFO] [XINERAMA] Xinerama screens: 2.
[INFO] [XINERAMA] Saved monitor #0.
[DEBUG] [Video] Does not have enough samples for monitor refresh rate estimation. Requires to run for at least 4096 frames.

It happens on other cores too, this is Genesis Plus DX running Sonic:

Screenshot_20261021_125218

Why do you think the PUAE overscan to be relevant ?