Check the ๐ป Hardware Compatibility list to confirm that your dGPU, APU, and setup are compatible with the CRT Script.
Attempting to install on unsupported hardware may result in display issues or failure to output a proper CRT signal.
๐ Full Documentation
Read the Wiki for detailed usage and configuration:
๐ Batocera-CRT-Script Wiki
โก๏ธ Using a PC CRT Monitor?
If you are setting up Batocera with a PC CRT (31 kHz VGA/SVGA), follow this guide instead of the full 15 kHz workflow:
๐ PC CRT's & Setup Instructions
๐ฅ Install the Script
Follow the full setup guide here:
๐ Installation Instructions
๐ฌ Need Help?
Join the discussion on Discord:
๐ Discord: ##crt-x86_64
This project would not have been possible without the help of many skilled and passionate individuals:
- ZFEbHVUE โ Lead developer and main tester
- Rion โ CRT wizard and 15kHz support guru
- myzar โ NVIDIA driver and compatibility insights
- jfroco โ Early CRT output work for Batocera
- rtissera โ His knowledge, enthusiasm, and willingness made it possible to add 15kHz patches into Batocera
- Substring โ Maintainer of GroovyArcade and KMS/SDL improvements
- Calamity โ Develops and maintains the 15kHz Linux kernel patches, adding support for new AMD dGPUs/APUs and creating tools like CRT_EmuDriver, GroovyMAME, and Switchres
- D0023R (Doozer) โ Maintains the linux_kernel_15khz repository, ensuring Calamityโs patches stay up-to-date with the latest Linux kernel versions
- dmanlcf โ Maintains 15kHz kernel patches for Batocera
- Sirmagb โ Geometry tool idea used in
crt.sh - Yavimaya โ Code contributions
- fishcu โ Shader author for
pixel_aa_xform.slangpandbox_filter_aa_xform.slangp
- GecKoTDF โ Hands-on CRT hardware testing
- Sirmagb โ Continued validation and feedback
- krahsdevil โ Created EmulationStation artwork and assets
- MarcoRetro โ Provided key insights on RGB mod behavior and adapter compatibility
This Bash script enables true CRT support in Batocera, including 15kHz, 25kHz, and 31kHz video output.
Batocera does not natively support CRT displays โ this script adds the full support needed for proper signal generation and resolution switching.
-
๐น๏ธ RetroArch (Libretro cores) and GroovyMAME are preconfigured to use the Switchres API for automatic resolution switching.
-
๐ Modeline Switching
Fully integrates the Switchres tool (not the API) to handle resolution switching โ bypassing xrandr. -
๐ง EDID & APU Detection
- Automatically detects AMD APUs when using the CableDeconn DP2VGA (listed on the Batocera Wiki).
- Generates a custom EDID based on your selected monitor profile.
-
๐ videomodes.conf Integration
Resolutions are read fromvideomodes.conf, but Switchres handles switching, not xrandr.
You may manually add resolutions, but be sure to test them with your monitor profile first.
320x240p as a boot resolution is not officially supported,
as EmulationStation themes do not currently support it in Batocera.
-
Comes with 29 pre-configured monitor profiles supported by Switchres.
-
Each profile includes 50+ hand-picked resolutions, optimized for:
- ๐ฎ Standalone Emulators (e.g., PCSX2, Dolphin)
- ๐ง Native Linux Games
- ๐ฆ Non-Libretro Ports
- ๐ท Wine, Flatpak & Steam Games
๐น๏ธ RetroArch (Libretro cores) and GroovyMAME are preconfigured to use the Switchres API for automatic resolution switching.
These are the supported monitor profiles used in switchres.ini.
Each profile defines timings optimized for a specific CRT standard, arcade monitor, or PC display.
| Profile | Description |
|---|---|
arcade_15 |
โ Recommended for most consumer CRT TVs โ safe and widely compatible |
generic_15 |
โ Recommended fallback for general CRT use |
ntsc |
Only for CRT chassis that support 59.94Hz only (rare) |
pal |
Only for CRT chassis that support 50.00Hz only (rare) |
| Category | Profile Names | Notes |
|---|---|---|
| Fixed Frequency (15kHz) | arcade_15, arcade_15ex |
Common for arcade cabinets using 15kHz monitors |
| Fixed Frequency (25/31kHz) | arcade_25, arcade_31 |
Used for mid- and high-res arcade monitors |
| Multisync (15/25/31kHz) | arcade_15_25, arcade_15_31, arcade_15_25_31 |
For multisync arcade monitors supporting all bands |
| Category | Profile Names | Notes |
|---|---|---|
| VESA GTF Modes | vesa_480, vesa_600, vesa_768, vesa_1024 |
Mimics standard VESA timings |
| 120Hz PC Modes | pc_31_120, pc_70_120 |
For PC CRT monitors capable of 120Hz |
| Manufacturer | Models (Profile Names) |
|---|---|
| Hantarex | h9110, polo, pstar |
| Wells Gardner | k7000, k7131, d9200, d9400, d9800 |
| Makvision | m2929 |
| Wei-Ya | m3129 |
| Nanao | ms2930, ms929 |
| Rodotron | r666b |
- ๐ ArcadeControls Forum Thread โ Monitor Timings & Switchres
- ๐ You can also search online for your specific monitor model for compatibility tips and timing suggestions.
Batocera's CRT output depends heavily on the GPU and driver capabilities. Here's what works โ and what doesnโt โ for 15.7 kHz (240p/480i) video signals.
Batocera includes the 15kHz kernel patchset, which enables full support for:
- Low-resolution video modes (e.g. 320ร240, 640ร480i)
- Custom modelines
- Interlaced output
- 15.7 kHz scanrates
This applies to both:
amdgpuandradeondrivers- Discrete GPUs (dGPUs) and APUs
๐ A curated list of supported AMD dGPUs and APUs using the AMDGPU driver is available in the wiki:
โก๏ธ Supported dGPUs & APUs
All Intel integrated GPUs โ across all generations โ are not compatible with CRT output at 15kHz due to hardcoded limitations in the Intel DRM driver (i915):
- ๐ซ Minimum dotclock limits (~25 MHz), 15kHz video modes
- ๐ซ Strict CVT/GTF-only modeline validation (non-EDID custom modelines are rejected)
- ๐ซ No legacy CRTC interfaces for timing control
- ๐ซ Tightly restricted DPLL clock generation
- ๐ซ EDID dependency, which prevents unsupported resolutions from loading
โ These are hardware and driver-level constraints, not solvable with 15kHz patches. Intel iGPUs are not supported for CRT output in Batocera.
Recommendation: Use a supported AMD GPU or APU instead.
Batocera supports NVIDIA Maxwell architecture (GeForce GTX 750 through GTX 900 series) only with the official NVIDIA proprietary drivers for 15kHz CRT output.
โน๏ธ This is the only NVIDIA setup officially supported, and it works by chance โ not by design.
There is no guarantee future NVIDIA driver updates will preserve this compatibility.
๐ A curated list of supported NVIDIA Maxwell architecture is available in the wiki:
โก๏ธ Supported NVIDIA Maxwell Cards
Some NVIDIA GPUs (pre-Maxwell) may appear to work with CRT output using the open-source nouveau driver, but:
- There is no support from the 15kHz patchset
- Success is inconsistent, and varies by card/BIOS.
๐ง These cards are not recommended, and any success is coincidental.
Recommendation: Go with AMD for proper CRT support and future-proofing. We only provide official support for NVIDIA Maxwell cards using proprietary drivers, and even that may break at any time.