Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
396 commits
Select commit Hold shift + click to select a range
bcf49a8
odroidm1: add SHAKS S6b gamepad default mapping to build-time es_inpu…
Pyohwan Aug 4, 2026
50770db
odroidm1: union /userdata/bios with NVMe via mergerfs (S20biosunion)
Pyohwan Aug 4, 2026
db4fbeb
odroidm1: switch S20biosunion from mergerfs to a plain bind mount
Pyohwan Aug 4, 2026
f890627
odroidm1: pin CPU to highperformance for psx too (same pattern as n64…
Pyohwan Aug 5, 2026
b1f1989
rk3568: disable hud_support for n64 (mangohud + mupen64plus EGL crash)
Pyohwan Aug 5, 2026
60596d0
odroidm1: pin CPU to highperformance for nds too (drastic, same pattern)
Pyohwan Aug 5, 2026
5a0742f
odroidm1: drop per-system powermode defaults, use ES's global Power M…
Pyohwan Aug 5, 2026
dfc58a3
fix(docker): preserve `HOME` through `gosu` in `entry-point.sh` (#16176)
TrickoUK Aug 5, 2026
cee69e5
sync BR for pygobject 3.56
dmanlfc Aug 6, 2026
40bf1f6
Merge pull request #16198 from dmanlfc/sync-BR-6Aug
dmanlfc Aug 6, 2026
2076729
odroidm1: fix standalone melonDS windowing (eglfs+libinput), not Wayland
Pyohwan Aug 6, 2026
cfc6624
duckstation: fall back to eglfs when neither Wayland nor X11 is present
Pyohwan Aug 6, 2026
56c0074
odroidm1: try kronos (Saturn) and libretro-melonds-ds (NDS) as altern…
Pyohwan Aug 6, 2026
afe55ed
odroidm1: disable kronos attempt for now - conflicts with mesa3d-headers
Pyohwan Aug 6, 2026
f174d64
melonds: select libinput instead of qt6wayland for odroid-m1
Pyohwan Aug 6, 2026
731d077
batocera-storage-manager: scope 'ignore forever' per-partition, requi…
Pyohwan Aug 7, 2026
41f34e4
flycast: fix standalone SDL2 video/audio driver auto-detect on boards…
Pyohwan Aug 7, 2026
9cc3c6c
fix pyright issue
dmanlfc Aug 7, 2026
219ddb6
Merge pull request #16204 from dmanlfc/fix-bezel-pyright
dmanlfc Aug 7, 2026
deeae0d
move gameforce ace back to the 6.1 kernel
dmanlfc Aug 7, 2026
391f001
Merge pull request #16205 from dmanlfc/gface-6.1
dmanlfc Aug 8, 2026
3ef0101
refactor batocera splash
dmanlfc Aug 8, 2026
9ac685e
Merge pull request #16206 from dmanlfc/refactor-splash
dmanlfc Aug 8, 2026
b353d52
nvidia driver bumps
dmanlfc Aug 8, 2026
35eb83d
Merge pull request #16207 from dmanlfc/nv-bmps-8Aug
dmanlfc Aug 8, 2026
a461f06
cemu to 7th of August version
dmanlfc Aug 8, 2026
0a8377f
Merge pull request #16208 from dmanlfc/cemu-7Aug
dmanlfc Aug 8, 2026
ee8a418
remove irrelevant package
dmanlfc Aug 8, 2026
f877edb
Merge pull request #16209 from dmanlfc/script-tweak1
dmanlfc Aug 8, 2026
bd2bc00
shadps4: update to v.0.17.0
Aug 8, 2026
b634e3a
shadps4: add .zar archive support
Aug 8, 2026
d04e1c9
Merge pull request #16210 from zognic/update-shadps4
dmanlfc Aug 8, 2026
38c32e1
fix shadps4
dmanlfc Aug 8, 2026
d8ecf91
Merge pull request #16211 from dmanlfc/shadps4-fix
dmanlfc Aug 8, 2026
bf3783c
add linux 7.1 gcc patch for sm8550
dmanlfc Aug 9, 2026
4e54789
Merge pull request #16212 from dmanlfc/sm8550-7.1.patch
dmanlfc Aug 9, 2026
a5f7e34
rpi4 patch for mesa
dmanlfc Jul 31, 2026
dae4c0a
Merge pull request #16214 from dmanlfc/rpi4-mesa
dmanlfc Aug 9, 2026
10e4169
add sm8550 tuning & fixes
dmanlfc Aug 9, 2026
1b863c0
Merge pull request #16215 from dmanlfc/sm8550-tuning
dmanlfc Aug 9, 2026
ae4f6f6
rpcs3 to v0.0.42
dmanlfc Aug 8, 2026
9bcf40a
Merge pull request #16216 from dmanlfc/rpcs3-v0.0.42
dmanlfc Aug 9, 2026
675cf93
redream to 1.5.0-1235-g506c3f1
dmanlfc Aug 9, 2026
728ecce
Merge pull request #16217 from dmanlfc/redream-1.5.0-1235-g506c3f1
dmanlfc Aug 9, 2026
eb8daed
allow mangohud in ps3
dmanlfc Aug 9, 2026
a2ef916
Merge pull request #16218 from dmanlfc/ps3-hud
dmanlfc Aug 9, 2026
4b6bff0
Merge pull request #16201 from aderumier/fix-hid-nintendo-rumble
aderumier Aug 9, 2026
370d045
tune the sm8750 & update sm6115 & sm8x50 fw
dmanlfc Aug 9, 2026
2c49f28
tune the sm8750 & update sm6115 & sm8x50 fw (#16219)
dmanlfc Aug 9, 2026
84637be
suppress the dmesg haptics spam on sm8550 & sm8750 devices
dmanlfc Aug 9, 2026
78868a7
Merge pull request #16220 from dmanlfc/sm8x50-haptics-spam
dmanlfc Aug 9, 2026
bb996ab
move hud to corner when no bezels
dmanlfc Aug 9, 2026
e757680
Merge pull request #16221 from dmanlfc/hud-16x9
dmanlfc Aug 9, 2026
9c667bd
scummvm to v2026.3.0
dmanlfc Aug 9, 2026
1c43dd4
Merge pull request #16222 from dmanlfc/scummvm-v2026.3.0
dmanlfc Aug 9, 2026
f572070
supermodel to v0.3a-20260726-git-24d2ffc
dmanlfc Aug 9, 2026
a2621af
Merge pull request #16223 from dmanlfc/sm-v0.3a-20260726-git-b7d8acd
dmanlfc Aug 9, 2026
7eb87de
add opengl es 3.0 test
dmanlfc Aug 9, 2026
d149b97
Merge pull request #16224 from dmanlfc/es-gles-3.0
dmanlfc Aug 9, 2026
0a2a2dc
batocera-system: bring forward A/B-common Kconfig gating fixes and KE…
Pyohwan Aug 10, 2026
00ced70
buildroot: bump submodule for mesa3d-headers version fix (26.1.4 -> 2…
Pyohwan Aug 10, 2026
d6c2f68
Add our own Supermodel package until OpenGL ES is hopefully accepted …
dmanlfc Aug 9, 2026
7a3f191
Merge pull request #16227 from dmanlfc/sm-es
dmanlfc Aug 10, 2026
89011b3
ooops revert files from another branch
dmanlfc Aug 10, 2026
2be22d0
Merge pull request #16228 from dmanlfc/revert-wip-files
dmanlfc Aug 10, 2026
f745ffe
fix(shadps4): build against host-protobuf and protobuf (#16230)
bryanforbes Aug 10, 2026
0c613d7
odroidm1: cap BR2_JLEVEL=8 to stop 17-way parallel g++ from OOM-killi…
Pyohwan Aug 11, 2026
741021d
bluetooth: fix the pairing stack
aderumier Aug 11, 2026
e7663df
update po
nadenislamarre Aug 11, 2026
0d805cd
configgen: inject GALLIUM_HUD=fps whenever show_fps is on, as a Mesa-…
Pyohwan Aug 11, 2026
c0d87f1
Supermodel tweaks
dmanlfc Aug 11, 2026
4ac77ea
odroidm1: default global.powermode to highperformance
Pyohwan Aug 11, 2026
ee4cad1
Merge pull request #16231 from dmanlfc/sm-tweaks
dmanlfc Aug 11, 2026
35d870a
batocera-upgrade: fix typos in help text and messages
Aug 11, 2026
81dc40a
add the render scale option for supermodel
dmanlfc Aug 12, 2026
17bf234
Merge pull request #16233 from dmanlfc/sm-scale
dmanlfc Aug 12, 2026
b90abd9
Merge pull request #16232 from zognic/upgrade-typos
dmanlfc Aug 12, 2026
c54454d
batocera-system: bring forward A/B-common Kconfig gating fixes and KE…
Pyohwan Aug 10, 2026
397b00a
buildroot: bump submodule for mesa3d-headers version fix (26.1.4 -> 2…
Pyohwan Aug 10, 2026
da6b3b6
odroidm1: cap BR2_JLEVEL=8 to stop 17-way parallel g++ from OOM-killi…
Pyohwan Aug 11, 2026
2d1a870
local.mk.example: fix KERNEL_SRCDIR path after SSD migration
Pyohwan Aug 10, 2026
71b4570
local.mk.example: fix stale panfrost-enable branch reference for track C
Pyohwan Aug 12, 2026
9013dd3
configgen: inject GALLIUM_HUD=fps whenever show_fps is on, as a Mesa-…
Pyohwan Aug 11, 2026
eb86551
odroidm1: default global.powermode to highperformance
Pyohwan Aug 11, 2026
d85e998
Fix vkquake2/pcsx2 desktop-GL blockers for GLES-only Vulkan build
Pyohwan Aug 11, 2026
bf09efa
Add RK3568 board branch to libretro-parallel-n64 - fixes x86 SSE buil…
Pyohwan Aug 11, 2026
b995fdd
Enable real PPSSPP Vulkan on RK3568 - was force-disabled via ARM_NO_V…
Pyohwan Aug 11, 2026
f076d70
pcsx2: fix ps2 default emulator + eglfs for no-compositor boards
Pyohwan Aug 12, 2026
9af63f4
dolphin: eglfs for no-compositor boards, same pattern as duckstation/…
Pyohwan Aug 12, 2026
6981a3f
odroidm1: enable PCSX2/Dolphin-standalone/parallel-n64/azahar/ppsspp …
Pyohwan Aug 12, 2026
1cd58aa
batocera-desktopapps: add ps3_psn_pkg_to_squashfs toolbox
aderumier Jun 4, 2026
4b72cbe
batocera-desktopapps: add ps4_pkg_to_zar toolbox
aderumier Aug 12, 2026
454d306
vpinball: bump deps to latest
jsm174 Aug 12, 2026
33c3e83
Merge pull request #16236 from jsm174/master
nadenislamarre Aug 12, 2026
30cae6e
refactor(bezel-overlay): make python and buildroot packages (#16229)
bryanforbes Aug 12, 2026
320b8f0
fix(supermodel): possibly unbound variables (#16238)
bryanforbes Aug 12, 2026
1ae087d
odroidm1: reintroduce labwc for track C, fix stale gbm_bo_get_fd alias
Pyohwan Aug 13, 2026
c12e978
mali-g52-odroidm1: swap blob to g29p1 for track C
Pyohwan Aug 13, 2026
cb30303
odroidm1: disable libgtk3's Wayland GDK backend on track C
Pyohwan Aug 13, 2026
74309d9
mali-g52-odroidm1: stop clobbering wayland's own libwayland-egl.so
Pyohwan Aug 13, 2026
e90bc4f
update po
nadenislamarre Aug 13, 2026
f67943f
fix rpi5 gles3 performance
dmanlfc Aug 13, 2026
c9ee8d6
Merge pull request #16239 from dmanlfc/rpi5-gles
dmanlfc Aug 13, 2026
859e5d9
Merge pull request #16235 from aderumier/ps3_ps4_toolbox
dmanlfc Aug 13, 2026
261798d
fix dmd play rust, text transparency
nadenislamarre Aug 13, 2026
d40bf7c
Merge pull request #16240 from batocera-linux/dmd-play-update-text-tr…
nadenislamarre Aug 13, 2026
a08ddc8
fix libpinmame header locations
dmanlfc Aug 13, 2026
1f5b1d2
Merge pull request #16241 from dmanlfc/fix-libpinmame
dmanlfc Aug 13, 2026
ae988bf
Original English lines editing
NotaInutilis Aug 13, 2026
5324e22
Merge pull request #16199 from aderumier/bluetooth-fix
nadenislamarre Aug 14, 2026
d25a4c8
fix kodi ratio (prevent to display bezels on kodi)
nadenislamarre Aug 14, 2026
72cd7fe
Merge pull request #16243 from batocera-linux/kodiratio
nadenislamarre Aug 14, 2026
375f15e
Merge pull request #16242 from NotaInutilis/text-edits
nadenislamarre Aug 14, 2026
48c2662
bluetooth: auto pairing: don't try to connect to already paired contr…
aderumier Aug 14, 2026
8861448
fix external outputs. declare handheld screens for docking mode.
nadenislamarre Aug 14, 2026
7265f18
sdl2: pass EGL_PLATFORM_WAYLAND_KHR for Wayland EGL display (Mali blob)
Pyohwan Aug 14, 2026
b93d99b
configgen: bind RetroArch's exit_emulator to the same button as Start
Pyohwan Aug 15, 2026
4f0d7c8
configgen: bind RetroArch's exit_emulator to the same button as Start
Pyohwan Aug 15, 2026
b24dccc
odroidm1: enable BATOCERA_VULKAN for track C - needed for ES UI optio…
Pyohwan Aug 15, 2026
a0ad43e
gpu: add vulkan-wsi-layer package - bridges g29p1 blob's KHR_display-…
Pyohwan Aug 15, 2026
38d396b
buildroot: bump submodule for the SDL2 video-vulkan gating fix (uncom…
Pyohwan Aug 15, 2026
f088699
vulkan-wsi-layer: fix real root cause of Wayland surface/swapchain fa…
Pyohwan Aug 15, 2026
c736fc6
vulkan-wsi-layer: fix vkCreateDevice failures for RetroArch/libretro …
Pyohwan Aug 15, 2026
f9a7c59
libretro-dolphin: enable Vulkan backend when BATOCERA_VULKAN is set
Pyohwan Aug 15, 2026
11f3bb9
board: disable duckstation - mesa3d Config.in gap breaks the build wi…
Pyohwan Aug 15, 2026
2bc3f55
duckstation: fix disable - a defconfig "is not set" can't override ba…
Pyohwan Aug 15, 2026
f1be9dc
duckstation: actually fix the disable - override the shared select co…
Pyohwan Aug 15, 2026
fdbd09a
batocera-system: fix Kconfig syntax error from mid-expression comments
Pyohwan Aug 15, 2026
36faefd
sdl3: don't pull in full mesa3d for Vulkan on mesa3d-headers boards
Pyohwan Aug 15, 2026
5cf49d0
dolphin-emu: switch to ROCKNIX's Wayland+Vulkan patch series on Wayla…
Pyohwan Aug 15, 2026
9fe586f
dolphin-emu: add CMAKE_POLICY_VERSION_MINIMUM for the older Wayland-c…
Pyohwan Aug 15, 2026
473abd1
dolphin-emu: fix fmt 12 compile-string API break on the Wayland-commi…
Pyohwan Aug 15, 2026
907e0dc
dolphin-emu: force the bundled Externals/fmt instead of patching for …
Pyohwan Aug 15, 2026
ebc4f86
dolphin-emu: disable ENABLE_X11 on the Wayland build (no GLX on this …
Pyohwan Aug 15, 2026
95880ef
dolphin-emu: fix missing <cstdio> include in bundled VulkanMemoryAllo…
Pyohwan Aug 15, 2026
9227718
mali-g52-odroidm1: install a Vulkan ICD manifest (was missing entirely)
Pyohwan Aug 15, 2026
e1cf403
dolphin-emu: roundtrip after the initial wl_surface commit before Vulkan
Pyohwan Aug 15, 2026
5f09242
Merge pull request #16245 from batocera-linux/fix-external-display
nadenislamarre Aug 15, 2026
0c0201e
Merge pull request #16244 from aderumier/bluetooth-fix3
nadenislamarre Aug 15, 2026
9df6495
vulkan-wsi-layer: roundtrip before surface init - fixes intermittent
Pyohwan Aug 15, 2026
835b0bc
libretro-beetle-psx: exclude the HW/GLES3 renderer on mesa3d-headers …
Pyohwan Aug 15, 2026
470be1e
board: correct stale parallel-n64 comment - it's GL-only on ARM, not …
Pyohwan Aug 15, 2026
d4ef6fe
dolphin-emu: fix standalone Wayland platform staying windowed/cropped
Pyohwan Aug 15, 2026
8c28d52
fix backglass position
nadenislamarre Aug 15, 2026
3a5bce9
labwc: force pcsx2-qt fullscreen - fixes zero-size window on launch
Pyohwan Aug 15, 2026
e71f85b
fix vpinball configgen for new vpinball version
nadenislamarre Aug 15, 2026
44e4d13
Merge pull request #16247 from batocera-linux/fixvpinball
nadenislamarre Aug 15, 2026
162d79e
Merge pull request #16246 from batocera-linux/backglass-position-fix
nadenislamarre Aug 15, 2026
fb3b104
labwc: give pcsx2-qt keyboard focus alongside ToggleFullscreen
Pyohwan Aug 16, 2026
cd2cced
pcsx2: fix Vulkan swap chain double-free + retry surface format race
Pyohwan Aug 16, 2026
399c36c
fix po issues
nadenislamarre Aug 16, 2026
ef205f6
bump es
nadenislamarre Aug 16, 2026
c11e395
ps2: add AetherSX2 as a personal-build PS2 core alongside pcsx2
Pyohwan Aug 16, 2026
d5b4943
aethersx2: fix gamepad face buttons + add gfxbackend/resolution/fps o…
Pyohwan Aug 16, 2026
c9f2788
fix backglass svg quality
nadenislamarre Aug 16, 2026
878fd8b
Merge pull request #16248 from batocera-linux/fix_backglass_svg
nadenislamarre Aug 16, 2026
e6b3345
fix Nvidia cards black screen if using picom with GLX... it's always …
dmanlfc Aug 16, 2026
bb508c4
Merge pull request #16249 from dmanlfc/nv-glx-picom
dmanlfc Aug 16, 2026
48323bd
fix backglass restart
nadenislamarre Aug 16, 2026
49e0927
saturn: fix beetle-saturn GLES link on GLES-only boards
Pyohwan Aug 16, 2026
b078fcb
supermodel doing vulkan
dmanlfc Aug 12, 2026
02479f6
Merge pull request #16250 from dmanlfc/sm-vulkan
dmanlfc Aug 16, 2026
b2c47a7
fix backglass position: make it hidden as much as possible
nadenislamarre Aug 16, 2026
e38b00f
Merge pull request #16251 from batocera-linux/fix_backglass_hidden
nadenislamarre Aug 16, 2026
b66635e
nds: switch melonDS standalone to wayland QPA for dual-screen support
Pyohwan Aug 16, 2026
8649295
perf: add frametime logging hooks for A/B/C fps benchmarking
Pyohwan Aug 16, 2026
12cb2df
batocera-system: add board-specific ODROIDM1 identity symbol
Pyohwan Aug 17, 2026
c3fafd6
configgen: scope Mali-blob HUD workarounds to this board only
Pyohwan Aug 17, 2026
43e4d65
libretro: fix Start-alone quitting mid-game on hotkey-less pads
Pyohwan Aug 17, 2026
5a10ebc
batocera-storage-manager: fix partition-scoped ignore re-detection
Pyohwan Aug 17, 2026
4117c49
odroidm1: sync syslinux.cfg fallback with config.ini/boot.cmd defaults
Pyohwan Aug 17, 2026
b761aef
docker.mk: drop comment reference to unimplemented EXTRA_SRCDIR_MOUNTS
Pyohwan Aug 17, 2026
b96cee5
batocera-system: add board-specific ODROIDM1 identity symbol
Pyohwan Aug 17, 2026
0b13878
dolphin-emu: scope the Wayland-Vulkan commit swap to this board only
Pyohwan Aug 17, 2026
4582c40
vulkan-wsi-layer: revert bring-up Debug build to Release
Pyohwan Aug 17, 2026
9131967
aethersx2: pin to a commit instead of branch HEAD, add .hash, documen…
Pyohwan Aug 17, 2026
1bc7107
labwc: merge duplicate pcsx2-qt windowRule
Pyohwan Aug 17, 2026
2170337
mali-g52-odroidm1: select the GBM DMA-BUF/format-modifier feature sym…
Pyohwan Aug 17, 2026
7fbbe9b
odroidm1: fix inaccurate comment on why rk3568/patches isn't reused, …
Pyohwan Aug 17, 2026
b9dc2aa
docker.mk: drop comment reference to unimplemented EXTRA_SRCDIR_MOUNTS
Pyohwan Aug 17, 2026
313f2bc
dosbox-x: drop duplicate --disable-avcodec flag
Pyohwan Aug 17, 2026
0513f0b
batocera-system: give BSP_ODROIDM1 identity symbol a prompt - prompt-…
Pyohwan Aug 17, 2026
c24119d
batocera-system: give BSP_ODROIDM1 identity symbol a prompt - prompt-…
Pyohwan Aug 17, 2026
905a5ce
mali-g52-odroidm1: select the GBM DMA-BUF/format-modifier feature sym…
Pyohwan Aug 17, 2026
58d4cc4
odroidm1: fix inaccurate comment on why rk3568/patches isn't reused, …
Pyohwan Aug 17, 2026
f9ba510
dolphin-emu: fix remaining Wayland gate - Qt/NoGUI toggle was still g…
Pyohwan Aug 17, 2026
7b7b8c7
configgen: note that rk3568-odroidm1.yml's copied entries need manual…
Pyohwan Aug 17, 2026
cbeaa11
Merge origin/master (upstream squashed history, 2026-08-04) into C track
Pyohwan Aug 17, 2026
84a69a3
odroidm1: rebind Xbox Wireless Controller hotkey from Guide to Select
Pyohwan Aug 18, 2026
e42d3e3
odroidm1: rebind Xbox Wireless Controller hotkey from Guide to Select
Pyohwan Aug 18, 2026
a4e8a50
odroidm1: force-enable libretro-beetle-saturn for RK3568
Pyohwan Aug 18, 2026
bb4599b
sdl2: fix frametime logger to hook the eglSwapBuffers fn pointer, not…
Pyohwan Aug 18, 2026
3447e6b
sdl2: add frametime logger, hooked at the eglSwapBuffers fn pointer
Pyohwan Aug 18, 2026
0374ac8
sdl2: exclude emulationstation itself from the frametime logger
Pyohwan Aug 18, 2026
1e9ed01
sdl2: exclude emulationstation itself from the frametime logger
Pyohwan Aug 18, 2026
8616ce1
fix post-merge regressions from origin/master sync
Pyohwan Aug 19, 2026
48fda9d
ps2: fix missing PS2 system in ES (PCSX2 dep + missing AetherSX2 enable)
Pyohwan Aug 19, 2026
4ed9511
pcsx2: explicitly select xorgproto instead of relying on the XORG7 chain
Pyohwan Aug 19, 2026
0c216cd
odroidm1: sync syslinux.cfg fallback with config.ini/boot.cmd defaults
Pyohwan Aug 17, 2026
7c486fc
batocera-storage-manager: port per-partition ignore fix from Track A
Pyohwan Aug 19, 2026
98c8b7e
batocera-storage-manager: replace with Track A's current file wholesale
Pyohwan Aug 19, 2026
a1bf4fa
odroidm1: default to Asia/Seoul timezone + Korean keyboard layout
Pyohwan Aug 19, 2026
b49de0e
odroidm1: default to Asia/Seoul timezone + Korean keyboard layout
Pyohwan Aug 19, 2026
63aa09f
odroidm1: revert global.powermode factory default back to unset
Pyohwan Aug 20, 2026
65abe59
odroidm1: revert global.powermode factory default back to unset
Pyohwan Aug 20, 2026
645fddc
labwc: drop pcsx2-qt's ToggleFullscreen windowRule action
Pyohwan Aug 22, 2026
848fe54
aethersx2: vendor libcurl.so.4 + transitive closure - fixes launch fa…
Pyohwan Aug 22, 2026
541c5ec
aethersx2: vendor libssl.so.3/libcrypto.so.3 too - fixes ENGINE_init
Pyohwan Aug 22, 2026
ce7fd87
aethersx2: set SettingsVersion=1 in PCSX2.ini - fixes reset-to-defaul…
Pyohwan Aug 22, 2026
52523fc
bezel-overlay: fix Python 2 except-tuple syntax error
Pyohwan Aug 23, 2026
88f71e5
odroidm1: make auto/default core+API selection match benchmarked results
Pyohwan Aug 23, 2026
9358834
batocera-es-swissknife: respect updates.url override for the ES updat…
Pyohwan Aug 23, 2026
1b114b9
buildroot: bump submodule for gst1-plugins-bad aja fix
Pyohwan Aug 23, 2026
dc8d78b
odroidm1: explicitly disable gst1-plugins-bad vulkan plugin
Pyohwan Aug 23, 2026
24421e2
odroidm1: fix gst1-plugins-bad vulkan plugin gating, correct .board c…
Pyohwan Aug 23, 2026
4463889
odroidm1: fix 6 upstream bugs hit by the first full Wayland-only rebu…
Pyohwan Aug 25, 2026
eec2121
odroidm1: restore fixes wiped by the 9bf3f05ccc upstream sync merge
Pyohwan Aug 25, 2026
8920c48
odroidm1: fix POST_INSTALL_TARGET_HOOKS ordering for es_input.cfg patch
Pyohwan Aug 25, 2026
520d806
odroidm1: fix git-worktree docker mount + false update-available prompt
Pyohwan Aug 26, 2026
d05f5c6
odroidm1: switch batocera.version to our own release-tag scheme
Pyohwan Aug 26, 2026
443e322
odroidm1: don't rebrand dev builds, keep upstream default pre-release
Pyohwan Aug 26, 2026
1808e20
odroidm1: fix auto emulator/core defaults for n64/gamecube/wii/dreamcast
Pyohwan Aug 26, 2026
4dc8fe5
odroidm1: fix PS2 auto default - was pointing at the known-broken core
Pyohwan Aug 28, 2026
acc831e
odroidm1: build AetherSX2's missing libXrandr properly instead of ven…
Pyohwan Aug 28, 2026
58fcc13
odroidm1: also read display.rotate from config.ini for the boot splash
Pyohwan Aug 29, 2026
e8ea822
odroidm1: fix missing Korean glyphs on the backglass window + add boa…
Pyohwan Aug 29, 2026
7ffd2f8
odroidm1: drop redundant config.ini rotation read, document real mech…
Pyohwan Aug 29, 2026
4b38737
odroidm1: don't hardcode this VU8M unit's specific rotation value in …
Pyohwan Aug 29, 2026
34b3bba
odroidm1: trim README - drop stale/verbose display setup wording
Pyohwan Aug 29, 2026
5c1b828
odroidm1: rename README rotation section to '백글래스 / 화면 회전'
Pyohwan Aug 29, 2026
7e36de1
odroidm1: move backglass/NDS-dual-screen content into the 백글래스/화면 회전 …
Pyohwan Aug 29, 2026
00c2f20
odroidm1: polish 백글래스/화면 회전 section - subheadings, restore videooutpu…
Pyohwan Aug 29, 2026
dfae1c5
odroidm1: note the overlays=display_vu8m prerequisite atop the backgl…
Pyohwan Aug 29, 2026
7ad3354
odroidm1: reorder README backglass section, explain why reboot is needed
Pyohwan Aug 29, 2026
71a4f7e
odroidm1: give exact ES menu paths for backglass/rotation settings
Pyohwan Aug 29, 2026
585681e
Merge origin/master (upstream squashed history, 2026-08-04) into A track
Pyohwan Aug 29, 2026
e415f84
odroidm1: strip batocera/v prefix from release tag before it becomes …
Pyohwan Aug 29, 2026
edb018a
Merge odroid-m1-bsp-kernel (A track) via 'ours' strategy - fix PR #4'…
Pyohwan Aug 29, 2026
fdc833a
odroidm1: address PR #4 4th-round review blocking items
Pyohwan Aug 29, 2026
c6fdfa2
odroidm1: soften wording in README (drop '반드시')
Pyohwan Aug 29, 2026
523554f
odroidm1: credit dsno(Zansword)'s FBNeo Korean patch in the README
Pyohwan Aug 29, 2026
f28d0f5
odroidm1: fix FBNeo Korean patch attribution (DsNo, not dsno/Zansword)
Pyohwan Aug 29, 2026
7b24329
odroidm1: use user's phrasing for the DsNo FBNeo patch credit
Pyohwan Aug 29, 2026
08751e3
odroidm1: split README into Korean/English versions
Pyohwan Aug 29, 2026
a8f2022
odroidm1: use the English title (Ninja Baseball Bat Man) in the EN RE…
Pyohwan Aug 29, 2026
ba98375
Merge pull request #4: g29p1 Vulkan blob + Wayland for ODROID-M1 (C안)…
Pyohwan Aug 29, 2026
e0be331
odroidm1: point updates.url at odroid-m1-bsp-kernel instead of the se…
Pyohwan Aug 29, 2026
d59c22c
Merge pull request #5: point updates.url at odroid-m1-bsp-kernel
Pyohwan Aug 30, 2026
55c240a
odroidm1: replace naive Korean font prepend with glyph-coverage-aware…
Pyohwan Aug 30, 2026
e2acd12
Merge pull request #6: replace naive Korean font prepend with glyph-c…
Pyohwan Aug 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/actions/setup-python/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ runs:

- name: Install dependencies
shell: bash
run: uv sync --locked --all-extras --dev
run: uv sync --locked --all-extras --dev --no-install-package pygobject --no-install-package pycairo
5 changes: 4 additions & 1 deletion .github/workflows/checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ jobs:
uses: './.github/actions/setup-python'

- name: Run tests
# For example, using `pytest`
env:
UV_NO_SYNC: 1
run: uv run py.test python-src

lint:
Expand All @@ -46,4 +47,6 @@ jobs:
uses: './.github/actions/setup-python'

- name: Prek hooks
env:
UV_NO_SYNC: 1
run: uv run prek --show-diff-on-failure --color=always --all-files
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/output
/output-*
/dl
/configs/batocera-*_defconfig
/configs/batocera-board.local.common
Expand Down Expand Up @@ -34,3 +35,4 @@ batocera-mok.key
typescript
.ruff_cache
.coverage
*.mo
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[submodule "buildroot"]
path = buildroot
url = https://github.com/batocera-linux/buildroot.git
url = https://github.com/Pyohwan/buildroot.git
28 changes: 16 additions & 12 deletions Config.in
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,8 @@ menu "System"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-ps5000/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-ps7000/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-powkiddy-a13/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-odroid-m1/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-rock-3a/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-rock-3c/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-firefly-station-m2/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-firefly-station-p2/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-anbernic-rgxx3/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-vim4/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-vim1s/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-orangepi-800/Config.in"
Expand All @@ -53,19 +49,22 @@ menu "System"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-bananapi-m7/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-orangepi-5-pro/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-nanopi-m6/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-odroid-m1s/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-orangepi-4a/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-orangepi-3b/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-orangepi-5-ultra/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-orangepi-5-max/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-orangepi-5b/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-powkiddy-x55/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-rk3326/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/rocknix-abl/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-radxa-zero-3/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-odroid-m2/Config.in"
# Pre-dates upstream's "rework uboot for rk356x devices" (01273a1f5f),
# which deleted uboot-odroid-m1 in favor of the unified uboot-rk356x
# below. Our board still uses this standalone package (known-working,
# matches this board's actual VU8M/SPI boot flow) - migrating to
# uboot-rk356x is a separate, deliberate follow-up, not a merge fix.
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-odroid-m1/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-rk356x/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-rk3576/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/boot/uboot-gameforce-ace/Config.in"
endmenu

menu "Toolchain"
Expand Down Expand Up @@ -99,6 +98,7 @@ menu "System"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/gpu/mesa-panfork/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/gpu/mali-G610/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/gpu/mali-G52/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/gpu/mali-g52-odroidm1/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/gpu/mali-G31/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/gpu/mali-g31-gbm/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/gpu/mali-mp400-wayland/Config.in"
Expand All @@ -117,6 +117,7 @@ menu "System"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/gpu/vulkan/spirv-cross/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/gpu/vulkan/vulkan-utility-libraries/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/gpu/vulkan/vulkan-validationlayers/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/gpu/vulkan/vulkan-wsi-layer/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/gpu/gtk-layer-shell/Config.in"
endmenu

Expand Down Expand Up @@ -211,6 +212,8 @@ menu "Controllers"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/controllers/wheels/hid-t150/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/controllers/wheels/new-lg4ff/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/controllers/wheels/hid-tmff2/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/controllers/wheels/logitech-trueforce/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/controllers/wheels/logi-wheel/Config.in"
endmenu
endmenu

Expand Down Expand Up @@ -258,6 +261,7 @@ menu "Emulators"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/retroarch/libretro/libretro-gp32emu/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/retroarch/libretro/libretro-fbalpha/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/retroarch/libretro/libretro-fbneo/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/retroarch/libretro/libretro-fbneo-korean/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/retroarch/libretro/libretro-gw/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/retroarch/libretro/libretro-prboom/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/retroarch/libretro/libretro-mrboom/Config.in"
Expand Down Expand Up @@ -357,15 +361,11 @@ menu "Emulators"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/dosbox-staging/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/dosbox-x/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/fsuae/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/supermodel-common/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/supermodel/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/supermodel-legacy/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/supermodel-es/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/model2emu/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/mame/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/melonds/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/citron/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/ryujinx/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/cemu-common/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/cemu/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/lightspark/Config.in"
Expand All @@ -379,6 +379,7 @@ menu "Emulators"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/xenia-canary/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/xenia-edge/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/pcsx2/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/aethersx2/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/rpcs3/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/ppsspp/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/emulators/flycast/Config.in"
Expand Down Expand Up @@ -503,6 +504,7 @@ menu "Emulators"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/ports/dhewm3/dentonmod/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/ports/dhewm3/desolated/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/ports/dhewm3/eldoom/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/ports/dhewm3/eoc/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/ports/dhewm3/fitz/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/ports/dhewm3/grimm/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/ports/dhewm3/hardcorps/Config.in"
Expand Down Expand Up @@ -615,10 +617,12 @@ menu "Utils"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/utils/box64/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/utils/sdl2-touch-test/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/utils/batocera-torrent/Config.in"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/utils/batocera-bezel-overlay/Config.in"
endmenu

menu "Utils Host"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/utils-host/python-mkbootimg/Config.in.host"
source "$BR2_EXTERNAL_BATOCERA_PATH/package/batocera/utils/picom/Config.in"
endmenu

menu "Cases"
Expand Down
9 changes: 5 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ BATCH_MODE ?=
PARALLEL_BUILD ?=
DIRECT_BUILD ?=
DAYS ?= 1
SINCE ?= $(DAYS) days ago
SYSTEMS_REPORT_EXCLUDE_TARGETS ?= bcm2835 jh7110
SYSTEMS_REPORT_PARALLEL ?= y

Expand Down Expand Up @@ -150,7 +151,7 @@ help:
@echo
@echo 'Incremental rebuild:'
@echo ' <target>-refresh - surgically reset recently changed packages and rebuild'
@echo ' (requires PARALLEL_BUILD=y, uses DAYS=<n> to control scope)'
@echo ' (requires PARALLEL_BUILD=y, uses SINCE=<n> to control scope)'
@echo ' <target>-clean-for-refresh - reset recently changed packages without rebuilding'
@echo
@echo 'Deployment:'
Expand Down Expand Up @@ -200,7 +201,7 @@ help:
@echo ' EXTRA_OPTS="..." - extra defconfig options (deprecated, use add-defconfig)'
@echo ' PKG=<pkg> - package name for <target>-pkg'
@echo ' CMD=<cmd> - command for <target>-shell or <target>-build'
@echo ' DAYS=<n> - number of days to look back for <target>-refresh (default: 1)'
@echo ' SINCE=<n> - period of time to look back for <target>-refresh (default: 1 days ago)'
@echo ' DEV=<device> - device path for <target>-flash and <target>-upgrade'
@echo ' DOCKER=<cmd> - Docker command to use (default: docker)'
@echo ' DOCKER_OPTS="..." - additional Docker run options'
Expand Down Expand Up @@ -324,11 +325,11 @@ endif
ifndef PARALLEL_BUILD
$(error PARALLEL_BUILD=y must be set for $*-refresh)
endif
@$(call MESSAGE,Refresh & Targeted Rebuild Trigger (DAYS=$(DAYS)))
@$(call MESSAGE,Refresh & Targeted Rebuild Trigger (SINCE=$(SINCE)))
@python3 $(PROJECT_DIR)/scripts/linux/refresh_resolver.py \
--project-dir $(PROJECT_DIR) \
--output-dir $(TARGET_OUTPUT_DIR) \
--days $(DAYS) \
--since='$(SINCE)' \
--mandatory "$(MANDATORY_REBUILD_PKGS)"

@$(call MESSAGE,Removing Host and Target directories)
Expand Down
97 changes: 97 additions & 0 deletions README-odroidm1.en.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
# ODROID-M1 (bsp-odroidm1)

*English | [한국어](README-odroidm1.ko.md)*

## Features added on top of vanilla Batocera

- Uses Hardkernel's own BSP kernel (**Linux 6.1.141**) instead of mainline
- Required for VU8M, mono audio, and USB3.0 support
- VU8M (Hardkernel's 8" DSI touchscreen) support
- Uses the vendor Mali G52 blob (g29p1 generation) - GLES + Vulkan
- Wayland (labwc) compositor support - enables standalone Qt-based emulators (PCSX2/Dolphin/AetherSX2, etc.) to actually run
- Fixed mono speaker volume/output routing (default volume was far too quiet)
- FBNeo Korean-patched core (`fbneo_korean`) set as default - includes DsNo's patch, which fixes a CRC32 mismatch that caused Korean-patched ROMs to be rejected
- AetherSX2 (PS2) set as default - an alternative core that avoids a Mali GPU fault that mainline PCSX2-family cores hit
- Vulkan rendering support for PS2/GameCube/Dreamcast/PSP and other major systems
- Re-tuned per-system "auto" core/API defaults to match actual measured best performance

## Setup

### Display (HDMI / VU8M)

- **HDMI**: enabled by default, no configuration needed (tested up to 1080p).
- **VU8M**: disabled by default. Enable it in `config.ini` on the **BATOCERA** partition (the drive that shows up when you plug the SD card into a PC):
```
overlays="display_vu8m"
```
Set it back to `overlays=""` to disable. The DSI panel has no hotplug detection, so once the overlay is enabled it's always reported as "connected" whether the panel is physically attached or not - turn it off when not in use.

### Backglass / screen rotation

Everything below assumes VU8M is already enabled via `overlays="display_vu8m"` in `config.ini` above.

**Note**: the settings below are stored in `system/batocera.conf`, which only exists after the board has **booted at least once** and initialized the SHARE partition - a freshly flashed SD card has neither this file nor the `system` folder at all (Batocera creates the whole default directory structure - `roms`/`bios`/`saves`/`system`, etc. - on first boot). Do this after the first boot.

**Using it as a backglass**: to use VU8M as a secondary screen showing box art/game info while playing on the main screen (HDMI), go to **MAIN MENU → SYSTEM SETTINGS → HARDWARE → MULTISCREENS → BACKGLASS / INFORMATION SCREEN** and set VIDEO OUTPUT to VU8M (`DSI-1`). **This must be set** for ES to actually configure that output (resolution/rotation) - leaving it blank just gets you an unused extended screen tacked onto HDMI with nothing rendered on it.

**Exception - NDS dual-screen**: NDS naturally has two screens (top/bottom). Enabling both HDMI and VU8M together with the `melonDS` core lets you output NDS's top and bottom screens to the two physical displays separately. However, melonDS performs poorly on this board (much slower than the default `drastic` core even with GPU acceleration on), making it **impractical for regular use** - stick with the default `drastic` (single screen) unless you specifically need the dual-screen setup.

**Rotation**: best done from the ES menu - note that both options are labeled "SCREEN ROTATION", so you have to go by location:
- **MAIN MENU → SYSTEM SETTINGS → HARDWARE → SCREEN ROTATION**: rotates the main screen (HDMI).
- **MAIN MENU → SYSTEM SETTINGS → HARDWARE → MULTISCREENS → BACKGLASS / INFORMATION SCREEN → SCREEN ROTATION**: rotates VU8M (the backglass). (Saved together with the VIDEO OUTPUT setting above.)

These values are stored in `system/batocera.conf` on the **SHARE partition** (the second drive that shows up when you plug the SD card into a PC). Mount that partition and edit the file directly, or over SSH:
```
batocera-settings-set global.videooutput2 DSI-1 # assign VU8M as the 2nd screen (backglass)
batocera-settings-set display.rotate2.DSI-1 3 # rotation value for that screen
```
A **reboot** is needed for this to take effect (EmulationStation only sets up outputs/rotation at startup):
```
reboot
```
Main-screen rotation uses `display.rotate.<connector-name>=<N>` per connector (e.g. `display.rotate.HDMI-A-1`), falling back to the global `display.rotate=<N>` if unset. `<N>` is `0` (normal), `1` (90°), `2` (180°), `3` (270°) - main-screen rotation is also automatically picked up by the boot splash on the next reboot (vanilla mechanism, no extra setup needed). `display.rotate2` (backglass) doesn't apply here - the splash never draws anything to the 2nd screen.

## Per-system performance results and recommended core/API

Measured on **`batocera44-odroidm1-v1.0.0`** (this doc always tracks the latest version - re-verify if the relevant core/kernel/blob changes in a later release), Power Mode fixed to High Performance, Avg FPS / 1% low (frametime-based, an industry-standard metric). **The core/API actually selected by "auto" is bolded.**

| System | Game | Core | API | Avg FPS | 1% Low |
| --- | --- | --- | --- | --- | --- |
| Genesis/Mega Drive | Altered Beast | **genesisplusgx** | — | **60.0** | 50.3 |
| | | genesisplusgx-expanded | — | 60.0 | 47.6 |
| | | picodrive | — | 60.0 | 48.5 |
| FBNeo | Ninja Baseball Bat Man | **fbneo_korean** | — | **60.0** | 41.0 |
| Saturn | Strikers 1945 | **yabasanshiro** | GLES | **59.3** | 24.3 |
| | | beetle-saturn | GLES | 22.5 | 16.8 |
| | | beetle-saturn | Vulkan | 22.8 | 16.4 |
| PSX | Soul Blade | **pcsx_rearmed** | GLES | **60.0** | 38.9 |
| | | pcsx_rearmed | Vulkan | 60.0 | 42.0 |
| | | swanstation | GLES | 58.5 | 32.1 |
| | | swanstation | Vulkan | 59.3 | 34.5 |
| | | mednafen_psx | GLES | 29.0 | 19.6 |
| | | mednafen_psx | Vulkan | 31.3 | 20.7 |
| N64 | Yoshi's Story | standalone mupen64plus(**rice**) | GLES | **59.6** | 30.3 |
| | | standalone mupen64plus(glide64mk2) | GLES | 54.9 | 13.0 |
| | | standalone mupen64plus(gliden64) | GLES | 10.3 | 3.6 |
| | | libretro mupen64plus-next | GLES | 59.5 | 24.5 |
| | | libretro parallel_n64 | GLES | 56.2 | 17.9 |
| Dreamcast | Soulcalibur | **standalone flycast** | **Vulkan** | **55.5** | 11.7 |
| | | standalone flycast | GLES | 56.4 | 13.0 |
| | | libretro flycast | GLES | 55.9 | 10.1 |
| | | libretro flycast | Vulkan | 56.0 | 13.1 |
| PS2 | 2002 FIFA World Cup (Korea) | **AetherSX2** | **Vulkan** | **23.8** | 4.2 |
| GameCube | Pikmin | **standalone Dolphin** | **Vulkan** | **29.7** | 8.4 |
| PSP | Tekken 6 | **standalone PPSSPP** | **Vulkan** | **58.9** | 27.0 |
| | | standalone PPSSPP | GLES | 54.0 | 17.7 |
| | | libretro ppsspp | GLES | 54.2 | 16.1 |
| | | libretro ppsspp | Vulkan | 54.1 | 27.0 |
| NDS | (excluded from the matrix - all 3 tracks cleared 60fps with 99%+ headroom, so a full sweep wasn't needed) | **drastic** | — | — | — |

**Notes**:
- Genesis/FBNeo use software 2D rendering, so the GLES/Vulkan API distinction doesn't apply.
- The libretro Vulkan cores for N64/Dreamcast (mupen64plus-next, parallel_n64) have a known issue where audio plays but no video appears, so they're excluded above (GLES-only comparison).
- Wii isn't benchmarked separately but is expected to behave the same as GameCube (standalone Dolphin + Vulkan), so the same recommendation applies.

## Known limitations

- **PS2 `pcsx2` core** (mainline PCSX2 family): the newer GS command patterns these cores use trigger a genuine Mali G52 GPU hardware fault (`DATA_INVALID_FAULT`) - confirmed via dmesg logs and actual game hangs. AetherSX2 (a PCSX2-family fork using older GS command patterns) avoids this fault and is used as the default. `pcsx2` is left installed and selectable in EmulationStation for anyone who wants to experiment with it.
Loading