fix: place AdvanceMAME's sets in EmuELEC's dir_rom

AdvanceMAME reads its sets from dir_rom, a list of folders
(advance/osd/fileio.c:74, doc/advmame.d:680,699-701). EmuELEC's
advmame.rc sets dir_rom /storage/roms/mame (advmame.rc:11), and
advmame.sh rewrites /roms/mame to /roms/arcade when it is started for
the arcade system (advmame.sh:26-30). The extractor kept the keys under
the BIOS root alone: it now records those under the roms root too, and
a key the script rewrites gives one record for arcade and one for every
other system. A configgen record carries the systems it is written for.

The profile lays its 29 sets out at the top of dir_rom. On EmuELEC they
land in roms/mame. The 12 root archives AdvanceMAME alone claimed there
now hold the copies of the cores that also declare them (mame, geolith),
none of them lost.

A destination outside the BIOS tree is no proof of content: the moved
entry resolves by its layout path alone. roms/mame/konamigv.zip took
bios/Arcade/MAME/konamigv.zip, MAME 0.289's set, by that tail.
This commit is contained in:
Abdessamad Derraz committed 2026-11-10 13:07:12 +01:00
1 parent 4a5c693b66
commit 8eaffcfead
7 files changed
+384 -29

No files matched your search

+32
View File
@@ -52,6 +52,9 @@ systems:
- atari-system1
- efo-cedar-magnet
standalone_pools:
dir_rom: ""
notes: |
MAME 0.106 core (src/version.c:11) carrying its own video layer and driver
backports from later MAME releases. Twenty-nine BIOS root sets, each a
@@ -156,6 +159,7 @@ files:
# SNK Neo Geo MVS
- name: neogeo.zip
path: "neogeo.zip"
required: true
category: bios_zip
system: snk-neogeo-mvs
@@ -223,6 +227,7 @@ files:
# IGS PGM
- name: pgm.zip
path: "pgm.zip"
required: true
category: bios_zip
system: igs-pgm
@@ -246,6 +251,7 @@ files:
# Sega ST-V
- name: stvbios.zip
path: "stvbios.zip"
required: true
category: bios_zip
system: sega-stv
@@ -302,6 +308,7 @@ files:
# Sega Mega Play
- name: megaplay.zip
path: "megaplay.zip"
required: true
category: bios_zip
system: sega-megaplay
@@ -323,6 +330,7 @@ files:
# Sega Mega-Tech
- name: megatech.zip
path: "megatech.zip"
required: true
category: bios_zip
system: sega-megatech
@@ -335,6 +343,7 @@ files:
# DECO Cassette System
- name: decocass.zip
path: "decocass.zip"
required: true
category: bios_zip
system: deco-cassette
@@ -387,6 +396,7 @@ files:
# Nintendo PlayChoice-10
- name: playch10.zip
path: "playch10.zip"
required: true
category: bios_zip
system: nintendo-playch10
@@ -438,6 +448,7 @@ files:
# Nintendo Super System
- name: nss.zip
path: "nss.zip"
required: true
category: bios_zip
system: nintendo-nss
@@ -466,6 +477,7 @@ files:
# Super Kaneko Nova System
- name: skns.zip
path: "skns.zip"
required: true
category: bios_zip
system: super-kaneko-nova
@@ -501,6 +513,7 @@ files:
# Konami System GX
- name: konamigx.zip
path: "konamigx.zip"
required: true
category: bios_zip
system: konami-gx
@@ -513,6 +526,7 @@ files:
# Konami Baby Phoenix/GV System
- name: konamigv.zip
path: "konamigv.zip"
required: true
category: bios_zip
system: konami-gv
@@ -525,6 +539,7 @@ files:
# Century Electronics CVS
- name: cvs.zip
path: "cvs.zip"
required: true
category: bios_zip
system: century-cvs
@@ -548,6 +563,7 @@ files:
# Capcom ZN1
- name: cpzn1.zip
path: "cpzn1.zip"
required: true
category: bios_zip
system: capcom-zn1
@@ -560,6 +576,7 @@ files:
# Capcom ZN2
- name: cpzn2.zip
path: "cpzn2.zip"
required: true
category: bios_zip
system: capcom-zn2
@@ -572,6 +589,7 @@ files:
# Tecmo TPS
- name: tps.zip
path: "tps.zip"
required: true
category: bios_zip
system: tecmo-tps
@@ -584,6 +602,7 @@ files:
# Taito FX1
- name: taitofx1.zip
path: "taitofx1.zip"
required: true
category: bios_zip
system: taito-fx1
@@ -596,6 +615,7 @@ files:
# Eighting/Raizing PS Arcade 95
- name: psarc95.zip
path: "psarc95.zip"
required: true
category: bios_zip
system: eighting-zn1
@@ -608,6 +628,7 @@ files:
# Atlus PSX
- name: atluspsx.zip
path: "atluspsx.zip"
required: true
category: bios_zip
system: atlus-zn1
@@ -620,6 +641,7 @@ files:
# Atari PSX
- name: atpsx.zip
path: "atpsx.zip"
required: true
category: bios_zip
system: atari-zn1
@@ -632,6 +654,7 @@ files:
# Acclaim PSX
- name: acpsx.zip
path: "acpsx.zip"
required: true
category: bios_zip
system: acclaim-zn1
@@ -644,6 +667,7 @@ files:
# Video System PSX
- name: coh1002v.zip
path: "coh1002v.zip"
required: true
category: bios_zip
system: videosystem-zn1
@@ -656,6 +680,7 @@ files:
# Seta Aleck64
- name: aleck64.zip
path: "aleck64.zip"
required: true
category: bios_zip
system: nintendo-aleck64
@@ -668,6 +693,7 @@ files:
# Atari System 1
- name: atarisy1.zip
path: "atarisy1.zip"
required: true
category: bios_zip
system: atari-system1
@@ -691,6 +717,7 @@ files:
# EFO Cedar Magnet System
- name: cedmag.zip
path: "cedmag.zip"
required: true
category: bios_zip
system: efo-cedar-magnet
@@ -703,6 +730,7 @@ files:
# Arcadia Systems
- name: ar_bios.zip
path: "ar_bios.zip"
required: true
category: bios_zip
system: arcadia-systems
@@ -770,6 +798,7 @@ files:
# Exidy Max-A-Flex
- name: maxaflex.zip
path: "maxaflex.zip"
required: true
category: bios_zip
system: exidy-maxaflex
@@ -793,6 +822,7 @@ files:
# Brezzasoft Crystal System
- name: crysbios.zip
path: "crysbios.zip"
required: true
category: bios_zip
system: brezzasoft-crystal
@@ -805,6 +835,7 @@ files:
# I'Max Multi Amenity Cassette System
- name: macsbios.zip
path: "macsbios.zip"
required: true
category: bios_zip
system: imax-macs
@@ -823,6 +854,7 @@ files:
# Barcrest MPU4 Video
- name: bctvidbs.zip
path: "bctvidbs.zip"
required: true
category: bios_zip
system: barcrest-mpu4
+252 -2
View File
@@ -4442,6 +4442,206 @@ launchers:
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:172-174, packages/sx05re/emulators/hatarisa/config/conf/Atari-ST-default.cfg:200,\
\ packages/sx05re/emulators/hatarisa/package.mk:39, packages/sx05re/emulators/hatarisa/scripts/hatari.start:36,\
\ 66, 73"
- emulator: AdvanceMame
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/mame/artwork
passes_to: advmame.rc dir_artwork
fails_when_missing: false
depends_on_option: system != arcade
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
systems:
- arcade
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/arcade/artwork
passes_to: advmame.rc dir_artwork
fails_when_missing: false
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/mame/diff
passes_to: advmame.rc dir_diff
fails_when_missing: false
depends_on_option: system != arcade
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
systems:
- arcade
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/arcade/diff
passes_to: advmame.rc dir_diff
fails_when_missing: false
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/mame/hi
passes_to: advmame.rc dir_hi
fails_when_missing: false
depends_on_option: system != arcade
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
systems:
- arcade
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/arcade/hi
passes_to: advmame.rc dir_hi
fails_when_missing: false
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/mame/image
passes_to: advmame.rc dir_image
fails_when_missing: false
depends_on_option: system != arcade
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
systems:
- arcade
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/arcade/image
passes_to: advmame.rc dir_image
fails_when_missing: false
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/mame/inp
passes_to: advmame.rc dir_inp
fails_when_missing: false
depends_on_option: system != arcade
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
systems:
- arcade
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/arcade/inp
passes_to: advmame.rc dir_inp
fails_when_missing: false
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/mame/memcard
passes_to: advmame.rc dir_memcard
fails_when_missing: false
depends_on_option: system != arcade
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
systems:
- arcade
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/arcade/memcard
passes_to: advmame.rc dir_memcard
fails_when_missing: false
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/mame/nvram
passes_to: advmame.rc dir_nvram
fails_when_missing: false
depends_on_option: system != arcade
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
systems:
- arcade
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/arcade/nvram
passes_to: advmame.rc dir_nvram
fails_when_missing: false
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/mame
passes_to: advmame.rc dir_rom
fails_when_missing: false
depends_on_option: system != arcade
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
systems:
- arcade
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/arcade
passes_to: advmame.rc dir_rom
fails_when_missing: false
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
build: standalone
kind: passes_path
@@ -4449,9 +4649,59 @@ launchers:
search_dir: /storage/roms/bios/advmame/samples
passes_to: advmame.rc dir_sample
fails_when_missing: false
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:9,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:9, packages/sx05re/emulators/advancemame/config/advmame.rc:12,\
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:80"
- emulator: AdvanceMame
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/mame/snap
passes_to: advmame.rc dir_snap
fails_when_missing: false
depends_on_option: system != arcade
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
systems:
- arcade
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/arcade/snap
passes_to: advmame.rc dir_snap
fails_when_missing: false
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/mame/nvram
passes_to: advmame.rc dir_sta
fails_when_missing: false
depends_on_option: system != arcade
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: AdvanceMame
systems:
- arcade
build: standalone
kind: passes_path
names: []
search_dir: /storage/roms/arcade/nvram
passes_to: advmame.rc dir_sta
fails_when_missing: false
source_ref: "packages/sx05re/emuelec/bin/emuelecRunEmu.sh:213-215, packages/sx05re/emulators/advancemame/config/advmame.rc_oga:1-11,\
\ packages/sx05re/emulators/advancemame/config/advmame.rc_gf:1-11, packages/sx05re/emulators/advancemame/config/advmame.rc:4-14,\
\ packages/sx05re/emulators/advancemame/package.mk:45-49, packages/sx05re/emulators/advancemame/bin/advmame.sh:26-27,\
\ 80"
- emulator: SCUMMVMSA
build: standalone
kind: passes_path
+4 -1
View File
@@ -1541,12 +1541,15 @@ def resolve_local_file(
layout = file_entry.get("layout_path")
if layout and layout != dest_hint:
plain = {k: v for k, v in file_entry.items() if k != "layout_path"}
# A destination outside the BIOS tree says nothing of the collection:
# EmuELEC's roms/mame/konamigv.zip is not bios/Arcade/MAME's set.
outside = file_entry.get("unprefixed") or file_entry.get("root")
answers = [
resolve_local_file(
plain, db, zip_contents, dest_hint=hint, _depth=_depth,
data_dir_registry=data_dir_registry,
)
for hint in (dest_hint, str(layout))
for hint in ((str(layout),) if outside else (dest_hint, str(layout)))
]
for found in answers:
if found[0] is not None and (
+3 -1
View File
@@ -37,11 +37,13 @@ class Launcher:
device: str | None = None
# The machines the platform offers under the record's systems.
machines: list[str] | None = None
# The platform systems the record is written for, none for every one.
systems: list[str] | None = None
def entry(self) -> dict[str, Any]:
"""The platform YAML form, in a fixed key order, unset keys left out."""
order = (
"emulator", "build", "kind", "slot", "names", "expands",
"emulator", "systems", "build", "kind", "slot", "names", "expands",
"case_insensitive", "search_dir", "passes_to",
"fails_when_missing", "fails_scope", "depends_on_option",
"device", "machines", "source_ref",
+49 -21
View File
@@ -38,6 +38,8 @@ EMULATORS = f"{SX05RE}/emulators"
LIBRETRO = f"{SX05RE}/libretro"
RETROARCH_MK = f"{SX05RE}/libretro_base/retroarch/package.mk"
BIOS_ROOT = "/storage/roms/bios"
# The roms root that holds it (packages/sx05re/libretro_base/retroarch/package.mk:112,117).
ROMS_ROOT = "/storage/roms"
_EMU_TEST = re.compile(r'\$\{?EMU\}?"?\s*==?\s*"([^"]+)"')
_ARM = re.compile(r'^\s*((?:"[^"]+"\|?)+)\)\s*$')
@@ -487,8 +489,18 @@ def hatari(tree: RepoTree, runs: Runs) -> list[Launcher]:
]
_ADVMAME_SYSTEM = re.compile(r'^\s*if \[\[ "\$\{1\}" = "([\w-]+)" \]\]; then$')
_ADVMAME_SED = re.compile(r'^\s*sed -i "s\|([^|]+)\|([^|]+)\|g" \$\{CONFIG_DIR\}/advmame\.rc$')
def advancemame(tree: RepoTree, runs: Runs) -> list[Launcher]:
"""Folder keys of the advmame.rc package.mk installs, one per device branch."""
"""Folder keys of the advmame.rc package.mk installs, one per device branch.
A key under the roms root is one too: dir_rom is /storage/roms/mame. The
start script rewrites the config for the system it is launched for
(advmame.sh:26-30): /roms/mame becomes /roms/arcade for arcade, so that
system reads its own record.
"""
package = f"{EMULATORS}/advancemame"
mk = _read(tree, f"{package}/package.mk")
installs = [
@@ -501,8 +513,8 @@ def advancemame(tree: RepoTree, runs: Runs) -> list[Launcher]:
by_value: dict[tuple[tuple[str, str], ...], list[tuple[str, set[int], int]]] = {}
for mk_line, file in installs:
path = f"{package}/config/{file}"
keys = [s for s in settings(tree.read(path), separator=" ") if _under(s.value)]
if not keys:
keys = [s for s in settings(tree.read(path), separator=" ") if _under(s.value, ROMS_ROOT)]
if not any(_under(s.value) for s in keys):
raise LauncherPatternMissing(path, f"key naming a folder under {BIOS_ROOT}")
value = tuple((s.key, s.value) for s in keys)
by_value.setdefault(value, []).append((path, {s.line for s in keys}, mk_line))
@@ -511,25 +523,41 @@ def advancemame(tree: RepoTree, runs: Runs) -> list[Launcher]:
((value, configs),) = by_value.items()
script = _read(tree, f"{package}/bin/advmame.sh")
run_line, _ = script.find(r"^\s*(?:\w+=\S+ )*advmame ", "advmame start")
test_line, test = script.find(_ADVMAME_SYSTEM.pattern, "system test", end=run_line)
sed_line, sed = script.find(_ADVMAME_SED.pattern, "system rewrite", test_line + 1, test_line + 1)
name = posixpath.basename(script.path)
refs = [
runs.ref(name),
*((path, lines) for path, lines, _ in configs),
(mk.path, {mk_line for _, _, mk_line in configs}),
(script.path, {run_line}),
]
return [
Launcher(
emulator=runs.emulator(name),
build="standalone",
kind="passes_path",
names=[],
source_ref=source_ref(refs),
search_dir=folder,
passes_to=f"advmame.rc {key}",
)
for key, folder in value
]
def refs(*lines: int) -> str:
return source_ref([
runs.ref(name),
*((path, lines) for path, lines, _ in configs),
(mk.path, {mk_line for _, _, mk_line in configs}),
(script.path, {run_line, *lines}),
])
found = []
for key, folder in value:
rewritten = folder.replace(sed.group(1), sed.group(2))
if rewritten != folder:
# Every system but the one the script rewrites the key for, and
# that system with the rewritten folder.
found.append(Launcher(
emulator=runs.emulator(name), build="standalone", kind="passes_path", names=[],
source_ref=refs(test_line, sed_line), search_dir=folder,
passes_to=f"advmame.rc {key}",
depends_on_option=f"system != {test.group(1)}",
))
found.append(Launcher(
emulator=runs.emulator(name), build="standalone", kind="passes_path", names=[],
source_ref=refs(test_line, sed_line), search_dir=rewritten,
passes_to=f"advmame.rc {key}", systems=[test.group(1)],
))
continue
found.append(Launcher(
emulator=runs.emulator(name), build="standalone", kind="passes_path", names=[],
source_ref=refs(), search_dir=folder, passes_to=f"advmame.rc {key}",
))
return found
def mame(tree: RepoTree, runs: Runs) -> list[Launcher]:
+27
View File
@@ -879,5 +879,32 @@ class GzdoomOnRetroDECK(unittest.TestCase):
self.assertFalse(any(e.get("standalone_path") for e in view["files"]))
class AdvanceMameOnEmuELEC(unittest.TestCase):
"""advmame.rc sets dir_rom /storage/roms/mame, /storage/roms/arcade for
the arcade system (advmame.rc:11, advmame.sh:26-30)."""
def test_the_sets_land_in_roms_mame(self) -> None:
view = standalone_view("advancemame", "emuelec")
sets = [e for e in view["files"] if e.get("category") == "bios_zip"]
self.assertEqual(len(sets), 29)
for entry in sets:
self.assertEqual(entry["standalone_path"], "mame/" + entry["name"])
self.assertTrue(entry.get("unprefixed"))
def test_the_roms_folder_is_no_proof_of_content(self) -> None:
# bios/Arcade/MAME/konamigv.zip is MAME 0.289's set, not AdvanceMAME's.
from common import load_database, resolve_local_file
db = load_database(str(REPO_ROOT / "database.json"))
view = standalone_view("advancemame", "emuelec")
(entry,) = [e for e in view["files"] if e["name"] == "konamigv.zip"]
moved, _status = resolve_local_file(entry, db, dest_hint=entry["standalone_path"])
plain = {k: v for k, v in entry.items()
if k not in ("layout_path", "standalone_path", "unprefixed")}
root, _status = resolve_local_file(plain, db, dest_hint=entry["name"])
self.assertEqual(moved, root)
self.assertNotIn("/MAME/", moved)
if __name__ == "__main__":
unittest.main()
+17 -4
View File
@@ -313,6 +313,11 @@ ADVMAME_RC = text(
ADVMAME_SH = text(
"""
if [[ "${1}" = "arcade" ]]; then
sed -i "s|/roms/mame|/roms/arcade|g" ${CONFIG_DIR}/advmame.rc
else
sed -i "s|/roms/arcade|/roms/mame|g" ${CONFIG_DIR}/advmame.rc
fi
SDL_AUDIODRIVER=alsa advmame ${ARG} -quiet
"""
)
@@ -580,9 +585,17 @@ class StandaloneRecords(unittest.TestCase):
)
def test_advancemame_one_record_when_every_device_agrees(self):
(record,) = records(el.advancemame)
self.assertEqual(record["search_dir"], "/storage/roms/bios/advmame/samples")
self.assertNotIn("device", record)
roms, arcade, samples = records(el.advancemame)
self.assertEqual(samples["search_dir"], "/storage/roms/bios/advmame/samples")
self.assertNotIn("device", samples)
# advmame.sh rewrites /roms/mame to /roms/arcade for the arcade system.
self.assertEqual(
(roms["search_dir"], roms["passes_to"], roms["depends_on_option"]),
("/storage/roms/mame", "advmame.rc dir_rom", "system != arcade"),
)
self.assertNotIn("systems", roms)
self.assertEqual((arcade["search_dir"], arcade["systems"]), ("/storage/roms/arcade", ["arcade"]))
self.assertTrue(arcade["source_ref"].endswith("bin/advmame.sh:1-2, 6"))
def test_advancemame_devices_that_disagree_raise(self):
changed = ADVMAME_RC.replace("bios/advmame", "bios/other")
@@ -618,7 +631,7 @@ class StandaloneRecords(unittest.TestCase):
def test_every_extractor_runs_on_the_fixtures(self):
found = el.extract_launchers(tree())
self.assertEqual(len(found), 26)
self.assertEqual(len(found), 28)
class Revision(unittest.TestCase):