From 06ae666f921badad640f2e2d8e33b91ef86abf24 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Wed, 21 Oct 2026 05:23:14 +0200 Subject: [PATCH] fix: describe WinUAE kickstarts by its own code Every entry took its names from RetroBat's Uae.Generator.cs, which the RetroBat launchers: records already hold. Kickstarts are now labels of the ROM scan, and kick.rom, the name the loader opens under its data path, is listed. --- emulators/winuae.yml | 114 +++++++++++++---------------------- tests/test_profile_checks.py | 21 +++++++ 2 files changed, 63 insertions(+), 72 deletions(-) diff --git a/emulators/winuae.yml b/emulators/winuae.yml index 83b378c1..5bd1a1a5 100644 --- a/emulators/winuae.yml +++ b/emulators/winuae.yml @@ -13,6 +13,7 @@ systems: - commodore-cd32 - commodore-cdtv mode: standalone +found_by: content notes: | Amiga emulator for Windows by Toni Wilen. The Kickstart is the file named by @@ -24,21 +25,17 @@ notes: | matched against the ROM table only to name them and check the CPU they need. An unknown ROM is still used (memory.cpp:3064-3101). - RetroBat writes a .uae file per launch with kickstart_rom_file and, for CD32 - and CDTV, kickstart_ext_rom_file. It looks the files up by name in bios/, - bios/amiga/ and bios/Amiga/, first match wins, and aborts the launch when - none of the names is found - (retrobat emulatorLauncher/Generators/Uae.Generator.cs:192-216,1043-1111). - The Amiga 500 system takes the 2.04 Kickstart instead of 1.3 when its - a500_machine option is set to amiga500+. It also points KickstartPath at - bios/ in winuae.ini - (retrobat emulatorLauncher/Generators/Uae.Generator.cs:155-156). A .uae or - .ags game file skips this and runs as written. - - For .lha games RetroBat unpacks its own WHDBoot.zip next to the emulator and - copies the A500, A600, A1200 and A4000 Kickstarts it finds into - WHDBoot/Devs/Kickstarts for WHDLoad, skipping any that are missing - (retrobat emulatorLauncher/Generators/Uae.Generator.cs:979-1032). + The ROM list is built by scanning KickstartPath and the default ROM paths + when no DetectedROMs list exists yet. Every file below 10000000 bytes + whose extension is rom, bin, adf, key, a500, a600, a1200, a3000, a4000, + cd32 or U followed by a digit is identified against the ROM table, whatever + the rest of its name (od-win32/win32.cpp:5385-5404, + od-win32/win32gui.cpp:1747-1772, od-win32/win32gui.cpp:1829-1876, + od-win32/win32gui.cpp:1974-2105). The guess step takes a scanned ROM whose + file name matches the configured one (rommgr.cpp:2428-2461). The Kickstart entries below are named after other + profiles' names for the same dumps: the code opens none of those names. + kickstart_ext_rom_file is opened as given, and a missing extended ROM + only raises a notice (memory.cpp:1833-1849). CDTV and A600/A1200 internal devices are enabled with :ENABLED, which needs no ROM file. Cloanto encrypted ROMs are decoded with rom.key, searched in the @@ -47,128 +44,101 @@ notes: | ROM fails to load (rommgr.cpp:1724-1732). files: - - name: "kick34005.A500" + - name: "kick.rom" + path: "roms/kick.rom" + load_from: data_dir + found_by: name + system: commodore-amiga + required: false + hle_fallback: true + note: "Opened when the configured Kickstart is missing: roms/kick.rom, kick.rom, ../shared/rom/kick.rom and ../System/rom/kick.rom under the WinUAE data path, in that order." + source_ref: "memory.cpp:2038-2071" + + - name: "amiga-os-130.rom" system: commodore-amiga required: true hle_fallback: true size: 262144 crc32: "c4f0f55f" sha1: "891e9a547772fe0c6c19b610baf8bc4ea7fcb785" - aliases: - - "kick34005.A500.rom" - - "amiga-os-130.rom" - - "Kickstart v1.3 r34.005 (1987-12)(Commodore)(A500-A1000-A2000-CDTV)[!].rom" - - "Kickstart v1.3 r34.005 (1987-12)(Commodore)(A500-A1000-A2000-CDTV)[o].rom" - - "Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV)[!].rom" - note: "Kickstart 1.3 r34.5. Amiga 500 and CDTV Kickstart. Also copied to WHDBoot as kick34005.A500." + note: "KS ROM v1.3 (A500, A1000, A2000), 315093-02." source_ref: "rommgr.cpp:150-151" - - name: "kick37175.A500" + - name: "amiga-os-204.rom" system: commodore-amiga required: false hle_fallback: true size: 524288 crc32: "c3bdb240" sha1: "c5839f5cb98a7a8947065c3ed2f14f5f42e334a1" - aliases: - - "kick37175.A500.rom" - - "amiga-os-204.rom" - - "Kickstart v2.04 r37.175 (1991-05)(Commodore)(A500+)[!].rom" - - "Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+).rom" - note: "Kickstart 2.04 r37.175. Amiga 500 system with the A500+ machine option." + note: "KS ROM v2.04 (A500+)." source_ref: "rommgr.cpp:158-159" - - name: "kick40063.A600" + - name: "amiga-os-310-a600.rom" system: commodore-amiga required: false hle_fallback: true size: 524288 crc32: "fc24ae0d" sha1: "3b7f1493b27e212830f989f26ca76c02049f09ca" - aliases: - - "kick40063.A600.rom" - - "amiga-os-310-a600.rom" - - "Kickstart v3.1 r40.063 (1993-10)(Commodore)(A600HD)[!].rom" - note: "Kickstart 3.1 r40.63. Only copied to WHDBoot/Devs/Kickstarts for WHDLoad." + note: "KS ROM v3.1 r40.63 (A500, A600, A2000)." source_ref: "rommgr.cpp:183-184" - - name: "kick40068.A1200" + - name: "amiga-os-310-a1200.rom" system: commodore-amiga required: true hle_fallback: true size: 524288 crc32: "1483a091" sha1: "e21545723fe8374e91342617604f1b3d703094f1" - aliases: - - "kick40068.A1200.rom" - - "amiga-os-310-a1200.rom" - - "Kickstart v3.1 r40.068 (1993-12)(Commodore)(A1200)[!].rom" - - "Kickstart - 391774-01 (USA, Europe) (v3.1 Rev 40.068) (A1200).rom" - note: "Kickstart 3.1 r40.68. Amiga 1200 Kickstart. Also copied to WHDBoot." + note: "KS ROM v3.1 r40.68 (A1200)." source_ref: "rommgr.cpp:185-186" - - name: "kick40068.A4000" + - name: "amiga-os-310-a4000.rom" system: commodore-amiga required: true hle_fallback: true size: 524288 crc32: "d6bae334" sha1: "5fe04842d04a489720f0f4bb0e46948199406f49" - aliases: - - "kick40068.A4000.rom" - - "amiga-os-310-a4000.rom" - - "Kickstart v3.1 r40.068 (1993-12)(Commodore)(A4000)[!].rom" - note: "Kickstart 3.1 r40.68. Amiga 4000 Kickstart. Also copied to WHDBoot." + note: "KS ROM v3.1 r40.68 (A4000)." source_ref: "rommgr.cpp:195-196" - - name: "kick40060.CD32" + - name: "amiga-os-310-cd32.rom" system: commodore-cd32 required: true hle_fallback: true size: 524288 crc32: "1e62d4a5" sha1: "3525be8887f79b5929e017b42380a79edfee542d" - aliases: - - "kick40060.CD32.rom" - - "amiga-os-310-cd32.rom" - - "Kickstart v3.1 r40.060 (1993-05)(Commodore)(CD32)[!].rom" - - "Kickstart v3.1 r40.60 (1993)(Commodore)(CD32).rom" - note: "CD32 Kickstart 3.1 r40.60." + note: "CD32 KS ROM v3.1 r40.60." source_ref: "rommgr.cpp:323-324" - - name: "kick40060.CD32.ext" + - name: "amiga-ext-310-cd32.rom" system: commodore-cd32 required: true size: 524288 crc32: "87746be2" sha1: "5bef3d628ce59cc02a66e6e4ae0da48f60e78f7f" - aliases: - - "kick40060.CD32.ext.rom" - - "amiga-os-310-cd32-ext.rom" - - "CD32 Extended-ROM r40.60 (1993)(Commodore)(CD32).rom" - note: "CD32 extended ROM, passed as kickstart_ext_rom_file." - source_ref: "rommgr.cpp:325-326" + note: "CD32 extended ROM r40.60, passed as kickstart_ext_rom_file." + source_ref: "rommgr.cpp:325-326, memory.cpp:1833-1849" - - name: "kick34005.CDTV" + - name: "amiga-ext-130-cdtv.rom" system: commodore-cdtv required: true hle_fallback: true size: 262144 crc32: "42baa124" sha1: "7ba40ffa17e500ed9fed041f3424bd81d9c907be" - aliases: - - "kick34005.CDTV.rom" - - "amiga-os-130-cdtv-ext.rom" - - "CDTV Extended-ROM v1.0 (1991)(Commodore)(CDTV)[!].rom" - - "CDTV Extended-ROM v1.0 (1992)(Commodore)(CDTV).rom" note: "CDTV extended ROM v1.0, passed as kickstart_ext_rom_file with the 1.3 Kickstart." - source_ref: "rommgr.cpp:339-340" + source_ref: "rommgr.cpp:339-340, memory.cpp:1833-1849" - name: "rom.key" + found_by: name system: commodore-amiga required: false size: 2069 crc32: "869ae1b1" sha1: "801bbab32e3d37386dd1636d4f1d6fa7e21d5874" - note: "Cloanto Amiga Forever ROM key. Read next to the Kickstart file, needed only for encrypted ROMs." - source_ref: "rommgr.cpp:119-120, rommgr.cpp:1513-1527" + note: "Cloanto Amiga Forever ROM key. Read from the configured key path, the ROM path, roms/, the data path, ../shared/rom/ and next to the Kickstart file, needed only for encrypted ROMs." + source_ref: "rommgr.cpp:119-120, rommgr.cpp:1459-1535" diff --git a/tests/test_profile_checks.py b/tests/test_profile_checks.py index bde9d103..ad0d841f 100644 --- a/tests/test_profile_checks.py +++ b/tests/test_profile_checks.py @@ -454,5 +454,26 @@ class AmiberryNamesComeFromItsCode(unittest.TestCase): self.assertEqual(_launcher_citations(profile), []) +class WinUaeNamesComeFromItsCode(unittest.TestCase): + """get_kickstart_filehandle opens kickstart_rom_file, then kick.rom under + the data path, then a scanned ROM of the configured name + (memory.cpp:2038-2071 at 7ee16ec5). The scan identifies Kickstarts by + content. Every entry carried the names and aliases RetroBat's + Uae.Generator.cs searches, and kick.rom was missing.""" + + def test_kick_rom_is_read_by_name_and_kickstarts_are_labels(self): + from validation import opens_by_name, read_from_system_dir + + profile = _profile("winuae") + kick = next(f for f in profile["files"] if f["name"] == "kick.rom") + self.assertTrue(opens_by_name(kick, profile, True)) + self.assertFalse(read_from_system_dir(kick, True)) + labels = [f for f in profile["files"] if f.get("sha1") and f["name"] != "rom.key"] + self.assertTrue(labels) + self.assertFalse(any(opens_by_name(f, profile, True) for f in labels)) + self.assertEqual([f["name"] for f in profile["files"] if f.get("aliases")], []) + self.assertEqual(_launcher_citations(profile), []) + + if __name__ == "__main__": unittest.main()