From c14e3e90b192197a6016d58441623ab7f499e2e3 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Sat, 17 Oct 2026 01:51:15 +0200 Subject: [PATCH] fix: keep stella kidvid tapes out of bios packs --- emulators/stella2014.yml | 11 +++++++++-- emulators/stella2023.yml | 7 +++++++ tests/test_audit_regressions.py | 19 +++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/emulators/stella2014.yml b/emulators/stella2014.yml index a03e4937..77dd472a 100644 --- a/emulators/stella2014.yml +++ b/emulators/stella2014.yml @@ -19,8 +19,8 @@ notes: | Game properties database (stella.pro) is compiled into DefProps.hxx; external loading is disabled in the libretro port (stella/src/emucore/PropsSet.cxx:35). The core does not call GET_SYSTEM_DIRECTORY. KidVid Voice Module audio tapes (7 WAV files) are - loaded via rfopen with relative filenames from the content directory - (stella/src/emucore/KidVid.cxx:166-185); absence is handled gracefully. EEPROM save data for + opened by rfopen with bare filenames, relative to the process working + directory (stella/src/emucore/KidVid.cxx:166-185); absence is handled gracefully. EEPROM save data for AtariVox and SaveKey peripherals is managed as NVRAM, not user-supplied. files: @@ -28,41 +28,48 @@ files: aliases: [KVS1.WAV] description: "KidVid Voice Module audio tape 1 (Smurfs Save the Day)" required: false + load_from: working_directory category: game_data source_ref: "stella/src/emucore/KidVid.cxx:167,182" - name: kvs2.wav aliases: [KVS2.WAV] description: "KidVid Voice Module audio tape 2 (Smurfs Save the Day)" required: false + load_from: working_directory category: game_data source_ref: "stella/src/emucore/KidVid.cxx:167,182" - name: kvs3.wav aliases: [KVS3.WAV] description: "KidVid Voice Module audio tape 3 (Smurfs Save the Day)" required: false + load_from: working_directory category: game_data source_ref: "stella/src/emucore/KidVid.cxx:167,182" - name: kvb1.wav aliases: [KVB1.WAV] description: "KidVid Voice Module audio tape 1 (Berenstain Bears)" required: false + load_from: working_directory category: game_data source_ref: "stella/src/emucore/KidVid.cxx:167,182" - name: kvb2.wav aliases: [KVB2.WAV] description: "KidVid Voice Module audio tape 2 (Berenstain Bears)" required: false + load_from: working_directory category: game_data source_ref: "stella/src/emucore/KidVid.cxx:167,182" - name: kvb3.wav aliases: [KVB3.WAV] description: "KidVid Voice Module audio tape 3 (Berenstain Bears)" required: false + load_from: working_directory category: game_data source_ref: "stella/src/emucore/KidVid.cxx:167,182" - name: kvshared.wav aliases: [KVSHARED.WAV] description: "KidVid Voice Module shared audio samples" required: false + load_from: working_directory category: game_data source_ref: "stella/src/emucore/KidVid.cxx:185" diff --git a/emulators/stella2023.yml b/emulators/stella2023.yml index 49becdb9..b6531145 100644 --- a/emulators/stella2023.yml +++ b/emulators/stella2023.yml @@ -41,35 +41,42 @@ files: - name: KVS1.WAV description: "KidVid Voice Module audio tape 1 (Smurfs Save the Day)" required: false + load_from: content_dir category: game_data source_ref: "src/emucore/KidVid.cxx:245, src/emucore/KidVid.cxx:273" - name: KVS2.WAV description: "KidVid Voice Module audio tape 2 (Smurfs Save the Day)" required: false + load_from: content_dir category: game_data source_ref: "src/emucore/KidVid.cxx:245, src/emucore/KidVid.cxx:273" - name: KVS3.WAV description: "KidVid Voice Module audio tape 3 (Smurfs Save the Day)" required: false + load_from: content_dir category: game_data source_ref: "src/emucore/KidVid.cxx:245, src/emucore/KidVid.cxx:273" - name: KVB1.WAV description: "KidVid Voice Module audio tape 1 (Berenstain Bears)" required: false + load_from: content_dir category: game_data source_ref: "src/emucore/KidVid.cxx:246, src/emucore/KidVid.cxx:273" - name: KVB2.WAV description: "KidVid Voice Module audio tape 2 (Berenstain Bears)" required: false + load_from: content_dir category: game_data source_ref: "src/emucore/KidVid.cxx:246, src/emucore/KidVid.cxx:273" - name: KVB3.WAV description: "KidVid Voice Module audio tape 3 (Berenstain Bears)" required: false + load_from: content_dir category: game_data source_ref: "src/emucore/KidVid.cxx:246, src/emucore/KidVid.cxx:273" - name: KVSHARED.WAV description: "KidVid Voice Module shared audio samples" required: false + load_from: content_dir category: game_data source_ref: "src/emucore/KidVid.cxx:274" diff --git a/tests/test_audit_regressions.py b/tests/test_audit_regressions.py index 28e36020..4e092800 100644 --- a/tests/test_audit_regressions.py +++ b/tests/test_audit_regressions.py @@ -2161,6 +2161,25 @@ class ContributorsSurviveAFailedRequest(unittest.TestCase): ) +class KidVidTapesStayWithTheContent(unittest.TestCase): + """Stella opens its KidVid tapes by bare name (stella2014, from the + working directory) or from its base directory (stella2023, the content + folder): never the system directory. Without load_from every Linux pack + put about 68 MB of WAVs at the BIOS root, in two cases.""" + + def test_no_pack_places_them_in_the_system_directory(self): + from scripts.common import load_emulator_profiles + from scripts.validation import outside_gap_scope + + profiles = load_emulator_profiles(str(ROOT / "emulators")) + for name in ("stella2014", "stella2023"): + tapes = [f for f in profiles[name]["files"] + if f["name"].lower().endswith(".wav")] + with self.subTest(profile=name): + self.assertEqual(len(tapes), 7) + self.assertTrue(all(outside_gap_scope(f, False) for f in tapes)) + + class ModuleConstantsDeclaredOnce(unittest.TestCase): """Splitting common.py into modules emitted some constants twice.