mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-11-02 16:13:48 -06:00
chore: merge the boot oracle work
This commit is contained in:
commit
417ed86405
9 files changed
+357
-53
No files matched your search
+147
-2
@@ -21,6 +21,151 @@
|
||||
|
||||
error_patterns: []
|
||||
|
||||
cores: {}
|
||||
cores:
|
||||
# The PlayStation cores below log a missing or wrong BIOS and boot a
|
||||
# built-in one: none of those lines is an error pattern.
|
||||
"Beetle PSX":
|
||||
note: >-
|
||||
A missing BIOS logs "Firmware is missing" and loads the embedded
|
||||
OpenBIOS, a wrong one logs "Firmware found but has invalid SHA1" and is
|
||||
loaded anyway (libretro.c:849, 856, 3504-3511 at 7fea57a5).
|
||||
error_patterns: []
|
||||
error_screens: []
|
||||
"Beetle PSX HW":
|
||||
note: The same code as Beetle PSX, built with the hardware renderers.
|
||||
error_patterns: []
|
||||
error_screens: []
|
||||
"SwanStation":
|
||||
note: >-
|
||||
"No BIOS image found for <region> region" is followed by the built-in
|
||||
OpenBIOS (src/core/host_interface.cpp:182, src/core/system.cpp:678-682
|
||||
at 631f0fb3).
|
||||
error_patterns: []
|
||||
error_screens: []
|
||||
"PCSX-ReARMed":
|
||||
note: >-
|
||||
Without a BIOS, or with one of the wrong size, it logs "Using HLE BIOS"
|
||||
and runs its own (frontend/libretro.c:3893-3899 at c8816799). The BIOS
|
||||
boot logo is off by default (pcsx_rearmed_show_bios_bootlogo), so its
|
||||
runs reach no bios-stage screen.
|
||||
error_patterns: []
|
||||
error_screens: []
|
||||
"PCSX1":
|
||||
note: An HLE BIOS stands in when none is found, and the run logs nothing about it.
|
||||
error_patterns: []
|
||||
error_screens: []
|
||||
|
||||
content: []
|
||||
content:
|
||||
- name: "Bust-A-Move 2 - Arcade Edition (USA)"
|
||||
catalog: redump
|
||||
# The sha1 of the .cue handed to the core.
|
||||
sha1: ed4a437a6f653cc71ad6ac0da68cc85eb093f298
|
||||
references:
|
||||
"Beetle PSX":
|
||||
recorded_from: 2026-10-27-b0150a15670d
|
||||
frames:
|
||||
- sha1: 7b72ebae83893b63f9fffd1685f03b1d048d9fa9
|
||||
stage: bios
|
||||
shows: the Sony Computer Entertainment logo
|
||||
- sha1: 0905c920a1de996664eddca94f93f75d0dcd4c52
|
||||
stage: bios
|
||||
shows: the PlayStation logo licensed by Sony Computer Entertainment America
|
||||
- sha1: d51ab7783f8eeafc63a28f14ce39f8e2babeffb3
|
||||
stage: game
|
||||
shows: Now Loading with the yellow bubble
|
||||
- sha1: 63a96bd6d1d487da1824e10d37f6658506edc451
|
||||
stage: game
|
||||
shows: the Acclaim and Taito credits text, CREDIT 6
|
||||
- sha1: 6628416f377d2e25df45e5fa2126f8f9313551f0
|
||||
stage: game
|
||||
shows: the Acclaim logo, CREDIT 6
|
||||
- sha1: d68892362e0f33c41cc59dac1b5a2077fe5428ee
|
||||
stage: game
|
||||
shows: the Taito logo on white, CREDIT 6
|
||||
- sha1: 56330c6c7646c2c261acb3f48450825cb289845a
|
||||
stage: game
|
||||
shows: a black screen with CREDIT 6
|
||||
"Beetle PSX HW":
|
||||
recorded_from: 2026-10-27-ee69ad83c9f8
|
||||
frames:
|
||||
- sha1: 7b72ebae83893b63f9fffd1685f03b1d048d9fa9
|
||||
stage: bios
|
||||
shows: the Sony Computer Entertainment logo
|
||||
- sha1: 0905c920a1de996664eddca94f93f75d0dcd4c52
|
||||
stage: bios
|
||||
shows: the PlayStation logo licensed by Sony Computer Entertainment America
|
||||
- sha1: d51ab7783f8eeafc63a28f14ce39f8e2babeffb3
|
||||
stage: game
|
||||
shows: Now Loading with the yellow bubble
|
||||
- sha1: 63a96bd6d1d487da1824e10d37f6658506edc451
|
||||
stage: game
|
||||
shows: the Acclaim and Taito credits text, CREDIT 6
|
||||
- sha1: 6628416f377d2e25df45e5fa2126f8f9313551f0
|
||||
stage: game
|
||||
shows: the Acclaim logo, CREDIT 6
|
||||
- sha1: d68892362e0f33c41cc59dac1b5a2077fe5428ee
|
||||
stage: game
|
||||
shows: the Taito logo on white, CREDIT 6
|
||||
- sha1: 56330c6c7646c2c261acb3f48450825cb289845a
|
||||
stage: game
|
||||
shows: a black screen with CREDIT 6
|
||||
"SwanStation":
|
||||
recorded_from: 2026-10-27-717f780131fc
|
||||
frames:
|
||||
- sha1: fad859d9b8211ce9f35ad3a05b0b7d184fe14d83
|
||||
stage: bios
|
||||
shows: the Sony Computer Entertainment logo
|
||||
- sha1: 593a6e2600946040fefd6eb9aebdc5c0d56f0555
|
||||
stage: bios
|
||||
shows: the PlayStation logo licensed by Sony Computer Entertainment America
|
||||
- sha1: e5af1f2023d0d729ce7aabf52d8e03f75bb8d230
|
||||
stage: game
|
||||
shows: Now Loading with the yellow bubble
|
||||
- sha1: dd6dac23da6b8f4f256b8090568c52e8f8428425
|
||||
stage: game
|
||||
shows: the Acclaim and Taito credits text, CREDIT 6
|
||||
- sha1: 533715dd946ba1984af1b9356e06989c7770e04a
|
||||
stage: game
|
||||
shows: the Acclaim logo, CREDIT 6
|
||||
- sha1: 0d17db6e9a2d5793695884c85dd2177093420fdc
|
||||
stage: game
|
||||
shows: the Taito logo on white, CREDIT 6
|
||||
- sha1: 2238516839dc43c0b22c00db5fe76128f5fb6f3f
|
||||
stage: game
|
||||
shows: a black screen with CREDIT 6
|
||||
"PCSX-ReARMed":
|
||||
recorded_from: 2026-10-27-8154bab7bf80
|
||||
frames:
|
||||
- sha1: e5af1f2023d0d729ce7aabf52d8e03f75bb8d230
|
||||
stage: game
|
||||
shows: Now Loading with the yellow bubble
|
||||
- sha1: dd6dac23da6b8f4f256b8090568c52e8f8428425
|
||||
stage: game
|
||||
shows: the Acclaim and Taito credits text, CREDIT 6
|
||||
- sha1: 533715dd946ba1984af1b9356e06989c7770e04a
|
||||
stage: game
|
||||
shows: the Acclaim logo, CREDIT 6
|
||||
- sha1: 0d17db6e9a2d5793695884c85dd2177093420fdc
|
||||
stage: game
|
||||
shows: the Taito logo on white, CREDIT 6
|
||||
- sha1: 2238516839dc43c0b22c00db5fe76128f5fb6f3f
|
||||
stage: game
|
||||
shows: a black screen with CREDIT 6
|
||||
"PCSX1":
|
||||
recorded_from: 2026-10-27-2905a9dd4b0a
|
||||
frames:
|
||||
- sha1: e5af1f2023d0d729ce7aabf52d8e03f75bb8d230
|
||||
stage: game
|
||||
shows: Now Loading with the yellow bubble
|
||||
- sha1: dd6dac23da6b8f4f256b8090568c52e8f8428425
|
||||
stage: game
|
||||
shows: the Acclaim and Taito credits text, CREDIT 6
|
||||
- sha1: e10f642259f2906bb39ae07fcb4b5a36eae18287
|
||||
stage: game
|
||||
shows: the Acclaim logo with a stray strip at its right edge, CREDIT 6
|
||||
- sha1: 0d17db6e9a2d5793695884c85dd2177093420fdc
|
||||
stage: game
|
||||
shows: the Taito logo on white, CREDIT 6
|
||||
- sha1: 2238516839dc43c0b22c00db5fe76128f5fb6f3f
|
||||
stage: game
|
||||
shows: a black screen with CREDIT 6
|
||||
@@ -882,6 +882,19 @@ class Findings(Workspace):
|
||||
self.assertIn("would commit 'chore: add campaign measurements'", out.getvalue())
|
||||
|
||||
|
||||
class ContentFile(Workspace):
|
||||
def test_a_content_list_can_be_named(self) -> None:
|
||||
other = self.tmp / "other.yml"
|
||||
other.write_text(yaml.safe_dump({"systems": {"fake-system": {
|
||||
"romfetch": "fakesys", "content": [{"name": "Other Game (Japan)", "catalog": "redump",
|
||||
"reason": "r"}]}}}), encoding="utf-8")
|
||||
out = io.StringIO()
|
||||
with unittest.mock.patch.object(campaign.Paths, "default", return_value=self.paths), \
|
||||
contextlib.redirect_stdout(out):
|
||||
self.assertEqual(campaign.main(["run", "--dry-run", "--content-file", str(other)]), 0)
|
||||
self.assertIn("Other Game (Japan)", out.getvalue())
|
||||
|
||||
|
||||
class InstallTimer(unittest.TestCase):
|
||||
def test_writes_the_units_and_enables_only_when_asked(self) -> None:
|
||||
calls = []
|
||||
|
||||
@@ -209,7 +209,15 @@ class OracleTests(unittest.TestCase):
|
||||
logs=["BIOS not found"]), self.ORACLE)
|
||||
self.assertEqual(verdict, "boots")
|
||||
self.assertEqual((evidence["rule"], evidence["frame"], evidence["stages"]),
|
||||
("reference_frame", 10, ["bios", "game"]))
|
||||
("reference_frame", 20, ["bios", "game"]))
|
||||
|
||||
def test_the_bios_screens_alone_are_not_a_boot(self) -> None:
|
||||
# A console that shows its logo and then refuses the disc never reached the game.
|
||||
verdict, evidence = core_probe.judge(
|
||||
self.rep(frames((0, self.LOGO), (10, self.BLACK), (20, self.BLACK)), uniform=[self.BLACK]),
|
||||
self.ORACLE)
|
||||
self.assertEqual((verdict, evidence["rule"], evidence["stages"]), ("hang", "uniform_tail", ["bios"]))
|
||||
self.assertIn("no screen of the game", evidence["detail"])
|
||||
|
||||
def test_an_error_pattern_or_screen_without_a_reference_is_a_bios_error(self) -> None:
|
||||
verdict, evidence = core_probe.judge(
|
||||
|
||||
@@ -220,7 +220,7 @@ class ReadAndIndex(Workspace):
|
||||
keys = {"emulator", "emulator_name", "profiled", "systems", "system_names", "subject", "kind",
|
||||
"claim", "method", "observable", "variable", "status", "statement", "content",
|
||||
"variants", "repetitions", "flags", "date", "host", "core", "frontend_commit", "id",
|
||||
"runs", "record_url", "sqlite"}
|
||||
"runs", "record_url", "sqlite", "verdicts"}
|
||||
for item in index["items"]:
|
||||
self.assertEqual(set(item), keys)
|
||||
alpha = {i["subject"]: i for i in index["items"] if i["emulator"] == "alpha"}
|
||||
@@ -234,6 +234,25 @@ class ReadAndIndex(Workspace):
|
||||
written = json.loads((self.tmp / "public" / sm.INDEX_PATH).read_text())
|
||||
self.assertEqual(written, index)
|
||||
|
||||
def test_a_frame_check_shows_its_verdicts_never_frames_that_differ(self) -> None:
|
||||
record = full_record("alpha", "boot", "2026-10-06T10:00:00+00:00", observable="frame_hashes")
|
||||
record["variants"][1]["verdict"] = "hang"
|
||||
self.assertEqual(sm.result_of(record), ("mixed", "v0: boots. v1: hang"))
|
||||
self.assertEqual([v["verdict"] for v in sm.verdicts_of(record)], ["boots", "hang"])
|
||||
old = {**record, "record_version": 3,
|
||||
"variants": [{k: v for k, v in variant.items() if not k.startswith("verdict")}
|
||||
for variant in record["variants"]]}
|
||||
status, statement = sm.result_of(old)
|
||||
self.assertEqual(status, "no verdict")
|
||||
self.assertNotIn("differ", statement)
|
||||
# A check on another observable keeps its comparison.
|
||||
self.assertEqual(sm.result_of(full_record("alpha", "c", "2026-10-06T10:00:00+00:00"))[0], "differs")
|
||||
item = {"claim": "c", "runs": 1, "core": {"library": "Fake 1", "commit": None}, "status": "mixed",
|
||||
"statement": "", "verdicts": sm.verdicts_of(record), "method": "m", "host": "h",
|
||||
"date": "2026-10-06", "variants": 2, "repetitions": 2, "flags": 0, "record_url": "u"}
|
||||
text = "\n".join(sm.tested_item(item))
|
||||
self.assertIn("v1: `hang`", text)
|
||||
|
||||
def test_links_name_the_last_commit_that_touched_the_records(self) -> None:
|
||||
first = self.repository()
|
||||
(self.tree / "other.txt").write_text("x")
|
||||
|
||||
Reference in new issue
Block a user