From 4175aeefd3c0538842d2373b2db0cae96d89f30b Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Thu, 5 Nov 2026 12:04:41 +0100 Subject: [PATCH] fix: profile redream from its public tree The profile declared libretro/redream, which answers 404, with no pin and no source_ref: profile_sync skipped it and the boot.bin md5 came from the libretro docs. It now reads inolen/redream at ffb73022, the last public tree, whose libretro core opens dc/boot.bin and dc/flash.bin in the system directory. boot.bin is checked against four md5 and the flash against its size, and both fall back to the high level BIOS, so neither is required. --- emulators/redream.yml | 59 +++++++++++++++++++++++--------------- tests/test_profile_sync.py | 19 ++++++++++++ 2 files changed, 55 insertions(+), 23 deletions(-) diff --git a/emulators/redream.yml b/emulators/redream.yml index 251f8fdab..2a3927b8e 100644 --- a/emulators/redream.yml +++ b/emulators/redream.yml @@ -1,35 +1,48 @@ -# Redream: Sega Dreamcast (libretro) -# ref: libretro/redream, docs.libretro.com/library/redream -# Uses dc/boot.bin and dc/flash.bin (different names from Flycast) -# Same BIOS data as Flycast's dc_boot.bin / dc_flash.bin -# -# doc vs source: docs list boot.bin md5 e10c53c2f8b90bab96ead2d368858623 -# which matches dc_bios.bin in the repo. Flycast uses dc_boot.bin (same -# data, 2 MB) while Redream calls it boot.bin. The flash.bin is identical -# across both cores. emulator: Redream type: libretro -source: "https://github.com/libretro/redream" -core_version: null +source: "https://github.com/inolen/redream" +profiled_date: "2026-11-05" +source_commit: "ffb7302245ff40515cb9f0f0b0e233a4b39342d3" +core_version: "v1.0.0-25-gffb7302" version_basis: - kind: unverified - why: no_pin + kind: tag + tag: "v1.0.0" + distance: 25 cores: - redream systems: - sega-dreamcast + +notes: | + Last public tree of redream (2018-04-18). It builds the SDL program and + a libretro core that reports library_name redream + (src/host/retro_host.c:214-220). retro_init makes /dc the + application directory (src/host/retro_host.c:192-199), where the boot ROM + and the flash ROM are read. Later releases, 1.5.0 included, are built from + a private tree and published as binaries only. + files: - - name: dc_bios.bin + - name: boot.bin + path: dc/boot.bin system: sega-dreamcast - destination: dc/boot.bin - required: true - sha1: 8951d1bb219ab2ff8583033d2119c899cc81f18c - md5: e10c53c2f8b90bab96ead2d368858623 + required: false + hle_fallback: true size: 2097152 - - name: dc_flash.bin + md5: + - e10c53c2f8b90bab96ead2d368858623 + - f2cd29d09f3e29984bcea22ab2e006fe + - 37c921eb47532cae8fb70e5d987ce91c + - a5c6a00818f97c5e3e91569ee22416dc + validation: [size, md5] + note: "Dreamcast boot ROM. An image of another size or with an md5 outside the list is refused, and the BIOS is then emulated at a high level." + source_ref: "src/guest/rom/boot.c:12-22, src/guest/rom/boot.c:24-46, src/guest/rom/boot.c:48-80, src/guest/rom/boot.c:82-89, src/guest/bios/bios.c:227-238, src/guest/bios/bios.c:326-336" + + - name: flash.bin + path: dc/flash.bin system: sega-dreamcast - destination: dc/flash.bin - required: true - sha1: 94d44d7f9529ec1642ba3771ed3c5f756d5bc872 - md5: 0a93f7940c455905bea6e392dfde92a4 + required: false + hle_fallback: true size: 131072 + validation: [size] + note: "Dreamcast flash ROM. An image of another size is ignored and the partitions are reset to factory settings, and the flash is written back on exit." + source_ref: "src/guest/rom/flash.c:26-36, src/guest/rom/flash.c:47-72, src/guest/rom/flash.c:100-107, src/guest/rom/flash.c:197-200, src/guest/bios/bios.c:137-198" diff --git a/tests/test_profile_sync.py b/tests/test_profile_sync.py index b05218b45..843d85fe4 100644 --- a/tests/test_profile_sync.py +++ b/tests/test_profile_sync.py @@ -514,6 +514,25 @@ class TestVerifyAtPin(unittest.TestCase): self.assertIsNone(profile_sync.cites_another_version(same, "0.16.0")) self.assertIsNone(profile_sync.cites_another_version(same, {"libretro": "v0.16.0"})) + def test_a_profile_with_a_repository_names_a_revision(self): + """redream declared libretro/redream, a repository that never + existed, with no pin and no date: profile_sync skipped it and no + revision answered for the files Batocera, RetroBat and KNULLI ship.""" + import yaml + + root = Path(__file__).resolve().parents[1] / "emulators" + unpinned = [ + path.stem + for path in sorted(root.glob("*.yml")) + if (profile := yaml.safe_load(path.read_text(encoding="utf-8")) or {}) + and (profile.get("source") or profile.get("upstream")) + and not any( + profile.get(key) + for key in ("source_commit", "upstream_commit", "profiled_date") + ) + ] + self.assertEqual(unpinned, []) + def test_a_profile_citing_versions_documents_its_own(self): """ti99sim's core_version went null while doc/CHANGES.html at its pin reads 0.16.0: every (v0.16.0) part then read as another version, and