feat: profile pico-8 from platform launchers

One entry per file a launcher reads: pico8 per architecture, pico8_64,
pico8_dyn, pico8_gpio and pico8.dat, read in Batocera, KNULLI, Recalbox,
ROCKNIX, AmberELEC, EmuELEC, RetroDECK, ArkOS and ES-DE launchers.
This commit is contained in:
Abdessamad Derraz committed 2026-11-09 15:12:12 +01:00
1 parent 1bee8b44ca
commit 104f33f2d6
1 file changed
+143 -28
+143 -28
View File
@@ -1,11 +1,16 @@
emulator: Lexaloffle
type: standalone
upstream: "https://www.lexaloffle.com/"
profiled_date: "2026-03-26"
core_version: null
profiled_date: "2026-11-09"
core_version: "0.2.7"
version_basis:
kind: unverified
why: no_artifact
kind: package
url: "https://web.archive.org/web/20260105092803id_/https://www.lexaloffle.com/dl/7wdekp/pico-8_0.2.7_raspi.zip"
pattern: 'pico-8_([0-9.]+[a-z]?)_raspi\.zip'
artifact: "pico-8_0.2.7_raspi.zip and pico-8_0.2.7_amd64.zip, version string pico-8 0.2.7 in every binary"
version_source:
url: "https://www.lexaloffle.com/dl/docs/pico-8_changelog.txt"
pattern: '^\s*v(0\.\d+\.\d+[a-z]?)\s*$'
display_name: "Lexaloffle - PICO-8 / Voxatron"
cores:
- lexaloffle
@@ -20,48 +25,158 @@ systems:
- voxatron
notes: |
Commercial fantasy consoles by Lexaloffle Games LLP. Closed-source binaries
distributed as ZIP archives from lexaloffle.com (requires purchase).
Commercial fantasy consoles by Lexaloffle Games LLP, sold as ZIP archives
per platform. Nothing in either program checks a hash of its own files:
the hashes below are those of the files in the official 0.2.7 archives.
Batocera configgen (lexaloffleGenerator.py) handles both systems via a single
generator. PICO-8: binary at bios/pico-8/pico8. Voxatron: binary at
bios/voxatron/vox. Generator checks binary existence and executable permission,
raises BatoceraException if missing. LD_LIBRARY_PATH set to the BIOS directory
for shared library resolution.
PICO-8 0.2.7 ships five archives. pico-8_0.2.7_amd64.zip holds pico8
(x86_64, SDL2 linked in) and pico8_dyn (x86_64, system libSDL2).
pico-8_0.2.7_raspi.zip holds pico8 (armhf, SDL2 linked in, needs the
Raspberry Pi libbcm_host.so), pico8_dyn (armhf, system libSDL2), pico8_gpio
(armhf, needs libbcm_host.so and libwiringPi.so) and pico8_64 (aarch64,
system libSDL2). pico-8_0.2.7_i386.zip holds pico8_32bit and
pico8_32bit_dyn, pico-8_0.2.7_windows.zip holds pico8.exe and
pico-8_0.2.7_osx.zip holds PICO-8.app. Each binary opens pico8.dat from its
own folder, and pico8.dat is the same file in every archive of one version.
The amd64 and raspi archives carry pico8.dat 10b39730, byte for byte.
Each distribution ships a statically linked binary (pico8/vox) and a dynamically
linked variant (pico8_dyn/vox_dyn). Batocera uses the static binary. The .dat
file is loaded at startup and contains boot sequence, themes, and internal data.
Launchers by platform, each read at the revision the platform file pins:
- Batocera lexaloffleGenerator.py runs bios/pico-8/pico8 and raises when it
is missing or not executable, with LD_LIBRARY_PATH set to bios/pico-8.
The name is fixed for every board: an x86_64 board needs the amd64 pico8,
a Raspberry Pi 32-bit board the raspi pico8, an aarch64 board pico8_64
renamed.
- KNULLI knulli-install-pico8 unzips the raspi archive from roms/pico8,
stops when pico8_64, pico8_dyn, pico8_gpio or pico8.dat is missing, moves
pico8_64 to bios/pico-8/pico8 and the other three beside it. Its
lexaloffleGenerator.py runs bios/pico-8/pico8 with no LD_LIBRARY_PATH.
The RG35XX simplermenu launcher runs pico8_dyn.
- Recalbox pico8Generator.py moves bios/pico-8 to /overlay/emulator/pico-8
and renames pico8_64 to pico8 there, then runs it.
- ROCKNIX start_pico8.sh runs roms/pico-8/pico8_64 on aarch64 and
roms/pico-8/pico8_dyn on any other HW_ARCH, from roms/pico-8/<HW_ARCH>/
when that folder exists. ROCKNIX reads nothing from bios/.
- AmberELEC pico-8.sh runs roms/pico-8/pico8_64 and shows "Missing Pico-8
binaries!" when pico8_64 or pico8.dat is absent.
- EmuELEC pico8.sh copies roms/bios/pico-8/* to /emuelec/bin/pico-8 on the
next start and runs pico8_dyn from there, with no existence check.
- RetroDECK component_launcher.sh executes bios/pico-8/pico8, and its
component_manifest.json lists pico8, pico8.dat and pico8_dyn as required.
- RetroBat Pico8.Generator.cs runs pico8.exe from the folder its config
names pico8 and returns nothing when pico8.exe is absent. That folder is
an emulator install, outside the BIOS tree, so no entry below targets it.
- ArkOS (dArkOS pico8/pico8.sh) prefers roms/pico-8/pico8_64, then
roms/pico-8/pico8_dyn, then extracts pico8_64 and pico8.dat from a
*raspi.zip in that folder, and starts Fake08 when the binary or
pico8.dat is still missing.
- ES-DE es_find_rules.xml looks for pico8_64 under ~/Applications/pico-8
and three other home folders on linuxarm, pico8 on linux and unix, and
pico8.exe on Windows.
PICO-8 supports x86_64 and ARM (Raspberry Pi). Voxatron x86_64 only.
Voxatron depends on libHoloPlayCore.so (Looking Glass SDK), compile-time linked.
Voxatron: Batocera's generator runs bios/voxatron/vox with
LD_LIBRARY_PATH set to bios/voxatron. x86_64 only. vox_dyn is the
variant linked against the system SDL2. libHoloPlayCore.so is the Looking
Glass SDK the binary links against.
files:
# -------------------------------------------------------
# PICO-8
# PICO-8 0.2.7
# -------------------------------------------------------
- name: pico8
path: pico-8/pico8
system: pico8
required: true
description: "PICO-8 main executable (statically linked)"
source_ref: "lexaloffleGenerator.py:17,36,48-49"
note: "Configgen checks existence and executable permission"
unread_on: [amberelec, emuelec, knulli, recalbox, retrobat, rocknix]
size: 9425408
md5: 0d127838e79459da4ae36bb8b2e576ca
sha1: 1843e82abc1d068d7602d3ac135b6ad72aaf6c0a
description: "PICO-8 0.2.7 x86_64 executable, SDL2 linked in"
note: "The pico8 of pico-8_0.2.7_amd64.zip, an x86_64 ELF that loads no libSDL2. Batocera runs it on x86_64 boards and raises when it is missing or not executable. RetroDECK executes the same path."
source_ref: "batocera lexaloffleGenerator.py:17, 37, 48-52, 87-90, RetroDECK pico-8/component_launcher.sh:3, RetroDECK pico-8/component_manifest.json:12-17"
- name: pico8
path: pico-8/pico8
system: pico8
required: true
unread_on: [amberelec, emuelec, knulli, recalbox, retrobat, retrodeck, rocknix]
size: 7895320
md5: 21d4c4c6d9da8fc2c81aa7a844edee96
sha1: 946db0633966afecf81d2b33957c7db8fb3a2356
description: "PICO-8 0.2.7 armhf executable, SDL2 linked in"
note: "The pico8 of pico-8_0.2.7_raspi.zip, a 32-bit ARM ELF that needs libbcm_host.so, so it runs on Raspberry Pi firmware only. Batocera's fixed path is the one a 32-bit Raspberry Pi board (bcm2835, bcm2836) can run."
source_ref: "batocera lexaloffleGenerator.py:17, 48-52"
- name: pico8
path: pico-8/pico8
system: pico8
required: true
unread_on: [amberelec, emuelec, recalbox, retrobat, retrodeck, rocknix]
size: 1640888
md5: 70ab37eab4e7d162d36d9b2d91b84867
sha1: 4ed23b6578a2d93d67aa856791dc70e95d68a3f4
description: "PICO-8 0.2.7 aarch64 executable (pico8_64) under the name pico8"
note: "The pico8_64 of pico-8_0.2.7_raspi.zip, at the pico8 path. KNULLI's installer moves pico8_64 there and its generator runs it, with no check of the bytes. An aarch64 Batocera board needs the same file at the same path."
source_ref: "knulli board/fsoverlay/usr/bin/knulli-install-pico8:8, 33-36, 66, 73, knulli lexaloffleGenerator.py:20, 54-59, batocera lexaloffleGenerator.py:17"
- name: pico8_64
path: pico-8/pico8_64
system: pico8
required: true
unread_on: [batocera, emuelec, knulli, retrobat, retrodeck]
size: 1640888
md5: 70ab37eab4e7d162d36d9b2d91b84867
sha1: 4ed23b6578a2d93d67aa856791dc70e95d68a3f4
description: "PICO-8 0.2.7 aarch64 executable, system libSDL2"
note: "Only in pico-8_0.2.7_raspi.zip. AmberELEC and ROCKNIX run it from roms/pico-8/, not from bios/. AmberELEC stops with a message when it is missing. ROCKNIX picks it when HW_ARCH is aarch64. Recalbox renames bios/pico-8/pico8_64 to pico8 before the first run, and a missing file fails the rename."
source_ref: "amberelec packages/amberelec/sources/pico-8.sh:51-54, amberelec packages/amberelec/sources/scripts/runemu.py:123, rocknix projects/ROCKNIX/packages/emulators/standalone/pico-8/scripts/start_pico8.sh:8-17, 35-40, 46-47, recalbox projects/configgen/configgen/generators/pico8/pico8Generator.py:14-19, dArkOS pico8/pico8.sh:47-60, 128-135"
- name: pico8_dyn
path: pico-8/pico8_dyn
system: pico8
required: false
description: "PICO-8 dynamically linked executable"
source_ref: "lexaloffleGenerator.py:17,36"
note: "Alternative to pico8. Requires system SDL2. Some platforms prefer this variant."
unread_on: [amberelec, emuelec, knulli, recalbox, retrobat, rocknix]
size: 1805928
md5: 724435a9e6f3ef8a55c648fc88651826
sha1: 9b2e573250c70382b4071709a85c8d56c0371d59
description: "PICO-8 0.2.7 x86_64 executable, system libSDL2"
note: "The pico8_dyn of pico-8_0.2.7_amd64.zip. RetroDECK lists it as required in its manifest, but its launcher executes pico8 only. Batocera never runs it."
source_ref: "RetroDECK pico-8/component_manifest.json:26-32, RetroDECK pico-8/component_launcher.sh:3"
- name: pico8_dyn
path: pico-8/pico8_dyn
system: pico8
required: true
unread_on: [amberelec, batocera, recalbox, retrobat, retrodeck, rocknix]
size: 1452936
md5: 867701eff7e82a91985ae1fbe90dbc4a
sha1: 87ef68e70c53ba209e697bb51de45826e982d92d
description: "PICO-8 0.2.7 armhf executable, system libSDL2"
note: "The pico8_dyn of pico-8_0.2.7_raspi.zip. EmuELEC copies bios/pico-8 to /emuelec/bin/pico-8 and runs pico8_dyn with no existence check. KNULLI's installer stops when the archive lacks it and moves it to bios/pico-8, and the RG35XX simplermenu launcher runs it. ROCKNIX runs a pico8_dyn from roms/pico-8/ on a HW_ARCH other than aarch64, and ArkOS falls back to it when pico8_64 is absent."
source_ref: "emuelec packages/sx05re/emuelec/bin/pico8.sh:9-14, 39-43, knulli board/fsoverlay/usr/bin/knulli-install-pico8:9, 38-41, 67, knulli board/actions/atm7039/rg35xx/fsoverlay/usr/share/knulli/datainit/system/configs/simplermenu_plus/launchers/pico8_sa:3, rocknix projects/ROCKNIX/packages/emulators/standalone/pico-8/scripts/start_pico8.sh:14-16, dArkOS pico8/pico8.sh:49-50"
- name: pico8_gpio
path: pico-8/pico8_gpio
system: pico8
required: false
unread_on: [amberelec, batocera, emuelec, recalbox, retrobat, retrodeck, rocknix]
size: 7898704
md5: 286ab30756dfc40749ecd72221f0d063
sha1: df77c64c95695710d23b451277325e0c37e7416e
description: "PICO-8 0.2.7 armhf executable with GPIO access (wiringPi)"
note: "Only in pico-8_0.2.7_raspi.zip. KNULLI's installer stops when the archive lacks it and moves it to bios/pico-8, but no launcher runs it."
source_ref: "knulli board/fsoverlay/usr/bin/knulli-install-pico8:10, 43-46, 68"
- name: pico8.dat
path: pico-8/pico8.dat
system: pico8
required: true
description: "PICO-8 data file (boot sequence, themes, demo carts)"
note: "POD format. Loaded by pico8/pico8_dyn from same directory at startup."
unread_on: [retrobat]
size: 11243101
md5: 10b397305093c80109096319a538ba56
sha1: 0f92093752bddb12210c7db6d93af3ba2413cfce
description: "PICO-8 0.2.7 data file (boot sequence, themes, demo carts)"
note: "Opened from the folder of the binary that runs, and paired with the binary's own version. Identical in pico-8_0.2.7_amd64.zip and pico-8_0.2.7_raspi.zip. AmberELEC and ArkOS refuse to start PICO-8 without it. KNULLI's installer stops when the archive lacks it."
source_ref: "amberelec packages/amberelec/sources/pico-8.sh:51-52, dArkOS pico8/pico8.sh:136-142, knulli board/fsoverlay/usr/bin/knulli-install-pico8:11, 48-51, 69"
# -------------------------------------------------------
# Voxatron
@@ -71,7 +186,7 @@ files:
system: voxatron
required: true
description: "Voxatron main executable"
source_ref: "lexaloffleGenerator.py:20,42,48-49"
source_ref: "batocera lexaloffleGenerator.py:20, 42, 48-52"
note: "Configgen checks existence and executable permission. x86_64 only."
- name: vox_dyn
@@ -79,7 +194,7 @@ files:
system: voxatron
required: false
description: "Voxatron dynamically linked executable"
source_ref: "lexaloffleGenerator.py:20,42"
source_ref: "batocera lexaloffleGenerator.py:20, 42"
note: "Alternative to vox. Requires system SDL2."
- name: vox.dat
@@ -94,5 +209,5 @@ files:
system: voxatron
required: true
description: "Looking Glass holographic display support library"
source_ref: "lexaloffleGenerator.py:89"
source_ref: "batocera lexaloffleGenerator.py:41, 87-90"
note: "Compile-time linked dependency. LD_LIBRARY_PATH set to bios/voxatron/ by configgen."