From 9dd2a3d95f16075f57c077f442488fa0985b4f0a Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:40:56 +0200 Subject: [PATCH 01/49] fix: date-order tags and scope the write guard check_version read latest_tag as the first entry of GitHub's REST listing, which sorts by name (nesoid: 2.5 before 2.5-4, gargoyle: stable-20090825 before 2026.1.1), and found the declared tag only on that first page of 100. The newest tag now comes from GraphQL by commit date, and the declared one is asked for by name on GitHub, GitLab and Forgejo. The clean-tree guard of the write modes looked at the whole emulators directory: a loop of --emulator X --rebase-refs refused every profile after the first it wrote. It now looks at the selected profiles only. --- scripts/profile_sync.py | 42 +++++++++--------- scripts/upstream.py | 87 +++++++++++++++++++++++++++++++++++++- tests/test_profile_sync.py | 14 ++++++ tests/test_upstream.py | 47 ++++++++++++++++++++ 4 files changed, 169 insertions(+), 21 deletions(-) diff --git a/scripts/profile_sync.py b/scripts/profile_sync.py index 97823280..6f16c6c5 100644 --- a/scripts/profile_sync.py +++ b/scripts/profile_sync.py @@ -2179,20 +2179,16 @@ def check_version( declared = str(profile.get("core_version") or "") if not declared: return None - tags = upstream.list_tags(repo, cache_dir, offline) release = upstream.latest_release(repo, cache_dir, offline) - matches = declared in tags - commit = ( - upstream.resolve_tag_commit(repo, declared, cache_dir, offline) - if matches - else None - ) + # Asked by name: the first page of tags misses a release that a project + # publishing nightlies has pushed past a hundred newer tags. + commit = upstream.tag_commit(repo, declared, cache_dir, offline) return VersionReport( declared, - tags[0] if tags else None, + upstream.newest_tag(repo, cache_dir, offline), release.tag if release else None, release.date if release else None, - matches, + commit is not None, commit, ) @@ -3462,31 +3458,37 @@ def realign_prose( return messages -def _refuse_dirty_tree(emulators_dir: str) -> None: - """Writes need a clean profile tree to roll back to.""" +def _refuse_dirty_tree(emulators_dir: str, names: list[str]) -> None: + """Writes need a clean copy of each profile they touch to roll back to. + + Only the selected profiles count: a pass writing one profile after + another used to refuse every profile after the first it wrote. + """ try: - dirty = emulators_dir_is_dirty(emulators_dir) + dirty = emulators_dir_is_dirty(emulators_dir, names) except RuntimeError as e: print(f"{e}. Pass --force to write anyway.", file=sys.stderr) raise SystemExit(1) from e if dirty: print( - f"{emulators_dir} carries uncommitted changes. " - "Commit them first or pass --force.", + f"{emulators_dir} carries uncommitted changes to the selected " + "profiles. Commit them first or pass --force.", file=sys.stderr, ) raise SystemExit(1) -def emulators_dir_is_dirty(emulators_dir: str) -> bool: +def emulators_dir_is_dirty(emulators_dir: str, names: list[str] | None = None) -> bool: """True when the profile directory carries uncommitted changes. - Git is asked from inside the directory, so a profile tree that lives in - another repository answers for itself. A directory git cannot read is - never reported clean: the writes have nothing to roll back to. + ``names`` narrows the question to those profiles. Git is asked from + inside the directory, so a profile tree that lives in another + repository answers for itself. A directory git cannot read is never + reported clean: the writes have nothing to roll back to. """ + paths = [f"{name}.yml" for name in names] if names is not None else ["."] result = subprocess.run( - ["git", "-C", emulators_dir, "status", "--porcelain", "--", "."], + ["git", "-C", emulators_dir, "status", "--porcelain", "--", *paths], capture_output=True, text=True, check=False, @@ -4227,7 +4229,7 @@ def main() -> None: or args.realign_prose or args.attribute_refs ) if writes and not args.dry_run and not args.force: - _refuse_dirty_tree(args.emulators_dir) + _refuse_dirty_tree(args.emulators_dir, list(selected)) # A profile that could not be compared or written is not a profile with # nothing to review: it stays in every output and fails the run. diff --git a/scripts/upstream.py b/scripts/upstream.py index c23eb2e3..bb652fe2 100644 --- a/scripts/upstream.py +++ b/scripts/upstream.py @@ -614,6 +614,73 @@ def list_tags(repo: Repo, cache_dir: str, offline: bool = False) -> list[str]: return [t["name"] for t in payload if isinstance(t, dict) and t.get("name")] +GITHUB_GRAPHQL = "https://api.github.com/graphql" +_NEWEST_TAG_QUERY = ( + "query($owner:String!,$name:String!){repository(owner:$owner,name:$name)" + "{refs(refPrefix:\"refs/tags/\",first:1," + "orderBy:{field:TAG_COMMIT_DATE,direction:DESC}){nodes{name}}}}" +) + + +def _github_graphql( + query: str, variables: dict, cache_dir: str, offline: bool +) -> object | None: + """A cached GitHub GraphQL answer, or None without a token. + + GraphQL refuses anonymous calls, so an untokened run keeps the REST + answer it already had. + """ + from common import github_token # noqa: PLC0415 + + body = json.dumps({"query": query, "variables": variables}, sort_keys=True) + target = Path(cache_dir) / "_api" / f"{hashlib.sha256(body.encode()).hexdigest()}.json" + if target.is_file(): + fresh = time.time() - target.stat().st_mtime <= MOVING_TTL + if fresh or offline: + return json.loads(target.read_text(encoding="utf-8")) + token = github_token() + if offline or not token: + return None + headers = _headers(GITHUB_GRAPHQL, accept_json=True) + headers["Content-Type"] = "application/json" + req = urllib.request.Request( + GITHUB_GRAPHQL, data=body.encode(), headers=headers, method="POST" + ) + try: + with urllib.request.urlopen(req, timeout=30) as resp: + payload = json.loads(resp.read().decode()) + except urllib.error.HTTPError as exc: + raise _http_failure(GITHUB_GRAPHQL, exc) from exc + except (urllib.error.URLError, http.client.HTTPException, OSError) as exc: + raise UpstreamError(f"{GITHUB_GRAPHQL}: {exc}") from exc + if not isinstance(payload, dict) or payload.get("errors"): + return None + write_cache(target, json.dumps(payload)) + return payload + + +def newest_tag(repo: Repo, cache_dir: str, offline: bool = False) -> str | None: + """The tag on the newest commit. + + GitHub's REST listing sorts tags by name: nesoid lists 2.5 before 2.5-4, + gargoyle stable-20090825 before 2026.1.1. GraphQL sorts by commit date. + Elsewhere, or without a token, the forge's own first entry. + """ + if repo.family == "github": + payload = _github_graphql( + _NEWEST_TAG_QUERY, {"owner": repo.owner, "name": repo.name}, + cache_dir, offline, + ) + try: + nodes = payload["data"]["repository"]["refs"]["nodes"] + except (TypeError, KeyError): + nodes = None + if isinstance(nodes, list): + return nodes[0].get("name") if nodes else None + tags = list_tags(repo, cache_dir, offline) + return tags[0] if tags else None + + def resolve_tag_commit( repo: Repo, tag: str, cache_dir: str, offline: bool = False ) -> str | None: @@ -630,6 +697,22 @@ def resolve_tag_commit( return None +def _named_tag_commit( + repo: Repo, tag: str, cache_dir: str, offline: bool +) -> str | None: + """A GitLab or Forgejo tag's commit, asked for by name.""" + quoted = urllib.parse.quote(tag, safe="") + if repo.family == "gitlab": + url = f"{repo.api_base}/projects/{_project(repo)}/repository/tags/{quoted}" + else: + url = f"{repo.api_base}/repos/{repo.slug}/tags/{quoted}" + payload = _api(url, cache_dir, offline, absent_max_age=MOVING_TTL) + commit = payload.get("commit") if isinstance(payload, dict) else None + if not isinstance(commit, dict): + return None + return commit.get("id") or commit.get("sha") + + def tag_commit( repo: Repo, tag: str, cache_dir: str, offline: bool = False ) -> str | None: @@ -640,7 +723,9 @@ def tag_commit( An annotated tag points at a tag object, which is dereferenced. """ if repo.family != "github": - return resolve_tag_commit(repo, tag, cache_dir, offline) + return _named_tag_commit(repo, tag, cache_dir, offline) or resolve_tag_commit( + repo, tag, cache_dir, offline + ) quoted = urllib.parse.quote(tag) # A tag pushed after the first lookup must be seen: the 404 expires, # the commit a tag names does not. diff --git a/tests/test_profile_sync.py b/tests/test_profile_sync.py index e98e8a0d..949ae3c2 100644 --- a/tests/test_profile_sync.py +++ b/tests/test_profile_sync.py @@ -3152,6 +3152,7 @@ class TestCheckVersion(unittest.TestCase): "tagsha" if tag == "v3.0.0" else None ) ) + profile_sync.upstream.tag_commit = profile_sync.upstream.resolve_tag_commit def tearDown(self): ( @@ -4530,6 +4531,19 @@ class TestEmulatorsDirStatus(unittest.TestCase): Path(root, "a.yml").write_text("emulator: a\n") self.assertTrue(profile_sync.emulators_dir_is_dirty(root)) + def test_only_the_selected_profiles_count(self): + # A loop of --emulator X --rebase-refs refused every profile after + # the first one it wrote. + with tempfile.TemporaryDirectory() as root: + self._git("init", "-q", cwd=root) + Path(root, "a.yml").write_text("emulator: a\n") + Path(root, "b.yml").write_text("emulator: b\n") + self._git("add", "a.yml", "b.yml", cwd=root) + self._git("-c", "user.name=t", "-c", "user.email=t@t", "commit", "-qm", "p", cwd=root) + Path(root, "a.yml").write_text("emulator: a2\n") + self.assertTrue(profile_sync.emulators_dir_is_dirty(root, ["a"])) + self.assertFalse(profile_sync.emulators_dir_is_dirty(root, ["b"])) + def test_a_tree_outside_any_repository_is_not_clean(self): with tempfile.TemporaryDirectory() as root, mock.patch.dict( os.environ, {"GIT_CEILING_DIRECTORIES": str(Path(root).parent)} diff --git a/tests/test_upstream.py b/tests/test_upstream.py index faebdf4c..2aa04c4b 100644 --- a/tests/test_upstream.py +++ b/tests/test_upstream.py @@ -910,5 +910,52 @@ class TestCurrentSlug(unittest.TestCase): ) + +class TestNewestTag(unittest.TestCase): + """GitHub's REST tag list is sorted by name: nesoid lists 2.5 before + 2.5-4, so the first entry was reported as the latest tag.""" + + def setUp(self): + self.tmp = tempfile.TemporaryDirectory() + self.repo = make_repo("github.com", "o", "n") + self.saved = (upstream._github_graphql, upstream.list_tags) + upstream.list_tags = lambda repo, cache, offline=False: ["2.5", "2.5-4"] + + def tearDown(self): + upstream._github_graphql, upstream.list_tags = self.saved + self.tmp.cleanup() + + def test_commit_date_order_wins(self): + upstream._github_graphql = lambda *a: { + "data": {"repository": {"refs": {"nodes": [{"name": "2.5-4"}]}}} + } + self.assertEqual(upstream.newest_tag(self.repo, self.tmp.name), "2.5-4") + + def test_without_a_token_the_forge_order_stays(self): + upstream._github_graphql = lambda *a: None + self.assertEqual(upstream.newest_tag(self.repo, self.tmp.name), "2.5") + + +class TestNamedTagCommit(unittest.TestCase): + def setUp(self): + self.tmp = tempfile.TemporaryDirectory() + self.saved = upstream._http_json + + def tearDown(self): + upstream._http_json = self.saved + self.tmp.cleanup() + + def test_gitlab_tag_is_asked_by_name(self): + asked = [] + + def answer(url): + asked.append(url) + return {"name": "1.2.35", "commit": {"id": "c74fc36"}} + + upstream._http_json = answer + repo = parse_repo("https://gitlab.com/jengun/sdltrs") + self.assertEqual(upstream.tag_commit(repo, "1.2.35", self.tmp.name), "c74fc36") + self.assertTrue(asked[0].endswith("/repository/tags/1.2.35")) + if __name__ == "__main__": unittest.main() From d1a6e96820f503f35b54c5f2dde2264c98a73847 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:50:51 +0200 Subject: [PATCH 02/49] fix: check the prose a bump leaves behind The prose guard read citations under the pins a profile held before the write. A bump that moves upstream_commit alone could then leave prose the report had judged in the fork under the new upstream pin: ten profiles (dolphin-mmjr2, hatari, xenios among them) came out of a bump with prose to read again. The written file is now read again and the original bytes put back when a citation is left under an older pin. A pin_frozen reason was printed as a tag name ("pinned to tag EmuELEC, the only platform..."); it now reads "pin held (...)". --- scripts/profile_sync.py | 23 ++++++++++++++++++++--- tests/test_profile_sync.py | 15 +++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/scripts/profile_sync.py b/scripts/profile_sync.py index 6f16c6c5..11088f9e 100644 --- a/scripts/profile_sync.py +++ b/scripts/profile_sync.py @@ -938,6 +938,8 @@ class ProfileReport: repo: str | None = None repos: list[str] = field(default_factory=list) pinned_tag: str | None = None + # Set when pinned_tag carries a pin_frozen reason rather than a tag name. + pin_frozen: bool = False host: str | None = None pin: str | None = None pin_origin: str | None = None @@ -1534,6 +1536,7 @@ def build_report( # its refs at code the build never had, so it is judged like a frozen tag: # against itself. frozen = str(profile.get("pin_frozen") or "").strip() + report.pin_frozen = bool(frozen) report.pinned_tag = frozen or detect_pinned_tag( profile, views, cache_dir, offline ) @@ -2056,10 +2059,11 @@ def format_report(report: ProfileReport, changed_only: bool = False) -> str: f" {report.pin[:7]} -> {report.head[:7]} pin: {report.pin_origin}" ) if report.pinned_tag: - lines.append( - f" pinned to tag {report.pinned_tag}: checked against its own " - "revision, not against HEAD" + held = ( + f"pin held ({report.pinned_tag})" if report.pin_frozen + else f"pinned to tag {report.pinned_tag}" ) + lines.append(f" {held}: checked against its own revision, not against HEAD") elif report.pin and report.pin == report.head: lines.append(" pin is HEAD: checked for self-consistency") if report.upstream_tag and not report.pinned_tag: @@ -3868,7 +3872,20 @@ def _apply_writes( for pin in pins_changed(before, after): print(f"{name}: {bumped}{pin} -> {str(after[pin])[:7]}") if not args.dry_run and (applied or moved): + original = path.read_bytes() path.write_bytes(target.read_bytes()) + # The guard above read the prose under the pins the profile held. + # A bump that moves upstream_commit can leave prose the report + # judged in the fork under the new upstream pin (dolphin-mmjr2, + # hatari, xenios): read it again on what was written. + left = realign_prose(path, args.cache_dir, args.offline, dry_run=True) + if moved and left: + path.write_bytes(original) + print( + f"{name}: the bump would leave {len(left)} prose citation(s) " + "under an older pin, nothing was written; read them first", + file=sys.stderr, + ) def _cited_paths(report: ProfileReport) -> list[str]: diff --git a/tests/test_profile_sync.py b/tests/test_profile_sync.py index 949ae3c2..9eb3eec0 100644 --- a/tests/test_profile_sync.py +++ b/tests/test_profile_sync.py @@ -2723,6 +2723,21 @@ class TestWriteDryRun(unittest.TestCase): self.assertNotIn("source_commit", output) self.assertEqual(self.path.read_text(), before) + def test_a_bump_that_leaves_stale_prose_is_rolled_back(self): + """dolphin-mmjr2, hatari, xenios: the bump moved upstream_commit only, + and prose the report had judged in the fork fell under the new + upstream pin. The guard had read it under the old pins.""" + from unittest import mock + + before = self.path.read_text() + answers = iter([[], ["notes: a.c:10 (a.c:10 changed)"]]) + with mock.patch.object( + profile_sync, "realign_prose", side_effect=lambda *a, **k: next(answers) + ), contextlib.redirect_stderr(io.StringIO()) as err: + self._run(self._args(rebase_refs=True, dry_run=False), self._shifted()) + self.assertEqual(self.path.read_text(), before) + self.assertIn("nothing was written", err.getvalue()) + def test_a_planned_bump_reads_the_prose_the_rebase_would_have_left(self): """The pin is blocked by prose until the rebase moves it. From 8458e92281149610ff156f93b7921bec2cd2b89f Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:51:08 +0200 Subject: [PATCH 03/49] chore: advance 135 profile pins to upstream HEAD Every cited block was read again at HEAD: no ref left to review, no file name or hash literal added to a cited file since the pin (--detect-new-files --watch-hashes), refs recaled with their pins. Profiles built by a platform at a fixed commit, or whose bump would leave prose under an older pin, stay where they were. --- emulators/2600-emu.yml | 2 +- emulators/a7800.yml | 1 + emulators/aethersx2.yml | 1 + emulators/applewin.yml | 3 +- emulators/arcadeduck.yml | 1 + emulators/ardens.yml | 2 +- emulators/atari800.yml | 1 + emulators/ax360e.yml | 2 +- emulators/azaharplus.yml | 10 ++--- emulators/bbkemu.yml | 2 +- emulators/beetle_psx.yml | 32 +++++++------- emulators/beetle_saturn.yml | 34 +++++++-------- emulators/beetle_vb.yml | 4 +- emulators/blastem.yml | 2 +- emulators/bsnes.yml | 1 + emulators/bsnes2014.yml | 1 + emulators/bsnes_hd_beta.yml | 1 + emulators/c64-emu.yml | 1 + emulators/catacombgl.yml | 2 +- emulators/chimerasnes.yml | 1 + emulators/clk.yml | 8 ++-- emulators/cruzes.yml | 8 ++-- emulators/desmume.yml | 1 + emulators/desmume2015.yml | 1 + emulators/dice.yml | 2 +- emulators/dosbox-staging.yml | 14 +++--- emulators/doukutsu_rs.yml | 1 + emulators/duckstation.yml | 10 ++--- emulators/dxx-rebirth.yml | 24 +++++------ emulators/easyrpg.yml | 2 +- emulators/eternal.yml | 2 +- emulators/fbneo_cps12.yml | 3 +- emulators/fceumm.yml | 2 +- emulators/flycast.yml | 4 +- emulators/freej2me.yml | 4 +- emulators/freej2me_plus.yml | 28 ++++++------ emulators/frotz.yml | 10 ++--- emulators/gam4980.yml | 1 + emulators/gambatte.yml | 2 +- emulators/gametank.yml | 2 +- emulators/gba-emu.yml | 4 +- emulators/gearboy.yml | 6 +-- emulators/geargrafx.yml | 68 +++++++++++++++--------------- emulators/gearlynx.yml | 12 +++--- emulators/gearsystem.yml | 8 ++-- emulators/genesis_plus_gx.yml | 3 +- emulators/genesis_plus_gx_wide.yml | 1 + emulators/geolith.yml | 4 +- emulators/hakux.yml | 2 +- emulators/hatari2014.yml | 36 ++++++++-------- emulators/hatarib.yml | 4 +- emulators/ioquake3.yml | 2 +- emulators/izapple2.yml | 8 ++-- emulators/jollycv.yml | 2 +- emulators/julius.yml | 20 ++++----- emulators/kemulator.yml | 2 +- emulators/kronos.yml | 2 +- emulators/lightspark.yml | 2 +- emulators/linapple.yml | 1 + emulators/lrps2.yml | 4 +- emulators/mamearcade.yml | 2 +- emulators/mamemess.yml | 6 +-- emulators/md-emu.yml | 2 +- emulators/mednafen_pce_fast.yml | 2 +- emulators/mednafen_supergrafx.yml | 2 +- emulators/melonds.yml | 1 + emulators/melonds_ds.yml | 2 +- emulators/mesen-s.yml | 2 +- emulators/mgba.yml | 1 + emulators/mgba_splitscreen.yml | 5 ++- emulators/mkxp_z.yml | 1 + emulators/mupen64plus_next.yml | 3 +- emulators/nes-emu.yml | 2 +- emulators/nestopia.yml | 9 ++-- emulators/noods.yml | 1 + emulators/np2kai.yml | 2 +- emulators/openbor.yml | 2 +- emulators/openjkdf2.yml | 16 +++---- emulators/openlara.yml | 1 + emulators/openmsx.yml | 4 +- emulators/opentyrian.yml | 1 + emulators/opera.yml | 2 +- emulators/parallel-launcher.yml | 2 +- emulators/parallel_n64.yml | 5 ++- emulators/pcem.yml | 1 + emulators/pcsx1.yml | 1 + emulators/pcsx2.yml | 6 +-- emulators/pcsx_rearmed.yml | 1 + emulators/picodrive.yml | 1 + emulators/pokketstation.yml | 4 +- emulators/ppsspp.yml | 6 +-- emulators/puae.yml | 2 +- emulators/puae2021.yml | 2 +- emulators/qemu.yml | 1 + emulators/raine.yml | 14 +++--- emulators/retro8.yml | 1 + emulators/rpcs3.yml | 8 ++-- emulators/same_cdi.yml | 1 + emulators/sameboy.yml | 1 + emulators/sdlpal.yml | 2 +- emulators/shadps4.yml | 2 +- emulators/skyemu.yml | 12 +++--- emulators/snes9x-explus.yml | 2 +- emulators/snes9x.yml | 2 +- emulators/snes9x2002.yml | 1 + emulators/snes9x2010.yml | 1 + emulators/sonic3-air.yml | 2 +- emulators/soniccd.yml | 2 +- emulators/spmp8000emu.yml | 2 +- emulators/squirreljme.yml | 22 +++++----- emulators/srb2.yml | 20 ++++----- emulators/stella2014.yml | 1 + emulators/stella2023.yml | 1 + emulators/stonesoup.yml | 1 + emulators/swanstation.yml | 3 +- emulators/teknoparrot.yml | 2 +- emulators/thextech.yml | 8 ++-- emulators/tyrquake.yml | 2 +- emulators/vba_next.yml | 4 +- emulators/vbam.yml | 1 + emulators/vecx.yml | 4 +- emulators/vice.yml | 2 +- emulators/vice_x128.yml | 2 +- emulators/vice_x64.yml | 2 +- emulators/vice_x64dtv.yml | 2 +- emulators/vice_x64sc.yml | 2 +- emulators/vice_xscpu64.yml | 2 +- emulators/vice_xvic.yml | 2 +- emulators/vircon32.yml | 5 ++- emulators/vkquake3.yml | 2 +- emulators/winuae.yml | 6 +-- emulators/xash3d_fwgs.yml | 2 +- emulators/xemu-chihiro.yml | 3 +- emulators/xendroid.yml | 2 +- emulators/xenia.yml | 4 +- 135 files changed, 365 insertions(+), 320 deletions(-) diff --git a/emulators/2600-emu.yml b/emulators/2600-emu.yml index 654b1669..100178e3 100644 --- a/emulators/2600-emu.yml +++ b/emulators/2600-emu.yml @@ -5,7 +5,7 @@ source: "https://github.com/Rakashazi/emu-ex-plus-alpha" upstream: "https://github.com/stella-emu/stella" profiled_date: "2026-08-11" source_commit: "1c12fac5ce49badaadff2e2f210dcc30b89f4943" -upstream_commit: "d55b1aec0d067a4c901a6dcdf81cb8f579685659" +upstream_commit: "2c3d7023e9136f75c789803b44f119d8749dc104" core_version: "1.5.85" display_name: "Atari - 2600 (2600.emu)" mode: standalone diff --git a/emulators/a7800.yml b/emulators/a7800.yml index 6d01e419..57220562 100644 --- a/emulators/a7800.yml +++ b/emulators/a7800.yml @@ -5,6 +5,7 @@ source: "https://github.com/7800-devtools/a7800" upstream: "https://github.com/mamedev/mame" profiled_date: "2026-08-08" source_commit: "7a2afdc1ea08fc331b16b750d8c1f02d4ef62fc8" +upstream_commit: "61a222977fd29f22ce11fbea3f7c290fd7ced091" core_version: "5.2" display_name: "Atari - 7800 (A7800)" cores: diff --git a/emulators/aethersx2.yml b/emulators/aethersx2.yml index 1fc014b5..7655a4e2 100644 --- a/emulators/aethersx2.yml +++ b/emulators/aethersx2.yml @@ -6,6 +6,7 @@ source: "https://github.com/Trixarian/AetherSX2" upstream: "https://github.com/PCSX2/pcsx2" profiled_date: "2026-08-11" source_commit: "1d1f795dfc70e38da67724c7298779260f513889" +upstream_commit: "7fe1e5525a2c219c119aa9586cee4ceae2f54ce1" core_version: "1.5-3939" display_name: "Sony - PlayStation 2 (AetherSX2)" cores: diff --git a/emulators/applewin.yml b/emulators/applewin.yml index fda1f0cc..9e6855d4 100644 --- a/emulators/applewin.yml +++ b/emulators/applewin.yml @@ -4,7 +4,8 @@ core_classification: community_fork source: "https://github.com/audetto/AppleWin" upstream: "https://github.com/AppleWin/AppleWin" profiled_date: "2026-03-23" -source_commit: "7062ae417896da6050e2e39030215062bb4672ee" +source_commit: "a1e20c0362f392dc25f1a3b218d2f84d4f1a25da" +upstream_commit: "35366c56439701b58ce9efd4039118e26d725c44" core_version: "1.31.0.1" display_name: "Apple II (AppleWin)" cores: diff --git a/emulators/arcadeduck.yml b/emulators/arcadeduck.yml index a17dfe63..62733392 100644 --- a/emulators/arcadeduck.yml +++ b/emulators/arcadeduck.yml @@ -4,6 +4,7 @@ core_classification: community_fork source: "https://github.com/StillJC/ArcadeDuck" upstream: "https://github.com/stenzek/duckstation" source_commit: "26caf9cd27915a331fa32dc174489383b308ecad" +upstream_commit: "938c6d2a03e523d0e4275aa753f289a987bcb016" profiled_date: "2026-10-20" core_version: "latest (26caf9c)" display_name: "Arcade - Sony ZN-1, Namco System 11, Konami GV/GQ (ArcadeDuck)" diff --git a/emulators/ardens.yml b/emulators/ardens.yml index fa099f1a..f92f2163 100644 --- a/emulators/ardens.yml +++ b/emulators/ardens.yml @@ -4,7 +4,7 @@ core_classification: official_port source: "https://github.com/tiberiusbrown/ardens" upstream: "https://github.com/tiberiusbrown/ardens" profiled_date: "2026-03-23" -source_commit: "ba7ad0dcfc196459859d304a8c483b38621c7cfa" +source_commit: "e811cc6be72c8a802bd3265a84daf4165c177b93" core_version: "Git" display_name: "Arduboy (Ardens)" cores: diff --git a/emulators/atari800.yml b/emulators/atari800.yml index 9fa6c1f5..6419902b 100644 --- a/emulators/atari800.yml +++ b/emulators/atari800.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/libretro-atari800" upstream: "https://github.com/atari800/atari800" profiled_date: "2026-03-23" source_commit: "4e7fbc73765c1a9670c7506616046ad1d4ccda51" +upstream_commit: "98cc2dc749867c9c7317a0271ba062a6c797f886" core_version: "3.1.0" display_name: "Atari - 400/800/600XL/800XL/130XE/5200 (Atari800)" cores: [atari800] diff --git a/emulators/ax360e.yml b/emulators/ax360e.yml index 0b7cd530..bf79215a 100644 --- a/emulators/ax360e.yml +++ b/emulators/ax360e.yml @@ -6,7 +6,7 @@ source_branch: main upstream: "https://github.com/xenia-canary/xenia-canary" profiled_date: "2026-08-11" source_commit: "b8c1838f21761ac463724e24105eda97b990e704" -upstream_commit: "dc561e4df578c903087f9bdf56ff61d9ef9f2a93" +upstream_commit: "534aeb64ea1937361573e3933d121e636463b135" core_version: "1.18" display_name: "Microsoft - Xbox 360 (aX360e)" cores: diff --git a/emulators/azaharplus.yml b/emulators/azaharplus.yml index 68941289..107d3f63 100644 --- a/emulators/azaharplus.yml +++ b/emulators/azaharplus.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/AzaharPlus/AzaharPlus" upstream: "https://github.com/AzaharPlus/AzaharPlus" profiled_date: "2026-08-08" -source_commit: "dab27d996555ca220b7dbd106a2e5f03b6af34ac" +source_commit: "cf9068844820f819a6eabbeeeb6a70d546e3e85a" core_version: "2126.0-A" display_name: "Nintendo - 3DS (AzaharPlus)" cores: @@ -23,7 +23,7 @@ notes: | keys.txt has an AES-encrypted key blob compiled into the binary, used when the file is absent. ENABLE_BUILTIN_KEYBLOB defaults to ON. - ref: src/core/hw/aes/key.cpp:483-611, CMakeLists.txt:153 + ref: src/core/hw/aes/key.cpp:483-611, CMakeLists.txt:160 1861 title seeds are compiled in and loaded before seeddb.bin is read. ref: src/core/file_sys/seed_db.cpp:50-52, src/core/file_sys/seed_db.cpp:218 @@ -32,17 +32,17 @@ notes: | open-source replacements embedded in the binary, and ClCertA falls back to an embedded certificate and key pair. ref: src/core/file_sys/archive_ncch.cpp:174-203, - src/core/hle/service/http/http_c.cpp:2107-2133 + src/core/hle/service/http/http_c.cpp:2262-2288 otp.bin, movable.sed, SecureInfo_A and LocalFriendCodeSeed_B are replaced by embedded dummy data when enable_required_online_lle_modules is set. That setting defaults to false, and every loader returns a not-found status without it. - ref: src/common/settings.h:492-493 + ref: src/common/settings.h:493-494 System titles are downloaded and installed in-app from the Nintendo CDN, so the NAND title tree is not user-supplied. - ref: src/core/nus_download.cpp:13, src/core/hle/service/am/am.cpp:1219-1242 + ref: src/core/nus_download.cpp:13, src/core/hle/service/am/am.cpp:1357-1380 sector0x96.bin is defined but read by no code path. ref: src/common/common_paths.h:86 diff --git a/emulators/bbkemu.yml b/emulators/bbkemu.yml index e8d44da3..ec9a4aeb 100644 --- a/emulators/bbkemu.yml +++ b/emulators/bbkemu.yml @@ -4,7 +4,7 @@ core_classification: pure_libretro source: "https://github.com/AloysHF/BBKEmu" upstream: "https://github.com/AloysHF/BBKEmu" profiled_date: "2026-09-03" -source_commit: "09bc66de868c8d2d6e1e1a6339552baf0c778b34" +source_commit: "aef61bd59d5eb65780ace33e288086dd98f709c5" core_version: "0.1.0" display_name: "BBK - Electronic Dictionary (BBKEmu)" cores: diff --git a/emulators/beetle_psx.yml b/emulators/beetle_psx.yml index d2df9ecf..5461b7f5 100644 --- a/emulators/beetle_psx.yml +++ b/emulators/beetle_psx.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/libretro/beetle-psx-libretro" upstream: "https://mednafen.github.io/" profiled_date: "2026-03-29" -source_commit: "5ec9909f2654fb2041315a13fac0b704c5065c0e" +source_commit: "9bcc75d0a3e8310a273afb8fac1409224ff42c29" core_version: "v0.9.44.1" display_name: "Sony - PlayStation (Beetle PSX)" cores: [beetle_psx, mednafen_psx, mednafen_psx_hw] @@ -13,18 +13,18 @@ notes: > Region-based BIOS selection: the core picks JP/NA/EU firmware based on disc region. SHA1 validated with warning on mismatch (does not block loading). SHA1 and alternate filenames sourced from MAME (mame src/mame/sony/psx.cpp). - The lists and the checksum search live in libretro.c:448-502,510-602. + The lists and the checksum search live in libretro.c:541-595,603-695. Override option allows using PSP, PS3, or OpenBIOS as region-free alternative. Embedded OpenBIOS (512KB) compiled into the binary serves as HLE fallback when no BIOS found. "Skip BIOS" option patches BIOS ROM but causes compatibility issues. Upstream Mednafen loads the same 3 region BIOS. Override BIOS and HLE fallback are libretro additions. Two BIOS geometries are accepted: the stock 512 KB kernel and the 1 MB SCPH-5903 part, - selected by file size at load time (libretro.c:3203-3217). A 1 MB image switches Video CD - from HLE to daughterboard emulation (libretro.c:6159). Reached through the BIOS path + selected by file size at load time (libretro.c:3386-3400). A 1 MB image switches Video CD + from HLE to daughterboard emulation (libretro.c:6515). Reached through the BIOS path override only: the region name lists carry no SCPH-5903 entry, and the firmware scan - compares against the region SHA1, so a 1 MB file never matches there (libretro.c:485-493). + compares against the region SHA1, so a 1 MB file never matches there (libretro.c:578-586). Mednafen rejects a BIOS that is not 524288 bytes (mednafen psx.cpp:1777), and the - fork keeps that geometry as BIOS_SIZE_STD (libretro.c:1126), so this geometry is + fork keeps that geometry as BIOS_SIZE_STD (libretro.c:1219), so this geometry is libretro only. files: @@ -40,19 +40,19 @@ files: md5: "8dd7d5296a650fac7319bce665a6a53c" validation: [sha1] mode: both - source_ref: "libretro.c:594-602" + source_ref: "libretro.c:687-695" aliases: ["SCPH5500.bin", "SCPH-5500.bin"] - name: "scph5903.bin" description: "SCPH-5903 (System ROM Version 2.2 12/04/95 J), Video CD daughterboard" required: false - note: "No code path opens this name: the Japanese name list and the SHA-1 scan look for scph5500.bin (libretro.c:594-602, 486-490). Copied as scph5500.bin it loads with a SHA-1 warning (libretro.c:680-687) and enables the Video CD daughterboard." + note: "No code path opens this name: the Japanese name list and the SHA-1 scan look for scph5500.bin (libretro.c:687-695, 579-583). Copied as scph5500.bin it loads with a SHA-1 warning (libretro.c:773-780) and enables the Video CD daughterboard." size: 1048576 sha1: "15c94da3cc5a38a582429575af4198c487fe893c" md5: "81328b966e6dcf7ea1e32e55e1c104bb" validation: [size, sha1] mode: libretro - source_ref: "libretro.c:604-611, libretro.c:3203-3217, libretro.c:3236-3238, libretro.c:6159" + source_ref: "libretro.c:697-704, libretro.c:3386-3400, libretro.c:3419-3421, libretro.c:6515" # -- Region: North America (REGION_NA) -- @@ -66,8 +66,8 @@ files: md5: "490f666e1afb15b7362b406ed1cea246" validation: [sha1] mode: both - note: "Picked for REGION_NA: a SYSTEM.CNF serial whose third letter is U (SCUS, SLUS), a licence string naming America, and content whose region cannot be read while the region option stays on auto (libretro.c:2172-2174, 2198, 2249-2254, 3171-3185, 4436)." - source_ref: "libretro.c:613-631" + note: "Picked for REGION_NA: a SYSTEM.CNF serial whose third letter is U (SCUS, SLUS), a licence string naming America, and content whose region cannot be read while the region option stays on auto (libretro.c:2355-2357, 2198, 2249-2254, 3171-3185, 4436)." + source_ref: "libretro.c:706-724" aliases: - "SCPH5501.bin" - "SCPH-5501.bin" @@ -90,7 +90,7 @@ files: md5: "32736f17079d0b2b7024407c39bd3050" validation: [sha1] mode: both - source_ref: "libretro.c:633-647" + source_ref: "libretro.c:726-740" aliases: - "SCPH5502.bin" - "SCPH-5502.bin" @@ -108,7 +108,7 @@ files: md5: "c53ca5908936d412331790f4426c6c33" validation: [sha1] mode: libretro - source_ref: "libretro.c:523-529" + source_ref: "libretro.c:616-622" aliases: ["PSXONPSP660.bin"] note: "override_bios=1. Tried as psxonpsp660.bin, PSXONPSP660.bin, then PSXONPSP660.BIN. Falls back to region BIOS if not found." @@ -119,7 +119,7 @@ files: md5: "81bbe60ba7a3d1cea1d48c14cbcc647b" validation: [sha1] mode: libretro - source_ref: "libretro.c:531-537" + source_ref: "libretro.c:624-630" aliases: ["PS1_ROM.bin"] note: "override_bios=2. Tried as ps1_rom.bin, PS1_ROM.bin, then PS1_ROM.BIN. Falls back to region BIOS if not found." @@ -128,6 +128,6 @@ files: required: false size: 524288 mode: libretro - source_ref: "libretro.c:539-545" + source_ref: "libretro.c:632-638" aliases: ["OPENBIOS.bin"] - note: "override_bios=3. No SHA1 validation. Falls back to region BIOS if not found. Also embedded in binary as HLE fallback (libretro.c:2264-2266)." + note: "override_bios=3. No SHA1 validation. Falls back to region BIOS if not found. Also embedded in binary as HLE fallback (libretro.c:2447-2449)." diff --git a/emulators/beetle_saturn.yml b/emulators/beetle_saturn.yml index 6f9b4123..e5446406 100644 --- a/emulators/beetle_saturn.yml +++ b/emulators/beetle_saturn.yml @@ -5,7 +5,7 @@ core: mednafen_saturn_libretro source: "https://github.com/libretro/beetle-saturn-libretro" upstream: "https://mednafen.github.io/" profiled_date: "2026-10-05" -source_commit: "65f05fa66f83e65e33be83aa433d883b4fd9509a" +source_commit: "d0d841784845da0278a9a49554cc4cc01597ee2c" core_version: "v1.32.1" display_name: "Sega - Saturn (Beetle Saturn)" cores: @@ -17,46 +17,46 @@ systems: notes: | Libretro port of Mednafen's Saturn emulation module, converted to C and - reporting v1.32.1 (libretro.c:57). Every firmware file is read from the + reporting v1.32.1 (libretro.c:58). Every firmware file is read from the system directory: MDFN_MakeFName joins retro_base_directory and the bare - name for MDFNMKF_FIRMWARE (libretro.c:2267-2268), and the BIOS path is + name for MDFNMKF_FIRMWARE (libretro.c:2347-2348), and the BIOS path is built the same way (mednafen/ss/ss.c:1867-1869). Region comes from the disc header and the region table of - mednafen/ss/db.c (libretro.c:1147-1149) and can be forced by the - beetle_saturn_region option (libretro.c:488-510, libretro.c:1153-1154). + mednafen/ss/db.c (libretro.c:1113-1115) and can be forced by the + beetle_saturn_region option (libretro.c:454-476, libretro.c:1119-1120). With no content loaded the region defaults to North America - (libretro.c:1103, libretro.c:1300-1301). The BIOS filename is hard-coded + (libretro.c:1069, libretro.c:1266-1267). The BIOS filename is hard-coded per region (mednafen/ss/ss.c:1845-1848): sega_101.bin for Japan and Asia NTSC, mpr-17933.bin for every other area. The file must be exactly 524288 bytes and InitCommon returns false when it is absent, of another size or short on read (mednafen/ss/ss.c:1943-1947, mednafen/ss/ss.c:1961-1984). The sha256 of the loaded image is kept only to refuse a save state made - under another BIOS (mednafen/ss/ss.c:1988, mednafen/ss/ss.c:2589-2608). + under another BIOS (mednafen/ss/ss.c:1988, mednafen/ss/ss.c:2594-2613). ss.bios_sanity answers true (mednafen/settings.c:50-51) but nothing in the port reads it: the name and hash table that upstream checks under that setting is not carried over. The cartridge is chosen by the game table of mednafen/ss/db.c or by the - beetle_saturn_cart option (libretro.c:512-530, libretro.c:1157-1158). The + beetle_saturn_cart option (libretro.c:478-496, libretro.c:1123-1124). The KOF95 and Ultraman ROM carts are opened from the system directory under the names of mednafen/settings.c:62-65 (mednafen/ss/cart.c:197-216). An absent file leaves the cart slot on the dummy handlers and the load goes on (mednafen/ss/cart.c:209). ST-V content is a game ZIP or a bare ROM matched against the ST-V game - table (libretro.c:1207-1227, libretro.c:1261-1281). The cabinet region of + table (libretro.c:1173-1193, libretro.c:1227-1247). The cabinet region of the matched game selects one of three ST-V BIOS images (mednafen/ss/ss.c:1829-1843), and the beetle_saturn_region option is not - applied on that path (libretro.c:1217, libretro.c:1275). The image is read + applied on that path (libretro.c:1183, libretro.c:1241). The image is read as a bare file from the system directory or, when that file is absent, as the member of the same name in stvbios.zip there, matched without regard - to case (mednafen/ss/ss.c:1875-1949, zip_reader.c:358-365). Either form + to case (mednafen/ss/ss.c:1875-1949, zip_reader.c:350-357). Either form may be 131072 or 524288 bytes (mednafen/ss/ss.c:1911-1912, mednafen/ss/ss.c:1962). The Video CD Card is driven through the CD block. With the - beetle_saturn_mpeg_card option enabled (libretro.c:578-586, default + beetle_saturn_mpeg_card option enabled (libretro.c:544-552, default disabled), CDB_Init opens mpeg_card.bin in the system directory and MPEG_Init keeps up to 0x80000 bytes of it (mednafen/settings.c:52-53, mednafen/settings.c:68-69, mednafen/ss/cdb.c:1315-1332, @@ -86,7 +86,7 @@ files: validation: {core: [size], upstream: [size, sha256]} sha256: "96e106f740ab448cf89f0dd49dfbac7fe5391cb6bd6e14ad5e3061c13330266f" note: "Saturn BIOS v1.00a (North America and Europe), loaded for every area other than Japan and Asia NTSC, and when no content is loaded. Disc area E maps to EU_PAL and the code has no Oceania area (disc.c:162-165). The port checks the size only. The sha256 is the value upstream Mednafen 1.32.1 holds for this filename in its ss.bios_sanity table (src/ss/ss.cpp, BIOSDB)." - source_ref: "mednafen/ss/ss.c:1847-1848 (region filename), mednafen/ss/ss.c:1867-1873 (open), mednafen/ss/ss.c:1961-1984 (size check, read), mednafen/ss/ss.c:1988 (sha256 for save states), libretro.c:1103 (default area)" + source_ref: "mednafen/ss/ss.c:1847-1848 (region filename), mednafen/ss/ss.c:1867-1873 (open), mednafen/ss/ss.c:1961-1984 (size check, read), mednafen/ss/ss.c:1988 (sha256 for save states), libretro.c:1069 (default area)" - name: "mpr-18811-mx.ic1" system: sega-saturn @@ -94,7 +94,7 @@ files: min_size: 2097152 validation: [size] note: "King of Fighters '95 ROM cart. Selected by the game table for MK-81088 and T-3101G or by the beetle_saturn_cart option. The first 0x200000 bytes are read. A shorter file installs a zeroed cart, an absent file leaves the slot empty." - source_ref: "mednafen/settings.c:62-63 (filename), mednafen/ss/cart.c:197-216 (open), mednafen/ss/cart/rom.c:67-68 (read), mednafen/ss/db.c:90-91 (game table), libretro.c:527 (option)" + source_ref: "mednafen/settings.c:62-63 (filename), mednafen/ss/cart.c:197-216 (open), mednafen/ss/cart/rom.c:67-68 (read), mednafen/ss/db.c:90-91 (game table), libretro.c:493 (option)" - name: "mpr-19367-mx.ic1" system: sega-saturn @@ -102,7 +102,7 @@ files: min_size: 2097152 validation: [size] note: "Ultraman: Hikari no Kyojin Densetsu ROM cart. Selected by the game table for T-13308G or by the beetle_saturn_cart option. The first 0x200000 bytes are read. A shorter file installs a zeroed cart, an absent file leaves the slot empty." - source_ref: "mednafen/settings.c:64-65 (filename), mednafen/ss/cart.c:197-216 (open), mednafen/ss/cart/rom.c:67-68 (read), mednafen/ss/db.c:92 (game table), libretro.c:529 (option)" + source_ref: "mednafen/settings.c:64-65 (filename), mednafen/ss/cart.c:197-216 (open), mednafen/ss/cart/rom.c:67-68 (read), mednafen/ss/db.c:92 (game table), libretro.c:495 (option)" - name: "epr-20091.ic8" system: sega-stv @@ -137,7 +137,7 @@ files: required: false description: "ST-V BIOS archive" note: "Opened only when the bare ST-V BIOS file for the cabinet region is absent. The member of the same name is matched without regard to case and must be 131072 or 524288 bytes. No hash is checked." - source_ref: "mednafen/ss/ss.c:1888-1941 (open, member lookup, size check, extract), zip_reader.c:358-365 (case-insensitive lookup)" + source_ref: "mednafen/ss/ss.c:1888-1941 (open, member lookup, size check, extract), zip_reader.c:350-357 (case-insensitive lookup)" contents: - name: "epr-20091.ic8" description: "Japan and Asia NTSC" @@ -158,5 +158,5 @@ files: required: false min_size: 262144 validation: [size] - note: "Action Replay 4M Plus firmware. The first 0x40000 bytes are read as big-endian words and a shorter file leaves the cart slot empty. No hash is checked. Unfinished in source (mednafen/ss/cart/ar4mp.c:22-24), needs CPU UBC emulation. Neither the beetle_saturn_cart option (libretro.c:512-530) nor the game table of mednafen/ss/db.c yields CART_AR4MP, so the case is not reached." + note: "Action Replay 4M Plus firmware. The first 0x40000 bytes are read as big-endian words and a shorter file leaves the cart slot empty. No hash is checked. Unfinished in source (mednafen/ss/cart/ar4mp.c:22-24), needs CPU UBC emulation. Neither the beetle_saturn_cart option (libretro.c:478-496) nor the game table of mednafen/ss/db.c yields CART_AR4MP, so the case is not reached." source_ref: "mednafen/settings.c:66-67 (filename), mednafen/ss/cart.c:218-236 (CART_AR4MP case), mednafen/ss/cart/ar4mp.c:181 (0x40000-byte read)" diff --git a/emulators/beetle_vb.yml b/emulators/beetle_vb.yml index f263ec8d..138ba9bc 100644 --- a/emulators/beetle_vb.yml +++ b/emulators/beetle_vb.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/libretro/beetle-vb-libretro" upstream: "https://mednafen.github.io/" profiled_date: "2026-03-24" -source_commit: "83ed42608601fb7b01d41e4f8fb2007a37b8c84e" +source_commit: "d5ae54c8e23b573a3b34e888b2d48a588027e92c" core_version: "v0.9.36.1" display_name: "Nintendo - Virtual Boy (Beetle VB)" cores: [mednafen_vb, vb] @@ -14,7 +14,7 @@ notes: | Libretro port of Mednafen's Virtual Boy emulation module. No external BIOS or firmware files. The Virtual Boy has no boot ROM: the V810 CPU executes directly from the game ROM mapped at - 0x07000000. Load() in libretro.cpp:1810 takes only ROM data. + 0x07000000. Load() in libretro.cpp:490 takes only ROM data. Upstream Mednafen supports an optional vb.pal palette file (Documentation/vb.html), while the libretro port handles palette via core options instead. diff --git a/emulators/blastem.yml b/emulators/blastem.yml index fa5d09a8..38fa80bb 100644 --- a/emulators/blastem.yml +++ b/emulators/blastem.yml @@ -4,7 +4,7 @@ core_classification: official_port source: "https://github.com/libretro/blastem" upstream: "https://www.retrodev.com/blastem/" profiled_date: "2026-10-20" -source_commit: "1e0de94dc7e669c0925a22c0fccf6cdc837af0a0" +source_commit: "ab743653ed110eeb7b1fe64d00cc5f9279c2bfec" prose_written_at: "1e0de94dc7e669c0925a22c0fccf6cdc837af0a0" core_version: "1.0.1-pre" display_name: "Sega - Mega Drive - Genesis (BlastEm)" diff --git a/emulators/bsnes.yml b/emulators/bsnes.yml index 35e87c63..0c0b74ab 100644 --- a/emulators/bsnes.yml +++ b/emulators/bsnes.yml @@ -6,6 +6,7 @@ upstream: "https://github.com/bsnes-emu/bsnes" logo: "https://raw.githubusercontent.com/bsnes-emu/bsnes/master/bsnes/target-bsnes/resource/bsnes.svg" profiled_date: "2026-04-05" source_commit: "05439f96121d2b9d7ad7a5fc1f29d7eebdcc8c43" +upstream_commit: "78474e5d39f58872dc21aca18cf9eb583b147fe7" core_version: "115" display_name: "Nintendo - SNES / SFC (bsnes)" cores: [bsnes] diff --git a/emulators/bsnes2014.yml b/emulators/bsnes2014.yml index 8a11f5ed..cf0a8146 100644 --- a/emulators/bsnes2014.yml +++ b/emulators/bsnes2014.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/bsnes2014" upstream: "https://github.com/bsnes-emu/bsnes" profiled_date: "2026-03-25" source_commit: "3c1394e042ee444c8248e1b9210e14ea55e836e9" +upstream_commit: "78474e5d39f58872dc21aca18cf9eb583b147fe7" core_version: "v094" display_name: "Nintendo - SNES / SFC (bsnes 2014)" cores: [bsnes2014_accuracy, bsnes2014_balanced, bsnes2014_performance] diff --git a/emulators/bsnes_hd_beta.yml b/emulators/bsnes_hd_beta.yml index b77faad2..32f9f80b 100644 --- a/emulators/bsnes_hd_beta.yml +++ b/emulators/bsnes_hd_beta.yml @@ -5,6 +5,7 @@ source: "https://github.com/DerKoun/bsnes-hd" upstream: "https://github.com/bsnes-emu/bsnes" profiled_date: "2026-03-23" source_commit: "fc26b25ea236f0f877f0265d2a2c37dfd93dfde9" +upstream_commit: "78474e5d39f58872dc21aca18cf9eb583b147fe7" core_version: "v10.6" display_name: "Nintendo - SNES / SFC (bsnes-hd beta)" cores: [bsnes_hd_beta, bsneshd, bsnes_hd] diff --git a/emulators/c64-emu.yml b/emulators/c64-emu.yml index 5ac3c477..a45f9b32 100644 --- a/emulators/c64-emu.yml +++ b/emulators/c64-emu.yml @@ -5,6 +5,7 @@ source: "https://github.com/Rakashazi/emu-ex-plus-alpha" upstream: "https://github.com/VICE-Team/svn-mirror" profiled_date: "2026-08-11" source_commit: "1c12fac5ce49badaadff2e2f210dcc30b89f4943" +upstream_commit: "283fa5e7df83bdf524187f9dac41ad2a66f1d315" core_version: "1.5.85" display_name: "Commodore - C64 (C64.emu)" mode: standalone diff --git a/emulators/catacombgl.yml b/emulators/catacombgl.yml index eff25478..5a93a19e 100644 --- a/emulators/catacombgl.yml +++ b/emulators/catacombgl.yml @@ -4,7 +4,7 @@ core_classification: game_engine source: "https://github.com/ArnoAnsems/CatacombGL" upstream: "https://github.com/ArnoAnsems/CatacombGL" profiled_date: "2026-10-04" -source_commit: "7d3b859a17f7edf02ce47f2d22e8b291e4ef0c91" +source_commit: "dd7d337fff89c32285b096190f6419828860bfe0" core_version: "0.5.7 Beta" display_name: "Catacomb 3-D (CatacombGL)" cores: [catacombgl] diff --git a/emulators/chimerasnes.yml b/emulators/chimerasnes.yml index 7e99a7b9..5641c312 100644 --- a/emulators/chimerasnes.yml +++ b/emulators/chimerasnes.yml @@ -5,6 +5,7 @@ source: "https://github.com/jamsilva/chimerasnes" upstream: "https://github.com/snes9xgit/snes9x" profiled_date: "2026-03-23" source_commit: "04c57c2902c25f36ae5a5d9c57aff851a772c868" +upstream_commit: "1bcc369e89f08243e0a462882fb1f3e42e51de3a" core_version: "" display_name: "Nintendo - SNES / SFC (ChimeraSNES)" cores: [chimerasnes] diff --git a/emulators/clk.yml b/emulators/clk.yml index e38d61ff..cb183990 100644 --- a/emulators/clk.yml +++ b/emulators/clk.yml @@ -3,7 +3,7 @@ type: standalone source: "https://github.com/TomHarte/CLK" upstream: "https://github.com/TomHarte/CLK" profiled_date: "2026-03-26" -source_commit: "53a1ee78f2f6857815f50247dbf4f76bc5c8c3d9" +source_commit: "0f49993b4d0992ebba1fad5032d96637f3a84d1f" core_version: "2026-07-28" display_name: "Clock Signal" cores: [clk] @@ -746,7 +746,7 @@ files: size: 32768 crc32: "ee229390" required: false - note: "Alternative to msx.rom for the Japan region, which the analyser never sets. Only the user picks it (Analyser/Static/MSX/Target.hpp:34, Analyser/Static/MSX/StaticAnalyser.cpp:217-219)." + note: "Alternative to msx.rom for the Japan region, which the analyser never sets. Only the user picks it (Analyser/Static/MSX/Target.hpp:34, Analyser/Static/MSX/StaticAnalyser.cpp:218-220)." source_ref: "Machines/Utility/ROMCatalogue.cpp:785-792" - name: msx-american.rom @@ -755,7 +755,7 @@ files: description: "American MSX BIOS" size: 32768 required: false - note: "Alternative to msx.rom for the USA region, which the analyser sets whenever no tape is loaded (Analyser/Static/MSX/StaticAnalyser.cpp:217-219, Machines/MSX/MSX.cpp:250-259)." + note: "Alternative to msx.rom for the USA region, which the analyser sets whenever no tape is loaded (Analyser/Static/MSX/StaticAnalyser.cpp:218-220, Machines/MSX/MSX.cpp:251-260)." source_ref: "Machines/Utility/ROMCatalogue.cpp:793-800" - name: msx-european.rom @@ -764,7 +764,7 @@ files: description: "European MSX BIOS" size: 32768 required: false - note: "Alternative to msx.rom for the Europe region, which the analyser sets whenever a tape is loaded or the user picks (Analyser/Static/MSX/StaticAnalyser.cpp:217-219, Machines/MSX/MSX.cpp:261-269)." + note: "Alternative to msx.rom for the Europe region, which the analyser sets whenever a tape is loaded or the user picks (Analyser/Static/MSX/StaticAnalyser.cpp:218-220, Machines/MSX/MSX.cpp:262-270)." source_ref: "Machines/Utility/ROMCatalogue.cpp:801-808" - name: disk.rom diff --git a/emulators/cruzes.yml b/emulators/cruzes.yml index 0ad0fd8d..8214d492 100644 --- a/emulators/cruzes.yml +++ b/emulators/cruzes.yml @@ -3,7 +3,7 @@ type: libretro core_classification: pure_libretro source: "https://github.com/libretro/libretro-samples/tree/master/tests/cruzes" profiled_date: "2026-03-23" -source_commit: "bce193bc1b8c9a3da43b2ead0158a69e28b37ed8" +source_commit: "7c2ad112d7a5176de2191e473369668da8946b16" core_version: "0.1" display_name: "Cruzes" cores: @@ -15,9 +15,9 @@ notes: | Unfinished Picross puzzle game, part of the libretro-samples repository. No separate upstream -- written directly for the libretro API. - supports_no_game true (cruzes.c:772), valid_extensions "" (cruzes.c:749). - Puzzle grid hardcoded in retro_init (cruzes.c:706-717) via load_challenge. - retro_load_game (cruzes.c:728-732) sets pixel format and returns true. + supports_no_game true (tests/cruzes/cruzes.c:772), valid_extensions "" (tests/cruzes/cruzes.c:749). + Puzzle grid hardcoded in retro_init (tests/cruzes/cruzes.c:706-717) via load_challenge. + retro_load_game (tests/cruzes/cruzes.c:728-732) sets pixel format and returns true. No file I/O, no RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY call. Font data (Carlito-Regular.ttf) compiled in via ttf2c (font10.h, font16.h, diff --git a/emulators/desmume.yml b/emulators/desmume.yml index e8d6898e..e9d80a26 100644 --- a/emulators/desmume.yml +++ b/emulators/desmume.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/desmume" upstream: "https://github.com/TASEmulators/desmume" profiled_date: "2026-03-23" source_commit: "95b4d798731caa809125b6c3c11d17cc332ff6ef" +upstream_commit: "1275dc64f5d1f5ef18dc1bc1fa9e012024b6df1a" core_version: "SVN" display_name: "Nintendo - DS (DeSmuME)" cores: [desmume] diff --git a/emulators/desmume2015.yml b/emulators/desmume2015.yml index 96960fd8..48359d6b 100644 --- a/emulators/desmume2015.yml +++ b/emulators/desmume2015.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/desmume2015" upstream: "https://github.com/TASEmulators/desmume" profiled_date: "2026-03-23" source_commit: "422b688009ccb9f2917c086a8fe79c8cecb030ae" +upstream_commit: "1275dc64f5d1f5ef18dc1bc1fa9e012024b6df1a" core_version: "SVN (2015 snapshot)" display_name: "Nintendo - DS (DeSmuME 2015)" cores: [desmume2015, desmume_2015] diff --git a/emulators/dice.yml b/emulators/dice.yml index 41504eb2..86d96ed8 100644 --- a/emulators/dice.yml +++ b/emulators/dice.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/mittonk/dice-libretro" upstream: "https://sourceforge.net/projects/dice/" profiled_date: "2026-03-23" -source_commit: "ab766aa25c6ed970ece28f2df5be7daa26b9e439" +source_commit: "4b4596b8dd2252b9d08bd6aaa02afda4be834db3" core_version: "v0.4.2" display_name: "Arcade (DICE)" cores: diff --git a/emulators/dosbox-staging.yml b/emulators/dosbox-staging.yml index 3f63ba72..bcc71381 100644 --- a/emulators/dosbox-staging.yml +++ b/emulators/dosbox-staging.yml @@ -3,7 +3,7 @@ type: standalone core_classification: enhanced_fork source: "https://github.com/dosbox-staging/dosbox-staging" upstream: "https://github.com/dosbox-staging/dosbox-staging" -source_commit: "54bafc7c17e1cbb06f94dddb5803629369d6e219" +source_commit: "400bc406cac0b2e7cd3e5f93e34d6fb9f08c80bd" profiled_date: "2026-08-08" core_version: "0.84.0-alpha" display_name: "DOS (DOSBox Staging)" @@ -82,7 +82,7 @@ notes: | SoundFont name from the RIFF INFO chunk and the stem of the file, symbolic links resolved, select reverb, chorus and filter presets for four known banks. - ref: src/midi/fluidsynth.cpp:107-230, 672-689, 816-883, 1229-1252 + ref: src/midi/fluidsynth.cpp:107-230, 673-690, 776-843, 1058-1081 Bundled data ships with the program and is read from the resources directory next to the executable: FreeDOS codepages and keyboard layouts, translations, @@ -90,11 +90,11 @@ notes: | mounted Y: drive utilities, the web interface and the manual pages. ref: src/misc/support.cpp:300-320, src/dos/dos_code_page.cpp:1828, src/dos/dos_keyboard_layout.cpp:70, src/misc/messages.cpp:1073, src/gui/render/shader_manager.cpp:236,404, src/ints/int10_modes.cpp:2302, - src/audio/disk_noise.cpp:187, src/shell/autoexec.cpp:759 + src/audio/disk_noise.cpp:185, src/shell/autoexec.cpp:764 BIOSTEST.COM loads an arbitrary BIOS image at F000:0 and is compiled only when the debugger is enabled, which is off by default. - ref: src/dos/CMakeLists.txt:81-83, biostest.h + ref: src/dos/CMakeLists.txt:82-84, biostest.h files: # File names are documentation only: libmt32emu and the Sound Canvas plugin @@ -605,7 +605,7 @@ files: Any SoundFont loads. GeneralUser GS, Fluid R3, the AWE32 4MB GM/GS/MT bank and the Trevor0402 SC-55 SoundFont are recognised by filename or RIFF INFO name and get their own reverb, chorus and filter presets - source_ref: "src/midi/fluidsynth.cpp:133-154, src/midi/fluidsynth.cpp:672-689, src/midi/fluidsynth.cpp:816-883, src/midi/fluidsynth.cpp:1227-1242" + source_ref: "src/midi/fluidsynth.cpp:133-154, src/midi/fluidsynth.cpp:673-690, src/midi/fluidsynth.cpp:776-843, src/midi/fluidsynth.cpp:1056-1071" - name: "GeneralUser-GS.sf2" path: "soundfonts/GeneralUser-GS.sf2" @@ -618,7 +618,7 @@ files: SoundFont directories. A file whose stem or RIFF INFO name contains GeneralUser is identified as GeneralUser GS, whatever the rest of the name, and gets its own chorus and reverb parameters in auto mode - source_ref: "src/midi/fluidsynth.cpp:194-230, src/midi/fluidsynth.cpp:842-848, src/midi/fluidsynth.cpp:430-434, src/midi/fluidsynth.cpp:573-577, src/midi/fluidsynth.cpp:1133-1158" + source_ref: "src/midi/fluidsynth.cpp:194-230, src/midi/fluidsynth.cpp:802-808, src/midi/fluidsynth.cpp:430-434, src/midi/fluidsynth.cpp:573-577, src/midi/fluidsynth.cpp:962-987" - name: "FluidR3_GM.sf2" path: "soundfonts/FluidR3_GM.sf2" @@ -629,7 +629,7 @@ files: .sf2 extension. A file whose RIFF INFO name contains Fluid R3, or whose stem contains FluidR3, Fluid_R3 or Fluid-R3, is identified as Fluid R3: auto mode then turns the chorus off and keeps the default reverb - source_ref: "src/midi/fluidsynth.cpp:194-230, src/midi/fluidsynth.cpp:863-868, src/midi/fluidsynth.cpp:443-446, src/midi/fluidsynth.cpp:567-571, src/midi/fluidsynth.cpp:1133-1158" + source_ref: "src/midi/fluidsynth.cpp:194-230, src/midi/fluidsynth.cpp:823-828, src/midi/fluidsynth.cpp:443-446, src/midi/fluidsynth.cpp:567-571, src/midi/fluidsynth.cpp:962-987" # -- PCjr system ROM -- diff --git a/emulators/doukutsu_rs.yml b/emulators/doukutsu_rs.yml index f39dacbe..c7a4cf5b 100644 --- a/emulators/doukutsu_rs.yml +++ b/emulators/doukutsu_rs.yml @@ -5,6 +5,7 @@ source: "https://github.com/DrGlaucous/doukutsu-rs-nm" upstream: "https://github.com/doukutsu-rs/doukutsu-rs" profiled_date: "2026-03-23" source_commit: "51e64c2e9615bcd476034c69b58927877fe73494" +upstream_commit: "d05995b2ce88e583491fcecfbd5883735d3527ea" core_version: "1.2.0 - 0.101.0" display_name: "Cave Story (drs)" cores: diff --git a/emulators/duckstation.yml b/emulators/duckstation.yml index adc25e36..60d93115 100644 --- a/emulators/duckstation.yml +++ b/emulators/duckstation.yml @@ -5,7 +5,7 @@ source: "https://github.com/stenzek/duckstation" upstream: "https://github.com/stenzek/duckstation" logo: "https://raw.githubusercontent.com/stenzek/duckstation/master/data/resources/images/duck.png" profiled_date: "2026-03-23" -source_commit: "4122fed9ad3e6e5c2ecf1516cd51675a5931623e" +source_commit: "938c6d2a03e523d0e4275aa753f289a987bcb016" core_version: "v0.1-12070" display_name: "Sony - PlayStation (DuckStation)" cores: [duckstation, "Duckstation"] @@ -28,19 +28,19 @@ notes: | The console region picks the image, Auto by default. NTSC-U answers the licence string `Sony Computer Entertainment Amer ica` (two spaces, as - src/core/system.cpp:959 spells it), a SCUS or SLUS + src/core/system.cpp:972 spells it), a SCUS or SLUS executable, and every disc whose region the detector cannot read (DiscRegion::Other, NonPS1), so a disc of any other market boots an NTSC-U image. - ref: src/core/system.cpp:650-662, 926-995, 1723-1724, 1755 + ref: src/core/system.cpp:663-675, 939-1008, 1738-1739, 1755 ref: src/core/bios.cpp:397-436 (FindBIOSImageInDirectory keeps a region match) - ref: src/core/settings.h:595 (DEFAULT_CONSOLE_REGION = Auto) + ref: src/core/settings.h:605 (DEFAULT_CONSOLE_REGION = Auto) ImageInfo gained a version and an expected_filename field after the previous profiling pass. Neither takes part in identification: expected_filename is read only by the two settings screens, which fall back to the real filename when it is null. ref: src/core/bios.h:41-43 (field declarations) - ref: src/duckstation-qt/biossettingswidget.cpp:149, src/core/fullscreenui_settings.cpp:3281 + ref: src/duckstation-qt/biossettingswidget.cpp:153, src/core/fullscreenui_settings.cpp:3317 Lower priority = preferred. PS2 deprioritized (>= 100) for dynamic fast boot. Late PAL deprioritized (>= 150) due to additional regional checks. OpenBIOS detected by signature at offset 0x78, not by hash. diff --git a/emulators/dxx-rebirth.yml b/emulators/dxx-rebirth.yml index 357b9888..b8fd9558 100644 --- a/emulators/dxx-rebirth.yml +++ b/emulators/dxx-rebirth.yml @@ -4,7 +4,7 @@ core_classification: game_engine source: "https://github.com/dxx-rebirth/dxx-rebirth" upstream: ~ profiled_date: "2026-10-04" -source_commit: "db1996a7fd18c7bf11c9b18b881aa4f11a84f017" +source_commit: "6943b924bea749543ef5729f31a28345e79716d2" core_version: "git" display_name: "Descent 1 & 2 (DXX-Rebirth)" cores: [dxx-rebirth, d1x-rebirth, d2x-rebirth] @@ -235,7 +235,7 @@ files: category: game_data required: false description: "Descent 2 intro cinematic (high-res)" - source_ref: "d2x-rebirth/main/movie.cpp:93-95 (movielib_files), 660 (name format); similar/main/titles.cpp:292 (intro.mve)" + source_ref: "d2x-rebirth/main/movie.cpp:93-95 (movielib_files), 660 (name format), similar/main/titles.cpp:354 (intro.mve)" - name: robots-h.mvl path: robots-h.mvl @@ -266,7 +266,7 @@ files: required: false description: "High resolution title, briefing and ending screens for Descent 1" note: "Mounted at startup when present, and its files extend or replace the game content." - source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4362" + source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4364" - name: "d1xr-briefings-ger.dxa" path: "d1x-rebirth/d1xr-briefings-ger.dxa" @@ -275,7 +275,7 @@ files: required: false description: "German briefing texts for Descent 1" note: "Mounted at startup when present, and its files extend or replace the game content." - source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4362" + source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4364" - name: "d1xr-mac-demo-sounds.dxa" path: "d1x-rebirth/d1xr-mac-demo-sounds.dxa" @@ -284,7 +284,7 @@ files: required: false description: "Sound set of the Macintosh Descent 1 demo" note: "Mounted at startup when present, and its files extend or replace the game content." - source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4362" + source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4364" - name: "d1xr-opl3-music.dxa" path: "d1x-rebirth/d1xr-opl3-music.dxa" @@ -293,7 +293,7 @@ files: required: false description: "Descent 1 music as Ogg Vorbis files, OPL3 rendering" note: "Mounted at startup when present, and its files extend or replace the game content." - source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4362" + source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4364" - name: "d1xr-sc55-music.dxa" installed_on: [retropie] @@ -303,7 +303,7 @@ files: required: false description: "Descent 1 music as Ogg Vorbis files, Roland SC-55 rendering" note: "Mounted at startup when present, and its files extend or replace the game content." - source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4362" + source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4364" - name: "editor.dxa" path: "d1x-rebirth/editor.dxa" @@ -312,7 +312,7 @@ files: required: false description: "Level editor data for the Descent 1 build" note: "Mounted only by a build with the editor enabled, when the editor opens." - source_ref: "similar/editor/med.cpp:367-370, SConstruct:4362" + source_ref: "similar/editor/med.cpp:367-370, SConstruct:4364" - name: "d2xr-briefings-ger.dxa" path: "d2x-rebirth/d2xr-briefings-ger.dxa" @@ -321,7 +321,7 @@ files: required: false description: "German briefing texts for Descent 2" note: "Mounted at startup when present, and its files extend or replace the game content." - source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4362" + source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4364" - name: "d2xr-opl3-music.dxa" path: "d2x-rebirth/d2xr-opl3-music.dxa" @@ -330,7 +330,7 @@ files: required: false description: "Descent 2 music as Ogg Vorbis files, OPL3 rendering" note: "Mounted at startup when present, and its files extend or replace the game content." - source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4362" + source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4364" - name: "d2xr-sc55-music.dxa" installed_on: [retropie] @@ -340,7 +340,7 @@ files: required: false description: "Descent 2 music as Ogg Vorbis files, Roland SC-55 rendering" note: "Mounted at startup when present, and its files extend or replace the game content." - source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4362" + source_ref: "common/misc/physfsx.cpp:23, 377-394, similar/main/inferno.cpp:603, SConstruct:4364" - name: "editor.dxa" path: "d2x-rebirth/editor.dxa" @@ -349,4 +349,4 @@ files: required: false description: "Level editor data for the Descent 2 build" note: "Mounted only by a build with the editor enabled, when the editor opens." - source_ref: "similar/editor/med.cpp:367-370, SConstruct:4362" + source_ref: "similar/editor/med.cpp:367-370, SConstruct:4364" diff --git a/emulators/easyrpg.yml b/emulators/easyrpg.yml index 9a4231f8..277f4a96 100644 --- a/emulators/easyrpg.yml +++ b/emulators/easyrpg.yml @@ -5,7 +5,7 @@ source: "https://github.com/libretro/easyrpg-libretro" upstream: "https://github.com/EasyRPG/Player" profiled_date: "2026-03-23" source_commit: "a3fbb7c24fd5a39fd95388d09135256a6b19f1e4" -upstream_commit: "8acd2e17c6a8a0a75cb7ce95625c6bdc89aebe1a" +upstream_commit: "096c004def987f3545198304b1b7a8352f284a50" core_version: "0.8.1.0" display_name: "RPG Maker 2000/2003 (EasyRPG)" cores: diff --git a/emulators/eternal.yml b/emulators/eternal.yml index 5ed54916..774d61ee 100644 --- a/emulators/eternal.yml +++ b/emulators/eternal.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://codeberg.org/iyzsong/eternal-libretro" upstream: "https://github.com/adriancable/eternal" source_commit: "13adf143aea822ebc1ee23722a80e93a7979e4c9" -upstream_commit: "17c8ab87de7f308f48f4990ed62c48b86173797d" +upstream_commit: "23d4d6c7c9f930fa72568ce795c9147af09d56ee" profiled_date: "2026-09-17" core_version: "0.0" display_name: "Eternal Computer" diff --git a/emulators/fbneo_cps12.yml b/emulators/fbneo_cps12.yml index a74a5cb2..6f6efbe2 100644 --- a/emulators/fbneo_cps12.yml +++ b/emulators/fbneo_cps12.yml @@ -4,7 +4,8 @@ core_classification: official_port source: "https://github.com/libretro/FBNeo" upstream: "https://github.com/finalburnneo/FBNeo" profiled_date: "2026-03-23" -source_commit: "63c4190785cadd5ff84483399375871ed6e98754" +source_commit: "2b0c1c0679df115cada7df9199ea2762222e58fd" +upstream_commit: "c89fdfe3abe118dc4a006f3d887094f0d83360f0" core_version: "v1.0.0.2" display_name: "Arcade (FinalBurn Neo) (CPS-1 / CPS-2)" cores: diff --git a/emulators/fceumm.yml b/emulators/fceumm.yml index 758f2d25..b210da2a 100644 --- a/emulators/fceumm.yml +++ b/emulators/fceumm.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/libretro/libretro-fceumm" upstream: "https://sourceforge.net/projects/fceumm/" profiled_date: "2026-03-23" -source_commit: "7a542dab1e87679921962a9f056186eca425c0c2" +source_commit: "ac0d00a7fc01166f84c7bac01d1084ebfd2b865e" core_version: "SVN" display_name: "Nintendo - NES / Famicom (FCEUmm)" cores: diff --git a/emulators/flycast.yml b/emulators/flycast.yml index 0417b266..b2507a1c 100644 --- a/emulators/flycast.yml +++ b/emulators/flycast.yml @@ -4,7 +4,7 @@ core_classification: official_port source: "https://github.com/flyinghead/flycast" logo: "https://raw.githubusercontent.com/flyinghead/flycast/master/shell/linux/flycast.png" profiled_date: "2026-10-21" -source_commit: "34ad8c8262c82db237a8b9cee0d8046d9cdd6f78" +source_commit: "6d81b998169b916ad7d7d6f403f7dc2c18e2aea5" core_version: "Git" display_name: "Sega - Dreamcast/Naomi (Flycast)" cores: @@ -41,7 +41,7 @@ notes: | System SP) load MAME-format BIOS archives. The libretro port appends "dc/" to the system directory - (shell/libretro/libretro.cpp:2249-2250). All files below are relative to + (shell/libretro/libretro.cpp:2252-2253). All files below are relative to system_dir/dc/. The standalone emulator looks for each file in the BIOS paths the user diff --git a/emulators/freej2me.yml b/emulators/freej2me.yml index 7ffa0868..9300db0b 100644 --- a/emulators/freej2me.yml +++ b/emulators/freej2me.yml @@ -4,7 +4,7 @@ core_classification: official_port source: "https://github.com/hex007/freej2me" upstream: "https://github.com/hex007/freej2me" profiled_date: "2026-03-23" -source_commit: "fae9304b85ac1c61d0117f6c8efe528612388278" +source_commit: "eb4ac87e9a0b212ba701691eb67ee4892b2b1173" core_version: "GIT" display_name: "Mobile - J2ME (FreeJ2ME)" cores: @@ -26,5 +26,5 @@ files: description: "FreeJ2ME libretro Java application" required: true installed_on: [retrobat, rocknix] - source_ref: "src/libretro/freej2me_libretro.c:483-486 (GET_SYSTEM_DIRECTORY + fill_pathname_join + java -jar)" + source_ref: "src/libretro/freej2me_libretro.c:487-490 (GET_SYSTEM_DIRECTORY + fill_pathname_join + java -jar)" note: "Not a BIOS dump. Java emulator loaded by the native core at startup via execvp('java', '-jar', path). Built from source via 'ant'. Must be in the system directory root. ROCKNIX builds the core and the jar from freej2me-plus 1.52, which keeps the freej2me-lr.jar name, and copies the jar into its BIOS folder before each launch when it is missing." diff --git a/emulators/freej2me_plus.yml b/emulators/freej2me_plus.yml index cbdf4fa0..081bb077 100644 --- a/emulators/freej2me_plus.yml +++ b/emulators/freej2me_plus.yml @@ -4,8 +4,8 @@ core_classification: enhanced_fork source: "https://github.com/TASEmulators/freej2me-plus" upstream: "https://github.com/hex007/freej2me" profiled_date: "2026-10-04" -source_commit: "68069d79aa6ed106eb788a640a8294a0db55fdcd" -upstream_commit: "8b9bc8a19baf26e3d92f88934a64a32f1cbc2795" +source_commit: "3933e75ef927a95eab9f5e065f0b76dabf336069" +upstream_commit: "eb4ac87e9a0b212ba701691eb67ee4892b2b1173" core_version: "1.53" display_name: "Mobile - J2ME (FreeJ2ME-Plus)" cores: @@ -26,10 +26,10 @@ notes: | the host PATH, and the start failure message asks for Java 6 or newer. The jar is built by ant from build.xml, which writes the libretro variant as freej2me_plus-lr.jar. - ref: src/libretro/freej2me_libretro.c:38-45, - src/libretro/freej2me_libretro.c:859-888, - src/libretro/freej2me_libretro.c:1556-1582, - src/libretro/freej2me_libretro.c:1679-1688, + ref: src/libretro/freej2me_libretro.c:39-46, + src/libretro/freej2me_libretro.c:875-904, + src/libretro/freej2me_libretro.c:1567-1593, + src/libretro/freej2me_libretro.c:1690-1699, src/libretro/freej2me_libretro.h:80, build.xml:86-99 @@ -37,8 +37,8 @@ notes: | SYSTEM_NOT_FOUND message and returns from retro_init before any process is created, so nothing loads. The message text still names freej2me-lr.jar, the file the original core opens. This core opens freej2me_plus-lr.jar. - ref: src/libretro/freej2me_libretro.c:339-346, - src/libretro/freej2me_libretro.c:866-872, + ref: src/libretro/freej2me_libretro.c:340-347, + src/libretro/freej2me_libretro.c:867-873, src/libretro/freej2me_libretro.h:73-79 Every relative path the jar opens resolves against the system directory, @@ -54,7 +54,7 @@ notes: | src/org/recompile/freej2me/Config.java:186-206, src/org/recompile/mobile/Mobile.java:121-123, src/org/recompile/mobile/Mobile.java:135, - src/libretro/freej2me_libretro.c:926-934, + src/libretro/freej2me_libretro.c:937-945, src/org/recompile/freej2me/Libretro.java:201-205, src/javax/microedition/rms/RecordStore.java:111 @@ -66,13 +66,13 @@ notes: | freej2me_system/customFont/. Off, the AWT SansSerif, Monospaced and Dialog faces are used. Both directories are created with a placeholder file when missing, and neither file has a fixed name. - ref: src/libretro/freej2me_libretro.c:464-469, - src/libretro/freej2me_libretro.c:480-485, + ref: src/libretro/freej2me_libretro.c:465-470, + src/libretro/freej2me_libretro.c:481-486, src/org/recompile/freej2me/Libretro.java:240, src/org/recompile/freej2me/Libretro.java:254, src/org/recompile/mobile/Mobile.java:1056-1064, src/javax/microedition/media/Manager.java:55, - src/javax/microedition/media/Manager.java:328-351, + src/javax/microedition/media/Manager.java:329-352, src/org/recompile/mobile/PlatformFont.java:63, src/org/recompile/mobile/PlatformFont.java:133-154 @@ -84,7 +84,7 @@ files: validation: [existence] description: "FreeJ2ME-Plus libretro Java application" note: "Java program the native core launches with java -jar from the system directory root. Built by ant from build.xml at the pinned revision. The code reads no size and no hash." - source_ref: "source src/libretro/freej2me_libretro.c:38-45 (freej2meapp), source src/libretro/freej2me_libretro.c:859-875 (GET_SYSTEM_DIRECTORY, freej2me_present, SYSTEM_NOT_FOUND_MSG), source src/libretro/freej2me_libretro.c:339-346 (access F_OK), upstream src/libretro/freej2me_libretro.c:877-888 (java -jar argv), source build.xml:86-99 (destfile)" + source_ref: "source src/libretro/freej2me_libretro.c:39-46 (freej2meapp), source src/libretro/freej2me_libretro.c:860-876 (GET_SYSTEM_DIRECTORY, freej2me_present, SYSTEM_NOT_FOUND_MSG), source src/libretro/freej2me_libretro.c:340-347 (access F_OK), upstream src/libretro/freej2me_libretro.c:893-904 (java -jar argv), source build.xml:86-99 (destfile)" - name: ".sf2" system: j2me @@ -94,7 +94,7 @@ files: category: game_data description: "MIDI soundbank for J2ME audio" note: "First .sf2 or .gm in the directory listing, loaded through MidiSystem.getSoundbank when the freej2me_midifont option is on. A rejected file is logged and the JVM default soundbank stays." - source_ref: "source src/javax/microedition/media/Manager.java:55, source src/javax/microedition/media/Manager.java:328-351, source src/org/recompile/mobile/Mobile.java:1056-1058" + source_ref: "source src/javax/microedition/media/Manager.java:55, source src/javax/microedition/media/Manager.java:329-352, source src/org/recompile/mobile/Mobile.java:1056-1058" - name: ".ttf" system: j2me diff --git a/emulators/frotz.yml b/emulators/frotz.yml index fc5db1ab..f9b6cdf7 100644 --- a/emulators/frotz.yml +++ b/emulators/frotz.yml @@ -4,7 +4,7 @@ core_classification: game_engine source: "https://gitlab.com/DavidGriffith/frotz" upstream: "https://gitlab.com/DavidGriffith/frotz" profiled_date: "2026-10-17" -source_commit: "2f17d64f23f3d6e68cd676d35c9d1789e17bc9fc" +source_commit: "042d7bcadc1e2a8090cf737c841d8b7fc14b6eff" core_version: "2.55pre" display_name: "Infocom Z-Machine (SDL Frotz)" cores: @@ -19,15 +19,15 @@ notes: | sf_initfonts() builds the text and fixed-width fonts from the bitmap compiled into sf_deffont.c (ref: src/sdl/sf_deffont.c:22) and the - character graphics font from SF_font3 (ref: src/sdl/sf_fonts.c:979-989). + character graphics font from SF_font3 (ref: src/sdl/sf_fonts.c:990-1000). TrueType fonts are loaded only when the config file names them under - [Fonts] (ref: src/sdl/sf_resource.c:402-413), and a font that fails to - load is reported and skipped (ref: src/sdl/sf_fonts.c:959-973). No + [Fonts] (ref: src/sdl/sf_resource.c:401-412), and a font that fails to + load is reported and skipped (ref: src/sdl/sf_fonts.c:970-984). No default font path exists. Pictures and sounds come from the story's Blorb data or from loose resource files under the [Resources] Dir setting, "./" by default - (ref: src/sdl/sf_resource.c:75, 415). Both belong to the game. + (ref: src/sdl/sf_resource.c:74, 415). Both belong to the game. exclusion_note: "fonts compiled into the binary, external TrueType fonts only when the user config names them" files: [] diff --git a/emulators/gam4980.yml b/emulators/gam4980.yml index 2a4cada6..a0ced2aa 100644 --- a/emulators/gam4980.yml +++ b/emulators/gam4980.yml @@ -5,6 +5,7 @@ source: "https://github.com/ThisBoringWorld/gam4980" upstream: "https://codeberg.org/iyzsong/gam4980" profiled_date: "2026-03-23" source_commit: "eeaa531b55e7127ab4b5e0bdc5ceba686df59c6a" +upstream_commit: "32c531d3e7159081afd8dee72e8266153821095d" core_version: "0.2" display_name: "GAM4980" cores: diff --git a/emulators/gambatte.yml b/emulators/gambatte.yml index bc144cc4..e1ff8f20 100644 --- a/emulators/gambatte.yml +++ b/emulators/gambatte.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/libretro/gambatte-libretro" upstream: "https://github.com/sinamas/gambatte" profiled_date: "2026-03-23" -source_commit: "d9d6cd06382d1ced30de34d56d3609452323dab1" +source_commit: "7809bb68ee96c3e6c74e9d9c4c8bb09aa7c6801d" core_version: "v0.5.0" display_name: "Nintendo - Game Boy / Color (Gambatte)" cores: diff --git a/emulators/gametank.yml b/emulators/gametank.yml index 97799476..7479a732 100644 --- a/emulators/gametank.yml +++ b/emulators/gametank.yml @@ -5,7 +5,7 @@ source: "https://github.com/Sundownersport/gametank-libretro" upstream: "https://github.com/clydeshaffer/GameTankEmulator" profiled_date: "2026-10-20" source_commit: "1a6f2608ae302d613ac17ae8584c7239ae47044b" -upstream_commit: "9896544460d5bb7dd89c2d2bc0f5c97a6f31d2e0" +upstream_commit: "be32deab74b7778647273fa5616d1ea92e3e1267" core_version: "1.0.1" display_name: "Clydeware - GameTank (GameTank)" cores: diff --git a/emulators/gba-emu.yml b/emulators/gba-emu.yml index 996f7659..dda29ecd 100644 --- a/emulators/gba-emu.yml +++ b/emulators/gba-emu.yml @@ -5,7 +5,7 @@ source: "https://github.com/Rakashazi/emu-ex-plus-alpha" upstream: "https://github.com/visualboyadvance-m/visualboyadvance-m" profiled_date: "2026-08-11" source_commit: "1c12fac5ce49badaadff2e2f210dcc30b89f4943" -upstream_commit: "fbd043dea0920a2356c44e1458a160455403c640" +upstream_commit: "8124d84a655e5261bee5eeb9f43c18630ec58a61" core_version: "1.5.85" display_name: "Nintendo - Game Boy Advance (GBA.emu)" mode: standalone @@ -37,7 +37,7 @@ notes: | (GBA.emu/src/core/gba/gba.cpp:3758-3778). Nothing else about the file is examined: CPUIsGBABios, the extension test upstream passes to utilLoad, has no caller here (GBA.emu/src/core/gba/gba.cpp:1655-1675, upstream - src/core/gba/gba.cpp:4975-4986). + src/core/gba/gba.cpp:5165-5176). Without a file the app runs on the built-in myROM stub copied into the BIOS area (GBA.emu/src/core/gba/gba.cpp:131-305,3776-3778) and on the service call diff --git a/emulators/gearboy.yml b/emulators/gearboy.yml index 82dad098..5b36121d 100644 --- a/emulators/gearboy.yml +++ b/emulators/gearboy.yml @@ -4,7 +4,7 @@ core_classification: official_port source: "https://github.com/drhelius/Gearboy" upstream: "https://github.com/drhelius/Gearboy" profiled_date: "2026-03-23" -source_commit: "214b84ed64cefc41071197cd52863deb0658a64d" +source_commit: "8231b17f9c9007732977cd4b286eee80957e3414" core_version: "3.4.1" display_name: "Nintendo - Game Boy / Color (Gearboy)" cores: @@ -27,7 +27,7 @@ files: required: false hle_fallback: true validation: [size] - source_ref: "platforms/libretro/libretro.cpp:964, platforms/libretro/libretro.cpp:408, platforms/libretro/libretro.cpp:408" + source_ref: "platforms/libretro/libretro.cpp:1043, platforms/libretro/libretro.cpp:474, platforms/libretro/libretro.cpp:474" - name: cgb_boot.bin description: Game Boy Color bootrom @@ -35,4 +35,4 @@ files: required: false hle_fallback: true validation: [size] - source_ref: "platforms/libretro/libretro.cpp:965, platforms/libretro/libretro.cpp:409, platforms/libretro/libretro.cpp:409" + source_ref: "platforms/libretro/libretro.cpp:1044, platforms/libretro/libretro.cpp:475, platforms/libretro/libretro.cpp:475" diff --git a/emulators/geargrafx.yml b/emulators/geargrafx.yml index 717a372f..a5425a43 100644 --- a/emulators/geargrafx.yml +++ b/emulators/geargrafx.yml @@ -4,7 +4,7 @@ core_classification: official_port source: "https://github.com/drhelius/Geargrafx" upstream: "https://github.com/drhelius/Geargrafx" profiled_date: "2026-10-04" -source_commit: "d0307bfbe4aebb67e1969502b6ccec752fd04b1d" +source_commit: "57c257dda25f441fff3c63a63bbc4ba7cbb713e3" core_version: "1.8.1" display_name: "NEC - PC Engine / SuperGrafx / CD (Geargrafx)" cores: @@ -20,63 +20,63 @@ notes: | Ignacio Sanchez (drhelius). HuCard games run without any external file. CD-ROM content (cue, chd, mmi) needs a System Card image from the frontend - system directory. load_bios() in platforms/libretro/libretro.cpp:709-750 + system directory. load_bios() in platforms/libretro/libretro.cpp:721-762 picks the file name from the core option geargrafx_cdrom_bios - (platforms/libretro/libretro.cpp:1568-1591): System Card 1 loads + (platforms/libretro/libretro.cpp:1605-1628): System Card 1 loads syscard1.pce, System Card 2 loads syscard2.pce, System Card 3 (the default) and Force Game Express load syscard3.pce. The older values Auto and Game Express are still accepted and map to the same. The path is - "{system_directory}/{name}" (platforms/libretro/libretro.cpp:736). When the + "{system_directory}/{name}" (platforms/libretro/libretro.cpp:748). When the card is missing the core posts "CD-ROM BIOS not found" and continues - (platforms/libretro/libretro.cpp:737-746). gexpress.pce is then always - attempted from the same directory (platforms/libretro/libretro.cpp:748-749). + (platforms/libretro/libretro.cpp:749-758). gexpress.pce is then always + attempted from the same directory (platforms/libretro/libretro.cpp:760-761). load_bios() runs from retro_load_game() for CD content only - (platforms/libretro/libretro.cpp:518-519) and again on retro_reset() when a - CD is loaded (platforms/libretro/libretro.cpp:355-356). With the libretro + (platforms/libretro/libretro.cpp:520-521) and again on retro_reset() when a + CD is loaded (platforms/libretro/libretro.cpp:357-358). With the libretro VFS the file goes through load_bios_file() into LoadBiosFromBuffer(), - otherwise through Media::LoadBios() (platforms/libretro/libretro.cpp:672-707, - src/media.cpp:448-491). + otherwise through Media::LoadBios() (platforms/libretro/libretro.cpp:684-719, + src/media.cpp:457-500). - Media::LoadBiosData() (src/media.cpp:662-705) strips a 512-byte header when + Media::LoadBiosData() (src/media.cpp:671-714) strips a 512-byte header when the size is the expected size plus 512, then rejects any image whose size is not GG_BIOS_SYSCARD_SIZE (0x40000) or GG_BIOS_GAME_EXPRESS_SIZE (0x8000) - (src/defines.h:53-54). CRC32 is computed over the accepted image. - GatherBIOSInfoFromDB() (src/media.cpp:1027-1061) looks the CRC up in + (src/defines.h:51-52). CRC32 is computed over the accepted image. + GatherBIOSInfoFromDB() (src/media.cpp:1052-1086) looks the CRC up in k_game_database entries flagged GG_GAMEDB_BIOS_SYSCARD or GG_GAMEDB_BIOS_GAME_EXPRESS (src/game_db.h:48-56). An unknown CRC marks the image "Unknown" and invalid but it is still used. For CD content the ROM banks map onto the System Card buffer, or onto the Game Express buffer when the disc is a Game Express title - (src/media.cpp:1094-1103). A Game Express disc is detected by its CRC in - game_db.h (GG_GAMEDB_GAME_EXPRESS, src/media.cpp:993-997), named by the - card field of an MMI image (src/media.cpp:821-823) or forced by the option - (src/media.cpp:835-839). With no card loaded the buffer is zeros and the CD + (src/media.cpp:1119-1128). A Game Express disc is detected by its CRC in + game_db.h (GG_GAMEDB_GAME_EXPRESS, src/media.cpp:1018-1022), named by the + card field of an MMI image (src/media.cpp:846-848) or forced by the option + (src/media.cpp:860-864). With no card loaded the buffer is zeros and the CD does not boot. Arcade Card titles are also detected from game_db.h and run on the selected System Card. MMI content is a LaserActive LD-ROM2 image. retro_load_game() also calls - load_pac_bios() for it (platforms/libretro/libretro.cpp:521-522), which + load_pac_bios() for it (platforms/libretro/libretro.cpp:523-524), which reads the NEC PAC firmware from the system directory according to the core - option geargrafx_laseractive_region (platforms/libretro/libretro.cpp:1603-1614): + option geargrafx_laseractive_region (platforms/libretro/libretro.cpp:1640-1651): Japan loads pac-n1.bin and falls back to pce-lp1.bin, US loads pac-n10.bin, Auto (the default) loads both regions - (platforms/libretro/libretro.cpp:775-797). Media::LoadPacBiosData() - (src/media.cpp:570-632) accepts 0x80000 bytes (GG_BIOS_LASERACTIVE_SIZE, - src/defines.h:55), with or without a 512-byte header, and compares the + (platforms/libretro/libretro.cpp:787-809). Media::LoadPacBiosData() + (src/media.cpp:579-641) accepts 0x80000 bytes (GG_BIOS_LASERACTIVE_SIZE, + src/defines.h:53), with or without a 512-byte header, and compares the CRC32 with the values hardcoded for the region. An unknown CRC is logged - and the image is still used. SelectPacBios() (src/media.cpp:634-660) follows + and the image is still used. SelectPacBios() (src/media.cpp:643-669) follows the option, then the regionCode of the MMI image, then whichever region is loaded. An MMI image that names no card maps the PAC firmware - (src/media.cpp:1094-1103), and one that names a card uses the System Card or + (src/media.cpp:1119-1128), and one that names a card uses the System Card or Game Express buffer. retro_load_game() fails when the firmware the MMI - image needs is not loaded (platforms/libretro/libretro.cpp:534-549). + image needs is not loaded (platforms/libretro/libretro.cpp:546-561). Backup RAM is exposed through RETRO_MEMORY_SAVE_RAM - (platforms/libretro/libretro.cpp:632-640) and saved by the frontend. A + (platforms/libretro/libretro.cpp:644-652) and saved by the frontend. A connected Memory Base 128 is persisted by the core itself as geargrafx_mb128.sav in the frontend save directory - (platforms/libretro/libretro.cpp:799-879). Both are state the core writes, + (platforms/libretro/libretro.cpp:811-891). Both are state the core writes, not files a user obtains. files: @@ -87,7 +87,7 @@ files: required: true crc32: ["6d9a73ef", "0ecea1f3", "2b5b75fe"] validation: [size] - source_ref: "platforms/libretro/libretro.cpp:714, platforms/libretro/libretro.cpp:726-731, platforms/libretro/libretro.cpp:736-746, src/media.cpp:662-705, src/defines.h:53, src/game_db.h:51-52, src/game_db.h:54" + source_ref: "platforms/libretro/libretro.cpp:726, platforms/libretro/libretro.cpp:738-743, platforms/libretro/libretro.cpp:748-758, src/media.cpp:671-714, src/defines.h:51, src/game_db.h:51-52, src/game_db.h:54" note: > Loaded for the default option value System Card 3 and for Force Game Express. game_db.h accepts three images under this name: Japan @@ -102,7 +102,7 @@ files: required: false crc32: ["52520bc6", "283b74e0", "ff2a5ec3"] validation: [size] - source_ref: "platforms/libretro/libretro.cpp:713, platforms/libretro/libretro.cpp:723-724, src/media.cpp:662-705, src/defines.h:53, src/game_db.h:49-50, src/game_db.h:53" + source_ref: "platforms/libretro/libretro.cpp:725, platforms/libretro/libretro.cpp:735-736, src/media.cpp:671-714, src/defines.h:51, src/game_db.h:49-50, src/game_db.h:53" note: > Loaded when geargrafx_cdrom_bios is System Card 2. game_db.h accepts v2.0 Japan (CRC32 52520BC6), v2.1 Japan (CRC32 283B74E0) and USA @@ -115,7 +115,7 @@ files: crc32: "3F9F95A4" required: false validation: [size] - source_ref: "platforms/libretro/libretro.cpp:712, platforms/libretro/libretro.cpp:720-721, src/media.cpp:662-705, src/defines.h:53, src/game_db.h:48" + source_ref: "platforms/libretro/libretro.cpp:724, platforms/libretro/libretro.cpp:732-733, src/media.cpp:671-714, src/defines.h:51, src/game_db.h:48" note: "Loaded when geargrafx_cdrom_bios is System Card 1." - name: "gexpress.pce" @@ -125,7 +125,7 @@ files: required: false crc32: ["51a12d90", "16aaf05a"] validation: [size] - source_ref: "platforms/libretro/libretro.cpp:715, platforms/libretro/libretro.cpp:748-749, src/media.cpp:662-705, src/media.cpp:821-823, src/media.cpp:835-839, src/media.cpp:993-997, src/defines.h:54, src/game_db.h:55-56" + source_ref: "platforms/libretro/libretro.cpp:727, platforms/libretro/libretro.cpp:760-761, src/media.cpp:671-714, src/media.cpp:846-848, src/media.cpp:860-864, src/media.cpp:1018-1022, src/defines.h:52, src/game_db.h:55-56" note: > Always attempted after the System Card, used for discs flagged GG_GAMEDB_GAME_EXPRESS in game_db.h, for MMI images whose card is @@ -143,7 +143,7 @@ files: region: [japan] required: true validation: [size] - source_ref: "platforms/libretro/libretro.cpp:507, platforms/libretro/libretro.cpp:521-522, platforms/libretro/libretro.cpp:780-784, platforms/libretro/libretro.cpp:534-549, src/media.cpp:570-632, src/defines.h:55" + source_ref: "platforms/libretro/libretro.cpp:509, platforms/libretro/libretro.cpp:523-524, platforms/libretro/libretro.cpp:792-796, platforms/libretro/libretro.cpp:546-561, src/media.cpp:579-641, src/defines.h:53" note: > Japanese PAC firmware, read for MMI content when geargrafx_laseractive_region is Auto or Japan. The Japanese slot @@ -157,7 +157,7 @@ files: region: [japan] required: false validation: [size] - source_ref: "platforms/libretro/libretro.cpp:785-789, src/media.cpp:570-632, src/defines.h:55" + source_ref: "platforms/libretro/libretro.cpp:797-801, src/media.cpp:579-641, src/defines.h:53" note: "Read only when pac-n1.bin did not load." - name: "pac-n10.bin" @@ -168,7 +168,7 @@ files: region: [north-america] required: true validation: [size] - source_ref: "platforms/libretro/libretro.cpp:507, platforms/libretro/libretro.cpp:521-522, platforms/libretro/libretro.cpp:792-796, platforms/libretro/libretro.cpp:534-549, src/media.cpp:570-632, src/defines.h:55" + source_ref: "platforms/libretro/libretro.cpp:509, platforms/libretro/libretro.cpp:523-524, platforms/libretro/libretro.cpp:804-808, platforms/libretro/libretro.cpp:546-561, src/media.cpp:579-641, src/defines.h:53" note: > US PAC firmware, read for MMI content when geargrafx_laseractive_region is Auto or US. diff --git a/emulators/gearlynx.yml b/emulators/gearlynx.yml index c84c8a2a..46be319d 100644 --- a/emulators/gearlynx.yml +++ b/emulators/gearlynx.yml @@ -3,7 +3,7 @@ type: libretro core_classification: official_port source: "https://github.com/drhelius/Gearlynx" profiled_date: "2026-10-04" -source_commit: "6a939afbca387ca615d96433928866e9d16ba2de" +source_commit: "675201c62f77b6683d7943cac2b69a23eb2ae573" core_version: "1.2.33" display_name: "Atari - Lynx (GearLynx)" cores: [gearlynx] @@ -18,10 +18,10 @@ notes: | Path is built as: system_directory + "/lynxboot.img", no subdirectory. With the libretro VFS the file is read by load_bios_file() and handed to LoadBiosFromBuffer(), otherwise Media::LoadBios() opens it - (platforms/libretro/libretro.cpp:130-168, src/media.cpp:578-620). + (platforms/libretro/libretro.cpp:130-168, src/media.cpp:583-625). - LoadBiosData in src/media.cpp:633-683 takes exactly 512 bytes - (GLYNX_BIOS_SIZE = 0x200, src/defines.h:52). If the file size is not + LoadBiosData in src/media.cpp:638-688 takes exactly 512 bytes + (GLYNX_BIOS_SIZE = 0x200, src/defines.h:50). If the file size is not 0x200, the load is rejected with BIOS_LOAD_INVALID_SIZE. After loading, bytes at offset 0x1F8 and 0x1F9 are patched (RAM/MAPCTL registers), then CRC32 is computed and compared against GLYNX_DB_BIOS_CRC (0x0D973C9D, @@ -29,7 +29,7 @@ notes: | is still marked as loaded (m_is_bios_loaded = true). No HLE fallback. If the BIOS is not loaded (IsBiosLoaded() returns - false), RunToVBlank in src/gearlynx_core.cpp:216-221 renders a static + false), RunToVBlank in src/gearlynx_core.cpp:223-228 renders a static "no bios" image and returns false, refusing to emulate. The BIOS is required for any ROM to run. Homebrew (.o, BS93 format) bypasses the normal boot sequence via PrepareForHomebrew() but still requires the @@ -44,5 +44,5 @@ files: size: 512 crc32: "0d973c9d" validation: [size, crc32] - source_ref: "platforms/libretro/libretro.cpp:170-212 (load_bootroms), src/media.cpp:633-683 (LoadBiosData), src/defines.h:52 (GLYNX_BIOS_SIZE=0x200), src/game_db.h:47 (GLYNX_DB_BIOS_CRC=0x0D973C9D), src/gearlynx_core.cpp:216-221 (no-bios guard)" + source_ref: "platforms/libretro/libretro.cpp:170-212 (load_bootroms), src/media.cpp:638-688 (LoadBiosData), src/defines.h:50 (GLYNX_BIOS_SIZE=0x200), src/game_db.h:47 (GLYNX_DB_BIOS_CRC=0x0D973C9D), src/gearlynx_core.cpp:223-228 (no-bios guard)" note: "512-byte boot ROM validated by CRC32 after load. Invalid CRC logs a warning but still works. Missing or wrong-size file blocks emulation entirely (no HLE fallback)." diff --git a/emulators/gearsystem.yml b/emulators/gearsystem.yml index 7ec19122..fc791a2d 100644 --- a/emulators/gearsystem.yml +++ b/emulators/gearsystem.yml @@ -4,7 +4,7 @@ core_classification: official_port source: "https://github.com/drhelius/Gearsystem" upstream: "https://github.com/drhelius/Gearsystem" profiled_date: "2026-03-23" -source_commit: "3c86cbefe71cb7b18df54d0bc3aeedf552081da5" +source_commit: "e18e795ad3bb421a81e416c95248eae885a5e3ab" core_version: "3.2.0" display_name: "Sega - MS/GG/SG-1000 (Gearsystem)" cores: @@ -44,7 +44,7 @@ files: platform_details: mastersystem: bios_filename: "bios.sms" - source_ref: "src/Memory.cpp:267-272" + source_ref: "src/Memory.cpp:238-243" note: | Boot ROM loaded via LoadBootromSMS() -> LoadBootroom(path, false). Raw binary read, stored in m_pBootromSMS. Bank count computed as @@ -52,7 +52,7 @@ platform_details: gamegear: bios_filename: "bios.gg" - source_ref: "src/Memory.cpp:274-279" + source_ref: "src/Memory.cpp:245-250" note: | Boot ROM loaded via LoadBootromGG() -> LoadBootroom(path, true). Raw binary read, stored in m_pBootromGG. Same bank computation. @@ -61,5 +61,5 @@ platform_details: sg1000: bios_filename: null note: | - No BIOS support. src/Memory.cpp:381-384 returns false from IsBootromEnabled() + No BIOS support. src/Memory.cpp:352-355 returns false from IsBootromEnabled() when IsSG1000() or IsGameGearInSMSMode() is true. diff --git a/emulators/genesis_plus_gx.yml b/emulators/genesis_plus_gx.yml index e6d9561b..2582044d 100644 --- a/emulators/genesis_plus_gx.yml +++ b/emulators/genesis_plus_gx.yml @@ -4,7 +4,8 @@ core_classification: community_fork source: "https://github.com/libretro/Genesis-Plus-GX" upstream: "https://github.com/ekeeke/Genesis-Plus-GX" profiled_date: "2026-03-23" -source_commit: "58c341487e5bfcf979ea68413c7987633adb0c56" +source_commit: "aa74d79634cd230f65cce4180e92688e53883d2f" +upstream_commit: "49c584764893b0505ac7f768a754f97330fa4392" core_version: "v1.7.4" display_name: "Sega - MS/GG/MD/CD (Genesis Plus GX)" cores: diff --git a/emulators/genesis_plus_gx_wide.yml b/emulators/genesis_plus_gx_wide.yml index ae9d229b..43db7ad7 100644 --- a/emulators/genesis_plus_gx_wide.yml +++ b/emulators/genesis_plus_gx_wide.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/Genesis-Plus-GX-Wide" upstream: "https://github.com/ekeeke/Genesis-Plus-GX" profiled_date: "2026-03-23" source_commit: "b7ad005431f5f0b55e559f6d598d1ed2479bf13b" +upstream_commit: "49c584764893b0505ac7f768a754f97330fa4392" core_version: "v1.7.4" display_name: "Sega - MS/GG/MD/CD (Genesis Plus GX Wide)" cores: diff --git a/emulators/geolith.yml b/emulators/geolith.yml index 984c0ce9..a5ff28bd 100644 --- a/emulators/geolith.yml +++ b/emulators/geolith.yml @@ -4,8 +4,8 @@ core_classification: official_port source: "https://github.com/libretro/geolith-libretro" upstream: "https://gitlab.com/jgemu/geolith" profiled_date: "2026-08-07" -source_commit: "194024931935eff2092e36fc4f8e53e62ed11097" -upstream_commit: "1bb5a84fbd87dc1f1c510cb3ff81332573e22452" +source_commit: "2dc88e3fa72ff404213a65d6eb5bb33baa687f73" +upstream_commit: "05ddef568212e7225ceec22f3ecb20b5a9b640e6" core_version: "0.4.1" display_name: "SNK - Neo Geo AES/MVS (Geolith)" cores: diff --git a/emulators/hakux.yml b/emulators/hakux.yml index 9b56a189..94cbe61f 100644 --- a/emulators/hakux.yml +++ b/emulators/hakux.yml @@ -6,7 +6,7 @@ upstream: "https://github.com/xemu-project/xemu" author: "rfandango" profiled_date: "2026-08-11" source_commit: "e64e336d27dc8a56b67f441ec36bfddc1379cb6e" -upstream_commit: "26fcbe54f17e496bdf530dad9f237e74e2f943fc" +upstream_commit: "25e1ee2fd59a451f2ab57e825b4f8a5414220c8b" core_version: "0.3.1" display_name: "Microsoft - Xbox (hakuX)" cores: diff --git a/emulators/hatari2014.yml b/emulators/hatari2014.yml index 5430986b..9e94a5f0 100644 --- a/emulators/hatari2014.yml +++ b/emulators/hatari2014.yml @@ -5,7 +5,7 @@ source: "https://github.com/libretro/hatari" source_branch: hitari2014-mercurial upstream: "https://github.com/hatari/hatari" profiled_date: "2026-09-03" -source_commit: "3919d702b7013e8d05222345066747d4f8559c3f" +source_commit: "ab55c3ed0e620c91e7f059a6d3fbef7acf9bfca8" upstream_commit: "c1a5c88bc06e56778b6b7f8483becfd58a7da2b4" core_version: "1.8.0" display_name: "Atari - ST/STE/TT/Falcon (Hatari 2014)" @@ -24,29 +24,29 @@ notes: | carries the Mercurial history up to the 1.8.0 release commit plus the port commits started in November 2014. It builds as hatari2014 (Makefile.libretro:22, .gitlab-ci-libretro.yml:12) and reports - library_name Hatari2014, version 1.8 (libretro/libretro.c:1466-1468). + library_name Hatari2014, version 1.8 (libretro/libretro.c:1476-1478). No hatari2014 .info exists in libretro-core-info yet. Directory layout under the libretro system directory: the Hatari working - and data directories are /hatari (src/paths.c:323-324, or the - system directory itself on Vita and PS3, src/paths.c:313-319), the + and data directories are /hatari (src/paths.c:324-325, or the + system directory itself on Vita and PS3, src/paths.c:314-320), the default TOS is /tos.img, extra TOS images go in /hatari/tos, BOOT.ST in /hatari, floppy.raw and the global hatari.cfg in and /hatari. The Hatari home directory, which holds the user hatari.cfg and hatari.nvram, is - $HOME/.hatari on desktop builds (src/paths.c:40, src/paths.c:283-284), - /hatari on Wii U and Vita (src/paths.c:209-212, - src/paths.c:223-225), the system directory itself on PS3 - (src/paths.c:237-239). + $HOME/.hatari on desktop builds (src/paths.c:41, src/paths.c:284-285), + /hatari on Wii U and Vita (src/paths.c:210-213, + src/paths.c:224-226), the system directory itself on PS3 + (src/paths.c:238-240). TOS selection: retro_set_environment lists /tos.img and every entry of /hatari/tos (libretro/libretro.c:393-411). The hatari_tosimage option offers those ending in img (libretro/libretro.c:270-299) and the choice becomes RETRO_TOS (libretro/libretro.c:640-649). retro_load_game refuses content when that - path does not exist (libretro/libretro.c:1602-1607) and hmain writes it + path does not exist (libretro/libretro.c:1612-1617) and hmain writes it into szTosImageFileName after the configuration files, so hatari.cfg - cannot override it (src/main.c:905-907). TOS_LoadImage reads the file + cannot override it (src/main.c:914-916). TOS_LoadImage reads the file whole, strips the 256-byte (or 34-byte for 4.92) loader of a RAM TOS, detects EmuTOS by ETOS at offset 0x2c, and rejects an image whose version word is outside 0x100-0x4FF, whose load address is neither 0xE00000 nor @@ -56,7 +56,7 @@ notes: | patches are applied for TOS 1.00, 1.02, 1.04, 1.06, 1.62, 2.05, 2.06, 3.06, 4.00 to 4.04 and 4.92 (src/tos.c:146-220). HFile_Read also accepts .img, .rom and .tos as fallback extensions and reads the first member of - a .zip or a .gz (src/file.c:203-230, libretro/include/config.h:20), which + a .zip or a .gz (src/file.c:217-244, libretro/include/config.h:20), which only matters for a path picked in the in-core ROM dialog (libretro/gui-retro/dlgRom.c:69-76). EmuTOS is not embedded. @@ -68,8 +68,8 @@ notes: | Floppy, ACSI, IDE and GEMDOS images are content. When a .gem folder is loaded, /hatari/BOOT.ST is inserted into drive A so TOS boots - with the GEMDOS drive (libretro/libretro.c:1663-1671). Memory snapshots - for retro_serialize stay in memory (libretro/libretro.c:1768-1793), and + with the GEMDOS drive (libretro/libretro.c:1673-1681). Memory snapshots + for retro_serialize stay in memory (libretro/libretro.c:1778-1803), and hatari.sav, auto.sav, hatari.prn, hatari.wav and hatari.avi are output names under /hatari. DESKTOP.INF and NEWDESK.INF are created or rewritten inside the emulated C: directory when extended VDI is on @@ -82,7 +82,7 @@ files: required: true max_size: 1048576 validation: [size] - source_ref: "source libretro/libretro.c:393-411, source libretro/libretro.c:640-649, source libretro/libretro.c:1602-1607, source src/main.c:905-907, source src/tos.c:48-53, source src/tos.c:575-651" + source_ref: "source libretro/libretro.c:393-411, source libretro/libretro.c:640-649, source libretro/libretro.c:1612-1617, source src/main.c:914-916, source src/tos.c:48-53, source src/tos.c:575-651" note: > Any TOS 1.00 to 4.04, TOS 0.00, a RAM TOS or EmuTOS. Additional images are read from /hatari/tos and selected with the hatari_tosimage @@ -106,7 +106,7 @@ files: path: "hatari/BOOT.ST" description: "Boot floppy inserted with GEMDOS hard disk folders" required: false - source_ref: "source libretro/libretro.c:1663-1671" + source_ref: "source libretro/libretro.c:1673-1681" note: "Added as the first disk when the content is a .gem file." - name: "floppy.raw" @@ -116,7 +116,7 @@ files: has_builtin: true storage: user_provided unsourceable: "any headerless s16le stereo 44100 Hz sample the user records, with no name or version the code expects beyond the filename" - source_ref: "source libretro/floppy_sound.c:118-170, source libretro/libretro.c:844-852, source libretro/libretro.c:1379" + source_ref: "source libretro/floppy_sound.c:118-170, source libretro/libretro.c:844-852, source libretro/libretro.c:1389" note: > Read whole at retro_init. An empty or short read falls back to the synthesised click (libretro/floppy_sound.c:31-95). Played on each drive @@ -128,7 +128,7 @@ files: required: false storage: user_provided unsourceable: "user settings in Hatari's INI format, with no canonical contents" - source_ref: "source libretro/libretro.c:945-951, source src/main.c:805-831, source src/main.c:892-894, source src/configuration.c:630-633, source src/configuration.c:768-777, source src/paths.c:283-284" + source_ref: "source libretro/libretro.c:945-951, source src/main.c:814-840, source src/main.c:901-903, source src/configuration.c:630-633, source src/configuration.c:768-777, source src/paths.c:284-285" note: > Read only when the hatari_autoload_config option is on (off by default): /hatari/hatari.cfg first, then hatari.cfg in the Hatari home @@ -152,7 +152,7 @@ files: min_size: 50 validation: [size] unsourceable: "machine state the emulator writes itself at exit, with no canonical contents" - source_ref: "source src/falcon/nvram.c:63-85, source src/falcon/nvram.c:186-216, source src/falcon/nvram.c:223-226, source src/main.c:752, source src/paths.c:283-284" + source_ref: "source src/falcon/nvram.c:63-85, source src/falcon/nvram.c:186-216, source src/falcon/nvram.c:223-226, source src/main.c:761, source src/paths.c:284-285" note: > Read from the Hatari home directory at NvRam_Init. A short read keeps the built-in defaults adjusted to the monitor type. Saved back on exit. diff --git a/emulators/hatarib.yml b/emulators/hatarib.yml index c5027191..f1e39c9f 100644 --- a/emulators/hatarib.yml +++ b/emulators/hatarib.yml @@ -4,8 +4,8 @@ core_classification: community_fork source: "https://github.com/bbbradsmith/hatariB" upstream: "https://github.com/hatari/hatari" profiled_date: "2026-09-17" -source_commit: "4fb7ebdfa14d5de7df3076143f255d7d8bf0323c" -upstream_commit: "6a8e26d69fb32d61efd398dc1ad9a77122400034" +source_commit: "5f05733fc21903dce7d978bd0d7aae445ffe1185" +upstream_commit: "7dd6a196cde1b1f9a55cd09cfbecb6edcb1bb000" core_version: "1.1 unstable preview" display_name: "Atari - ST/STE/TT/Falcon (hatariB)" cores: diff --git a/emulators/ioquake3.yml b/emulators/ioquake3.yml index 5384415a..acf8d129 100644 --- a/emulators/ioquake3.yml +++ b/emulators/ioquake3.yml @@ -4,7 +4,7 @@ core_classification: game_engine source: "https://github.com/ioquake/ioq3" upstream: "https://github.com/ioquake/ioq3" profiled_date: "2026-10-04" -source_commit: "83a776283bdb958f82db25554b5ed0966aaf6e49" +source_commit: "87a99d18206e878a20289f05ac3c16005dcae5c3" core_version: "1.36+git" display_name: "ioquake3" cores: [ioquake3] diff --git a/emulators/izapple2.yml b/emulators/izapple2.yml index 28a5450e..f6448f74 100644 --- a/emulators/izapple2.yml +++ b/emulators/izapple2.yml @@ -4,7 +4,7 @@ core_classification: embedded_hle source: "https://github.com/ivanizag/izapple2" upstream: "https://github.com/ivanizag/izapple2" profiled_date: "2026-08-08" -source_commit: "877b75fcf00d5bdb88d77554a4ade3ecb8c1a166" +source_commit: "dc28a566c9c733119b0511d9f77e1b4574e28718" core_version: "v2.4.0" display_name: "Apple - Apple II (izapple2)" cores: @@ -16,18 +16,18 @@ mode: standalone notes: | Apple II emulator written in Go by Ivan Izaguirre. Boards: Apple ][ and ][+ with 48 KB, Apple IIe and //e enhanced with 128 KB, and two clones, the Copam - Base 64A and the Basis 108 (setup.go:36-58). + Base 64A and the Basis 108 (setup.go:45-67). Every ROM the machine needs is compiled into the binary. The whole resources directory is embedded with //go:embed (resources.go:25-26) and the 17 machine - configs with //go:embed configs/*.cfg (configuration.go:51-52). LoadResource + configs with //go:embed configs/*.cfg (configuration.go:57-58). LoadResource routes a name by its prefix: / reads the embedded filesystem, http:// and https:// fetch over the network, anything else is a path on disk (resources.go:55-88). The shipped configs name main ROM, character ROM and boot diskette as / paths, so the emulator starts into DOS 3.3 with no file on disk. The base64a and basis108 configs set rom: , which dispatches to loadMultiPageRom over six embedded PROM dumps each - (setup.go:189-199, boardBase64a.go:7-16, boardBasis108.go:28-37). + (setup.go:203-213, boardBase64a.go:7-16, boardBasis108.go:28-37). Two of the 27 registered cards name an image the emulator downloads instead of carrying: prodosromdrive and prodosromcard3 (cardBuilder.go:86-87). Both diff --git a/emulators/jollycv.yml b/emulators/jollycv.yml index 08a5f480..ef37d8e7 100644 --- a/emulators/jollycv.yml +++ b/emulators/jollycv.yml @@ -5,7 +5,7 @@ source: "https://github.com/libretro/jollycv" upstream: "https://gitlab.com/jgemu/jollycv" profiled_date: "2026-09-17" source_commit: "2790d59c7194d29e83f8603ffd7e9da17f11575e" -upstream_commit: "18875ffdb1891cec04217cf02928af563a3af9d8" +upstream_commit: "3caacb22143543d5c7de4f3208def645a2ec0ab5" core_version: "2.1.0" display_name: "ColecoVision/CreatiVision/My Vision (JollyCV)" cores: diff --git a/emulators/julius.yml b/emulators/julius.yml index c978fa6b..486a2a7b 100644 --- a/emulators/julius.yml +++ b/emulators/julius.yml @@ -4,7 +4,7 @@ core_classification: game_engine source: "https://github.com/bvschaik/julius" upstream: "https://github.com/bvschaik/julius" profiled_date: "2026-10-17" -source_commit: "33c777019b2640b847b73815c3b4344cf7bd9576" +source_commit: "34d1ecd54befb845c0139b371fa8a0438210dac1" core_version: "1.7.0" display_name: "Caesar III (Julius)" cores: @@ -20,12 +20,12 @@ notes: | The data directory is the command-line argument. pre_init() makes it the base path and runs game_pre_init(). A missing directory shows "Julius requires the original files from Caesar 3" and exits - (ref: src/platform/julius.c:488-501, 580-586). File lookups are + (ref: src/platform/julius.c:494-507, 586-592). File lookups are case-corrected inside that directory. Startup loads, in order, the text and message files c3.eng and c3_mm.eng (c3.rus and c3_mm.rus as the alternative pair) - (ref: src/game/game.c:48-63, src/core/lang.c:141-165), the central + (ref: src/game/game.c:48-63, src/core/lang.c:142-166), the central climate graphics c3.sg2 and c3.555, the barbarian enemy graphics goths.sg2 and goths.555, and c3_model.txt (ref: src/game/game.c:79-104). Any of them missing aborts init. The_empire.555 is loaded with the @@ -45,7 +45,7 @@ files: category: game_data required: true description: "Caesar III install directory" - source_ref: "src/platform/julius.c:488-501" + source_ref: "src/platform/julius.c:494-507" note: "Given on the command line. Every game file is opened by name inside it." - name: "c3.eng" path: "caesar3/c3.eng" @@ -53,7 +53,7 @@ files: category: game_data required: true description: "Caesar III interface text" - source_ref: "src/core/lang.c:23, 74-80, 141-165" + source_ref: "src/core/lang.c:24, src/core/lang.c:75-81, src/core/lang.c:142-166" note: "Rejected when outside MIN_TEXT_SIZE..MAX_TEXT_SIZE. c3.rus replaces it on a Russian install." - name: "c3_mm.eng" path: "caesar3/c3_mm.eng" @@ -61,7 +61,7 @@ files: category: game_data required: true description: "Caesar III message text" - source_ref: "src/core/lang.c:24, 129-150, 160-165" + source_ref: "src/core/lang.c:25, src/core/lang.c:130-151, src/core/lang.c:161-166" note: "Loaded as a pair with c3.eng, and c3_mm.rus replaces it on a Russian install." - name: "c3.sg2" path: "caesar3/c3.sg2" @@ -69,28 +69,28 @@ files: category: game_data required: true description: "Main graphics index, central climate" - source_ref: "src/core/image.c:48-52, 295-306, src/game/game.c:83-86" + source_ref: "src/core/image.c:48-52, src/core/image.c:303-314, src/game/game.c:83-86" - name: "c3.555" path: "caesar3/c3.555" system: "caesar3" category: game_data required: true description: "Main graphics bitmaps, central climate" - source_ref: "src/core/image.c:53-57, 314-317, src/game/game.c:83-86" + source_ref: "src/core/image.c:53-57, src/core/image.c:322-325, src/game/game.c:83-86" - name: "goths.sg2" path: "caesar3/goths.sg2" system: "caesar3" category: game_data required: true description: "Barbarian enemy graphics index" - source_ref: "src/core/image.c:79, 667-675, src/game/game.c:87-90" + source_ref: "src/core/image.c:79, src/core/image.c:678-686, src/game/game.c:87-90" - name: "goths.555" path: "caesar3/goths.555" system: "caesar3" category: game_data required: true description: "Barbarian enemy graphics bitmaps" - source_ref: "src/core/image.c:101, 681-684, src/game/game.c:87-90" + source_ref: "src/core/image.c:101, src/core/image.c:692-695, src/game/game.c:87-90" - name: "c3_model.txt" path: "caesar3/c3_model.txt" system: "caesar3" diff --git a/emulators/kemulator.yml b/emulators/kemulator.yml index 190d1d7a..63e40d91 100644 --- a/emulators/kemulator.yml +++ b/emulators/kemulator.yml @@ -5,7 +5,7 @@ source: "https://github.com/shinovon/KEmulator" upstream: "https://github.com/shinovon/KEmulator" author: "shinovon" profiled_date: "2026-08-11" -source_commit: "769149212e167512b7792953f7646e543d29b9af" +source_commit: "f7e6bf9f2da4d3620ed08cdda1de696d87a5dc0e" core_version: "2.21.5" display_name: "Mobile - J2ME (KEmulator nnmod)" cores: diff --git a/emulators/kronos.yml b/emulators/kronos.yml index 4f55dc45..9afdba79 100644 --- a/emulators/kronos.yml +++ b/emulators/kronos.yml @@ -6,7 +6,7 @@ source_branch: kronos upstream: "https://github.com/FCare/Kronos" profiled_date: "2026-03-24" source_commit: "3791ffb2221fda61d70aec5cca376418caf05669" -upstream_commit: "d0384bc33aad06bfa9cf5cd308c4bd7ae6cfc814" +upstream_commit: "d451a55253e2e75bcef704ec8ade2085d298212c" core_version: "v2.6.0" display_name: "Sega - Saturn/ST-V (Kronos)" cores: diff --git a/emulators/lightspark.yml b/emulators/lightspark.yml index 14040b0b..f4133ace 100644 --- a/emulators/lightspark.yml +++ b/emulators/lightspark.yml @@ -4,7 +4,7 @@ core_classification: game_engine source: "https://github.com/lightspark/lightspark" upstream: "https://github.com/lightspark/lightspark" profiled_date: "2026-08-08" -source_commit: "bfe122834a17ab63a80f5ec36ff7c0dbfcac0321" +source_commit: "6f07fd65cb95b88ff73e905bf78a1a8b1ddf6049" core_version: "0.9.0" display_name: "Adobe Flash (Lightspark)" cores: diff --git a/emulators/linapple.yml b/emulators/linapple.yml index 0dad1d8c..11877414 100644 --- a/emulators/linapple.yml +++ b/emulators/linapple.yml @@ -5,6 +5,7 @@ source: "https://github.com/linappleii/linapple" upstream: "https://github.com/AppleWin/AppleWin" profiled_date: "2026-10-20" source_commit: "86bee1c2b59bd4706185ceddddaf383b3416726f" +upstream_commit: "35366c56439701b58ce9efd4039118e26d725c44" core_version: "3.0.0" display_name: "Apple - Apple II (LinApple)" cores: diff --git a/emulators/lrps2.yml b/emulators/lrps2.yml index 6b189103..2d827a16 100644 --- a/emulators/lrps2.yml +++ b/emulators/lrps2.yml @@ -9,8 +9,8 @@ bios_mode: agnostic source: "https://github.com/libretro/parallel-ps2" upstream: "https://github.com/PCSX2/pcsx2" profiled_date: "2026-10-21" -source_commit: "6664c60294ee05fe5e8c7645ab7da546dae78ed2" -upstream_commit: "a81f1aa39fc56ef60dbc913637c74c49c1792033" +source_commit: "38d3a83f4ecdec977d609ece8afcc527f5f68702" +upstream_commit: "7fe1e5525a2c219c119aa9586cee4ceae2f54ce1" core_version: "Git" display_name: "Sony - PlayStation 2 (LRPS2)" cores: [lrps2, pcsx2, "ps2"] diff --git a/emulators/mamearcade.yml b/emulators/mamearcade.yml index fdaab372..006f19b3 100644 --- a/emulators/mamearcade.yml +++ b/emulators/mamearcade.yml @@ -4,7 +4,7 @@ core_classification: official_port source: "https://github.com/libretro/mame" upstream: "https://github.com/mamedev/mame" profiled_date: "2026-03-24" -source_commit: "9069f39340f2d2b1795df8e71bb1d3d0fbc76598" +source_commit: "5f5a07748ce5c239c4118463ce8e6473743d4859" upstream_commit: "f34f02505e32c1993c6a782b6814232cbfc74e36" core_version: "0.289" display_name: "Arcade (MAME/Arcade)" diff --git a/emulators/mamemess.yml b/emulators/mamemess.yml index 2db10e90..c90ea513 100644 --- a/emulators/mamemess.yml +++ b/emulators/mamemess.yml @@ -4,8 +4,8 @@ core_classification: official_port source: "https://github.com/libretro/mame" upstream: "https://github.com/mamedev/mame" profiled_date: "2026-03-29" -source_commit: "9069f39340f2d2b1795df8e71bb1d3d0fbc76598" -upstream_commit: "728d957663041fbc943806bf151584acd03e2160" +source_commit: "5f5a07748ce5c239c4118463ce8e6473743d4859" +upstream_commit: "61a222977fd29f22ce11fbea3f7c290fd7ced091" core_version: "0.287" display_name: "Multi (MAME/MESS)" @@ -912,7 +912,7 @@ files: required: true category: bios_zip system: casio-pv2000 - source_ref: "upstream src/mame/casio/pv2000.cpp:416-419" + source_ref: "upstream src/mame/casio/pv2000.cpp:415-418" contents: - name: hn613128pc64.bin description: Z80 BASIC ROM diff --git a/emulators/md-emu.yml b/emulators/md-emu.yml index 3b5789bb..ef126a0a 100644 --- a/emulators/md-emu.yml +++ b/emulators/md-emu.yml @@ -5,7 +5,7 @@ source: "https://github.com/Rakashazi/emu-ex-plus-alpha" upstream: "https://github.com/ekeeke/Genesis-Plus-GX" profiled_date: "2026-08-12" source_commit: "1c12fac5ce49badaadff2e2f210dcc30b89f4943" -upstream_commit: "27426f00aa68f9f358c86919e8a40985326fa05b" +upstream_commit: "49c584764893b0505ac7f768a754f97330fa4392" core_version: "1.5.85" display_name: "Sega - MS/MD/CD (MD.emu)" mode: standalone diff --git a/emulators/mednafen_pce_fast.yml b/emulators/mednafen_pce_fast.yml index d03a6565..0053d1d9 100644 --- a/emulators/mednafen_pce_fast.yml +++ b/emulators/mednafen_pce_fast.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/libretro/beetle-pce-fast-libretro" upstream: "https://mednafen.github.io/" profiled_date: "2026-03-24" -source_commit: "3f946f277aef3aa99a95551618bbcd1dd2bda0d9" +source_commit: "4eee99c451f85ebe66d1591de88b892015b23059" core_version: "v1.31.0.0" display_name: "NEC - PC Engine / CD (Beetle PCE FAST)" cores: [mednafen_pce_fast, pce_fast, beetle_pce_fast] diff --git a/emulators/mednafen_supergrafx.yml b/emulators/mednafen_supergrafx.yml index cab68b82..df67df17 100644 --- a/emulators/mednafen_supergrafx.yml +++ b/emulators/mednafen_supergrafx.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/libretro/beetle-supergrafx-libretro" upstream: "https://mednafen.github.io/" profiled_date: "2026-10-04" -source_commit: "eabaaa438b1732d05ff206a97e700f845d6bfa96" +source_commit: "9c11dcd213a79d57d2c86313971631af801f2cdc" core_version: "v1.29.0" display_name: "NEC - PC Engine SuperGrafx (Beetle SuperGrafx)" cores: [mednafen_supergrafx, beetle_supergrafx] diff --git a/emulators/melonds.yml b/emulators/melonds.yml index 519e7d4a..858af261 100644 --- a/emulators/melonds.yml +++ b/emulators/melonds.yml @@ -6,6 +6,7 @@ source: "https://github.com/libretro/melonDS" upstream: "https://github.com/melonDS-emu/melonDS" profiled_date: "2026-03-24" source_commit: "66b5d2634cd0a79030562811e6e05f5532f800ba" +upstream_commit: "7d8dea42e221b13521270c423b61add41a741b97" core_version: "Git" display_name: "Nintendo - DS (melonDS)" systems: [nintendo-ds, nintendo-dsi] diff --git a/emulators/melonds_ds.yml b/emulators/melonds_ds.yml index 066fd054..95f4ac6e 100644 --- a/emulators/melonds_ds.yml +++ b/emulators/melonds_ds.yml @@ -6,7 +6,7 @@ source: "https://github.com/JesseTG/melonds-ds" upstream: "https://github.com/melonDS-emu/melonDS" profiled_date: "2026-10-04" source_commit: "f394adbacb5722ee97c1b37c8064da9a25818310" -upstream_commit: "906e9ebb27da8c6a715cd7abab4abfe8a8d29427" +upstream_commit: "7d8dea42e221b13521270c423b61add41a741b97" core_version: "1.4.0" display_name: "Nintendo - DS (melonDS DS)" systems: diff --git a/emulators/mesen-s.yml b/emulators/mesen-s.yml index 6bec6c52..5b8de054 100644 --- a/emulators/mesen-s.yml +++ b/emulators/mesen-s.yml @@ -9,7 +9,7 @@ source: "https://github.com/libretro/Mesen-S" upstream: "https://github.com/SourMesen/Mesen-S" profiled_date: "2026-03-24" source_commit: "9e4fdeb9b336470bc96beb8765b2e79c86a2da1e" -upstream_commit: "89199f298a95345a893d814525b6668567a6d490" +upstream_commit: "1768b4fc83faa308d5e430e3cf785218f12c424d" core_version: "0.4.0" cores: [mesen-s, mesen_s] systems: [nintendo-snes, nintendo-gb, nintendo-gbc, nintendo-super-game-boy, nintendo-satellaview] diff --git a/emulators/mgba.yml b/emulators/mgba.yml index a1e5719a..94198c12 100644 --- a/emulators/mgba.yml +++ b/emulators/mgba.yml @@ -6,6 +6,7 @@ upstream: "https://github.com/mgba-emu/mgba" logo: "https://raw.githubusercontent.com/mgba-emu/mgba/master/res/mgba-256.png" profiled_date: "2026-03-24" source_commit: "7a12d6d4b9acb14c0ae62c9166b6a2f3d08007f6" +upstream_commit: "fd9dc5c2cbf234365068855851107e762fc6211b" core_version: "0.10-dev" display_name: "Nintendo - Game Boy Advance (mGBA)" cores: diff --git a/emulators/mgba_splitscreen.yml b/emulators/mgba_splitscreen.yml index 64e9a3b4..54fbbea9 100644 --- a/emulators/mgba_splitscreen.yml +++ b/emulators/mgba_splitscreen.yml @@ -4,7 +4,8 @@ core_classification: community_fork source: "https://github.com/Spuds0588/mgba-splitscreen" upstream: "https://github.com/mgba-emu/mgba" profiled_date: "2026-10-04" -source_commit: "b66511a35873bda9c961872813e58b35543bcfc5" +source_commit: "f1d5975d77285f77affbfe64b7050ebd5c4b6a77" +upstream_commit: "fd9dc5c2cbf234365068855851107e762fc6211b" core_version: "0.1.0" display_name: "Nintendo - Game Boy Advance (mGBA Splitscreen)" cores: @@ -20,7 +21,7 @@ notes: | fixes (Four Swords handshake assist and a gated deadlock kick) on top of mGBA's library layer. The player instances live in src/platform/libretro-splitscreen/instances.c and reject anything that - is not a GBA ROM (instances.c:114-119). + is not a GBA ROM (src/platform/libretro-splitscreen/instances.c:114-119). The splitscreen wrapper never performs its own BIOS lookup. Each per-player mCore reaches mGBA's shared GBA core, which looks for diff --git a/emulators/mkxp_z.yml b/emulators/mkxp_z.yml index 030f73ae..8502f717 100644 --- a/emulators/mkxp_z.yml +++ b/emulators/mkxp_z.yml @@ -7,6 +7,7 @@ source_ref: "PR #255 to mkxp-z/mkxp-z" upstream: "https://github.com/mkxp-z/mkxp-z" profiled_date: "2026-03-24" source_commit: "650cb0888a07d0b5044e131160ddfa53feaf595b" +upstream_commit: "37a04d14413454551a7b6aadbb4e93e67168accb" core_version: "f4bc5aa" display_name: "RPG Maker XP/VX/VX Ace (mkxp-z)" cores: diff --git a/emulators/mupen64plus_next.yml b/emulators/mupen64plus_next.yml index 67e9b899..0a6980a9 100644 --- a/emulators/mupen64plus_next.yml +++ b/emulators/mupen64plus_next.yml @@ -4,7 +4,8 @@ core_classification: enhanced_fork source: "https://github.com/libretro/mupen64plus-libretro-nx" upstream: "https://github.com/mupen64plus/mupen64plus-core" profiled_date: "2026-03-24" -source_commit: "12edd2c74a517ff86dfa8cfc71ad75e4c10486d5" +source_commit: "15bada85906593376e8fd697f1b0b3af3a20f512" +upstream_commit: "3be6336a1de6f32ccc4f57bf80c988163fe6bf7a" core_version: "2.6.0" display_name: "Nintendo - Nintendo 64 (Mupen64Plus-Next)" systems: [nintendo-64, nintendo-64dd] diff --git a/emulators/nes-emu.yml b/emulators/nes-emu.yml index e2428da6..afb4bf2b 100644 --- a/emulators/nes-emu.yml +++ b/emulators/nes-emu.yml @@ -5,7 +5,7 @@ source: "https://github.com/Rakashazi/emu-ex-plus-alpha" upstream: "https://github.com/TASEmulators/fceux" profiled_date: "2026-08-12" source_commit: "1c12fac5ce49badaadff2e2f210dcc30b89f4943" -upstream_commit: "d339f1fa0cd8b69cc637a0de3fb3f04cb28748ea" +upstream_commit: "ac7c6cb643dd788daed2b6b8a31fe91d369a4a27" core_version: "1.5.85" display_name: "Nintendo - NES / Famicom (NES.emu)" mode: standalone diff --git a/emulators/nestopia.yml b/emulators/nestopia.yml index d4546a2f..fd4966d7 100644 --- a/emulators/nestopia.yml +++ b/emulators/nestopia.yml @@ -5,7 +5,8 @@ source: "https://github.com/libretro/nestopia" upstream: "https://gitlab.com/jgemu/nestopia" logo: "https://raw.githubusercontent.com/0ldsk00l/nestopia/master/icons/svg/nestopia.svg" profiled_date: "2026-03-24" -source_commit: "b9fdc9c4e6d374abacd1a678ae46ec7f963ef59a" +source_commit: "06a8949e0b3cf60e3a38a374b1426bf40fccb9a0" +upstream_commit: "b3adbeb42482e979ab99e16bcd9a22480f13479f" core_version: "1.53.1" display_name: "Nintendo - NES / Famicom (Nestopia)" cores: [nestopia] @@ -45,7 +46,7 @@ files: on_mismatch: warn md5: "ca30b50f880eb660a320674ed365ef7a" sha1: "57fe1bdee955bb48d357e463ccbf129496930b62" - source_ref: "source libretro/libretro.cpp:2169-2197 (FDS load), source source/core/NstFds.cpp:57-127 (Bios class, CRC32 logged), source source/core/api/NstApiFds.cpp:101-150 (iNES header skipped)" + source_ref: "source libretro/libretro.cpp:2171-2199 (FDS load), source source/core/NstFds.cpp:57-127 (Bios class, CRC32 logged), source source/core/api/NstApiFds.cpp:101-150 (iNES header skipped)" note: "Mapped at 0xE000-0xFFFF (8 KB). retro_load_game returns false if missing when loading .fds files. CRC32 checked: Famicom 0x5E607DCF, Twin Famicom 0x4DF24A6C." # --- NES game database (optional, overrides baked-in copy) --- @@ -55,7 +56,7 @@ files: required: false installed_on: [batocera] hle_fallback: true - source_ref: "source libretro/libretro.cpp:2121-2151 (database load), source libretro/nstdatabase.hpp (baked-in fallback)" + source_ref: "source libretro/libretro.cpp:2123-2153 (database load), source libretro/nstdatabase.hpp (baked-in fallback)" note: "XML database matching games by SHA1+CRC32. Used for region, mapper, mirroring, and 4-player adapter detection. Built-in fallback exists so this file is optional." # --- Custom palette (optional, core option nestopia_palette = Custom) --- @@ -65,7 +66,7 @@ files: required: false hle_fallback: true size: 192 - source_ref: "source libretro/libretro.cpp:2099-2120 (palette load)" + source_ref: "source libretro/libretro.cpp:2101-2122 (palette load)" note: "64 RGB triplets (64 x 3 bytes = 192 bytes). Loaded unconditionally at startup, applied only when nestopia_palette core option is set to Custom. Falls back to built-in Royaltea palette. Multiple valid palettes exist so no canonical hash." # --- ADPCM audio samples (optional, game-specific) --- diff --git a/emulators/noods.yml b/emulators/noods.yml index 6e1ec3ea..593c0294 100644 --- a/emulators/noods.yml +++ b/emulators/noods.yml @@ -5,6 +5,7 @@ source: "https://github.com/jonian/libretro-noods" upstream: "https://github.com/Hydr8gon/NooDS" profiled_date: "2026-03-24" source_commit: "9a2665306927ede64f4b5c109df79f4015607dbc" +upstream_commit: "4cb1439c330248b26cdf5f8dbcfa4e5ac53dcda0" core_version: "Git" display_name: "Nintendo - DS (NooDS)" cores: [noods] diff --git a/emulators/np2kai.yml b/emulators/np2kai.yml index 1f2214ab..df88aec6 100644 --- a/emulators/np2kai.yml +++ b/emulators/np2kai.yml @@ -5,7 +5,7 @@ source: "https://github.com/libretro/NP2kai" upstream: "https://github.com/AZO234/NP2kai" profiled_date: "2026-03-24" source_commit: "1ea561cd7fd62b33f4e7b3f1c2e30fc3e6089f28" -upstream_commit: "5d47f3a04b0b8ea78f625eeec354ac132c80df06" +upstream_commit: "5939e0c6d5985c4c08fc70f289a83290e5d3e6f7" core_version: "0.86" display_name: "NEC - PC-98 (Neko Project II Kai)" cores: [np2kai] diff --git a/emulators/openbor.yml b/emulators/openbor.yml index fe904a5b..10c03043 100644 --- a/emulators/openbor.yml +++ b/emulators/openbor.yml @@ -4,7 +4,7 @@ core_classification: game_engine source: "https://github.com/DCurrent/openbor" upstream: "https://github.com/DCurrent/openbor" profiled_date: "2026-08-12" -source_commit: "787b6770409935137579715febf80cf7a529b748" +source_commit: "65a7f0b41aee87fe4084e538634b4ed73236f871" core_version: "4.0 Build 7949" display_name: "OpenBOR Game Engine" cores: diff --git a/emulators/openjkdf2.yml b/emulators/openjkdf2.yml index c573ab93..6e395d90 100644 --- a/emulators/openjkdf2.yml +++ b/emulators/openjkdf2.yml @@ -4,7 +4,7 @@ core_classification: game_engine source: "https://github.com/shinyquagsire23/OpenJKDF2" upstream: "https://github.com/shinyquagsire23/OpenJKDF2" profiled_date: "2026-10-04" -source_commit: "02297602cb289b113df27be33b5a7dddbe3d91c1" +source_commit: "75a13ba2de99a1824978385bfd6e93aaff99306e" core_version: "0.9.9.0" display_name: "OpenJKDF2" cores: [] @@ -76,7 +76,7 @@ files: category: game_data required: true source_ref: "src/Main/InstallHelper.c:36 (aRequiredAssets)" - note: "Multiplayer deathmatch episode. Default -episode value in Main.c:120." + note: "Multiplayer deathmatch episode. Default -episode value in src/Main/Main.c:121." - name: "Res1hi.gob" path: "openjkdf2/resource/Res1hi.gob" @@ -99,7 +99,7 @@ files: system: dark-forces-ii category: game_data required: true - source_ref: "src/Main/InstallHelper.c:39 (aRequiredAssets), src/Main/InstallHelper.c:764-769, src/Main/InstallHelper.c:1334-1336, src/engine_config.h:263" + source_ref: "src/Main/InstallHelper.c:39 (aRequiredAssets), src/Main/InstallHelper.c:764-769, src/Main/InstallHelper.c:1334-1336, src/engine_config.h:261" note: | 4-byte marker. The install helper writes JKRES_MAGIC_1 into it once the assets are copied, 0x699232C4 for this game. At startup a missing @@ -202,7 +202,7 @@ files: system: mysteries-of-the-sith category: game_data required: true - source_ref: "src/Main/InstallHelper.c:51 (aRequiredAssetsMots), src/Main/InstallHelper.c:1318-1320, src/Main/jkRes.c:232-235, src/engine_config.h:267-270" + source_ref: "src/Main/InstallHelper.c:51 (aRequiredAssetsMots), src/Main/InstallHelper.c:1318-1320, src/Main/jkRes.c:232-235, src/engine_config.h:265-268" note: | 4-byte marker holding 0x3B426929. InstallHelper_SetCwd reads it at startup and enables Mysteries of the Sith mode when it finds that @@ -223,26 +223,26 @@ files: system: droidworks category: game_data required: true - source_ref: "src/Main/InstallHelper.c:58 (aRequiredAssetsDroidworks), src/Dw/dwInits.cpp:67-93" + source_ref: "src/Main/InstallHelper.c:58 (aRequiredAssetsDroidworks), src/Dw/dwInits.cpp:72-98" note: "CD-image data archive, mounted by dwGob." - name: "dwHD.GOB" system: droidworks category: game_data required: true - source_ref: "src/Main/InstallHelper.c:59 (aRequiredAssetsDroidworks), src/Dw/dwInits.cpp:67-93" + source_ref: "src/Main/InstallHelper.c:59 (aRequiredAssetsDroidworks), src/Dw/dwInits.cpp:72-98" note: "Hard-drive install archive." - name: "dwMin.GOB" system: droidworks category: game_data required: true - source_ref: "src/Main/InstallHelper.c:60 (aRequiredAssetsDroidworks), src/Dw/dwInits.cpp:67-93" + source_ref: "src/Main/InstallHelper.c:60 (aRequiredAssetsDroidworks), src/Dw/dwInits.cpp:72-98" note: "Minimum-install archive." - name: "dwStream.GOB" system: droidworks category: game_data required: true - source_ref: "src/Main/InstallHelper.c:61 (aRequiredAssetsDroidworks), src/Dw/dwInits.cpp:93" + source_ref: "src/Main/InstallHelper.c:61 (aRequiredAssetsDroidworks), src/Dw/dwInits.cpp:98" note: "Streamed WAV audio, listed only in the WAV ext search path." diff --git a/emulators/openlara.yml b/emulators/openlara.yml index 85d1b26e..ca595a41 100644 --- a/emulators/openlara.yml +++ b/emulators/openlara.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/OpenLara" upstream: "https://github.com/XProger/OpenLara" profiled_date: "2026-03-24" source_commit: "e4ce52edec5a9a6ad22b69d08c687bf070e68876" +upstream_commit: "3b268ca4bf986c380f44a26ffd9218bf6d376249" core_version: "v1" display_name: "Tomb Raider (OpenLara)" cores: [openlara] diff --git a/emulators/openmsx.yml b/emulators/openmsx.yml index efa59f83..aa6e9af1 100644 --- a/emulators/openmsx.yml +++ b/emulators/openmsx.yml @@ -3,7 +3,7 @@ type: standalone source: "https://github.com/openMSX/openMSX" upstream: "https://github.com/openMSX/openMSX" profiled_date: "2026-03-26" -source_commit: "50d15b6c5eeba7781d55241f8579339141c9dfb4" +source_commit: "26e1e4945df406e250a05122889f88d40edd828b" core_version: "21.0" display_name: "MSX / ColecoVision / Spectravideo (openMSX)" cores: @@ -28,7 +28,7 @@ notes: | Filenames are secondary hints, while SHA1 is the primary lookup key. Files may be gzipped or individually zipped. Each user data directory contributes share/systemroms, scanned - recursively (src/file/FilePool.cc:27, FilePoolCore.cc:369-385). RetroBat + recursively (src/file/FilePool.cc:27, src/file/FilePoolCore.cc:369-385). RetroBat sets OPENMSX_HOME to bios/openmsx and refuses to start a machine whose ROMs are not in bios/openmsx/share/systemroms. RetroPie links share/systemroms to BIOS/openmsx and Batocera adds bios/openmsx to the diff --git a/emulators/opentyrian.yml b/emulators/opentyrian.yml index 071bbb1d..afbaf09f 100644 --- a/emulators/opentyrian.yml +++ b/emulators/opentyrian.yml @@ -5,6 +5,7 @@ source: "https://github.com/trapexit/libretro-opentyrian" upstream: "https://github.com/opentyrian/opentyrian" profiled_date: "2026-03-24" source_commit: "3e9df7a6bc486190ad5085586d0c4e9cb1baf14c" +upstream_commit: "ac5d0e71f4245744350c6116ce24f10624da58f8" core_version: "1.0.0.6" display_name: "Tyrian (OpenTyrian)" cores: [opentyrian, tyrian] diff --git a/emulators/opera.yml b/emulators/opera.yml index c83aece5..1da03f47 100644 --- a/emulators/opera.yml +++ b/emulators/opera.yml @@ -6,7 +6,7 @@ cores: [opera] source: "https://github.com/libretro/opera-libretro" upstream: "https://sourceforge.net/projects/freedo/" profiled_date: "2026-10-18" -source_commit: "684926fe2079ba12b59d99082291c0a8fe780c67" +source_commit: "2d03e484952f94e80b43142371e7784d6fbc68e0" core_version: "1.0.0" display_name: "The 3DO Company - 3DO (Opera)" systems: diff --git a/emulators/parallel-launcher.yml b/emulators/parallel-launcher.yml index 0b50e1fc..c9d8a221 100644 --- a/emulators/parallel-launcher.yml +++ b/emulators/parallel-launcher.yml @@ -5,7 +5,7 @@ source: "https://gitlab.com/parallel-launcher/parallel-launcher" upstream: "https://gitlab.com/parallel-launcher/parallel-n64" profiled_date: "2026-08-08" source_commit: "8dc2a83770c57bc00e1b1fae0aed71f2120cc875" -upstream_commit: "11574ac28d27faaaef4b5bc3c1ca50fb2ed98b83" +upstream_commit: "a9028b23bd5ee8b465eefc64320fd7701f3430fa" core_version: "9.0.5" display_name: "Nintendo - Nintendo 64 (Parallel Launcher)" cores: diff --git a/emulators/parallel_n64.yml b/emulators/parallel_n64.yml index 734fae88..74529674 100644 --- a/emulators/parallel_n64.yml +++ b/emulators/parallel_n64.yml @@ -4,7 +4,8 @@ core_classification: community_fork source: "https://github.com/libretro/parallel-n64" upstream: "https://github.com/mupen64plus/mupen64plus-core" profiled_date: "2026-03-24" -source_commit: "0bd516ee793bb87b57e9eef19993b37ac0098d74" +source_commit: "a467ddaf904c8f8ddc6f6b889a876091725ccd91" +upstream_commit: "3be6336a1de6f32ccc4f57bf80c988163fe6bf7a" core_version: "2.0-rc2" display_name: "Nintendo - Nintendo 64 (ParaLLEl N64)" systems: [nintendo-64, nintendo-64dd] @@ -16,7 +17,7 @@ files: required: false description: "64DD IPL ROM" note: "Only loaded when a 64DD disk image (.ndd) is present via subsystem API. Core fails to load disk games without it." - source_ref: "source libretro/libretro.c:848" + source_ref: "source libretro/libretro.c:896" notes: hle_available: true diff --git a/emulators/pcem.yml b/emulators/pcem.yml index 0fe1261c..98239f60 100644 --- a/emulators/pcem.yml +++ b/emulators/pcem.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/libretro-pcem" upstream: "https://github.com/sarah-walker-pcem/pcem" profiled_date: "2026-03-24" source_commit: "e07923e902dcedcf65a502fb3f14e75b9ded5271" +upstream_commit: "25b54e3ff1d51cbf2469b447e55bce7a589697e9" core_version: "v11 (PCem-mooch, based on PCem v10.1)" display_name: "PC (PCem)" cores: [pcem] diff --git a/emulators/pcsx1.yml b/emulators/pcsx1.yml index bd9983e5..0f45e337 100644 --- a/emulators/pcsx1.yml +++ b/emulators/pcsx1.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/pcsx1-libretro" upstream: "https://github.com/notaz/pcsx_rearmed" profiled_date: "2026-03-24" source_commit: "35dabb85ff3af6825820f54090d344945f65d24e" +upstream_commit: "8b6c163575e6ce9a0537553e0d4ed4225315955e" core_version: "r22" display_name: "Sony - PlayStation (PCSX1)" cores: [pcsx1] diff --git a/emulators/pcsx2.yml b/emulators/pcsx2.yml index 9ce3d3b3..3fbd4d0f 100644 --- a/emulators/pcsx2.yml +++ b/emulators/pcsx2.yml @@ -7,7 +7,7 @@ upstream: "https://github.com/PCSX2/pcsx2" cores: - pcsx2 profiled_date: "2026-03-30" -source_commit: "81526d4dc7cc70e4ae75abb35a789417456c6d43" +source_commit: "7fe1e5525a2c219c119aa9586cee4ceae2f54ce1" core_version: "Git" display_name: "Sony - PlayStation 2 (PCSX2)" systems: [sony-playstation-2] @@ -76,7 +76,7 @@ files: size: 2683897 category: game_data description: "per-title compatibility and fix database" - source_ref: "pcsx2/GameDatabase.cpp:39, pcsx2/GameDatabase.cpp:1026-1035" + source_ref: "pcsx2/GameDatabase.cpp:39, pcsx2/GameDatabase.cpp:1034-1043" note: "Read from the resources directory shipped with the application. Console error and no per-title fixes if missing." - name: RedumpDatabase.yaml @@ -87,7 +87,7 @@ files: size: 1917242 category: game_data description: "disc hash database" - source_ref: "pcsx2/GameDatabase.cpp:1133, pcsx2/GameDatabase.cpp:1188-1197" + source_ref: "pcsx2/GameDatabase.cpp:1141, pcsx2/GameDatabase.cpp:1196-1205" note: "Read from the resources directory shipped with the application, used to name a disc from its dump." - name: patches.zip diff --git a/emulators/pcsx_rearmed.yml b/emulators/pcsx_rearmed.yml index 7e855eb1..8baf99bc 100644 --- a/emulators/pcsx_rearmed.yml +++ b/emulators/pcsx_rearmed.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/pcsx_rearmed" upstream: "https://github.com/notaz/pcsx_rearmed" profiled_date: "2026-03-25" source_commit: "c8816799b50388e61cfe237fe2cdbb7d8175f20a" +upstream_commit: "8b6c163575e6ce9a0537553e0d4ed4225315955e" core_version: "r25" display_name: "Sony - PlayStation (PCSX ReARMed)" cores: [pcsx_rearmed, pcsx_rearmed_neon, pcsx_rearmed_interpreter, "pcsx_rearmed_32b"] diff --git a/emulators/picodrive.yml b/emulators/picodrive.yml index 3d8e4e80..3c4b5c60 100644 --- a/emulators/picodrive.yml +++ b/emulators/picodrive.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/picodrive" upstream: "https://github.com/irixxxx/picodrive" profiled_date: "2026-03-24" source_commit: "1890c2932234c9d30f4cd3851d02228baae8f09e" +upstream_commit: "26683b2fc61cc26b5c4dd43815a6d70d376a02ce" core_version: "1.99" display_name: "Sega - MS/GG/MD/CD/32X (PicoDrive)" cores: [picodrive] diff --git a/emulators/pokketstation.yml b/emulators/pokketstation.yml index d5e8b9f9..38a24c36 100644 --- a/emulators/pokketstation.yml +++ b/emulators/pokketstation.yml @@ -4,7 +4,7 @@ core_classification: official_port source: "https://github.com/mentalfoundry/Pokket" upstream: "https://github.com/mentalfoundry/Pokket" profiled_date: "2026-10-17" -source_commit: "de736cee392567d58e842f96afe77f707e694ce5" +source_commit: "37c022ce46eb578de5b57d7b488ffda9e3b7d9f1" core_version: "v1.23" display_name: "Sony - PocketStation (pokketstation)" cores: ["pokketstation", "pokket"] @@ -42,7 +42,7 @@ notes: | are documented: 061, from prototype hardware, and 110, the retail one. The ASCII tags at offsets 0x1DFC (C061 or C110) and 0x3FFC (J061 or J110) identify them. SWI 0Fh FlashWriteSerial works on 061 and locks the CPU on - 110 (docs/hardware-notes.md:1046-1056). + 110 (docs/hardware-notes.md:1056-1066). The desktop application takes the BIOS path from the command line, then from the bios= key of settings.cfg beside the executable, then falls back diff --git a/emulators/ppsspp.yml b/emulators/ppsspp.yml index b5f6d0ac..0c4941d7 100644 --- a/emulators/ppsspp.yml +++ b/emulators/ppsspp.yml @@ -3,7 +3,7 @@ type: standalone + libretro core_classification: official_port source: "https://github.com/hrydgard/ppsspp" profiled_date: "2026-10-21" -source_commit: "58935bbf282ddd446cc490574c2c09b9c8f8b470" +source_commit: "c86d7a268d1ce9a94ae3be662f987c5b6a724ef9" core_version: "Git" display_name: "Sony - PlayStation Portable (PPSSPP)" cores: @@ -39,10 +39,10 @@ notes: | fonts is lost. Without ppge_atlas.zim the system dialogs are not drawn (Core/Util/PPGeDraw.cpp:252-255). A real firmware is optional. The NAND is /PSP/NAND - (Core/Util/PathUtil.cpp:144-145), which the libretro core places under + (Core/Util/PathUtil.cpp:146-147), which the libretro core places under the save directory (libretro/libretro.cpp:1265, 1269). On boot, a game disc carrying a newer firmware updater than the installed one is - unpacked into it (Core/System.cpp:575-578). Its flash0:/font, + unpacked into it (Core/System.cpp:591-594). Its flash0:/font, kd/libmp4.prx, kd/mp4msv.prx and kd/mpeg.prx replace the HLE modules when present (Core/HLE/HLE.cpp:408-446). PSP_DEFAULT_FIRMWARE = 660 (Core/ConfigValues.h:40). diff --git a/emulators/puae.yml b/emulators/puae.yml index 9e32c688..374b4d56 100644 --- a/emulators/puae.yml +++ b/emulators/puae.yml @@ -5,7 +5,7 @@ cores: [puae, uae] source: "https://github.com/libretro/libretro-uae" upstream: "https://github.com/GnoStiC/PUAE" profiled_date: "2026-03-24" -source_commit: "6536174a80d74e6c325aaa5390ff091fac8761d0" +source_commit: "7387937066b1b693816c3b4e2b7a0c601d41363d" core_version: "5.3.1" display_name: "Commodore - Amiga (PUAE)" systems: diff --git a/emulators/puae2021.yml b/emulators/puae2021.yml index 4c23b844..8bca713f 100644 --- a/emulators/puae2021.yml +++ b/emulators/puae2021.yml @@ -5,7 +5,7 @@ cores: [puae2021] source: "https://github.com/libretro/libretro-uae/tree/2.6.1" upstream: "https://github.com/GnoStiC/PUAE" profiled_date: "2026-03-24" -source_commit: "297b34777372fd5f117785798f99b4c7433b6034" +source_commit: "151828f14d43bb2b0651327ee19a23b36a7081b2" core_version: "2.6.1" display_name: "Commodore - Amiga (PUAE 2021)" systems: diff --git a/emulators/qemu.yml b/emulators/qemu.yml index 2cdcec57..9e6481c4 100644 --- a/emulators/qemu.yml +++ b/emulators/qemu.yml @@ -5,6 +5,7 @@ source: "https://github.com/io12/qemu-libretro" upstream: "https://github.com/qemu/qemu" profiled_date: "2026-03-25" source_commit: "aaba4471880587540314f82419d920431d55b769" +upstream_commit: "b6c4b7e86dec12d07f5cac65265b986d38ee9002" core_version: "0.1.0" display_name: "QEMU" cores: [qemu] diff --git a/emulators/raine.yml b/emulators/raine.yml index 2fcd91cb..0fc7f31c 100644 --- a/emulators/raine.yml +++ b/emulators/raine.yml @@ -4,7 +4,7 @@ core_classification: other source: "https://github.com/zelurker/raine" upstream: "https://github.com/zelurker/raine" profiled_date: "2026-10-20" -source_commit: "8e25d5d8907ae459181610912b0030c955683015" +source_commit: "e85285188e6f719fc25de1236a2ee63fee7e3f17" core_version: "0.97.5" display_name: "Arcade (RAINE)" mode: standalone @@ -33,7 +33,7 @@ notes: | / folder (source/loadroms.c:258-275). Inside an archive a ROM is found by CRC32 first and by name second (source/files.c:370-403). A ROM missing from the set and its parents ends the load with a fatal error - (source/loadroms.c:1301-1316). The Windows build has curl and, before + (source/loadroms.c:1302-1317). The Windows build has curl and, before giving up, offers to download a missing archive from archive.org, neogeo.zip included (source/loadroms.c:1200-1240). @@ -158,7 +158,7 @@ files: size: 524288 description: "Neo-Geo CD BIOS" note: >- - Path from [neocd] neocd_bios (source/raine.c:571). Left empty, neocd.bin + Path from [neocd] neocd_bios (source/raine.c:564). Left empty, neocd.bin then neocd.zip are looked up through get_shared. A path ending in zip is opened and its neocd.bin member read by name, anything else is read raw, 0x80000 bytes. Nothing found opens a file dialog once, then the program @@ -175,7 +175,7 @@ files: sha1: "4c1d58f7c1830694933e472ec1289060f7083fa9" md5: "c996961db77b48b54a2daa3cda12da0d" description: "High score save definitions" - source_ref: "source/hiscore.c:23, source/hiscore.c:302" + source_ref: "source/hiscore.c:24, source/hiscore.c:303" - name: "history.dat" category: game_data @@ -185,7 +185,7 @@ files: sha1: "ce810602b74214726059bbd12e8010dc077aef3d" md5: "4941042df918f0f1370e2b70d0f7d0de" description: "Game history text" - source_ref: "source/history.c:56, source/emumain.c:640-645" + source_ref: "source/history.c:56, source/emumain.c:642-647" - name: "command.dat" category: game_data @@ -195,7 +195,7 @@ files: sha1: "0b358f637e01b10f7a4d45b774ebf7950fcec466" md5: "0ed03c88b93b036f2f0035f32b200f27" description: "Move lists" - source_ref: "source/history.c:56, source/emumain.c:640-645" + source_ref: "source/history.c:56, source/emumain.c:642-647" - name: "gamecontrollerdb.txt" category: game_data @@ -208,7 +208,7 @@ files: note: >- Added to SDL when present, followed by config/userdb.txt. The RetroBat package carries a different revision of this file. - source_ref: "source/sdl/control.c:2373-2382" + source_ref: "source/sdl/control.c:2396-2405" - name: "dkongm.dx2" path: "emudx/dkongm.dx2" diff --git a/emulators/retro8.yml b/emulators/retro8.yml index b5346029..5354378d 100644 --- a/emulators/retro8.yml +++ b/emulators/retro8.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/retro8" upstream: "https://github.com/Jakz/retro8" profiled_date: "2026-03-25" source_commit: "ddc06a142398ee9755894b3f0bb17c8dc428151d" +upstream_commit: "ecee6594c5b953966ee0515f3edac4032c7ed40f" core_version: "0.1b" display_name: "PICO-8 (Retro8)" cores: diff --git a/emulators/rpcs3.yml b/emulators/rpcs3.yml index 1d0c5500..a239e92b 100644 --- a/emulators/rpcs3.yml +++ b/emulators/rpcs3.yml @@ -6,7 +6,7 @@ upstream: "https://github.com/RPCS3/rpcs3" cores: - rpcs3 profiled_date: "2026-03-30" -source_commit: "46aee28f85b9cecc8fd0e5dee0c771f9c88cd27a" +source_commit: "d9efc6e83eebf6f8cb495b82400f0e349a40e2c0" core_version: "0.0.35" display_name: "Sony - PlayStation 3 (RPCS3)" systems: [sony-playstation-3] @@ -176,7 +176,7 @@ dev_flash: # -- vsh/ : Visual Shell (XMB) -- vsh: path: "dev_flash/vsh/" - source_ref: "rpcs3/rpcs3qt/main_window.cpp:275, rpcs3/rpcs3qt/main_window.cpp:684" + source_ref: "rpcs3/rpcs3qt/main_window.cpp:277, rpcs3/rpcs3qt/main_window.cpp:676" note: "PS3 XMB interface. vsh.self is the main executable, booted via 'Boot VSH' menu." files: - path: "vsh/module/vsh.self" @@ -236,7 +236,7 @@ dev_flash: # -- ps1emu/ : PS1 backward compatibility -- ps1emu: path: "dev_flash/ps1emu/" - source_ref: "rpcs3/Emu/System.cpp:2241" + source_ref: "rpcs3/Emu/System.cpp:2252" note: "PS1 Classics emulator. Booted when running PS1 game via ps1_newemu.self" files: - {name: "ps1_newemu.self", purpose: "PS1 emulator binary"} @@ -252,7 +252,7 @@ dev_flash: # -- pspemu/ : PSP backward compatibility -- pspemu: path: "dev_flash/pspemu/" - source_ref: "rpcs3/Emu/System.cpp:2269, rpcs3/Crypto/key_vault.h:285-290" + source_ref: "rpcs3/Emu/System.cpp:2280, rpcs3/Crypto/key_vault.h:285-290" note: "PSP emulator for PS3. Contains psp_emulator.self, psp_translator.self, and release/*.sprx" files: - {name: "psp_emulator.self", purpose: "PSP emulator main binary"} diff --git a/emulators/same_cdi.yml b/emulators/same_cdi.yml index c3954e99..2c9df6d3 100644 --- a/emulators/same_cdi.yml +++ b/emulators/same_cdi.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/same_cdi" upstream: "https://github.com/mamedev/mame" profiled_date: "2026-03-25" source_commit: "ff9bb99a50d518aef6d2add1c49b7c44447e3e78" +upstream_commit: "61a222977fd29f22ce11fbea3f7c290fd7ced091" core_version: "Git" display_name: "Philips - CDi (SAME CDi)" cores: [same_cdi] diff --git a/emulators/sameboy.yml b/emulators/sameboy.yml index 89f7ef76..aeec3e91 100644 --- a/emulators/sameboy.yml +++ b/emulators/sameboy.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/SameBoy" upstream: "https://github.com/LIJI32/SameBoy" profiled_date: "2026-03-25" source_commit: "aa158a889a48b538a0302873704a34577c8eb67d" +upstream_commit: "26a56bd6a122a6318a456abd80558408742d5adf" core_version: "0.15.4" display_name: "Nintendo - Game Boy / Color (SameBoy)" cores: diff --git a/emulators/sdlpal.yml b/emulators/sdlpal.yml index 33541b38..e1aa2234 100644 --- a/emulators/sdlpal.yml +++ b/emulators/sdlpal.yml @@ -4,7 +4,7 @@ core_classification: official_port source: "https://github.com/sdlpal/sdlpal" upstream: "https://github.com/sdlpal/sdlpal" profiled_date: "2026-03-25" -source_commit: "a2e13e5ff83cf33448b3de3b8b612c07e28eacd7" +source_commit: "d4bf69b64d335cd680555af9df90e7ec4f3006a3" core_version: "v2.0.1" display_name: "SDLPAL" cores: diff --git a/emulators/shadps4.yml b/emulators/shadps4.yml index 8b417ad3..4ec3edb7 100644 --- a/emulators/shadps4.yml +++ b/emulators/shadps4.yml @@ -3,7 +3,7 @@ type: standalone source: "https://github.com/shadps4-emu/shadPS4" upstream: "https://github.com/shadps4-emu/shadPS4" profiled_date: "2026-03-26" -source_commit: "f73709cada28e77523e37806fee5c454711d24ba" +source_commit: "91e6afa69b0a64b0afaa0281b80f8fbb0cd88136" core_version: "pre-release 2026-08-08" display_name: "shadPS4 (PlayStation 4)" cores: diff --git a/emulators/skyemu.yml b/emulators/skyemu.yml index a6e0e972..6ca7d6d5 100644 --- a/emulators/skyemu.yml +++ b/emulators/skyemu.yml @@ -4,7 +4,7 @@ core_classification: official_port source: https://github.com/skylersaleh/SkyEmu/blob/v5/src/libretro.c upstream: https://github.com/skylersaleh/SkyEmu profiled_date: "2026-03-25" -source_commit: "01516d6798e3652b583e6a366085bb51c43b528d" +source_commit: "9b6bbb6aa73cebae6cb52ea60d04f803acadc480" core_version: "v5" display_name: "Nintendo - Game Boy/GBA/NDS (SkyEmu)" @@ -23,7 +23,7 @@ notes: | stub firmware (NDS), and HLE boot skip (GB/GBC). BIOS loading controlled by core options (default: on). Files loaded from system_dir/SkyEmu/ subdirectory. Standalone validates exact BIOS file size, while libretro only rejects files exceeding buffer. - The .info does not list gb_bios.bin, which the code reads (gb.h:1603). + The .info does not list gb_bios.bin, which the code reads (src/gb.h:1603). files: - name: cgb_boot.bin @@ -47,25 +47,25 @@ files: path: SkyEmu/gba_bios.bin required: false hle_fallback: true - source_ref: "src/gba.h:1726-1730" + source_ref: "src/gba.h:1743-1747" - name: nds7.bin description: NDS ARM7 BIOS path: SkyEmu/nds7.bin required: false hle_fallback: true - source_ref: "src/nds.h:3088-3089" + source_ref: "src/nds.h:3105-3106" - name: nds9.bin description: NDS ARM9 BIOS path: SkyEmu/nds9.bin required: false hle_fallback: true - source_ref: "src/nds.h:3091-3092" + source_ref: "src/nds.h:3108-3109" - name: firmware.bin description: NDS firmware path: SkyEmu/firmware.bin required: false hle_fallback: true - source_ref: "src/nds.h:3094, 3200-3268" + source_ref: "src/nds.h:3111, src/nds.h:3217-3285" diff --git a/emulators/snes9x-explus.yml b/emulators/snes9x-explus.yml index 6650a9b1..a1641e8e 100644 --- a/emulators/snes9x-explus.yml +++ b/emulators/snes9x-explus.yml @@ -5,7 +5,7 @@ source: "https://github.com/Rakashazi/emu-ex-plus-alpha" upstream: "https://github.com/snes9xgit/snes9x" profiled_date: "2026-08-12" source_commit: "1c12fac5ce49badaadff2e2f210dcc30b89f4943" -upstream_commit: "b33f2afb33c61d675aaf0319bd3b8cc8d6924d49" +upstream_commit: "1bcc369e89f08243e0a462882fb1f3e42e51de3a" core_version: "1.5.85" display_name: "Nintendo - SNES / SFC (Snes9x EX+)" mode: standalone diff --git a/emulators/snes9x.yml b/emulators/snes9x.yml index d1dcc1b3..be4f9bd3 100644 --- a/emulators/snes9x.yml +++ b/emulators/snes9x.yml @@ -6,7 +6,7 @@ upstream: "https://github.com/snes9xgit/snes9x" logo: "https://raw.githubusercontent.com/snes9xgit/snes9x/master/gtk/data/snes9x.svg" profiled_date: "2026-03-25" source_commit: "fae2fea08f74180759ef540ee94259213f503480" -upstream_commit: "85591435763dede7ef111aab8070cdf2d5a7da49" +upstream_commit: "1bcc369e89f08243e0a462882fb1f3e42e51de3a" core_version: "1.61" display_name: "Nintendo - SNES / SFC (Snes9x)" systems: [nintendo-snes, nintendo-satellaview, nintendo-sufami-turbo] diff --git a/emulators/snes9x2002.yml b/emulators/snes9x2002.yml index 8284ac79..4404cdef 100644 --- a/emulators/snes9x2002.yml +++ b/emulators/snes9x2002.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/snes9x2002" upstream: "https://github.com/snes9xgit/snes9x" profiled_date: "2026-03-25" source_commit: "6ffbf9ef4f0063e1f1b78a40d10c50fc52f2524c" +upstream_commit: "1bcc369e89f08243e0a462882fb1f3e42e51de3a" core_version: "7.2.0" display_name: "Nintendo - SNES / SFC (Snes9x 2002)" cores: diff --git a/emulators/snes9x2010.yml b/emulators/snes9x2010.yml index 69f197a1..68598a42 100644 --- a/emulators/snes9x2010.yml +++ b/emulators/snes9x2010.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/snes9x2010" upstream: "https://github.com/snes9xgit/snes9x" profiled_date: "2026-03-25" source_commit: "fe690dd321fa5a46b5234a2bde089d2518c62b0e" +upstream_commit: "1bcc369e89f08243e0a462882fb1f3e42e51de3a" core_version: "v1.52.4" display_name: "Nintendo - SNES / SFC (Snes9x 2010)" cores: diff --git a/emulators/sonic3-air.yml b/emulators/sonic3-air.yml index 4f76d88e..1a2aeafa 100644 --- a/emulators/sonic3-air.yml +++ b/emulators/sonic3-air.yml @@ -3,7 +3,7 @@ type: standalone core_classification: game_engine source: "https://github.com/Eukaryot/sonic3air" upstream: "https://github.com/Eukaryot/sonic3air" -source_commit: "de0fd6a7c07b399c9a612cb7cb8d61b54cb339d1" +source_commit: "87fed5407217c4552086dedf73b33de8816a78da" profiled_date: "2026-10-04" display_name: "Sonic 3 - Angel Island Revisited" cores: [sonic3air] diff --git a/emulators/soniccd.yml b/emulators/soniccd.yml index 33a00a05..4d87b7de 100644 --- a/emulators/soniccd.yml +++ b/emulators/soniccd.yml @@ -3,7 +3,7 @@ type: standalone core_classification: game_engine source: "https://github.com/RSDKModding/RSDKv3-Decompilation" upstream: "https://github.com/RSDKModding/RSDKv3-Decompilation" -source_commit: "a99e16ad15f4f824c1b9f96a61b3f8576ab648e2" +source_commit: "c01fc0c360e8e35e791630407ea5c7a426718e54" profiled_date: "2026-10-04" display_name: "Sonic CD (RSDKv3 Decomp)" cores: [sonicretrocd] diff --git a/emulators/spmp8000emu.yml b/emulators/spmp8000emu.yml index 218adb72..95c5e677 100644 --- a/emulators/spmp8000emu.yml +++ b/emulators/spmp8000emu.yml @@ -4,7 +4,7 @@ core_classification: pure_libretro source: "https://github.com/AloysHF/SPMP8000Emu" upstream: "https://github.com/AloysHF/SPMP8000Emu" profiled_date: "2026-09-03" -source_commit: "b0107b237a0b4e9231adebc7af1521726990b9ab" +source_commit: "687cd4ca995a8ef8092fff3316576b9bd642a32e" core_version: "1.0.0" display_name: "Sunplus - SPMP8000 (SPMP8000Emu)" cores: diff --git a/emulators/squirreljme.yml b/emulators/squirreljme.yml index 3cb49e82..fb71560d 100644 --- a/emulators/squirreljme.yml +++ b/emulators/squirreljme.yml @@ -4,7 +4,7 @@ core_classification: official_port source: "https://github.com/SquirrelJME/SquirrelJME" upstream: "https://github.com/SquirrelJME/SquirrelJME" profiled_date: "2026-03-25" -source_commit: "4d7334cf922c8f5abfc94a8d4fc941d350e49914" +source_commit: "4dca9d4d45523cc76272d1ade2b53121b2ea4674" core_version: "0.3.0" display_name: "Java ME (SquirrelJME)" cores: [squirreljme] @@ -23,49 +23,49 @@ files: - name: "squirreljme-0.3.0-fast.jar" description: "Class library v0.3.0, fast/optimized build" required: false - source_ref: "nanocoat/src/boot.c:102" + source_ref: "nanocoat/src/boot.c:92" - name: "squirreljme-0.3.0.jar" description: "Class library v0.3.0, standard build" required: false - source_ref: "nanocoat/src/boot.c:103" + source_ref: "nanocoat/src/boot.c:93" - name: "squirreljme-0.3.0-test.jar" description: "Class library v0.3.0, standard build with test suites" required: false - source_ref: "nanocoat/src/boot.c:104" + source_ref: "nanocoat/src/boot.c:94" - name: "squirreljme-0.3.0-slow.jar" description: "Class library v0.3.0, slow/interpreter build" required: false - source_ref: "nanocoat/src/boot.c:105" + source_ref: "nanocoat/src/boot.c:95" - name: "squirreljme-0.3.0-slow-test.jar" description: "Class library v0.3.0, slow build with test suites" required: false - source_ref: "nanocoat/src/boot.c:106" + source_ref: "nanocoat/src/boot.c:96" - name: "squirreljme-fast.jar" description: "Class library, fast/optimized build (unversioned)" required: false - source_ref: "nanocoat/src/boot.c:107" + source_ref: "nanocoat/src/boot.c:97" - name: "squirreljme.jar" description: "Class library, standard build (unversioned)" required: false - source_ref: "nanocoat/src/boot.c:108" + source_ref: "nanocoat/src/boot.c:98" - name: "squirreljme-test.jar" description: "Class library, standard build with test suites (unversioned)" required: false - source_ref: "nanocoat/src/boot.c:109" + source_ref: "nanocoat/src/boot.c:99" - name: "squirreljme-slow.jar" description: "Class library, slow/interpreter build (unversioned)" required: false - source_ref: "nanocoat/src/boot.c:110" + source_ref: "nanocoat/src/boot.c:100" - name: "squirreljme-slow-test.jar" description: "Class library, slow build with test suites (unversioned)" required: false - source_ref: "nanocoat/src/boot.c:111" + source_ref: "nanocoat/src/boot.c:101" diff --git a/emulators/srb2.yml b/emulators/srb2.yml index 61012b28..4079f6ea 100644 --- a/emulators/srb2.yml +++ b/emulators/srb2.yml @@ -4,7 +4,7 @@ core_classification: game_engine source: "https://github.com/STJr/SRB2" upstream: "https://git.do.srb2.org/STJr/SRB2" profiled_date: "2026-10-20" -source_commit: "8701ef41f617c06e23a7b8ccd2199c160c5d1dd1" +source_commit: "639b58c6d718452ef343a0bc927d043bed9e40d6" core_version: "2.2.15" display_name: "Sonic Robo Blast 2" cores: [srb2] @@ -21,26 +21,26 @@ notes: | archive SRB2-v2215-Full.zip, which RetroPie unpacks and installs next to the binary. The hashes below are those of the files in that archive. - IdentifyVersion() (src/d_main.c:1126-1205) finds the asset directory + IdentifyVersion() (src/d_main.c:1161-1240) finds the asset directory through I_LocateWad(), which tries SRB2WADDIR, the working directory, the default install paths, $HOME/.srb2 and the search paths in that - order (src/sdl/i_system.c:3019-3072), and chdirs there. The first + order (src/sdl/i_system.c:3044-3097), and chdirs there. The first directory holding srb2.pk3 wins. RetroPie launches the binary from its install directory. srb2/ below stands for that directory. srb2.pk3, zones.pk3 and characters.pk3 are main files: W_InitFile with startup set ends in I_Error when one is missing (src/w_wad.c:805-817). A build without DEVELOP then checks their MD5 against ASSET_HASH_* - (src/config.h.in:46-48, src/d_main.c:1447-1449) and W_VerifyFileMD5 + (src/config.h.in:46-48, src/d_main.c:1482-1484) and W_VerifyFileMD5 stops on a mismatch (src/w_wad.c:2550-2590). The CMake option SRB2_CONFIG_DEV_BUILD, off by default, is what defines DEVELOP - (src/CMakeLists.txt:149, 383-384). patch.pk3 is loaded only when + (src/CMakeLists.txt:149, 380-381). patch.pk3 is loaded only when USE_PATCH_DTA is defined, which it is not in this release (src/doomdef.h:171). music.pk3 is not hashed. MUSICTEST adds it only when it holds music and sound lumps alone, rejects it with an error when it holds anything else, - and skips it when it cannot be opened (src/d_main.c:1189-1203, + and skips it when it cannot be opened (src/d_main.c:1224-1238, src/w_wad.c:2810, 2840). files: @@ -54,7 +54,7 @@ files: md5: "3182ce524acc2072ddaa81acf4b6a9aa" sha1: "f53394ceabded0a307330d81a4ae4db59e269ecb" validation: [md5] - source_ref: "src/d_main.c:1161-1171, src/d_main.c:1447, src/config.h.in:46" + source_ref: "src/d_main.c:1196-1206, src/d_main.c:1482, src/config.h.in:46" - name: "zones.pk3" path: "srb2/zones.pk3" @@ -66,7 +66,7 @@ files: md5: "88ff4c300851ccdb0406698eadd89907" sha1: "de0e5d630c1f93472be22f981f68033107f059a2" validation: [md5] - source_ref: "src/d_main.c:1180, src/d_main.c:1448, src/config.h.in:47" + source_ref: "src/d_main.c:1215, src/d_main.c:1483, src/config.h.in:47" - name: "characters.pk3" path: "srb2/characters.pk3" @@ -78,7 +78,7 @@ files: md5: "5c5936b8a690e007c0939bd0785a41fb" sha1: "c070cd568f6579a94372e70f6c789fc479247d5c" validation: [md5] - source_ref: "src/d_main.c:1183, src/d_main.c:1449, src/config.h.in:48" + source_ref: "src/d_main.c:1218, src/d_main.c:1484, src/config.h.in:48" - name: "music.pk3" path: "srb2/music.pk3" @@ -89,5 +89,5 @@ files: size: 99639560 md5: "b8763719b66716dbd5c0f9982269be69" sha1: "84095f245c724899f52d4912f2c01e0fc9d42dc0" - source_ref: "src/d_main.c:1189-1203, src/d_main.c:1453" + source_ref: "src/d_main.c:1224-1238, src/d_main.c:1488" note: "Hashes are those of the 2.2.15 release archive. The engine does not check them." diff --git a/emulators/stella2014.yml b/emulators/stella2014.yml index 0c3d77a0..a5357483 100644 --- a/emulators/stella2014.yml +++ b/emulators/stella2014.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/stella2014-libretro" upstream: "https://github.com/stella-emu/stella" profiled_date: "2026-03-25" source_commit: "7d1361e407e63f29e52892655069e5fb4096e691" +upstream_commit: "2c3d7023e9136f75c789803b44f119d8749dc104" core_version: "3.9.3" display_name: "Atari - 2600 (Stella 2014)" cores: diff --git a/emulators/stella2023.yml b/emulators/stella2023.yml index afc3d7ac..a5cbe81c 100644 --- a/emulators/stella2023.yml +++ b/emulators/stella2023.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/stella2023" upstream: "https://github.com/stella-emu/stella" profiled_date: "2026-03-25" source_commit: "ba52c43b9eda950eb0c0eec69cda9b17dee8c39b" +upstream_commit: "2c3d7023e9136f75c789803b44f119d8749dc104" core_version: "7.0_pre" display_name: "Atari - 2600 (Stella 2023)" cores: diff --git a/emulators/stonesoup.yml b/emulators/stonesoup.yml index c2d1339e..7b80a4eb 100644 --- a/emulators/stonesoup.yml +++ b/emulators/stonesoup.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/crawl-ref" upstream: "https://github.com/crawl/crawl" profiled_date: "2026-03-25" source_commit: "cc2530f377a3a5d686d4b6a360d88b01de0fbc59" +upstream_commit: "8757df5d4397047058e25e456cac506db9c1442b" core_version: "0.16-a0" display_name: "Dungeon Crawl Stone Soup" cores: [stonesoup] diff --git a/emulators/swanstation.yml b/emulators/swanstation.yml index 9ae4477c..11e51bd4 100644 --- a/emulators/swanstation.yml +++ b/emulators/swanstation.yml @@ -4,7 +4,8 @@ core_classification: community_fork source: "https://github.com/libretro/swanstation" upstream: "https://github.com/stenzek/duckstation" profiled_date: "2026-03-25" -source_commit: "b6c30a7b270a3f68ac41f268eafdfa678d17dea2" +source_commit: "cc94ebcd38a88a0e90788d7c8bcd764a009a5fa0" +upstream_commit: "938c6d2a03e523d0e4275aa753f289a987bcb016" core_version: "v0.1" display_name: "Sony - PlayStation (SwanStation)" cores: [swanstation] diff --git a/emulators/teknoparrot.yml b/emulators/teknoparrot.yml index 442a6ff4..7403d1a5 100644 --- a/emulators/teknoparrot.yml +++ b/emulators/teknoparrot.yml @@ -5,7 +5,7 @@ source: "https://github.com/teknogods/TeknoParrotUI" upstream: closed-source author: "TeknoGods" profiled_date: "2026-10-20" -source_commit: "7ffcdf1c003ff322f2d8db659ab6fd7c4f982ade" +source_commit: "b75872addc1d5cce81a62f4c1468eab59e2d3cbe" core_version: "TeknoParrotUI 7ffcdf1" display_name: "Arcade - PC-based and Sega/Namco boards (TeknoParrot)" cores: diff --git a/emulators/thextech.yml b/emulators/thextech.yml index 0e87877f..816c6ef7 100644 --- a/emulators/thextech.yml +++ b/emulators/thextech.yml @@ -4,7 +4,7 @@ core_classification: game_engine source: "https://github.com/TheXTech/TheXTech" upstream: "https://github.com/TheXTech/TheXTech" profiled_date: "2026-10-04" -source_commit: "a72915cd9a2c811f2388423775f20d75bb2107bd" +source_commit: "3ad66cb1896ea9f255e8104862e4e17c2e8a8ded" display_name: "TheXTech" cores: [] systems: [smbx] @@ -110,7 +110,7 @@ files: category: game_data path: "TheXTech/graphics/" required: true - source_ref: "src/main/asset_pack.cpp:274, 326-327, src/gfx.cpp:121-229, src/load_gfx.cpp:120-123" + source_ref: "src/main/asset_pack.cpp:274, 326-327, src/gfx.cpp:121-229, src/load_gfx.cpp:117-120" note: "graphics/ui/ must exist for a directory to be scanned as a pack, and GFX_t::load rejects the pack when a required UI image is missing." - name: "fonts/" @@ -163,7 +163,7 @@ files: category: game_data path: "TheXTech/editor.ini" required: false - source_ref: "src/editor/editor_custom.cpp:962, 979, src/main/translate.cpp:888" + source_ref: "src/editor/editor_custom.cpp:969, src/editor/editor_custom.cpp:986, src/main/translate.cpp:889" note: "Item lists of the built-in editor, read when the translation table is built." - name: "intro.lvlx" @@ -179,7 +179,7 @@ files: category: game_data path: "TheXTech/introset/" required: false - source_ref: "src/game_main.cpp:194-222, 247, src/main/level_file.cpp:321-339" + source_ref: "src/game_main.cpp:194-222, 247, src/main/level_file.cpp:314-332" note: "Directory of .lvl/.lvlx intro levels. One is picked at random when present, otherwise the root intro level is opened. The Adventures of Demo pack carries none, and these 19 levels come from the introset/ of the Nostalgic Paradise pack (Blue Edition 0.2.8b, nostalgic-paradise-stable.7z). A level reads custom graphics from introset/ and from the subfolder named after it (07/, 08/, 10/), and every other block, BGO, NPC and background ID they use is present in the Adventures of Demo graphics." - name: "outro.lvlx" diff --git a/emulators/tyrquake.yml b/emulators/tyrquake.yml index 66c5add0..11f05a77 100644 --- a/emulators/tyrquake.yml +++ b/emulators/tyrquake.yml @@ -4,7 +4,7 @@ core_classification: game_engine source: "https://github.com/libretro/tyrquake" upstream: "http://disenchant.net/tyrquake/" profiled_date: "2026-03-25" -source_commit: "e57bb11597e8a00380f30f2627d219da960cf69a" +source_commit: "67db338ff4d27fdbcead61d4e54938d758ae62cb" core_version: "v0.62" display_name: "Quake (TyrQuake)" cores: [tyrquake] diff --git a/emulators/vba_next.yml b/emulators/vba_next.yml index 2553be0d..2e35fbc6 100644 --- a/emulators/vba_next.yml +++ b/emulators/vba_next.yml @@ -3,7 +3,7 @@ type: libretro core_classification: frozen_snapshot source: "https://github.com/libretro/vba-next" upstream: "https://github.com/visualboyadvance-m/visualboyadvance-m" -upstream_commit: "28b5156f21f2127945e0ad7e85f1545635431292" +upstream_commit: "8124d84a655e5261bee5eeb9f43c18630ec58a61" profiled_date: "2026-03-25" source_commit: "788192f215ad0a1413f1625b40ebba3423fa0ade" core_version: "SVN" @@ -29,7 +29,7 @@ notes: | jumps to 0x08000000 (ROM entry), skipping boot animation (src/gba.c:13134-13151). - Upstream VBA-M CPUInit (src/core/gba/gba.cpp:5137-5165) is functionally + Upstream VBA-M CPUInit (src/core/gba/gba.cpp:5152-5180) is functionally identical. No divergences in BIOS handling. files: diff --git a/emulators/vbam.yml b/emulators/vbam.yml index fb579c20..4cc306d2 100644 --- a/emulators/vbam.yml +++ b/emulators/vbam.yml @@ -5,6 +5,7 @@ source: "https://github.com/libretro/vbam-libretro" upstream: "https://github.com/visualboyadvance-m/visualboyadvance-m" profiled_date: "2026-03-25" source_commit: "115defb3a318258ab84746d45258a1aec19d0b4b" +upstream_commit: "8124d84a655e5261bee5eeb9f43c18630ec58a61" core_version: "2.1.4" display_name: "Nintendo - Game Boy Advance (VBA-M)" cores: diff --git a/emulators/vecx.yml b/emulators/vecx.yml index 03810ecb..c00e7cf7 100644 --- a/emulators/vecx.yml +++ b/emulators/vecx.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/libretro/libretro-vecx" upstream: "https://github.com/jhawthorn/vecx" profiled_date: "2026-03-25" -source_commit: "8f671cc9d737f2890c3ce19e177e2984dcae121f" +source_commit: "dccff5402a16d1ea7c112095a8e42632bf149506" core_version: "SVN" display_name: "GCE - Vectrex (vecx)" cores: @@ -22,7 +22,7 @@ notes: | - skip.h - modified BIOS that skips the intro The default build uses STANDARD_BIOS via #define at libretro.c:20. - At load time (retro_load_game, libretro.c:736): + At load time (retro_load_game, libretro.c:737): memcpy(rom, bios_data, bios_data_size); This copies the compiled-in BIOS data into the rom[8192] array (vecx.c:40, mapped at 0xE000-0xFFFF via vecx.c:437-439). diff --git a/emulators/vice.yml b/emulators/vice.yml index 133fc4b6..3c13c4c4 100644 --- a/emulators/vice.yml +++ b/emulators/vice.yml @@ -14,7 +14,7 @@ cores: source: "https://github.com/libretro/vice-libretro" logo: "https://raw.githubusercontent.com/VICE-Team/svn-mirror/main/vice/data/common/vice-logo-black.svg" profiled_date: "2026-03-18" -source_commit: "f63b56688f3133a2bb17499db9eebb7ab81df5f5" +source_commit: "6cbc44add8b0a03791b343712dc63dc1edad2675" core_version: "3.9" display_name: "Commodore - C64 (VICE x64, fast)" systems: diff --git a/emulators/vice_x128.yml b/emulators/vice_x128.yml index e4cc0127..c07198f9 100644 --- a/emulators/vice_x128.yml +++ b/emulators/vice_x128.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/libretro/vice-libretro" upstream: "https://sourceforge.net/projects/vice-emu/" profiled_date: "2026-03-25" -source_commit: "f63b56688f3133a2bb17499db9eebb7ab81df5f5" +source_commit: "6cbc44add8b0a03791b343712dc63dc1edad2675" core_version: "3.10" display_name: "Commodore - C128 (VICE x128)" cores: [vice_x128, x128] diff --git a/emulators/vice_x64.yml b/emulators/vice_x64.yml index aa69c91c..0cb97f2a 100644 --- a/emulators/vice_x64.yml +++ b/emulators/vice_x64.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/libretro/vice-libretro" upstream: "https://sourceforge.net/projects/vice-emu/" profiled_date: "2026-03-25" -source_commit: "f63b56688f3133a2bb17499db9eebb7ab81df5f5" +source_commit: "6cbc44add8b0a03791b343712dc63dc1edad2675" core_version: "3.10" display_name: "Commodore - C64 (VICE x64, fast)" cores: [vice_x64, x64] diff --git a/emulators/vice_x64dtv.yml b/emulators/vice_x64dtv.yml index 6df7689e..b7289af6 100644 --- a/emulators/vice_x64dtv.yml +++ b/emulators/vice_x64dtv.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/libretro/vice-libretro" upstream: "https://sourceforge.net/projects/vice-emu/" profiled_date: "2026-03-25" -source_commit: "f63b56688f3133a2bb17499db9eebb7ab81df5f5" +source_commit: "6cbc44add8b0a03791b343712dc63dc1edad2675" core_version: "3.10" display_name: "Commodore - C64DTV (VICE x64dtv)" cores: [vice_x64dtv, x64dtv] diff --git a/emulators/vice_x64sc.yml b/emulators/vice_x64sc.yml index 0beca070..673a159b 100644 --- a/emulators/vice_x64sc.yml +++ b/emulators/vice_x64sc.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/libretro/vice-libretro" upstream: "https://sourceforge.net/projects/vice-emu/" profiled_date: "2026-03-25" -source_commit: "f63b56688f3133a2bb17499db9eebb7ab81df5f5" +source_commit: "6cbc44add8b0a03791b343712dc63dc1edad2675" core_version: "3.10" display_name: "Commodore - C64 (VICE x64sc, accurate)" cores: [vice_x64sc, "x64sx"] diff --git a/emulators/vice_xscpu64.yml b/emulators/vice_xscpu64.yml index 51625423..d82077c9 100644 --- a/emulators/vice_xscpu64.yml +++ b/emulators/vice_xscpu64.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/libretro/vice-libretro" upstream: "https://sourceforge.net/projects/vice-emu/" profiled_date: "2026-03-25" -source_commit: "f63b56688f3133a2bb17499db9eebb7ab81df5f5" +source_commit: "6cbc44add8b0a03791b343712dc63dc1edad2675" core_version: "3.10" display_name: "Commodore - C64 SuperCPU (VICE xscpu64)" cores: [vice_xscpu64, xscpu64] diff --git a/emulators/vice_xvic.yml b/emulators/vice_xvic.yml index a07ee4aa..5f50b81a 100644 --- a/emulators/vice_xvic.yml +++ b/emulators/vice_xvic.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/libretro/vice-libretro" upstream: "https://sourceforge.net/projects/vice-emu/" profiled_date: "2026-03-25" -source_commit: "f63b56688f3133a2bb17499db9eebb7ab81df5f5" +source_commit: "6cbc44add8b0a03791b343712dc63dc1edad2675" core_version: "3.10" display_name: "Commodore - VIC-20 (VICE xvic)" cores: [vice_xvic, xvic] diff --git a/emulators/vircon32.yml b/emulators/vircon32.yml index 4a3bffc5..064a4226 100644 --- a/emulators/vircon32.yml +++ b/emulators/vircon32.yml @@ -4,7 +4,8 @@ core_classification: official_port source: "https://github.com/vircon32/vircon32-libretro" upstream: "https://github.com/vircon32/ComputerSoftware" profiled_date: "2026-03-25" -source_commit: "dd78c5cea1fcaa382b7492d0d813d6c1534914d7" +source_commit: "35a4042b06c30f232edb3f3abb47a10bcd8ec240" +upstream_commit: "ea62bc7caad34f483945eadb114cf7d9c26cf54c" core_version: "2026.2.18" display_name: "Vircon32" cores: @@ -26,7 +27,7 @@ notes: | 2. If found, load it via Console.LoadBiosFile() (external override) 3. If not found, load the embedded BIOS via LoadEmbeddedBios() - This runs inside context_reset() (libretro.cpp:473-474), which is called + This runs inside context_reset() (libretro.cpp:537-538), which is called whenever the OpenGL context is (re)created. The BIOS file format is a V32 ROM with a specific signature diff --git a/emulators/vkquake3.yml b/emulators/vkquake3.yml index 4627f7d6..2b94f663 100644 --- a/emulators/vkquake3.yml +++ b/emulators/vkquake3.yml @@ -4,7 +4,7 @@ core_classification: game_engine source: "https://github.com/suijingfeng/vkQuake3" upstream: "https://github.com/ioquake/ioq3" profiled_date: "2026-10-17" -source_commit: "5300b32803c1c61bc3b6bdf86a084c1db1a217ad" +source_commit: "650bd625eb725446279c6176804b554e2e1c98f3" core_version: "1.36" display_name: "Quake III Arena (vkQuake3)" cores: ["vkquake3"] diff --git a/emulators/winuae.yml b/emulators/winuae.yml index 1a3c4cfe..e50f04b0 100644 --- a/emulators/winuae.yml +++ b/emulators/winuae.yml @@ -2,7 +2,7 @@ emulator: WinUAE type: standalone core_classification: other source: "https://github.com/tonioni/WinUAE" -source_commit: "7ee16ec5e94f9d065121ce9f40fecc605ac0fb08" +source_commit: "17a26fa8e65e40cf4fbe33ffbdfa420a355a813d" profiled_date: "2026-10-20" core_version: "6.1.0 beta 19" display_name: "Commodore - Amiga (WinUAE)" @@ -42,8 +42,8 @@ notes: | modules of the extended ROMs: cdstrap, cd.device and cdfs.library in the CD32 ROM, cdtv.device, cdfs.library and cdstrap in the CDTV ROM. The CD32 and CDTV Kickstarts carry none. The CD32 quickstart model and the base - CDTV model have no floppy drive (cfgfile.cpp:9375-9379, 9405-9406), and - both ask for the extended ROM (cfgfile.cpp:9390-9395, 9414-9423), so + CDTV model have no floppy drive (cfgfile.cpp:9374-9378, 9404-9405), and + both ask for the extended ROM (cfgfile.cpp:9389-9394, 9413-9422), so without it no CD is read or booted. CDTV and A600/A1200 internal devices are enabled with :ENABLED, which needs diff --git a/emulators/xash3d_fwgs.yml b/emulators/xash3d_fwgs.yml index 47e3ad52..7cb8e1d2 100644 --- a/emulators/xash3d_fwgs.yml +++ b/emulators/xash3d_fwgs.yml @@ -4,7 +4,7 @@ core_classification: game_engine source: "https://github.com/FWGS/xash3d-fwgs" upstream: "https://github.com/FWGS/xash3d-fwgs" profiled_date: "2026-10-04" -source_commit: "1414fc281b6dc986378ea7ae35086c62d782a865" +source_commit: "d6b54aaf6c1d8518e08404a842f3f6ee02cef3cc" core_version: "0.21+git" display_name: "Xash3D FWGS" cores: [xash3d_fwgs, xash3d] diff --git a/emulators/xemu-chihiro.yml b/emulators/xemu-chihiro.yml index 6e6a8fa1..ab82e0e9 100644 --- a/emulators/xemu-chihiro.yml +++ b/emulators/xemu-chihiro.yml @@ -5,7 +5,8 @@ source: "https://github.com/Tovarichtch/xemu" source_branch: perf-experimental upstream: "https://github.com/xemu-project/xemu" profiled_date: "2026-10-20" -source_commit: "0d44d803b2ad22c26c907844fe81d40fbd6ffdfa" +source_commit: "98fbd75dd0f3088a4988abc1698feb37b844a41a" +upstream_commit: "25e1ee2fd59a451f2ab57e825b4f8a5414220c8b" core_version: "0.8.134-406-g0d44d803b2" display_name: "Sega - Chihiro (xemu Chihiro)" cores: diff --git a/emulators/xendroid.yml b/emulators/xendroid.yml index 52c811ee..08989a8e 100644 --- a/emulators/xendroid.yml +++ b/emulators/xendroid.yml @@ -6,7 +6,7 @@ upstream: "https://github.com/has207/xenia-edge" author: "rfandango" profiled_date: "2026-09-17" source_commit: "779680ade075d2d2a4c589c6a8d57a8e26c116c0" -upstream_commit: "84cf209221160590768f615a0369a9c4a1456bbf" +upstream_commit: "e569a1aa15632e957fc2adc3bfc875de51f79eab" core_version: "0b11201" display_name: "Microsoft - Xbox 360 (XenDroid)" cores: diff --git a/emulators/xenia.yml b/emulators/xenia.yml index 8efab744..fd82f53f 100644 --- a/emulators/xenia.yml +++ b/emulators/xenia.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/xenia-canary/xenia-canary" upstream: "https://github.com/xenia-canary/xenia-canary" profiled_date: "2026-03-26" -source_commit: "7347cd12ef6e3029db3abcf17a0760d9f74f84bd" +source_commit: "534aeb64ea1937361573e3933d121e636463b135" core_version: "canary" display_name: "Xenia Canary (Xbox 360)" cores: @@ -40,7 +40,7 @@ exclusion_note: > Xenia is a pure high-level emulation (HLE) Xbox 360 emulator. The entire Xbox 360 operating system (kernel, XAM dashboard services, XBDM debug manager) is reimplemented in C++ as HLE modules loaded at startup - (src/xenia/emulator.cc:317-322). System configuration (XConfig) returns hardcoded + (src/xenia/emulator.cc:320-325). System configuration (XConfig) returns hardcoded values from xboxkrnl_xconfig.cc. Memory, CPU (JIT), GPU, APU, and HID subsystems are all software-emulated. No external BIOS, firmware, NAND flash dump, or system files are loaded from disk. The wiki confirms: From d3fe3a4f0cec1f1569855b382dcdeaee4a96fba2 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:51:08 +0200 Subject: [PATCH 04/49] chore: hold five pins on the build they ship chocolate-doom, supertuxkart and fheroes2 run only on EmuELEC, piemu only on AmberELEC, alephone only on RetroPie. Each of those builds a fixed revision (package.mk PKG_VERSION, or the release-20250829 tag), so the pin stays on it and profile_sync judges the profile against itself. --- emulators/alephone.yml | 1 + emulators/chocolate-doom.yml | 1 + emulators/fheroes2.yml | 1 + emulators/piemu.yml | 1 + emulators/supertuxkart.yml | 1 + 5 files changed, 5 insertions(+) diff --git a/emulators/alephone.yml b/emulators/alephone.yml index 00c887d3..a44938d6 100644 --- a/emulators/alephone.yml +++ b/emulators/alephone.yml @@ -5,6 +5,7 @@ source: "https://github.com/Aleph-One-Marathon/alephone" upstream: "https://github.com/Aleph-One-Marathon/alephone" profiled_date: "2026-10-20" source_commit: "07a9c36aff403d143a0608815f725631a01e382c" +pin_frozen: "RetroPie, the only platform that ships it, builds the release-20250829 tag at this commit (scriptmodules/ports/alephone.sh, _get_branch_alephone). Debian 10 and older get release-20250302." core_version: "1.11 (20250829)" display_name: "Marathon (Aleph One)" cores: diff --git a/emulators/chocolate-doom.yml b/emulators/chocolate-doom.yml index c33c97d1..69d96a9d 100644 --- a/emulators/chocolate-doom.yml +++ b/emulators/chocolate-doom.yml @@ -4,6 +4,7 @@ core_classification: game_engine source: "https://github.com/chocolate-doom/chocolate-doom" profiled_date: "2026-10-22" source_commit: "72d9e9318c4ccc61dab29bb9cc30bc8a9a93266d" +pin_frozen: "EmuELEC, the only platform that ships it, builds this revision (EmuELEC packages/sx05re/emuelec-ports/chocolate-doom/package.mk:5). Later commits are not part of that build." core_version: "3.0.0" display_name: "Doom (Chocolate Doom)" cores: diff --git a/emulators/fheroes2.yml b/emulators/fheroes2.yml index b1ffbbf5..6cd29936 100644 --- a/emulators/fheroes2.yml +++ b/emulators/fheroes2.yml @@ -4,6 +4,7 @@ core_classification: game_engine source: "https://github.com/ihhub/fheroes2" profiled_date: "2026-10-22" source_commit: "35ca4c915be00098547d5050412a325dd55cfd7f" +pin_frozen: "EmuELEC, the only platform that ships it, builds this revision (EmuELEC packages/sx05re/emuelec-ports/fheroes2/package.mk:5). Later commits are not part of that build." core_version: "1.0.11" display_name: "Heroes of Might and Magic II (fheroes2)" cores: diff --git a/emulators/piemu.yml b/emulators/piemu.yml index f1e77de3..f5bb484a 100644 --- a/emulators/piemu.yml +++ b/emulators/piemu.yml @@ -6,6 +6,7 @@ upstream: "https://github.com/autch/piemu" profiled_date: "2026-10-22" source_commit: "0785214f13746bdfd709b1909f007e213b470ba1" upstream_commit: "23208626e16e53b73fd21a2fbd0c429338625dc4" +pin_frozen: "AmberELEC, the only platform that ships it, builds this revision (AmberELEC packages/games/emulators/piemu/package.mk:5). Later commits are not part of that build." core_version: "git" display_name: "Aquaplus - P/ECE (P/EMU/SDL)" cores: diff --git a/emulators/supertuxkart.yml b/emulators/supertuxkart.yml index 1c58b5d2..5701311e 100644 --- a/emulators/supertuxkart.yml +++ b/emulators/supertuxkart.yml @@ -4,6 +4,7 @@ core_classification: game_engine source: "https://github.com/supertuxkart/stk-code" profiled_date: "2026-10-22" source_commit: "fab79150111944c9e33396db68eb5de84f2efeaa" +pin_frozen: "EmuELEC, the only platform that ships it, builds this revision (EmuELEC packages/sx05re/emuelec-ports/supertuxkart/package.mk:5). Later commits are not part of that build." core_version: "git" display_name: "SuperTuxKart" cores: From fe3aac477deae145f59e31cff41028c2dbabd0e2 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:52:15 +0200 Subject: [PATCH 05/49] chore: hold supertux and advanced_drastic pins supertux runs only on EmuELEC, which builds 37cddf24 (v0.6.3), and advanced_drastic only on KNULLI, which builds eaf41ab. Both pins stay on those builds. --- emulators/advanced_drastic.yml | 1 + emulators/supertux.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/emulators/advanced_drastic.yml b/emulators/advanced_drastic.yml index 53d58b56..541d8251 100644 --- a/emulators/advanced_drastic.yml +++ b/emulators/advanced_drastic.yml @@ -6,6 +6,7 @@ upstream: closed-source author: "trngaje (hooks), Exophase (DraStic)" profiled_date: "2026-10-22" source_commit: "eaf41ab9bc8adcc15c010bf9517bc94c38e7bffd" +pin_frozen: "KNULLI, the only platform that ships it, builds this revision (KNULLI package/emulators/advanced_drastic/advanced_drastic.mk:7 at tag 20260511). Later commits are not part of that build." core_version: "r2.5.2.0" display_name: "Nintendo - DS (advanced_drastic)" cores: diff --git a/emulators/supertux.yml b/emulators/supertux.yml index 6b70d03d..eb42c76d 100644 --- a/emulators/supertux.yml +++ b/emulators/supertux.yml @@ -4,6 +4,7 @@ core_classification: game_engine source: "https://github.com/SuperTux/supertux" profiled_date: "2026-10-22" source_commit: "37cddf24a4abfdec7931a84afd9e87fb8ea18767" +pin_frozen: "EmuELEC, the only platform that ships it, builds this revision, v0.6.3 (EmuELEC packages/sx05re/emuelec-ports/supertux/package.mk:5). Later commits are not part of that build." core_version: "0.6.3-1020-g37cddf24a" display_name: "SuperTux (supertux2)" cores: From 9de0dad2e31683706eec067398502c8fe3f221c0 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:28:34 +0200 Subject: [PATCH 06/49] chore: advance supermodel3 to 44c83af The version string now names trzy 32c29b0. Games.xml, Music.xml and both crosshair bitmaps are unchanged and ship in the 44c83af release. --- emulators/supermodel3.yml | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/emulators/supermodel3.yml b/emulators/supermodel3.yml index e179e9a3..9430888a 100644 --- a/emulators/supermodel3.yml +++ b/emulators/supermodel3.yml @@ -4,10 +4,10 @@ core_classification: enhanced_fork source: "https://github.com/DirtBagXon/model3emu-code-sinden" upstream: "https://github.com/trzy/Supermodel" author: "DirtBagXon" -profiled_date: "2026-10-20" -source_commit: "377d259c59c90c0042278aca58603eb4bd7b03f3" -upstream_commit: "ddbc3066e077e4c99581d2ab7d3452fd1a603723" -core_version: "0.3a-ddbc306-mm DirtBagXon (Sinden)" +profiled_date: "2026-10-23" +source_commit: "44c83af50cb156773fdb0f4af1d8e311b10bf154" +upstream_commit: "32c29b036fc18310e2e6b63370d89c7ee6d790d1" +core_version: "0.3a-32c29b0-mm DirtBagXon (Sinden)" display_name: "Sega - Model 3 (Supermodel, Sinden fork)" verification: existence cores: @@ -18,9 +18,10 @@ systems: notes: | DirtBagXon's Supermodel fork with Sinden light gun support, rebased on - trzy's tree at ddbc306, the revision its version string names. RetroPie builds the main branch on x86 and the arm branch - everywhere else, the arm branch at commit 454ed3f when the system SDL2 is - 2.0.22 or older. The arm branch is a separate, older line (revision + trzy's tree at 32c29b0, the revision its version string names. RetroPie + builds the main branch on x86 and the arm branch everywhere else, the arm + branch at commit 454ed3f when the system SDL2 is 2.0.22 or older. The arm + branch is a separate, older line (revision 6ae0cf2f237586c4a3cc791514ec1b0f3cd4c56c, "0.3a-8c6af68-arm-mm") and is described in its own paragraph below. Entries carry the main branch. ref: Src/Version.h:32 @@ -31,7 +32,7 @@ notes: | relative to the working directory when Config/ exists there, otherwise under ~/.supermodel/ when present, otherwise under the XDG config and data homes. - ref: Src/OSD/Unix/FileSystemPath.cpp:99-157, Src/OSD/SDL/Main.cpp:120-122 + ref: Src/OSD/Unix/FileSystemPath.cpp:99-157, Src/OSD/SDL/Main.cpp:121-123 ROM sets are MAME format archives described by Games.xml. The game is chosen by the archive's own file name, which must match a game name, and @@ -47,15 +48,15 @@ notes: | update: p1_p4.bin (boot stub and loop code) and p2.bin (INIT ROM). The machine refuses to start without either region. A scsi_rom region is optional, a synthetic image is built when it is absent. - ref: Config/Games.xml:1404-1428, Src/Pro1000/Pro1000.cpp:2114-2146, + ref: Config/Games.xml:1404-1428, Src/Pro1000/Pro1000.cpp:2111-2143, Src/Pro1000/Pro1000.cpp:165-181 Supermodel.ini is optional. It is written from compiled-in defaults when absent. NVRAM/.nv is loaded when present and written on exit. External GLSL shaders are read only when VertexShader or FragmentShader names a file, both default to empty. - ref: Src/OSD/SDL/Main.cpp:1407-1427, Src/OSD/SDL/Main.cpp:2356, - Src/OSD/SDL/Main.cpp:791-822, Src/OSD/SDL/Main.cpp:1545-1546 + ref: Src/OSD/SDL/Main.cpp:1416-1436, Src/OSD/SDL/Main.cpp:2365, + Src/OSD/SDL/Main.cpp:807-838, Src/OSD/SDL/Main.cpp:1554-1555 The arm branch has no Pro-1000 emulation and no path resolution: the paths Config/Supermodel.ini, Config/Games.xml, NVRAM/.nv and @@ -74,8 +75,8 @@ files: sha1: "79fa74742f4b18e250c11c1dea5837fdf57cd54c" md5: "f2f5f09ca0a275696319176b4f41b8d6" description: "ROM set definitions" - note: "Parsed by the GameLoader constructor. Without it no game is defined, the archive name matches nothing and main returns 1. The path is the GameXMLFile key, so -game-xml-file moves it. The hash is that of Config/Games.xml at the pinned revision, 64 sets, which RetroPie copies on every install. Shipped in the 377d259 Linux, macOS and Windows release archives." - source_ref: "upstream Src/OSD/SDL/Main.cpp:121, source Src/OSD/SDL/Main.cpp:1534, source Src/OSD/SDL/Main.cpp:2444-2449, source Src/GameLoader.cpp:601-610, source Src/GameLoader.cpp:1066-1071, source Src/GameLoader.cpp:1111-1113" + note: "Parsed by the GameLoader constructor. Without it no game is defined, the archive name matches nothing and main returns 1. The path is the GameXMLFile key, so -game-xml-file moves it. The hash is that of Config/Games.xml at the pinned revision, 64 sets, which RetroPie copies on every install. Shipped in the 44c83af Linux, macOS and Windows release archives." + source_ref: "upstream Src/OSD/SDL/Main.cpp:122, source Src/OSD/SDL/Main.cpp:1543, source Src/OSD/SDL/Main.cpp:2453-2458, source Src/GameLoader.cpp:601-610, source Src/GameLoader.cpp:1066-1071, source Src/GameLoader.cpp:1111-1113" - name: "p1crosshair.bmp" path: "Assets/p1crosshair.bmp" @@ -86,7 +87,7 @@ files: md5: "9012018f50f707c1707009346eb5d18b" description: "Player 1 light gun crosshair texture" note: "Both bitmaps are loaded whatever CrosshairStyle holds, and a failed load aborts startup before the machine is created." - source_ref: "upstream Src/OSD/SDL/Crosshair.cpp:34-51, source Src/OSD/SDL/Main.cpp:2499-2506" + source_ref: "upstream Src/OSD/SDL/Crosshair.cpp:34-51, source Src/OSD/SDL/Main.cpp:2509-2516" - name: "p2crosshair.bmp" path: "Assets/p2crosshair.bmp" @@ -96,7 +97,7 @@ files: sha1: "13c5e692c7acf2ec8243ac421d58fdf69c6c2370" md5: "866dbf59a0e2d849de2365e1c953cc97" description: "Player 2 light gun crosshair texture" - note: "Read in the same call as the player 1 bitmap and equally fatal when it fails to load. Both bitmaps are shipped in the 377d259 release archives." + note: "Read in the same call as the player 1 bitmap and equally fatal when it fails to load. Both bitmaps are shipped in the 44c83af release archives." source_ref: "upstream Src/OSD/SDL/Crosshair.cpp:35, source Src/OSD/SDL/Crosshair.cpp:48-51" - name: "Music.xml" @@ -107,8 +108,8 @@ files: sha1: "b44ed959fe2948a03d81b98e67ca32f2b4c37e78" md5: "ddb4e23db15dda67539eee24de23de4b" description: "Custom MPEG music track map" - note: "Consulted only for a game with a DSB1 or DSB2 board, and skipped when absent. RetroPie does not copy it. Shipped in the 377d259 release archives, the Windows zip with CRLF line endings (sha1 4c556c3a848ef61205a53a9a73ba5e46970d445f)." - source_ref: "upstream Src/OSD/SDL/Main.cpp:122, source Src/OSD/SDL/Main.cpp:947, source Src/Sound/MPEG/MpegAudio.cpp:88-102" + note: "Consulted only for a game with a DSB1 or DSB2 board, and skipped when absent. RetroPie does not copy it. Shipped in the 44c83af release archives, the Windows zip with CRLF line endings (sha1 4c556c3a848ef61205a53a9a73ba5e46970d445f)." + source_ref: "upstream Src/OSD/SDL/Main.cpp:123, source Src/OSD/SDL/Main.cpp:963, source Src/Sound/MPEG/MpegAudio.cpp:88-102" - name: "pro1000.zip" required: true @@ -116,7 +117,7 @@ files: system: real3d-pro1000 description: "Real3D Pro-1000 firmware set (SDK flash update, loop code 5.4, INIT ROM 54)" note: "Loaded as the content of the pro1000 machine, named after the set. Required to run the Pro-1000 only, Model 3 games never read it." - source_ref: "upstream Config/Games.xml:1404-1428, source Src/Pro1000/Pro1000.cpp:2114-2125, source Src/GameLoader.cpp:1066-1071" + source_ref: "upstream Config/Games.xml:1404-1428, source Src/Pro1000/Pro1000.cpp:2111-2122, source Src/GameLoader.cpp:1066-1071" contents: - name: "p1_p4.bin" description: "Flash parts 1 and 4, boot stub and loop code, loaded at 0xFFF00000" From 937c79a1b69c800ebec6c398c191a18c1ccd24b5 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:30:57 +0200 Subject: [PATCH 07/49] chore: advance vkquake to 1.37.1 at 80ec429 Base directory falls back to a Steam, GOG or Epic install when it has no game data. The embedded pak gained crosshairs and a console background. QuakeEX.kpf documented: it serves rerelease localization when no loose copy exists. --- emulators/vkquake.yml | 57 ++++++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/emulators/vkquake.yml b/emulators/vkquake.yml index e3bfaa04..d7852bb0 100644 --- a/emulators/vkquake.yml +++ b/emulators/vkquake.yml @@ -3,53 +3,63 @@ type: standalone core_classification: game_engine source: "https://github.com/Novum/vkQuake" upstream: "https://sourceforge.net/projects/quakespasm/" -profiled_date: "2026-10-17" -source_commit: "6f9c012a9176ee36663fd7a6d30b6291a0dbbcc1" -core_version: "1.33.0" +profiled_date: "2026-10-23" +source_commit: "80ec4293066505fefc1714408abd887369185c74" +core_version: "1.37.1" display_name: "Quake (vkQuake)" cores: ["vkquake"] systems: [quake] notes: | - Vulkan Quake engine derived from QuakeSpasm. VKQUAKE_VERSION 1.33, - VKQUAKE_VER_PATCH 0 (Quake/quakever.h:37-41). GAMENAME = "id1" - (Quake/quakedef.h:37). + Vulkan Quake engine derived from QuakeSpasm. VKQUAKE_VERSION 1.37, + VKQUAKE_VER_PATCH 1 (Quake/quakever.h:37-41). GAMENAME = "id1" + (Quake/quakedef.h:36). COM_InitFilesystem takes the base directory from -basedir, otherwise - host_parms->basedir (Quake/common.c:2463-2467). COM_AddGameDirectory + host_parms->basedir (Quake/common.c:3877-3881). Without -basedir, when + that directory holds neither id1/pak0.pak nor QuakeEX.kpf, it looks for a + Steam, GOG or Epic Games Store install of Quake or of the rerelease + (Quake/common.c:3888-3895, 3159-3171). COM_AddGameDirectory opens //pak0.pak, pak1.pak, ... and stops at the first - index that does not open (Quake/common.c:2241-2245). Right after + index that does not open (Quake/common.c:2882-2886). Right after id1/pak0.pak it mounts vkquake.pak, built from Misc/vq_pak and embedded - in the binary (Quake/common.c:2257-2282). It carries default.cfg, three - menu pictures and entity fixes, no gfx.wad and no palette. + in the binary (Quake/common.c:2898-2923). It carries default.cfg, menu + pictures, a console background, crosshair images and entity fixes, no + gfx.wad and no palette (Misc/vq_pak/vq_pak_contents.txt). gfx.wad and gfx/colormap.lmp come from id1/pak0.pak, and without either the - engine stops with Sys_Error (Quake/wad.c:80-87, Quake/host.c:1093-1095). + engine stops with Sys_Error (Quake/wad.c:80-87, Quake/host.c:1415-1417). gfx/pop.lmp, present only in the registered id1/pak1.pak, sets the - registered cvar (Quake/common.c:1458-1484). + registered cvar (Quake/common.c:2023-2049). COM_LoadPackFile compares the file count (339) and the CRC of the pak directory against id1/pak0.pak v1.00, v1.01 and v1.06 - (Quake/common.c:56-59, 2105-2118). A mismatch only sets com_modified; + (Quake/common.c:58-61, 2773-2786). A mismatch only sets com_modified, the file is still mounted. With com_modified set and no gfx/pop.lmp the - engine stops (Quake/common.c:1464-1470), so -game, -hipnotic and -rogue, + engine stops (Quake/common.c:2029-2035), so -game, -hipnotic and -rogue, whose paks differ from id1/pak0.pak, need the registered id1/pak1.pak. -rogue and -hipnotic add rogue/ and hipnotic/ after id1/ - (Quake/common.c:2507-2510). Batocera 43.1 runs + (Quake/common.c:3948-3951). Batocera 43.1 runs `vkquake -basedir /userdata/roms/quake` and adds -hipnotic or -rogue from the ROM name (configgen generators/vkquake/vkquakeGenerator.py). Background music is streamed from /music/trackNN., ogg, opus, flac, mp3 and wav, when present (Quake/bgmusic.c:29, 321). + Localized strings for the 2021 rerelease content are read from + localization/loc_.txt, falling back to loc_english.txt, first + through the search path, then as a loose file in the base directory, then + inside /QuakeEX.kpf (Quake/common.c:4300-4302, 4322-4326, + 4612-4619). + files: - name: "pak0.pak" category: game_data system: quake path: "id1/pak0.pak" required: true - source_ref: "Quake/common.c:2241-2245 (pak%i.pak loop), 2496 (id1 by default); Quake/wad.c:80-87 (gfx.wad fatal)" + source_ref: "Quake/common.c:2882-2886 (pak%i.pak loop), Quake/common.c:3937 (id1 by default), Quake/wad.c:80-87 (gfx.wad fatal)" note: "Shareware and registered Quake data, one file in both releases. Directory CRC compared to v1.00, v1.01, v1.06, but a mismatch does not refuse the file." - name: "pak1.pak" @@ -57,7 +67,7 @@ files: system: quake path: "id1/pak1.pak" required: false - source_ref: "Quake/common.c:2241-2245 (pak%i.pak loop), 1458-1470 (gfx/pop.lmp, registered check)" + source_ref: "Quake/common.c:2882-2886 (pak%i.pak loop), Quake/common.c:2023-2035 (gfx/pop.lmp, registered check)" note: "Registered episodes 2 to 4. Read only after pak0.pak opens. Needed by -hipnotic, -rogue and -game." unsourceable: "retail data the collection does not hold, and a same-named file of another game must not stand in" @@ -66,7 +76,7 @@ files: system: quake path: "hipnotic/pak0.pak" required: false - source_ref: "Quake/common.c:2509-2510 (-hipnotic), 2241-2245 (pak%i.pak loop)" + source_ref: "Quake/common.c:3950-3951 (-hipnotic), Quake/common.c:2882-2886 (pak%i.pak loop)" note: "Scourge of Armagon data. Loaded with -hipnotic." unsourceable: "retail data the collection does not hold, and a same-named file of another game must not stand in" @@ -75,6 +85,15 @@ files: system: quake path: "rogue/pak0.pak" required: false - source_ref: "Quake/common.c:2507-2508 (-rogue), 2241-2245 (pak%i.pak loop)" + source_ref: "Quake/common.c:3948-3949 (-rogue), Quake/common.c:2882-2886 (pak%i.pak loop)" note: "Dissolution of Eternity data. Loaded with -rogue." unsourceable: "retail data the collection does not hold, and a same-named file of another game must not stand in" + + - name: "QuakeEX.kpf" + category: game_data + system: quake + path: "QuakeEX.kpf" + required: false + source_ref: "Quake/common.c:4322-4326 (localization fallback), Quake/common.c:3159-3171 (rerelease data directory test)" + note: "Zip archive of the 2021 rerelease. Opened only for localization/loc_.txt when no loose copy is found, and tested by the store detection to tell a rerelease folder." + unsourceable: "retail data the collection does not hold" From f3d5a22562c4ce8bab49c759df0a4717efa51a81 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:31:42 +0200 Subject: [PATCH 08/49] chore: pin vkquake2 to the 1.5.10 tag The 28 commits after the old pin touch the Vulkan device code and the build only, no file loading. --- emulators/vkquake2.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/emulators/vkquake2.yml b/emulators/vkquake2.yml index 0755e393..946317b9 100644 --- a/emulators/vkquake2.yml +++ b/emulators/vkquake2.yml @@ -3,8 +3,8 @@ type: standalone core_classification: game_engine source: "https://github.com/kondrak/vkQuake2" upstream: "https://github.com/id-Software/Quake-2" -profiled_date: "2026-10-17" -source_commit: "5bf9c012024884234df0f63c615daec0c740def7" +profiled_date: "2026-10-23" +source_commit: "6763f207229f97cffabb6fc2da72017a794b139b" core_version: "1.5.10" display_name: "Quake II (vkQuake2)" cores: ["vkquake2"] From e275d3a9353b0c4877100534b47e04f0850af69e Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:38:04 +0200 Subject: [PATCH 09/49] chore: advance j2me-loader to c1aff86 libjavam3g.so rebuilt from changed m3g render context sources, hashed from the 1.8.2-dev-1973 build. The config screen now copies picked shaders and sound banks into their directories. --- emulators/j2me-loader.yml | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/emulators/j2me-loader.yml b/emulators/j2me-loader.yml index 58c2be09..0484364b 100644 --- a/emulators/j2me-loader.yml +++ b/emulators/j2me-loader.yml @@ -4,8 +4,8 @@ core_classification: community_fork source: "https://github.com/nikita36078/J2ME-Loader" upstream: "https://github.com/nikita36078/J2ME-Loader" author: "Nikita Shakarun" -profiled_date: "2026-10-20" -source_commit: "752b93afa80f657fa515f560bebf7904d219f73a" +profiled_date: "2026-10-23" +source_commit: "c1aff868a674ea0c9fd9d565dfb4819987ee447f" core_version: "1.8.2" display_name: "Mobile - J2ME (J2ME Loader)" cores: @@ -32,10 +32,13 @@ notes: | fs/e, all written by the app, plus shaders/ and soundbanks/, created empty when the directory is initialized and read from. fs/c and fs/e are the JSR-75 drives, data/ is RMS storage, converted/ holds converted.dex and res.jar per - MIDlet. - ref: app/src/main/java/ru/playsoftware/j2meloader/config/Config.java:47-61, - app/src/main/java/ru/playsoftware/j2meloader/config/Config.java:155-161, - app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:166-181 + MIDlet. The config screen has a file list for shaders/ and soundbanks/ that + copies the files the user picks into that directory under their display name. + ref: app/src/main/java/ru/playsoftware/j2meloader/config/ConfigFilesActivity.java:76-83, + app/src/main/java/ru/playsoftware/j2meloader/config/ConfigFilesActivity.java:129-141, + app/src/main/java/ru/playsoftware/j2meloader/config/Config.java:47-61, + app/src/main/java/ru/playsoftware/j2meloader/config/Config.java:159-165, + app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:213-228 The shader and property assets are read through ContextHolder.getAssetAsString, which rethrows an IOException as RuntimeException instead of degrading, so an @@ -51,7 +54,7 @@ notes: | app/src/main/java/ru/woesss/j2me/mmapi/synth/SynthPluginFactory.java:36-54 The package carries every native library for arm64-v8a, armeabi-v7a, x86 and - x86_64. The hashes below are those of the x86_64 build, version 1.8.2-dev-1964, + x86_64. The hashes below are those of the x86_64 build, version 1.8.2-dev-1973, the continuous release built from source_commit. files: @@ -77,7 +80,7 @@ files: category: game_data description: "Default microedition system properties" note: "Read from assets/defaults when a profile is created and again when the config screen or updateSystemProperties fills the field. Each line becomes a System.setProperty pair at MIDlet startup, carrying microedition.configuration, microedition.platform, the JSR version strings and the vendor identity values." - source_ref: "app/src/main/java/ru/playsoftware/j2meloader/config/ProfileModel.java:201, app/src/main/java/ru/playsoftware/j2meloader/config/ProfilesManager.java:185, app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:636, app/src/main/java/javax/microedition/shell/MicroLoader.java:249-256" + source_ref: "app/src/main/java/ru/playsoftware/j2meloader/config/ProfileModel.java:201, app/src/main/java/ru/playsoftware/j2meloader/config/ProfilesManager.java:185, app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:680, app/src/main/java/javax/microedition/shell/MicroLoader.java:249-256" - name: simple.vsh system: j2me @@ -191,9 +194,9 @@ files: system: j2me required: true bundled: true - size: 416488 - sha1: "74171083847c3836e1ffb9470d3b7e3e7dafe242" - md5: "0e273cd2a17253fa9f0f475f95283777" + size: 417496 + sha1: "a9f584627b3c000c936749f6c88db5187e1cdd4f" + md5: "c19559b2fcf1ab091d7455b4c54fbafd" category: game_data description: "JSR-184 M3G engine" note: "Named by System.loadLibrary(\"javam3g\") outside any catch, the first time the toolkit reports the UI thread available. Built by ndkBuild from the m3g sources against GLES 1.1." @@ -279,7 +282,7 @@ files: category: game_data description: "DLS sound bank for MIDI playback" note: "The config screen lists every regular file in the sound banks directory with no extension filter, and the selected name is kept as a path when the file exists. EAS_LoadDLSCollection reads it with the header search flag off. A rejected file throws and the plugin is skipped." - source_ref: "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:277-301, app/src/main/java/javax/microedition/shell/MicroLoader.java:285-288, app/src/main/cpp/mmapi_eas/eas_player.cpp:112-126, app/src/main/cpp/mmapi_eas/eas_player_jni.cpp:16-28" + source_ref: "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:315-339, app/src/main/java/javax/microedition/shell/MicroLoader.java:285-288, app/src/main/cpp/mmapi_eas/eas_player.cpp:112-126, app/src/main/cpp/mmapi_eas/eas_player_jni.cpp:16-28" - name: ".sf2" path: "soundbanks/.sf2" @@ -289,7 +292,7 @@ files: category: game_data description: "SoundFont sound bank for MIDI playback" note: "Same selection path as the DLS bank. tsf_load_filename parses it, and a null result throws IllegalArgumentException so the plugin is skipped." - source_ref: "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:277-301, app/src/main/cpp/mmapi_tsf/tsf_player.cpp:87-94, app/src/main/cpp/mmapi_tsf/tsf_player_jni.cpp:15-27" + source_ref: "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:315-339, app/src/main/cpp/mmapi_tsf/tsf_player.cpp:87-94, app/src/main/cpp/mmapi_tsf/tsf_player_jni.cpp:15-27" - name: ".ini" path: "shaders/.ini" @@ -299,7 +302,7 @@ files: category: game_data description: "Shader descriptor read from the emulator directory" note: "The config screen creates the shaders directory, lists every file ending in .ini and parses it as sections opened by a bracketed name, keeping the entries that name both a Vertex and a Fragment file. Name, Author, OutputResolution, Upscaling and four SettingName/SettingDefaultValue/SettingMinValue/SettingMaxValue/SettingStep groups are also read, which is the PPSSPP post-processing descriptor format." - source_ref: "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:368-399, app/src/main/java/ru/playsoftware/j2meloader/config/ShaderInfo.java:101-206, app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:156-164" + source_ref: "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:406-437, app/src/main/java/ru/playsoftware/j2meloader/config/ShaderInfo.java:101-206, app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:203-211" - name: ".vsh" path: "shaders/.vsh" @@ -309,7 +312,7 @@ files: category: game_data description: "Vertex shader named by a descriptor" note: "Read whole from the shaders directory when the selected filter names it, then compiled in place of the built-in blitter. An unreadable file yields an empty string, the program fails to build and the bundled default is used after a toast." - source_ref: "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:45-57, app/src/main/java/javax/microedition/shell/MicroLoader.java:272-276, app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:156-164" + source_ref: "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:45-57, app/src/main/java/javax/microedition/shell/MicroLoader.java:272-276, app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:203-211" - name: ".fsh" path: "shaders/.fsh" From 661bb8eb229fe5368aea953e5a8e7902491aa0c5 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:40:10 +0200 Subject: [PATCH 10/49] chore: advance vvvvvv to 40e1ec3 SDL3 port. data.zip and gamecontrollerdb.txt are read as before, the missing data.zip dialog gained a download page button. --- emulators/vvvvvv.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/emulators/vvvvvv.yml b/emulators/vvvvvv.yml index fa767e0d..4ed530e3 100644 --- a/emulators/vvvvvv.yml +++ b/emulators/vvvvvv.yml @@ -3,8 +3,8 @@ type: standalone core_classification: game_engine source: "https://github.com/TerryCavanagh/VVVVVV" upstream: "https://github.com/TerryCavanagh/VVVVVV" -profiled_date: "2026-10-17" -source_commit: "a0bd2f3da42da2f5249e2a4892e2b48b51b2fd86" +profiled_date: "2026-10-23" +source_commit: "40e1ec3bbf2a990a5c600564fe312c2121178a50" core_version: "v2.5" display_name: "VVVVVV" cores: @@ -21,16 +21,16 @@ notes: | FILESYSTEM_init() mounts data.zip from the -assets argument, or from the binary's directory when no argument is given, and exits with a "data.zip missing!" message box when the mount fails - (ref: desktop_version/src/FileSystemUtils.cpp:318-346). Recalbox + (ref: desktop_version/src/FileSystemUtils.cpp:319-367). Recalbox passes -assets /recalbox/share/roms/ports/vvvvvv/data.zip. The game accepts the data.zip of the retail release or of the free Make and - Play Edition (ref: desktop_version/src/FileSystemUtils.cpp:332-335). + Play Edition (ref: desktop_version/src/FileSystemUtils.cpp:333-336). The lang/ and fonts/ directories are mounted ahead of data.zip from - the binary's directory (ref: desktop_version/src/FileSystemUtils.cpp:81-177, - 312-315). Recalbox installs them from the source tree beside the + the binary's directory (ref: desktop_version/src/FileSystemUtils.cpp:82-178, + 313-316). Recalbox installs them from the source tree beside the binary. gamecontrollerdb.txt is read from the binary's directory when - present (ref: desktop_version/src/FileSystemUtils.cpp:349-353). + present (ref: desktop_version/src/FileSystemUtils.cpp:370-374). files: - name: "data.zip" @@ -40,12 +40,12 @@ files: required: true unsourceable: "game data the collection does not hold, and a same-named archive of another game must not stand in" description: "VVVVVV game assets (graphics, music, sounds)" - source_ref: "desktop_version/src/FileSystemUtils.cpp:318-346, desktop_version/src/main.cpp:433-438" + source_ref: "desktop_version/src/FileSystemUtils.cpp:319-367, desktop_version/src/main.cpp:435-440" note: "Path given by -assets, otherwise data.zip next to the binary. Retail and Make and Play Edition archives are both accepted, and the code checks neither size nor hash." - name: "gamecontrollerdb.txt" system: "vvvvvv" path: "gamecontrollerdb.txt" required: false description: "SDL game controller mappings" - source_ref: "desktop_version/src/FileSystemUtils.cpp:349-353" + source_ref: "desktop_version/src/FileSystemUtils.cpp:370-374" note: "Read from the binary's directory. A missing file is logged and ignored." From df6ee485de072667455f64fba326e73b2d6e5aea Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:42:17 +0200 Subject: [PATCH 11/49] chore: advance tr2x to 3d39911 Gameflow lines moved with the PS1 blend injections. The music backend now reads multi-name catalog rows, track names and extensions unchanged. --- emulators/tr2x.yml | 206 ++++++++++++++++++++++----------------------- 1 file changed, 103 insertions(+), 103 deletions(-) diff --git a/emulators/tr2x.yml b/emulators/tr2x.yml index 76c688f5..1b78796f 100644 --- a/emulators/tr2x.yml +++ b/emulators/tr2x.yml @@ -4,9 +4,9 @@ type: standalone core_classification: game_engine source: "https://github.com/LostArtefacts/TRX" upstream: "https://github.com/LostArtefacts/TRX" -source_commit: "c43c1cc875277324dff44a9e57e4fdd58fd3fb4c" -upstream_commit: "c43c1cc875277324dff44a9e57e4fdd58fd3fb4c" -profiled_date: "2026-10-04" +source_commit: "3d39911a1b839c753b6efad236db67d9fb2b273e" +upstream_commit: "3d39911a1b839c753b6efad236db67d9fb2b273e" +profiled_date: "2026-10-23" cores: [] systems: - tomb-raider-2 @@ -28,7 +28,7 @@ notes: | files. main.sfx is TR2's sample bank. The gameflow sets sfx_path to it - (data/trx/ship/games/tr2/gameflow.json5:33) and the level pipeline + (data/trx/ship/games/tr2/gameflow.json5:35) and the level pipeline reads it per level (src/trx/game/level/pipeline.c:179). FMV extension probing (src/trx/game/paths.c:76-79): @@ -36,7 +36,7 @@ notes: | The retail Core/Eidos cutscenes are .rpl. The gameflow still names them .AVI, resolution picks whichever extension exists. - Music backend (src/trx/game/music/backend_files.c:25-49): + Music backend (src/trx/game/music/backend_files.c:33-35, 108-134): extensions .flac .ogg .mp3 .wav .wma file name trackNN. (two-digit) or N. Retail TR2 CD rips yield 2.mp3 through 61.mp3 (bare-number form, @@ -49,7 +49,7 @@ files: unsourceable: "retail data the collection does not hold, and a same-named file of another game must not stand in" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:33" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:35" note: "Shared sample bank, loaded for every level." # Levels @@ -65,161 +65,161 @@ files: path: "games/tr2/levels/assault.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:54" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:57" note: "Lara's Home / assault course." - name: "wall.tr2" path: "games/tr2/levels/wall.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:84" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:89" note: "The Great Wall" - name: "boat.tr2" path: "games/tr2/levels/boat.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:119" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:125" note: "Venice" - name: "venice.tr2" path: "games/tr2/levels/venice.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:144" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:151" note: "Bartoli's Hideout" - name: "opera.tr2" path: "games/tr2/levels/opera.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:171" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:179" note: "Opera House" - name: "rig.tr2" path: "games/tr2/levels/rig.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:202" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:211" note: "Offshore Rig" - name: "platform.tr2" path: "games/tr2/levels/platform.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:231" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:241" note: "Diving Area" - name: "unwater.tr2" path: "games/tr2/levels/unwater.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:260" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:271" note: "40 Fathoms" - name: "keel.tr2" path: "games/tr2/levels/keel.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:289" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:301" note: "Wreck of the Maria Doria" - name: "living.tr2" path: "games/tr2/levels/living.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:321" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:334" note: "Living Quarters" - name: "deck.tr2" path: "games/tr2/levels/deck.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:351" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:365" note: "The Deck" - name: "skidoo.tr2" path: "games/tr2/levels/skidoo.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:383" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:398" note: "Tibetan Foothills" - name: "monastry.tr2" path: "games/tr2/levels/monastry.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:411" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:427" note: "Barkhang Monastery" - name: "catacomb.tr2" path: "games/tr2/levels/catacomb.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:440" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:457" note: "Catacombs of the Talion" - name: "icecave.tr2" path: "games/tr2/levels/icecave.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:468" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:486" note: "Ice Palace" - name: "emprtomb.tr2" path: "games/tr2/levels/emprtomb.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:496" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:515" note: "Temple of Xian" - name: "floating.tr2" path: "games/tr2/levels/floating.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:526" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:546" note: "Floating Islands" - name: "xian.tr2" path: "games/tr2/levels/xian.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:552" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:573" note: "The Dragon's Lair" - name: "house.tr2" path: "games/tr2/levels/house.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:578" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:600" note: "Home Sweet Home" - name: "cut1.tr2" path: "games/tr2/levels/cut1.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:691" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:714" note: "Cutscene level 1" - name: "cut2.tr2" path: "games/tr2/levels/cut2.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:706" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:729" note: "Cutscene level 2" - name: "cut3.tr2" path: "games/tr2/levels/cut3.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:721" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:744" note: "Cutscene level 3" - name: "cut4.tr2" path: "games/tr2/levels/cut4.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:737" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:761" note: "Cutscene level 4" # FMV cutscenes @@ -231,7 +231,7 @@ files: path: "games/tr2/fmv/logo.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:756" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:781" note: "Eidos legal screen." - name: "ANCIENT.AVI" @@ -239,7 +239,7 @@ files: path: "games/tr2/fmv/ancient.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:757" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:782" note: "Intro cutscene." - name: "MODERN.AVI" @@ -247,42 +247,42 @@ files: path: "games/tr2/fmv/modern.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:758" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:783" - name: "LANDING.AVI" aliases: [landing.rpl] path: "games/tr2/fmv/landing.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:759" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:784" - name: "MS.AVI" aliases: [ms.rpl] path: "games/tr2/fmv/ms.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:760" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:785" - name: "CRASH.AVI" aliases: [crash.rpl] path: "games/tr2/fmv/crash.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:761" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:786" - name: "JEEP.AVI" aliases: [jeep.rpl] path: "games/tr2/fmv/jeep.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:762" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:787" - name: "END.AVI" aliases: [end.rpl] path: "games/tr2/fmv/end.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:763" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:788" # Music tracks (retail CD audio, ripped as N.). # Enumerated by the ship tree in docs/trx/INSTALLING.md (TR2 uses the @@ -291,331 +291,331 @@ files: path: "games/tr2/music/2.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "3.mp3" path: "games/tr2/music/3.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "4.mp3" path: "games/tr2/music/4.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "5.mp3" path: "games/tr2/music/5.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "6.mp3" path: "games/tr2/music/6.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "7.mp3" path: "games/tr2/music/7.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "8.mp3" path: "games/tr2/music/8.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "9.mp3" path: "games/tr2/music/9.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "10.mp3" path: "games/tr2/music/10.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "11.mp3" path: "games/tr2/music/11.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "12.mp3" path: "games/tr2/music/12.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "13.mp3" path: "games/tr2/music/13.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "14.mp3" path: "games/tr2/music/14.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "15.mp3" path: "games/tr2/music/15.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "16.mp3" path: "games/tr2/music/16.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "17.mp3" path: "games/tr2/music/17.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "18.mp3" path: "games/tr2/music/18.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "19.mp3" path: "games/tr2/music/19.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "20.mp3" path: "games/tr2/music/20.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "21.mp3" path: "games/tr2/music/21.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "22.mp3" path: "games/tr2/music/22.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "23.mp3" path: "games/tr2/music/23.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "24.mp3" path: "games/tr2/music/24.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "25.mp3" path: "games/tr2/music/25.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "26.mp3" path: "games/tr2/music/26.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "27.mp3" path: "games/tr2/music/27.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "28.mp3" path: "games/tr2/music/28.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "29.mp3" path: "games/tr2/music/29.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "30.mp3" path: "games/tr2/music/30.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "31.mp3" path: "games/tr2/music/31.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "32.mp3" path: "games/tr2/music/32.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "33.mp3" path: "games/tr2/music/33.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "34.mp3" path: "games/tr2/music/34.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "35.mp3" path: "games/tr2/music/35.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "36.mp3" path: "games/tr2/music/36.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "37.mp3" path: "games/tr2/music/37.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "38.mp3" path: "games/tr2/music/38.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "39.mp3" path: "games/tr2/music/39.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "40.mp3" path: "games/tr2/music/40.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "41.mp3" path: "games/tr2/music/41.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "42.mp3" path: "games/tr2/music/42.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "43.mp3" path: "games/tr2/music/43.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "44.mp3" path: "games/tr2/music/44.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "45.mp3" path: "games/tr2/music/45.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "46.mp3" path: "games/tr2/music/46.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "47.mp3" path: "games/tr2/music/47.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "48.mp3" path: "games/tr2/music/48.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "49.mp3" path: "games/tr2/music/49.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "50.mp3" path: "games/tr2/music/50.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "51.mp3" path: "games/tr2/music/51.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "52.mp3" path: "games/tr2/music/52.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "53.mp3" path: "games/tr2/music/53.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "54.mp3" path: "games/tr2/music/54.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "55.mp3" path: "games/tr2/music/55.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "56.mp3" path: "games/tr2/music/56.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "57.mp3" path: "games/tr2/music/57.mp3" @@ -625,32 +625,32 @@ files: sha1: "0873bc661731f6daa8c8a76af4259228b1cbf8ef" md5: "423c7e39256ef8fd82193fefacdb14aa" category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" note: "The one music track the TRX 1.11.1 Windows and Linux zips ship." - name: "58.mp3" path: "games/tr2/music/58.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "59.mp3" path: "games/tr2/music/59.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "60.mp3" path: "games/tr2/music/60.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" - name: "61.mp3" path: "games/tr2/music/61.mp3" required: false category: game_data - source_ref: "src/trx/game/music/backend_files.c:48" + source_ref: "src/trx/game/music/backend_files.c:128" # The Golden Mask expansion # Known game tr2-gm, extends tr2 (src/trx/game/shell/mod.c:37-38). @@ -671,7 +671,7 @@ files: sha1: "9de9423b6f12875b8d02dd783d5c1547f15e36fc" md5: "b9045310d16b80638970978a9ce8489e" category: game_data - source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:34, src/trx/game/game_flow/reader.c:198-219, src/trx/game/paths.c:203-212, tools/download_assets:71, tools/installer/TRX_Installer/InstallMappings.cs:35-40" + source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:35, src/trx/game/game_flow/reader.c:198-219, src/trx/game/paths.c:203-212, tools/download_assets:71, tools/installer/TRX_Installer/InstallMappings.cs:35-40" note: "Sample bank of the expansion. main_gm.sfx is tried first, each name in the expansion directory then in games/tr2." - name: "title.tr2" @@ -694,7 +694,7 @@ files: sha1: "8d8109c1afbb2b443c1c1f57add4676f17b5dc84" md5: "04ad2f33e48081a6b27a7f0ebf90968d" category: game_data - source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:56" + source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:58" note: "The Cold War" - name: "level2.tr2" @@ -705,7 +705,7 @@ files: sha1: "6c9417d3b03cc2fd9fac62cea0910d9ef107ee1b" md5: "d9b53b88dd70eec1e4b31182f3286bf5" category: game_data - source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:88" + source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:90" note: "Fool's Gold" - name: "level3.tr2" @@ -716,7 +716,7 @@ files: sha1: "e92f045520d6e0aaec2c42dd2c28d34a0677df70" md5: "ca4294e3bd8835ebf06e114b479a22c2" category: game_data - source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:113" + source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:115" note: "Furnace of the Gods" - name: "level4.tr2" @@ -727,7 +727,7 @@ files: sha1: "83ffcd559e656186bc807e1040485f72956dbc00" md5: "63ff8be5c7abf37d7065456afeda029f" category: game_data - source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:138" + source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:140" note: "Kingdom" - name: "level5.tr2" @@ -738,5 +738,5 @@ files: sha1: "4508d23e8475ef6afd7a1756763dd606f23c15a9" md5: "88c8124b6d152b9f3fe1c4eeec4428a5" category: game_data - source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:175" + source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:177" note: "Nightmare in Vegas" From 5990fee29dfe4bccd27d749444ef0e994fd4d698 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:43:18 +0200 Subject: [PATCH 12/49] chore: advance vita3k to 5844e21 Firmware install and font directory code unchanged apart from stream types. The font directory moved to renderer.cpp:161-167. --- emulators/vita3k.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/emulators/vita3k.yml b/emulators/vita3k.yml index 9053ba3c..71857c80 100644 --- a/emulators/vita3k.yml +++ b/emulators/vita3k.yml @@ -2,8 +2,8 @@ emulator: Vita3K type: standalone source: "https://github.com/Vita3K/Vita3K" upstream: "https://github.com/Vita3K/Vita3K" -profiled_date: "2026-03-29" -source_commit: "df2880875f397ff8c6e76513ed5d7d0a947af9a0" +profiled_date: "2026-10-23" +source_commit: "5844e21fb6d7259a31ba1f13b98ed1a648170052" core_version: "0.2.1" display_name: "Vita3K (PS Vita)" cores: @@ -42,7 +42,7 @@ files: Supplementary firmware font package. Populates the sa0 partition with system fonts (PVF format), which the renderer registers as the firmware font directory when the partition holds content. - source_ref: "vita3k/packages/src/pup.cpp:296-297, vita3k/app/src/app.cpp:177, vita3k/renderer/src/renderer.cpp:121-127" + source_ref: "vita3k/packages/src/pup.cpp:296-297, vita3k/app/src/app.cpp:177, vita3k/renderer/src/renderer.cpp:161-167" notes: | Standalone PS Vita emulator. No libretro core. From 11e98376147565e10f398ae77d3ec73cdd1079e1 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:29:34 +0200 Subject: [PATCH 13/49] fix: follow cap32 dropping the 464DDI model update_variables() no longer maps 464DDI; a 464 with disc content maps AMSDOS in slot 7 (cap32/cap32.c:1088-1092). VERSION_STRING at the pin is 4.5.4. --- emulators/cap32.yml | 48 ++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/emulators/cap32.yml b/emulators/cap32.yml index a8cc32cb..ef710fdf 100644 --- a/emulators/cap32.yml +++ b/emulators/cap32.yml @@ -3,10 +3,10 @@ type: standalone + libretro core_classification: community_fork source: "https://github.com/libretro/libretro-cap32" upstream: "https://github.com/ColinPitrat/caprice32" -profiled_date: "2026-10-06" -source_commit: "c23855092f5f49981a5096f4d39033ff573ebca7" -upstream_commit: "6c12c4c92360065cdc229ac9ada7551f941436b8" -core_version: "v4.2.0" +profiled_date: "2026-10-23" +source_commit: "8e61dd69d948cea16c3bad734f7b9d0c2a018cc8" +upstream_commit: "8c778bf072a06fb7c23b9cccd179041db7f79a52" +core_version: "v4.5.4" display_name: "Amstrad - CPC/GX4000 (Caprice32)" cores: - cap32 @@ -29,26 +29,27 @@ notes: | - cap32/rom/6128p.h: OS_6128P[65580] - CPC+ system cartridge - cap32/rom/cpm.h: CPM, CPM_SYS - CP/M boot memory dumps - ROM selection in emulator_select_ROM() (cap32/cap32.c:1082-1114): - - CPC 464: OS464_BASIC10 - - CPC 464DDI: OS464_BASIC10 + AMSDOS in slot 7 + ROM selection in emulator_select_ROM() (cap32/cap32.c:1081-1111): + - CPC 464: OS464_BASIC10, AMSDOS in slot 7 when the content is a disc - CPC 664: OS664_BASIC664 + AMSDOS in slot 7 - CPC 6128: OS_BASIC11 + AMSDOS in slot 7 - CPC+: OS_6128P loaded as system cartridge via cpr_load() - Core option "cap32_model" accepts "464DDI" (libretro/libretro-core.c:501, - libretro/libretro-core.c:1035). A 464 loading disc content is switched to - 464DDI (libretro/libretro-core.c:1364-1368). + Core option "cap32_model" lists "464DDI" (libretro/libretro-core.c:501), + but update_variables() matches only 464, 664, 6128 and 6128+ and leaves any + other value on the 6128 default (libretro/libretro-core.c:1035-1039). A 464 + with disc content (slot SLOT_DSK, libretro/libretro-core.c:1865-1866) gets + AMSDOS in slot 7 (cap32/cap32.c:1088-1092). The array chROMFile names "cpc464.rom", "cpc664.rom", "cpc6128.rom" (cap32/cap32.c:353-357) and loadConfiguration() parses the rom_path, - slotNN and rom_mf2 keys of ./cap32.cfg (cap32/cap32.c:1846-1863), but no + slotNN and rom_mf2 keys of ./cap32.cfg (cap32/cap32.c:1842-1859), but no code opens these files. The system directory is resolved in - libretro/libretro-core.c:1617-1636 under a "TODO: future use to load + libretro/libretro-core.c:1606-1625 under a "TODO: future use to load custom bios" comment and no ROM is read from it. Keyboard layout patches are applied to the ROM in memory for French - and Spanish layouts via rom_mods.h (cap32/cap32.c:1116-1141). + and Spanish layouts via rom_mods.h (cap32/cap32.c:1113-1137). CP/M support assembles a 128KB snapshot from the CPM and CPM_SYS arrays and loads it via snapshot_load_mem() in cap32/slots.c:71-90. @@ -65,7 +66,7 @@ files: md5: a993f85b88ac4350cf4d41554e87fe4f sha1: 56d39c463da60968d93e58b4ba0e675829412a20 note: "CPC 464 OS + BASIC 1.0, read when model=0" - source_ref: "upstream src/cap32.cpp:212-217, upstream src/cap32.cpp:1013-1027, upstream rom/cpc464.rom" + source_ref: "upstream src/cap32.cpp:212-217, upstream src/cap32.cpp:1038-1052, upstream rom/cpc464.rom" - name: cpc664.rom system: amstrad-cpc required: false @@ -75,7 +76,7 @@ files: md5: 5a384a2310f472c7857888371c00ed66 sha1: 073a7665527b5bd8a148747a3947dbd3328682c8 note: "CPC 664 OS + BASIC 1.1, read when model=1" - source_ref: "upstream src/cap32.cpp:212-217, upstream src/cap32.cpp:1013-1027, upstream rom/cpc664.rom" + source_ref: "upstream src/cap32.cpp:212-217, upstream src/cap32.cpp:1038-1052, upstream rom/cpc664.rom" - name: cpc6128.rom system: amstrad-cpc required: true @@ -85,7 +86,7 @@ files: md5: b96280dc6c95a48857b4b8eb931533ae sha1: 5977adbad3f7c1e0e082cd02fe76a700d9860c30 note: "CPC 6128 OS + BASIC 1.1, default model=2. A missing file returns ERR_CPC_ROM_MISSING" - source_ref: "upstream src/cap32.cpp:212-217, upstream src/cap32.cpp:1013-1027, upstream src/cap32.cpp:1799, upstream rom/cpc6128.rom" + source_ref: "upstream src/cap32.cpp:212-217, upstream src/cap32.cpp:1038-1052, upstream src/cap32.cpp:1848, upstream rom/cpc6128.rom" - name: amsdos.rom system: amstrad-cpc required: false @@ -95,7 +96,7 @@ files: md5: 25629dfe870d097469c217b95fdc1c95 sha1: 39102c8e9cb55fcc0b9b62098780ed4a3cb6a4bb note: "AMSDOS disc ROM, shipped cap32.cfg sets slot07=DEFAULT, skipped on the 464. A missing file clears the slot" - source_ref: "upstream src/cap32.cpp:1170-1178, upstream src/cap32.cpp:1245-1249, upstream cap32.cfg:205-206, 215, upstream rom/amsdos.rom" + source_ref: "upstream src/cap32.cpp:1202-1210, upstream src/cap32.cpp:1277-1281, upstream cap32.cfg:205-206, 215, upstream rom/amsdos.rom" - name: system.cpr system: amstrad-cpc required: false @@ -105,7 +106,7 @@ files: md5: 39b565e648172980aa552293e667070f sha1: 405e341437fab8db477606238af0c20eca2e39ee note: "CPC+ system cartridge, default cartridge path" - source_ref: "upstream src/cap32.cpp:1904, upstream src/cap32.cpp:1150, upstream rom/system.cpr" + source_ref: "upstream src/cap32.cpp:1953, upstream src/cap32.cpp:1182, upstream rom/system.cpr" - name: MF2.rom system: amstrad-cpc required: false @@ -115,16 +116,16 @@ files: md5: 4c9f014e91d407cc6509fad0095ab909 sha1: 1431ec628d38f000715545dd2186b684c5fe5a6f note: "Multiface 2 ROM, read when mf2=1. Checks the \"MULTIFACE 2\" signature at 0x0d32" - source_ref: "upstream src/cap32.cpp:1252-1278, upstream rom/MF2.rom" + source_ref: "upstream src/cap32.cpp:1284-1310, upstream rom/MF2.rom" platform_details: bios_mapping: - source_ref: "source cap32/cap32.c:1082-1114, source cap32/cap32.c:345-349" + source_ref: "source cap32/cap32.c:1081-1111, source cap32/cap32.c:345-349" note: | All ROMs are embedded. emulator_select_ROM() copies the ROM array for CPC.model into pbROM. No filesystem lookup occurs in the libretro port. retro_system_bios_directory is set in - libretro/libretro-core.c:1617-1636 and no ROM is read from it. + libretro/libretro-core.c:1606-1625 and no ROM is read from it. embedded_roms: source_ref: "source cap32/rom/464.h, source cap32/rom/664.h, source cap32/rom/6128.h, source cap32/rom/amsdos.h, source cap32/rom/6128p.h, source cap32/rom/cpm.h" @@ -138,10 +139,9 @@ platform_details: CPM, CPM_SYS - CP/M memory dumps assembled into a 128KB snapshot model_rom_map: - source_ref: "source cap32/cap32.c:1082-1114" + source_ref: "source cap32/cap32.c:1081-1111" note: | - CPC 464: OS464_BASIC10 only - CPC 464DDI: OS464_BASIC10 + AMSDOS in ROM slot 7 + CPC 464: OS464_BASIC10, AMSDOS in ROM slot 7 when the content is a disc CPC 664: OS664_BASIC664 + AMSDOS in ROM slot 7 CPC 6128: OS_BASIC11 + AMSDOS in ROM slot 7 CPC+: 6128P system cartridge (or user-provided .cpr file) From 5a705c4a32f12cdf81647f2b2ddfb8755c87359f Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:31:25 +0200 Subject: [PATCH 14/49] docs: move geartowns to 0.0.10 Same five firmware sets and CRCs. On Auto a 1.44 MB floppy now selects the HG, the first model with a three-mode drive (src/geartowns_core.cpp:1968-1976). --- emulators/geartowns.yml | 52 ++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/emulators/geartowns.yml b/emulators/geartowns.yml index b54b12c9..deb60ddd 100644 --- a/emulators/geartowns.yml +++ b/emulators/geartowns.yml @@ -3,9 +3,9 @@ type: libretro core_classification: official_port source: "https://github.com/drhelius/Geartowns" upstream: "https://github.com/drhelius/Geartowns" -profiled_date: "2026-10-17" -source_commit: "25d2025be28e9fcc319f597a516f21e0778f770b" -core_version: "0.0.6-8-g25d2025" +profiled_date: "2026-10-23" +source_commit: "d157715112589aeb7e88319b2f2b4ac4e2cafc5f" +core_version: "0.0.10" display_name: "Fujitsu - FM Towns (Geartowns)" cores: - "geartowns" @@ -16,56 +16,60 @@ notes: | FM Towns emulator by Ignacio Sanchez (drhelius). The same tree builds the desktop application and the libretro core (platforms/libretro). The core emulates the Model 1/2, 1F/2F, 10F/20F, II CX, UX, UG, HG and the Marty - (src/system/machine_profiles.h:61-75, `emulated` field). The version string + (src/system/machine_profiles.h:108-122, `emulated` field). The version string is `git describe` at build time (platforms/libretro/Makefile:369-371). retro_load_game() fails when load_bios() finds no firmware - (platforms/libretro/libretro.cpp:704-708). load_bios() searches + (platforms/libretro/libretro.cpp:736-740). load_bios() searches system/geartowns first, then the system directory itself, each time accepting first only a set made for the selected model and then any set - (platforms/libretro/libretro.cpp:798-825). Firmware::FindSources() takes + (platforms/libretro/libretro.cpp:842-869). Firmware::FindSources() takes as candidates the folder itself, every direct subfolder and every .zip in - it (src/media/firmware.cpp:286-346). Folder and zip names are free. A + it (src/media/firmware.cpp:288-348). Folder and zip names are free. A candidate counts only when the System, OS, Font and Dictionary ROMs are all present at the right size, and the CRC32 of its System ROM names the set - (src/media/firmware.cpp:375-414, src/media/firmware.h:114-123). + (src/media/firmware.cpp:377-416, src/media/firmware.h:115-124). - Six sets are known (src/media/firmware.h:114-123): fmtowns (Model 1/2), + Six sets are known (src/media/firmware.h:115-124): fmtowns (Model 1/2), freetowns (Free FM Towns Project replacement ROMs, used by the Model 1/2), fmtownsux (UX, also used by 1F/2F, 10F/20F, CX and UG), fmtmarty (Marty), fmtownshr and fmtownsftv (both used by the HG, HR preferred). On Auto the model comes from the game database and falls back to the Model 1/2 or to the first model in release order that has a set - (src/geartowns_core.cpp:1624-1649, src/geartowns_core.cpp:1691-1696). A set - made for another model still loads in the second pass, with a warning - (platforms/libretro/libretro.cpp:827-860). + (src/geartowns_core.cpp:1958-1991, src/geartowns_core.cpp:2050-2055). A + 1.44 MB floppy (2HD at 300 rpm) inserted on Auto replaces a model without a + three-mode drive by the first one in release order that has it, the HG + (src/geartowns_core.cpp:768-771, src/geartowns_core.cpp:1968-1976), which + uses the fmtownshr or fmtownsftv set. A set made for another model still + loads in the second pass, with a warning + (platforms/libretro/libretro.cpp:871-904). File names are matched without case, inside a zip only at the archive root - (src/media/firmware.cpp:614-663). Accepted names, one group per component, + (src/media/firmware.cpp:617-666). Accepted names, one group per component, are (FMT_SYS.ROM, FMT_SYS_A.ROM, FMTHR_SYS.ROM), (FMT_DOS.ROM, FMT_DOS_A.ROM), (FMT_FNT.ROM), (FMT_DIC.ROM), (FMT_F20.ROM, FMT_F20_A.ROM), (MYTOWNS.ROM, MYTOWNSUX.ROM, MYTOWNSM2.ROM, MYTOWNSFTV.ROM, MYTOWNSHR.ROM) and (MAR_EX0.ROM to MAR_EX3.ROM) (src/media/firmware.cpp:28-42). Without separate files the Marty components are cut from MROM.M36 and MROM.M37, 2 MiB each - (src/media/firmware.cpp:497-508): OS at 0 and the first three extension + (src/media/firmware.cpp:500-511): OS at 0 and the first three extension parts in M36, and the fourth extension part, 20-dot font at 0x80000, dictionary at 0x100000, font at 0x180000 and System ROM at 0x1C0000 in M37. Each component must have its exact size or it is rejected - (src/media/firmware.cpp:530-612, src/common/defines.h:47-54): System + (src/media/firmware.cpp:533-615, src/common/defines.h:48-55): System 256 KiB, OS 512 KiB, Font 256 KiB, Dictionary 512 KiB, 20-dot Font 512 KiB, Serial 32 bytes, Extension 2 MiB (four 512 KiB parts). System, OS, Font and Dictionary are required. A missing 20-dot Font or Extension is replaced by - 0xFF, a missing Serial ROM is generated (src/media/firmware.cpp:73-163, - src/media/firmware.cpp:258-261). The CRC32 of every component is looked up - in game_db.h (src/media/firmware.cpp:165-182, src/media/game_db.h:303-335), + 0xFF, a missing Serial ROM is generated (src/media/firmware.cpp:76-165, + src/media/firmware.cpp:260-263). The CRC32 of every component is looked up + in game_db.h (src/media/firmware.cpp:167-184, src/media/game_db.h:337-369), and an unknown CRC only produces a warning. The Free FM Towns set is known by System 65DC3B1F, OS 43C18E92, Font 736D9CB1 and a blank Dictionary 504BF849. The Marty slices are known by System 937311F6, OS 2BC2AF96, Extension E1A9FA72 and 20-dot Font 75660AAC. The CMOS is written by the core next to the saves - (platforms/libretro/libretro.cpp:2753-2767). It is state, not a file to + (platforms/libretro/libretro.cpp:3001-3015). It is state, not a file to obtain. files: @@ -80,7 +84,7 @@ files: - { name: "fmt_dos.rom", size: 524288, crc32: "112872ee" } - { name: "fmt_fnt.rom", size: 262144, crc32: "955c6b75" } - { name: "fmt_dic.rom", size: 524288, crc32: "b314c659" } - source_ref: "platforms/libretro/libretro.cpp:704-708, platforms/libretro/libretro.cpp:807-825, src/media/firmware.h:116, src/media/firmware.cpp:28-33, src/media/firmware.cpp:286-346, src/media/game_db.h:303-307" + source_ref: "platforms/libretro/libretro.cpp:736-740, platforms/libretro/libretro.cpp:851-869, src/media/firmware.h:117, src/media/firmware.cpp:28-33, src/media/firmware.cpp:288-348, src/media/game_db.h:337-341" note: > Set for the Model 1/2, the machine Auto falls back to. The same four files load from any subfolder of system/geartowns or from @@ -99,7 +103,7 @@ files: - { name: "fmt_fnt.rom", size: 262144, crc32: "dd6fd544" } - { name: "fmt_dic.rom", size: 524288, crc32: "82d1daa2" } - { name: "mytownsux.rom", size: 32, crc32: "5cc7e6bc" } - source_ref: "src/media/firmware.h:118-119, src/media/firmware.cpp:28-34, src/media/game_db.h:309-314" + source_ref: "src/media/firmware.h:119-120, src/media/firmware.cpp:28-34, src/media/game_db.h:343-348" note: "Set for the UX, also used by the 1F/2F, 10F/20F, CX and UG." - name: "fmtmarty.zip" @@ -111,7 +115,7 @@ files: contents: - { name: "mrom.m36", size: 2097152 } - { name: "mrom.m37", size: 2097152 } - source_ref: "src/media/firmware.h:120, src/media/firmware.cpp:497-508, src/media/game_db.h:316-320" + source_ref: "src/media/firmware.h:121, src/media/firmware.cpp:500-511, src/media/game_db.h:350-354" note: > The core checks the CRC32 of the slices it cuts from the two mask ROMs, not of the files: System 937311F6, OS 2BC2AF96, Extension @@ -130,7 +134,7 @@ files: - { name: "fmt_fnt.rom", size: 262144 } - { name: "fmt_dic.rom", size: 524288 } - { name: "mytownshr.rom", size: 32, crc32: "c52f0e89" } - source_ref: "src/media/firmware.h:121, src/media/firmware.cpp:28-34, src/media/game_db.h:322-324" + source_ref: "src/media/firmware.h:122, src/media/firmware.cpp:28-34, src/media/game_db.h:356-358" note: "First choice for the HG. The HR itself is not emulated." - name: "fmtownsftv.zip" @@ -146,5 +150,5 @@ files: - { name: "fmt_dic.rom", size: 524288 } - { name: "fmt_f20.rom", size: 524288, crc32: "9f55a20c" } - { name: "mytownsftv.rom", size: 32, crc32: "a961aae7" } - source_ref: "src/media/firmware.h:122, src/media/firmware.cpp:28-34, src/media/game_db.h:326-329" + source_ref: "src/media/firmware.h:123, src/media/firmware.cpp:28-34, src/media/game_db.h:360-363" note: "Second choice for the HG. The MF/Fresh itself is not emulated." From a6affcb917cf7775eac5303c54c355a09e17ba2a Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:36:53 +0200 Subject: [PATCH 15/49] chore: move sdl2trs pin to 57c90cc Upstream folded the media remove calls into insert with an empty name. ROM names, paths and embedded ROMs are unchanged. --- emulators/sdl2trs.yml | 44 +++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/emulators/sdl2trs.yml b/emulators/sdl2trs.yml index b4b7dffb..feed939e 100644 --- a/emulators/sdl2trs.yml +++ b/emulators/sdl2trs.yml @@ -3,8 +3,8 @@ type: standalone core_classification: community_fork source: "https://gitlab.com/jengun/sdltrs" upstream: "http://sdltrs.sourceforge.net" -profiled_date: "2026-08-08" -source_commit: "cb68ce3167ae9b8e2c87f69d3a8c34ffa176a993" +profiled_date: "2026-10-23" +source_commit: "57c90cc6393da6c2e5d565ddfbb0c80449fc6ed2" core_version: "1.2.35" display_name: "Tandy - TRS-80 (SDL2TRS)" cores: @@ -25,17 +25,17 @@ notes: | Three ROM slots exist, one per model family, and trs_rom_init picks one from trs_model. Model I takes romfile1, Model III and Model 4 share romfile3, and Model 4P takes romfile4p (src/trs_cmd_rom.c:868-894). The defaults are level2.rom, - model3.rom and model4p.rom, each prefixed by ROM_PATH (src/trs_options.c:897-899). + model3.rom and model4p.rom, each prefixed by ROM_PATH (src/trs_options.c:864-866). ROM_PATH is a build define left empty unless a packager sets it (src/trs_options.c:53-54, CMakeLists.txt:42), so a stock build resolves the names against the working directory. -rom, -r and -romfile write to the slot of the model selected at the moment - they are parsed (src/trs_options.c:609-619). Options are applied in command-line - order after the config file has been read (src/trs_options.c:1017-1037), so -m has + they are parsed (src/trs_options.c:597-607). Options are applied in command-line + order after the config file has been read (src/trs_options.c:984-1004), so -m has to come first to redirect them, and a model key in the config file otherwise decides. -rom1, -rom3 and -rom4p address a slot directly. The GUI ROM browser - filters on .bin, .hex, .iii and .rom (src/trs_sdl_gui.h:63, src/trs_sdl_gui.c:2591-2597). + filters on .bin, .hex, .iii and .rom (src/trs_sdl_gui.h:63, src/trs_sdl_gui.c:2595-2601). trs_load_rom sniffs the first byte. A colon means Intel hex, and load_hex rejects the file on a line checksum mismatch. A 1 or a 5 on Model III or later @@ -54,7 +54,7 @@ notes: | place to boot from a hard drive (src/trs_cmd_rom.c:447-610, 882-883). The clones run off the same three slots and are recognised from the ROM data - rather than from an option (src/trs_clones.c:8-20, html/Features.html), so their + rather than from an option (src/trs_clones.c:9-21, html/Features.html), so their larger images load as a Model I or a Model III ROM. None has a filename of its own anywhere in the tree. @@ -63,9 +63,9 @@ files: description: "TRS-80 Model I ROM" required: true max_size: 18432 - source_ref: "src/trs_options.c:81 (romfile1), src/trs_options.c:897 (default name), src/trs_cmd_rom.c:871-884 (trs_model 1)" + source_ref: "src/trs_options.c:81 (romfile1), src/trs_options.c:864 (default name), src/trs_cmd_rom.c:871-884 (trs_model 1)" note: > - Model I is the model a stock configuration selects (src/trs_options.c:924), so + Model I is the model a stock configuration selects (src/trs_options.c:891), so this is the slot an unconfigured run reads. Without it the machine runs the compiled-in diagnostic stub and nothing else. max_size is the shared ROM buffer ceiling: a longer file is truncated, never rejected, and only the @@ -75,7 +75,7 @@ files: description: "TRS-80 Model III and Model 4 ROM" required: true max_size: 18432 - source_ref: "src/trs_options.c:82 (romfile3), src/trs_options.c:898 (default name), src/trs_cmd_rom.c:885-889 (trs_model 3 and 4)" + source_ref: "src/trs_options.c:82 (romfile3), src/trs_options.c:865 (default name), src/trs_cmd_rom.c:885-889 (trs_model 3 and 4)" note: > Serves Model III and Model 4 alike. The stub text spells out that Model 4 mode needs a Model 3 image (src/trs_cmd_rom.c:110-115). This is the one slot @@ -89,7 +89,7 @@ files: description: "TRS-80 Model 4P boot ROM" required: false max_size: 18432 - source_ref: "src/trs_options.c:83 (romfile4p), src/trs_options.c:899 (default name), src/trs_cmd_rom.c:890-893 (trs_model 5)" + source_ref: "src/trs_options.c:83 (romfile4p), src/trs_options.c:866 (default name), src/trs_cmd_rom.c:890-893 (trs_model 5)" note: > Optional because the compiled-in replacement is a working boot ROM rather than a stub. html/index.html states the free ROM boots only Model 4 @@ -154,12 +154,12 @@ analysis: buffer. They arrive through romfile1 or romfile3 like any other image and are recognised from the ROM data, so the emulator defines no filename for them and no option selects them. - source_ref: "src/trs_clones.c:8-20 (clone table), src/trs_memory.c:63 (MAX_ROM_SIZE)" + source_ref: "src/trs_clones.c:9-21 (clone table), src/trs_memory.c:63 (MAX_ROM_SIZE)" layouts: - machine: "Prologica CP-300, CP-500 and CP-500 M80" slot: model3.rom image_size: 16384 - source_ref: "src/trs_cp500.c:1-22, src/trs_cp500.c:153-160, src/trs_memory.c:1038-1041" + source_ref: "src/trs_cp500.c:1-22, src/trs_cp500.c:154-161, src/trs_memory.c:1038-1041" note: > 14 KB of patched Model III ROM plus a 2 KB resident monitor read back from 0x3800-0x3FFF and banked into 0x3000-0x37FF. README.md:21 and @@ -250,34 +250,34 @@ analysis: note: "Named on the command line, in the config file or in a disk set, with no fixed filename" entries: - what: "floppy images in drives 0-7, JV1, JV3 and DMK" - source_ref: "src/trs_options.c:587-592, src/trs_disk.c:789-921" + source_ref: "src/trs_options.c:584-586, src/trs_disk.c:775-913" - what: "hard drive images, units 0-3" - source_ref: "src/trs_options.c:593-598, src/trs_hard.c:311-320, src/trs_hard.c:579-665" + source_ref: "src/trs_options.c:587-589, src/trs_hard.c:312-320, src/trs_hard.c:569-654" - what: "cassette images, .cas, .cpt and .wav" - source_ref: "src/trs_options.c:581-586, src/trs_cassette.c:522-549" + source_ref: "src/trs_options.c:581-583, src/trs_cassette.c:522-557" - what: "stringy floppy wafers in drives 0-7, .esf" - source_ref: "src/trs_options.c:599-604, src/trs_stringy.c:278-316, src/trs_stringy.c:342-346" + source_ref: "src/trs_options.c:590-592, src/trs_stringy.c:276-317, src/trs_stringy.c:342-350" - what: "disk set, a plain list of the paths above" - source_ref: "src/trs_options.c:605-608, src/trs_disk.c:3759-3796" + source_ref: "src/trs_options.c:593-596, src/trs_disk.c:3753-3787" - what: "CMD program loaded straight into memory, from a bare argument" - source_ref: "src/trs_options.c:1011-1012, src/trs_cmd_rom.c:845-866" + source_ref: "src/trs_options.c:978-979, src/trs_cmd_rom.c:845-866" - what: "serial port tty, defaulting to /dev/ttyS0 on Linux" source_ref: "src/trs_uart.c:54-56, src/trs_uart.c:144-202" generated_files: written_and_read_back: - filename: ".sdltrs.t8c" - source_ref: "src/trs_options.c:936-949, src/trs_options.c:1043-1046" + source_ref: "src/trs_options.c:903-916, src/trs_options.c:1010-1013" note: "Configuration, written to the home directory on first run when none is found." - filename: ".t8s" source_ref: "src/trs_state_save.c:38-66, src/trs_state_save.c:68-113" note: "Emulator state, written and read by the GUI or a bare command-line argument." - filename: "blank disk, wafer and hard drive images" - source_ref: "src/trs_mkdisk.c:192-308, src/trs_stringy.c:187-197" + source_ref: "src/trs_mkdisk.c:192-308, src/trs_stringy.c:185-195" written_only: - filename: "trsprn####.txt" source_ref: "src/trs_printer.c:60-81" note: "Printer output, numbered up to 9999 in the printer directory." - filename: "screenshots as BMP" - source_ref: "src/trs_sdl_gui.c:2673" + source_ref: "src/trs_sdl_gui.c:2677" note: "Produced by the emulator, none is user-supplied" From 2383ab335c4c30eb1990b36359be474264201e80 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:37:46 +0200 Subject: [PATCH 16/49] chore: move playdiaemu pin to e1cc2e1 Only zip 9 name decoding changed in content.rs; still no BIOS. --- emulators/playdiaemu.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/emulators/playdiaemu.yml b/emulators/playdiaemu.yml index bef6da01..df2cf4ff 100644 --- a/emulators/playdiaemu.yml +++ b/emulators/playdiaemu.yml @@ -3,8 +3,8 @@ type: libretro core_classification: pure_libretro source: "https://github.com/AloysHF/PlaydiaEmu" upstream: "https://github.com/AloysHF/PlaydiaEmu" -profiled_date: "2026-10-04" -source_commit: "6e758408ddffafe407282473f3904c1699a4cea8" +profiled_date: "2026-10-23" +source_commit: "e1cc2e132781d2b81d4df762f6ec7dde7a4ebc75" core_version: "0.1.0" display_name: "Bandai - Playdia (PlaydiaEmu)" cores: @@ -23,7 +23,8 @@ notes: | file alone. The core-info declares firmware_count = 0 (crates/playdiaemu-libretro/playdiaemu_libretro.info:19), and the playdiaemu-core crate reads only the user content: CUE/BIN tracks and - ZIP archives from the game path (crates/playdiaemu-core/src/content.rs - :111-199). No other file is ever opened. + ZIP archives from the game path + (crates/playdiaemu-core/src/content.rs:111-204). No other file is ever + opened. files: [] From c2dd7adea15ccbd956d3c8c05984b58fd9fc9d4c Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:38:27 +0200 Subject: [PATCH 17/49] chore: move prboom pin to 4849268 I_FindFile now tries an absolute or folder-qualified name as given before the search (libretro/libretro.c:4332-4413). Same IWADs and config. --- emulators/prboom.yml | 49 ++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/emulators/prboom.yml b/emulators/prboom.yml index 45f34464..15a47166 100644 --- a/emulators/prboom.yml +++ b/emulators/prboom.yml @@ -3,8 +3,8 @@ type: libretro core_classification: game_engine source: "https://github.com/libretro/libretro-prboom" upstream: "http://prboom.sourceforge.net/" -profiled_date: "2026-03-24" -source_commit: "b3e47ff5dec483d788e068e7b7fe21be700b5048" +profiled_date: "2026-10-23" +source_commit: "4849268e7342494193f2bbf2d0128a751cf58da7" core_version: "v2.5.0" display_name: "Doom (PrBoom)" cores: [prboom] @@ -24,26 +24,27 @@ notes: | Content is a .wad, .iwad, .pwad, .lmp, .m3u, .pk3, .ipk3 or .zip file (libretro/libretro.c:1029). An IWAD is passed as -iwad and needs nothing - else (libretro/libretro.c:2488-2492). A PWAD with map markers, or a PK3, + else (libretro/libretro.c:2621-2625). A PWAD with map markers, or a PK3, is paired with an IWAD of the matching generation searched next to the content, then in system/prboom/, then in system/ (find_iwad_for_kind, - libretro/libretro.c:2069-2133, 2514-2560, 2600-2621). A PK3 also loads + libretro/libretro.c:2202-2266, 2647-2693, 2733-2754). A PK3 also loads gzdoom.pk3, or else zdoom.pk3, from the same places before the mod - (find_base_resource, libretro/libretro.c:2141-2172, 2623-2657). When no + (find_base_resource, libretro/libretro.c:2274-2305, 2756-2790). When no IWAD is paired, FindIWADFile tries the standard_iwads list through I_FindFile and the core stops with "IWAD not found" if none is found (src/d_main.c:146-158, src/d_main.c:1020-1038, src/d_main.c:1123-1124). File names are matched case-insensitively (libretro/libretro.c:787-836). - I_FindFile search order (libretro/libretro.c:4176-4252): + I_FindFile search order (libretro/libretro.c:4332-4413). A name that is + absolute or contains a folder separator is first tried as given: 1. WAD directory (same folder as the loaded content) 2. system/prboom/ subdirectory 3. system/ directory directly 4. Parent folders of the WAD directory (recursive, if enabled) A baseconfig is read from .prboom.cfg beside the content, else - prboom.cfg through I_FindFile (libretro/libretro.c:2461-2466, - libretro/libretro.c:2678-2683). + prboom.cfg through I_FindFile (libretro/libretro.c:2594-2599, + libretro/libretro.c:2811-2816). files: # ---- Doom 1 generation, in search order ---- @@ -51,32 +52,32 @@ files: category: game_data system: doom required: false - source_ref: "libretro/libretro.c:2071-2073, libretro/libretro.c:2117-2128, src/d_main.c:153" + source_ref: "libretro/libretro.c:2204-2206, libretro/libretro.c:2250-2261, src/d_main.c:153" note: "Registered or Ultimate Doom. Paired with a Doom 1 PWAD." - name: "doomu.wad" category: game_data system: doom required: false - source_ref: "libretro/libretro.c:2071-2073, src/d_main.c:154" + source_ref: "libretro/libretro.c:2204-2206, src/d_main.c:154" - name: "freedoom1.wad" category: game_data system: doom required: false - source_ref: "libretro/libretro.c:2071-2073, src/d_main.c:155" + source_ref: "libretro/libretro.c:2204-2206, src/d_main.c:155" - name: "freedoom.wad" category: game_data system: doom required: false - source_ref: "libretro/libretro.c:2071-2073, src/d_main.c:156" + source_ref: "libretro/libretro.c:2204-2206, src/d_main.c:156" - name: "doom1.wad" category: game_data system: doom required: false - source_ref: "libretro/libretro.c:2071-2073, src/d_main.c:157" + source_ref: "libretro/libretro.c:2204-2206, src/d_main.c:157" note: "Shareware Doom." # ---- Doom 2 generation, in search order ---- @@ -84,73 +85,73 @@ files: category: game_data system: doom required: false - source_ref: "libretro/libretro.c:2074-2076, libretro/libretro.c:2117-2128, src/d_main.c:149" + source_ref: "libretro/libretro.c:2207-2209, libretro/libretro.c:2250-2261, src/d_main.c:149" note: "Paired with a Doom II PWAD or a PK3, and tried first when the PWAD's maps are not recognised." - name: "doom2f.wad" category: game_data system: doom required: false - source_ref: "libretro/libretro.c:2074-2076, src/d_main.c:148, src/d_main.c:1106-1107" + source_ref: "libretro/libretro.c:2207-2209, src/d_main.c:148, src/d_main.c:1106-1107" note: "French Doom II. The name selects the French language." - name: "plutonia.wad" category: game_data system: doom required: false - source_ref: "libretro/libretro.c:2074-2076, src/d_main.c:150, src/d_main.c:1110-1111" + source_ref: "libretro/libretro.c:2207-2209, src/d_main.c:150, src/d_main.c:1110-1111" - name: "tnt.wad" category: game_data system: doom required: false - source_ref: "libretro/libretro.c:2074-2076, src/d_main.c:151, src/d_main.c:1108-1109" + source_ref: "libretro/libretro.c:2207-2209, src/d_main.c:151, src/d_main.c:1108-1109" - name: "freedoom2.wad" category: game_data system: doom required: false - source_ref: "libretro/libretro.c:2074-2076, src/d_main.c:152" + source_ref: "libretro/libretro.c:2207-2209, src/d_main.c:152" # ---- Heretic ---- - name: "heretic.wad" category: game_data system: heretic required: false - source_ref: "libretro/libretro.c:2081-2083, libretro/libretro.c:2117-2128, libretro/libretro.c:2534-2546" + source_ref: "libretro/libretro.c:2214-2216, libretro/libretro.c:2250-2261, libretro/libretro.c:2667-2679" note: "Paired only with a PWAD recognised as a Heretic add-on, never with a Doom one." - name: "heretic1.wad" category: game_data system: heretic required: false - source_ref: "libretro/libretro.c:2081-2083" + source_ref: "libretro/libretro.c:2214-2216" note: "Shareware Heretic." - name: "blasphem.wad" category: game_data system: heretic required: false - source_ref: "libretro/libretro.c:2081-2083" + source_ref: "libretro/libretro.c:2214-2216" # ---- ZDoom base resources for PK3 content ---- - name: "gzdoom.pk3" category: game_data system: doom required: false - source_ref: "libretro/libretro.c:2141-2172, libretro/libretro.c:2623-2657" + source_ref: "libretro/libretro.c:2274-2305, libretro/libretro.c:2756-2790" note: "Loaded before a PK3 mod so the stock ZDoom assets it names resolve." - name: "zdoom.pk3" category: game_data system: doom required: false - source_ref: "libretro/libretro.c:2141-2172, libretro/libretro.c:2623-2657" + source_ref: "libretro/libretro.c:2274-2305, libretro/libretro.c:2756-2790" note: "Loaded before a PK3 mod when gzdoom.pk3 is not found." - name: "prboom.cfg" system: doom required: false unsourceable: "user settings in PrBoom's config format, with no canonical contents" - source_ref: "libretro/libretro.c:2461-2466, libretro/libretro.c:2678-2683, libretro/libretro.c:4176-4252" + source_ref: "libretro/libretro.c:2594-2599, libretro/libretro.c:2811-2816, libretro/libretro.c:4332-4413" note: "Passed as -baseconfig when no .prboom.cfg sits beside the content." From dfc6401a1bc0b2b0a7da00316d0a4b8941e7bea3 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:28:06 +0200 Subject: [PATCH 18/49] chore: move ruffle to 0.7.1 and openh264 2.7.0 Ruffle now pins OpenH264 2.7.0 (openh264.rs:46,61-96): new soname .so.8, new sha256 per build, and a Windows aarch64 build. --- emulators/ruffle.yml | 123 +++++++++++++++++++++++-------------------- 1 file changed, 67 insertions(+), 56 deletions(-) diff --git a/emulators/ruffle.yml b/emulators/ruffle.yml index 3f04cca8..61da372f 100644 --- a/emulators/ruffle.yml +++ b/emulators/ruffle.yml @@ -4,8 +4,8 @@ core_classification: game_engine source: "https://github.com/ruffle-rs/ruffle" upstream: "https://github.com/ruffle-rs/ruffle" profiled_date: "2026-09-17" -source_commit: "ed55e72394d21d7784b0a914fd4525608c6a5661" -core_version: "0.6.0" +source_commit: "045db00b393aed22a462d29cb6c25efa26be90a0" +core_version: "0.7.1" display_name: "Adobe Flash (Ruffle)" cores: - ruffle @@ -24,10 +24,10 @@ notes: | vulkan --config /var/data/ruffle --save-directory /ruffle `. The ActionScript class library is compiled by build_playerglobal into playerglobal_avm1.swf and playerglobal_avm2.swf and linked into the binary - from OUT_DIR (core/src/avm1/globals.rs:88, core/src/avm2/globals.rs:549), so + from OUT_DIR (core/src/avm1/globals.rs:82, core/src/avm2/globals.rs:548), so startup reads nothing. Locale texts, wgsl shaders, the window icon and the OpenH264 license are embedded the same way (desktop/src/gui/locale.rs:7-12, - desktop/src/app.rs:464, render/wgpu/src/shaders.rs:30-95, + desktop/src/app.rs:490, render/wgpu/src/shaders.rs:30-95, desktop/src/gui/movie.rs:44, desktop/src/gui/dialogs/preferences_dialog.rs:517). @@ -35,15 +35,15 @@ notes: | feature and pulls ruffle_video_external with openh264 (desktop/Cargo.toml:27,84,92), and enable_openh264 defaults to true (desktop/src/preferences.rs:291,316). OpenH264Codec::load first dlopens the - system sonames libopenh264.so.7, libopenh264.so.2.4.1 and libopenh264.so on + system sonames libopenh264.so.8, libopenh264.so.2.7.0 and libopenh264.so on Linux, then falls back to /ruffle/video/ and fetches the Cisco binary from ciscobinary.openh264.org bz2-compressed into it - (video/external/src/decoder/openh264.rs:53-56,109-133,173-191, + (video/external/src/decoder/openh264.rs:53-56,113-137,177-195, desktop/src/player.rs:234-241). Whether the library was already there or was just downloaded, its SHA-256 is checked before loading and the size is read only to format the mismatch message - (video/external/src/decoder/openh264.rs:135-146), and WelsGetCodecVersion must - answer 2.4.1 exactly (video/external/src/decoder/openh264.rs:46,153-166). The + (video/external/src/decoder/openh264.rs:139-150), and WelsGetCodecVersion must + answer 2.7.0 exactly (video/external/src/decoder/openh264.rs:46,157-170). The cache root comes from dirs::cache_dir(), ~/.cache/ruffle by default, and --cache-directory moves it (desktop/src/cli.rs:31-35,148). Without the library the player still starts: ExternalVideoBackend wraps SoftwareVideoBackend, so @@ -51,23 +51,24 @@ notes: | (video/external/src/backend.rs:41,51-69,73-80). Text uses system fonts. fontdb::Database::load_system_fonts() fills the - database at startup (desktop/src/app.rs:433-434), and both the Flash device + database at startup (desktop/src/app.rs:459-460), and both the Flash device fonts and the egui menu bar resolve family names against it and take whatever - face the host answers with (desktop/src/backends/ui.rs:321-360, - desktop/src/gui/controller.rs:741-787). The face is memory-mapped and parsed + face the host answers with (desktop/src/backends/ui.rs:321-380, + desktop/src/gui/controller.rs:754-800), device font names case-insensitively. + The face is memory-mapped and parsed by Ruffle's own rasterizer unless preferences.toml sets device_font_renderer to freetype, which routes Linux builds through FreetypeFontRenderer instead; the freetype default feature only compiles that branch, the preference - selects it (desktop/src/backends/ui.rs:190-192,443-487,489-519, + selects it (desktop/src/backends/ui.rs:190-192,463-507,509-539, desktop/src/preferences/read.rs:74-75, desktop/Cargo.toml:84). The families asked for are Times New Roman, Arial, Courier New and their metric-compatible substitutes, plus the CJK, Hebrew, Arabic and Thai faces - (desktop/src/player.rs:361-414, desktop/src/gui/controller.rs:620-694), and + (desktop/src/player.rs:361-414, desktop/src/gui/controller.rs:633-707), and on Unix fontconfig sorts the fallback chain - (desktop/src/backends/ui.rs:363-376,536-628). No name, path, size or hash is + (desktop/src/backends/ui.rs:383-396,556-648). No name, path, size or hash is fixed anywhere. The compiled-in Noto Sans subset sits behind the default_font feature, which the web and exporter crates enable and the desktop build does - not (core/src/player.rs:84-85, core/Cargo.toml:82,95, web/Cargo.toml:63-65, + not (core/src/player.rs:84-85, core/Cargo.toml:81,94, web/Cargo.toml:63-65, exporter/Cargo.toml:16, desktop/Cargo.toml:23), so on the desktop an unmatched family leaves the run without that face rather than falling back to a bundled one. @@ -84,86 +85,96 @@ notes: | (core/src/avm2/error_messages.rs:237). files: - # -- OpenH264 2.4.1 decoder, one build per OS and architecture -- + # -- OpenH264 2.7.0 decoder, one build per OS and architecture -- # The player fetches the build for its host into /ruffle/video/ the # first time a movie loads, with no prompt, so none needs to be supplied. - - name: libopenh264-2.4.1-linux64.7.so - path: "video/libopenh264-2.4.1-linux64.7.so" + - name: libopenh264-2.7.0-linux64.8.so + path: "video/libopenh264-2.7.0-linux64.8.so" system: flash required: false bundled: true - description: "OpenH264 2.4.1 decoder library, Linux x86_64" - sha256: "1392d21466bc638e68151b716d5b2086d54cd812afd43253f1adb5b6e0185f51" + description: "OpenH264 2.7.0 decoder library, Linux x86_64" + sha256: "1522f873a482923c5ec018a4415e1866898197528828c50f90fd300c94620df3" validation: [sha256] - source_ref: "video/external/src/decoder/openh264.rs:65-68, 104-146, 173-191" + source_ref: "video/external/src/decoder/openh264.rs:65-68, 108-150, 177-195" - - name: libopenh264-2.4.1-linux-arm64.7.so - path: "video/libopenh264-2.4.1-linux-arm64.7.so" + - name: libopenh264-2.7.0-linux-arm64.8.so + path: "video/libopenh264-2.7.0-linux-arm64.8.so" system: flash required: false bundled: true - description: "OpenH264 2.4.1 decoder library, Linux aarch64" - sha256: "e8ea7e42855ceb4a90e7bd0b3abeba0c58b5f97166e8b0a30eefd58e099557a4" + description: "OpenH264 2.7.0 decoder library, Linux aarch64" + sha256: "9ac664b0154fd0868491c2a904397b8a05779874c0603b8b1f16ad15de1ffd82" validation: [sha256] - source_ref: "video/external/src/decoder/openh264.rs:73-76, 104-146, 173-191" + source_ref: "video/external/src/decoder/openh264.rs:73-76, 108-150, 177-195" - - name: libopenh264-2.4.1-linux-arm.7.so - path: "video/libopenh264-2.4.1-linux-arm.7.so" + - name: libopenh264-2.7.0-linux-arm.8.so + path: "video/libopenh264-2.7.0-linux-arm.8.so" system: flash required: false bundled: true - description: "OpenH264 2.4.1 decoder library, Linux arm" - sha256: "fd1dfb27d30bb72e903c9d2b4c650104a4369d2e7ffe8a4a533e8db2e7e9b19e" + description: "OpenH264 2.7.0 decoder library, Linux arm" + sha256: "c9702982cad7ae0da05ca1e62834666f56b0290484af463f0887c8c48043e82b" validation: [sha256] - source_ref: "video/external/src/decoder/openh264.rs:69-72, 104-146, 173-191" + source_ref: "video/external/src/decoder/openh264.rs:69-72, 108-150, 177-195" - - name: libopenh264-2.4.1-linux32.7.so - path: "video/libopenh264-2.4.1-linux32.7.so" + - name: libopenh264-2.7.0-linux32.8.so + path: "video/libopenh264-2.7.0-linux32.8.so" system: flash required: false bundled: true - description: "OpenH264 2.4.1 decoder library, Linux x86" - sha256: "b7cf0e407f99056d90cbf62787a34820a7595b2129b165319d50766e00a66704" + description: "OpenH264 2.7.0 decoder library, Linux x86" + sha256: "7d095448e75ea49799e48cc11f079091f4c61b127dd71ece27b3496359102ecf" validation: [sha256] - source_ref: "video/external/src/decoder/openh264.rs:61-64, 104-146, 173-191" + source_ref: "video/external/src/decoder/openh264.rs:61-64, 108-150, 177-195" - - name: libopenh264-2.4.1-mac-arm64.dylib - path: "video/libopenh264-2.4.1-mac-arm64.dylib" + - name: libopenh264-2.7.0-mac-arm64.dylib + path: "video/libopenh264-2.7.0-mac-arm64.dylib" system: flash required: false bundled: true - description: "OpenH264 2.4.1 decoder library, macOS aarch64" - sha256: "213ff93831cfa3dd6d7ad0c3a3403a6ceedf4ac1341e1278b5b869d42fefb496" + description: "OpenH264 2.7.0 decoder library, macOS aarch64" + sha256: "2e1ae3cd10c08328ca03a1f304fd2a1a2a7e5658c6d5a8582101a963f7995ef0" validation: [sha256] - source_ref: "video/external/src/decoder/openh264.rs:81-84, 104-146, 173-191" + source_ref: "video/external/src/decoder/openh264.rs:81-84, 108-150, 177-195" - - name: libopenh264-2.4.1-mac-x64.dylib - path: "video/libopenh264-2.4.1-mac-x64.dylib" + - name: libopenh264-2.7.0-mac-x64.dylib + path: "video/libopenh264-2.7.0-mac-x64.dylib" system: flash required: false bundled: true - description: "OpenH264 2.4.1 decoder library, macOS x86_64" - sha256: "cc0ba518a63791c37571f3c851f0aa03a4fbda5410acc214ecd4f24f8d1c478e" + description: "OpenH264 2.7.0 decoder library, macOS x86_64" + sha256: "31d38bcbe9348e9b44ca38dd08fa1e2af79ffce6521276449ef05e3cd39136f4" validation: [sha256] - source_ref: "video/external/src/decoder/openh264.rs:77-80, 104-146, 173-191" + source_ref: "video/external/src/decoder/openh264.rs:77-80, 108-150, 177-195" - - name: openh264-2.4.1-win64.dll - path: "video/openh264-2.4.1-win64.dll" + - name: openh264-2.7.0-win64.dll + path: "video/openh264-2.7.0-win64.dll" system: flash required: false bundled: true - description: "OpenH264 2.4.1 decoder library, Windows x86_64" - sha256: "081b0c081480d177cbfddfbc90b1613640e702f875897b30d8de195cde73dd34" + description: "OpenH264 2.7.0 decoder library, Windows x86_64" + sha256: "0ef5e7f3b38753b15c13afa0418d4d7805fa228e6adfd3e425bbf758cff1c288" validation: [sha256] - source_ref: "video/external/src/decoder/openh264.rs:89-92, 104-146, 173-191" + source_ref: "video/external/src/decoder/openh264.rs:89-92, 108-150, 177-195" - - name: openh264-2.4.1-win32.dll - path: "video/openh264-2.4.1-win32.dll" + - name: openh264-2.7.0-win32.dll + path: "video/openh264-2.7.0-win32.dll" system: flash required: false bundled: true - description: "OpenH264 2.4.1 decoder library, Windows x86" - sha256: "83270149640469c994a62cc32a6d8c0413cd7b802b7f1f2f532159f5bdc1cedd" + description: "OpenH264 2.7.0 decoder library, Windows x86" + sha256: "ee34d9606c5cc96cdea694a6bc95ed1b6230b9854689f56c7fa30d211daf48b0" validation: [sha256] - source_ref: "video/external/src/decoder/openh264.rs:85-88, 104-146, 173-191" + source_ref: "video/external/src/decoder/openh264.rs:85-88, 108-150, 177-195" + + - name: openh264-2.7.0-win-arm64.dll + path: "video/openh264-2.7.0-win-arm64.dll" + system: flash + required: false + bundled: true + description: "OpenH264 2.7.0 decoder library, Windows aarch64" + sha256: "2f8f11a40d1450fd5c7afc1c5e38b9f6ba6c95c47582845b16c0bfe154ed75a4" + validation: [sha256] + source_ref: "video/external/src/decoder/openh264.rs:93-96, 108-150, 177-195" From 59e403bd3fbffaedb2fe947276327e8fed465a3a Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:30:36 +0200 Subject: [PATCH 19/49] fix: virtualjaguar notes and refs at v3.10.0 Same four files. A CD BIOS outside the two CRC32 constants is accepted on a plausible run address (libretro.c:5706-5781), and a custom cart boot ROM must be exactly 131072 bytes (libretro.c:6010-6050). core_version follows CORE_BASE_VERSION in the Makefile. --- emulators/virtualjaguar.yml | 80 +++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 39 deletions(-) diff --git a/emulators/virtualjaguar.yml b/emulators/virtualjaguar.yml index 75383dfc..882118a0 100644 --- a/emulators/virtualjaguar.yml +++ b/emulators/virtualjaguar.yml @@ -4,8 +4,8 @@ core_classification: community_fork source: "https://github.com/libretro/virtualjaguar-libretro" upstream: "http://shamusworld.gotdns.org/git/virtualjaguar" profiled_date: "2026-09-04" -source_commit: "f9a3c89f58836cb2c45a42ad4edfac047050f30a" -core_version: "v2.1.0" +source_commit: "e7db53678b86e2fceb459e26cf09d2fdaaa4d395" +core_version: "v3.10.0" display_name: "Atari - Jaguar (Virtual Jaguar)" cores: - virtualjaguar @@ -13,30 +13,30 @@ systems: - atari-jaguar notes: | - The boot ROMs are still compiled in, generated by bin2c, but the core no - longer only uses them. Staging moved out of retro_load_game into - stage_cart_boot_rom, which reads a file first and falls back to the - embedded array (libretro.c:5339-5382). BT_M_SERIES tries jagboot_m.rom in - the system directory. BT_CUSTOM, a value the enum did not carry before, - searches six names across the system directory and two subdirectories - (libretro.c:5293-5337). Either way the file has to be 0x20000 bytes, the - size copied to jagMemSpace + 0xE00000. Anything shorter is a short read and - the embedded Series K takes over. + The boot ROMs are compiled in, generated by bin2c, and a file in the system + directory can replace them. stage_cart_boot_rom stages the cart boot ROM at + jagMemSpace + 0xE00000 (libretro.c:6105-6180). BT_M_SERIES reads + jagboot_m.rom from the system directory, and a read shorter than 0x20000 + bytes leaves the embedded Model M in place. BT_CUSTOM searches six names + across the system directory and two subdirectories (libretro.c:6059-6103), + takes the first file of exactly 0x20000 bytes, and falls back to the + embedded Series K when none qualifies (libretro.c:6010-6050). - The Jaguar CD BIOS is the larger change. stage_cd_bios calls - load_external_cd_bios, which walks three name groups over five directories - (libretro.c:5049-5158). The group order follows the - virtualjaguar_cd_bios_type option, then generic names, then the other type, - because a lone file of the wrong type still beats the embedded copy: the - user put it there deliberately. A candidate is accepted at exactly 0x40000 - bytes and recognised by CRC32 against two constants - (libretro.c:4964-4965,4971-5048). + stage_cd_bios calls load_external_cd_bios, which walks three name groups + over five directories (libretro.c:5785-5884, 5899-5940). The group order + follows the virtualjaguar_cd_bios_type option, then generic names, then the + other type, so a lone file of the other type still beats the embedded copy. + A candidate must be exactly 0x40000 bytes. Its CRC32 is compared with two + constants, and a file matching neither is still accepted when the run + address at 0x404 lies between 0x800000 and 0x840000 + (libretro.c:5681-5682,5706-5781). - The "BIOS" core option (virtualjaguar_bios, disabled by default) still - controls whether the boot ROM is executed at startup. When enabled, the + The "BIOS (Cartridges)" core option (virtualjaguar_bios, disabled by + default) controls whether the boot ROM runs at startup. When enabled, the boot ROM entry point is copied to jaguarMainRAM - (src/core/jaguar.c:1466-1468). When disabled, jaguarRunAddress is written - directly, skipping the boot animation. + (src/core/jaguar.c:1499-1501). When disabled, jaguarRunAddress is written + directly, skipping the boot animation. GPU-only cartridges turn the boot + ROM on regardless (libretro.c:5968-6002). Nothing here is required: every path falls back to an embedded copy, and a file only replaces it. The embedded arrays are the dumps themselves: @@ -44,9 +44,10 @@ notes: | Series K and Model M, jaguarCDBootROM and jaguarDevCDBootROM to the two values the CD BIOS test accepts (src/bios/jagbios.c, src/bios/jagbios_m.c, src/bios/jagcdbios.c, src/bios/jagdevcdbios.c, src/core/biosdb.c:20-21, - libretro.c:4964-4965). A file changes what runs only under BT_CUSTOM, - where any image of 0x20000 bytes is loaded and an unrecognised checksum - is logged (libretro.c:5245-5284). + libretro.c:5681-5682). A file changes what runs when it is a cart boot ROM + under BT_CUSTOM, where any checksum is loaded and an unrecognised one is + logged (libretro.c:6010-6050), or a CD BIOS revision outside the two + checksums. files: - name: "[BIOS] Atari Jaguar CD (World).j64" @@ -65,14 +66,14 @@ files: - "Jaguar CD BIOS.rom" - "Jaguar CD BIOS.bin" description: "Jaguar CD retail BIOS, replacing the embedded copy" - source_ref: "libretro.c:4964, libretro.c:4971-5048, libretro.c:5049-5158, libretro.c:5159-5175" + source_ref: "libretro.c:5681, libretro.c:5706-5781, libretro.c:5785-5884, libretro.c:5899-5940" note: >- Searched in the system directory and under Atari - Jaguar, Atari - Jaguar CD, jaguar and jaguarcd. Accepted at exactly 262144 - bytes and recognised by its CRC32. A file of the right size whose - checksum matches neither constant is counted as rejected and the - embedded BIOS is used. The generic names are tried after the type the - virtualjaguar_cd_bios_type option selects. + bytes. A file whose CRC32 matches neither constant is still accepted + when its run address at 0x404 lies between 0x800000 and 0x840000, + otherwise it is rejected and the search goes on. The generic names are + tried after the type the virtualjaguar_cd_bios_type option selects. - name: "[BIOS] Atari Jaguar Developer CD (World).j64" system: atari-jaguar @@ -84,7 +85,7 @@ files: - "[BIOS] Atari Jaguar Developer CD (World).rom" - "[BIOS] Atari Jaguar Developer CD (World).bin" description: "Jaguar CD developer BIOS, selected by virtualjaguar_cd_bios_type" - source_ref: "libretro.c:4965, libretro.c:5049-5158" + source_ref: "libretro.c:5682, libretro.c:5706-5781, libretro.c:5785-5884" note: >- Same search and the same size and checksum test as the retail BIOS. Whichever type the option does not select is still tried last. @@ -101,11 +102,12 @@ files: - "[BIOS] Atari Jaguar Stubulator '94 (World).j64" - "[BIOS] Atari Jaguar Stubulator '93 (World).j64" description: "Cart boot ROM read when the BIOS type is set to custom" - source_ref: "libretro.c:5293-5337, libretro.c:5339-5356" + source_ref: "libretro.c:6010-6050, libretro.c:6059-6103, libretro.c:6131-6147" note: >- Reached only through BT_CUSTOM. Searched in the system directory and - under Atari - Jaguar and jaguar. No checksum is tested, and a read shorter - than 131072 bytes leaves the embedded Series K in place. + under Atari - Jaguar and jaguar, name by name. No checksum is tested. A + file that is not exactly 131072 bytes is skipped, and with none left the + embedded Series K is used. - name: jagboot_m.rom system: atari-jaguar @@ -116,7 +118,7 @@ files: md5: "6e844759720226e58d55ecaf33608a13" crc32: "ae25bdf5" description: "Model-M cart boot ROM, read when the BIOS type is Model M" - source_ref: "libretro.c:5358-5380, src/bios/jagbios_m.c:9" + source_ref: "libretro.c:6149-6171, src/bios/jagbios_m.c:9" note: >- Read from the system directory only, as jagboot_m.rom, and only when biosType is BT_M_SERIES. A short read falls back to the embedded @@ -161,7 +163,7 @@ analysis: filedb_name: "[BIOS] Atari Jaguar Developer CD (World)" bios_type_enum: - source_ref: "src/core/settings.h:61" + source_ref: "src/core/settings.h:66" values: - BT_K_SERIES - BT_M_SERIES @@ -174,13 +176,13 @@ analysis: label: "BIOS (Cartridges)" description: "Which BIOS a cartridge boots with: disabled is HLE, enabled runs the boot ROM." default: disabled - source_ref: "libretro_core_options.h:588-600" + source_ref: "libretro_core_options.h:589-601" bios_loading: mechanism: embedded load_address: "0xE00000" load_size: "0x20000" - source_ref: "libretro.c:5339-5383, libretro.c:6332" + source_ref: "libretro.c:6105-6180, libretro.c:7237" selection_logic: "BT_CUSTOM reads a file, BT_M_SERIES tries jagboot_m.rom, otherwise the embedded array" external_loading: true note: | From b0476c0d19df2f55a82f1f8a524258c149eb4f6e Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:31:21 +0200 Subject: [PATCH 20/49] chore: rebase native32emu refs to b83ed7b ZIP extraction now checks mangled_name and name results (archive_loader.rs:17-67); nothing read outside the package. --- emulators/native32emu.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/emulators/native32emu.yml b/emulators/native32emu.yml index 4941468b..debdf618 100644 --- a/emulators/native32emu.yml +++ b/emulators/native32emu.yml @@ -4,7 +4,7 @@ core_classification: pure_libretro source: "https://github.com/AloysHF/Native32Emu" upstream: "https://github.com/AloysHF/Native32Emu" profiled_date: "2026-09-03" -source_commit: "3dab17439f885c98a8f9da6362c71e7275da44c5" +source_commit: "b83ed7b315054b16d5468c3882d2e59d6c2180e9" core_version: "1.3.0" display_name: "Sunplus - Native32 (Native32Emu)" cores: @@ -24,10 +24,10 @@ notes: | crates/native32emu-core/src/des_constants.rs). A .zip package is extracted to a temporary directory - (crates/native32emu-core/src/archive_loader.rs:17-61) and booted from + (crates/native32emu-core/src/archive_loader.rs:17-67) and booted from the menu found at its root, FHUI.smf first, then NA32UI.smf (crates/native32emu-core/src/archive_loader.rs:11, - crates/native32emu-core/src/archive_loader.rs:88-122). Every later file + crates/native32emu-core/src/archive_loader.rs:94-128). Every later file is resolved relative to the running content and its parent directories, case-insensitively with trailing spaces trimmed (crates/native32emu-core/src/content_loader.rs:73-130): child .smf and From d627ec5e63386a0f6209494b5443f1ac54fa9e2b Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:32:37 +0200 Subject: [PATCH 21/49] chore: move oberon to 5be71d8 with full ref paths Disk images now open through the frontend VFS (Libretro/libretro.c:149-162, src/disk.c:13-65). No system file. core_version is the pin's commit date, the source carries only the git rev. --- emulators/oberon.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/emulators/oberon.yml b/emulators/oberon.yml index ac9745e0..20c00026 100644 --- a/emulators/oberon.yml +++ b/emulators/oberon.yml @@ -4,8 +4,8 @@ core_classification: community_fork source: "https://github.com/libretro/oberon-risc-emu" upstream: "https://github.com/pdewacht/oberon-risc-emu" profiled_date: "2026-03-24" -source_commit: "532b44c31190640628fea388bb593cc247814612" -core_version: "2020-07-01" +source_commit: "5be71d885b87b7cd7c635bf330764fcc4f3905fe" +core_version: "2026-08-23" display_name: "Oberon RISC Emulator" cores: - oberon @@ -14,10 +14,12 @@ systems: [oberon] # Project Oberon RISC emulator by Peter De Wachter. # Emulates the Oberon RISC processor designed by Niklaus Wirth. # Bootloader (512 words) compiled into the binary from risc-boot.inc, -# loaded into ROM at 0xFFFFF800 on startup (risc.c:75-77,93). +# loaded into ROM at 0xFFFFF800 on startup (src/risc.c:75-77,93). # No retro_get_system_directory() call, so no files from system dir. -# Content: .dsk disk images loaded via retro_load_game (libretro.c:209-214). -# Upstream and libretro core emulation code (risc.c, disk.c) are identical. +# Content: .dsk disk images loaded via retro_load_game (Libretro/libretro.c:219-227), +# opened read-write through the frontend VFS when one is offered +# (Libretro/libretro.c:149-162, src/disk.c:13-65). +# risc.c is identical upstream. disk.c differs only by that VFS file layer. files: [] From 3011727e6f68c93fc36d9b939f856d3cab96651c Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:35:35 +0200 Subject: [PATCH 22/49] chore: move pcee2 to upstream v2.9.138 The port now merges PCSX2 ab0b401f and embeds patches.zip, packed from the pcsx2_patches submodule (pcsx2/CMakeLists.txt:1183-1205, pcsx2/Patch.cpp:292-331). The resources copy is read only with PCEE2_EXTERNAL_RESOURCES set. Same files. --- emulators/pcee2.yml | 70 ++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/emulators/pcee2.yml b/emulators/pcee2.yml index d13b6938..46929d79 100644 --- a/emulators/pcee2.yml +++ b/emulators/pcee2.yml @@ -5,9 +5,9 @@ bios_mode: agnostic source: "https://github.com/WizzardSK/pcee2-libretro" upstream: "https://github.com/PCSX2/pcsx2" profiled_date: "2026-09-03" -source_commit: "93aded21a46e60f3def27b2590eccb49d30d6a05" -upstream_commit: "6db638dc0373769b4c5d5b5dd7ed6da641b9a18e" -core_version: "v2.7.523" +source_commit: "387691a29efef63bafad04148d1ff94bf40e791b" +upstream_commit: "ab0b401f99729ef8da3009f9af28d8ee96e0e7ba" +core_version: "v2.9.138" display_name: "Sony - PlayStation 2 (PCEE2)" cores: [pcee2] systems: [sony-playstation-2] @@ -18,10 +18,10 @@ resources_directory: "pcsx2/resources/" data_directories: - ref: pcsx2-resources destination: "pcsx2/resources" - source_ref: "pcee2-libretro/Libretro.cpp:414-442, pcsx2/Pcsx2Config.cpp:2388-2400" + source_ref: "pcee2-libretro/Libretro.cpp:543-571, pcsx2/Pcsx2Config.cpp:2417-2429" notes: | - libretro port of current PCSX2, merged up to upstream 6db638dc (v2.7.523, + libretro port of current PCSX2, merged up to upstream ab0b401f (v2.9.138, pcee2-libretro/upstream.version). The build reports that version as library_version. Everything the port adds lives in pcee2-libretro/ and in the libretro renderer bridges, while the BIOS, CDVD, patch and database code is @@ -32,53 +32,56 @@ notes: | pcsx2/resources, Settings is pcsx2/inis, and EmuFolders::LoadConfig derives bios, memcards, cheats, patches, textures, gamesettings, cache, snaps, sstates, logs, covers, inputprofiles and videos from DataRoot - (pcee2-libretro/Libretro.cpp:414-428, pcsx2/Pcsx2Config.cpp:2319-2336). + (pcee2-libretro/Libretro.cpp:543-557, pcsx2/Pcsx2Config.cpp:2348-2365). A standalone PCSX2.ini dropped in pcsx2/inis contributes nine emulation - sections as the baseline (Libretro.cpp:504-535), and the core options and the + sections as the baseline (pcee2-libretro/Libretro.cpp:633-664), and the core options and the port overrides apply on top. BIOS detection is filename-agnostic. The core option pcsx2_bios lists every file of pcsx2/bios that IsBIOS accepts: a romdir whose RESET entry is followed by a readable ROMVER, whose fifth character gives the zone (Japan, USA, Europe, Asia, China, T10K, COH-H, Test, Free). With the option on - auto, SettingsOverride selects the first accepted file (Libretro.cpp:578-618, + auto, SettingsOverride selects the first accepted file (pcee2-libretro/Libretro.cpp:707-747, pcsx2/ps2/BiosTools.cpp:80-197, 284-294). When no BIOS is configured or the configured name is missing, LoadBIOS falls back to FindBiosImage, which - also filters on size between 4 and 8 MB (BiosTools.cpp:258-282, 317-369). + also filters on size between 4 and 8 MB (pcsx2/ps2/BiosTools.cpp:258-282, 317-369). The image is read into the 4 MB ROM region, and a file shorter than 2465792 bytes turns off the OSDSys parameter HLE. No hash is matched. Booting with - no content starts the BIOS (Libretro.cpp:2090-2096). + no content starts the BIOS (pcee2-libretro/Libretro.cpp:2286-2296). Companions derive from the selected image: rom1 and rom2 are tried as the full name plus extension, then with the extension replaced, and are skipped when absent. The nvm is read at the replaced extension and rebuilt with region and language defaults when missing or blank, and the mec is written back - as 0x00020603 when it cannot be read (BiosTools.cpp:214-241, 366-367, + as 0x00020603 when it cannot be read (pcsx2/ps2/BiosTools.cpp:214-241, 366-367, pcsx2/CDVD/CDVD.cpp:136-205). - The shaders, four interface fonts and GameIndex.yaml are built into the - core (cmake/EmbedResources.cmake:19-31, pcsx2/CMakeLists.txt:1137-1157) + The shaders, four interface fonts, GameIndex.yaml and patches.zip are built + into the core (cmake/EmbedResources.cmake:19-31, 46-62, + pcsx2/CMakeLists.txt:1170-1219) and win over the copies on disk unless PCEE2_EXTERNAL_RESOURCES is set in - the environment (pcsx2/EmbeddedResources.cpp:8-12, pcsx2/GS/Renderers/Common/GSDevice.cpp:372-387, - pcsx2/ImGui/ImGuiManager.cpp:470-492, pcsx2/GameDatabase.cpp:1021-1050, - Libretro.cpp:451-473). A missing resources directory is a warning, not a - failure (Libretro.cpp:433-442). What the directory still supplies to this - build is patches.zip. RedumpDatabase.yaml is read only by the Qt game - summary (pcsx2/GameDatabase.cpp:1197-1210 has no caller in the core), + the environment (pcsx2/EmbeddedResources.cpp:8-12, pcsx2/GS/Renderers/Common/GSDevice.cpp:441-465, + pcsx2/ImGui/ImGuiManager.cpp:473-495, pcsx2/GameDatabase.cpp:1037-1066, pcsx2/Patch.cpp:292-331, + pcee2-libretro/Libretro.cpp:580-602). A missing resources directory is a warning, not a + failure (pcee2-libretro/Libretro.cpp:562-571). patches.zip is packed at build time from the + 3rdparty/pcsx2_patches submodule, so the build carries the patches of the + commit it points at, and the directory supplies nothing this build reads + by default. RedumpDatabase.yaml is read only by the Qt game + summary (pcsx2/GameDatabase.cpp:1213-1226 has no caller in the core), game_controller_db.txt only by the SDL input source the port disables - (Libretro.cpp:561-562, pcsx2/Input/SDLInputSource.cpp:701-706), the + (pcee2-libretro/Libretro.cpp:690-691, pcsx2/Input/SDLInputSource.cpp:701-706), the achievement sounds only with achievements enabled, which no core option or - adopted ini section does (pcsx2/Achievements.cpp:943-951), and + adopted ini section does (pcsx2/Achievements.cpp:944-952), and fullscreenui/no-save.png only by the save state selector, whose hotkeys the - port clears (Libretro.cpp:564, pcsx2/ImGui/ImGuiOverlays.cpp:1461-1462). + port clears (pcee2-libretro/Libretro.cpp:693, pcsx2/ImGui/ImGuiOverlays.cpp:1441-1442). The port supplies Roboto alone to ImGui, so no emoji font is read. Per-game user files keep their PCSX2 locations under /pcsx2: - cheats and patches as _.pnach (pcsx2/Patch.cpp:333-363), - gamesettings/_.ini (pcsx2/VMManager.cpp:830-833), - textures//replacements (pcsx2/GS/Renderers/HW/GSTextureReplacements.cpp:262-264), + cheats and patches as _.pnach (pcsx2/Patch.cpp:333-368), + gamesettings/_.ini (pcsx2/VMManager.cpp:842-845), + textures//replacements (pcsx2/GS/Renderers/HW/GSTextureReplacements.cpp:269-271), memcards/*.ps2, which the core creates and lists in the memory card - options (Libretro.cpp:620-640). The DEV9 HDD image is named in the ini and + options (pcee2-libretro/Libretro.cpp:749-769). The DEV9 HDD image is named in the ini and created on demand. files: @@ -89,7 +92,7 @@ files: max_size: 8388608 required: true validation: [size] - source_ref: "source pcee2-libretro/Libretro.cpp:578-618, source pcsx2/ps2/BiosTools.cpp:16-17, source pcsx2/ps2/BiosTools.cpp:80-197, source pcsx2/ps2/BiosTools.cpp:258-294, source pcsx2/ps2/BiosTools.cpp:317-369" + source_ref: "source pcee2-libretro/Libretro.cpp:707-747, source pcsx2/ps2/BiosTools.cpp:16-17, source pcsx2/ps2/BiosTools.cpp:80-197, source pcsx2/ps2/BiosTools.cpp:258-294, source pcsx2/ps2/BiosTools.cpp:317-369" note: > Any file of pcsx2/bios whose romdir carries RESET and ROMVER. The 4 to 8 MB filter applies in FindBiosImage only. The core option scan and the @@ -141,13 +144,14 @@ files: description: "Built-in game patch archive (pnach per serial and CRC)" required: false category: game_data - source_ref: "upstream pcsx2/Patch.cpp:117, source pcsx2/Patch.cpp:289-317, source pcsx2/Patch.cpp:365-405" + source_ref: "upstream pcsx2/Patch.cpp:117, source pcsx2/Patch.cpp:292-331, source pcsx2/Patch.cpp:379-419, source pcsx2/CMakeLists.txt:1183-1205" note: > - Opened read only from the resources directory when a game's patches are - enumerated and searched for _.pnach, then .pnach. Files - in the patches folder take precedence. A failure to open is reported once - on screen. Not part of the PCSX2 source tree: PCSX2 builds fetch it from - the pcsx2_patches releases, a rolling asset rebuilt on every patch commit. + Embedded in the core, packed from the 3rdparty/pcsx2_patches submodule. + The copy in the resources directory is opened only when + PCEE2_EXTERNAL_RESOURCES is set or the build carries no embedded copy. + Searched for _.pnach, then .pnach, when a game's + patches are enumerated. Files in the patches folder take precedence. A + failure to open is reported once on screen. - name: "eeprom.dat" description: "DEV9 network adapter EEPROM" From 84825e817211bc0fa85803a3fcde8909b78d3875 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:37:18 +0200 Subject: [PATCH 23/49] fix: name nesoid release 2.5-4 and full ref paths The pin b2ff53f is release 2.5-4 (tag 65f1d85) plus a README commit, versionName 2.5 in app/build.gradle. Bare Java file names in the notes now carry their app/src/main/java path. No file changed. --- emulators/nesoid.yml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/emulators/nesoid.yml b/emulators/nesoid.yml index e9821479..e70e1754 100644 --- a/emulators/nesoid.yml +++ b/emulators/nesoid.yml @@ -6,7 +6,7 @@ upstream: "https://sourceforge.net/p/nesoid/code" author: "Yongzh (androidemu.com)" profiled_date: "2026-08-12" source_commit: "b2ff53fefa56a668aad4a579af85adc672d7a791" -core_version: "2.5" +core_version: "2.5-4" display_name: "Nintendo - NES / Famicom (Nesoid)" mode: standalone cores: @@ -45,7 +45,7 @@ notes: | raises is discarded (app/jni/neslib/drivers/android/debug.c:4-11). The activity accepts a name ending .nes, .fds or .zip caselessly and refuses - anything else before the loader runs (EmulatorActivity.java:933-957, + anything else before the loader runs (app/src/main/java/com/androidemu/nes/EmulatorActivity.java:933-957, app/src/main/res/values/arrays.xml:4-8). An archive is opened by the core, which keeps the first entry ending .nes, .fds, .nsf, .unf, .nez or .unif, and a plain file also opens gzipped (app/jni/neslib/file.c:192-232,250-273). @@ -66,21 +66,21 @@ notes: | calls FCEUI_SetBaseDirectory, which leaves that buffer empty (app/jni/neslib/general.c:46,52-56,215). The settings screen still writes the fdsRom preference and still shows the chosen path, but no code reads it back - (EmulatorSettingsFragment.java:96-99,150-156,195-210, + (app/src/main/java/com/androidemu/nes/EmulatorSettingsFragment.java:96-99,150-156,195-210, app/src/main/res/xml/preferences.xml:240-251). Disk switching went the same way: the menu asks the engine for fdsTotalSides and fdsCurrentDisk, which Yongzh's builds answer and the fork's does not, the base class returning zero - for any name (EmulatorActivity.java:417,969,1244-1249, + for any name (app/src/main/java/com/androidemu/nes/EmulatorActivity.java:417,969,1244-1249, app/jni/common/emuengine.h:49). The Game Genie ROM is a second path the user picks, kept across both families. loadGameGenie passes it to the engine only while the Enable Game Genie switch is on, the setter duplicates it into FSettings.GameGenie and OpenGenie reads it - once the content has loaded (EmulatorActivity.java:870-874, + once the content has loaded (app/src/main/java/com/androidemu/nes/EmulatorActivity.java:870-874, app/jni/neslib/drivers/android/nesengine.cpp:242-243, app/jni/neslib/svga.c:132-140, app/jni/neslib/fce.c:1201-1203). Both pickers list names ending .nes, .rom or .bin - (EmulatorSettingsFragment.java:179-210, FileChooser.java:157-172). + (app/src/main/java/com/androidemu/nes/EmulatorSettingsFragment.java:179-210, app/src/main/java/com/androidemu/nes/FileChooser.java:157-172). A palette named after the content is read from the pal directory of the same unset base directory as the disk BIOS, 192 bytes taken as 64 RGB triples. A @@ -97,12 +97,12 @@ notes: | FCEU_LoadGameCheats reads at load and FCEU_FlushGameCheats rewrites at close (app/jni/neslib/cheat.c:183-208,272-300, app/jni/neslib/fce.c:1080,1213). The application writes its own files through Java paths instead: state slots - at .ss beside the content (StateSlotsActivity.java:39-45,135-140), + at .ss beside the content (app/src/main/java/com/androidemu/nes/StateSlotsActivity.java:39-45,135-140), an XML cheat list at .cht, also beside the content - (Cheats.java:37-46,105-160), key profiles under its data directory - (KeyProfilesActivity.java:47-60,92-100), PNG screenshots under screenshot/ on - external storage (EmulatorActivity.java:1258-1281) and a netplay state - exchanged through its cache directory (EmulatorActivity.java:1292-1293). + (app/src/main/java/com/androidemu/Cheats.java:37-46,105-160), key profiles under its data directory + (app/src/main/java/com/androidemu/nes/KeyProfilesActivity.java:47-60,92-100), PNG screenshots under screenshot/ on + external storage (app/src/main/java/com/androidemu/nes/EmulatorActivity.java:1258-1281) and a netplay state + exchanged through its cache directory (app/src/main/java/com/androidemu/nes/EmulatorActivity.java:1292-1293). files: - name: disksys.rom @@ -177,8 +177,8 @@ exclusion_note: > ref: app/jni/neslib/general.c:196-213,222-238, app/jni/neslib/cart.c:641-700, app/jni/neslib/fds.c:845-870,915-930, app/jni/neslib/cheat.c:183-208, 272-300, app/jni/neslib/fce.c:1080,1145-1177,1206,1213, - EmulatorActivity.java:949-957,1258-1293, Cheats.java:37-46, - StateSlotsActivity.java:39-45,135-140, - KeyProfilesActivity.java:47-60,92-100, app/jni/neslib/Android.mk:193-197, - HelpActivity.java:14-22, MainActivity.java:20, - EmulatorSettingsFragment.java:30-31 + app/src/main/java/com/androidemu/nes/EmulatorActivity.java:949-957,1258-1293, app/src/main/java/com/androidemu/Cheats.java:37-46, + app/src/main/java/com/androidemu/nes/StateSlotsActivity.java:39-45,135-140, + app/src/main/java/com/androidemu/nes/KeyProfilesActivity.java:47-60,92-100, app/jni/neslib/Android.mk:193-197, + app/src/main/java/com/androidemu/nes/HelpActivity.java:14-22, app/src/main/java/com/androidemu/nes/MainActivity.java:20, + app/src/main/java/com/androidemu/nes/EmulatorSettingsFragment.java:30-31 From 075d26fc8b0103b24448d170fb9903d5a90b96b5 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:27:17 +0200 Subject: [PATCH 24/49] fix: pin citra-mmj to the 20251112 release commit The 20251112 APKs are built from tag commit 9198dc2. HEAD 302b0c3 is a sibling commit off the same base that only adds shader caches under cache/, so src/ and every ref are identical at both. --- emulators/citra-mmj.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emulators/citra-mmj.yml b/emulators/citra-mmj.yml index 3ea4cefa..8c7f08e2 100644 --- a/emulators/citra-mmj.yml +++ b/emulators/citra-mmj.yml @@ -4,7 +4,7 @@ core_classification: community_fork source: "https://github.com/weihuoya/citra" upstream: "https://github.com/weihuoya/citra" profiled_date: "2026-08-11" -source_commit: "302b0c3bc4312bc96489c11584a97664894b343f" +source_commit: "9198dc24df2eb534b8fe7fa1c5c457081a7244ab" core_version: "20251112" display_name: "Nintendo - 3DS (Citra MMJ)" cores: From 1c1e09b3b6b8623698aab10361a9ff6a561a2421 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:28:42 +0200 Subject: [PATCH 25/49] fix: primehack core_version to 1.0.9 The pin 53f53e0 is the 1.0.9 tag commit, and the build names itself from git describe (Common/Version.cpp). 1.0.9 ships a single Windows zip whose Sys/ fonts and codehandler.bin match the declared hashes. --- emulators/primehack.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/emulators/primehack.yml b/emulators/primehack.yml index cc082c97..acf4a39b 100644 --- a/emulators/primehack.yml +++ b/emulators/primehack.yml @@ -6,7 +6,7 @@ upstream: "https://github.com/dolphin-emu/dolphin" profiled_date: "2026-03-26" source_commit: "53f53e0f5bad27ad62a807cb93b136d84f68777f" upstream_commit: "d8558142ead21b3fa39809c4aedb982fbfc85feb" -core_version: "1.0.8" +core_version: "1.0.9" display_name: "PrimeHack (Dolphin fork for Metroid Prime)" cores: - primehack @@ -106,7 +106,7 @@ files: hle_fallback: true sha1: "483a17ff25b68a8f18cae691da99f16beefbe370" md5: "9bef639b7426ef6948602a12b33522a8" - note: "Windows-1252 font for GC/Wii text rendering. The free alternative ships in Sys/GC/ of the 1.0.8 Windows and macOS releases, and the real one from an IPL dump is preferred" + note: "Windows-1252 font for GC/Wii text rendering. The free alternative ships in Sys/GC/ of the 1.0.9 Windows release, and the real one from an IPL dump is preferred" source_ref: "upstream Source/Core/Common/CommonPaths.h:133, source Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:131, 203-218" - name: "font_japanese.bin" @@ -117,7 +117,7 @@ files: hle_fallback: true sha1: "7fbbedcc7a1ae00414a4e9e967109cc78be1fe3b" md5: "a1d3c0e5a40f163f4fb00a5e0774c63c" - note: "Shift-JIS font for Japanese text. The free alternative ships in Sys/GC/ of the 1.0.8 Windows and macOS releases, and the real one from an IPL dump is preferred" + note: "Shift-JIS font for Japanese text. The free alternative ships in Sys/GC/ of the 1.0.9 Windows release, and the real one from an IPL dump is preferred" source_ref: "source Source/Core/Common/CommonPaths.h:135, source Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:130" # -- GBA BIOS (for GC-GBA link) -- @@ -179,7 +179,7 @@ files: size: 2880 sha1: "e6c0050b3c67ee26198488fbbe4a5d019c15b628" md5: "1f118b8735fcf40c20b38c3184eebfd9" - note: "Gecko/Ocarina cheat code handler. Shipped in Sys/ of the 1.0.8 Windows and macOS releases" + note: "Gecko/Ocarina cheat code handler. Shipped in Sys/ of the 1.0.9 Windows release" source_ref: "upstream Source/Core/Common/CommonPaths.h:155, source Source/Core/Core/GeckoCode.cpp:121" # -- Wii System Menu (WAD) -- From ef5c3df0fa04af1475c76dfdaf98c82940311342 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:30:57 +0200 Subject: [PATCH 26/49] fix: mednafen_stv BIOS also read from game dir v1.8.0 (4e899aa) searches the system directory, then the directory of the loaded game, each for the loose BIOS and then stvbios.zip (ss.cpp:1540-1582). Same files, sizes and hashes. --- emulators/mednafen_stv.yml | 50 ++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/emulators/mednafen_stv.yml b/emulators/mednafen_stv.yml index 3a12dd91..2a14160a 100644 --- a/emulators/mednafen_stv.yml +++ b/emulators/mednafen_stv.yml @@ -4,8 +4,8 @@ core_classification: community_fork source: "https://github.com/beudbeud/libretro-stv" upstream: "https://mednafen.github.io/" profiled_date: "2026-10-17" -source_commit: "2e42ef0c5d8238c170bcf182e68951c214fc6867" -core_version: "v1.2.1" +source_commit: "4e899aa2951a4714f82523d2d0f00c98599fd574" +core_version: "v1.8.0" display_name: "Sega - ST-V (Mednafen STV)" cores: - "mednafen_stv" @@ -21,24 +21,26 @@ notes: | retro_init() points filesys.path_firmware at the frontend system directory and names the BIOS of every region - (ref: libretro/libretro.cpp:615-641). The ST-V BIOS is picked by SMPC + (ref: libretro/libretro.cpp:608-634). The ST-V BIOS is picked by SMPC area: Japan, Asia NTSC, Europe PAL, and North America for every other - area (ref: mednafen/ss/ss.cpp:1436-1446, mednafen/ss/smpc.h:32-40). + area (ref: mednafen/ss/ss.cpp:1521-1531, mednafen/ss/smpc.h:32-40). A Saturn disc takes sega_101.bin for Japan and Asia NTSC and - mpr-17933.bin otherwise (ref: mednafen/ss/ss.cpp:1447-1453). + mpr-17933.bin otherwise (ref: mednafen/ss/ss.cpp:1532-1538). - The loose file is tried first and must be exactly 524288 bytes. When it - is missing or the wrong size, the same name is looked up at the root of - stvbios.zip in the system directory, then without the leading slash - (ref: mednafen/ss/ss.cpp:1455-1491). With ss.bios_sanity on, the - default, a file named like one of the five Saturn BIOS images must - match its SHA-256. The ST-V images are not in that table and only the - size check applies (ref: mednafen/ss/ss.cpp:1493-1540, 2549). + The BIOS is searched in the system directory, then in the directory of + the loaded game. In each, the loose file is tried first and must be + exactly 524288 bytes. When it is missing or the wrong size, the same + name is looked up at the root of stvbios.zip in that directory, then + without the leading slash (ref: mednafen/ss/ss.cpp:1540-1582). With + ss.bios_sanity on, the default, a file named like one of the five + Saturn BIOS images must match its SHA-256. The ST-V images are not in + that table and only the size check applies + (ref: mednafen/ss/ss.cpp:1586-1633, 2646). Saturn games that need the KoF 95 or Ultraman ROM cartridge, and the Action Replay 4M Plus cart type, open their ROM from the firmware directory under the default names below - (ref: mednafen/ss/ss.cpp:1348-1350, 1404-1412, 2542-2544). + (ref: mednafen/ss/ss.cpp:1421-1423, 1477-1485, 2639-2641). files: - name: "epr-20091.ic8" @@ -48,7 +50,7 @@ files: size: 524288 validation: [size] description: "ST-V BIOS (Japan)" - source_ref: "libretro/libretro.cpp:636, mednafen/ss/ss.cpp:1438-1439, 1462-1468" + source_ref: "libretro/libretro.cpp:629, mednafen/ss/ss.cpp:1523-1524, mednafen/ss/ss.cpp:1556-1562" - name: "epr-19854.ic8" system: "sega-stv" region: [asia-ntsc] @@ -56,7 +58,7 @@ files: size: 524288 validation: [size] description: "ST-V BIOS (Asia/Taiwan)" - source_ref: "libretro/libretro.cpp:637, mednafen/ss/ss.cpp:1440-1441, 1462-1468" + source_ref: "libretro/libretro.cpp:630, mednafen/ss/ss.cpp:1525-1526, mednafen/ss/ss.cpp:1556-1562" - name: "epr-17952a.ic8" system: "sega-stv" region: [north-america, latin-america, brazil, south-korea, asia-pal] @@ -64,7 +66,7 @@ files: size: 524288 validation: [size] description: "ST-V BIOS (North America)" - source_ref: "libretro/libretro.cpp:638, mednafen/ss/ss.cpp:1444-1445, 1462-1468" + source_ref: "libretro/libretro.cpp:631, mednafen/ss/ss.cpp:1529-1530, mednafen/ss/ss.cpp:1556-1562" note: "Used for every SMPC area other than Japan, Asia NTSC and Europe PAL." - name: "epr-17954a.ic8" system: "sega-stv" @@ -73,14 +75,14 @@ files: size: 524288 validation: [size] description: "ST-V BIOS (Europe)" - source_ref: "libretro/libretro.cpp:639, mednafen/ss/ss.cpp:1442-1443, 1462-1468" + source_ref: "libretro/libretro.cpp:632, mednafen/ss/ss.cpp:1527-1528, mednafen/ss/ss.cpp:1556-1562" - name: "stvbios.zip" system: "sega-stv" category: bios_zip required: false description: "ST-V BIOS archive" - source_ref: "mednafen/ss/ss.cpp:1472-1491" - note: "Read only when the loose BIOS file is missing or not 524288 bytes. The member is found by the BIOS file name, and its size is not checked." + source_ref: "mednafen/ss/ss.cpp:1546-1548, mednafen/ss/ss.cpp:1567-1582" + note: "Read only when the loose BIOS file in the same directory is missing or not 524288 bytes. The system directory comes before the directory of the loaded game. The member is found by the BIOS file name, and its size is not checked." contents: - name: "epr-20091.ic8" - name: "epr-19854.ic8" @@ -94,7 +96,7 @@ files: sha256: "dcfef4b99605f872b6c3b6d05c045385cdea3d1b702906a0ed930df7bcb7deac" validation: [size, sha256] description: "Saturn BIOS (Japan)" - source_ref: "libretro/libretro.cpp:640, mednafen/ss/ss.cpp:1449-1450, 1507, 1520-1521" + source_ref: "libretro/libretro.cpp:633, mednafen/ss/ss.cpp:1534-1535, mednafen/ss/ss.cpp:1600, mednafen/ss/ss.cpp:1613-1614" - name: "mpr-17933.bin" system: "sega-saturn" region: [north-america, latin-america, brazil, south-korea, asia-pal, europe, oceania] @@ -103,22 +105,22 @@ files: sha256: "96e106f740ab448cf89f0dd49dfbac7fe5391cb6bd6e14ad5e3061c13330266f" validation: [size, sha256] description: "Saturn BIOS (North America/Europe)" - source_ref: "libretro/libretro.cpp:641, mednafen/ss/ss.cpp:1451-1452, 1509, 1520-1521" + source_ref: "libretro/libretro.cpp:634, mednafen/ss/ss.cpp:1536-1537, mednafen/ss/ss.cpp:1602, mednafen/ss/ss.cpp:1613-1614" - name: "mpr-18811-mx.ic1" system: "sega-saturn" required: false description: "The King of Fighters '95 ROM cartridge" - source_ref: "mednafen/ss/ss.cpp:1348, 1404-1412, 2542" + source_ref: "mednafen/ss/ss.cpp:1421, mednafen/ss/ss.cpp:1477-1485, mednafen/ss/ss.cpp:2639" note: "Opened only for the game that needs the cart, and that game does not start without it." - name: "mpr-19367-mx.ic1" system: "sega-saturn" required: false description: "Ultraman ROM cartridge" - source_ref: "mednafen/ss/ss.cpp:1349, 1404-1412, 2543" + source_ref: "mednafen/ss/ss.cpp:1422, mednafen/ss/ss.cpp:1477-1485, mednafen/ss/ss.cpp:2640" note: "Opened only for the game that needs the cart, and that game does not start without it." - name: "satar4mp.bin" system: "sega-saturn" required: false description: "Action Replay 4M Plus firmware" - source_ref: "mednafen/ss/ss.cpp:1350, 1404-1412, 2544" + source_ref: "mednafen/ss/ss.cpp:1423, mednafen/ss/ss.cpp:1477-1485, mednafen/ss/ss.cpp:2641" note: "Opened only when the Action Replay 4M Plus cart type is selected." From e32b8194006628298cbc5704cf3936476d73481c Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:36:53 +0200 Subject: [PATCH 27/49] feat: supermodel-dojo Pro-1000 set, new releases Pin d409fe7, the commit of the v0.3a-20261022-git-d409fe7 Supermodel Dojo release, built from the dojo branch. The branch merges trzy at 98fcbff, which adds Real3D Pro-1000 emulation: pro1000.zip (cpu_rom, init_rom) and the optional Assets/3dlogo.cmem and .pmem. Games.xml now holds 64 sets. The launcher in Frontend/ is replaced by an in-emulator GUI, and ROMs/ and Replays/ are path types on every platform. --- emulators/supermodel-dojo.yml | 119 +++++++++++++++++++++++----------- 1 file changed, 80 insertions(+), 39 deletions(-) diff --git a/emulators/supermodel-dojo.yml b/emulators/supermodel-dojo.yml index 87694c6b..80fd4d8e 100644 --- a/emulators/supermodel-dojo.yml +++ b/emulators/supermodel-dojo.yml @@ -5,71 +5,82 @@ source: "https://github.com/blueminder/supermodel-dojo" upstream: "https://github.com/trzy/Supermodel" author: "blueminder" profiled_date: "2026-08-12" -source_commit: "ff8cde225298fe5c4ad47fba3c581b2cd19ffc41" -upstream_commit: "77d28eec84a5ededaa23bb31bc74db631cbe5530" -core_version: "dojo-preview6" +source_commit: "d409fe784b8328d798098708adc760900bcc6937" +upstream_commit: "98fcbff223e23b1530c8f899aca2fc4fd5663ab4" +core_version: "v0.3a-20261022-git-d409fe7" display_name: "Sega - Model 3 (Supermodel Dojo)" verification: existence cores: - supermodel-dojo systems: - sega-model3 + - real3d-pro1000 mode: standalone notes: | Fork of Supermodel adding delay based netplay, session replay with mid replay - takeover, a training mode, and a launcher binary built from Frontend/. The + takeover, a training mode, and an in-emulator GUI that lists the sets, the + replays and the settings when the binary starts without arguments. The emulator side is upstream merged forward: the dojo branch takes trzy/Supermodel - at 77d28ee of 2026-05-28 through merge 627f023, and the commits after it are - launcher fixes. The two repositories are not linked on GitHub, so the pin is - read from the merge itself, whose second parent 77d28ee resolves in both trees - while the first does not. - ref: README.md:4-20, Makefiles/Rules.inc:179-186 + at 98fcbff of 2026-10-20 through merge ab1ecae, and the commits after it are + netplay, replay and release changes. The two repositories are not linked on + GitHub, so the pin is read from the merge itself, whose second parent 98fcbff + resolves in both trees. + ref: README.md:3-20, Src/OSD/SDL/Main.cpp:2565-2597 Windows and macOS return relative names, Config/, Assets/, NVRAM/, Saves/, - resolved against the working directory, which is where the release archive puts - them and where ES-DE starts the process. Linux uses the working directory when - no home directory resolves, $HOME/.supermodel-dojo/ when that directory - exists, otherwise $HOME/.config/supermodel-dojo/Config and + Replays/, ROMs/, resolved against the working directory, which is where the + release archive puts them and where ES-DE starts the process. Linux uses the + working directory when no home directory resolves, $HOME/.supermodel-dojo/ + when that directory exists, otherwise $HOME/.config/supermodel-dojo/Config and $HOME/.local/share/supermodel-dojo/ under the XDG variables, and falls back to the Config/Games.xml and Assets/ sitting next to the binary when the home copy - is absent. Replays/ is a path type there and a working directory folder on Windows. - ref: Src/OSD/Windows/FileSystemPath.cpp:28-56, Src/OSD/OSX/FileSystemPath.cpp:28-54, - Src/OSD/Unix/FileSystemPath.cpp:63-77, 127-138, 141-195, Src/Dojo/Replay.cpp:24-30, - es-de resources/systems/windows/es_systems.xml:171 + is absent. ROMs/ is the default ROMDirectory, where the GUI looks for + .zip. + ref: Src/OSD/Windows/FileSystemPath.cpp:28-60, Src/OSD/OSX/FileSystemPath.cpp:28-58, + Src/OSD/Unix/FileSystemPath.cpp:63-77, 130-141, 144-198, Src/Dojo/Replay.cpp:28-31, + Src/OSD/SDL/Main.cpp:1796, es-de resources/systems/windows/es_systems.xml:171 ROM sets are MAME format per game archives identified by the CRC32 values in - Games.xml, 63 sets at this revision. A parent set holds the ROMs a regional + Games.xml, 64 sets at this revision. A parent set holds the ROMs a regional variant reuses, a relation between versions of one game rather than a shared BIOS: a split child archive makes the loader open .zip from the same directory. Each Model 3 board carries its own program, video, sound and drive board ROMs, so no system ROM is read outside those archives. - ref: Config/Games.xml, Src/GameLoader.cpp:325-560, Src/GameLoader.cpp:979-1010 + ref: Config/Games.xml, Src/GameLoader.cpp:371-610, Src/GameLoader.cpp:1029-1060 + + Games.xml also declares the set pro1000, the Real3D Pro-1000 image generator, + whose cpu_rom and init_rom regions are the flash images of the Pro-1000 SDK + update. The machine refuses to start without either region. A scsi_rom region + is optional, a synthetic image is built when it is absent, and that image takes + the logo model from Assets/ when both 3dlogo files are there. + ref: Config/Games.xml:1404-1428, Src/Pro1000/Pro1000.cpp:2128-2160, + Src/OSD/SDL/Main.cpp:2737-2740 The emulator writes and reads back its own Supermodel.ini, generated from the built in Dojo defaults whenever it is absent, plus NVRAM/.nv, Saves/.st and Replays/_.supr with a .st0 sidecar when the session starts from a save state. - ref: Src/OSD/SDL/Main.cpp:1572-1592, 2425, 713-741, 775-798, - Src/OSD/DojoConfigFile.h:31, Src/Dojo/Replay.cpp:19-50 + ref: Src/OSD/SDL/Main.cpp:1677-1697, 2568, 724-752, 786-809, + Src/OSD/DojoConfigFile.h:31, Src/Dojo/Replay.cpp:23-51 Two reads take a path the user chooses and have no fixed name: the MP3 tracks named inside Music.xml, and external GLSL vertex and fragment shaders for the legacy 3D engine, whose config keys are empty by default so the built in shader source is compiled instead. - ref: Src/Sound/MPEG/MpegAudio.cpp:71-86, Src/OSD/SDL/Main.cpp:1692-1693, - Src/Graphics/Shader.cpp:93-99 + ref: Src/Sound/MPEG/MpegAudio.cpp:71-86, Src/OSD/SDL/Main.cpp:1800-1801, + Src/Graphics/Shader.cpp:100-106 - The repository publishes two release trains. The Dojo builds carry the - dojo-preview tags, Preview 6 of 2025-04-27 being the current one, and ship - supermodel.exe, the dojo.exe launcher, Assets/ and Config/. The - v0.3a--git- releases come from a workflow that fires only on the - master branch, which tracks upstream: the archive of 2026-06-25 holds Games.xml, - Music.xml and both crosshair names in its binary and none of the Dojo strings. - A build stamps its version from the commit date and short sha, and the tree - falls back to 0.3a-WIP. + The v0.3a--git- releases are built from the dojo branch and named + Supermodel Dojo. The archive of 2026-10-22 ships the supermodel binary, + Assets/, Config/Games.xml, Config/Music.xml and empty NVRAM/, ROMs/ and Saves/ + folders, plus wnaspi32.dll on Windows, the ASPI bridge that lets Pro-1000 host + programs reach the emulated machine. A build stamps its version from the commit + date and short sha, and the tree falls back to 0.3a-WIP. The older dojo-preview + tags, Preview 6 of 2025-04-27 the last, shipped a separate launcher. ref: .github/workflows/release.yml:4-5, .github/workflows/release.yml:21, - Makefiles/Rules.inc:289-291, Src/Version.h:32 + .github/workflows/release.yml:48-49, Makefiles/Rules.inc:325-327, + Src/Version.h:32 ES-DE reaches it through the SUPERMODEL-DOJO find rule, present in the Windows set alone among the seven, for the arcade, mame and model3 systems. @@ -78,14 +89,14 @@ notes: | files: - name: Games.xml - size: 152643 - sha1: 681e3362f0251d2e26e6bc2e06157c027f5f3116 + size: 152634 + sha1: bb937d4841ae039d9d5f16b33bf5ba0382e41081 path: "Config/Games.xml" required: true bundled: true description: "ROM set definitions" note: "Parsed at startup into the game database. Every ROM region, file name and CRC32 the loader matches against comes from here, so an unreadable file leaves no set to resolve and the launch returns before the emulator is built. The path is a config key, so -game-xml-file moves it." - source_ref: "source Src/OSD/SDL/Main.cpp:117, 1684, 2143, 2509-2520, source Src/GameLoader.cpp:551-561, 1016-1019, source Src/OSD/Windows/FileSystemPath.cpp:28-32" + source_ref: "source Src/OSD/SDL/Main.cpp:126, Src/OSD/SDL/Main.cpp:1789, Src/OSD/SDL/Main.cpp:2280, Src/OSD/SDL/Main.cpp:2663-2674, source Src/GameLoader.cpp:601-611, Src/GameLoader.cpp:1066-1069, source Src/OSD/Windows/FileSystemPath.cpp:28-32" - name: p1crosshair.bmp path: "Assets/p1crosshair.bmp" @@ -94,7 +105,7 @@ files: bundled: true description: "Player 1 light gun crosshair texture" note: "Both bitmaps are read on every launch whatever CrosshairStyle holds, since the load runs before the style decides anything, and a null surface aborts startup ahead of the Model 3 object. 32 bit BMP with alpha, sides a multiple of 2." - source_ref: "upstream Src/OSD/SDL/Crosshair.cpp:34-51, source Src/OSD/SDL/Main.cpp:2563-2569, source Assets/DIR.txt" + source_ref: "upstream Src/OSD/SDL/Crosshair.cpp:34-51, source Src/OSD/SDL/Main.cpp:2723-2729, source Assets/DIR.txt" - name: p2crosshair.bmp path: "Assets/p2crosshair.bmp" @@ -103,12 +114,42 @@ files: bundled: true description: "Player 2 light gun crosshair texture" note: "Read in the same call as the player 1 bitmap and equally fatal when it fails to load." - source_ref: "upstream Src/OSD/SDL/Crosshair.cpp:35, 49-51, source Src/OSD/SDL/Main.cpp:2563-2569" + source_ref: "upstream Src/OSD/SDL/Crosshair.cpp:35, 49-51, source Src/OSD/SDL/Main.cpp:2723-2729" - name: Music.xml path: "Config/Music.xml" required: false bundled: true description: "Custom MPEG music track map" - note: "Consulted only for a game with a DSB1 or DSB2 board, and skipped when the file is absent. Maps an MPEG ROM offset to an MP3 the user supplies. Shipped in the v0.3a-20260528-git-77d28ee archives and absent from dojo-preview6." - source_ref: "source Src/OSD/SDL/Main.cpp:118, 967, source Src/Sound/MPEG/MpegAudio.cpp:88-108" + note: "Consulted only for a game with a DSB1 or DSB2 board, and skipped when the file is absent. Maps an MPEG ROM offset to an MP3 the user supplies. Shipped in the v0.3a-20261022-git-d409fe7 archives, the Windows zip with CRLF line endings (sha1 4c556c3a848ef61205a53a9a73ba5e46970d445f)." + source_ref: "source Src/OSD/SDL/Main.cpp:127, Src/OSD/SDL/Main.cpp:989, source Src/Sound/MPEG/MpegAudio.cpp:88-108" + + - name: "pro1000.zip" + required: true + category: bios_zip + system: real3d-pro1000 + description: "Real3D Pro-1000 firmware set (SDK flash update, loop code 5.4, INIT ROM 54)" + note: "Loaded as the content of the pro1000 machine, the set picked by the CRC32 of its members. Required to run the Pro-1000 only, Model 3 games never read it." + source_ref: "source Config/Games.xml:1404-1428, source Src/Pro1000/Pro1000.cpp:2128-2142, source Src/GameLoader.cpp:1029-1043" + contents: + - name: "p1_p4.bin" + description: "Flash parts 1 and 4, boot stub and loop code, loaded at 0xFFF00000" + crc32: "6026a0db" + - name: "p2.bin" + description: "Flash part 2, INIT ROM, loaded at 0xFFF80000" + crc32: "945bbcf5" + + - name: "3dlogo.cmem" + path: "Assets/3dlogo.cmem" + required: false + system: real3d-pro1000 + description: "Pro-1000 SDK logo model, culling data" + note: "Read with 3dlogo.pmem into the synthetic SCSI ROM when the set has no scsi_rom region. Both files or neither, one alone is rejected with an error. The .pmem size must equal the polygon word count in the .cmem header, so both come from one model. The machine boots without them." + source_ref: "source Src/Pro1000/SyntheticSCSIROM.cpp:102-127, source Src/Pro1000/SyntheticSCSIROM.cpp:159-163, source Src/Pro1000/SyntheticSCSIROM.cpp:232" + + - name: "3dlogo.pmem" + path: "Assets/3dlogo.pmem" + required: false + system: real3d-pro1000 + description: "Pro-1000 SDK logo model, polygon data" + source_ref: "source Src/Pro1000/SyntheticSCSIROM.cpp:104-106, source Src/Pro1000/SyntheticSCSIROM.cpp:119-127, source Src/Pro1000/SyntheticSCSIROM.cpp:159-163" From 864c986c8a433ab44c87e028844d1810dc52814a Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:47:20 +0200 Subject: [PATCH 28/49] feat: reprofile flycast-dojo on the dojo 7.8 line The pin sat on master, the Dojo 6 line, while the releases are tagged on the dojo branch (flyinghead f13d7ad plus the Dojo commits). At dojo-7.8 (745815c): UseReios defaults to on, the boot ROM and flash logic lives in hw/flashrom/nvmem.cpp, dc_nvmem.bin.net and the netplay reios override are gone, font.bin is a compiled-in resource, BIOS ROMs are matched by CRC32 then name, airlbios.zip is read by the two Airline Pilots sets, and System SP (segasp.zip) is a platform. naomi.zip and naomi2.zip gain the g, b, Korea and multi-region members. --- emulators/flycast-dojo.yml | 297 ++++++++++++++++++++++++------------- 1 file changed, 194 insertions(+), 103 deletions(-) diff --git a/emulators/flycast-dojo.yml b/emulators/flycast-dojo.yml index b72fca33..125257a1 100644 --- a/emulators/flycast-dojo.yml +++ b/emulators/flycast-dojo.yml @@ -3,11 +3,12 @@ type: standalone core_classification: enhanced_fork source: "https://github.com/blueminder/flycast-dojo" upstream: "https://github.com/flyinghead/flycast" -source_commit: "d0e47e572b1e7b355e88bda8308c89d0c5156cbf" -upstream_commit: "a172e0001351dfbc49b86860a13d5390b1c493fe" +source_branch: "dojo" +source_commit: "745815c929fca4a893be28c99351b44d984b6642" +upstream_commit: "f13d7ad2dcf141f59a999090dbc0f78be196e665" logo: "https://raw.githubusercontent.com/blueminder/flycast-dojo/master/shell/linux/flycast-dojo.png" -profiled_date: "2026-08-08" -core_version: "dojo-7-preview4" +profiled_date: "2026-10-23" +core_version: "dojo-7.8" display_name: "Sega - Dreamcast/Naomi (Flycast Dojo)" cores: - flycast-dojo @@ -17,70 +18,78 @@ systems: - sega-naomi - sega-naomi2 - sega-atomiswave + - sega-systemsp mode: standalone verification: existence notes: | Fork of Flycast adding rollback and delay netplay, a lobby, spectating, - replay recording and a training mode. + replay recording and a training mode. The Dojo 7 releases are tagged on the + dojo branch, which carries flyinghead/flycast up to f13d7ad of 2024-05-11 + with the Dojo commits on top. The master branch is the older Dojo 6 line. + The build names itself with git describe, so the version string is the tag. + ref: .github/workflows/build-and-release.yml:4-6, .github/workflows/build-and-release.yml:27 Every file below is read from the data directory, flat, with no subfolder. - The directory is /data on Windows, $XDG_DATA_HOME/flycast-dojo or - $HOME/.local/share/flycast-dojo on Linux, /flycast-dojo/data on Switch. - $FLYCAST_ROOT overrides the root, $FLYCAST_BIOS_PATH adds search paths, - and ContentPath entries are searched after the data directory. - ref: core/linux-dist/main.cpp:157-365, core/windows/winmain.cpp:245-266, - core/stdclass.cpp:78-97 + The user data directory is /data on Windows, + $XDG_DATA_HOME/flycast-dojo or $HOME/.local/share/flycast-dojo on Linux, + the data/ folder of $HOME/.flycast or ~/Library/Application Support/Flycast + on macOS, and /flycast-dojo/data on Switch. A missing file is then looked up + in the system data directories (on Linux $XDG_DATA_DIRS or /usr/local/share + and /usr/share, each with flycast-dojo appended, every $FLYCAST_BIOS_PATH + entry, ./ and data/), then in the directory of the loaded game. Boot ROMs, + flash and arcade BIOS archives are also searched in every ContentPath entry. + ref: core/linux-dist/main.cpp:148-178, 255-296, 337-344, + core/windows/winmain.cpp:77-97, + shell/apple/emulator-osx/emulator-osx/osx-main.mm:108-137, + core/stdclass.cpp:83-105, core/oslib/oslib.cpp:52-81, 88-103 - The boot ROM prefix follows the platform (core/hw/holly/sb_mem.cpp:27-42): + The boot ROM prefix follows the platform (core/hw/flashrom/nvmem.cpp:35-50): Dreamcast -> dc_ NAOMI -> naomi_ NAOMI 2 -> naomi2_ Atomiswave -> aw_ - Boot ROM search pattern (sb_mem.cpp:254,269): + System SP -> no prefix + Boot ROM search pattern (core/hw/flashrom/nvmem.cpp:256-272): {prefix}boot.bin, {prefix}boot.bin.bin, {prefix}bios.bin, {prefix}bios.bin.bin - Flash search takes a single name, {prefix}nvmem.bin (sb_mem.cpp:214), or - {prefix}nvmem.bin.net once Dojo mode is on (sb_mem.cpp:195). - The aw_ prefix never reaches a filename: sb_mem.cpp:267 skips the boot ROM - search on Atomiswave, whose BIOS comes from awbios.zip, and its flash - follows the per-game arcade path (sb_mem.cpp:216). + Flash search takes a single name, {prefix}nvmem.bin, on Dreamcast only. The + arcade platforms keep their flash under the per-game save path, and when it + is absent the NAOMI and Atomiswave defaults compiled into the binary are + used for the games that have one (core/hw/flashrom/nvmem.cpp:214-254). + The aw_ prefix never reaches a filename: the boot ROM search is skipped on + Atomiswave, whose BIOS comes from awbios.zip. Arcade BIOS archives are opened as .zip, then .7z - (core/hw/naomi/naomi_cart.cpp:69-71). Each ROM inside is looked up by CRC - then by filename. The crc field of every BIOS blob is left at zero, so the - filename decides. No hash is checked on an archive. + (core/hw/naomi/naomi_cart.cpp:57-75). Each ROM is looked up by CRC32 in + the game archive, its parent and the BIOS archive, then by file name in + the same order, and the blob of the configured region is taken, else the + first one listed. awbios declares no CRC32, so its member is found by name. + No hash is checked on an archive. A game with no bios field reads naomi.zip + and runs from the flat naomi_boot.bin when the archive is missing. A game + that names a BIOS aborts without it (core/hw/naomi/naomi_cart.cpp:190-206). - NAOMI 2 is a platform of its own here: naomi_cart_GetPlatform returns - DC_PLATFORM_NAOMI2 for any game whose bios field is naomi2 - (naomi_cart.cpp:646-657), which selects the naomi2_ prefix and naomi2.zip. + NAOMI 2 and System SP are platforms of their own: naomi_cart_GetPlatform + returns DC_PLATFORM_NAOMI2 for a game whose bios field is naomi2 and + DC_PLATFORM_SYSTEMSP for segasp (core/hw/naomi/naomi_cart.cpp:785-806). - Under netplay, match playback or match recording the Dreamcast boot ROM is - skipped and reios is forced, so both sides start from the same state. - Product numbers T0019M and T-31101N are the two exceptions that keep the - real BIOS (sb_mem.cpp:237-259). + UseReios defaults to on, so the Dreamcast boots through reios and reads + dc_boot.bin only when HLE BIOS is turned off, to start the BIOS menu + without a disc, or for the product ids that force the real BIOS + (core/cfg/option.cpp:127, core/emulator.cpp:262-279, 502-526). - BIOS[] also declares airlbios and naomigd. No entry of Games[] carries - either name in its bios field and loadBios is only ever called with that - field or the literal naomi, so neither archive is opened. The Airline - Pilots sets use the naomi BIOS (naomi_roms.cpp:821-828,854-862). + The release archives hold the binary and its libraries alone. The default + arcade flash images, the on-screen button sheet and the reios font are + compiled in as resources. + ref: CMakeLists.txt:966-1001, .github/workflows/build-and-release.yml:56, + .github/workflows/build-and-release.yml:71-72 - flycast_roms.json ships beside the binary and lists an md5 for naomi.zip, - naomi2.zip and awbios.zip. The only function reading them, CompareBIOS, - has no live caller (DojoFile.cpp:228-242, DojoGui.cpp:1314,1369). - - Distributed with the emulator and fetched at build time: data/default.zip - and the per-game .nvmem/.eeprom/.nvmem2 netplay files from - flycast-netplay-nvmem, data/game_values/*.json from - flycast-dojo-game-values, training/*.lua from flycast-dojo-training, and - flycast_roms.json. - ref: CMakeLists.txt:1787-1834, .github/workflows/c-cpp.yml:171-192, - shell/linux/make-appimage.sh:136-149 - - Also read but never user supplied: buttons.png overrides an on-screen - button sheet compiled into the binary (core/rend/osd.cpp:152-171), - mappings/*.cfg are written by the input configuration screen - (core/input/mapping.cpp:382-445), and flycast.lua is a user script - (core/lua/lua.cpp:746-761). + Also read but never user supplied: buttons.png overrides the compiled in + button sheet (core/rend/osd.cpp:155-174), mappings/*.cfg are written by the + input configuration screen (core/input/mapping.cpp:401, 461-463), + flycast.lua is a user script (core/lua/lua.cpp:750-760), and the training + mode runs training/cvs2.lua or training/mvsc2.lua from the config directory + for those two games, otherwise training/.lua from the data directory + (core/dojo/dojo.cpp:287-319). files: # ------------------------------------------------------- @@ -93,30 +102,16 @@ files: hle_fallback: true min_size: 2097152 validation: [size] - note: "Boot ROM. reios takes over when it is absent, and is forced under netplay, match playback and match recording. Read fails below 2 MB." - source_ref: "source core/hw/holly/sb_mem.cpp:269, source core/emulator.cpp:566-569, source core/hw/flashrom/flashrom.cpp:23-33" + note: "Boot ROM. reios runs by default and when it is absent. Read when HLE BIOS is off, for the product ids that force the real BIOS, and to boot the BIOS menu without a disc, which fails without it. Read fails below 2 MB." + source_ref: "source core/hw/flashrom/nvmem.cpp:256-272, source core/emulator.cpp:502-526, source core/hw/flashrom/flashrom.cpp:21-33" - name: dc_nvmem.bin system: sega-dreamcast required: false min_size: 131072 validation: [size] - note: "Flash memory. Created and filled with factory settings when absent." - source_ref: "source core/hw/holly/sb_mem.cpp:214, source core/hw/holly/sb_mem.cpp:111-187" - - - name: dc_nvmem.bin.net - system: sega-dreamcast - required: false - min_size: 131072 - validation: [size] - note: "Flash memory used once Dojo mode is enabled, keeping netplay settings apart from local ones. Absent, the emulator logs that the flash is missing and creates it: the factory partition is rewritten, the user partition erased and ISP blocks and a random console id seeded (core/hw/flashrom/flashrom.h:494-524). Nothing distributed seeds it, and SaveRomFiles writes dc_nvmem.bin, never this name (core/hw/holly/sb_mem.cpp:279-286)." - source_ref: "source core/hw/holly/sb_mem.cpp:189-230" - - - name: font.bin - system: sega-dreamcast - required: false - note: "System font served by the reios font syscall. A built-in font is used when absent." - source_ref: "source core/reios/reios.cpp:741-764, source core/oslib/oslib.cpp:195-198" + note: "Flash memory. Created and filled with factory settings when absent, and written back under this name." + source_ref: "source core/hw/flashrom/nvmem.cpp:214-222, source core/hw/flashrom/nvmem.cpp:120-197, source core/hw/flashrom/nvmem.cpp:274-284" # ------------------------------------------------------- # Sega NAOMI @@ -128,78 +123,123 @@ files: min_size: 2097152 validation: [size] note: "Flat boot ROM. Games whose bios field is null run from it when naomi.zip is missing." - source_ref: "source core/hw/holly/sb_mem.cpp:269, source core/hw/naomi/naomi_cart.cpp:202-207" + source_ref: "source core/hw/flashrom/nvmem.cpp:256-272, source core/hw/naomi/naomi_cart.cpp:190-206" - name: naomi.zip system: sega-naomi required: true category: bios_zip - note: "System BIOS archive. 89 game entries name it and abort without it." - source_ref: "source core/hw/naomi/naomi_roms.cpp:84-140, upstream core/hw/naomi/naomi_cart.cpp:194-208" + note: "System BIOS archive. 102 game entries name it and abort without it, and the 131 entries with no bios field read it too." + source_ref: "source core/hw/naomi/naomi_roms.cpp:83-141, source core/hw/naomi/naomi_cart.cpp:190-206" contents: - name: epr-21576h.ic27 description: Japan size: 2097152 - - name: epr-21577h.ic27 - description: USA + crc32: "d4895685" + - name: epr-21576g.ic27 + description: Japan size: 2097152 + crc32: "d2a1c6bf" - name: epr-21578h.ic27 description: Export size: 2097152 + crc32: "7b452946" + - name: epr-21578g.ic27 + description: Export + size: 2097152 + crc32: "55413214" + - name: epr-21577h.ic27 + description: USA + size: 2097152 + crc32: "fdf17452" + - name: epr-21577g.ic27 + description: USA + size: 2097152 + crc32: "25f64af7" - name: epr-21579d.ic27 description: Korea size: 2097152 + crc32: "33513691" + - name: epr-21576h_multi.ic27 + description: "Multi-region, listed for the Korea region" + size: 2097152 + crc32: "cce01f1f" + + - name: airlbios.zip + system: sega-naomi + required: false + category: bios_zip + note: "Airline Pilots Deluxe. Required by alpilot and alpilotj." + source_ref: "source core/hw/naomi/naomi_roms.cpp:29-37, source core/hw/naomi/naomi_roms.cpp:932, 964" + contents: + - name: epr-21802.ic27 + description: Export + size: 2097152 + crc32: "a77c6b1c" + - name: epr-21801.ic27 + description: USA + size: 2097152 + crc32: "a21bef24" - name: f355bios.zip system: sega-naomi required: false category: bios_zip note: "Ferrari F355 Challenge twin. Required by f355twin, f355twinp and f355twn2." - source_ref: "source core/hw/naomi/naomi_roms.cpp:47-54, source core/hw/naomi/naomi_roms.cpp:1689, 1725, 1761" + source_ref: "source core/hw/naomi/naomi_roms.cpp:46-56, source core/hw/naomi/naomi_roms.cpp:1843, 1883, 1923" contents: - - name: epr-22849.ic27 - description: Japan - size: 2097152 - - name: epr-22850.ic27 - description: USA - size: 2097152 - name: epr-22851.ic27 description: Export size: 2097152 + crc32: "62483677" + - name: epr-22850.ic27 + description: USA + size: 2097152 + crc32: "28aa539d" + - name: epr-22849.ic27 + description: Japan + size: 2097152 + crc32: "121e009c" - name: f355dlx.zip system: sega-naomi required: false category: bios_zip note: "Ferrari F355 Challenge deluxe. Required by f355." - source_ref: "source core/hw/naomi/naomi_roms.cpp:56-70, source core/hw/naomi/naomi_roms.cpp:1645" + source_ref: "source core/hw/naomi/naomi_roms.cpp:57-71, source core/hw/naomi/naomi_roms.cpp:1797" contents: - - name: epr-21862.ic27 - description: Japan - size: 2097152 - - name: epr-21863.ic27 - description: USA - size: 2097152 - name: epr-21864.ic27 description: Export size: 2097152 + crc32: "12ed7c66" + - name: epr-21863.ic27 + description: USA + size: 2097152 + crc32: "0615a4d1" + - name: epr-21862.ic27 + description: Japan + size: 2097152 + crc32: "1f630716" - name: hod2bios.zip system: sega-naomi required: false category: bios_zip note: "House of the Dead 2. Required by hotd2, hotd2o, hotd2e and hotd2p." - source_ref: "source core/hw/naomi/naomi_roms.cpp:72-82, source core/hw/naomi/naomi_roms.cpp:2003, 2042, 2081, 2120" + source_ref: "source core/hw/naomi/naomi_roms.cpp:72-82, source core/hw/naomi/naomi_roms.cpp:2170, 2209, 2248, 2287" contents: - - name: epr-21329.ic27 - description: Japan - size: 2097152 - - name: epr-21330.ic27 - description: USA - size: 2097152 - name: epr-21331.ic27 description: Export size: 2097152 + crc32: "065f8500" + - name: epr-21330.ic27 + description: USA + size: 2097152 + crc32: "9e3bfa1b" + - name: epr-21329.ic27 + description: Japan + size: 2097152 + crc32: "d99e5b9b" # ------------------------------------------------------- # Sega NAOMI 2 @@ -210,25 +250,48 @@ files: required: false min_size: 2097152 validation: [size] - note: "Flat boot ROM for the NAOMI 2 platform." - source_ref: "source core/hw/holly/sb_mem.cpp:35-36, 269" + note: "Flat boot ROM for the NAOMI 2 platform. Every NAOMI 2 game names naomi2 in its bios field, so naomi2.zip is still required and replaces it." + source_ref: "source core/hw/flashrom/nvmem.cpp:43-44, 256-272" - name: naomi2.zip system: sega-naomi2 required: true category: bios_zip - note: "System BIOS archive. All 43 NAOMI 2 game entries name it and abort without it." - source_ref: "source core/hw/naomi/naomi_roms.cpp:166-172, source core/hw/naomi/naomi_cart.cpp:646-657" + note: "System BIOS archive. All 45 NAOMI 2 game entries name it and abort without it." + source_ref: "source core/hw/naomi/naomi_roms.cpp:142-162, source core/hw/naomi/naomi_cart.cpp:785-806" contents: - name: epr-23605c.ic27 description: Japan size: 2097152 + crc32: "297ea6ed" + - name: epr-23605b.ic27 + description: Japan + size: 2097152 + crc32: "3a3242d4" - name: epr-23607c.ic27 description: USA size: 2097152 + crc32: "750e254b" + - name: epr-23607b.ic27 + description: USA + size: 2097152 + crc32: "f308c5e9" - name: epr-23608c.ic27 description: Export size: 2097152 + crc32: "6ef1dd8e" + - name: epr-23608b.ic27 + description: Export + size: 2097152 + crc32: "a554b1e3" + - name: epr-23609b.ic27 + description: Korea + size: 2097152 + crc32: "99e3751f" + - name: epr-23605c_multi.ic27 + description: "Multi-region, listed for the Korea region" + size: 2097152 + crc32: "353fdbcd" # ------------------------------------------------------- # Sammy Atomiswave @@ -238,11 +301,32 @@ files: required: true category: bios_zip note: "System BIOS archive. All 34 Atomiswave game entries name it and abort without it." - source_ref: "source core/hw/naomi/naomi_roms.cpp:38-45, source core/hw/naomi/naomi_cart.cpp:194-208" + source_ref: "source core/hw/naomi/naomi_roms.cpp:38-45, source core/hw/naomi/naomi_cart.cpp:190-206" contents: - name: bios0.ic23 size: 131072 + # ------------------------------------------------------- + # Sega System SP + # ------------------------------------------------------- + - name: segasp.zip + system: sega-systemsp + required: true + category: bios_zip + note: "System BIOS archive. All 26 System SP game entries name it and abort without it. The USA and Export regions also take their default motherboard EEPROM from it." + source_ref: "source core/hw/naomi/naomi_roms.cpp:163-178, source core/hw/naomi/naomi_cart.cpp:124-137, source core/hw/naomi/naomi_cart.cpp:785-806" + contents: + - name: epr-24328a.ic50 + description: "Boot ROM 2.01, all regions" + size: 2097152 + crc32: "03ec3805" + - name: mb_eeprom_us.ic54s + description: USA + crc32: "4186d7ab" + - name: mb_eeprom_exp.ic54s + description: Export + crc32: "947ddfad" + # ------------------------------------------------------- # Input # ------------------------------------------------------- @@ -250,7 +334,7 @@ files: required: false category: game_data note: "SDL controller mapping database, read from the data directory then the config directory. Not part of the release archive. SDL built-in mappings are used when absent." - source_ref: "source core/sdl/sdl.cpp:183-191" + source_ref: "source core/sdl/sdl.cpp:185-191" platform_details: dreamcast: @@ -258,14 +342,14 @@ platform_details: flash_size: 131072 ram_size: 16777216 hle_available: true - source_ref: "core/emulator.cpp:436-442" + source_ref: "core/emulator.cpp:368-374" naomi: bios_size: 2097152 sram_size: 32768 ram_size: 33554432 hle_available: false - source_ref: "core/emulator.cpp:443-449" + source_ref: "core/emulator.cpp:375-381" naomi2: bios_size: 2097152 @@ -273,11 +357,18 @@ platform_details: ram_size: 33554432 eram_size: 33554432 hle_available: false - source_ref: "core/emulator.cpp:450-458" + source_ref: "core/emulator.cpp:382-389" atomiswave: bios_size: 131072 sram_size: 131072 ram_size: 16777216 hle_available: false - source_ref: "core/emulator.cpp:459-465" + source_ref: "core/emulator.cpp:390-396" + + systemsp: + bios_size: 2097152 + sram_size: 131072 + ram_size: 33554432 + hle_available: false + source_ref: "core/emulator.cpp:397-403" From c10e4b60278bb109446918e231f2adf3e78791bb Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:27:56 +0200 Subject: [PATCH 29/49] chore: bring boytacean to 0.13.2 head The pin already carried Cargo.toml version 0.13.2; HEAD only touches CI and the changelog. Prose citations now name load() at gb.rs:1377, load_boot_static at 1414 and load_boot_file at 1427. --- emulators/boytacean.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/emulators/boytacean.yml b/emulators/boytacean.yml index e2c7ac6b..c1e2a6de 100644 --- a/emulators/boytacean.yml +++ b/emulators/boytacean.yml @@ -4,8 +4,8 @@ core_classification: official_port source: "https://github.com/joamag/boytacean" upstream: "https://github.com/joamag/boytacean" profiled_date: "2026-03-23" -source_commit: "2eb66337ad1732087c26076ec5bd7d08fe9f6e93" -core_version: "0.11.5" +source_commit: "4d806d0770f117cc8e6ac0fe75b95aa9dc39fc4f" +core_version: "0.13.2" display_name: "Nintendo - Game Boy / Color (Boytacean)" cores: - boytacean @@ -19,12 +19,12 @@ notes: | Libretro: all boot ROMs compiled into binary as static byte arrays in src/data.rs. load_boot_static() copies from arrays. No filesystem access, no RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. No external files. - ref: frontends/libretro/src/core.rs:402 instance.load(true) -> src/gb.rs:1427 -> load_boot_static + ref: frontends/libretro/src/core.rs:402 instance.load(true) -> src/gb.rs:1377 -> load_boot_static at src/gb.rs:1414 Standalone (SDL): also defaults to embedded boot ROMs via load(true). User can override via --boot-rom-path CLI argument with any boot ROM - file. load_boot_file() with hardcoded ./res/boot/*.bin paths exists in - src/gb.rs:1477 but is not called from any frontend. + file (frontends/sdl/src/main.rs:1138-1143). load_boot_file() with hardcoded ./res/boot/*.bin paths exists in + src/gb.rs:1427 but is not called from any frontend. Boot ROM defaults: DmgBootix (DMG), CgbBoytacean (CGB), both open-source. From 8444f5acb927559cdc36ca0d5f9116be3694a91d Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:33:54 +0200 Subject: [PATCH 30/49] feat: follow the mame2003_plus zn rewrite Upstream replaced zn.c with the current MAME layout. The BIOS sets are now named after the board BIOS (coh1000c, coh3002c, coh1000t, coh1002m, coh1002v, coh1000a, coh1001l, coh1000w, coh1002e) and each carries its CAT702 key. Atlus, Time Warner and Raizing sets are dumped. New namcoc76.zip (Namco System 11 C76) and optional model1io.zip and model1io2.zip (Model 2 I/O boards). hiscore.dat changed, dotron.zip artwork added. --- emulators/mame2003_plus.yml | 257 +++++++++++++++++++++++++++--------- 1 file changed, 197 insertions(+), 60 deletions(-) diff --git a/emulators/mame2003_plus.yml b/emulators/mame2003_plus.yml index a9139a0e..437c0c70 100644 --- a/emulators/mame2003_plus.yml +++ b/emulators/mame2003_plus.yml @@ -5,7 +5,7 @@ source: "https://github.com/libretro/mame2003-plus-libretro" upstream: "https://www.mamedev.org" logo: "https://raw.githubusercontent.com/mamedev/mame/master/docs/source/images/MAMElogo.svg" profiled_date: "2026-03-24" -source_commit: "f073a5af73503e782ae2e01dc84d7904028e5203" +source_commit: "ffc68e38d9e6eca1b64dc8f50175b63447d37e49" core_version: "2003-Plus" display_name: "Arcade (MAME 2003-Plus)" mame_version: "0.78 (plus backports)" @@ -33,6 +33,10 @@ systems: - zn1-video-system - zn1-acclaim - zn1-atlus + - zn1-atari + - zn1-raizing + - sega-model2 + - namco-system11 - century-cvs - arcade @@ -54,8 +58,9 @@ notes: | Requires a mame2003-plus-specific romset for full CRC32/SHA1 compatibility. Neo Geo uses mame.sm1, mamelo.lo, sfix.sfx naming. PGM uses pgm_p01s.rom naming. - ZN-1/ZN-2 boards are present but most games are NOT_WORKING (incomplete PS1 - emulation in the 0.78 codebase). PGM and ST-V have partial support. + ZN-1/ZN-2 sets are named after the board BIOS (coh1000c, coh3002c, ...) and + each BIOS set carries the CAT702 key of the main board. Namco System 11 games + run the C76 BIOS from namcoc76.zip. PGM and ST-V have partial support. Data files go in {system_dir}/mame2003-plus/. Samples in samples/ subfolder, artwork in artwork/ subfolder (both per-game ZIPs). hiscore.dat is compiled @@ -69,10 +74,10 @@ files: required: false category: game_data system: arcade - sha1: "c086306096722da7f02f624e7efb447659aca1d3" - md5: "2f60c1ed69c152dea95e734979ca2ecb" - size: 131878 - source_ref: "src/hiscore.c:15,102-116,248, src/cpuexec.c:296-298" + sha1: "d41b1c32e9f5bee0cfca766a64f208dda081858b" + md5: "8be16faf51b064050359c10aa3850c27" + size: 131902 + source_ref: "src/hiscore.c:15,102-116,248, src/cpuexec.c:345-347" note: >- high score definitions, compiled into binary and spawned on first run. metadata/hiscore.dat of the core repository. The compiled copy @@ -108,7 +113,7 @@ files: # Artwork the core repository ships in metadata/artwork. artwork_load_artwork_file # opens .art inside artwork/.zip, walking the clone chain, when # the Display Artwork core option keeps its enabled default. - # ref: src/artwork.c:2242-2258, src/fileio.c:246-248, src/mame2003/core_options.c:223-236 + # ref: src/artwork.c:2242-2258, src/fileio.c:246-248, src/mame2003/core_options.c:226-239 - name: "blueshrk.zip" path: "mame2003-plus/artwork/blueshrk.zip" @@ -124,6 +129,17 @@ files: metadata/artwork of the core repository at source_commit. The core zip carries the library alone. + - name: "dotron.zip" + path: "mame2003-plus/artwork/dotron.zip" + required: false + category: game_data + system: arcade + size: 2010009 + sha1: "c6d6579ffe0f709ff7861747ba17cb2931dce1b5" + md5: "e284ec87c3d7978628c78d8031b7dd98" + description: "Discs of Tron backdrop" + source_ref: "src/artwork.c:2242-2258, src/fileio.c:246-248" + - name: "frogs.zip" path: "mame2003-plus/artwork/frogs.zip" required: false @@ -270,7 +286,7 @@ files: category: bios_zip system: igs-pgm note: "PGM system BIOS - 68K program, text tiles, samples" - source_ref: "src/drivers/pgm.c:3459-3468" + source_ref: "src/drivers/pgm.c:4305-4314" contents: - name: pgm_p01s.rom description: 68K BIOS @@ -293,7 +309,7 @@ files: category: bios_zip system: sega-stv note: "ST-V (Saturn-based arcade) BIOS, 6 region variants" - source_ref: "src/drivers/stv.c:3741-3767" + source_ref: "src/drivers/stv.c:3742-3768" contents: - name: epr19730.ic8 description: Japan @@ -322,7 +338,7 @@ files: category: bios_zip system: sega-megaplay note: "Mega Play BIOS, 2 versions" - source_ref: "src/drivers/segac2.c:5794-5804" + source_ref: "src/drivers/segac2.c:5996-6006" contents: - name: ep15294.ic2 description: Mega Play BIOS v1 @@ -339,7 +355,7 @@ files: category: bios_zip system: sega-megatech note: "Mega Tech BIOS - menu/instruction screen processor" - source_ref: "src/drivers/segac2.c:5434-5437" + source_ref: "src/drivers/segac2.c:5636-5639" contents: - name: epr12664.20 description: Mega Tech BIOS @@ -479,88 +495,217 @@ files: crc32: "d5fa95f5" # --------------------------------------------------------- - # ZN-1/ZN-2 PlayStation-based arcade boards - # Most are NOT_WORKING in mame2003-plus due to - # incomplete PS1 emulation in the 0.78 codebase + # ZN-1/ZN-2 PlayStation-based arcade boards. Each BIOS set holds + # the board BIOS and the CAT702 security key of the main board. # --------------------------------------------------------- - # Capcom ZN-1 - - name: cpzn1.zip + - name: coh1000c.zip required: true category: bios_zip system: zn1-capcom - note: "Capcom ZN-1 BIOS (PS1-based). Most games NOT_WORKING" - source_ref: "src/drivers/zn.c:1016-1018" + note: "Capcom ZN-1 BIOS" + source_ref: "src/drivers/zn.c:3473-3478, 3487-3500, 5993" contents: - - name: coh1002c.bin - description: Capcom ZN-1 BIOS + - name: "m534002c-13.ic353" + description: BIOS size: 524288 crc32: "50033af6" + sha1: "486d92ff6c7f1e54f8e0ef41cd9116eca0e10e1a" + - name: "cp01.ic652" + description: CAT702 key, main board + size: 8 + crc32: "bb7ba033" + sha1: "966f3aee5d00e1312c455f855915d621e6cb0672" - # Capcom ZN-2 - - name: cpzn2.zip + - name: coh3002c.zip required: true category: bios_zip system: zn2-capcom - note: "Capcom ZN-2 BIOS (PS1-based). Most games NOT_WORKING" - source_ref: "src/drivers/zn.c:1274-1276" + note: "Capcom ZN-2 BIOS" + source_ref: "src/drivers/zn.c:3480-3485, 3921-3934, 6014" contents: - - name: coh3002c.bin - description: Capcom ZN-2 BIOS + - name: "m534002c-59.ic353" + description: BIOS size: 524288 crc32: "e860ea8b" + sha1: "66e7e1d4e426466b8f48a2ba055a91b475569504" + - name: "cp10.ic652" + description: CAT702 key, main board + size: 8 + crc32: "7808fcef" + sha1: "3c3fb8227b05dace042dc1429b9f2355b1a15638" - # Taito FX-1 - - name: taitofx1.zip + - name: coh1000t.zip required: true category: bios_zip system: zn1-taito - note: "Taito FX-1 BIOS (PS1-based). Most games NOT_WORKING" - source_ref: "src/drivers/zn.c:1579-1581" + note: "Taito FX-1 BIOS" + source_ref: "src/drivers/zn.c:5127-5132, 5134-5136, 6101" contents: - - name: coh1002t.bin - description: Taito FX-1 BIOS + - name: "m534002c-14.ic353" + description: BIOS size: 524288 crc32: "e3f23b6e" + sha1: "e18907cf8c6ba54d96edba0a9a00487a90219e0d" + - name: "tt01.ic652" + description: CAT702 key, main board + size: 8 + crc32: "daac13e7" + sha1: "96d94f2b06fb7ecd91454969f4959a583ffb9d5a" - # Tecmo TPS - - name: tps.zip + - name: coh1002m.zip required: true category: bios_zip system: zn1-tecmo - note: "Tecmo TPS BIOS (PS1-based). Most games NOT_WORKING" - source_ref: "src/drivers/zn.c:1466-1468" + note: "Tecmo TPS BIOS" + source_ref: "src/drivers/zn.c:4662-4667, 4672-4674, 6066" contents: - - name: coh1002m.bin - description: Tecmo TPS BIOS + - name: "m534002c-61.ic353" + description: BIOS size: 524288 crc32: "69ffbcb4" + sha1: "03eb2febfab3fcde716defff291babd9392de965" + - name: "mg01.ic652" + description: CAT702 key, main board + size: 8 + crc32: "50dc8322" + sha1: "cef4011c6c06d6fce546e1db5d9fbae155eabf57" - # Video System / Taito KN - - name: sncwgltd.zip - required: false + - name: coh1002v.zip + required: true category: bios_zip system: zn1-video-system - note: "Video System KN BIOS (PS1-based). NOT_WORKING" - source_ref: "src/drivers/zn.c:1555-1557" + note: "Video System ZN-1 BIOS" + source_ref: "src/drivers/zn.c:5026-5031, 5044-5046, 6089" contents: - - name: coh1002v.bin - description: KN BIOS + - name: "coh-1002v.ic353" + description: BIOS size: 524288 crc32: "5ff165f3" + sha1: "8f59314c1093446b9bcb06d232244da6df78e206" + - name: "kn01.ic652" + description: CAT702 key, main board + size: 8 + crc32: "1ce271df" + sha1: "b01479dc75a4a8a86bee7ac7cd10af2bda332544" - # Acclaim PSX - - name: acpsx.zip + - name: coh1000a.zip required: true category: bios_zip system: zn1-acclaim - note: "Acclaim PSX BIOS (PS1-based). NOT_WORKING" - source_ref: "src/drivers/zn.c:1815-1817" + note: "Acclaim ZN-1 BIOS" + source_ref: "src/drivers/zn.c:5888-5893, 5895-5897, 6057" contents: - - name: coh1000a.bin - description: Acclaim PSX BIOS + - name: "m534002c-15.ic353" + description: BIOS size: 524288 crc32: "8d8d0764" + sha1: "7ee83d317190bb1cef2f8f01c81eaaae47150ebb" + - name: "ac01.ic652" + description: CAT702 key, main board + size: 8 + crc32: "c425eaf5" + sha1: "decf77ab50f7f58c641c3214a11647924f3a8998" + + - name: coh1001l.zip + required: true + category: bios_zip + system: zn1-atlus + note: "Atlus ZN-1 BIOS" + source_ref: "src/drivers/zn.c:5090-5095, 5097-5099, 6096" + contents: + - name: "m534002c-17.ic353" + description: BIOS + size: 524288 + crc32: "6721146b" + sha1: "9511d24bfe25eb180fb2db0835b131cb4a12730e" + - name: "at01.ic652" + description: CAT702 key, main board + size: 8 + crc32: "181668b3" + sha1: "8d2fe1facb4473cc20b4b477aaf881f9280939cf" + + - name: coh1000w.zip + required: true + category: bios_zip + system: zn1-atari + note: "Time Warner ZN-1 BIOS" + source_ref: "src/drivers/zn.c:5858-5863, 5865-5867, 6046" + contents: + - name: "msm27c402zb.ic353" + description: BIOS + size: 524288 + crc32: "45e8a4b4" + sha1: "815488d8563c85f97fbc3384ff21f08e4c88b7b7" + - name: "tw01.ic652" + description: CAT702 key, main board + size: 8 + crc32: "1cac067e" + sha1: "8e87941bfb374172628c8a37647e3a66b7166aa8" + + - name: coh1002e.zip + required: true + category: bios_zip + system: zn1-raizing + note: "Eighting / Raizing ZN-1 BIOS" + source_ref: "src/drivers/zn.c:5566-5571, 5573-5575, 6130" + contents: + - name: "m27c402cz-54.ic353" + description: BIOS + size: 524288 + crc32: "910f3a8b" + sha1: "cd68532967a25f476a6d73473ec6b6f4df2e1689" + - name: "et01.ic652" + description: CAT702 key, main board + size: 8 + crc32: "a7dd922e" + sha1: "1069c1d9015028a51a1b314cfacb014ea90aa425" + + # --------------------------------------------------------- + # Sega Model 2 I/O boards. The games load the I/O board ROM with + # ROM_LOAD_OPTIONAL and simulate the board when it is absent. + # --------------------------------------------------------- + - name: model1io.zip + required: false + category: bios_zip + system: sega-model2 + note: "Model 1 I/O board BIOS, read by Daytona USA and Desert Tank" + source_ref: "src/drivers/model2.c:3321-3324, 3432-3433, 3479-3480, 7030, 7033-7034" + contents: + - name: "epr-14869c.25" + description: I/O board Z80 program + size: 65536 + crc32: "24b68e64" + sha1: "c19d044d4c2fe551474492aa51922587394dd371" + + - name: model1io2.zip + required: false + category: bios_zip + system: sega-model2 + note: "Model 1 I/O board 2 BIOS, read by Virtua Cop" + source_ref: "src/drivers/model2.c:3326-3329, 3372-3373, 7031-7032" + contents: + - name: "epr-17181.6" + description: I/O board Z80 program + size: 65536 + crc32: "1add2b82" + sha1: "81892251d466f630a96af25bde652c20e47d7ede" + + # --------------------------------------------------------- + # Namco System 11 (namcoc76.zip) + # --------------------------------------------------------- + - name: namcoc76.zip + required: true + category: bios_zip + system: namco-system11 + note: "Namco C76 (M37702) internal BIOS, runs sound, inputs and coins" + source_ref: "src/drivers/namcos11.c:1294-1300, 2262" + contents: + - name: "c76.bin" + description: C76 internal BIOS + size: 16384 + crc32: "399faac7" + sha1: "ceb184ef0486caf715dd997101999785f67a40b8" # Century Electronics CVS - name: cvs.zip @@ -581,11 +726,3 @@ files: description: PROM size: 32 crc32: "b5221cec" - - # Atlus PSX (PSARC95) - BIOS ROM is NO_DUMP - # - name: psarc95.zip - # note: "PSARC95 BIOS is NO_DUMP (coh1002e.bin), games won't boot" - - # Atari PSX - BIOS ROM is NO_DUMP - # - name: atpsx.zip - # note: "Atari PSX BIOS is NO_DUMP (coh1000t.bin), games won't boot" From 6a2e4332474d3f4173b9b1daf480bf49f6fd9cac Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:36:46 +0200 Subject: [PATCH 31/49] chore: bring gearcoleco to 1.7.4 head Firmware search and checks unchanged, the libretro code moved by seven lines. kAdamFirmwareMetadata no longer carries a SHA-1 per role, so the two sha1 fields go: the code knows size and CRC32 only. --- emulators/gearcoleco.yml | 46 +++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/emulators/gearcoleco.yml b/emulators/gearcoleco.yml index 019a9e39..d9bc7271 100644 --- a/emulators/gearcoleco.yml +++ b/emulators/gearcoleco.yml @@ -4,8 +4,8 @@ core_classification: official_port source: "https://github.com/drhelius/Gearcoleco" upstream: "https://github.com/drhelius/Gearcoleco" profiled_date: "2026-09-17" -source_commit: "da48b1a3d4fcdc23c505f0bba68dd8ed36b489b1" -core_version: "1.7.0-7-g8d32d24" +source_commit: "23d0ec288cbe595c420001dd347560c29efa9937" +core_version: "1.7.4-24-g23d0ec2" display_name: "Coleco - ColecoVision / ADAM (Gearcoleco)" cores: - gearcoleco @@ -16,39 +16,39 @@ systems: notes: | ColecoVision and Coleco ADAM emulator by Ignacio Sanchez (drhelius). The libretro port lives in the same repository. Three firmware roles are - declared in kAdamFirmwareMetadata (src/Adam.cpp:26-42): OS-7, EOS and + declared in kAdamFirmwareMetadata (src/Adam.cpp:26-40): OS-7, EOS and SmartWriter, each with a size, a CRC32 and its accepted file names. - find_firmware() (platforms/libretro/libretro.cpp:772-833) walks the + find_firmware() (platforms/libretro/libretro.cpp:779-840) walks the frontend system directory and then its gearcoleco subdirectory - (platforms/libretro/libretro.cpp:786), trying every accepted name in each. A file whose size - differs from the role's size is skipped with a warning (platforms/libretro/libretro.cpp:805-810). + (platforms/libretro/libretro.cpp:793), trying every accepted name in each. A file whose size + differs from the role's size is skipped with a warning (platforms/libretro/libretro.cpp:812-817). Every candidate that passes is compared to the first one found: two valid-sized images with different bytes are an ambiguous role and the load - fails (platforms/libretro/libretro.cpp:819-826). CRC32 is computed after the search and only - logged when it differs from the table (platforms/libretro/libretro.cpp:866-869, 917-928). + fails (platforms/libretro/libretro.cpp:826-833). CRC32 is computed after the search and only + logged when it differs from the table (platforms/libretro/libretro.cpp:873-876, 924-935). - The machine is chosen per load (platforms/libretro/libretro.cpp:2386-2388): .ddp, .dsk, a ZIP + The machine is chosen per load (platforms/libretro/libretro.cpp:2441-2443): .ddp, .dsk, a ZIP holding an ADAM image, an .m3u playlist, no content at all, or a cartridge with the core option gearcoleco_cartridge_hardware set to ADAM start the ADAM, and any other cartridge starts the ColecoVision. The "adam" subsystem - (platforms/libretro/libretro.cpp:528-536) takes a cartridge, two disks and two data packs. + (platforms/libretro/libretro.cpp:535-543) takes a cartridge, two disks and two data packs. - ColecoVision: load_colecovision_firmware() (platforms/libretro/libretro.cpp:851-878) needs OS-7 - and retro_load_game() returns false without it (platforms/libretro/libretro.cpp:2398-2402). - It runs again on retro_reset() (platforms/libretro/libretro.cpp:2203-2204). The image goes + ColecoVision: load_colecovision_firmware() (platforms/libretro/libretro.cpp:858-885) needs OS-7 + and retro_load_game() returns false without it (platforms/libretro/libretro.cpp:2453-2457). + It runs again on retro_reset() (platforms/libretro/libretro.cpp:2258-2259). The image goes through Memory::LoadBiosFromBuffer() (src/Memory.cpp:310-319) and byte 0x69 is patched on reset, 0x32 when the cartridge is PAL and 0x3C otherwise (src/Memory.cpp:246-249). The ADAM always gets 0x3C (src/Memory.cpp:221). - ADAM: load_adam_firmware() (platforms/libretro/libretro.cpp:880-941) needs all three roles and - every ADAM entry point returns false when one is missing (libretro.cpp: - 2372-2373, 2429-2433, 2446-2447, 2530-2534). Adam::LoadFirmware() - (src/Adam.cpp:168-190) copies the three images, IsFirmwareReady() - (src/Adam.cpp:139-148) gates StartAdam() (src/GearcolecoCore.cpp:410-415). + ADAM: load_adam_firmware() (platforms/libretro/libretro.cpp:887-948) needs all three roles and + every ADAM entry point returns false when one is missing (platforms/libretro/libretro.cpp: + 2427-2428, 2484-2488, 2501-2502, 2585-2589). Adam::LoadFirmware() + (src/Adam.cpp:166-188) copies the three images, IsFirmwareReady() + (src/Adam.cpp:137-146) gates StartAdam() (src/GearcolecoCore.cpp:414-419). The MIOC maps SmartWriter over the lower 32 KiB with EOS replacing its last 8 KiB bank when the control latch selects it, and OS-7 over the first - 8 KiB in cartridge mode (src/Adam.cpp:531-555). + 8 KiB in cartridge mode (src/Adam.cpp:513-537). Save RAM, save states and IPS patches are read next to the content or in the frontend save directory. They are state the core writes, not files a @@ -62,9 +62,8 @@ files: required: true size: 8192 crc32: "3aa93ef3" - sha1: "45bedc4cbdeac66c7df59e9e599195c778d86a92" validation: [size, crc32] - source_ref: "platforms/libretro/libretro.cpp:772-833 (find_firmware), platforms/libretro/libretro.cpp:851-878 (load_colecovision_firmware), platforms/libretro/libretro.cpp:2398-2402, platforms/libretro/libretro.cpp:2203-2204, src/Adam.cpp:28-32, src/Adam.h:53, src/Memory.cpp:310-319, src/Memory.cpp:246-249" + source_ref: "platforms/libretro/libretro.cpp:779-840 (find_firmware), platforms/libretro/libretro.cpp:858-885 (load_colecovision_firmware), platforms/libretro/libretro.cpp:2453-2457, platforms/libretro/libretro.cpp:2258-2259, src/Adam.cpp:28-31, src/Adam.h:52, src/Memory.cpp:310-319, src/Memory.cpp:246-249" note: > Loaded for both machines. Any 8192-byte image is accepted, and a CRC32 other than 3aa93ef3 logs "Unknown OS-7 revision" and runs. PAL timing @@ -77,7 +76,7 @@ files: size: 8192 crc32: "05a37a34" validation: [size, crc32] - source_ref: "platforms/libretro/libretro.cpp:880-941 (load_adam_firmware), platforms/libretro/libretro.cpp:2371-2372, platforms/libretro/libretro.cpp:2428-2432, platforms/libretro/libretro.cpp:2445-2446, platforms/libretro/libretro.cpp:2529-2533, src/Adam.cpp:33-36, src/Adam.h:54, src/Adam.cpp:139-148, src/Adam.cpp:168-190, src/GearcolecoCore.cpp:410-415, src/Adam.cpp:537-540" + source_ref: "platforms/libretro/libretro.cpp:887-948 (load_adam_firmware), platforms/libretro/libretro.cpp:2426-2427, platforms/libretro/libretro.cpp:2483-2487, platforms/libretro/libretro.cpp:2500-2501, platforms/libretro/libretro.cpp:2584-2588, src/Adam.cpp:32-35, src/Adam.h:53, src/Adam.cpp:137-146, src/Adam.cpp:166-188, src/GearcolecoCore.cpp:414-419, src/Adam.cpp:519-522" note: > The 8 KiB EOS bank, the first half of the 16 KiB u22 chip. A CRC32 other than 05a37a34 logs "Unknown EOS revision" and runs. Only the ADAM @@ -90,9 +89,8 @@ files: required: true size: 32768 crc32: "58d86a2a" - sha1: "d4aec4efe1431e56fe52d83baf9118542c525255" validation: [size, crc32] - source_ref: "platforms/libretro/libretro.cpp:880-941 (load_adam_firmware), platforms/libretro/libretro.cpp:2371-2372, platforms/libretro/libretro.cpp:2428-2432, platforms/libretro/libretro.cpp:2445-2446, platforms/libretro/libretro.cpp:2529-2533, src/Adam.cpp:37-41, src/Adam.h:55, src/Adam.cpp:139-148, src/Adam.cpp:168-190, src/GearcolecoCore.cpp:410-415, src/Adam.cpp:531-540" + source_ref: "platforms/libretro/libretro.cpp:887-948 (load_adam_firmware), platforms/libretro/libretro.cpp:2426-2427, platforms/libretro/libretro.cpp:2483-2487, platforms/libretro/libretro.cpp:2500-2501, platforms/libretro/libretro.cpp:2584-2588, src/Adam.cpp:36-39, src/Adam.h:54, src/Adam.cpp:137-146, src/Adam.cpp:166-188, src/GearcolecoCore.cpp:414-419, src/Adam.cpp:513-522" note: > A CRC32 other than 58d86a2a logs "Unknown SmartWriter revision" and runs. Only the ADAM needs it: ColecoVision cartridges load without it. From 5906e55feaffcee989332653ece09f6c943619d0 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:41:55 +0200 Subject: [PATCH 32/49] feat: bring eka2l1 to the current upstream Upstream rebuilt the mediaclientaudio and scdv patch DLLs and added an epoc6 export to mediaclientaudio.dll.map. Two compatibility scripts were added, pottery_startup_fix.lua and wave_crash_fix.lua, and the first requires eka2l1.mem, now listed. The libretro fork only changed its link options. Refs into libmanager.cpp, graphics_ogl.cpp, screen.cpp and fbs.cpp are read on the standalone tree. --- emulators/eka2l1.yml | 252 ++++++++++++++++++++++++------------------- 1 file changed, 141 insertions(+), 111 deletions(-) diff --git a/emulators/eka2l1.yml b/emulators/eka2l1.yml index f34ef2d5..7e7317cb 100644 --- a/emulators/eka2l1.yml +++ b/emulators/eka2l1.yml @@ -7,8 +7,8 @@ source: upstream: "https://github.com/EKA2L1/EKA2L1" profiled_date: "2026-09-17" source_commit: - standalone: "1fcfadbff7f8b81d8c17bc82d04b0c94d16803bf" - libretro: "1c49c1bcde3853273cd520a5360bff756f872e06" + standalone: "89ea682451ae13f53372c994ae56659bc9534503" + libretro: "e39ccac46e631be7470b4f420fb8eebed9c24eca" upstream_commit: libretro: "11f5b6cd141c0884a130ee45743f1f5e17bb1783" core_version: "0.0.9" @@ -84,7 +84,7 @@ notes: | src/emu/qt/src/settings_dialog.cpp:534, src/emu/system/src/epoc.cpp:396-462, src/emu/qt/src/device_install_dialog.cpp:138, src/emu/system/src/devices.cpp:378-385, src/emu/system/src/epoc.cpp:877-884, - src/emu/qt/src/main.cpp:101-121 + src/emu/qt/src/main.cpp:106-126 The libretro core keeps everything under /eka2l1: data-storage is forced to that directory whatever config.yml carries. On retro_init, when no @@ -110,7 +110,7 @@ notes: | and creates no audio or controller driver, so the patch libraries, the Lua scripts, the MIDI banks and the controller database are not read there. Those entries carry mode standalone. - ref: src/emu/libretro/CMakeLists.txt:8-72, src/emu/libretro/src/thread.cpp:20-61, + ref: src/emu/libretro/CMakeLists.txt:8-80, src/emu/libretro/src/thread.cpp:20-61, src/emu/libretro/src/thread.cpp:87-93, src/emu/common/src/path.cpp:427-450, src/emu/system/src/epoc.cpp:1389-1410 @@ -141,24 +141,24 @@ notes: | modules from scripts/eka2l1/; the libretro recipe builds without it. Fonts the user imports live in /fonts and are added to the font store after the ROM fonts. - ref: src/emu/kernel/src/libmanager.cpp:411-415, src/emu/kernel/src/libmanager.cpp:440-443, - src/emu/kernel/src/libmanager.cpp:475-503, src/emu/kernel/src/libmanager.cpp:505-556, - src/emu/kernel/src/libmanager.cpp:558-569, src/emu/kernel/src/libmanager.cpp:586-590, - src/emu/kernel/src/libmanager.cpp:697-780, src/emu/kernel/src/libmanager.cpp:1191-1193, + ref: src/emu/kernel/src/libmanager.cpp:416-420, src/emu/kernel/src/libmanager.cpp:445-448, + src/emu/kernel/src/libmanager.cpp:480-508, src/emu/kernel/src/libmanager.cpp:510-561, + src/emu/kernel/src/libmanager.cpp:563-574, src/emu/kernel/src/libmanager.cpp:591-595, + src/emu/kernel/src/libmanager.cpp:702-785, src/emu/kernel/src/libmanager.cpp:1196-1198, src/emu/qt/src/state.cpp:179-202, - src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:264-282, + src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:281-299, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189, - src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, + src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/drivers/src/audio/backend/tinysoundfont/player_tsf.cpp:66-77, src/emu/drivers/src/audio/backend/minibae/player_minibae.cpp:86-96, src/emu/config/include/config/options.inl:72-73, src/emu/drivers/src/input/backend/emu_controller_sdl2.cpp:143-145, src/emu/config/src/panic_blacklist.cpp:27-35, src/emu/config/src/app_settings.cpp:82-114, src/emu/utils/src/panic.cpp:32-38, src/emu/scripting/src/manager.cpp:196-202, - src/emu/scripting/src/manager.cpp:230-256, src/emu/services/src/fbs/fbs.cpp:443, + src/emu/scripting/src/manager.cpp:230-256, src/emu/services/src/fbs/fbs.cpp:444, src/emu/services/src/fbs/impls/font.cpp:1185-1208, .gitlab-ci.yml:22, - src/emu/qt/CMakeLists.txt:264-278, src/emu/qt/CMakeLists.txt:289-290, - src/emu/qt/CMakeLists.txt:376-377, cmake/Symbian.cmake:20-31 + src/emu/qt/CMakeLists.txt:267-281, src/emu/qt/CMakeLists.txt:292-293, + src/emu/qt/CMakeLists.txt:379-380, cmake/Symbian.cmake:20-31 config.yml, bindings/.yml, devices.yml, the drives/ tree and libretro-content.txt are written by the emulator itself. @@ -192,7 +192,7 @@ files: required: false bundled: true description: "Export map routing audiooutputrouting.dll to the host" - source_ref: "src/emu/kernel/src/libmanager.cpp:411-415, src/emu/kernel/src/libmanager.cpp:505-556, cmake/Symbian.cmake:20-31, src/patch/CMakeLists.txt:6" + source_ref: "src/emu/kernel/src/libmanager.cpp:416-420, src/emu/kernel/src/libmanager.cpp:510-561, cmake/Symbian.cmake:20-31, src/patch/CMakeLists.txt:6" - name: audiooutputrouting_general.dll size: 845 @@ -202,7 +202,7 @@ files: required: false bundled: true description: "Patched audiooutputrouting.dll, EKA2 versions" - source_ref: "src/emu/kernel/src/libmanager.cpp:540-556, src/emu/kernel/src/libmanager.cpp:586-590, src/patch/audiooutputrouting/group/audiooutputrouting.dll.map:1" + source_ref: "src/emu/kernel/src/libmanager.cpp:545-561, src/emu/kernel/src/libmanager.cpp:591-595, src/patch/audiooutputrouting/group/audiooutputrouting.dll.map:1" - name: avkonfep_general.dll size: 7720 @@ -222,7 +222,7 @@ files: required: false bundled: true description: "FEP bridged to the host input method for EKA1, routed to from hwrfep.fep on Symbian 7.0s" - source_ref: "src/emu/kernel/src/libmanager.cpp:505-518, src/emu/kernel/src/libmanager.cpp:521-538, src/patch/avkonfep/group/hwrfep.fep.map:1, src/patch/avkonfep/group/hwrfep.fep.map:7-9, src/patch/CMakeLists.txt:5" + source_ref: "src/emu/kernel/src/libmanager.cpp:510-523, src/emu/kernel/src/libmanager.cpp:526-543, src/patch/avkonfep/group/hwrfep.fep.map:1, src/patch/avkonfep/group/hwrfep.fep.map:7-9, src/patch/CMakeLists.txt:5" - name: backlightctrl.dll.map size: 372 @@ -232,7 +232,7 @@ files: required: false bundled: true description: "Export map for backlightctrl.dll, bound to the DLL UIDs it names" - source_ref: "src/emu/kernel/src/libmanager.cpp:411-415, src/emu/kernel/src/libmanager.cpp:453-469, src/patch/CMakeLists.txt:10" + source_ref: "src/emu/kernel/src/libmanager.cpp:416-420, src/emu/kernel/src/libmanager.cpp:458-474, src/patch/CMakeLists.txt:10" - name: backlightctrl_v81a.dll size: 3624 @@ -242,7 +242,7 @@ files: required: false bundled: true description: "Patched backlightctrl.dll built for Symbian 8.1a, routed to on Symbian 6.1, 7.0s and 8.0a: the epoc81 section of the map matches no version name" - source_ref: "src/emu/kernel/src/libmanager.cpp:521-538, src/emu/kernel/src/libmanager.cpp:487-502, src/emu/common/src/types.cpp:140-141, src/patch/backlightctrl/group/backlightctrl.dll.map:1-5, src/patch/backlightctrl/group/backlightctrl.dll.map:17, src/patch/backlightctrl/group/backlightctrl.dll.map:29, src/patch/backlightctrl/group/backlightctrl.dll.map:41" + source_ref: "src/emu/kernel/src/libmanager.cpp:526-543, src/emu/kernel/src/libmanager.cpp:492-507, src/emu/common/src/types.cpp:140-141, src/patch/backlightctrl/group/backlightctrl.dll.map:1-5, src/patch/backlightctrl/group/backlightctrl.dll.map:17, src/patch/backlightctrl/group/backlightctrl.dll.map:29, src/patch/backlightctrl/group/backlightctrl.dll.map:41" - name: commdb.dll.map size: 67 @@ -252,7 +252,7 @@ files: required: false bundled: true description: "Export map for the in-ROM commdb.dll of Symbian 6" - source_ref: "src/emu/kernel/src/libmanager.cpp:411-415, src/emu/kernel/src/libmanager.cpp:453-469, src/patch/CMakeLists.txt:18" + source_ref: "src/emu/kernel/src/libmanager.cpp:416-420, src/emu/kernel/src/libmanager.cpp:458-474, src/patch/CMakeLists.txt:18" - name: commdb_v6.dll size: 3980 @@ -262,7 +262,7 @@ files: required: false bundled: true description: "Patched commdb.dll for Symbian 6" - source_ref: "src/emu/kernel/src/libmanager.cpp:521-538, src/patch/commdb/group/commdb.dll.map:1-7" + source_ref: "src/emu/kernel/src/libmanager.cpp:526-543, src/patch/commdb/group/commdb.dll.map:1-7" - name: ecam.dll.map size: 1446 @@ -272,7 +272,7 @@ files: required: false bundled: true description: "Export map for ecam.dll, the camera API" - source_ref: "src/emu/kernel/src/libmanager.cpp:411-415, src/emu/kernel/src/libmanager.cpp:505-556, src/patch/CMakeLists.txt:8" + source_ref: "src/emu/kernel/src/libmanager.cpp:416-420, src/emu/kernel/src/libmanager.cpp:510-561, src/patch/CMakeLists.txt:8" - name: ecam_general.dll size: 13727 @@ -282,7 +282,7 @@ files: required: false bundled: true description: "Patched ecam.dll, EKA2 versions" - source_ref: "src/emu/kernel/src/libmanager.cpp:540-556, src/emu/kernel/src/libmanager.cpp:586-590, src/patch/ecam/group/ecam.dll.map:1-4" + source_ref: "src/emu/kernel/src/libmanager.cpp:545-561, src/emu/kernel/src/libmanager.cpp:591-595, src/patch/ecam/group/ecam.dll.map:1-4" - name: goommonitor_general.dll size: 925 @@ -302,37 +302,37 @@ files: required: false bundled: true description: "Export map for hwrfep.fep on Symbian 7.0s, bound to the UIDs it names and served by avkonfep_v81a.dll through its source key" - source_ref: "src/emu/kernel/src/libmanager.cpp:411-415, src/emu/kernel/src/libmanager.cpp:453-469, src/emu/kernel/src/libmanager.cpp:505-518, src/patch/avkonfep/group/hwrfep.fep.map:1-9, src/patch/CMakeLists.txt:5" + source_ref: "src/emu/kernel/src/libmanager.cpp:416-420, src/emu/kernel/src/libmanager.cpp:458-474, src/emu/kernel/src/libmanager.cpp:510-523, src/patch/avkonfep/group/hwrfep.fep.map:1-9, src/patch/CMakeLists.txt:5" - name: mediaclientaudio.dll.map - size: 48712 - sha1: a2f6242f7d9e315f90d497dcd3e586117e969387 + size: 48796 + sha1: 5a3b9bfec3b993c1a2ab0be94cb8b720965ebdc4 standalone_path: patch/mediaclientaudio.dll.map mode: standalone required: false bundled: true description: "Export map for mediaclientaudio.dll, CMdaAudioPlayerUtility and friends" - source_ref: "src/emu/kernel/src/libmanager.cpp:411-415, src/emu/kernel/src/libmanager.cpp:505-556, src/patch/CMakeLists.txt:11" + source_ref: "src/emu/kernel/src/libmanager.cpp:416-420, src/emu/kernel/src/libmanager.cpp:510-561, src/patch/CMakeLists.txt:11" - name: mediaclientaudio_general.dll - size: 13424 - sha1: 6a0e1461f8668e7ddcf6a58c1032c66916c9754c + size: 14869 + sha1: eaa7d4a5247de7f0aa42fa397090496370c10769 standalone_path: patch/mediaclientaudio_general.dll mode: standalone required: false bundled: true description: "Patched mediaclientaudio.dll, EKA2 versions" - source_ref: "src/emu/kernel/src/libmanager.cpp:540-556, src/emu/kernel/src/libmanager.cpp:586-590, src/patch/mediaclientaudio/group/mediaclientaudio.dll.map:1-4" + source_ref: "src/emu/kernel/src/libmanager.cpp:545-561, src/emu/kernel/src/libmanager.cpp:591-595, src/patch/mediaclientaudio/group/mediaclientaudio.dll.map:1-4" - name: mediaclientaudio_v81a.dll - size: 22996 - sha1: 41a6cf644c3731e5b3db8025b413b9833ff8bc7a + size: 24288 + sha1: 6f208d82cfd594595ad92cea1e87a60703c61534 standalone_path: patch/mediaclientaudio_v81a.dll mode: standalone required: false bundled: true description: "Patched mediaclientaudio.dll for Symbian 8.1a and earlier EKA1 releases" - source_ref: "src/emu/kernel/src/libmanager.cpp:521-538, src/patch/mediaclientaudio/group/mediaclientaudio.dll.map:428-431" + source_ref: "src/emu/kernel/src/libmanager.cpp:526-543, src/patch/mediaclientaudio/group/mediaclientaudio.dll.map:428-431" - name: mediaclientaudioinputstream.dll.map size: 7489 @@ -342,7 +342,7 @@ files: required: false bundled: true description: "Export map for mediaclientaudioinputstream.dll, served by the mediaclientaudiostream DLLs through its source key" - source_ref: "src/emu/kernel/src/libmanager.cpp:505-518, src/patch/mediaclientaudiostream/group/mediaclientaudioinputstream.dll.map:1" + source_ref: "src/emu/kernel/src/libmanager.cpp:510-523, src/patch/mediaclientaudiostream/group/mediaclientaudioinputstream.dll.map:1" - name: mediaclientaudiostream.dll.map size: 5027 @@ -352,7 +352,7 @@ files: required: false bundled: true description: "Export map for mediaclientaudiostream.dll" - source_ref: "src/emu/kernel/src/libmanager.cpp:411-415, src/emu/kernel/src/libmanager.cpp:505-556, src/patch/CMakeLists.txt:12" + source_ref: "src/emu/kernel/src/libmanager.cpp:416-420, src/emu/kernel/src/libmanager.cpp:510-561, src/patch/CMakeLists.txt:12" - name: mediaclientaudiostream_general.dll size: 9493 @@ -362,7 +362,7 @@ files: required: false bundled: true description: "Patched mediaclientaudiostream.dll, EKA2 versions" - source_ref: "src/emu/kernel/src/libmanager.cpp:540-556, src/emu/kernel/src/libmanager.cpp:586-590, src/patch/mediaclientaudiostream/group/mediaclientaudiostream.dll.map:1" + source_ref: "src/emu/kernel/src/libmanager.cpp:545-561, src/emu/kernel/src/libmanager.cpp:591-595, src/patch/mediaclientaudiostream/group/mediaclientaudiostream.dll.map:1" - name: mediaclientaudiostream_v81a.dll size: 11608 @@ -372,7 +372,7 @@ files: required: false bundled: true description: "Patched mediaclientaudiostream.dll for Symbian 8.1a and earlier EKA1 releases" - source_ref: "src/emu/kernel/src/libmanager.cpp:521-538, src/patch/mediaclientaudiostream/group/mediaclientaudiostream.dll.map:1" + source_ref: "src/emu/kernel/src/libmanager.cpp:526-543, src/patch/mediaclientaudiostream/group/mediaclientaudiostream.dll.map:1" - name: mediaclientvideo.dll.map size: 11393 @@ -382,7 +382,7 @@ files: required: false bundled: true description: "Export map for mediaclientvideo.dll" - source_ref: "src/emu/kernel/src/libmanager.cpp:411-415, src/emu/kernel/src/libmanager.cpp:505-556, src/patch/CMakeLists.txt:13" + source_ref: "src/emu/kernel/src/libmanager.cpp:416-420, src/emu/kernel/src/libmanager.cpp:510-561, src/patch/CMakeLists.txt:13" - name: mediaclientvideo_v100.dll size: 8717 @@ -392,7 +392,7 @@ files: required: false bundled: true description: "Patched mediaclientvideo.dll, routed to from the epoc93fp1, epoc93fp2, epoc94 and epoc100 sections of the map" - source_ref: "src/emu/kernel/src/libmanager.cpp:521-538, src/patch/mediaclientvideo/group/mediaclientvideo.dll.map:1, src/patch/mediaclientvideo/group/mediaclientvideo.dll.map:168, src/patch/mediaclientvideo/group/mediaclientvideo.dll.map:335, src/patch/mediaclientvideo/group/mediaclientvideo.dll.map:502" + source_ref: "src/emu/kernel/src/libmanager.cpp:526-543, src/patch/mediaclientvideo/group/mediaclientvideo.dll.map:1, src/patch/mediaclientvideo/group/mediaclientvideo.dll.map:168, src/patch/mediaclientvideo/group/mediaclientvideo.dll.map:335, src/patch/mediaclientvideo/group/mediaclientvideo.dll.map:502" - name: mediaclientvideo_v81a.dll size: 11016 @@ -402,7 +402,7 @@ files: required: false bundled: true description: "Patched mediaclientvideo.dll for Symbian 8.0a and 8.1a" - source_ref: "src/emu/kernel/src/libmanager.cpp:521-538, src/patch/mediaclientvideo/group/mediaclientvideo.dll.map:669, src/patch/mediaclientvideo/group/mediaclientvideo.dll.map:721" + source_ref: "src/emu/kernel/src/libmanager.cpp:526-543, src/patch/mediaclientvideo/group/mediaclientvideo.dll.map:669, src/patch/mediaclientvideo/group/mediaclientvideo.dll.map:721" - name: postingsurfacefactory.dll.map size: 357 @@ -412,7 +412,7 @@ files: required: false bundled: true description: "Export map for postingsurfacefactory.dll, the video posting surface" - source_ref: "src/emu/kernel/src/libmanager.cpp:411-415, src/emu/kernel/src/libmanager.cpp:505-556, src/patch/CMakeLists.txt:14" + source_ref: "src/emu/kernel/src/libmanager.cpp:416-420, src/emu/kernel/src/libmanager.cpp:510-561, src/patch/CMakeLists.txt:14" - name: postingsurfacefactory_general.dll size: 5450 @@ -422,7 +422,7 @@ files: required: false bundled: true description: "Patched postingsurfacefactory.dll, EKA2 versions" - source_ref: "src/emu/kernel/src/libmanager.cpp:540-556, src/emu/kernel/src/libmanager.cpp:586-590, src/patch/postingsurfacefactory/group/postingsurfacefactory.dll.map:1" + source_ref: "src/emu/kernel/src/libmanager.cpp:545-561, src/emu/kernel/src/libmanager.cpp:591-595, src/patch/postingsurfacefactory/group/postingsurfacefactory.dll.map:1" - name: qjpeg.dll.map size: 71 @@ -432,7 +432,7 @@ files: required: false bundled: true description: "Replacement map for the in-ROM Qt JPEG plugin qjpeg.dll: replace and qt-plugin requirements, no export route" - source_ref: "src/emu/kernel/src/libmanager.cpp:411-415, src/emu/kernel/src/libmanager.cpp:475, src/emu/kernel/src/libmanager.cpp:558-569, src/patch/qjpeg/group/qjpeg.dll.map:1-6, src/patch/CMakeLists.txt:16" + source_ref: "src/emu/kernel/src/libmanager.cpp:416-420, src/emu/kernel/src/libmanager.cpp:480, src/emu/kernel/src/libmanager.cpp:563-574, src/patch/qjpeg/group/qjpeg.dll.map:1-6, src/patch/CMakeLists.txt:16" - name: qjpeg_general.dll size: 6997 @@ -442,7 +442,7 @@ files: required: false bundled: true description: "Qt JPEG plugin decoding on the host, loaded in place of the ROM's qjpeg.dll on EKA2 when the Qt of the ROM accepts it" - source_ref: "src/emu/kernel/src/libmanager.cpp:540-556, src/emu/kernel/src/libmanager.cpp:697-780, src/emu/kernel/src/libmanager.cpp:1191-1193, src/patch/qjpeg/group/qjpeg.dll.map:1-6" + source_ref: "src/emu/kernel/src/libmanager.cpp:545-561, src/emu/kernel/src/libmanager.cpp:702-785, src/emu/kernel/src/libmanager.cpp:1196-1198, src/patch/qjpeg/group/qjpeg.dll.map:1-6" - name: scdv.dll.map size: 1793 @@ -452,27 +452,27 @@ files: required: false bundled: true description: "Export map for scdv.dll, CFbsDrawDevice and CDirectScreenBitmap" - source_ref: "src/emu/kernel/src/libmanager.cpp:411-415, src/emu/kernel/src/libmanager.cpp:505-556, src/patch/CMakeLists.txt:7" + source_ref: "src/emu/kernel/src/libmanager.cpp:416-420, src/emu/kernel/src/libmanager.cpp:510-561, src/patch/CMakeLists.txt:7" - name: scdv_general.dll - size: 17337 - sha1: 2f63679bbd894a56772107db1d7e16092089f19f + size: 17742 + sha1: 562fcf7fa03a6467f35ed7546c370df98850fab2 standalone_path: patch/scdv_general.dll mode: standalone required: false bundled: true description: "Patched scdv.dll, EKA2 versions" - source_ref: "src/emu/kernel/src/libmanager.cpp:540-556, src/emu/kernel/src/libmanager.cpp:586-590, src/patch/scdv/group/scdv.dll.map:1-28" + source_ref: "src/emu/kernel/src/libmanager.cpp:545-561, src/emu/kernel/src/libmanager.cpp:591-595, src/patch/scdv/group/scdv.dll.map:1-28" - name: scdv_v81a.dll - size: 26356 - sha1: c886e2e5723b3044a89c1203977c84b8b37be824 + size: 26552 + sha1: 9041db96b52dd23a179e168da6fe69bd1e28f404 standalone_path: patch/scdv_v81a.dll mode: standalone required: false bundled: true description: "Patched scdv.dll for Symbian 8.1a and earlier EKA1 releases" - source_ref: "src/emu/kernel/src/libmanager.cpp:521-538, src/patch/scdv/group/scdv.dll.map:29-45" + source_ref: "src/emu/kernel/src/libmanager.cpp:526-543, src/patch/scdv/group/scdv.dll.map:29-45" - name: ssl.dll.map size: 78 @@ -482,7 +482,7 @@ files: required: false bundled: true description: "Export map for ssl.dll routed to the host TLS stack, skipped below S60v3 FP1" - source_ref: "src/emu/kernel/src/libmanager.cpp:440-443, src/patch/ssl/group/ssl.dll.map:1-4, src/patch/CMakeLists.txt:17" + source_ref: "src/emu/kernel/src/libmanager.cpp:445-448, src/patch/ssl/group/ssl.dll.map:1-4, src/patch/CMakeLists.txt:17" - name: ssl_general.dll size: 7543 @@ -492,7 +492,7 @@ files: required: false bundled: true description: "Patched ssl.dll, S60v3 FP1 and later" - source_ref: "src/emu/kernel/src/libmanager.cpp:540-556, src/emu/kernel/src/libmanager.cpp:586-590, src/patch/ssl/group/ssl.dll.map:6-9" + source_ref: "src/emu/kernel/src/libmanager.cpp:545-561, src/emu/kernel/src/libmanager.cpp:591-595, src/patch/ssl/group/ssl.dll.map:6-9" - name: vibractrl.dll.map size: 317 @@ -502,7 +502,7 @@ files: required: false bundled: true description: "Export map for vibractrl.dll, bound to the DLL UIDs it names" - source_ref: "src/emu/kernel/src/libmanager.cpp:411-415, src/emu/kernel/src/libmanager.cpp:453-469, src/patch/CMakeLists.txt:9" + source_ref: "src/emu/kernel/src/libmanager.cpp:416-420, src/emu/kernel/src/libmanager.cpp:458-474, src/patch/CMakeLists.txt:9" - name: vibractrl_v81a.dll size: 3716 @@ -512,7 +512,7 @@ files: required: false bundled: true description: "Patched vibractrl.dll for Symbian 8.1a and earlier EKA1 releases" - source_ref: "src/emu/kernel/src/libmanager.cpp:521-538, src/patch/vibractrl/group/vibractrl.dll.map:1-4" + source_ref: "src/emu/kernel/src/libmanager.cpp:526-543, src/patch/vibractrl/group/vibractrl.dll.map:1-4" - name: sprite_norm.vert size: 334 @@ -522,7 +522,7 @@ files: required: true bundled: true description: "Vertex shader shared by the sprite, mask and upscale programs" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:264, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:274, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189, src/emu/qt/CMakeLists.txt:272" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:281, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:291, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189, src/emu/qt/CMakeLists.txt:275" - name: sprite_norm.frag size: 178 @@ -532,7 +532,7 @@ files: required: true bundled: true description: "Fragment shader of the sprite program" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:265, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:278, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:282, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:295, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" - name: sprite_mask.frag size: 524 @@ -542,7 +542,7 @@ files: required: true bundled: true description: "Fragment shader of the masked sprite program" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:266, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:279, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:283, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:296, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" - name: sprite_upscaled.frag size: 178 @@ -552,7 +552,7 @@ files: required: true bundled: true description: "Fragment shader of the default upscale program" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:267, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:280, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-398, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:284, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:297, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-415, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" - name: brush.vert size: 197 @@ -562,7 +562,7 @@ files: required: true bundled: true description: "Vertex shader of the brush program" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:268, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:275, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:285, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:292, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" - name: brush.frag size: 103 @@ -572,7 +572,7 @@ files: required: true bundled: true description: "Fragment shader of the brush program" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:269, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:281, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:286, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:298, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" - name: pen.vert size: 737 @@ -582,7 +582,7 @@ files: required: true bundled: true description: "Vertex shader of the pen program" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:270, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:276, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:287, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:293, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" - name: pen.frag size: 618 @@ -592,7 +592,7 @@ files: required: true bundled: true description: "Fragment shader of the pen program" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:271, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:282, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:288, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:299, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" - name: 2xBR.frag size: 2457 @@ -602,7 +602,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: 4xBR.frag size: 2915 @@ -612,7 +612,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: 4xhq.frag size: 2699 @@ -622,7 +622,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: 5xBR-lv2.frag size: 8923 @@ -632,7 +632,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: 5xBR.frag size: 5385 @@ -642,7 +642,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: aacolor.frag size: 2120 @@ -652,7 +652,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: CRT-Hyllian.frag size: 6253 @@ -662,7 +662,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: CRT-Lottes-TV.frag size: 6828 @@ -672,7 +672,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: CRT-Lottes.frag size: 5318 @@ -682,7 +682,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: dot.frag size: 3066 @@ -692,7 +692,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: dot_mobile.frag size: 3060 @@ -702,7 +702,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: dotpsp_color_mobile.frag size: 3677 @@ -712,7 +712,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: fxaa.frag size: 2476 @@ -722,7 +722,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: grayscale.frag size: 336 @@ -732,7 +732,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: inversecolors.frag size: 416 @@ -742,7 +742,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: natural.frag size: 1938 @@ -752,7 +752,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: scanline-emu.frag size: 682 @@ -762,7 +762,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: scanline.frag size: 729 @@ -772,7 +772,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: sharpen.frag size: 408 @@ -782,7 +782,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: zfast_lcd.frag size: 1797 @@ -792,7 +792,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: zfast_lcd_mobile.frag size: 1888 @@ -802,7 +802,7 @@ files: required: false bundled: true description: "Upscale filter selected by an application's filter-shader-path setting" - source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:638-640, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:414-426, src/emu/services/src/window/screen.cpp:636-638, src/emu/qt/src/settings_dialog.cpp:318-319, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:276" - name: defaultbank.sf2 size: 768010 @@ -812,7 +812,7 @@ files: required: false bundled: true description: "SoundFont bank of the TinySoundFont MIDI player, the sf2-bank-path option" - source_ref: "src/emu/drivers/src/audio/backend/tinysoundfont/player_tsf.cpp:66-77, src/emu/drivers/src/audio/backend/tinysoundfont/player_tsf.cpp:192-196, src/emu/config/include/config/options.inl:73, src/emu/config/src/config.cpp:404-406, src/emu/qt/src/state.cpp:155-156, src/emu/qt/CMakeLists.txt:275" + source_ref: "src/emu/drivers/src/audio/backend/tinysoundfont/player_tsf.cpp:66-77, src/emu/drivers/src/audio/backend/tinysoundfont/player_tsf.cpp:192-196, src/emu/config/include/config/options.inl:73, src/emu/config/src/config.cpp:404-406, src/emu/qt/src/state.cpp:155-156, src/emu/qt/CMakeLists.txt:278" - name: defaultbank.hsb size: 298094 @@ -822,7 +822,7 @@ files: required: false bundled: true description: "Beatnik bank of the miniBAE MIDI player, the hsb-bank-path option" - source_ref: "src/emu/drivers/src/audio/backend/minibae/player_minibae.cpp:86-96, src/emu/config/include/config/options.inl:72, src/emu/config/src/config.cpp:400-402, src/emu/qt/src/state.cpp:155-156, src/emu/qt/CMakeLists.txt:274" + source_ref: "src/emu/drivers/src/audio/backend/minibae/player_minibae.cpp:86-96, src/emu/config/include/config/options.inl:72, src/emu/config/src/config.cpp:400-402, src/emu/qt/src/state.cpp:155-156, src/emu/qt/CMakeLists.txt:277" - name: gamecontrollerdb.txt standalone_path: resources/gamecontrollerdb.txt @@ -834,7 +834,7 @@ files: md5: "b1586eb09b91f65c37a2f5e7c6ef7980" note: "src/external/SDL_GameControllerDB is a submodule pinned at a113e7fa" description: "SDL2 controller mapping database handed to SDL_GameControllerAddMappingsFromFile" - source_ref: "src/emu/drivers/src/input/backend/emu_controller_sdl2.cpp:143-145, src/emu/qt/CMakeLists.txt:277" + source_ref: "src/emu/drivers/src/input/backend/emu_controller_sdl2.cpp:143-145, src/emu/qt/CMakeLists.txt:280" - name: joystick_base.png size: 59350 @@ -844,7 +844,7 @@ files: required: false bundled: true description: "Joystick image of the Qt button mapping editor" - source_ref: "src/emu/qt/src/btnmap/joystick.cpp:113-117, src/emu/qt/CMakeLists.txt:278" + source_ref: "src/emu/qt/src/btnmap/joystick.cpp:113-117, src/emu/qt/CMakeLists.txt:281" - name: overlay_font.ttf size: 162588 @@ -854,7 +854,7 @@ files: required: false bundled: true description: "Overlay font of the Qt button mapping editor" - source_ref: "src/emu/qt/src/btnmap/editor.cpp:60-62, src/emu/qt/CMakeLists.txt:278" + source_ref: "src/emu/qt/src/btnmap/editor.cpp:60-62, src/emu/qt/CMakeLists.txt:281" - name: panicBlackList.json size: 122 @@ -864,7 +864,7 @@ files: required: false bundled: true description: "Thread panics the kernel swallows instead of killing the thread, by process, thread, category and code" - source_ref: "src/emu/config/src/panic_blacklist.cpp:27-35, src/emu/kernel/src/kernel.cpp:1536, src/emu/qt/CMakeLists.txt:276" + source_ref: "src/emu/config/src/panic_blacklist.cpp:27-35, src/emu/kernel/src/kernel.cpp:1536, src/emu/qt/CMakeLists.txt:279" - name: 101FD3DE.yml size: 59 @@ -874,7 +874,7 @@ files: required: false bundled: true description: "Per-application settings for UID 0x101FD3DE: frame rate and launch delay" - source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276" + source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:279" - name: 101FD3F5.yml size: 59 @@ -884,7 +884,7 @@ files: required: false bundled: true description: "Per-application settings for UID 0x101FD3F5: frame rate and launch delay" - source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276" + source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:279" - name: 101FD3F6.yml size: 59 @@ -894,7 +894,7 @@ files: required: false bundled: true description: "Per-application settings for UID 0x101FD3F6: frame rate and launch delay" - source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276" + source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:279" - name: 101FD3FD.yml size: 56 @@ -904,7 +904,7 @@ files: required: false bundled: true description: "Per-application settings for UID 0x101FD3FD: frame rate and launch delay" - source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276" + source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:279" - name: 101FD409.yml size: 44 @@ -914,7 +914,7 @@ files: required: false bundled: true description: "Per-application settings for UID 0x101FD409, The ONE: T9 bypass" - source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276" + source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:279" - name: 101FE1CA.yml size: 56 @@ -924,7 +924,7 @@ files: required: false bundled: true description: "Per-application settings for UID 0x101FE1CA: frame rate and launch delay" - source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276" + source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:279" - name: panic.json installed_on: [retrobat] @@ -933,7 +933,7 @@ files: required: false description: "Panic category descriptions read when the system is created" note: "Shipped in the desktop archives but not in the Android APK." - source_ref: "src/emu/utils/src/panic.cpp:32-38, src/emu/system/src/epoc.cpp:653, src/emu/qt/CMakeLists.txt:269" + source_ref: "src/emu/utils/src/panic.cpp:32-38, src/emu/system/src/epoc.cpp:653, src/emu/qt/CMakeLists.txt:272" - name: aq_crash_fix.lua size: 552 @@ -943,7 +943,7 @@ files: required: false bundled: true description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" - source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:274" - name: eternal_legacy_crash_fix.lua size: 764 @@ -953,7 +953,7 @@ files: required: false bundled: true description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" - source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:274" - name: hero_of_sparta_crash_fix.lua size: 771 @@ -963,7 +963,17 @@ files: required: false bundled: true description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" - source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:274" + + - name: pottery_startup_fix.lua + size: 486 + sha1: e644eb1113f2e177fe610025d47c042036144a1f + standalone_path: scripts/pottery_startup_fix.lua + mode: standalone + required: false + bundled: true + description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:274" - name: qt_font_extras_fix.lua size: 814 @@ -973,7 +983,7 @@ files: required: false bundled: true description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" - source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:274" - name: s3_driver_patch.lua size: 1225 @@ -983,7 +993,7 @@ files: required: false bundled: true description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" - source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:274" - name: s60v3_empty_avkon_menu_fix.lua size: 785 @@ -993,7 +1003,7 @@ files: required: false bundled: true description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" - source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:274" - name: ssx_cash_unlock_fix.lua size: 478 @@ -1003,7 +1013,17 @@ files: required: false bundled: true description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" - source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:274" + + - name: wave_crash_fix.lua + size: 951 + sha1: b9bc768cd3f1a883770bd2c5d2d2c492d057d261 + standalone_path: scripts/wave_crash_fix.lua + mode: standalone + required: false + bundled: true + description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:274" - name: wh40k_slow_load_fix.lua size: 2156 @@ -1013,7 +1033,7 @@ files: required: false bundled: true description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" - source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:274" - name: common.lua size: 1245 @@ -1023,7 +1043,7 @@ files: required: false bundled: true description: "eka2l1.common module the shipped scripts require through package.path" - source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:1, src/emu/qt/CMakeLists.txt:289-290" + source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:1, src/emu/qt/CMakeLists.txt:292-293" - name: context.lua size: 3690 @@ -1033,7 +1053,7 @@ files: required: false bundled: true description: "eka2l1.ipc.context module required by eka2l1.events" - source_ref: "src/emu/scripting/src/manager.cpp:252, src/emu/scripting/lua/eka2l1/events.lua:11, src/emu/qt/CMakeLists.txt:289-290" + source_ref: "src/emu/scripting/src/manager.cpp:252, src/emu/scripting/lua/eka2l1/events.lua:11, src/emu/qt/CMakeLists.txt:292-293" - name: cpu.lua size: 2085 @@ -1043,7 +1063,7 @@ files: required: false bundled: true description: "eka2l1.cpu module the shipped scripts require through package.path" - source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:3, src/emu/qt/CMakeLists.txt:289-290" + source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:3, src/emu/qt/CMakeLists.txt:292-293" - name: events.lua size: 9576 @@ -1053,7 +1073,7 @@ files: required: false bundled: true description: "eka2l1.events module the shipped scripts require through package.path" - source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:2, src/emu/qt/CMakeLists.txt:289-290" + source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:2, src/emu/qt/CMakeLists.txt:292-293" - name: helper.lua size: 1269 @@ -1063,7 +1083,7 @@ files: required: false bundled: true description: "eka2l1.helper module required by the other eka2l1 modules" - source_ref: "src/emu/scripting/src/manager.cpp:252, src/emu/qt/CMakeLists.txt:289-290" + source_ref: "src/emu/scripting/src/manager.cpp:252, src/emu/qt/CMakeLists.txt:292-293" - name: kernel.lua size: 23419 @@ -1073,7 +1093,17 @@ files: required: false bundled: true description: "eka2l1.kernel module the shipped scripts require through package.path" - source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:4, src/emu/qt/CMakeLists.txt:289-290" + source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:4, src/emu/qt/CMakeLists.txt:292-293" + + - name: mem.lua + size: 3304 + sha1: 5e8302523b02f4d094ed321753f4ebc037ec59d5 + standalone_path: scripts/eka2l1/mem.lua + mode: standalone + required: false + bundled: true + description: "eka2l1.mem module required by pottery_startup_fix.lua" + source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/pottery_startup_fix.lua:3, src/emu/qt/CMakeLists.txt:292-293" - name: std.lua size: 4973 @@ -1083,4 +1113,4 @@ files: required: false bundled: true description: "eka2l1.std module the shipped scripts require through package.path" - source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:5, src/emu/qt/CMakeLists.txt:289-290" + source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:5, src/emu/qt/CMakeLists.txt:292-293" From d9cf45c6d3954469ed0abea454f1e0bf58523fa4 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:44:20 +0200 Subject: [PATCH 33/49] chore: bring devilutionx to head hf.mpq now has its own CMake option, BUILD_MOD_MPQS, beside BUILD_ASSETS_MPQ. The loaders moved by two lines after a romfs search path was added for 3DS and Switch. Same files. --- emulators/devilutionx.yml | 53 ++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/emulators/devilutionx.yml b/emulators/devilutionx.yml index 23e6dfbf..be2e9b49 100644 --- a/emulators/devilutionx.yml +++ b/emulators/devilutionx.yml @@ -4,7 +4,7 @@ core_classification: game_engine source: "https://github.com/diasurgical/DevilutionX" upstream: ~ profiled_date: "2026-10-04" -source_commit: "dac104babfb6187415432f428ac2516747ffc154" +source_commit: "0706e014d6a12ec8178a81fba549a68bd559f247" core_version: "1.6.0-dev" display_name: "Diablo (DevilutionX)" cores: [devilutionx] @@ -20,26 +20,26 @@ notes: | macOS Application Support, etc.) via GetMPQSearchPaths(). Load order is defined in Source/engine/assets.cpp: - LoadCoreArchives() (:505) - devilutionx.mpq, fonts.mpq (optional) - LoadLanguageArchive() (:521) - .mpq, skipped for "en" - LoadGameArchives() (:530) - diabdat.mpq or spawn.mpq (required) + LoadCoreArchives() (:507) - devilutionx.mpq, fonts.mpq (optional) + LoadLanguageArchive() (:523) - .mpq, skipped for "en" + LoadGameArchives() (:532) - diabdat.mpq or spawn.mpq (required) hfbard.mpq, hfbarb.mpq (always probed) - LoadHellfireArchives() (:570) - hellfire.mpq + hfmonk/hfmusic/hfvoice - LoadModArchives() (:703) - mods/.mpq for each active mod + LoadHellfireArchives() (:572) - hellfire.mpq + hfmonk/hfmusic/hfvoice + LoadModArchives() (:712) - mods/.mpq for each active mod diabdat.mpq is matched uppercase first ("DIABDAT.MPQ", GOG/retail CD - convention, line 538), then lowercase (line 542). If neither is found - the loader falls back to spawn.mpq (line 544). Missing BOTH triggers + convention, line 540), then lowercase (line 544). If neither is found + the loader falls back to spawn.mpq (line 546). Missing BOTH triggers the "diabdat.mpq or spawn.mpq" InsertCDDlg dialog and the game cannot start. Hellfire is optional: the engine advertises Diablo even when hellfire files are absent. If hellfire.mpq is loaded, hfmonk.mpq + hfmusic.mpq - + hfvoice.mpq must also be present (line 588) or the game aborts. + + hfvoice.mpq must also be present (line 590) or the game aborts. devilutionx.mpq is a build artefact packed from the repo's assets/ directory with the smpq tool (CMake option BUILD_ASSETS_MPQ, - CMakeLists.txt:192-204). CMake/Assets.cmake:46-238 lists the packed + CMakeLists.txt:192-205). CMake/Assets.cmake:46-238 lists the packed files (ASSETS_VERSION, arena, data, fonts, gendata, levels, lua, plrgfx, txtdata and ui_art, plus data/inv/objcurs-widths.txt and the ui_art PNGs outside SDL1 and Vita builds), and each Translations/.po @@ -47,9 +47,10 @@ notes: | (CMake/Assets.cmake:8-29, 268-272). The archive is written with "smpq -A -M 1 -C BZIP2 -c" from the staged assets directory (CMake/Assets.cmake:287-294). mods/hf.mpq is built the same way from - the mods/hf file list (CMake/Mods.cmake:8-33, 58-67). The compiled + the mods/hf file list under the BUILD_MOD_MPQS option + (CMake/Mods.cmake:11-36, 61-71). The compiled binary expects devilutionx.mpq next to the executable on every - platform except Android, Apple and 3DS/Switch (:509-516), where its + platform except Android, Apple and 3DS/Switch (:511-518), where its contents are shipped loose. After loading the core archives the engine reads the asset ASSETS_VERSION and aborts with "Failed to load UI resources" unless its content is "1\n" (Source/init.cpp:54, 79-85, @@ -68,7 +69,7 @@ files: description: "Diablo retail or GOG MPQ (contains all game data)" aliases: [DIABDAT.MPQ] note: "primary game archive, the GOG CD convention uses uppercase" - source_ref: "Source/engine/assets.cpp:537-542" + source_ref: "Source/engine/assets.cpp:539-544" - name: spawn.mpq path: devilutionx/spawn.mpq @@ -77,7 +78,7 @@ files: required: false description: "Diablo shareware archive, used when diabdat.mpq is absent" note: "freely redistributable shareware, triggers gbIsSpawn mode" - source_ref: "Source/engine/assets.cpp:544" + source_ref: "Source/engine/assets.cpp:546" - name: hellfire.mpq path: devilutionx/hellfire.mpq @@ -85,7 +86,7 @@ files: category: game_data required: false description: "Hellfire expansion main archive" - source_ref: "Source/engine/assets.cpp:573" + source_ref: "Source/engine/assets.cpp:575" - name: hfmonk.mpq path: devilutionx/hfmonk.mpq @@ -93,7 +94,7 @@ files: category: game_data required: false description: "Hellfire monk class assets, mandatory when hellfire.mpq is present" - source_ref: "Source/engine/assets.cpp:583" + source_ref: "Source/engine/assets.cpp:585" - name: hfmusic.mpq path: devilutionx/hfmusic.mpq @@ -101,7 +102,7 @@ files: category: game_data required: false description: "Hellfire music, mandatory when hellfire.mpq is present" - source_ref: "Source/engine/assets.cpp:584" + source_ref: "Source/engine/assets.cpp:586" - name: hfvoice.mpq path: devilutionx/hfvoice.mpq @@ -109,7 +110,7 @@ files: category: game_data required: false description: "Hellfire voices, mandatory when hellfire.mpq is present" - source_ref: "Source/engine/assets.cpp:585" + source_ref: "Source/engine/assets.cpp:587" - name: "hfbard.mpq" path: "devilutionx/hfbard.mpq" @@ -117,7 +118,7 @@ files: category: game_data required: false description: "Hellfire bard class assets, loaded when present" - source_ref: "Source/engine/assets.cpp:565" + source_ref: "Source/engine/assets.cpp:567" - name: "hfbarb.mpq" path: "devilutionx/hfbarb.mpq" @@ -125,7 +126,7 @@ files: category: game_data required: false description: "Hellfire barbarian class assets, loaded when present" - source_ref: "Source/engine/assets.cpp:566" + source_ref: "Source/engine/assets.cpp:568" - name: "devilutionx.mpq" path: "devilutionx/devilutionx.mpq" @@ -137,7 +138,7 @@ files: md5: "5afe4d6624064b41e25a36ac55da29fa" description: "Engine assets (UI art, fonts, data tables, Lua scripts, compiled translations) packed from the repository's assets/ directory" note: "Loaded first on every platform except Android, Apple, 3DS and Switch. Its files are also found in an assets/ directory next to the binary when the build installs them loose. The engine aborts when the asset ASSETS_VERSION is absent or is not \"1\\n\". Built by CMake with smpq (MPQ version 1, BZIP2, no attributes) from the file list of CMake/Assets.cmake plus one .gmo per translation. Shipped beside the binary in the Windows zip and the Linux tarball, and loose under assets/ in the APK. The hashes are those of the 1.5.5 release." - source_ref: "Source/engine/assets.cpp:509-516, 223-226, Source/init.cpp:54, 79-85, Source/diablo.cpp:1225-1239, CMake/Assets.cmake:46-224, 287-294" + source_ref: "Source/engine/assets.cpp:511-518, 223-226, Source/init.cpp:54, 79-85, Source/diablo.cpp:1225-1239, CMake/Assets.cmake:46-224, 287-294" - name: "fonts.mpq" path: "devilutionx/fonts.mpq" @@ -145,7 +146,7 @@ files: category: game_data required: false description: "CJK and extended-language font pack from devilutionx-assets release" - source_ref: "Source/engine/assets.cpp:517" + source_ref: "Source/engine/assets.cpp:519" - name: "es.mpq" path: "devilutionx/es.mpq" @@ -154,7 +155,7 @@ files: required: false description: "Spanish voice pack" note: "The archive named after the selected language code is loaded. English loads none." - source_ref: "Source/engine/assets.cpp:521-528" + source_ref: "Source/engine/assets.cpp:523-530" - name: "pl.mpq" path: "devilutionx/pl.mpq" @@ -163,7 +164,7 @@ files: required: false description: "Polish voice pack" note: "The archive named after the selected language code is loaded. English loads none." - source_ref: "Source/engine/assets.cpp:521-528" + source_ref: "Source/engine/assets.cpp:523-530" - name: "ru.mpq" path: "devilutionx/ru.mpq" @@ -172,7 +173,7 @@ files: required: false description: "Russian voice pack" note: "The archive named after the selected language code is loaded. English loads none." - source_ref: "Source/engine/assets.cpp:521-528" + source_ref: "Source/engine/assets.cpp:523-530" - name: "hf.mpq" path: "devilutionx/mods/hf.mpq" @@ -181,4 +182,4 @@ files: required: false description: "Hellfire mod archive packed from the repository's mods/hf directory" note: "mods/.mpq is opened for each active mod, and hf is activated when hellfire.mpq is present. A mod with no archive and no loose directory is served from the core archives. Built by CMake with smpq (MPQ version 1, BZIP2, no attributes) from the hellfire_mod file list. The Windows and Linux packaging of this revision installs it under mods/ beside devilutionx.mpq, and no release carries it yet." - source_ref: "Source/engine/assets.cpp:748-764, Source/options.cpp:77-79, CMakeLists.txt:204, 638-643, 702-707, CMake/Mods.cmake:8-33, 58-66" + source_ref: "Source/engine/assets.cpp:756-772, Source/options.cpp:77-79, CMakeLists.txt:205, 641-646, 705-710, CMake/Mods.cmake:11-36, 61-70" From 5ef439a7fde7f28d8ce80165c65d0521814041e2 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:49:51 +0200 Subject: [PATCH 34/49] feat: bring jazz2-native to 3.9.0 The converter now reads Plus.j2d of a JJ2+ install for the textured layers a level names, listed as an optional Source file. A Content tree holding Prebaked.pak skips the conversion, and a user Content directory beside Cache is searched first for content, music and translations. The rest of the loaders moved without a change in what they open. --- emulators/jazz2-native.yml | 133 +++++++++++++++++++++---------------- 1 file changed, 76 insertions(+), 57 deletions(-) diff --git a/emulators/jazz2-native.yml b/emulators/jazz2-native.yml index f3fe4c4c..7bbf47ac 100644 --- a/emulators/jazz2-native.yml +++ b/emulators/jazz2-native.yml @@ -4,8 +4,8 @@ core_classification: game_engine source: "https://github.com/deathkiller/jazz2-native" upstream: "https://github.com/deathkiller/jazz2-native" profiled_date: "2026-10-04" -source_commit: "1e20466795d5074570fb057b41f56baefd24c629" -core_version: "3.8.0" +source_commit: "36a1414d691142443ef7ad9078995e2be4755f11" +core_version: "3.9.0" display_name: "Jazz Jackrabbit 2 (Jazz² Resurrection)" cores: [jazz2] systems: [jazz-jackrabbit-2] @@ -15,29 +15,39 @@ notes: | ships its own Content/ tree (animations, metadata, translations) that sits next to the executable in a portable copy, or under /share// once installed. - ref: Sources/Jazz2/ContentResolver.cpp:191-243 (GetContentPath per - platform), Sources/Jazz2/ContentResolver.cpp:415-491 (Unix layouts) + ref: Sources/Jazz2/ContentResolver.cpp:195-247 (GetContentPath per + platform), Sources/Jazz2/ContentResolver.cpp:455-531 (Unix layouts) Original Jazz Jackrabbit 2 data is read from Source/ and converted on first launch into the engine's own formats under Cache/: Anims.j2a and Data.j2d into a package, then every .j2e, .j2l and the tilesets the levels name. Music and cinematics are read from Source/ as they are. - ref: Sources/Jazz2/ContentResolver.cpp:285-314 (GetSourcePath), - Sources/Main.cpp:2226-2290 (RefreshCache), - Sources/Jazz2/Compatibility/AssetConverter.cpp:152-168, - Sources/Jazz2/Compatibility/AssetConverter.cpp:400-520 + ref: Sources/Jazz2/ContentResolver.cpp:324-353 (GetSourcePath), + Sources/Main.cpp:2237-2301 (RefreshCache), + Sources/Jazz2/Compatibility/AssetConverter.cpp:332-348, + Sources/Jazz2/Compatibility/AssetConverter.cpp:585-712 Content/ is the engine runtime, shipped with the release package. Source/ holds the user's own copy of the 1998 game data. Without Anims.j2a (or the shareware AnimsSw.j2a) and without an existing - cache the engine starts but is not playable. + cache the engine starts but is not playable. A Content/ tree prepared + by the AssetPacker tool carries Prebaked.pak: the conversion is then + skipped and Source/ is not read. + ref: Sources/Main.cpp:2149-2155, + Sources/Jazz2/ContentResolver.cpp:698-706 + + On Android, Apple, Unix, UWP, Switch and Vita a Content/ directory + next to Cache/ (next to Source/ on iOS) is searched before the shipped + one, its .pak files first. + ref: Sources/Jazz2/ContentResolver.cpp:708-747, + Sources/Jazz2/ContentResolver.cpp:813-860 The libretro build looks for Content/ next to the loaded file, in the core assets directory or in /jazz2/, and for the original files in Source/ beside it, in the system directory itself or in /jazz2/Source/. - ref: Sources/Main.cpp:267-355 + ref: Sources/Main.cpp:286-374 files: # ================================================================ @@ -51,7 +61,7 @@ files: standalone_path: "Content/Animations/" mode: libretro required: true - source_ref: "Sources/Jazz2/ContentResolver.cpp:1164, 1294, 2837-2838" + source_ref: "Sources/Jazz2/ContentResolver.cpp:1352, 1482, 3165-3166" note: "Native graphics, sounds and the UI fonts, opened through OpenContentFile. No libretro build is published with the release, so the tree is placed by hand." - name: "Animations/" @@ -62,7 +72,7 @@ files: mode: standalone bundled: true required: true - source_ref: "Sources/Jazz2/ContentResolver.cpp:1164, 1294, 2837-2838" + source_ref: "Sources/Jazz2/ContentResolver.cpp:1352, 1482, 3165-3166" note: "Native graphics, sounds and the UI fonts, opened through OpenContentFile. Shipped beside the executable in the 3.8.0 Windows and Linux zips." - name: "Metadata/" @@ -72,7 +82,7 @@ files: standalone_path: "Content/Metadata/" mode: libretro required: true - source_ref: "Sources/Jazz2/ContentResolver.cpp:910" + source_ref: "Sources/Jazz2/ContentResolver.cpp:1099" note: "Actor .res descriptors (Common, Enemy, Player, UI, Boss, ...). No libretro build is published with the release, so the tree is placed by hand." - name: "Metadata/" @@ -83,7 +93,7 @@ files: mode: standalone bundled: true required: true - source_ref: "Sources/Jazz2/ContentResolver.cpp:910" + source_ref: "Sources/Jazz2/ContentResolver.cpp:1099" note: "Actor .res descriptors (Common, Enemy, Player, UI, Boss, ...). Shipped beside the executable in the 3.8.0 Windows and Linux zips." - name: "Translations/" @@ -93,8 +103,8 @@ files: standalone_path: "Content/Translations/" mode: libretro required: false - source_ref: "Sources/Main.cpp:2021-2027, Sources/Jazz2/UI/Menu/LanguageSelectSection.cpp:82-88" - note: "Language .mo bundles, searched in Cache/Translations/ first. Built-in English is used when none is loaded. No libretro build is published with the release, so the tree is placed by hand." + source_ref: "Sources/Main.cpp:2029-2037, Sources/Jazz2/UI/Menu/LanguageSelectSection.cpp:83-95" + note: "Language .mo bundles, searched in the user Content/Translations/ and in Cache/Translations/ first. Built-in English is used when none is loaded. No libretro build is published with the release, so the tree is placed by hand." - name: "Translations/" type: directory @@ -104,8 +114,8 @@ files: mode: standalone bundled: true required: false - source_ref: "Sources/Main.cpp:2021-2027, Sources/Jazz2/UI/Menu/LanguageSelectSection.cpp:82-88" - note: "Language .mo bundles, searched in Cache/Translations/ first. Built-in English is used when none is loaded. Shipped beside the executable in the 3.8.0 Windows and Linux zips." + source_ref: "Sources/Main.cpp:2029-2037, Sources/Jazz2/UI/Menu/LanguageSelectSection.cpp:83-95" + note: "Language .mo bundles, searched in the user Content/Translations/ and in Cache/Translations/ first. Built-in English is used when none is loaded. Shipped beside the executable in the 3.8.0 Windows and Linux zips." # ================================================================ # Source/ (original Jazz Jackrabbit 2 data, user-supplied) @@ -118,7 +128,7 @@ files: path: "jazz2/Source/Anims.j2a" standalone_path: "Source/Anims.j2a" required: true - source_ref: "Sources/Main.cpp:2226-2242, Sources/Jazz2/Compatibility/AssetConverter.cpp:156-159" + source_ref: "Sources/Main.cpp:2237-2253, Sources/Jazz2/Compatibility/AssetConverter.cpp:336-339" note: "Main animation archive. The cache cannot be created without it and the game is not flagged playable." - name: "AnimsSw.j2a" @@ -127,7 +137,7 @@ files: path: "jazz2/Source/AnimsSw.j2a" standalone_path: "Source/AnimsSw.j2a" required: false - source_ref: "Sources/Main.cpp:2229-2231" + source_ref: "Sources/Main.cpp:2240-2242" note: "Animation archive of the shareware demo, read when Anims.j2a is absent." - name: "Data.j2d" @@ -136,12 +146,21 @@ files: path: "jazz2/Source/Data.j2d" standalone_path: "Source/Data.j2d" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:161-164" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:341-344" note: "Converted into the cache package when present." + - name: "Plus.j2d" + category: game_data + system: jazz-jackrabbit-2 + path: "jazz2/Source/Plus.j2d" + standalone_path: "Source/Plus.j2d" + required: false + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:271-316, 512-515, Sources/Jazz2/Compatibility/JJ2Level.cpp:1128-1130" + note: "Data file of a JJ2+ installation. Read once a converted level names one of its TextureBG. textures. Without it a texture is made up for that layer." + # Episode descriptors (.j2e) and level files (.j2l) are optional per # episode. Every one present in Source/ is converted. - # ref: Sources/Jazz2/Compatibility/AssetConverter.cpp:400-520 + # ref: Sources/Jazz2/Compatibility/AssetConverter.cpp:585-712 - name: "prince.j2e" category: game_data @@ -149,7 +168,7 @@ files: path: "jazz2/Source/prince.j2e" standalone_path: "Source/prince.j2e" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:184-191, 310-312, 407-436" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:364-371, 490-492, 592-621" note: "First episode of the chain prince, rescue, flash, monk." - name: "rescue.j2e" @@ -158,7 +177,7 @@ files: path: "jazz2/Source/rescue.j2e" standalone_path: "Source/rescue.j2e" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:193-199, 313-314, 407-436" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:373-379, 493-494, 592-621" note: "Second episode of the chain." - name: "flash.j2e" @@ -167,7 +186,7 @@ files: path: "jazz2/Source/flash.j2e" standalone_path: "Source/flash.j2e" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:201-208, 315-316, 407-436" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:381-388, 495-496, 592-621" note: "Third episode of the chain." - name: "monk.j2e" @@ -176,7 +195,7 @@ files: path: "jazz2/Source/monk.j2e" standalone_path: "Source/monk.j2e" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:210-215, 317-318, 407-436" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:390-395, 497-498, 592-621" note: "Fourth episode of the chain." - name: "share.j2e" @@ -185,7 +204,7 @@ files: path: "jazz2/Source/share.j2e" standalone_path: "Source/share.j2e" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:217-219, 290-291, 407-436" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:397-399, 470-471, 592-621" note: "Shareware Demo episode." - name: "xmas98.j2e" @@ -194,7 +213,7 @@ files: path: "jazz2/Source/xmas98.j2e" standalone_path: "Source/xmas98.j2e" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:292-293, 412, 420-421, 434" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:472-473, 597, 605-606, 619" note: "Holiday Hare '98. Stored under the name xmas99 and skipped when xmas99.j2e is present." - name: "xmas99.j2e" @@ -203,7 +222,7 @@ files: path: "jazz2/Source/xmas99.j2e" standalone_path: "Source/xmas99.j2e" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:182, 221-223, 294-295" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:362, 401-403, 474-475" note: "The Christmas Chronicles." - name: "secretf.j2e" @@ -212,7 +231,7 @@ files: path: "jazz2/Source/secretf.j2e" standalone_path: "Source/secretf.j2e" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:225-233, 296-297, 407-436" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:405-413, 476-477, 592-621" note: "The Secret Files episode." - name: "home.j2e" @@ -221,12 +240,12 @@ files: path: "jazz2/Source/home.j2e" standalone_path: "Source/home.j2e" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:423-429" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:608-614" note: "Entry that lists custom levels." # Levels of the Shareware Demo. Every .j2l present in Source/ is # converted, whatever its name. - # ref: Sources/Jazz2/Compatibility/AssetConverter.cpp:437-516 + # ref: Sources/Jazz2/Compatibility/AssetConverter.cpp:622-708 - name: "share1.j2l" category: game_data @@ -234,7 +253,7 @@ files: path: "jazz2/Source/share1.j2l" standalone_path: "Source/share1.j2l" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:217, 437-499" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:397, 622-691" note: "First level of share.j2e, stored as share/01_share1. Its exit names share2." - name: "share2.j2l" @@ -243,7 +262,7 @@ files: path: "jazz2/Source/share2.j2l" standalone_path: "Source/share2.j2l" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:218, 437-499" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:398, 622-691" note: "Second level of the Shareware Demo episode. Its exit names share3." - name: "share3.j2l" @@ -252,7 +271,7 @@ files: path: "jazz2/Source/share3.j2l" standalone_path: "Source/share3.j2l" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:219, 437-499" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:399, 622-691" note: "Third level of the Shareware Demo episode. Its exit ends the episode." - name: "sharectf.j2l" @@ -261,7 +280,7 @@ files: path: "jazz2/Source/sharectf.j2l" standalone_path: "Source/sharectf.j2l" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:54, 437-499" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:56, 622-691" note: "Capture the flag level of the Shareware Demo, stored under unknown/." - name: "sharect2.j2l" @@ -270,7 +289,7 @@ files: path: "jazz2/Source/sharect2.j2l" standalone_path: "Source/sharect2.j2l" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:54, 437-499" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:56, 622-691" note: "Capture the flag level of the Shareware Demo, stored under unknown/." - name: "sharetrs.j2l" @@ -279,14 +298,14 @@ files: path: "jazz2/Source/sharetrs.j2l" standalone_path: "Source/sharetrs.j2l" required: false - source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:54, 437-499" + source_ref: "Sources/Jazz2/Compatibility/AssetConverter.cpp:56, 622-691" note: "Treasure hunt level of the Shareware Demo, stored under unknown/." # Tilesets. Only those a converted level names are converted. The name # is read from the level, lowercased and looked up in Source/ without # regard to case. - # ref: Sources/Jazz2/Compatibility/JJ2Level.cpp:124, 772-775, - # Sources/Jazz2/Compatibility/AssetConverter.cpp:492, 579-600 + # ref: Sources/Jazz2/Compatibility/JJ2Level.cpp:136, 785-788, + # Sources/Jazz2/Compatibility/AssetConverter.cpp:684, 771-792 - name: "labrat1n.j2t" category: game_data @@ -294,7 +313,7 @@ files: path: "jazz2/Source/labrat1n.j2t" standalone_path: "Source/labrat1n.j2t" required: false - source_ref: "Sources/Jazz2/Compatibility/JJ2Level.cpp:124, 772-775, Sources/Jazz2/Compatibility/AssetConverter.cpp:492, 579-600" + source_ref: "Sources/Jazz2/Compatibility/JJ2Level.cpp:136, 785-788, Sources/Jazz2/Compatibility/AssetConverter.cpp:684, 771-792" note: "Tileset named by share1.j2l, sharect2.j2l and sharetrs.j2l." - name: "psych2.j2t" @@ -303,7 +322,7 @@ files: path: "jazz2/Source/psych2.j2t" standalone_path: "Source/psych2.j2t" required: false - source_ref: "Sources/Jazz2/Compatibility/JJ2Level.cpp:124, 772-775, Sources/Jazz2/Compatibility/AssetConverter.cpp:492, 579-600" + source_ref: "Sources/Jazz2/Compatibility/JJ2Level.cpp:136, 785-788, Sources/Jazz2/Compatibility/AssetConverter.cpp:684, 771-792" note: "Tileset named by share2.j2l." - name: "diam2.j2t" @@ -312,11 +331,11 @@ files: path: "jazz2/Source/diam2.j2t" standalone_path: "Source/diam2.j2t" required: false - source_ref: "Sources/Jazz2/Compatibility/JJ2Level.cpp:124, 772-775, Sources/Jazz2/Compatibility/AssetConverter.cpp:492, 579-600" + source_ref: "Sources/Jazz2/Compatibility/JJ2Level.cpp:136, 785-788, Sources/Jazz2/Compatibility/AssetConverter.cpp:684, 771-792" note: "Tileset named by share3.j2l and sharectf.j2l." - # Music, read from Content/Music/ then from Source/ - # ref: Sources/Jazz2/ContentResolver.cpp:2784-2794 + # Music, read from the user Content/Music/, then Content/Music/, then Source/ + # ref: Sources/Jazz2/ContentResolver.cpp:3106-3122 - name: "menu.j2b" category: game_data @@ -324,7 +343,7 @@ files: path: "jazz2/Source/menu.j2b" standalone_path: "Source/menu.j2b" required: false - source_ref: "Sources/Jazz2/UI/Menu/MainMenu.cpp:509-511, Sources/Jazz2/Compatibility/AssetConverter.cpp:539-542" + source_ref: "Sources/Jazz2/UI/Menu/MainMenu.cpp:514-516, Sources/Jazz2/Compatibility/AssetConverter.cpp:731-734" note: "Main menu music." - name: "bonus2.j2b" @@ -333,7 +352,7 @@ files: path: "jazz2/Source/bonus2.j2b" standalone_path: "Source/bonus2.j2b" required: false - source_ref: "Sources/Jazz2/UI/Menu/MainMenu.cpp:503-504, Sources/Jazz2/Compatibility/AssetConverter.cpp:539-542" + source_ref: "Sources/Jazz2/UI/Menu/MainMenu.cpp:508-509, Sources/Jazz2/Compatibility/AssetConverter.cpp:731-734" note: "Menu music of the reforged main menu, picked at random with bonus3.j2b." - name: "bonus3.j2b" @@ -342,7 +361,7 @@ files: path: "jazz2/Source/bonus3.j2b" standalone_path: "Source/bonus3.j2b" required: false - source_ref: "Sources/Jazz2/UI/Menu/MainMenu.cpp:503-504, Sources/Jazz2/Compatibility/AssetConverter.cpp:539-542" + source_ref: "Sources/Jazz2/UI/Menu/MainMenu.cpp:508-509, Sources/Jazz2/Compatibility/AssetConverter.cpp:731-734" note: "Menu music of the reforged main menu, picked at random with bonus2.j2b." - name: "intro.j2b" @@ -351,7 +370,7 @@ files: path: "jazz2/Source/intro.j2b" standalone_path: "Source/intro.j2b" required: false - source_ref: "Sources/Jazz2/UI/Cinematics.cpp:255, Sources/Main.cpp:558, Sources/Jazz2/Compatibility/AssetConverter.cpp:539-542" + source_ref: "Sources/Jazz2/UI/Cinematics.cpp:549, Sources/Main.cpp:615, Sources/Jazz2/Compatibility/AssetConverter.cpp:731-734" note: "Music of the intro cinematic." - name: "ending.j2b" @@ -360,12 +379,12 @@ files: path: "jazz2/Source/ending.j2b" standalone_path: "Source/ending.j2b" required: false - source_ref: "Sources/Jazz2/UI/Cinematics.cpp:255, Sources/Main.cpp:964, Sources/Jazz2/Compatibility/AssetConverter.cpp:539-542" + source_ref: "Sources/Jazz2/UI/Cinematics.cpp:549, Sources/Main.cpp:1098, Sources/Jazz2/Compatibility/AssetConverter.cpp:731-734" note: "Music of the ending cinematic." # Level music. The name is read from the level, lowercased and given # the .j2b extension when it has none. - # ref: Sources/Jazz2/Compatibility/JJ2Level.cpp:128, 784-789 + # ref: Sources/Jazz2/Compatibility/JJ2Level.cpp:140, 795-801 - name: "labrat.j2b" category: game_data @@ -373,7 +392,7 @@ files: path: "jazz2/Source/labrat.j2b" standalone_path: "Source/labrat.j2b" required: false - source_ref: "Sources/Jazz2/Compatibility/JJ2Level.cpp:128, 784-789, Sources/Jazz2/LevelHandler.cpp:629-635, Sources/Jazz2/ContentResolver.cpp:2784-2788" + source_ref: "Sources/Jazz2/Compatibility/JJ2Level.cpp:140, 795-801, Sources/Jazz2/LevelHandler.cpp:700-706, Sources/Jazz2/ContentResolver.cpp:3106-3116" note: "Music named by share1.j2l, sharect2.j2l and sharetrs.j2l." - name: "funkyg.j2b" @@ -382,7 +401,7 @@ files: path: "jazz2/Source/funkyg.j2b" standalone_path: "Source/funkyg.j2b" required: false - source_ref: "Sources/Jazz2/Compatibility/JJ2Level.cpp:128, 784-789, Sources/Jazz2/LevelHandler.cpp:629-635, Sources/Jazz2/ContentResolver.cpp:2784-2788" + source_ref: "Sources/Jazz2/Compatibility/JJ2Level.cpp:140, 795-801, Sources/Jazz2/LevelHandler.cpp:700-706, Sources/Jazz2/ContentResolver.cpp:3106-3116" note: "Music named by share2.j2l." - name: "diamond.j2b" @@ -391,7 +410,7 @@ files: path: "jazz2/Source/diamond.j2b" standalone_path: "Source/diamond.j2b" required: false - source_ref: "Sources/Jazz2/Compatibility/JJ2Level.cpp:128, 784-789, Sources/Jazz2/LevelHandler.cpp:629-635, Sources/Jazz2/ContentResolver.cpp:2784-2788" + source_ref: "Sources/Jazz2/Compatibility/JJ2Level.cpp:140, 795-801, Sources/Jazz2/LevelHandler.cpp:700-706, Sources/Jazz2/ContentResolver.cpp:3106-3116" note: "Music named by share3.j2l and sharectf.j2l." - name: "boss2.j2b" @@ -400,7 +419,7 @@ files: path: "jazz2/Source/boss2.j2b" standalone_path: "Source/boss2.j2b" required: false - source_ref: "Sources/Jazz2/Compatibility/EventConverter.cpp:360-370, Sources/Jazz2/Compatibility/AssetConverter.cpp:505-508, Sources/Jazz2/LevelHandler.cpp:1397-1400, Sources/Jazz2/ContentResolver.cpp:2784-2788" + source_ref: "Sources/Jazz2/Compatibility/EventConverter.cpp:360-370, Sources/Jazz2/Compatibility/AssetConverter.cpp:697-700, Sources/Jazz2/LevelHandler.cpp:1547-1550, Sources/Jazz2/ContentResolver.cpp:3106-3116" note: "Boss music. The boss activation event carries a music index that is converted to boss1.j2b or boss2.j2b and recorded as music the level uses. share3.j2l carries index 1." # Cinematics, read from Content/Cinematics/ then from Source/ @@ -411,7 +430,7 @@ files: path: "jazz2/Source/intro.j2v" standalone_path: "Source/intro.j2v" required: false - source_ref: "Sources/Jazz2/UI/Cinematics.cpp:267-281, Sources/Main.cpp:558" + source_ref: "Sources/Jazz2/UI/Cinematics.cpp:576-593, Sources/Main.cpp:615" note: "Intro cinematic. Skipped when absent." - name: "ending.j2v" @@ -420,5 +439,5 @@ files: path: "jazz2/Source/ending.j2v" standalone_path: "Source/ending.j2v" required: false - source_ref: "Sources/Jazz2/UI/Cinematics.cpp:267-281, Sources/Main.cpp:964" + source_ref: "Sources/Jazz2/UI/Cinematics.cpp:576-593, Sources/Main.cpp:1098" note: "Ending cinematic. Skipped when absent." From 390c4d659e5088430ad4005571cad34b5969d489 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:33:34 +0200 Subject: [PATCH 35/49] feat: bring pom2 to 0.9.8 Adds the Memory Expansion Card ROM, the //c keyboard photo and the Monitor II and drive artwork, updates the //e keyboard photo, and follows the Virtual ][ list into VirtualIISoundCatalog.h with the Import sounds folder. --- emulators/pom2.yml | 431 ++++++++++++++++++++++++++++++++------------- 1 file changed, 312 insertions(+), 119 deletions(-) diff --git a/emulators/pom2.yml b/emulators/pom2.yml index 630c4910..fb8428f7 100644 --- a/emulators/pom2.yml +++ b/emulators/pom2.yml @@ -3,9 +3,9 @@ type: standalone core_classification: other source: "https://github.com/habib256/pom2" upstream: "https://github.com/habib256/pom2" -profiled_date: "2026-10-04" -source_commit: "c2ce3f685cf3c7429de7341b2b3df65e9981b907" -core_version: "0.9.4" +profiled_date: "2026-10-23" +source_commit: "b7c14c5b5d8ed78402c0c1efc196bb1bc7f93e37" +core_version: "0.9.8" display_name: "Apple - Apple II (POM2)" cores: - pom2 @@ -16,7 +16,7 @@ mode: standalone notes: | Apple ][, ][+, //e, //c and //c+ emulator by Arnaud Verhille, C++ with an ImGui frontend, plus a browser build and a headless CLI. Nine machine - profiles (src/SystemProfile.cpp:32-302): Apple ][ Original, ][+, //e + profiles (src/SystemProfile.cpp:32-305): Apple ][ Original, ][+, //e Unenhanced, //e Enhanced, //c, //c Plus, and PAL variants of the //e Unenhanced, //e Enhanced (the default) and //c (Le Chat Mauve). @@ -26,11 +26,12 @@ notes: | %LOCALAPPDATA%\POM2) when it really is per-user, the executable directory, its parent, ../share/POM2, the temp fallback data directory otherwise, then the working directory and its two parents. The first hit - wins. Release packages ship the whole roms/ tree, the fonts and the two - photos (packaging/bundle.manifest). + wins. Release packages ship the whole roms/ tree, the fonts, the About + photo, the two keyboard photos and the pic/retro artwork + (packaging/bundle.manifest:39, 50-61). Machine firmware is a probe chain per profile, first name found wins - (SystemProfile.cpp romProbeOrder, src/ProfileSwitch.cpp:113-133): + (SystemProfile.cpp romProbeOrder, src/ProfileSwitch.cpp:136-154): ][ Original apple2o.rom, apple2.rom ][+ apple2p.rom, apple2.rom //e Unenhanced apple2e_unenh.rom, 342-0135-b.64.rom, apple2e.rom @@ -38,18 +39,18 @@ notes: | //c apple2c-32Kv0.rom, apple2c-16K.rom, 3420033a.256 //c Plus apple2cp.rom, apple2c-plus.rom, apple2c-32Kv0.rom With no candidate the machine runs on a $D000-$FFFF stub and the Welcome - panel opens (src/MainWindow.cpp:328-336). A first run with no //e image - falls back to the ][+ chain (src/MainWindow.cpp:233-246). - Memory::loadAppleIIRom (src/Memory.cpp:174-237) maps 12 KB at $D000, + panel opens (src/MainWindow.cpp:334-342). A first run with no //e image + falls back to the ][+ chain (src/MainWindow.cpp:239-252). + Memory::loadAppleIIRom (src/Memory.cpp:175-262) maps 12 KB at $D000, 16 KB at $C000, skips the 4 KB pad of a 20 KB ][+ dump, and slices a 32 KB dump by profile: //e images carry the firmware in the upper half, //c and //c+ images are two firmware banks with bank 0 in the lower half - (src/SystemProfile.cpp:429). + (src/SystemProfile.cpp:432). Character generators follow charRomProbeOrder per profile, or the locale picked in the toolbar (src/CharRomCatalog.cpp:42-91, - src/ProfileSwitch.cpp:135-141). Memory::loadCharRom accepts 2 KB, 4 KB - and 8 KB dumps (src/Memory.cpp:325-358). An 8 KB dump is two 4 KB banks, + src/ProfileSwitch.cpp:156-162). Memory::loadCharRom accepts 2 KB, 4 KB + and 8 KB dumps (src/Memory.cpp:343-376). An 8 KB dump is two 4 KB banks, loaded as one bank or kept dual-bank with annunciator 2 selecting the live set. @@ -57,23 +58,24 @@ notes: | The Disk II carries the 341-0027-A boot PROM and the 16-sector P6 sequencer built in (src/DiskIICard.cpp:136-149). CFFA, Liron, Workstation, the MC68705 mouse card, the 1981 Grappler, the Apple - Parallel Interface and the Videx Videoterm leave the slot empty without - their dump. Grappler+, ThunderClock+ and the Super Serial Card run a - synthetic ROM instead, and TransWarp accelerates without its boot - firmware. The catalogue behind the ROM Status panel (src/RomCatalog.h) + Parallel Interface, the Videx Videoterm and the Apple Memory Expansion + Card leave the slot empty without their dump. Grappler+, ThunderClock+ + and the Super Serial Card run a synthetic ROM instead, and TransWarp + accelerates without its boot firmware. The catalogue behind the ROM Status panel (src/RomCatalog.h) lists every name in probe order with the size the loader enforces, what a missing dump costs (degraded, card unavailable, unused) and, where POM2 vouches for a dump, its CRC32. The panel hashes each present - file (src/RomStatus_ImGui.cpp:169-181, 311). + file (src/RomStatus_ImGui.cpp:185-212, 415) and lists the Virtual ][ + recordings with a decode check (src/RomStatus_ImGui.cpp:323-391). Help > Download missing ROMs (src/RomFetch.cpp:68-301) fetches 45 files, 43 distinct dumps, with curl from raw.githubusercontent.com/Abdess/retrobios, - pinned to HTTPS (src/RomFetch.cpp:732-748). Every entry carries a + pinned to HTTPS (src/RomFetch.cpp:734-750). Every entry carries a SHA-256, fourteen a CRC32 as well, and a download is installed only when its - size, CRC32 and SHA-256 match (src/RomFetch.cpp:629-665). A present file + size, CRC32 and SHA-256 match (src/RomFetch.cpp:631-667). A present file is re-checked with the same gate and, when it is not the catalogued dump, replaced after a copy to roms-replaced/ under the data directory - (src/RomFetch.cpp:579-627, 833-853, 862-880). A 12 KB apple2p.rom is the + (src/RomFetch.cpp:581-629, 840-860, 869-887). A 12 KB apple2p.rom is the one alternate size kept as is. Nine entries are members of MAME romsets, read in-process (src/ZipMember.cpp): apple2e_unenh.rom is 342-0135-b.64 then 342-0134-a.64 from apple2e.zip, mouse_341-0270-c.bin is @@ -81,21 +83,24 @@ notes: | a2ssc.zip, grappler_eps-1.bin is eps-1_c1981.u6 from a2grappler.zip, 341-0057.bin is 341-0057.7b from a2pic.zip, and the four Videoterm files come from a2vidtrm.zip. Downloads land in the per-user data directory's - roms/ (src/RomFetch.cpp:801-821). Unavailable in the browser build - (src/RomFetch.cpp:922-925). + roms/ (src/RomFetch.cpp:808-828). Unavailable in the browser build + (src/RomFetch.cpp:932-937). The floppy mechanical sounds are MAME's samples/floppy set, read from roms/floppy_samples/ as two banks of ten WAV files prefixed 525_ and 35_ - (src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358). A + (src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364). A missing sample is logged and the drive stays silent. A second bank, the - Virtual ][ recordings, is read from roms/virtual_ii_sons/ when that - directory exists (src/MainWindow.cpp:362-376): eight drive and switch - takes under lecteur/ and interface/ (src/FloppySoundDevice.cpp:195-204) - and one printer loop under imprimante/. The bank is selectable once - Disk Rotation, Move arm, Disk Insertion and Disk Removal have loaded - (src/FloppySoundDevice.cpp:205-225). An .aiff name is retried as .wav - (src/FloppySoundDevice.cpp:166-187). The packaging manifest keeps the - directory out of release packages (packaging/bundle.manifest:75-78). + Virtual ][ recordings, is read from the folder picked with Import + sounds in the audio mixer, stored as mechanical_sound_path + (src/MainWindow_AudioPanels.cpp:349-378), then from roms/virtual_ii_sons/ + (src/MainWindow.cpp:365-385): eight drive and switch takes under + lecteur/ and interface/ (src/VirtualIISoundCatalog.h:15-24) and one + printer loop under imprimante/ (src/VirtualIISoundCatalog.h:26-27). The + bank is selectable once Disk Rotation, Move arm, Disk Insertion and Disk + Removal have loaded (src/FloppySoundDevice.cpp:196-232). An .aiff name is + retried as .wav (src/FloppySoundDevice.cpp:173-194). The packaging + manifest keeps the directory out of release packages + (packaging/bundle.manifest:91-94). The nine takes come from Contents/Resources/ of Virtual ][.app in VirtualII.dmg, the free download on virtualii.com (Virtual ][ 13.3). @@ -108,15 +113,25 @@ notes: | and 16, and SoundRepeater fills an lpcm AudioStreamBasicDescription with one channel, the signed-integer flag for 16 bits and no big-endian flag. POM2 decodes all nine through miniaudio into mono float at the file's own - rate (src/FloppySoundDevice.cpp:133-164, src/PrinterSoundDevice.cpp:272-299). + rate (src/FloppySoundDevice.cpp:134-165, src/PrinterSoundDevice.cpp:79-101). + + The screen sits in a Monitor II bezel, pic/retro/monitor/monitor2.png, + on by default (src/MainWindow_Screen.cpp:371-372), and the Drives window + shows a picture per drive state from pic/retro/drives/ + (src/RetroArtwork.cpp:44-91, src/MainWindow_DriveRack.cpp:109-120). + Without a picture the screen has no bezel and the drive is drawn as a + vector mechanism (src/DriveRack_ImGui.cpp:57-61). The FujiNet card runs + FujiNet-PC Apple v1.5.2, a separate program the release packages carry + under fujinet-pc-APPLE// (src/FujiNetRuntime.cpp:38-62, + packaging/fujinet/stage.py:20-31). Media named by the code are not firmware and are not listed here: the - browser demo boots floppyemu/DIX.po (wasm/shell.html:89) or, when the - shell passes no disk, floppyemu/Total Replay v6.1.hdv - (src/main.cpp:285-289), and the headless CLI mounts - disks_5.4/dos33_master.dsk by default (src/pom2_headless.cpp:262-264). - Disk, tape and hard-disk images are browsed from disks_5.4/, disks_3.5/, - hdv/, floppyemu/, cassettes/ and prodos_folder/ next to the executable. + browser demo boots bundled_disks/DIX-fix.po on the //c PAL preset + (wasm/shell.html:102-105, src/main.cpp:313-319), and the headless CLI + mounts disks_5.4/dos33_master.dsk by default + (src/pom2_headless.cpp:265-267). Disk, tape and hard-disk images are + browsed from disks_5.4/, disks_3.5/, hdv/, floppyemu/, bundled_disks/, + cassettes/ and prodos_folder/ next to the executable. files: - name: "apple2o.rom" @@ -129,7 +144,7 @@ files: sha256: "68d9db6bb4c305d40c3fa89fa0f2d7b7f71516a9431e3138859f23bc5bddb2d1" sha1: "78008be557f643e956a106121bcc182c0fb9ea6d" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:38, src/Memory.cpp:174-237, src/RomFetch.cpp:72-75" + source_ref: "src/SystemProfile.cpp:38, src/Memory.cpp:175-262, src/RomFetch.cpp:72-75" note: "First candidate of the Apple ][ Original profile. apple2.rom is probed next." - name: "apple2.rom" path: "roms/apple2.rom" @@ -141,7 +156,7 @@ files: sha256: "fc3e9d41e9428534a883df5aa10eb55b73ea53d2fcbb3ee4f39bed1b07a82905" sha1: "33a24f5489ba9195b44be77d9afb2252594cb5c7" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:38, src/SystemProfile.cpp:54, src/ProfileSwitch.cpp:121-128, src/RomFetch.cpp:76-83" + source_ref: "src/SystemProfile.cpp:38, src/SystemProfile.cpp:54, src/ProfileSwitch.cpp:142-149, src/RomFetch.cpp:76-83" note: "Probed after the profile image for the ][ and ][+ profiles. When it resolves in place of that image the loader logs that the ROM identity may not match the machine." - name: "apple2p.rom" path: "roms/apple2p.rom" @@ -153,8 +168,8 @@ files: sha256: "92c4bef609920842ea472d21b661a0d35dbda6cd90963b8b734a205e22d84108" sha1: "29a53f3bb158b160433369e8e4a1d7cd5bf68ac6" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:54, src/Memory.cpp:222-232, src/RomFetch.cpp:84-96, src/RomFetch.cpp:862-873" - note: "First candidate of the ][+ profile and of the first-run fallback (src/MainWindow.cpp:242-246). The loader drops the leading 4 KB of the 20 KB dump. The fetch gate names that dump, but a 12 KB six-chip image already on disk is kept as present without a digest check." + source_ref: "src/SystemProfile.cpp:54, src/Memory.cpp:247-257, src/RomFetch.cpp:84-96, src/RomFetch.cpp:869-880" + note: "First candidate of the ][+ profile and of the first-run fallback (src/MainWindow.cpp:248-252). The loader drops the leading 4 KB of the 20 KB dump. The fetch gate names that dump, but a 12 KB six-chip image already on disk is kept as present without a digest check." - name: "apple2e.rom" path: "roms/apple2e.rom" description: "Apple //e Enhanced firmware, 32 KB dump with the 16 KB firmware in the upper half" @@ -165,7 +180,7 @@ files: sha256: "c17bc38c75ba96c33a30c688a1efd60144811073423533fe7f8453cdd9457aab" sha1: "d756eba578a6c5a4807510dfee30ee585c63755e" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:101, src/SystemProfile.cpp:241-253, src/Memory.cpp:202-214, src/Memory.cpp:233-235, src/MainWindow.cpp:233-236, src/RomFetch.cpp:97-100" + source_ref: "src/SystemProfile.cpp:101, src/SystemProfile.cpp:244-256, src/Memory.cpp:227-239, src/Memory.cpp:258-260, src/MainWindow.cpp:239-242, src/RomFetch.cpp:97-100" note: "Sole candidate of the //e Enhanced profiles, NTSC and PAL, PAL being the default machine. Also the last fallback of the //e Unenhanced chain." - name: "apple2e_unenh.rom" path: "roms/apple2e_unenh.rom" @@ -178,7 +193,7 @@ files: sha256: "1fb812584c6633fa16b77b20915986ed1178d1e6fc07a647f7ee8d4e6ab9d40b" sha1: "61fa9254628e5bb7236fb474006116d67684d747" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:78-79, src/SystemProfile.cpp:267-279, src/RomFetch.cpp:51-56, src/RomFetch.cpp:101-109" + source_ref: "src/SystemProfile.cpp:78-79, src/SystemProfile.cpp:270-282, src/RomFetch.cpp:51-56, src/RomFetch.cpp:101-109" note: "First candidate of the //e Unenhanced profiles. 342-0135-b.64.rom is probed second, apple2e.rom third. The fetcher assembles it from the two 8 KB chips of the MAME apple2e set, 342-0135-b.64 then 342-0134-a.64." - name: "apple2c-32Kv0.rom" path: "roms/apple2c-32Kv0.rom" @@ -191,7 +206,7 @@ files: sha256: "d65bbf97058b9cdce8eaebf74124048e3b4e42dca1bd42be316747bbc27dc124" sha1: "fb0d644aafaff1352d0816bc8494f6c9913809d5" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:142-143, src/SystemProfile.cpp:204-205, src/SystemProfile.cpp:429-434, src/Memory.cpp:202-214, src/Memory.cpp:233-235, src/RomFetch.cpp:110-113" + source_ref: "src/SystemProfile.cpp:142-143, src/SystemProfile.cpp:204-205, src/SystemProfile.cpp:432-437, src/Memory.cpp:227-239, src/Memory.cpp:258-260, src/RomFetch.cpp:110-113" note: "First candidate of the //c and //c PAL profiles, third of the //c Plus chain. Bank 0 is mapped at reset, the $C028 ROMBANK switch selects the other. Identical to 3420033a.256 with its first 256 bytes zeroed." - name: "apple2c-16K.rom" path: "roms/apple2c-16K.rom" @@ -204,7 +219,7 @@ files: sha256: "3ca1c8a27bf111aa0f4dc9372c5e6404457adb9a458ce32ae4b03a7e989e0c76" sha1: "1a9b8aca5e32bb702ddb7791daddd60a89655729" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:142-143, src/Memory.cpp:220-221, src/RomFetch.cpp:114-117" + source_ref: "src/SystemProfile.cpp:142-143, src/Memory.cpp:245-246, src/RomFetch.cpp:114-117" note: "Second candidate of the //c chain, loaded at $C000." - name: "3420033a.256" path: "roms/3420033a.256" @@ -231,7 +246,7 @@ files: sha256: "5a62070f6a0b07784681d4df4bf2ce88b2809bec0cbaa65fcb963e804ed60374" sha1: "1a27ae26966bbafd825d08ad1a24742d3e33557c" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:204-205, src/SystemProfile.cpp:429-434, src/RomFetch.cpp:122-125" + source_ref: "src/SystemProfile.cpp:204-205, src/SystemProfile.cpp:432-437, src/RomFetch.cpp:122-125" note: "First candidate of the //c Plus profile. apple2c-plus.rom is probed second and apple2c-32Kv0.rom third." - name: "apple2_char.rom" path: "roms/apple2_char.rom" @@ -243,7 +258,7 @@ files: sha256: "08f5d22230481019844492dde0a29a018cb193712a9e4a43770a3870608f28de" sha1: "f9d312f128c9557d9d6ac03bfad6c3ddf83e5659" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:39, src/SystemProfile.cpp:55, src/CharRomCatalog.cpp:42-43, src/RomFetch.cpp:128-131, src/Memory.cpp:325-358" + source_ref: "src/SystemProfile.cpp:39, src/SystemProfile.cpp:55, src/CharRomCatalog.cpp:42-43, src/RomFetch.cpp:128-131, src/Memory.cpp:343-376" note: "Sole candidate of the ][ and ][+ profiles and the last fallback of every //e-class chain." - name: "apple2e_char.rom" path: "roms/apple2e_char.rom" @@ -256,7 +271,7 @@ files: sha256: "52c3b87900ac939f6525402cab1ccfd8f8259290fc6df54da48fb4c98ae3ed0f" sha1: "b2b5d87f52693817fc747df087a4aa1ddcdb1f10" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:105, src/SystemProfile.cpp:144, src/SystemProfile.cpp:206, src/CharRomCatalog.cpp:48-49, src/RomFetch.cpp:132-144, src/Memory.cpp:325-358" + source_ref: "src/SystemProfile.cpp:105, src/SystemProfile.cpp:144, src/SystemProfile.cpp:206, src/CharRomCatalog.cpp:48-49, src/RomFetch.cpp:132-144, src/Memory.cpp:343-376" note: "First candidate of the //e Enhanced, //c and //c Plus profiles. The same dump answers to apple2e_char_us.rom in the locale picker, and the fetcher writes both names." - name: "apple2e_char_us_unenh.rom" path: "roms/apple2e_char_us_unenh.rom" @@ -269,7 +284,7 @@ files: sha256: "ed5bdd4afa509134e85f1d020685af7ff50e279226eb869a17825b471cc1634c" sha1: "58ad0008df72896a18601e090ee0d58155ffa5be" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:83-84, src/CharRomCatalog.cpp:50-51, src/RomFetch.cpp:145-152, src/Memory.cpp:325-358" + source_ref: "src/SystemProfile.cpp:83-84, src/CharRomCatalog.cpp:50-51, src/RomFetch.cpp:145-152, src/Memory.cpp:343-376" note: "The //e Unenhanced profile probes apple2e_char_2k.rom then 341-0265-a.chr.rom then apple2_char.rom. The same dump ships under both names and the fetcher writes both." - name: "apple2e_char_fr.rom" path: "roms/apple2e_char_fr.rom" @@ -282,7 +297,7 @@ files: sha256: "52d8e46b487a617c288caaf12ab7ad6cb81030b6ab92419f9a2e19c43d765566" sha1: "42afb02aab4146f781ac52803a2733adc4da834e" validation: [size, sha256] - source_ref: "src/CharRomCatalog.cpp:52-53, src/CharRomCatalog.cpp:56-57, src/CharRomCatalog.cpp:165-180, src/RomFetch.cpp:155-158, src/Memory.cpp:325-358" + source_ref: "src/CharRomCatalog.cpp:52-53, src/CharRomCatalog.cpp:56-57, src/CharRomCatalog.cpp:165-180, src/RomFetch.cpp:155-158, src/Memory.cpp:343-376" note: "Locale picker entry. The same dump is also listed as the FR Canadian unenhanced set 341-0168-A, a name the fetcher does not serve." - name: "apple2e_char_frca.rom" path: "roms/apple2e_char_frca.rom" @@ -294,7 +309,7 @@ files: sha256: "56479cbec4767651c62a4d0f61e6ed103395216f2b86eddba74d85495dd71cc4" sha1: "4043e0808af8be096660827445e41149d16c5c85" validation: [size, sha256] - source_ref: "src/CharRomCatalog.cpp:54-55, src/CharRomCatalog.cpp:165-180, src/RomFetch.cpp:159-162, src/Memory.cpp:325-358" + source_ref: "src/CharRomCatalog.cpp:54-55, src/CharRomCatalog.cpp:165-180, src/RomFetch.cpp:159-162, src/Memory.cpp:343-376" note: "Locale picker entry, equal to the low bank of 342-0274-a.e9." - name: "apple2e_char_uk.rom" path: "roms/apple2e_char_uk.rom" @@ -306,7 +321,7 @@ files: sha256: "d55bd5391485cd78c68c71408f09bd088e82a73d179a0a25820067a0c1554acd" sha1: "d19c2e2cc12b27d77edc403d5d0701186a4ed988" validation: [size, sha256] - source_ref: "src/CharRomCatalog.cpp:58-59, src/CharRomCatalog.cpp:165-180, src/RomFetch.cpp:163-166, src/Memory.cpp:325-358" + source_ref: "src/CharRomCatalog.cpp:58-59, src/CharRomCatalog.cpp:165-180, src/RomFetch.cpp:163-166, src/Memory.cpp:343-376" note: "Locale picker entry." - name: "apple2e_char_uk_unenh.rom" path: "roms/apple2e_char_uk_unenh.rom" @@ -318,7 +333,7 @@ files: sha256: "f2199fbfb473e98a8c3fb7e7c3312faaf76b4b010b02c655b662e5f87dc997f3" sha1: "6ca9767e0f47f642d1caab6ed41b8f58c58bb9eb" validation: [size, sha256] - source_ref: "src/CharRomCatalog.cpp:60-61, src/CharRomCatalog.cpp:165-180, src/RomFetch.cpp:167-170, src/Memory.cpp:325-358" + source_ref: "src/CharRomCatalog.cpp:60-61, src/CharRomCatalog.cpp:165-180, src/RomFetch.cpp:167-170, src/Memory.cpp:343-376" note: "Locale picker entry." - name: "apple2e_char_de.rom" path: "roms/apple2e_char_de.rom" @@ -330,7 +345,7 @@ files: sha256: "b92576b4fa994384501078ff99963b53cfa98eff4bb641eb61649d484a469315" sha1: "a7fd75ae8611572b0b4d99ad54562014b879dbbf" validation: [size, sha256] - source_ref: "src/CharRomCatalog.cpp:62-63, src/CharRomCatalog.cpp:165-180, src/RomFetch.cpp:171-174, src/Memory.cpp:325-358" + source_ref: "src/CharRomCatalog.cpp:62-63, src/CharRomCatalog.cpp:165-180, src/RomFetch.cpp:171-174, src/Memory.cpp:343-376" note: "Locale picker entry." - name: "apple2e_char_de_improved.rom" path: "roms/apple2e_char_de_improved.rom" @@ -342,7 +357,7 @@ files: sha256: "0e32ab131e3932fc61c0a5f0f5509b4c37ab8db6239027f5955d47feba56d39f" sha1: "12ce44f02bd28c350e2b0723d94ab8d9066f8798" validation: [size, sha256] - source_ref: "src/CharRomCatalog.cpp:64-65, src/CharRomCatalog.cpp:165-180, src/RomFetch.cpp:175-178, src/Memory.cpp:325-358" + source_ref: "src/CharRomCatalog.cpp:64-65, src/CharRomCatalog.cpp:165-180, src/RomFetch.cpp:175-178, src/Memory.cpp:343-376" note: "Locale picker entry." - name: "342-0274-a.e9" path: "roms/342-0274-a.e9" @@ -354,7 +369,7 @@ files: sha256: "d4d29771658372c6ab5d18ff3bdab6b3b2b02b8de30ed6b021efb8a415192432" sha1: "c81c1bbf237e70f8c3e5eef3c8fd5bd9b9f54d1e" validation: [size, sha256] - source_ref: "src/CharRomCatalog.cpp:81-84, src/CharRomCatalog.cpp:158-163, src/RomFetch.cpp:179-184, src/RomStatus_ImGui.cpp:250, src/Memory.cpp:325-358" + source_ref: "src/CharRomCatalog.cpp:81-84, src/CharRomCatalog.cpp:158-163, src/RomFetch.cpp:179-184, src/RomStatus_ImGui.cpp:282, src/Memory.cpp:343-376" note: "Locale picker entries select bank 0 or bank 1. Loaded whole, both banks stay live and annunciator 2 picks the set." - name: "apple2e_char_ft_blockascii.rom" path: "roms/apple2e_char_ft_blockascii.rom" @@ -366,7 +381,7 @@ files: sha256: "c69c8e1eb26923c5df03d3507fdf86c5f768283a924a5fffdd80377cf2339321" sha1: "f79815457437e50404f4f537d8aabe34bff3a220" validation: [size, sha256] - source_ref: "src/CharRomCatalog.cpp:85-86, src/RomFetch.cpp:185-189, src/RomStatus_ImGui.cpp:250, src/Memory.cpp:325-358" + source_ref: "src/CharRomCatalog.cpp:85-86, src/RomFetch.cpp:185-189, src/RomStatus_ImGui.cpp:282, src/Memory.cpp:343-376" note: "Locale picker entry loaded dual-bank: annunciator 2 flips between the text set and the block glyphs." - name: "apple2e_char_us_mt_iigs.rom" path: "roms/apple2e_char_us_mt_iigs.rom" @@ -378,7 +393,7 @@ files: sha1: "66eca035fd18024fceed4c30c32a4185792cb3ea" sha256: "097cd3500afe6c15d710d2e96af539a8e5065853986289294aac08ee7a1f070a" validation: [size] - source_ref: "src/CharRomCatalog.cpp:87-88, src/CharRomCatalog.cpp:165-180, src/RomStatus_ImGui.cpp:250, src/Memory.cpp:325-358" + source_ref: "src/CharRomCatalog.cpp:87-88, src/CharRomCatalog.cpp:165-180, src/RomStatus_ImGui.cpp:282, src/Memory.cpp:343-376" note: "Locale picker entry. Shipped in roms/. The fetcher does not serve it, so only the size is checked." - name: "apple2e_char_reactive.rom" path: "roms/apple2e_char_reactive.rom" @@ -390,7 +405,7 @@ files: sha1: "02075efbfdb99af48360561323404a921b91a676" sha256: "49716e2804b119810c22ab668ae37cebadf0cd53bc8911b5f17c4a62a3acb514" validation: [size] - source_ref: "src/CharRomCatalog.cpp:89-90, src/CharRomCatalog.cpp:165-180, src/RomStatus_ImGui.cpp:250, src/Memory.cpp:325-358" + source_ref: "src/CharRomCatalog.cpp:89-90, src/CharRomCatalog.cpp:165-180, src/RomStatus_ImGui.cpp:282, src/Memory.cpp:343-376" note: "Locale picker entry. Shipped in roms/. The fetcher does not serve it, so only the size is checked." - name: "Videx Lower Case Chip ROM.bin" path: "roms/Videx Lower Case Chip ROM.bin" @@ -402,7 +417,7 @@ files: sha256: "6a516bcd96382597af7a498fb1da7547490c830db0f9d22d541fb065b9cd048b" sha1: "447874fe0850c8add3fd5b13fa98f6648fe6f999" validation: [size, crc32, sha256] - source_ref: "src/CharRomCatalog.cpp:44-45, src/RomCatalog.h:208-214, src/RomFetch.cpp:190-194, src/RomStatus_ImGui.cpp:311" + source_ref: "src/CharRomCatalog.cpp:44-45, src/RomCatalog.h:208-214, src/RomFetch.cpp:190-194, src/RomStatus_ImGui.cpp:415" note: "Locale picker entry for the ][ and ][+ profiles. Without it the picker keeps the stock uppercase set." - name: "disk2.rom" path: "roms/disk2.rom" @@ -414,7 +429,7 @@ files: sha256: "de1e3e035878bab43d0af8fe38f5839c527e9548647036598ee6fe7ec74d2a7d" sha1: "d4181c9f046aafc3fb326b381baac809d9e38d16" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:102-115, src/DiskIICard.cpp:136-141, src/DiskIICard.cpp:151-174, src/RomFetch.cpp:197-200" + source_ref: "src/SlotCardFactory.cpp:106-119, src/DiskIICard.cpp:136-141, src/DiskIICard.cpp:151-174, src/RomFetch.cpp:197-200" note: "The card carries the same PROM built in, and the file replaces it when present." - name: "diskii_p6.rom" path: "roms/diskii_p6.rom" @@ -426,7 +441,7 @@ files: sha256: "e5e30615040567c1e7a2d21599681f8dac820edbdcda177b816a64d74b3a12f2" sha1: "bc39fbd5b9a8d2287ac5d0a42e639fc4d3c2f9d4" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:102-115, src/DiskIICard.cpp:142-149, src/DiskIICard.cpp:176-202, src/DiskIICard.cpp:251-263, src/RomFetch.cpp:201-204" + source_ref: "src/SlotCardFactory.cpp:106-119, src/DiskIICard.cpp:142-149, src/DiskIICard.cpp:176-202, src/DiskIICard.cpp:251-263, src/RomFetch.cpp:201-204" note: "Loading the file switches the bit-level LSS path on for every image. Without it the legacy 32-cycle nibble gate serves non-WOZ images and the built-in PROM serves WOZ images." - name: "disk2_13.rom" path: "roms/disk2_13.rom" @@ -437,7 +452,7 @@ files: sha256: "2d2599521fc5763d4e8c308c2ee7c5c4d5c93785b8fb9a4f7d0381dfd5eb60b6" sha1: "afd060e6f35faf3bb0146fa889fc787adf56330a" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:102-115, src/DiskIICard.cpp:204-221, src/DiskIICard.cpp:264-288, src/RomCatalog.h:90-93, src/RomFetch.cpp:205-208" + source_ref: "src/SlotCardFactory.cpp:106-119, src/DiskIICard.cpp:204-221, src/DiskIICard.cpp:264-288, src/RomCatalog.h:90-93, src/RomFetch.cpp:205-208" note: "A mounted 13-sector disk switches the card to this PROM at $Cn00 and forces the bit-level LSS. Without it the disk mounts but cannot boot." - name: "diskii_p6_13.rom" path: "roms/diskii_p6_13.rom" @@ -448,7 +463,7 @@ files: sha256: "383c55f5333cbfde39dd41528186631e5aca2eddfec30716344f03b6a4d44655" sha1: "e3d6d1c30653572b49ecc2dc54ce073978411a04" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:102-115, src/DiskIICard.cpp:223-240, src/DiskIICard.cpp:273-283, src/RomCatalog.h:94-97, src/RomFetch.cpp:209-212" + source_ref: "src/SlotCardFactory.cpp:106-119, src/DiskIICard.cpp:223-240, src/DiskIICard.cpp:273-283, src/RomCatalog.h:94-97, src/RomFetch.cpp:209-212" note: "Read into the card and not consumed: the 13-sector switch depends on disk2_13.rom alone, and the sequencer keeps running the 16-sector P6 on 13-sector disks." - name: "cffa20eec02.bin" path: "roms/cffa20eec02.bin" @@ -460,7 +475,7 @@ files: sha256: "a08cb25ad80054649ee5fcb620e01ed56f025acb28c753bc28dd187a1d149cab" sha1: "080ff88f19de22328e162954ee2b51ee65f9d5cd" validation: [size, crc32, sha256] - source_ref: "src/SlotCardFactory.cpp:124-148, src/CffaCard.cpp:26-40, src/RomCatalog.h:119-123, src/RomFetch.cpp:223-226" + source_ref: "src/SlotCardFactory.cpp:128-152, src/CffaCard.cpp:26-40, src/RomCatalog.h:119-123, src/RomFetch.cpp:223-226" note: "Preferred when the CPU is a 65C02, the 6502 build is the fallback, and the slot stays empty when neither is found." - name: "cffa20ee02.bin" path: "roms/cffa20ee02.bin" @@ -472,7 +487,7 @@ files: sha256: "3d7f6918f9af3828f5a6299299a817df0d354ee62e547bc0238755de66162a88" sha1: "d600692ed9626668233a22a48236af639410cb7b" validation: [size, crc32, sha256] - source_ref: "src/SlotCardFactory.cpp:124-148, src/CffaCard.cpp:26-40, src/RomCatalog.h:124-129, src/RomFetch.cpp:219-222" + source_ref: "src/SlotCardFactory.cpp:128-152, src/CffaCard.cpp:26-40, src/RomCatalog.h:124-129, src/RomFetch.cpp:219-222" note: "Preferred on an NMOS 6502, fallback for a 65C02." - name: "mouse_341-0270-c.bin" path: "roms/mouse_341-0270-c.bin" @@ -483,7 +498,7 @@ files: sha256: "7f8e50c0e8a409991264201f9300f109b872b68e09c43f3e6c26af35fd8b89af" sha1: "3a9d881a8a8d30f55b9719aceebbcf717f829d6f" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:60-92, src/SlotCardFactory.cpp:337-352, src/MouseCard.cpp:119-153, src/MouseCardAppleWin.cpp:89-102, src/RomFetch.cpp:243-248" + source_ref: "src/SlotCardFactory.cpp:64-96, src/SlotCardFactory.cpp:399-414, src/MouseCard.cpp:119-153, src/MouseCardAppleWin.cpp:90-103, src/RomFetch.cpp:243-248" note: "Needed by both mouse cards: the MC68705 card also needs the MCU ROM, the AppleWin HLE card needs this one only. The fetcher extracts it from the MAME a2mouse set as 341-0270-c.4b." - name: "mouse_341-0269.bin" path: "roms/mouse_341-0269.bin" @@ -494,7 +509,7 @@ files: sha256: "66480812edad5f6bd70349949cf8bd8fbafee2dc8bf396541d4e78bac2629ec0" sha1: "3a2baa6648efe4456d3ec3721216e57c64f7acfc" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:60-92, src/MouseCard.cpp:150-153, src/M68705P3.cpp:85-104, src/RomFetch.cpp:239-242" + source_ref: "src/SlotCardFactory.cpp:64-96, src/MouseCard.cpp:150-153, src/M68705P3.cpp:85-104, src/RomFetch.cpp:239-242" note: "The MC68705 mouse card leaves its slot empty without it." - name: "grappler_plus.bin" path: "roms/grappler_plus.bin" @@ -506,7 +521,7 @@ files: sha256: "9be4dea7722ad8928aee64c2ae708f365a6d66c50a63bff8a3c1a4e7596d44c6" sha1: "829072cc19a58b24d36c2af972abaad6f9ba35d9" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:156-175, src/GrapplerCard.cpp:30-53, src/RomCatalog.h:132-138, src/RomFetch.cpp:235-238" + source_ref: "src/SlotCardFactory.cpp:166-185, src/GrapplerCard.cpp:30-53, src/RomCatalog.h:132-138, src/RomFetch.cpp:235-238" note: "Without it the card runs a stub ROM: PR#n prints, the graphics dump commands are absent." - name: "ae_transwarp_1.4.bin" path: "roms/ae_transwarp_1.4.bin" @@ -531,7 +546,7 @@ files: sha256: "4fa1323ba31f4bd562486838397b7744257c126806766e360876720daca6e2aa" sha1: "6dab633470c6bc4cb3e81d09fda46597caf8ee57" validation: [size, crc32, sha256] - source_ref: "src/SlotCardFactory.cpp:379-397, src/SuperSerialCard.cpp:722-728, src/RomCatalog.h:147-154, src/RomFetch.cpp:281-284" + source_ref: "src/SlotCardFactory.cpp:441-459, src/SuperSerialCard.cpp:765-771, src/RomCatalog.h:147-154, src/RomFetch.cpp:281-284" note: "Three names are probed in order and a file that is not 2048 bytes is refused. Without it the card runs a hand-written slot ROM: PR#n, IN#n and the Pascal 1.1 entries work, the firmware commands and printer mode are absent. Not loaded on the //c and //c Plus. The fetcher extracts it from the MAME a2ssc set as 341-0065-a.bin." - name: "grappler_eps-1.bin" path: "roms/grappler_eps-1.bin" @@ -542,7 +557,7 @@ files: sha256: "4cce25c87ba4dd396919ce82f8567894225519c3d9db76c5667760f77054694f" sha1: "791ebae64a7fad8f42bdfaec36b9e2d34f12ded8" validation: [size, crc32, sha256] - source_ref: "src/SlotCardFactory.cpp:178-216, src/GrapplerClassicCard.cpp:28-34, src/RomCatalog.h:155-158, src/RomFetch.cpp:253-256" + source_ref: "src/SlotCardFactory.cpp:188-226, src/GrapplerClassicCard.cpp:28-34, src/RomCatalog.h:155-158, src/RomFetch.cpp:253-256" note: "The original Grappler leaves its slot empty without it. The fetcher extracts it from the MAME a2grappler set as eps-1_c1981.u6." - name: "341-0057.bin" path: "roms/341-0057.bin" @@ -553,7 +568,7 @@ files: sha256: "634e91bae5938820da79183984c03aa06075cbd5701d480debcc4f6d70620001" sha1: "de8aa285dcac88b1cc80ec9128b092833f5174b6" validation: [size, crc32, sha256] - source_ref: "src/SlotCardFactory.cpp:178-216, src/AppleParallelCard.cpp:28-34, src/RomCatalog.h:159-162, src/RomFetch.cpp:257-260" + source_ref: "src/SlotCardFactory.cpp:188-226, src/AppleParallelCard.cpp:28-34, src/RomCatalog.h:159-162, src/RomFetch.cpp:257-260" note: "The Apple Parallel Interface leaves its slot empty without it. The fetcher extracts it from the MAME a2pic set as 341-0057.7b." - name: "videx_videoterm_v24_60hz.bin" path: "roms/videx_videoterm_v24_60hz.bin" @@ -565,7 +580,7 @@ files: sha256: "420da3867e489824f5fc0377c287c48a125296f19e1306df764e8f63bd23b00a" sha1: "19f69011ed7d2551c39d5c1cac1f5a2defc8f8fb" validation: [size, crc32, sha256] - source_ref: "src/SlotCardFactory.cpp:235-246, src/SlotCardFactory.cpp:254-264, src/VidexVideotermCard.cpp:40-47, src/RomCatalog.h:165-171, src/RomFetch.cpp:263-266" + source_ref: "src/SlotCardFactory.cpp:245-256, src/SlotCardFactory.cpp:264-274, src/VidexVideotermCard.cpp:40-47, src/RomCatalog.h:165-171, src/RomFetch.cpp:263-266" note: "First firmware candidate of the Videoterm card. The 50 Hz dump is probed second. With neither the slot stays empty. The fetcher extracts it from the MAME a2vidtrm set." - name: "videx_videoterm_v24_50hz.bin" path: "roms/videx_videoterm_v24_50hz.bin" @@ -577,7 +592,7 @@ files: sha256: "616f4d9f81a7a4ea0fa918842a05dfb3b503927776d2bfe97e6950b5431b562e" sha1: "bb653836e84850ce3197f461d4e19355f738cfbf" validation: [size, crc32, sha256] - source_ref: "src/SlotCardFactory.cpp:235-246, src/VidexVideotermCard.cpp:40-47, src/RomCatalog.h:172-177, src/RomFetch.cpp:267-271" + source_ref: "src/SlotCardFactory.cpp:245-256, src/VidexVideotermCard.cpp:40-47, src/RomCatalog.h:172-177, src/RomFetch.cpp:267-271" note: "Fallback firmware of the Videoterm card, padded to 2 KB with $FF. The fetcher extracts it from the MAME a2vidtrm set." - name: "videx_videoterm_char_normal.bin" path: "roms/videx_videoterm_char_normal.bin" @@ -588,7 +603,7 @@ files: sha256: "ad873ca47e09def4c942177c84809d853231d4774e8d824e1b834d2033b8199c" sha1: "410b54f33d13c82e3857f1be906d93a8c5b8d321" validation: [size, crc32, sha256] - source_ref: "src/SlotCardFactory.cpp:247-264, src/VidexVideotermCard.cpp:49-65, src/RomCatalog.h:178-182, src/RomFetch.cpp:272-276" + source_ref: "src/SlotCardFactory.cpp:257-274, src/VidexVideotermCard.cpp:49-65, src/RomCatalog.h:178-182, src/RomFetch.cpp:272-276" note: "The Videoterm card leaves its slot empty without it. The fetcher extracts it from the MAME a2vidtrm set as videx videoterm character rom normal.bin." - name: "videx_videoterm_char_inverse.bin" path: "roms/videx_videoterm_char_inverse.bin" @@ -599,7 +614,7 @@ files: sha256: "4d03bd0934ab39cb18f22444e0361f91d1984131759c07010398ad5cf84397c0" sha1: "50c3df528109c65491a001ec74e50351a652c1fd" validation: [size, crc32, sha256] - source_ref: "src/SlotCardFactory.cpp:247-253, src/VidexVideotermCard.cpp:49-65, src/RomCatalog.h:183-188, src/RomFetch.cpp:277-280" + source_ref: "src/SlotCardFactory.cpp:257-263, src/VidexVideotermCard.cpp:49-65, src/RomCatalog.h:183-188, src/RomFetch.cpp:277-280" note: "Alternate set of the Videoterm card. A missing or wrong-size file is ignored and the card derives the set as the bitwise inverse of the normal one. The fetcher extracts it from the MAME a2vidtrm set." - name: "thunderclock_u9_v1.3.bin" path: "roms/thunderclock_u9_v1.3.bin" @@ -611,7 +626,7 @@ files: sha256: "ecca793179427fdd193373080bf23e49a95743bd7b5e0b218c747663938b6c03" sha1: "60f434f5325899d7ea257a6e56e6f53eae65146a" validation: [size, sha256] - source_ref: "src/ClockCard.cpp:469-530, src/RomCatalog.h:216-226, src/RomFetch.cpp:227-230" + source_ref: "src/ClockCard.cpp:582-643, src/RomCatalog.h:216-226, src/RomFetch.cpp:227-230" note: "The card loads a 256-byte slot ROM or the 2 KB chip, which supplies the $C800 expansion ROM as well. The fetch gate names the 2 KB dump and replaces a 256-byte file. The first four even bytes must read $08, $28, $58, $70, the ProDOS clock signature, or the synthetic ROM stays in place." - name: "liron.rom" path: "roms/liron.rom" @@ -622,7 +637,7 @@ files: sha256: "42c1ae66c6bec932669239599eb8989a5364752d56fa5c8997bb23d8dfc0b657" sha1: "fa94ecc2aa23f336f7da9e18bc8f4a6cfbb4ea60" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:299-325, src/LironCard.cpp:61-85, src/SmartPortCard.cpp:80-97, src/RomCatalog.h:100-104, src/RomFetch.cpp:215-218" + source_ref: "src/SlotCardFactory.cpp:352-387, src/LironCard.cpp:62-86, src/SmartPortCard.cpp:99-116, src/RomCatalog.h:100-104, src/RomFetch.cpp:215-218" note: "The Liron card refuses to plug without it. The SmartPort 3.5 card loads it on machines with physical slots and otherwise presents a synthetic identity." - name: "341-0358-A.bin" path: "roms/341-0358-A.bin" @@ -635,8 +650,20 @@ files: sha256: "ce785b913b9fcec6db0fab89b2d94f07fcd07664a822531dcbba3a5ca70ca3bf" sha1: "59c8e8c88bac5c31ada1306b412edfcf5912a720" validation: [size, crc32, sha256] - source_ref: "src/SlotCardFactory.cpp:274-297, src/WorkstationCard.cpp:60-74, src/RomCatalog.h:198-206, src/RomFetch.cpp:291-294" + source_ref: "src/SlotCardFactory.cpp:327-350, src/WorkstationCard.cpp:60-74, src/RomCatalog.h:198-206, src/RomFetch.cpp:291-294" note: "The Workstation card leaves its slot empty without it. The card runs its own 65C02 on the upper 32 KB." + - name: "slinky_341-0344a.bin" + path: "roms/slinky_341-0344a.bin" + description: "Apple Memory Expansion Card firmware 341-0344A, 4 KB, MAME a2memexp" + required: false + bundled: true + size: 4096 + crc32: "1e994e17" + sha256: "2b9beab16f64cda027ef8f2a048e54f3cb8f8016eafdc98d7be500c6a90ccc9c" + sha1: "6e823a1fa40ed37eeddcef23f5df24da2ea1463e" + validation: [size] + source_ref: "src/SlotCardFactory.cpp:299-325, src/SlinkyCard.cpp:38-40, src/SlinkyCard.h:93-97" + note: "The Memory Expansion card leaves its slot empty without it, and a file that is not 4096 bytes is refused. The firmware is the card's ProDOS RAM-disk driver: seven per-slot $Cn00 pages and the $C800 expansion ROM. Not in the fetch catalogue." - name: "341-0438-a.bin" path: "roms/341-0438-a.bin" description: "Apple II 3.5 Disk Controller SuperDrive firmware 341-0438-A, MAME a2superdrive" @@ -647,7 +674,7 @@ files: sha256: "084587835c1d2c92f5708a9745fdd43ba32136fcdb861a12ee7d690de22dc172" sha1: "440c3f84176c7b9f542da0b6ddf4fb13ec326c46" validation: [size, crc32, sha256] - source_ref: "src/RomCatalog.h:105-111, src/RomStatus_ImGui.cpp:169-181, src/RomFetch.cpp:287-290" + source_ref: "src/RomCatalog.h:105-111, src/RomStatus_ImGui.cpp:188-206, src/RomFetch.cpp:287-290" note: "No card reads it. The ROM Status panel and the fetch gate check it." - name: "342-0326-a.f12" path: "roms/342-0326-a.f12" @@ -659,7 +686,7 @@ files: sha256: "4ae7ff693a486b155a70a8833047b3d4363464dace6760ed64bfb68db233ed4b" sha1: "806a602195c18ffec637c03b6bb3405188b0dc1e" validation: [size, crc32, sha256] - source_ref: "src/RomCatalog.h:112-118, src/RomStatus_ImGui.cpp:169-181, src/RomStatus_ImGui.cpp:311, src/RomFetch.cpp:295-298" + source_ref: "src/RomCatalog.h:112-118, src/RomStatus_ImGui.cpp:188-206, src/RomStatus_ImGui.cpp:415, src/RomFetch.cpp:295-298" note: "Host keys are mapped directly, no keyboard decode ROM is emulated. The ROM Status panel and the fetch gate check the file only." - name: "525_seek_2ms.wav" path: "roms/floppy_samples/525_seek_2ms.wav" @@ -669,7 +696,7 @@ files: bundled: true size: 5336 sha1: "2d046a880476218685ed738fe8c8381962afd74a" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" note: "One of ten samples per drive bank. A missing sample is logged and that sound stays silent." - name: "525_seek_6ms.wav" path: "roms/floppy_samples/525_seek_6ms.wav" @@ -679,7 +706,7 @@ files: bundled: true size: 14860 sha1: "6f698055fa6e9da6c5ae3fd6fb05de76b92a45a9" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "525_seek_12ms.wav" path: "roms/floppy_samples/525_seek_12ms.wav" description: "MAME floppy sample, 5.25 inch drive, 12 ms head seek" @@ -688,7 +715,7 @@ files: bundled: true size: 22764 sha1: "fbbbb5e8724c076d194e66a4443d299d54a8efd6" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "525_seek_20ms.wav" path: "roms/floppy_samples/525_seek_20ms.wav" description: "MAME floppy sample, 5.25 inch drive, 20 ms head seek" @@ -697,7 +724,7 @@ files: bundled: true size: 30060 sha1: "b6cd14944454c743861196edb4fcab1cc9b586d4" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "525_spin_empty.wav" path: "roms/floppy_samples/525_spin_empty.wav" description: "MAME floppy sample, 5.25 inch drive, motor running, no disk" @@ -706,7 +733,7 @@ files: bundled: true size: 8864 sha1: "4b13701d9a7f8ab0f0827f17ba80b5c32b4e0fa7" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "525_spin_loaded.wav" path: "roms/floppy_samples/525_spin_loaded.wav" description: "MAME floppy sample, 5.25 inch drive, motor running, disk loaded" @@ -715,7 +742,7 @@ files: bundled: true size: 17708 sha1: "875f90538a3ff5db863ad4c384e1808841ddea9b" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "525_spin_start_empty.wav" path: "roms/floppy_samples/525_spin_start_empty.wav" description: "MAME floppy sample, 5.25 inch drive, motor start, no disk" @@ -724,7 +751,7 @@ files: bundled: true size: 11180 sha1: "b87d89c4b46c36dd78dec3dc5170ca61501e7cd9" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "525_spin_start_loaded.wav" path: "roms/floppy_samples/525_spin_start_loaded.wav" description: "MAME floppy sample, 5.25 inch drive, motor start, disk loaded" @@ -733,7 +760,7 @@ files: bundled: true size: 17708 sha1: "510476098848e2b5cdfe9f1608f8dfa3207fe9b4" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "525_spin_end.wav" path: "roms/floppy_samples/525_spin_end.wav" description: "MAME floppy sample, 5.25 inch drive, motor stop" @@ -742,7 +769,7 @@ files: bundled: true size: 8864 sha1: "f8d9b94c4d92d35d9ffb1117b693fc74a93f613f" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "525_step_1_1.wav" path: "roms/floppy_samples/525_step_1_1.wav" description: "MAME floppy sample, 5.25 inch drive, single track step" @@ -751,7 +778,7 @@ files: bundled: true size: 6628 sha1: "669ee98fb9fac4371c72ed0b60be1bc8470bc7f8" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "35_seek_2ms.wav" path: "roms/floppy_samples/35_seek_2ms.wav" description: "MAME floppy sample, 3.5 inch drive, 2 ms head seek" @@ -760,7 +787,7 @@ files: bundled: true size: 7450 sha1: "55caafbd19486b8d517e4b33a6fa65250df55e25" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" note: "One of ten samples per drive bank. A missing sample is logged and that sound stays silent." - name: "35_seek_6ms.wav" path: "roms/floppy_samples/35_seek_6ms.wav" @@ -770,7 +797,7 @@ files: bundled: true size: 22230 sha1: "87e5dec269e67497681c15849777ebfc301131c1" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "35_seek_12ms.wav" path: "roms/floppy_samples/35_seek_12ms.wav" description: "MAME floppy sample, 3.5 inch drive, 12 ms head seek" @@ -779,7 +806,7 @@ files: bundled: true size: 26540 sha1: "c6b34fc61496943134ac45cc836a24e743caf794" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "35_seek_20ms.wav" path: "roms/floppy_samples/35_seek_20ms.wav" description: "MAME floppy sample, 3.5 inch drive, 20 ms head seek" @@ -788,7 +815,7 @@ files: bundled: true size: 44144 sha1: "b2fe4c3a4185146a7d11483d92d4412dd79dbc78" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "35_spin_empty.wav" path: "roms/floppy_samples/35_spin_empty.wav" description: "MAME floppy sample, 3.5 inch drive, motor running, no disk" @@ -797,7 +824,7 @@ files: bundled: true size: 17708 sha1: "db04fc097bdd0411cff232f57525ded491b48c6c" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "35_spin_loaded.wav" path: "roms/floppy_samples/35_spin_loaded.wav" description: "MAME floppy sample, 3.5 inch drive, motor running, disk loaded" @@ -806,7 +833,7 @@ files: bundled: true size: 17708 sha1: "96ce04a5b02af0da6d311f06fc4906a3cf71c78f" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "35_spin_start_empty.wav" path: "roms/floppy_samples/35_spin_start_empty.wav" description: "MAME floppy sample, 3.5 inch drive, motor start, no disk" @@ -815,7 +842,7 @@ files: bundled: true size: 17708 sha1: "af770fd9261a8efee23d66cd39b27be7b2ab7853" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "35_spin_start_loaded.wav" path: "roms/floppy_samples/35_spin_start_loaded.wav" description: "MAME floppy sample, 3.5 inch drive, motor start, disk loaded" @@ -824,7 +851,7 @@ files: bundled: true size: 35308 sha1: "c82b1714378bf2507ed86dea1e9fe743c380abab" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "35_spin_end.wav" path: "roms/floppy_samples/35_spin_end.wav" description: "MAME floppy sample, 3.5 inch drive, motor stop" @@ -833,7 +860,7 @@ files: bundled: true size: 17684 sha1: "a8901b692de15eb7a9052f61283f0e7a2b63d67d" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "35_step_1_1.wav" path: "roms/floppy_samples/35_step_1_1.wav" description: "MAME floppy sample, 3.5 inch drive, single track step" @@ -842,7 +869,7 @@ files: bundled: true size: 6878 sha1: "40d756d0cb5f7998ca26ac1de142a96a83fa2b97" - source_ref: "src/FloppySoundDevice.cpp:81-119, src/MainWindow.cpp:345-358" + source_ref: "src/FloppySoundDevice.cpp:82-120, src/MainWindow.cpp:351-364" - name: "Disk Rotation.wav" path: "roms/virtual_ii_sons/lecteur/Disk Rotation.wav" description: "Virtual ][ recording, drive motor loop" @@ -850,7 +877,7 @@ files: required: false size: 18420 sha1: "553e664b2f41f1cc74e2525c966e9c71f9e3bd2f" - source_ref: "src/FloppySoundDevice.cpp:196, src/FloppySoundDevice.cpp:166-187, src/FloppySoundDevice.cpp:205-225, src/MainWindow.cpp:362-376" + source_ref: "src/VirtualIISoundCatalog.h:16, src/FloppySoundDevice.cpp:173-194, src/FloppySoundDevice.cpp:196-232, src/MainWindow.cpp:365-385" note: "The Virtual ][ bank is offered only when this file and the arm, insertion and removal takes have loaded. Virtual ][ Disk Rotation.raw (sha1 993b054ee6ecf3778186937593d591eba332bdd6) behind a mono 44100 Hz 16-bit PCM RIFF header." - name: "Boot.wav" path: "roms/virtual_ii_sons/lecteur/Boot.wav" @@ -859,7 +886,7 @@ files: required: false size: 6806 sha1: "15c67468555494a9336d8f1981806ecd05a47da4" - source_ref: "src/FloppySoundDevice.cpp:197, src/FloppySoundDevice.cpp:166-187, src/FloppySoundDevice.cpp:205-225, src/MainWindow.cpp:362-376" + source_ref: "src/VirtualIISoundCatalog.h:17, src/FloppySoundDevice.cpp:173-194, src/FloppySoundDevice.cpp:196-232, src/MainWindow.cpp:365-385" note: "Virtual ][ Boot.raw (sha1 06db331ec01064661bf64ed39b58a9b35aaec067) behind a mono 44100 Hz 16-bit PCM RIFF header." - name: "Move arm.aiff" path: "roms/virtual_ii_sons/lecteur/Move arm.aiff" @@ -869,7 +896,7 @@ files: size: 36510 sha1: "3e03cfef6a327adf9e2c09dd329a4c5b8e0aac52" aliases: ["Move arm.wav"] - source_ref: "src/FloppySoundDevice.cpp:198, src/FloppySoundDevice.cpp:166-187, src/FloppySoundDevice.cpp:205-225, src/MainWindow.cpp:362-376" + source_ref: "src/VirtualIISoundCatalog.h:18, src/FloppySoundDevice.cpp:173-194, src/FloppySoundDevice.cpp:196-232, src/MainWindow.cpp:365-385" note: "Needed for the bank. The .wav name is tried when the .aiff does not decode. Virtual ][ Move arm.aiff unchanged." - name: "Disk Insertion.aiff" path: "roms/virtual_ii_sons/lecteur/Disk Insertion.aiff" @@ -879,7 +906,7 @@ files: size: 69146 sha1: "3da6c2e5986c38b6c7200bacc95ef076d0429152" aliases: ["Disk Insertion.wav"] - source_ref: "src/FloppySoundDevice.cpp:199, src/FloppySoundDevice.cpp:166-187, src/FloppySoundDevice.cpp:205-225, src/MainWindow.cpp:362-376" + source_ref: "src/VirtualIISoundCatalog.h:19, src/FloppySoundDevice.cpp:173-194, src/FloppySoundDevice.cpp:196-232, src/MainWindow.cpp:365-385" note: "Needed for the bank. The .wav name is tried when the .aiff does not decode. Virtual ][ Disk Insertion.aiff unchanged." - name: "Disk Removal.aiff" path: "roms/virtual_ii_sons/lecteur/Disk Removal.aiff" @@ -889,7 +916,7 @@ files: size: 243894 sha1: "9c33c1c1d793c8b9d6ff2e7867ae3c51f2556355" aliases: ["Disk Removal.wav"] - source_ref: "src/FloppySoundDevice.cpp:200, src/FloppySoundDevice.cpp:166-187, src/FloppySoundDevice.cpp:205-225, src/MainWindow.cpp:362-376" + source_ref: "src/VirtualIISoundCatalog.h:20, src/FloppySoundDevice.cpp:173-194, src/FloppySoundDevice.cpp:196-232, src/MainWindow.cpp:365-385" note: "Needed for the bank. The .wav name is tried when the .aiff does not decode. Virtual ][ Disk Removal.aiff unchanged." - name: "I-O Error.wav" path: "roms/virtual_ii_sons/lecteur/I-O Error.wav" @@ -898,7 +925,7 @@ files: required: false size: 4014 sha1: "464e3d8f9b50d21cef706503058cef63a5d73995" - source_ref: "src/FloppySoundDevice.cpp:201, src/FloppySoundDevice.cpp:166-187, src/FloppySoundDevice.cpp:205-225, src/MainWindow.cpp:362-376" + source_ref: "src/VirtualIISoundCatalog.h:21, src/FloppySoundDevice.cpp:173-194, src/FloppySoundDevice.cpp:196-232, src/MainWindow.cpp:365-385" note: "Virtual ][ I-O Error.raw (sha1 b123ef605fa977bcda49617cb96c7bc898281dbc) behind a mono 44100 Hz 16-bit PCM RIFF header." - name: "PopOn2.aiff" path: "roms/virtual_ii_sons/interface/PopOn2.aiff" @@ -908,7 +935,7 @@ files: size: 172338 sha1: "7473f2ade668f9155729e6dfc56775f998bb9ac3" aliases: ["PopOn2.wav"] - source_ref: "src/FloppySoundDevice.cpp:202, src/FloppySoundDevice.cpp:166-187, src/FloppySoundDevice.cpp:205-225, src/MainWindow.cpp:362-376" + source_ref: "src/VirtualIISoundCatalog.h:22, src/FloppySoundDevice.cpp:173-194, src/FloppySoundDevice.cpp:196-232, src/MainWindow.cpp:365-385" note: "Virtual ][ PopOn2.aiff unchanged." - name: "PopOff2.aiff" path: "roms/virtual_ii_sons/interface/PopOff2.aiff" @@ -918,7 +945,7 @@ files: size: 144702 sha1: "60b4b8bb589bcc3e4c6876a09d4aa4b391390798" aliases: ["PopOff2.wav"] - source_ref: "src/FloppySoundDevice.cpp:203, src/FloppySoundDevice.cpp:166-187, src/FloppySoundDevice.cpp:205-225, src/MainWindow.cpp:362-376" + source_ref: "src/VirtualIISoundCatalog.h:23, src/FloppySoundDevice.cpp:173-194, src/FloppySoundDevice.cpp:196-232, src/MainWindow.cpp:365-385" note: "Virtual ][ PopOff2.aiff unchanged." - name: "Matrix Printer.wav" path: "roms/virtual_ii_sons/imprimante/Matrix Printer.wav" @@ -927,7 +954,7 @@ files: required: false size: 1316870 sha1: "0b0363772efc684ea0d21cb79e62a0df63f0c094" - source_ref: "src/MainWindow.cpp:372-374, src/PrinterSoundDevice.cpp:272-299" + source_ref: "src/VirtualIISoundCatalog.h:26-27, src/MainWindow.cpp:380-383, src/PrinterSoundDevice.cpp:79-101, src/PrinterSoundDevice.cpp:296-320" note: "Loaded when present, otherwise the printer sound is generated. Virtual ][ Matrix Printer.raw (sha1 6f6d26237389435693469b4dd0e0b69083797bff) behind a mono 44100 Hz 16-bit PCM RIFF header." - name: "DejaVuSans.ttf" path: "fonts/DejaVuSans.ttf" @@ -937,7 +964,7 @@ files: bundled: true size: 759720 sha1: "3061cf7af25793a655a1ff5a509385f3620f3eb3" - source_ref: "src/main.cpp:533-546" + source_ref: "src/main.cpp:560-573" note: "Falls back to the system DejaVu, Arial Unicode or Segoe UI, then to the ImGui bitmap font." - name: "fa-solid-900.ttf" path: "fonts/fa-solid-900.ttf" @@ -947,7 +974,7 @@ files: bundled: true size: 426112 sha1: "0c8c9706abc0116f08b66d11a69da6aa9ef7e6bf" - source_ref: "src/main.cpp:593-611" + source_ref: "src/main.cpp:620-638" note: "Without it every icon renders as an empty box." - name: "Apple_II_plus.jpg" path: "pic/Apple_II_plus.jpg" @@ -957,14 +984,180 @@ files: bundled: true size: 102046 sha1: "69358dd499148deae4112b49cedb7bec220584e2" - source_ref: "src/MainWindow_MiscPanels.cpp:621" + source_ref: "src/MainWindow_MiscPanels.cpp:657" - name: "Keyboard_AppleIIe.jpeg" path: "pic/Keyboard_AppleIIe.jpeg" description: "Apple //e keyboard photograph the clickable keyboard window is built on" category: game_data required: false bundled: true - size: 794259 - sha1: "a178f37661078739637ff7642cd6450c762993aa" - source_ref: "src/MainWindow_MiscPanels.cpp:480" - note: "The window hotspots are fractions of this image. Without it the window has nothing to click." + size: 568596 + sha1: "dc85406f7bb69c4439088e78afab610afb753865" + source_ref: "src/KeyboardSkin.cpp:142-152, src/MainWindow_MiscPanels.cpp:515-526" + note: "Keyboard window picture for every profile outside the //c family. The window hotspots are fractions of this image. Without it the window has nothing to click." + - name: "Keyboard_AppleIIc.png" + path: "pic/Keyboard_AppleIIc.png" + description: "Apple //c keyboard photograph the clickable keyboard window uses on the //c family" + category: game_data + required: false + bundled: true + size: 1743304 + sha1: "f7c8a696d66ce9403b5c2f5f62b797c816961df0" + source_ref: "src/KeyboardSkin.cpp:142-152, src/MainWindow_MiscPanels.cpp:515-526" + note: "Keyboard window picture for the //c, //c PAL and //c Plus profiles. Without it the window has nothing to click." + - name: "monitor2.png" + path: "pic/retro/monitor/monitor2.png" + description: "Apple Monitor II bezel drawn around the screen" + category: game_data + required: false + bundled: true + size: 24460 + sha1: "1b8f16f4e74e6717d0332364c7b80cf20f37580f" + source_ref: "src/RetroArtwork.cpp:44-47, src/MainWindow_Screen.cpp:371-372" + note: "Drawn by default. Without it the screen has no bezel." + - name: "driveopen.png" + path: "pic/retro/drives/driveopen.png" + description: "Disk II drive 1, door open, motor off" + category: game_data + required: false + bundled: true + size: 81661 + sha1: "c768cae9b9f1c8aed4bbea72df40767b00935530" + source_ref: "src/RetroArtwork.cpp:75-91, src/MainWindow_DriveRack.cpp:113-116" + note: "Drives window picture. Without it the drive is drawn as a vector mechanism." + - name: "driveopenrunning.png" + path: "pic/retro/drives/driveopenrunning.png" + description: "Disk II drive 1, door open, motor on" + category: game_data + required: false + bundled: true + size: 83258 + sha1: "7fb68df047b698fb6c4308ca518c7e8af72c86cf" + source_ref: "src/RetroArtwork.cpp:75-91, src/MainWindow_DriveRack.cpp:113-116" + - name: "driveclosed.png" + path: "pic/retro/drives/driveclosed.png" + description: "Disk II drive 1, disk in, motor off" + category: game_data + required: false + bundled: true + size: 97766 + sha1: "a0cafd4de513c9787a15484a2658c10cb529b5af" + source_ref: "src/RetroArtwork.cpp:75-91, src/MainWindow_DriveRack.cpp:113-116" + - name: "driverunning.png" + path: "pic/retro/drives/driverunning.png" + description: "Disk II drive 1, disk in, motor on" + category: game_data + required: false + bundled: true + size: 99189 + sha1: "24fbad2dccd60363e08cfca0a2f94b55c7ef6775" + source_ref: "src/RetroArtwork.cpp:75-91, src/MainWindow_DriveRack.cpp:113-116" + - name: "drive2open.png" + path: "pic/retro/drives/drive2open.png" + description: "Disk II drive 2, door open, motor off" + category: game_data + required: false + bundled: true + size: 82048 + sha1: "d35419fe9ca5cdee1bd6e35ebd5378be15021ee5" + source_ref: "src/RetroArtwork.cpp:75-91, src/MainWindow_DriveRack.cpp:113-116" + - name: "drive2openrunning.png" + path: "pic/retro/drives/drive2openrunning.png" + description: "Disk II drive 2, door open, motor on" + category: game_data + required: false + bundled: true + size: 83639 + sha1: "8b2d611608b67898819cba78c37ea9c81aeb8461" + source_ref: "src/RetroArtwork.cpp:75-91, src/MainWindow_DriveRack.cpp:113-116" + - name: "drive2closed.png" + path: "pic/retro/drives/drive2closed.png" + description: "Disk II drive 2, disk in, motor off" + category: game_data + required: false + bundled: true + size: 98370 + sha1: "200ef91f19ac37d95edf270149f3856e278c76d0" + source_ref: "src/RetroArtwork.cpp:75-91, src/MainWindow_DriveRack.cpp:113-116" + - name: "drive2running.png" + path: "pic/retro/drives/drive2running.png" + description: "Disk II drive 2, disk in, motor on" + category: game_data + required: false + bundled: true + size: 99783 + sha1: "82b7541e0ba7f5c466079e7bfe8121f827c64c02" + source_ref: "src/RetroArtwork.cpp:75-91, src/MainWindow_DriveRack.cpp:113-116" + - name: "diskiicopen.png" + path: "pic/retro/drives/diskiicopen.png" + description: "//c built-in drive, door open, motor off" + category: game_data + required: false + bundled: true + size: 14098 + sha1: "c9a06c6bfb9a5b8d5261ad2a4ba100c2e1eb66ac" + source_ref: "src/RetroArtwork.cpp:56-66, src/MainWindow_DriveRack.cpp:113-116" + note: "Used in place of the Disk II pictures on the //c, //c PAL and //c Plus profiles." + - name: "diskiicopenrunning.png" + path: "pic/retro/drives/diskiicopenrunning.png" + description: "//c built-in drive, door open, motor on" + category: game_data + required: false + bundled: true + size: 14054 + sha1: "e5520d89d11669137c639469ad4818c7b7b8ba12" + source_ref: "src/RetroArtwork.cpp:56-66, src/MainWindow_DriveRack.cpp:113-116" + - name: "diskiicclosed.png" + path: "pic/retro/drives/diskiicclosed.png" + description: "//c built-in drive, disk in, motor off" + category: game_data + required: false + bundled: true + size: 13876 + sha1: "5f958d799ed0037dfa0c05b8594289135080ea2a" + source_ref: "src/RetroArtwork.cpp:56-66, src/MainWindow_DriveRack.cpp:113-116" + - name: "diskiicrunning.png" + path: "pic/retro/drives/diskiicrunning.png" + description: "//c built-in drive, disk in, motor on" + category: game_data + required: false + bundled: true + size: 13830 + sha1: "8af19c7739c5e796f9870dbc1808e81ddf85bbd1" + source_ref: "src/RetroArtwork.cpp:56-66, src/MainWindow_DriveRack.cpp:113-116" + - name: "apple35.png" + path: "pic/retro/drives/apple35.png" + description: "3.5 inch drive, idle" + category: game_data + required: false + bundled: true + size: 8746 + sha1: "17605fc7452fdf062496d062fb0f4cef11ee9969" + source_ref: "src/RetroArtwork.cpp:49-54, src/MainWindow_DriveRack.cpp:117-118" + - name: "apple35running.png" + path: "pic/retro/drives/apple35running.png" + description: "3.5 inch drive, busy" + category: game_data + required: false + bundled: true + size: 8743 + sha1: "5c5df0b5393ef75169651799e912cd66ce938abc" + source_ref: "src/RetroArtwork.cpp:49-54, src/MainWindow_DriveRack.cpp:117-118" + - name: "applehd.png" + path: "pic/retro/drives/applehd.png" + description: "Hard disk, idle" + category: game_data + required: false + bundled: true + size: 7792 + sha1: "f0c81be813937e16adfa5d01914b14017d21b121" + source_ref: "src/RetroArtwork.cpp:68-73, src/MainWindow_DriveRack.cpp:119-120" + - name: "applehdrunning.png" + path: "pic/retro/drives/applehdrunning.png" + description: "Hard disk, busy" + category: game_data + required: false + bundled: true + size: 7690 + sha1: "dfe8bdfccad5aeea4b5077b2e45ee27bcb6278d7" + source_ref: "src/RetroArtwork.cpp:68-73, src/MainWindow_DriveRack.cpp:119-120" From 78b4c9f406c10a811084a4353e2b579f0b2e89f0 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Fri, 23 Oct 2026 15:37:06 +0200 Subject: [PATCH 36/49] chore: move visual-pinball to f912c04 Build scripts now fetch PinMAME 652249e2; its cited lines only shifted. Music accepts an absolute script path, and PUP packs gain a PUPSOUNDS/ sound bank. --- emulators/visual-pinball.yml | 95 +++++++++++++++++++----------------- 1 file changed, 49 insertions(+), 46 deletions(-) diff --git a/emulators/visual-pinball.yml b/emulators/visual-pinball.yml index f3f9dc11..363b123f 100644 --- a/emulators/visual-pinball.yml +++ b/emulators/visual-pinball.yml @@ -3,8 +3,8 @@ type: standalone core_classification: game_engine source: "https://github.com/vpinball/vpinball" upstream: "https://github.com/vpinball/vpinball" -profiled_date: "2026-10-20" -source_commit: "e4a79a5d58df3d543ffb5360ae8458cfdf4cb7bb" +profiled_date: "2026-10-23" +source_commit: "f912c04bcf727a341524f251b600c6bba8f883d8" core_version: "10.8.1" display_name: "Visual Pinball X" cores: @@ -17,14 +17,14 @@ mode: standalone notes: | Pinball table simulator. The table is the content: .vpx and .vpt files are OLE Compound Documents holding the geometry, textures, sounds and a VBScript - program, read through POLE (src/parts/pintable.cpp:1538-1541), and a .vpz + program, read through POLE (src/parts/pintable.cpp:1550-1553), and a .vpz pack, a zip or a plain folder of JSON part files, is read through the JSON - serializer instead (src/parts/pintable.cpp:1447, + serializer instead (src/parts/pintable.cpp:1459, src/utils/JSONSerializer.cpp:1096-1102). Every build other than the Windows editor compiles the shared source set with __STANDALONE__ and links libwinevbs, Wine's VBScript engine with its COM and ATL headers, beside SDL3, SDL3_ttf, FreeImage, hidapi, libspatialaudio and libmysofa with zlib - (make/CMakeLists_app.txt:535-556,607-617, make/CMakeLists_sources.txt:829-835). + (make/CMakeLists_app.txt:558-579,630-640, make/CMakeLists_sources.txt:829-835). AlphaDMD, AltSound, B2S, DMDUtil, DOF, FlexDMD, HelloScript, HelloWorld, Inspector, Nixie, PinMAME, PUP, RemoteControl, Serum, UpscaleDMD, VNI and WMP are plugins staged in plugins/ next to the binary, ../PlugIns on macOS @@ -56,11 +56,11 @@ notes: | user/ and scripts/ beside it, then the installation folder with user/, scripts/ and tables/ under it, then the preferences folder with user/ and scripts/ under it (src/core/FileLocator.cpp:400-433, - src/core/ScriptGlobalTable.cpp:350-379). The + src/core/ScriptGlobalTable.cpp:354-383). The scripts/ directory the build ships carries the 73 .vbs files tables include by name, core.vbs and controller.vbs beside the per-manufacturer machine scripts (WPC.vbs, sam.vbs, s11.vbs, zac.vbs and the rest), copied from - src/scripts (make/CMakeLists_app.txt:633-637). The Windows editor's + src/scripts (make/CMakeLists_app.txt:656-660). The Windows editor's completion parser asks for core.vbs through the same search without a table, so in the seven installation and preferences locations, and shows a warning box when none holds it (src/ui/win/codeview.cpp:2053-2061, @@ -70,7 +70,7 @@ notes: | folder or the installation folder when SDL reports none, MusicDirectory the table's music folder with an optional subfolder, ScriptsDirectory scripts/ under the installation folder. Each fails when its directory does not exist - (src/core/ScriptGlobalTable.cpp:381-422, src/core/FileLocator.cpp:251-259). + (src/core/ScriptGlobalTable.cpp:385-426, src/core/FileLocator.cpp:251-259). In AppPrefData mode user/, music/, cache// and autosave/ sit beside the table. A folder missing there on a read is looked up the AppOnly way, where user/ hangs off the installation folder, the cache sits under @@ -80,26 +80,26 @@ notes: | The rest of the install tree is read the same way and ships with the binary: assets/ holds BallEnv.exr, AODither.webp and EnvMap.webp, the first two - loaded with no fallback (src/renderer/Renderer.cpp:176-188), - the bumper and kicker textures (src/parts/bumper.cpp:150,162,174,188, + loaded with no fallback (src/renderer/Renderer.cpp:178-190), + the bumper and kicker textures (src/parts/bumper.cpp:150,162,171,186, src/parts/kicker.cpp:200-241), the segment display textures - (src/renderer/Renderer.cpp:1503-1521), TableSizes.csv, the table size + (src/renderer/Renderer.cpp:1640-1658), TableSizes.csv, the table size database (src/core/TableDB.cpp:16), vpinball.png for the window icon (src/renderer/Window.cpp:280), LiberationSans-Regular.ttf, the font textboxes and decals fall back to when neither the table folder, as -