From 8f2018e7c2be56056306bda3e61b58eefa651793 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 11:46:57 +0100 Subject: [PATCH 01/31] feat: remember the install and open on the plan An install writes retrobios-backup/.install.json beside the BIOS folder: each file it placed with its sha1, size and source, and the choice it made. The next run for the same setup and folder takes that choice when the command line chose nothing, in line mode and on the full screen, and says so. A record that cannot be read is said once and ignored. A record event reports it. With one setup found, the full screen opens on its plan, Change where one row away. The plan's Install row says the size its headline says. --- install.ps1 | 2 +- install.py | 640 ++++++++++++++++-- install.sh | 2 +- install/launchers/index.json | 16 +- schemas/install-events.schema.json | 57 ++ scripts/generate_event_schema.py | 5 +- tests/fixtures/tui/colour-120x40.txt | 41 ++ tests/fixtures/tui/colour-40x12.txt | 13 + tests/fixtures/tui/colour-40x15.txt | 16 + tests/fixtures/tui/colour-80x24.txt | 25 + tests/fixtures/tui/plan-record-120x40.txt | 40 ++ tests/fixtures/tui/plan-record-40x12.txt | 12 + tests/fixtures/tui/plan-record-40x15.txt | 15 + tests/fixtures/tui/plan-record-80x24.txt | 24 + tests/fixtures/tui/route-evmapy.txt | 54 ++ tests/fixtures/tui/route-gptokeyb.txt | 54 ++ tests/fixtures/tui/route-gptokeyb_muxterm.txt | 54 ++ tests/fixtures/tui/route-keys.txt | 54 ++ tests/fixtures/tui/route-miyoo.txt | 54 ++ tests/fixtures/tui/route-muxterm.txt | 54 ++ tests/test_install.py | 18 +- tests/test_install_journeys.py | 209 +++++- tests/test_install_tui.py | 238 +++++-- wiki/first-install.md | 9 +- wiki/installer.md | 58 +- 25 files changed, 1621 insertions(+), 143 deletions(-) create mode 100644 tests/fixtures/tui/plan-record-120x40.txt create mode 100644 tests/fixtures/tui/plan-record-40x12.txt create mode 100644 tests/fixtures/tui/plan-record-40x15.txt create mode 100644 tests/fixtures/tui/plan-record-80x24.txt diff --git a/install.ps1 b/install.ps1 index 75033ba8b..561f5f9d0 100644 --- a/install.ps1 +++ b/install.ps1 @@ -16,7 +16,7 @@ # and Invoke-WebRequest throws on a cut transfer before the hash is read: # the site's build rewrites this line there (scripts/sitebootstrap.py). $mismatchAdvice = "The download was most likely cut short: try again. Within minutes of an update of this project the two files can come from caches of different ages. Waiting five minutes settles that." - $defaultInstallSha256 = "456a32e79668e125f2ebe573b549247210c59fed6389e78dc1482b57d3a36712" + $defaultInstallSha256 = "70e71268db3c09fd3e3c9bd823bab905de73b01e95affcdae9db344a9f4087ca" # The pin above refuses any changed byte: this cap only stops a body that # cannot be the installer (a sign-in portal's page) before it is hashed. $maximumInstallerBytes = 8MB diff --git a/install.py b/install.py index 3bd093ddc..0b12df28a 100644 --- a/install.py +++ b/install.py @@ -814,6 +814,15 @@ EVENT_KEYS: dict[str, tuple[str, ...]] = { # when all were in place), kept the backup folders as in summary. # ok false with reason when it was refused or failed. "app": ("system", "folder", "ok", "reason", "dests", "written", "kept"), + # The install record of the BIOS folder (path, beside it in + # retrobios-backup). status: applied (before choices, its choice taken + # as the run's because nothing on the command line chose), written + # (before the summary, once the install placed files), unreadable (said + # once and ignored) or not_written (the install itself unharmed). choice is + # the recorded options as words, date when it was written, files the + # files it holds for the platform. A kind of its own, since schema 1 + # never adds a key to an existing kind. + "record": ("platform", "folder", "path", "status", "choice", "date", "files", "message"), "end": ("code",), } # Seconds between two progress events while bytes arrive. @@ -6099,6 +6108,270 @@ def _kept_lines() -> list[str]: return lines +# The install record: what the runs placed in a BIOS folder, each file with +# its hash, and the choice they made, which the next run's plan takes. It +# lives in the backup holder beside the folder, never loose in it, for the +# reason the backups do. On a card it travels with the card. +RECORD_SCHEMA = 1 +RECORD_SUFFIX = ".install.json" +# The options a record keeps as the choice: what the list was narrowed to. +RECORD_CHOICE = ("--system", "--core", "--emulator", "--region", "--for-games", + "--required-only", "--all-files", "--target", "--every-board", + "--no-game-data", "--installed-cores", "--declared-only") +# The record's choice options that narrow the list, --all-files aside. +RECORD_NARROWING = tuple(flag for flag in RECORD_CHOICE if flag != "--all-files") +_MONTHS = ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", + "Dec") +# The records already said unreadable in this run, said once each. +_RECORD_SAID: set[str] = set() +# Per platform, the record whose choice this run took (apply_record). +_RECORD_TAKEN: dict[str, dict] = {} + + +def record_paths(folder: Path) -> list[Path]: + """Where the record of folder is looked for, in order: the holder beside + it, then the one inside it that a folder with no writable parent gets.""" + folder = Path(os.path.abspath(folder)) + name = f"{folder.name or 'folder'}{RECORD_SUFFIX}" + return [holder / name for holder, _prefix in KeptFiles._holders(folder)] + + +def _valid_setup(setup: object) -> bool: + if not isinstance(setup, dict): + return False + choice, files = setup.get("choice"), setup.get("files") + return (isinstance(setup.get("written"), str) and isinstance(choice, list) + and all(isinstance(word, str) for word in choice) and isinstance(files, list) + and all(isinstance(item, dict) and isinstance(item.get("dest"), str) + and isinstance(item.get("sha1"), str) and isinstance(item.get("size"), int) + for item in files)) + + +def read_record(folder: Path) -> tuple[dict | None, Path | None, str]: + """(the record of folder, where it is, why it cannot be used). Neither a + record nor a reason where there is none.""" + for path in record_paths(folder): + try: + text = path.read_text(encoding="utf-8") + except (FileNotFoundError, NotADirectoryError): + continue + except (OSError, UnicodeDecodeError) as exc: + reason = getattr(exc, "strerror", None) or str(exc) + return None, path, f"The install record {path} cannot be read ({reason})" + try: + data = json.loads(text) + except ValueError: + return None, path, f"The install record {path} is damaged" + if not isinstance(data, dict) or not isinstance(data.get("setups"), dict): + return None, path, f"The install record {path} is damaged" + if data.get("schema") != RECORD_SCHEMA: + return None, path, (f"The install record {path} was written by another " + "version of the installer") + if not all(_valid_setup(setup) for setup in data["setups"].values()): + return None, path, f"The install record {path} is damaged" + return data, path, "" + return None, None, "" + + +def setup_record(plat: str, folder: Path) -> tuple[dict | None, Path | None, str]: + """The record of plat in folder, where it is, and why it cannot be used. + A record written for a folder of another name (copied, or renamed with + it) is not this folder's.""" + data, path, problem = read_record(folder) + if data is None: + return None, path, problem + written_for = str(data.get("folder") or "") + if Path(written_for).name != Path(os.path.abspath(folder)).name: + return None, path, "" + return data["setups"].get(plat), path, "" + + +def record_day(setup: dict) -> str: + """The day a record was written, as the plan says it: 3 Nov.""" + try: + when = datetime.datetime.fromisoformat(setup["written"].replace("Z", "+00:00")) + except (KeyError, ValueError): + return "" + local = when.astimezone() + day = f"{local.day} {_MONTHS[local.month - 1]}" + return day if local.year == datetime.datetime.now().year else f"{day} {local.year}" + + +def record_options(argv: list[str]) -> list[tuple[str, str | None]]: + """A record's choice as (option, value) pairs.""" + options: list[tuple[str, str | None]] = [] + words = list(argv) + while words: + flag = words.pop(0) + valued = flag in _VALUED_OPTIONS or ( + flag == "--for-games" and words and not words[0].startswith("--")) + options.append((flag, words.pop(0) if valued and words else None)) + return options + + +def record_argv(options: Iterable[tuple[str, str | None]]) -> list[str]: + """The choice options a record keeps, as words, in the command's order.""" + kept = sorted((option for option in options if option[0] in RECORD_CHOICE), + key=_command_rank) + if not any(flag in RECORD_NARROWING for flag, _value in kept): + # The whole list, chosen as such: a card that holds games later + # still gets what was installed before. + kept = [("--all-files", None)] + return [word for flag, value in kept for word in ([flag] if value is None else [flag, value])] + + +def record_says(setup: dict, manifest: dict | None = None) -> str: + """The recorded choice in words: Game Boy Advance, the games, the + options chosen, every file.""" + options = record_options(setup.get("choice") or []) + systems = [system_title(value, manifest) for flag, value in options + if flag == "--system" and value] + if systems: + shown = ", ".join(systems[:3]) + return shown + (f" and {len(systems) - 3} more" if len(systems) > 3 else "") + if any(flag == "--for-games" for flag, _value in options): + return "the games" + if any(flag in RECORD_NARROWING for flag, _value in options): + return "the options chosen" + return "every file" + + +def record_changes(setup: dict, entries: Iterable[dict]) -> tuple[int, int]: + """Of the files a choice keeps now, those the list changed since the + record and those it did not hold then: (updated, new).""" + recorded = {(str(item.get("root") or ""), item["dest"]): item["sha1"] + for item in setup.get("files") or []} + updated = new = 0 + for entry in entries: + sha1 = recorded.get((str(entry.get("root") or ""), str(entry.get("dest")))) + if sha1 is None: + new += 1 + elif entry.get("sha1") and sha1 != entry.get("sha1"): + updated += 1 + return updated, new + + +def record_file(entry: dict, origin: str, root: str = "") -> dict: + """One file a run wrote, as the record keeps it.""" + return {"dest": str(entry["dest"]), "root": root or str(entry.get("root") or ""), + "sha1": str(entry.get("sha1") or ""), "size": int(entry.get("size") or 0), + "from": origin} + + +def write_record( + folder: Path, plat: str, manifest: dict, choice: list[str], files: list[dict], +) -> tuple[Path | None, dict, str]: + """Write what this run placed in folder for plat, merged with what + earlier runs placed: (where, the record of plat, why it was not + written). A record that cannot be read is replaced.""" + folder = Path(os.path.abspath(folder)) + data, found, _problem = read_record(folder) + if data is None: + data = {"setups": {}} + previous = data["setups"].get(plat) or {} + merged = {(str(item.get("root") or ""), item["dest"]): item + for item in previous.get("files") or []} + for item in files: + merged[(item["root"], item["dest"])] = item + setup = { + "written": datetime.datetime.now(datetime.timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"), + "list": {"version": manifest.get("version"), "generated": manifest.get("generated")}, + "choice": choice, + "files": [merged[key] for key in sorted(merged)], + } + data = {"schema": RECORD_SCHEMA, "installer": installer_id(), "folder": str(folder), + "setups": {**data["setups"], plat: setup}} + text = json.dumps(data, separators=(",", ":"), sort_keys=True) + "\n" + places = record_paths(folder) + if found is not None and found in places: + # Rewritten where it was read: never a second record of one folder. + places = [found] + [place for place in places if place != found] + failure = "nothing could be written beside the folder" + for path in places: + scratch: Path | None = None + try: + path.parent.mkdir(exist_ok=True) + _check_holder(path.parent) + with tempfile.NamedTemporaryFile( + "w", encoding="utf-8", dir=path.parent, prefix=f".{path.name}.", + suffix=".part", delete=False) as handle: + scratch = Path(handle.name) + handle.write(text) + os.replace(scratch, path) + except OSError as exc: + failure = exc.strerror or str(exc) + if scratch is not None and os.path.lexists(scratch): + try: + scratch.unlink() + except OSError as left: + failure += f", and {scratch} stays ({left.strerror or left})" + continue + return path, setup, "" + return None, setup, f"The install record could not be written ({failure})" + + +def record_menu_words(setup: dict | None) -> str: + """What line mode's menu says of a recorded choice it opens on.""" + if setup is None: + return "" + day = record_day(setup) + return f"Same choice as on {day}." if day else "Same choice as last time." + + +def choice_given(args: argparse.Namespace) -> bool: + """Whether the command line chose what to install, which a record then + never replaces: an option of the choice, or a file list of its own.""" + # A namespace built by a caller that predates an option lacks it. + return (getattr(args, "for_games", None) is not None or LOCAL.manifest is not None + or any(getattr(args, flag[2:].replace("-", "_"), None) + for flag in RECORD_CHOICE if flag != "--for-games")) + + +def say_record_problem(plat: str, folder: Path, path: Path | None, problem: str) -> None: + """A record that cannot be used, said once and ignored.""" + key = str(path) + if not problem or key in _RECORD_SAID: + return + _RECORD_SAID.add(key) + message = f"{problem}, so it is ignored." + print(f" {message}") + EVENTS.emit("record", platform=plat, folder=str(folder), path=key, status="unreadable", + choice=[], date="", files=0, message=message) + + +def apply_record(args: argparse.Namespace, plat: str, folder: Path) -> dict | None: + """Take the choice recorded for plat in folder as the run's, as if its + options had been typed: the plan's first choice. Returns the record, + None where none is taken.""" + setup, path, problem = setup_record(plat, folder) + say_record_problem(plat, folder, path, problem) + if setup is None: + return None + try: + parsed = build_parser().parse_args(setup["choice"]) + except SystemExit: + say_record_problem(plat, folder, path, + f"The install record {path} names options this installer lacks") + return None + for flag in RECORD_CHOICE: + name = flag[2:].replace("-", "_") + setattr(args, name, getattr(parsed, name)) + if args.for_games is not None: + args.all_files = False + args.from_record = True + options = record_options(setup["choice"]) + if any(flag in RECORD_NARROWING for flag, _value in options): + # Said where it narrows the list: the whole list again is the run + # a person expects, and said nothing new. + _RECORD_TAKEN[plat] = setup + _INVOCATION.chosen[plat] = [option for option in options if option[0] != "--all-files"] + message = record_menu_words(setup) + EVENTS.emit("record", platform=plat, folder=str(folder), path=str(path), status="applied", + choice=list(setup["choice"]), date=setup["written"], + files=len(setup["files"]), message=message) + return setup + + def restore_kept(run: Path, dry_run: bool = False) -> int: """Put every file of a backup run folder back where it was. @@ -6769,6 +7042,14 @@ class Invocation: words += ["--dest", self.word(str(dest.absolute()))] elif dest: words += ["--dest", dest] + for flag, value in self.flags(plat): + if flag in without: + continue + words += [flag] if value is None else [flag, self.word(value)] + return " ".join(words) + + def flags(self, plat: str) -> list[tuple[str, str | None]]: + """The options of the run for plat, in the command's order.""" options = self.options if plat in self.chosen: # A choice made at the questions replaces the narrowing the @@ -6776,11 +7057,7 @@ class Invocation: # the systems of the first run and of the second. replaced = {*_CHOICE_OPTIONS, *(flag for flag, _value in self.chosen[plat])} options = [option for option in options if option[0] not in replaced] - for flag, value in sorted([*options, *self.chosen.get(plat, [])], key=_command_rank): - if flag in without: - continue - words += [flag] if value is None else [flag, self.word(value)] - return " ".join(words) + return sorted([*options, *self.chosen.get(plat, [])], key=_command_rank) _INVOCATION = Invocation() @@ -7956,13 +8233,15 @@ def install_data_directory(entry: dict, bios_path: Path, Returns counts: present, installed, changed (the source no longer holds the recorded bytes), absent (not in the archive), error, the reason - the archive could not be read, and not_kept, the (path, reason) of each - file in place that differs and could not be moved aside, left as it is. + the archive could not be read, not_kept, the (path, reason) of each + file in place that differs and could not be moved aside, left as it is, + and written, each file written (dest below the BIOS folder, sha1, size). """ root, needed, present = state or data_directory_state(entry, bios_path) needed = dict(needed) + written: list[dict] = [] counts = {"present": present, "installed": 0, "changed": 0, "absent": 0, "error": "", - "not_kept": []} + "not_kept": [], "written": written} if not needed: return counts _writing.set() @@ -7999,12 +8278,13 @@ def install_data_directory(entry: dict, bios_path: Path, continue target = _destination_path(root, rel) target.parent.mkdir(parents=True, exist_ok=True) + slot = f"{entry['dest']}/{rel}" if entry.get("dest") else rel outcome = _install_data_member( - opener, meta, target, bios_path, - f"{entry['dest']}/{rel}" if entry.get("dest") else rel, - rel, counts["not_kept"]) + opener, meta, target, bios_path, slot, rel, counts["not_kept"]) if outcome: counts[outcome] += 1 + if outcome == "installed": + written.append({"dest": slot, "sha1": meta["sha1"], "size": meta["size"]}) except _Offline as exc: # Kept apart, so the advice is the offline one, not the network's. counts["error"] = OfflineReason(str(exc)) @@ -9595,6 +9875,11 @@ def _prompt_custom_selection( elif playing and played is not None: kept_games = menu_choice(files, omitted, installed, GamesChoice(played), cutting)[0] print(f" h) only for the games {played.where()}: {_sized(kept_games)}") + # The screen's "Same choice as last time: no": the whole list. + widen = (plat in _RECORD_TAKEN and current is not None + and not (playing and isinstance(current, GamesChoice))) + if widen: + print(f" e) everything: {_sized(shown)}") if installed is not None and current != INSTALLED_ONLY: print(f" i) only what the installed cores read: {_sized(installed[0])}") # What c asks, named: "systems, cores and regions" was offered with @@ -9614,6 +9899,7 @@ def _prompt_custom_selection( print(" q) quit") keys = [*([] if emptied else [""]), "q", *(["c"] if choosable else []), *((["r", "e"] if isinstance(current, GamesChoice) else ["h"]) if playing else []), + *(["e"] if widen else []), *(["i"] if installed is not None and current != INSTALLED_ONLY else []), *(["f"] if copying else []), *(["g"] if games.games else [])] others = [key for key in keys if key not in ("", "q")] @@ -9668,10 +9954,12 @@ def _print_menu_head( if current == INSTALLED_ONLY: named = ", only what the installed cores read" elif isinstance(current, GamesChoice): - named = f", {current.words()}" + (" (--for-games)" if current is given else "") + named = f", {current.words()}" + (" (--for-games)" if current is given + and plat not in _RECORD_TAKEN else "") elif isinstance(current, tuple): systems, cores, regions = current - flag = current is given + # A recorded choice was typed by nobody: no option is named. + flag = current is given and plat not in _RECORD_TAKEN listed = choosable_systems(files, omitted, cores, regions) total = len(listed) # The systems chosen that still hold a file: Sega Dreamcast holding @@ -10206,6 +10494,20 @@ def _narrow_to_emulators( return files, omitted +def _known_names(values: list[str] | None, known: list[str], label: str, + aliases: dict[str, str] | None = None) -> list[str]: + """The names of values that resolve against known, the others left out.""" + kept = [] + for value in values or []: + try: + resolve_choices([value], known, label, aliases) + except ValueError: + detail(f" {value} is no longer on the list: left out of the recorded choice") + continue + kept.append(value) + return kept + + def _requested_narrowing( args: argparse.Namespace, plat: str, files: list[dict], omitted: list[dict], manifest: dict | None = None, @@ -10234,6 +10536,14 @@ def _requested_narrowing( print(_narrowing_advice(plat, axis, flag, recorded, pack_alone), file=sys.stderr) sys.exit(1) choices = available_choices(files, omitted) + if getattr(args, "from_record", False): + # A name the list no longer holds is dropped from a recorded choice, + # never refused: nobody typed it. + args.system = _known_names(args.system, choices["systems"], "system", + system_aliases(manifest)) or None + args.core = _known_names(args.core, choices["cores"], "core") or None + if not (args.system or args.core or args.region): + return None try: systems = resolve_choices( args.system or [], choices["systems"], "system", system_aliases(manifest), @@ -16101,6 +16411,42 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: # The BIOS folders read for misplaced files, one per platform. bios_indexes: list[FolderIndex] = [] + # The choice the folder's record keeps is the plan's first choice, taken + # as its options would be: before the checks of --target and + # --installed-cores, which it may hold. Never where the command line + # chose, nor for a run over several setups. + _RECORD_TAKEN.clear() + + def remember(plat: str, folder: Path, manifest: dict, written: list[dict], + games: bool) -> None: + """Record what this install placed in folder and the choice it made, + games being the card's games applied with no --for-games.""" + if not written and setup_record(plat, folder)[0] is None: + # Nothing of ours is there to record, and no choice to keep. + return + options = _INVOCATION.flags(plat) + if games: + options += [("--for-games", None), + *([("--required-only", None)] if args.required_only else [])] + choice = record_argv(options) + path, setup, problem = write_record(folder, plat, manifest, choice, written) + if problem: + detail(f" {problem}.") + count = len(setup["files"]) + EVENTS.emit("record", platform=plat, folder=str(folder), + path=str(path or record_paths(folder)[0]), + status="not_written" if problem else "written", choice=choice, + date=setup["written"], files=count, + message=f"{problem}." if problem else + f"Recorded {_plural(count, 'file')} and this choice in {path}.") + + if len(platforms) == 1 and not listing and not choice_given(args): + if apply_record(args, *platforms[0]) is not None and args.target: + known = fetch_targets(platforms[0][0]) + if known is not None and args.target not in known: + # A board the list no longer names: every board's files. + args.target = None + # --target is checked for every platform before anything is written, as # --installed-cores is below: EmuDeck installed 3.2 GB and only then was # steamos refused for RetroArch, with no summary of what had landed. @@ -16409,6 +16755,8 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: + ([("--no-game-data", None)] if cut and cut[0] else [])) return _INVOCATION.command(plat, folder) + # The record's options, which the menu's commands overwrite. + recorded = _INVOCATION.chosen.get(plat_name) selection = _prompt_custom_selection( plat_name, bare, bare_omitted + unplaced, installed, detected_os(plat_name, bios_path) or display, @@ -16417,14 +16765,18 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: bool(target or args.installed_cores or args.declared_only or len(files) + game_data_cut + len(unplaced) != listed), command_for, cut, - game_data_only_words([system_title(system, manifest) for system in - game_data_only(given[0] if isinstance(given, tuple) - else [], files)]) - if args.no_game_data else "", + " ".join(filter(None, [ + record_menu_words(_RECORD_TAKEN.get(plat_name)), + game_data_only_words([system_title(system, manifest) for system in + game_data_only(given[0] if isinstance(given, tuple) + else [], files)]) + if args.no_game_data else ""])), None if games_applied else games_plan, ) # Its head named the BIOS folder: the result does not again. OUTPUT.where_said = True + kept_record = plat_name in _RECORD_TAKEN and selection is not None and ( + selection is given or selection == given) if selection is None and LOCAL.pack is not None: smaller = " Nothing copied." elif selection is None: @@ -16456,6 +16808,12 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: _INVOCATION.chosen[plat_name] = [] else: _INVOCATION.chosen.pop(plat_name, None) + if kept_record and recorded is not None: + # Enter on the recorded choice: still the record's options. + _INVOCATION.chosen[plat_name] = recorded + elif selection is None and plat_name in _RECORD_TAKEN and not games_applied: + # e: every file, the recorded narrowing given up. + args.system = args.core = args.region = None if selection is not None: before = len(files) files, omitted_files = narrow(files, omitted_files, *selection) @@ -16567,6 +16925,7 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: bios_path = library detail("\nChecking existing files...") + record_files: list[dict] = [] to_download, up_to_date, mismatched = check_local( files, bios_path, jobs=args.jobs, term=term ) @@ -16672,6 +17031,10 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: else: print(f"\n {EVERYTHING_IN_PLACE}") print(f" BIOS folder: {shown_path(bios_path)}") + if plat_name in _RECORD_TAKEN: + # The files counted are the recorded choice's, not the list's. + print(f" {record_menu_words(_RECORD_TAKEN[plat_name])} " + "--all-files checks every file.") absent = _absent_required(omitted_files, bios_path) # The collection cannot supply these, so they leave the exit # code alone, but a user asking why a game will not start needs @@ -16710,6 +17073,9 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: trees, kept, copy_plan_lines(to_download, copies, bios_index, bios_path, files, args.verbose, True), verbose=args.verbose, manifest=manifest) + if plat_name in _RECORD_TAKEN: + print(f" {record_menu_words(_RECORD_TAKEN[plat_name])} " + "--all-files lists every file.") for line in unreadable_lines(unread, args.verbose): print(line) for line in hint: @@ -16784,9 +17150,11 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: coming = len(to_download) - len(lacking) + trees_missing weight = dl_size + sum(data_fetch_bytes(entry, state[1]) for entry, state in data_states) + taken = _RECORD_TAKEN.get(plat_name) print(f"\nInstalling {_plural(coming, 'file')} ({format_size(weight)}) for " f"{detected_os(plat_name, bios_path) or display}" - + (", what the games need" if games_applied else "") + ".") + + (", what the games need" if games_applied else "") + + (f", same choice as on {record_day(taken)}" if taken else "") + ".") print(f"BIOS folder: {shown_path(bios_path)}") OUTPUT.where_said = True if unread: @@ -16878,6 +17246,9 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: # counted them, over the files that landed: matched by the end # of a failed path, a.bin was dropped when x/a.bin failed. landed.extend(progress.landed) + record_files += [record_file(entry, "copy" if id(entry) in copies + else "pack" if LOCAL.pack is not None else "download") + for entry in progress.landed] files_pending += len(to_download) - progress.installed if interrupted \ else len(failed) total_errors += len(failed) @@ -16886,6 +17257,8 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: total_seconds += progress.elapsed() if interrupted: total_interrupted = True + remember(plat_name, bios_path, manifest, record_files, + games_applied and args.for_games is None) break elif len(platforms) > 1: # One setup's run ends on "Done. Everything is in place.": said @@ -16931,6 +17304,9 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: total_seconds += progress.elapsed() total_downloaded += counts["installed"] data_landed += counts["installed"] + record_files += [record_file(item, "pack" if LOCAL.pack is not None + else "download", "data") + for item in counts.get("written", [])] total_up_to_date += counts["present"] if isinstance(counts["error"], OfflineReason): # Left out as the BIOS files above are: counted missing, @@ -16971,6 +17347,9 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: failures.append((where, f"{NOT_KEPT} ({reason})")) total_errors += 1 + remember(plat_name, bios_path, manifest, record_files, + games_applied and args.for_games is None) + if os_type == "android" and not args.check and hide_from_media_scanner(bios_path): detail(f" Added {NOMEDIA} to {shown_path(bios_path)}: the gallery and music " "apps leave its images, sounds and videos out") @@ -18019,6 +18398,16 @@ class TuiState: self.games: dict | None = None self.games_reading: tuple | None = None self.games_unavailable: dict | None = None + # The install record of the setup and folder chosen (read for + # record_for), whose choice the plan opens on when the command line + # chose nothing (cli_choice), and the options of it no row shows. + self.record: dict | None = None + self.record_for: tuple | None = None + self.record_flags: list = [] + self.cli_choice: bool = False + # Opened on the plan of the one setup found: its Change where row + # goes back to the setups. + self.opened_on_plan: bool = False @property def screen(self) -> str: @@ -18475,6 +18864,12 @@ def tui_flags(state: TuiState) -> list[tuple[str, str | None]]: flags.append(("--installed-cores", None)) if state.jobs != 8: flags.append(("--jobs", str(state.jobs))) + flags += state.record_flags + if (state.record is not None and not state.for_games + and not any(flag in RECORD_NARROWING for flag, _value in flags)): + # The whole list, chosen over a recorded narrower one: said so to + # the runs, whose own reading of the record would narrow it again. + flags.append(("--all-files", None)) flags += [("--from", str(folder)) for folder in state.from_folders] if (os.environ.get(OFFLINE_VARIABLE) == OFFLINE_FLAG_VALUE and not any(flag == "--offline" for flag, _v in flags)): @@ -18960,14 +19355,12 @@ def _plan_rows(state: TuiState) -> list[TuiRow]: return rows + ([game_data] if game_data is not None else []) + [ *_details_row(state), TuiRow("options", "Options"), TuiRow("quit", "Quit")] if not (_needed(check) if check else 0) and not check.get("data_missing"): - return [TuiRow("close", "Close"), *_games_rows(state), *_details_row(state), - TuiRow("options", "Options")] - # The size the pack can give: "Install 6.6 GB" from a pack holding - # none of the files. - lacking = set(_tui_pack_lacks(state, [event["dest"] for event in state.files])) - size = (_ticked_estimate(state)[1] if _tui_estimating(state) - else check.get("bytes_needed", 0) - sum(event["size"] for event in state.files - if event["dest"] in lacking)) + return [TuiRow("close", "Close"), *_games_rows(state), *_record_rows(state), + *_where_rows(state), *_details_row(state), TuiRow("options", "Options")] + # The size the headline says: "Install 6.6 GB" stood under "14930 files + # to download, 6.8 GB", the copies counted in one and the data files in + # the other. + size = _ticked_estimate(state)[1] if _tui_estimating(state) else _plan_fetch(state, check)[1] label = (f"{TUI_INSTALL_ROW} {format_size(size)}" if size >= CONFIRM_FROM_BYTES else TUI_INSTALL_ROW) rows = [TuiRow("install", label)] @@ -19006,6 +19399,7 @@ def _plan_rows(state: TuiState) -> list[TuiRow]: # Right under Install: the choice the plan opened on, the whole list one # press away. rows += _games_rows(state) + rows += _record_rows(state) if "systems" in recorded_axes((state.manifest or {}).get("files", [])) and ( len(state.systems) > 1 or state.cli_systems): rows.append(TuiRow("systems", TUI_SYSTEMS_ROW)) @@ -19018,7 +19412,27 @@ def _plan_rows(state: TuiState) -> list[TuiRow]: rows.append(TuiRow("misplaced", "Show the files in the wrong place")) if state.unreadable: rows.append(TuiRow("unreadable", "Show the files that could not be read")) - return rows + [*_details_row(state), TuiRow("options", "Options"), TuiRow("quit", "Quit")] + return rows + [*_where_rows(state), *_details_row(state), TuiRow("options", "Options"), + TuiRow("quit", "Quit")] + + +# The plan's row for the record's choice, and the one back to the setups. +TUI_RECORD_ROW = "Same choice as last time" +TUI_WHERE_ROW = TuiRow("where", "Change where") + + +def _record_rows(state: TuiState) -> list[TuiRow]: + """Same choice as last time: yes or no, where the folder has a record.""" + if state.record is None or state.cli_choice: + return [] + day = record_day(state.record) + label = f"Same choice as on {day}" if day else TUI_RECORD_ROW + return [TuiRow("record", f"{label}: {_yes(tui_record_kept(state))}")] + + +def _where_rows(state: TuiState) -> list[TuiRow]: + """Change where, on a plan opened straight on the one setup found.""" + return [TUI_WHERE_ROW] if state.opened_on_plan and state.stack[:1] == ["setup"] else [] # The plan's explanations, counts and reasons, one press away: a pad has @@ -19503,9 +19917,88 @@ def _start_run(state: TuiState, run: str) -> list[tuple]: return [("run", run)] +def _record_key(options: Iterable[tuple[str, str | None]]) -> list: + """A choice in a form two spellings of it share: one name per --system + and --core, in any order.""" + pairs = record_options(record_argv(options)) + return sorted((flag, name.strip()) for flag, value in pairs + for name in ((value or "").split(",") if flag in ("--system", "--core") + else [value or ""]) if name.strip() or value is None) + + +def tui_record_kept(state: TuiState) -> bool: + """Whether the plan's choice is the one the record keeps.""" + if state.record is None: + return False + return _record_key(tui_flags(state)) == _record_key( + record_options(state.record["choice"])) + + +def _tui_record_take(state: TuiState) -> None: + """The recorded choice made the screen's, as its options would make it.""" + setup = state.record or {} + try: + parsed = build_parser().parse_args(setup.get("choice") or []) + except SystemExit: + state.status = "The install record names options this installer lacks, so it is ignored." + state.record = None + return + state.cli_systems = list(parsed.system or []) + state.cores = [token.strip() for value in parsed.core or [] for token in value.split(",") + if token.strip()] + try: + state.regions = resolve_regions(parsed.region) if parsed.region else [] + except ValueError: + state.regions = [] + state.no_game_data = bool(parsed.no_game_data) + state.installed_only = bool(parsed.installed_cores) + state.for_games = parsed.for_games is not None + state.games_folder = parsed.for_games if isinstance(parsed.for_games, Path) else None + state.required_only = bool(parsed.required_only) and state.for_games + state.games_choice = "record" + state.record_flags = [(flag, value) for flag, value in record_options(setup["choice"]) + if flag in ("--target", "--emulator", "--every-board", + "--declared-only")] + + +def _tui_record_drop(state: TuiState) -> None: + """The recorded choice given up: the choice nothing narrows.""" + state.cli_systems, state.cores, state.regions, state.record_flags = [], [], [], [] + state.no_game_data = state.installed_only = state.required_only = False + state.for_games, state.games_folder, state.games_choice = None, None, "" + # The systems of the recorded check go, and with them its ticks. + state.systems, state.ticked, state.keep_ticked, state.widened_from = [], set(), None, None + + +def _tui_record_load(state: TuiState) -> None: + """Read the record of the setup and folder chosen, once for each, and + take its choice where nothing chose: the command line, or the screen + for an earlier folder.""" + key = (state.platform, state.dest) + if state.dest is None or state.record_for == key: + return + taken = tui_record_kept(state) + state.record_for = key + setup, path, problem = setup_record(state.platform, state.dest) + if problem and str(path) not in _RECORD_SAID: + _RECORD_SAID.add(str(path)) + state.status = f"{problem}, so it is ignored." + if taken: + _tui_record_drop(state) + # Games read on a card are what the plan found, not a choice. + found = ("--for-games", "--required-only") if state.games_choice in ("", "probe") else () + state.record = None + untouched = not any(flag in RECORD_NARROWING and flag not in found + for flag, _value in tui_flags(state)) + state.record = setup + if setup is not None and not state.cli_choice and untouched: + _tui_record_take(state) + + def _start_check(state: TuiState) -> list[tuple]: """Check the chosen folder, after fetching the file list once, the systems ticked kept (_keep_choice).""" + _tui_record_load(state) _keep_choice(state) _games_look(state) state.refocus = "" @@ -19528,7 +20021,7 @@ def _games_look(state: TuiState) -> None: looked at too, from what this run already read (no network): its games make "For the games on this card" the choice, unless the user or the command line decided.""" - if (state.games_choice in ("user", "cli") or state.games_probed is None + if (state.games_choice in ("user", "cli", "record") or state.games_probed is None or state.dest is None or state.games_probed == (state.platform, state.dest)): return count = games_probe(state.platform, state.dest, network=False, os_type=state.os_type) @@ -20130,6 +20623,28 @@ def _activate(state: TuiState, row: TuiRow) -> list[tuple]: return _push(state, action) if action == "recheck": return _start_check(state) + if action == "where": + effects = [("kill",)] if state.running else [] + state.running, state.run_id = False, state.run_id + 1 + del state.stack[1:] + return effects + if action == "record": + # No: the choice nothing narrows, the card's games when it holds + # some. Yes: the recorded choice again. Counted again either way. + if tui_record_kept(state): + _tui_record_drop(state) + if state.dest is not None: + count = games_probe(state.platform, state.dest, network=False, + os_type=state.os_type) + state.games_probed = (state.platform, state.dest) + state.games_here = count or 0 + state.for_games, state.games_choice = bool(count), "probe" + else: + _tui_record_drop(state) + _tui_record_take(state) + effects = _start_check(state) + state.refocus = "record" + return effects if action in ("games", "startonly"): # One press, then counted again: the games decide the systems, # so the ticks start again from every system they need. @@ -21485,7 +22000,7 @@ def tui_receive(state: TuiState, message: tuple) -> list[tuple]: _kind, plat, dest, count = message if plat == state.platform and dest == state.dest: state.games_probed = (plat, dest) - if state.games_choice not in ("user", "cli"): + if state.games_choice not in ("user", "cli", "record"): state.games_here = count or 0 state.for_games, state.games_choice = bool(count), "probe" return [] @@ -21985,25 +22500,36 @@ def _last_name(folder: str) -> str: return Path(folder).name or folder -def _plan_lines(check: dict, dest: Path | None, state: TuiState) -> list: - need = _needed(check) - data = check.get("data_missing", 0) - # A file found on this machine is copied, not downloaded: the count and - # the size to download leave it out, from the check's own events. On - # Confirm the dry run's files are matched the same way: it called the - # files a --from folder holds downloads, and sent an offline user for - # a pack. +def _plan_fetch(state: TuiState, check: dict) -> tuple[int, int, list, list, dict]: + """(files to fetch, bytes the install fetches with the data files', + dests copied from this machine, dests the pack lacks, the size of each + file): the one size the plan's headline and its Install row say. + + A file found on this machine is copied, not downloaded: the count and + the size to download leave it out, from the check's own events. On + Confirm the dry run's files are matched the same way: it called the + files a --from folder holds downloads, and sent an offline user for a + pack. The files the pack does not hold are left out too: the plan + offered "Install 6.6 GB" from a pack that held none of them. + """ dry = check is state.dry and check is not state.check sizes = {event["dest"]: event["size"] for event in (state.dry_files if dry else state.files)} copied = _plan_copies(state, check) if dry or check is state.check else [] - # The files the pack does not hold are said before a size is promised, - # and left out of it: the plan offered "Install 6.6 GB" from a pack that - # held none of them. lacking = _tui_pack_lacks(state, [dest_ for dest_ in sizes if dest_ not in copied]) - fetch = max(0, need - len(copied) - len(lacking)) - fetch_bytes = max(0, check["bytes_needed"] - sum(sizes[dest_] for dest_ in copied) + fetch = max(0, _needed(check) - len(copied) - len(lacking)) + fetch_bytes = max(0, check.get("bytes_needed", 0) - sum(sizes[dest_] for dest_ in copied) - sum(sizes[dest_] for dest_ in lacking)) + data_bytes = check.get("data_bytes", 0) if check.get("data_missing", 0) else 0 + return fetch, fetch_bytes + data_bytes, copied, lacking, sizes + + +def _plan_lines(check: dict, dest: Path | None, state: TuiState) -> list: + need = _needed(check) + data = check.get("data_missing", 0) + dry = check is state.dry and check is not state.check + fetch, fetched, copied, lacking, sizes = _plan_fetch(state, check) + fetch_bytes = fetched - (check.get("data_bytes", 0) if data else 0) elsewhere = (_tui_found_elsewhere(state, set(copied) if dry else None) if check is state.check or dry else {}) offline = _offline_only() @@ -22603,6 +23129,23 @@ def _plan_text(state: TuiState) -> list: said = ", ".join(named) if said and not said.startswith("for "): said = f"for this choice: {said}" + since: list = [] + if tui_record_kept(state) and not state.cli_choice and state.record is not None: + # The record's systems by name, its row saying whose choice it is: + # nobody typed --system. The games and the other options are said + # as the plan says them. + what = record_says(state.record, state.manifest) + if what == "every file": + said = "" + elif what not in ("the games", "the options chosen"): + said = f"for {what}" + updated, new = record_changes(state.record, [ + entry for entry in (state.manifest or {}).get("files") or [] + if entry.get("dest") in state.checked_dests]) + changes = [*([f"{_plural(updated, 'file')} updated in the list"] if updated else []), + *([f"{new} new"] if new else [])] + if changes: + since = [_detail(f"Since then: {', '.join(changes)}.")] # A system --system named that --no-game-data left empty, in line mode's # words. listed = {row["system"] for row in state.systems} @@ -22641,7 +23184,7 @@ def _plan_text(state: TuiState) -> list: f"{parts}") lines[at:at] = [*([_detail(state.card_note)] if state.card_note and state.card_note != state.status else []), - *([f"{said[0].upper()}{said[1:]}."] if said else []), + *([f"{said[0].upper()}{said[1:]}."] if said else []), *since, *([emptied_named] if emptied_named else []), *choice, *([_detail(parts)] if parts else []), *games_plan_words(state)] if state.version: @@ -24065,6 +24608,7 @@ def tui_start( if args.manifest is not None: state.manifest_path = Path(args.manifest).absolute() state.manifest_given = True + state.cli_choice = choice_given(args) or state.manifest_given plat = normalize_platform(args.platform, say=False) if args.platform else "" if detect: captured = io.StringIO() @@ -24137,6 +24681,14 @@ def tui_start( if state.dest_given is None and not args.platform: state.doubts = [(plat, mount) for mount in _mounted_cards() for plat in share_doubt(mount)[0]] + if (state.dest_given is None and not state.doubts and not state.refused + and len(state.setups) == 1): + # One setup found and no card in doubt: its plan, Change where (or + # Back) one press away. A folder detection could not look in may + # hold another setup: the setups are listed then, with it. + found, folder, _label = state.setups[0] + state.opened_on_plan = True + return state, _choose(state, found, folder, proposed=True) if state.dest_given is not None or not (state.setups or state.doubts): state.stack = ["platforms"] state.focus["platforms"] = _platform_focus(state, dest_default(state.setups)) @@ -24732,7 +25284,7 @@ def run_tui(args: argparse.Namespace) -> int: if kind == "fetch": threading.Thread(target=_tui_fetch_games, args=(effect[1], inbox, buffer, state.dest, - state.games_choice not in ("user", "cli")), + state.games_choice not in ("user", "cli", "record")), daemon=True).start() elif kind == "run": for run in current: diff --git a/install.sh b/install.sh index a606cca06..c206e9c2a 100755 --- a/install.sh +++ b/install.sh @@ -23,7 +23,7 @@ DEFAULT_INSTALL_URL="https://raw.githubusercontent.com/Abdess/retrobios/main/ins # curl or wget stop on a cut transfer before the hash is read: the site's # build rewrites this line there (scripts/sitebootstrap.py). MISMATCH_ADVICE="The download was most likely cut short: try again. Within minutes of an update of this project the two files can come from caches of different ages. Waiting five minutes settles that." -DEFAULT_INSTALL_SHA256="456a32e79668e125f2ebe573b549247210c59fed6389e78dc1482b57d3a36712" +DEFAULT_INSTALL_SHA256="70e71268db3c09fd3e3c9bd823bab905de73b01e95affcdae9db344a9f4087ca" # The pin above refuses any changed byte: this cap only stops a body that # cannot be the installer (a sign-in portal's page) before it is hashed. MAX_INSTALLER_BYTES=8388608 diff --git a/install/launchers/index.json b/install/launchers/index.json index 8cee38296..30a747d52 100644 --- a/install/launchers/index.json +++ b/install/launchers/index.json @@ -27,8 +27,8 @@ { "dest": "roms/ports/retrobios/install.py", "repo_path": "install.py", - "size": 1162452, - "sha256": "456a32e79668e125f2ebe573b549247210c59fed6389e78dc1482b57d3a36712", + "size": 1189759, + "sha256": "70e71268db3c09fd3e3c9bd823bab905de73b01e95affcdae9db344a9f4087ca", "executable": false }, { @@ -71,8 +71,8 @@ "muos": { "archive": { "dest": "ARCHIVE/RetroBIOS.muxapp", - "size": 1216077, - "sha256": "b9e623839a8cf71d929a860b53a6c4c82cbfde551151912e1aba0347532be965" + "size": 1243384, + "sha256": "ae0d36d5f2dda70c39bfe8be474108b92f0a5a80457bc8c07d36736b09b0310d" }, "members": [ { @@ -92,8 +92,8 @@ { "name": "RetroBIOS/install.py", "repo_path": "install.py", - "size": 1162452, - "sha256": "456a32e79668e125f2ebe573b549247210c59fed6389e78dc1482b57d3a36712", + "size": 1189759, + "sha256": "70e71268db3c09fd3e3c9bd823bab905de73b01e95affcdae9db344a9f4087ca", "executable": false }, { @@ -166,8 +166,8 @@ { "dest": ".config/modules/retrobios/install.py", "repo_path": "install.py", - "size": 1162452, - "sha256": "456a32e79668e125f2ebe573b549247210c59fed6389e78dc1482b57d3a36712", + "size": 1189759, + "sha256": "70e71268db3c09fd3e3c9bd823bab905de73b01e95affcdae9db344a9f4087ca", "executable": false }, { diff --git a/schemas/install-events.schema.json b/schemas/install-events.schema.json index a252c8fce..0a6713ed3 100644 --- a/schemas/install-events.schema.json +++ b/schemas/install-events.schema.json @@ -38,6 +38,7 @@ "downloaded", "summary", "app", + "record", "end" ] } @@ -127,6 +128,9 @@ { "$ref": "#/$defs/app" }, + { + "$ref": "#/$defs/record" + }, { "$ref": "#/$defs/end" } @@ -1091,6 +1095,59 @@ } } }, + "record": { + "type": "object", + "additionalProperties": false, + "required": [ + "event", + "platform", + "folder", + "path", + "status", + "choice", + "date", + "files", + "message" + ], + "properties": { + "event": { + "const": "record" + }, + "platform": { + "type": "string" + }, + "folder": { + "type": "string" + }, + "path": { + "type": "string" + }, + "status": { + "enum": [ + "applied", + "written", + "unreadable", + "not_written" + ] + }, + "choice": { + "type": "array", + "items": { + "type": "string" + } + }, + "date": { + "type": "string" + }, + "files": { + "type": "integer", + "minimum": 0 + }, + "message": { + "type": "string" + } + } + }, "end": { "type": "object", "additionalProperties": false, diff --git a/scripts/generate_event_schema.py b/scripts/generate_event_schema.py index 8b9eab202..0242aae8d 100644 --- a/scripts/generate_event_schema.py +++ b/scripts/generate_event_schema.py @@ -37,10 +37,11 @@ KEY_TYPES: dict[str, dict] = { **dict.fromkeys(( "installer", "os", "os_name", "stage", "reason", "platform", "message", "folder", "dest", "system", "name", "bios_dir", "path", "member", - "list_version", "installed_version", "board", "core", + "list_version", "installed_version", "board", "core", "date", ), _TEXT), "mode": {"enum": ["install", "check", "dry-run", "list"]}, "state": {"enum": ["present", "wrong_hash", "missing"]}, + "status": {"enum": ["applied", "written", "unreadable", "not_written"]}, **dict.fromkeys(( "files", "files_done", "files_total", "bytes", "bytes_done", "bytes_total", "bytes_local", "bytes_network", "size", "present", "missing", "wrong_hash", @@ -48,7 +49,7 @@ KEY_TYPES: dict[str, dict] = { "pending", "code", "games", "recognised", "not_games", ), _COUNT), **dict.fromkeys(("truncated", "ok", "interrupted", "required_only", "applied", "info"), _FLAG), - **dict.fromkeys(("systems", "other_drives", "dests", "written"), _NAMES), + **dict.fromkeys(("systems", "other_drives", "dests", "written", "choice"), _NAMES), **dict.fromkeys(("platforms", "failed", "skipped", "left_out", "kept", "found", "fallback"), _RECORDS), } diff --git a/tests/fixtures/tui/colour-120x40.txt b/tests/fixtures/tui/colour-120x40.txt index 9cf8474af..08b62e689 100644 --- a/tests/fixtures/tui/colour-120x40.txt +++ b/tests/fixtures/tui/colour-120x40.txt @@ -1064,3 +1064,44 @@ ^[[0;1;35mA/Enter^[[0m Back +=== plan-record +^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: RetroArch^[[0m + +^[[0;1m ^[[0;1;35m1^[[0;1m file to download, ^[[0;1;35m16.0 KB^[[0m + BIOS folder: ^[[0;1m~/.config/retroarch/system^[[0m + For nintendo-gba. + +^[[0;7;35m > Install^[[0m + Same choice as on 3 Nov: yes + Choose systems + Copy the BIOS files from an old card or a folder + Change where + Details + Options + Quit + + + + + + + + + + + + + + + + + + + + + + + + + + ^[[0;1;35mA/Enter^[[0m Install ^[[0;2mB/Esc^[[0m Back ^[[0;2mY/o^[[0m Options ^[[0;2m?^[[0m Help diff --git a/tests/fixtures/tui/colour-40x12.txt b/tests/fixtures/tui/colour-40x12.txt index 2c14f4510..dd8c187aa 100644 --- a/tests/fixtures/tui/colour-40x12.txt +++ b/tests/fixtures/tui/colour-40x12.txt @@ -336,3 +336,16 @@ ^[[0;2m Shortened to fit this window.^[[0m ^[[0;1;35mA^[[0m Back +=== plan-record +^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: RetroArch^[[0m + +^[[0;1m ^[[0;1;35m1^[[0;1m file to download, ^[[0;1;35m16.0 KB^[[0m + BIOS folder: + ^[[0;1m~/.config/retroarch/system^[[0m + +^[[0;7;35m > Install^[[0m + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder +^[[0;2m 1-4 of 8^[[0m + ^[[0;1;35mA^[[0m Install ^[[0;2mB^[[0m Back ^[[0;2mY^[[0m Options ^[[0;2m?^[[0m Help diff --git a/tests/fixtures/tui/colour-40x15.txt b/tests/fixtures/tui/colour-40x15.txt index 9ec9e5490..981d77e67 100644 --- a/tests/fixtures/tui/colour-40x15.txt +++ b/tests/fixtures/tui/colour-40x15.txt @@ -414,3 +414,19 @@ ^[[0;1;35mA^[[0m Back +=== plan-record +^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: RetroArch^[[0m + +^[[0;1m ^[[0;1;35m1^[[0;1m file to download, ^[[0;1;35m16.0 KB^[[0m + BIOS folder: + ^[[0;1m~/.config/retroarch/system^[[0m + For nintendo-gba. +^[[0;7;35m > Install^[[0m + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + Change where + Details + Options + Quit + ^[[0;1;35mA^[[0m Install ^[[0;2mB^[[0m Back ^[[0;2mY^[[0m Options ^[[0;2m?^[[0m Help diff --git a/tests/fixtures/tui/colour-80x24.txt b/tests/fixtures/tui/colour-80x24.txt index 64a66ec3e..efa50239c 100644 --- a/tests/fixtures/tui/colour-80x24.txt +++ b/tests/fixtures/tui/colour-80x24.txt @@ -648,3 +648,28 @@ ^[[0;1;35mA/Enter^[[0m Back +=== plan-record +^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: RetroArch^[[0m + +^[[0;1m ^[[0;1;35m1^[[0;1m file to download, ^[[0;1;35m16.0 KB^[[0m + BIOS folder: ^[[0;1m~/.config/retroarch/system^[[0m + For nintendo-gba. + +^[[0;7;35m > Install^[[0m + Same choice as on 3 Nov: yes + Choose systems + Copy the BIOS files from an old card or a folder + Change where + Details + Options + Quit + + + + + + + + + + ^[[0;1;35mA/Enter^[[0m Install ^[[0;2mB/Esc^[[0m Back ^[[0;2mY/o^[[0m Options ^[[0;2m?^[[0m Help diff --git a/tests/fixtures/tui/plan-record-120x40.txt b/tests/fixtures/tui/plan-record-120x40.txt new file mode 100644 index 000000000..acea8e5bc --- /dev/null +++ b/tests/fixtures/tui/plan-record-120x40.txt @@ -0,0 +1,40 @@ + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: ~/.config/retroarch/system + For nintendo-gba. + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy the BIOS files from an old card or a folder + Change where + Details + Options + Quit + + + + + + + + + + + + + + + + + + + + + + + + + + A/Enter Install B/Esc Back Y/o Options ? Help diff --git a/tests/fixtures/tui/plan-record-40x12.txt b/tests/fixtures/tui/plan-record-40x12.txt new file mode 100644 index 000000000..439d2a286 --- /dev/null +++ b/tests/fixtures/tui/plan-record-40x12.txt @@ -0,0 +1,12 @@ + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: + ~/.config/retroarch/system + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + 1-4 of 8 + A Install B Back Y Options ? Help diff --git a/tests/fixtures/tui/plan-record-40x15.txt b/tests/fixtures/tui/plan-record-40x15.txt new file mode 100644 index 000000000..0ca0559e4 --- /dev/null +++ b/tests/fixtures/tui/plan-record-40x15.txt @@ -0,0 +1,15 @@ + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: + ~/.config/retroarch/system + For nintendo-gba. + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + Change where + Details + Options + Quit + A Install B Back Y Options ? Help diff --git a/tests/fixtures/tui/plan-record-80x24.txt b/tests/fixtures/tui/plan-record-80x24.txt new file mode 100644 index 000000000..cacafb755 --- /dev/null +++ b/tests/fixtures/tui/plan-record-80x24.txt @@ -0,0 +1,24 @@ + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: ~/.config/retroarch/system + For nintendo-gba. + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy the BIOS files from an old card or a folder + Change where + Details + Options + Quit + + + + + + + + + + A/Enter Install B/Esc Back Y/o Options ? Help diff --git a/tests/fixtures/tui/route-evmapy.txt b/tests/fixtures/tui/route-evmapy.txt index d799d290a..c25b7c0e5 100644 --- a/tests/fixtures/tui/route-evmapy.txt +++ b/tests/fixtures/tui/route-evmapy.txt @@ -1183,3 +1183,57 @@ A Back +=== plan-record 40x12 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: + ~/.config/retroarch/system + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + 1-4 of 8 + A Install B Back Y Options +=== plan-record 40x15 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: + ~/.config/retroarch/system + For nintendo-gba. + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + Change where + Details + Options + Quit + A Install B Back Y Options +=== plan-record 80x24 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: ~/.config/retroarch/system + For nintendo-gba. + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy the BIOS files from an old card or a folder + Change where + Details + Options + Quit + + + + + + + + + + A Install B Back Y Options diff --git a/tests/fixtures/tui/route-gptokeyb.txt b/tests/fixtures/tui/route-gptokeyb.txt index 9e9647ae4..5816841a0 100644 --- a/tests/fixtures/tui/route-gptokeyb.txt +++ b/tests/fixtures/tui/route-gptokeyb.txt @@ -1183,3 +1183,57 @@ A Back +=== plan-record 40x12 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: + ~/.config/retroarch/system + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + 1-4 of 8 + A Install B Back Y Options +=== plan-record 40x15 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: + ~/.config/retroarch/system + For nintendo-gba. + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + Change where + Details + Options + Quit + A Install B Back Y Options +=== plan-record 80x24 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: ~/.config/retroarch/system + For nintendo-gba. + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy the BIOS files from an old card or a folder + Change where + Details + Options + Quit + + + + + + + + + + A Install B Back Y Options diff --git a/tests/fixtures/tui/route-gptokeyb_muxterm.txt b/tests/fixtures/tui/route-gptokeyb_muxterm.txt index 9390cd9a6..526fa0b87 100644 --- a/tests/fixtures/tui/route-gptokeyb_muxterm.txt +++ b/tests/fixtures/tui/route-gptokeyb_muxterm.txt @@ -1183,3 +1183,57 @@ A Back +=== plan-record 40x12 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: + ~/.config/retroarch/system + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + 1-4 of 8 + A Install B Back Y Options +=== plan-record 40x15 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: + ~/.config/retroarch/system + For nintendo-gba. + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + Change where + Details + Options + Quit + A Install B Back Y Options +=== plan-record 80x24 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: ~/.config/retroarch/system + For nintendo-gba. + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy the BIOS files from an old card or a folder + Change where + Details + Options + Quit + + + + + + + + + + A Install B Back Y Options diff --git a/tests/fixtures/tui/route-keys.txt b/tests/fixtures/tui/route-keys.txt index 571fc7b59..7e0713cf4 100644 --- a/tests/fixtures/tui/route-keys.txt +++ b/tests/fixtures/tui/route-keys.txt @@ -1348,3 +1348,57 @@ Enter Back +=== plan-record 40x12 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: + ~/.config/retroarch/system + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + 1-4 of 8 + Enter Install Esc Back o Options +=== plan-record 40x15 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: + ~/.config/retroarch/system + For nintendo-gba. + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + Change where + Details + Options + Quit + Enter Install Esc Back o Options +=== plan-record 80x24 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: ~/.config/retroarch/system + For nintendo-gba. + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy the BIOS files from an old card or a folder + Change where + Details + Options + Quit + + + + + + + + + + Enter Install Esc Back o Options ? Help diff --git a/tests/fixtures/tui/route-miyoo.txt b/tests/fixtures/tui/route-miyoo.txt index d828a7dac..96e86e306 100644 --- a/tests/fixtures/tui/route-miyoo.txt +++ b/tests/fixtures/tui/route-miyoo.txt @@ -1286,3 +1286,57 @@ A Back +=== plan-record 40x12 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: + ~/.config/retroarch/system + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + 1-4 of 8 + A Install R2 Back L2 Options +=== plan-record 40x15 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: + ~/.config/retroarch/system + For nintendo-gba. + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + Change where + Details + Options + Quit + A Install R2 Back L2 Options +=== plan-record 80x24 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: ~/.config/retroarch/system + For nintendo-gba. + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy the BIOS files from an old card or a folder + Change where + Details + Options + Quit + + + + + + + + + + A Install R2 Back L2 Options diff --git a/tests/fixtures/tui/route-muxterm.txt b/tests/fixtures/tui/route-muxterm.txt index 397254a58..47490ee63 100644 --- a/tests/fixtures/tui/route-muxterm.txt +++ b/tests/fixtures/tui/route-muxterm.txt @@ -1402,3 +1402,57 @@ Start Back +=== plan-record 40x12 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: + ~/.config/retroarch/system + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + 1-4 of 8 + Start Install B Back +=== plan-record 40x15 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: + ~/.config/retroarch/system + For nintendo-gba. + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy from an old card or a folder + Change where + Details + Options + Quit + Start Install B Back +=== plan-record 80x24 + RetroBIOS: RetroArch + + 1 file to download, 16.0 KB + BIOS folder: ~/.config/retroarch/system + For nintendo-gba. + + > Install + Same choice as on 3 Nov: yes + Choose systems + Copy the BIOS files from an old card or a folder + Change where + Details + Options + Quit + + + + + + + + + + Start Install B Back diff --git a/tests/test_install.py b/tests/test_install.py index b2a6d4734..ab31cb1df 100644 --- a/tests/test_install.py +++ b/tests/test_install.py @@ -6954,10 +6954,19 @@ class EventsDescribeTheRun(unittest.TestCase, _SyntheticTree): # The last transfer: every byte came over the network. self.assertEqual([e for e in events if e["event"] == "transfer"][-1], {"event": "transfer", "bytes_local": 0, "bytes_network": 245}) + record = next(e for e in events if e["event"] == "record") + # What the run placed, and its choice, the whole list: written + # right before the summary. + self.assertEqual({key: record[key] for key in ("folder", "status", "choice", "files")}, + {"folder": str(self.bios), "status": "written", + "choice": ["--all-files"], "files": 3}) + self.assertEqual(record["path"], str(self.home / install.BACKUP_DIR + / f"{self.bios.name}.install.json")) self.assertEqual([e for e in events if e["event"] not in ("progress", "transfer")], self._head("install", installer) + [ {"event": "download", "platform": "retroarch", "files": 3, "bytes": 245}, *done, + record, {"event": "summary", "mode": "install", "installed": 3, "up_to_date": 1, "pending": 0, "failed": [], "skipped": self.SKIPPED, "left_out": [], "kept": [{"folder": kept[0]["folder"], "files": 1, "bytes": 11}], @@ -7565,7 +7574,11 @@ class KeptFilesEndToEnd(unittest.TestCase, _SyntheticTree): "--no-input", "--jobs", "1", "--verbose") self.assertEqual(proc.returncode, 0, proc.stdout + proc.stderr) self.assertEqual((self.bios / "b.bin").read_bytes(), self.FILES["bios/A/b.bin"]) - runs = list((self.home / install.BACKUP_DIR).iterdir()) + # The install record sits beside the run folders, a file of its own. + held = list((self.home / install.BACKUP_DIR).iterdir()) + runs = [path for path in held if path.is_dir()] + self.assertEqual(sorted(path.name for path in held if not path.is_dir()), + [f"{self.bios.name}.install.json"]) self.assertEqual(len(runs), 1) self.assertIn("Kept 1 file already there (11 B), which the collection's copies " f"replaced, in {runs[0]}", proc.stdout) @@ -7594,7 +7607,8 @@ class KeptFilesEndToEnd(unittest.TestCase, _SyntheticTree): again = _install_run(self.env, "--platform", "retroarch", "--dest", str(self.bios), "--no-input", "--jobs", "1") self.assertEqual(again.returncode, 0, again.stderr) - self.assertEqual(len(list((self.home / install.BACKUP_DIR).iterdir())), 2) + self.assertEqual(len([path for path in (self.home / install.BACKUP_DIR).iterdir() + if path.is_dir()]), 2) diff --git a/tests/test_install_journeys.py b/tests/test_install_journeys.py index ee3595afa..e98a2fc58 100644 --- a/tests/test_install_journeys.py +++ b/tests/test_install_journeys.py @@ -41,15 +41,17 @@ ESC = "\x1b" # (keys to start the install or reach the answer, keys in all). One system # is reached through None and the filter, the other device's folder typed -# as ~/bios. +# as ~/bios. With one setup found the screen opens on its plan: one key +# fewer, and one more for another device, whose Esc goes back to the +# setups. The second run of one system takes its install record's choice. JOURNEY_KEYS = { - "first_install": (2, 3), - "card_with_games": (2, 3), - "update": (2, 3), - "one_system": (14, 15), - "one_system_again": (2, 3), - "what_is_missing": (5, 6), - "another_device": (19, 20), + "first_install": (1, 2), + "card_with_games": (1, 2), + "update": (1, 2), + "one_system": (13, 14), + "one_system_again": (1, 2), + "what_is_missing": (4, 5), + "another_device": (20, 21), } # Words each journey's screens show by default, summed over the screens it @@ -58,13 +60,15 @@ JOURNEY_KEYS = { # word: its length is the machine's. A change that adds words raises a # number here and says why. JOURNEY_WORDS = { - "first_install": 63, - "card_with_games": 106, - "update": 79, - "one_system": 193, - "one_system_again": 68, - "what_is_missing": 223, - "another_device": 230, + "first_install": 47, + "card_with_games": 87, + "update": 70, + "one_system": 179, + "one_system_again": 67, + "what_is_missing": 207, + # The plan of the setup found comes first now (33 words), the setups + # one Esc away, and the last plan names Change where (2 words). + "another_device": 265, } # Which setup? names every setup, Preview every file: lists, not prose. SCREEN_CEILING = 90 @@ -75,7 +79,9 @@ LINE_TEXT = { "card_with_games": (4, 29), "update": (5, 36), "one_system": (4, 18), - "what_is_missing": (3, 15), + # After one system installed, the check counts the install record's + # choice: one line says so, and how to count every file. + "what_is_missing": (4, 25), "another_device": (4, 18), } @@ -221,10 +227,9 @@ class Journeys(unittest.TestCase): repo = Repository(self) dest = repo.retroarch_here() term = self.start(repo) - screen = term.wait("Where to install?", timeout=40) - self.assertIn("> RetroArch", screen) - self.press(term, "\r") - term.wait("files to download", timeout=40) + # The one setup found: its plan first. + screen = term.wait("files to download", timeout=40) + self.assertIn("Change where", screen) self.press(term, "\r") started = self.keys self.assertEqual(self.finish(term), 0) @@ -241,8 +246,6 @@ class Journeys(unittest.TestCase): (card / "ROMS" / "GBA").mkdir(parents=True) (card / "ROMS" / "GBA" / "unknown.gba").write_bytes(b"not in any catalog") term = self.start(repo, env={"JOURNEY_CARD": str(card)}) - term.wait("Where to install?", timeout=40) - self.press(term, "\r") screen = term.wait("For the games on this card: yes", timeout=60) self.assertIn("For the 1 game on this card.", screen) self.press(term, "\r") @@ -265,8 +268,6 @@ class Journeys(unittest.TestCase): changed["size"] += 1 repo.write_list() term = self.start(repo) - term.wait("Where to install?", timeout=40) - self.press(term, "\r") term.wait("1 file to download", timeout=40) self.press(term, "\r") started = self.keys @@ -278,8 +279,6 @@ class Journeys(unittest.TestCase): repo = Repository(self) dest = repo.retroarch_here() term = self.start(repo) - term.wait("Where to install?", timeout=40) - self.press(term, "\r") term.wait("files to download", timeout=40) for _step in range(12): if "> Choose systems" in term.settle(): @@ -298,24 +297,25 @@ class Journeys(unittest.TestCase): self.assertEqual(self.finish(term), 0) self.counted("one_system", started, self.keys) self.assertEqual(written(dest), ["gba_bios.bin"]) - # The next release: the earlier choice is not kept, and two keys - # install the whole list. + # The next release changes its file: the plan opens on the same + # choice, read from the install record, and one key installs it. + changed = next(e for e in repo.listed["files"] if e["dest"] == "gba_bios.bin") + changed["size"] += 1 + repo.write_list() term = self.start(repo) - term.wait("Where to install?", timeout=40) - self.press(term, "\r") - term.wait("files to download", timeout=40) + screen = term.wait("1 file to download", timeout=40) + self.assertRegex(screen, r"Same choice as on \d+ [A-Z][a-z]{2}: yes") self.press(term, "\r") started = self.keys self.assertEqual(self.finish(term), 0) self.counted("one_system_again", started, self.keys) - self.assertEqual(written(dest), sorted(e["dest"] for e in repo.listed["files"])) + self.assertEqual(written(dest), ["gba_bios.bin"]) + self.assertEqual((dest / "gba_bios.bin").stat().st_size, changed["size"]) def test_what_is_missing(self): repo = Repository(self) repo.retroarch_here() term = self.start(repo) - term.wait("Where to install?", timeout=40) - self.press(term, "\r") term.wait("files to download", timeout=40) self.press(term, "o") term.wait("Each row is an option") @@ -332,6 +332,9 @@ class Journeys(unittest.TestCase): repo = Repository(self) repo.retroarch_here() term = self.start(repo) + # The plan of the one setup found first: Esc goes back to the setups. + term.wait("files to download", timeout=40) + self.press(term, ESC) term.wait("Where to install?", timeout=40) for _step in range(12): if "> Another setup or folder" in term.settle(): @@ -478,5 +481,143 @@ class LineModeJourneys(unittest.TestCase): self.run_line(repo, *base, "--check", "--verbose").stdout) +def events(proc: subprocess.CompletedProcess, kind: str | None = None) -> list[dict]: + said = [json.loads(line) for line in proc.stdout.splitlines() if line.startswith("{")] + return [event for event in said if kind is None or event["event"] == kind] + + +class InstallRecord(unittest.TestCase): + """What an install placed, recorded beside the BIOS folder, and its + choice taken by the next run when nothing on the command line chose.""" + + def setUp(self): + self.repo = Repository(self) + self.dest = self.repo.root / "retroarch" / "system" + self.record = self.dest.parent / install.BACKUP_DIR / "system.install.json" + + def run_line(self, *args: str, dest: Path | None = None) -> subprocess.CompletedProcess: + return subprocess.run( + [sys.executable, str(REPO_ROOT / "install.py"), "--platform", "retroarch", + "--dest", str(dest or self.dest), *args], + env=self.repo.env, capture_output=True, text=True, timeout=120, check=False, + stdin=subprocess.DEVNULL) + + def dests(self, proc: subprocess.CompletedProcess) -> list[str]: + return sorted(event["dest"] for event in events(proc, "file")) + + def everything(self) -> list[str]: + return sorted(entry["dest"] for entry in self.repo.listed["files"]) + + def test_the_record_holds_each_file_written_and_its_hash(self): + proc = self.run_line("--system", "nintendo-gba", "--yes", "--events") + self.assertEqual(proc.returncode, 0, proc.stdout + proc.stderr) + said = events(proc, "record") + self.assertEqual([event["status"] for event in said], ["written"]) + self.assertEqual(said[0]["choice"], ["--system", "nintendo-gba"]) + self.assertEqual((said[0]["path"], said[0]["files"]), (str(self.record), 1)) + # Before the summary, its keys those of EVENT_KEYS. + kinds = [event["event"] for event in events(proc)] + self.assertEqual(kinds.index("record") + 1, kinds.index("summary")) + self.assertEqual(list(said[0])[1:], list(install.EVENT_KEYS["record"])) + kept = json.loads(self.record.read_text(encoding="utf-8")) + files = kept["setups"]["retroarch"]["files"] + self.assertEqual([item["dest"] for item in files], ["gba_bios.bin"]) + self.assertEqual(files[0]["sha1"], hashlib.sha1( + (self.dest / "gba_bios.bin").read_bytes()).hexdigest()) + self.assertEqual((files[0]["from"], files[0]["root"]), ("download", "")) + self.assertEqual(kept["folder"], str(self.dest)) + # Nothing of it in the BIOS folder, which some cores read whole. + self.assertEqual(written(self.dest), ["gba_bios.bin"]) + + def test_the_next_run_takes_the_recorded_choice(self): + self.run_line("--system", "nintendo-gba", "--yes") + (self.dest / "gba_bios.bin").unlink() + proc = self.run_line("--yes", "--events") + self.assertEqual(proc.returncode, 0, proc.stderr) + kinds = [event["event"] for event in events(proc)] + self.assertLess(kinds.index("record"), kinds.index("choices")) + applied = events(proc, "record")[0] + self.assertEqual((applied["status"], applied["choice"]), + ("applied", ["--system", "nintendo-gba"])) + self.assertEqual(self.dests(proc), ["gba_bios.bin"]) + self.assertEqual(written(self.dest), ["gba_bios.bin"]) + (self.dest / "gba_bios.bin").unlink() + proc = self.run_line("--yes") + self.assertRegex(proc.stdout, r"Installing 1 file \(.*\) for RetroArch, same choice " + r"as on \d+ [A-Z][a-z]{2}\.") + + def test_the_command_line_replaces_the_record(self): + self.run_line("--system", "nintendo-gba", "--yes") + self.assertEqual(self.dests(self.run_line("--system", "sega-megadrive", "--check", + "--events")), + sorted(e["dest"] for e in self.repo.listed["files"] + if "sega-megadrive" in e.get("systems", []))) + whole = self.run_line("--all-files", "--check", "--events") + self.assertEqual(self.dests(whole), self.everything()) + self.assertEqual(events(whole, "record"), []) + + def test_a_record_that_cannot_be_read_is_said_once_and_ignored(self): + self.dest.mkdir(parents=True) + self.record.parent.mkdir() + self.record.write_text("{not json", encoding="utf-8") + proc = self.run_line("--yes", "--events") + self.assertEqual(proc.returncode, 0, proc.stderr) + said = events(proc, "record") + self.assertEqual([event["status"] for event in said], ["unreadable", "written"]) + self.assertIn("is damaged, so it is ignored.", said[0]["message"]) + # Said once to a person (standard error under --events), once as an event. + self.assertEqual(proc.stderr.count("so it is ignored"), 1) + self.assertEqual(self.dests(proc), self.everything()) + # Replaced by a record that reads. + self.assertEqual(json.loads(self.record.read_text())["schema"], install.RECORD_SCHEMA) + for text in ('{"schema": 99, "setups": {}}', '{"schema": 1, "setups": {"retroarch": 3}}', + "\xff\xfe"): + with self.subTest(record=text): + self.record.write_bytes(text.encode("latin-1")) + proc = self.run_line("--check", "--events") + self.assertEqual(events(proc, "record")[0]["status"], "unreadable") + self.assertEqual(self.dests(proc), self.everything()) + + def test_a_record_for_another_folder_is_not_applied(self): + self.run_line("--system", "nintendo-gba", "--yes") + # A sibling folder shares the holder, never the record. + other = self.dest.parent / "bios" + proc = self.run_line("--check", "--events", dest=other) + self.assertEqual(events(proc, "record"), []) + self.assertEqual(self.dests(proc), self.everything()) + # The record copied under the sibling's name still names the first. + shutil.copy(self.record, self.record.with_name("bios.install.json")) + proc = self.run_line("--check", "--events", dest=other) + self.assertEqual(events(proc, "record"), []) + self.assertEqual(self.dests(proc), self.everything()) + # The record of another setup in the same folder is not this one's. + proc = subprocess.run( + [sys.executable, str(REPO_ROOT / "install.py"), "--platform", "batocera", + "--dest", str(self.dest), "--check", "--events"], + env=self.repo.env, capture_output=True, text=True, timeout=120, check=False, + stdin=subprocess.DEVNULL) + self.assertEqual(events(proc, "record"), []) + self.assertEqual(self.dests(proc), self.everything()) + + def test_line_mode_chooses_what_the_screen_chooses(self): + """The plan's choice from the record is the same set of files on the + screen and in line mode: the screen's options, given to a run, and a + run given none.""" + self.run_line("--system", "nintendo-gba", "--yes") + (self.dest / "gba_bios.bin").unlink() + state = install.TuiState() + state.platform, state.dest = "retroarch", self.dest + install._tui_record_load(state) + self.assertTrue(install.tui_record_kept(state)) + flags = [flag if value is None else f"{flag}={value}" + for flag, value in install.tui_flags(state)] + screen = self.run_line(*flags, "--dry-run", "--events") + line = self.run_line("--dry-run", "--events") + self.assertEqual(self.dests(screen), ["gba_bios.bin"]) + self.assertEqual(self.dests(line), self.dests(screen)) + self.assertEqual(events(line, "check")[0]["bytes_needed"], + events(screen, "check")[0]["bytes_needed"]) + + if __name__ == "__main__": unittest.main() diff --git a/tests/test_install_tui.py b/tests/test_install_tui.py index eae7a1ed3..cabc3dc56 100644 --- a/tests/test_install_tui.py +++ b/tests/test_install_tui.py @@ -378,6 +378,14 @@ def screen_text(lines) -> str: return re.sub(r"(?<=[/\\]) ", "", " ".join(" ".join(lines).split())) +def listed(state: install.TuiState) -> install.TuiState: + """The setups found, as Back shows them from the plan the screen opens + on when it found one setup.""" + if state.opened_on_plan and state.screen != "setup": + install.tui_update(state, Key("esc")) + return state + + def fresh_state() -> install.TuiState: state = install.TuiState(os_type="linux", home=HOME) state.setups = [("retroarch", SYSTEM_DIR, "RetroArch"), @@ -761,7 +769,9 @@ class Flow(unittest.TestCase): mock.patch.object(install, "detect_platforms", return_value=[]), \ mock.patch.object(install, "detect_frontends", return_value=[]): state, effects = install.tui_start(_args(), "linux") - self.assertEqual((state.screen, effects), ("setup", [])) + # The one setup found: its plan first, the list one Back away. + self.assertEqual((state.screen, effects), ("checking", [("fetch", "minui")])) + self.assertEqual(listed(state).screen, "setup") label = f"MinUI SD card ({card.name})" self.assertEqual(state.setups, [("minui", card, label)]) self.assertEqual([row.label for row in install.tui_rows(state)], @@ -1032,9 +1042,55 @@ def golden_states() -> dict: told = golden_states_result() told.stack.append("details") states["result-details"] = told + states["plan-record"] = record_state() return states +def record_setup(choice: list[str] | None = None) -> dict: + """A record kept on 3 November of this year: the plan says 3 Nov in + any year it runs.""" + year = time.localtime().tm_year + return {"written": f"{year}-11-03T12:00:00Z", "list": {"version": "v1", "generated": ""}, + "choice": ["--system", "nintendo-gba"] if choice is None else choice, + "files": [{"dest": "gba_bios.bin", "root": "", "sha1": "0" * 40, "size": 16384, + "from": "download"}]} + + +def record_state(setup: dict | None = None) -> install.TuiState: + """The plan of a RetroArch folder whose record kept Game Boy Advance, + its file changed by a release since, opened on the one setup found.""" + setup = record_setup() if setup is None else setup + state = fresh_state() + state.setups = state.setups[:1] + manifest = json.loads(json.dumps(MANIFEST)) + manifest["files"][2]["sha1"] = "1" * 40 + with mock.patch.object(install, "setup_record", + return_value=(setup, SYSTEM_DIR.parent / "x", "")), \ + mock.patch.object(install.Path, "exists", return_value=True), \ + mock.patch.object(install, "found_setups", + return_value=(state.setups, set())), \ + mock.patch.object(install, "detect_frontends", return_value=[]), \ + mock.patch.object(install, "_mounted_cards", return_value=[]), \ + mock.patch.object(install, "_DETECTION_REFUSED", []), \ + mock.patch.object(install.Path, "home", return_value=HOME): + state, effects = install.tui_start(_args(), "linux") + assert effects == [("fetch", "retroarch")], effects + # Drawn as the other screens are, whatever the shell running the tests. + state.home, state.pad = HOME, "both" + effects = install.tui_receive(state, ("manifest", "retroarch", manifest)) + assert effects == [("run", "check")], effects + gba = [event for event in FILES if event["dest"] == "gba_bios.bin"] + systems = [event for event in SYSTEMS if event["system"] == "nintendo-gba"] + check = {**CHECK, "files": 1, "present": 0, "missing": 1, "wrong_hash": 0, + "bytes_needed": 16384, "not_installable": 0} + for event in [*gba, *systems, check]: + install.tui_receive(state, ("event", state.run_id, event)) + with mock.patch.object(install, "_tui_folder_facts", return_value={ + "free": 50 * 1024 ** 3, "writable": True, "cores": ["pcsx_rearmed"]}): + install.tui_receive(state, ("ended", state.run_id, 1, [])) + return state + + def golden_states_result() -> install.TuiState: """The result golden_states draws, a file failed and one kept.""" result = checked_state() @@ -1075,6 +1131,102 @@ def result_states() -> dict: } +class RecordedPlan(unittest.TestCase): + """The plan of a folder with an install record: opened on the one setup + found, on the recorded choice, one press from installing it again.""" + + def row(self, state: install.TuiState, action: str) -> install.TuiRow: + return next(row for row in install.tui_rows(state) if row.action == action) + + def test_opens_on_the_plan_of_the_one_setup_found(self): + state = record_state() + self.assertTrue(state.opened_on_plan) + self.assertEqual(state.stack, ["setup", "plan"]) + self.assertEqual(install.tui_rows(state)[0].action, "install") + press(state, "end", "up", "up", "up") + self.assertEqual(install.tui_rows(state)[state.focus["plan"]].label, "Change where") + press(state, "enter") + self.assertEqual(state.screen, "setup") + + def test_several_setups_open_the_list(self): + with mock.patch.object(install, "found_setups", return_value=( + fresh_state().setups, set())), \ + mock.patch.object(install, "detect_frontends", return_value=[]), \ + mock.patch.object(install, "_mounted_cards", return_value=[]), \ + mock.patch.object(install, "_DETECTION_REFUSED", []): + state, effects = install.tui_start(_args(), "linux") + self.assertEqual((state.screen, effects, state.opened_on_plan), ("setup", [], False)) + + def test_one_press_installs_the_recorded_choice(self): + state = record_state() + self.assertEqual(self.row(state, "record").label, "Same choice as on 3 Nov: yes") + self.assertIn("For nintendo-gba.", screen_text( + install.tui_view(state, 80, 24))) + self.assertEqual(press(state, "enter"), [("run", "install")]) + argv = install.tui_argv(state, "install", "py", "install.py") + self.assertIn("--system=nintendo-gba", argv) + self.assertNotIn("--all-files", argv) + + def test_no_takes_the_whole_list_and_yes_brings_it_back(self): + state = record_state() + state.focus["plan"] = install.tui_rows(state).index(self.row(state, "record")) + with mock.patch.object(install, "games_probe", return_value=None): + effects = press(state, "enter") + self.assertEqual(effects, [("run", "check")]) + flags = install.tui_flags(state) + self.assertIn(("--all-files", None), flags) + self.assertFalse([flag for flag in flags if flag[0] == "--system"]) + self.assertFalse(install.tui_record_kept(state)) + for event in [*FILES, *SYSTEMS, CHECK]: + install.tui_receive(state, ("event", state.run_id, event)) + with mock.patch.object(install, "_tui_folder_facts", return_value={ + "free": 50 * 1024 ** 3, "writable": True}): + install.tui_receive(state, ("ended", state.run_id, 1, [])) + self.assertEqual(self.row(state, "record").label, "Same choice as on 3 Nov: no") + self.assertEqual(install.tui_rows(state)[state.focus["plan"]].action, "record") + self.assertEqual(press(state, "enter"), [("run", "check")]) + self.assertIn(("--system", "nintendo-gba"), install.tui_flags(state)) + self.assertTrue(install.tui_record_kept(state)) + + def test_the_command_line_choice_wins(self): + with mock.patch.object(install, "setup_record", + return_value=(record_setup(), SYSTEM_DIR, "")), \ + mock.patch.object(install.Path, "exists", return_value=True): + state, _effects = install.tui_start( + _args(platform="retroarch", dest=str(SYSTEM_DIR), system=["sony-playstation"]), + "linux", detect=False) + self.assertEqual(install._tui_system_flags(state), [("--system", "sony-playstation")]) + self.assertFalse(install.tui_record_kept(state)) + self.assertEqual(install._record_rows(state), []) + + def test_a_record_that_cannot_be_read_is_said_once(self): + problem = "The install record /x/system.install.json is damaged" + install._RECORD_SAID.discard("/x/system.install.json") + with mock.patch.object(install, "setup_record", + return_value=(None, Path("/x/system.install.json"), problem)), \ + mock.patch.object(install.Path, "exists", return_value=True): + state, _effects = install.tui_start( + _args(platform="retroarch", dest=str(SYSTEM_DIR)), "linux", detect=False) + self.assertEqual(str(state.status), f"{problem}, so it is ignored.") + state.status, state.record_for = "", None + install._tui_record_load(state) + self.assertEqual(state.status, "") + self.assertIsNone(state.record) + self.assertNotIn("--all-files", str(install.tui_flags(state))) + + def test_the_install_row_says_the_size_the_headline_says(self): + """14930 files to download, 6.8 GB stood above Install 6.6 GB: the + data files counted in one, the copies in the other.""" + big = 2 * 1024 ** 3 + state = checked_state() + state.files[0] = {**state.files[0], "size": big} + state.check = {**state.check, "bytes_needed": state.check["bytes_needed"] + big, + "data_missing": 3, "data_bytes": 300 * 1024 ** 2} + headline = str(install._plan_lines(state.check, state.dest, state)[0]) + size = headline.rsplit(", ", 1)[1] + self.assertEqual(install.tui_rows(state)[0].label, f"Install {size}") + + class Views(unittest.TestCase): """Every screen as text, at the sizes a handheld and a desktop show.""" @@ -2387,6 +2539,9 @@ class CardsSpaceAndConfirm(unittest.TestCase): mock.patch.object(install, "detect_platforms", return_value=[]), \ mock.patch.object(install, "detect_frontends", return_value=[]): state, effects = install.tui_start(_args(), "linux") + self.assertEqual(effects, [("fetch", "retroarch")]) + self.assertEqual(state.dest, root / "MUOS" / "bios") + listed(state) label = f"muOS SD card ({root.name})" self.assertEqual(state.setups, [("retroarch", root / "MUOS" / "bios", label)]) text = screen_text(install.tui_view(state, 120, 40)) @@ -4527,6 +4682,14 @@ class WindowsHasNoPosixModules(unittest.TestCase): # --- End to end, on a pseudo-terminal ------------------------------------- +def on_setups(term: Pty) -> str: + """The setups found, one Back from the plan the screen opens on when it + found one setup: the first screen as it was before.""" + term.wait("> Install") + term.send("\x1b") + return term.wait("Where to install?") + + class Pty: """install.py on a pseudo-terminal, its screen read back through pyte.""" @@ -4925,14 +5088,13 @@ class EndToEnd(unittest.TestCase): self.assertAppOnCard(root, "KNULLI") self.assertIn("--add-app", term.after()) - def test_three_presses_install_everything(self): + def test_two_presses_install_everything(self): repo = self.repo() term = self.start() - screen = term.wait("Where to install?") - self.assertIn("> RetroArch", screen) - term.send("\r") + # The one setup found here: its plan first. screen = term.wait("files to download") self.assertIn("5 files to download, 30 B", screen) + self.assertIn("Change where", screen) self.assertIn("> Install", screen) term.send("\r") term.wait("5 files installed.") @@ -4979,8 +5141,6 @@ class EndToEnd(unittest.TestCase): self.assertIn("6 files installed", proc.stdout) else: term = self.start() - term.wait("Where to install?") - term.send("\r") screen = term.wait("files to download") self.assertIn("6 files to download", screen) # The second folder the run writes to, named on the @@ -5159,7 +5319,7 @@ class EndToEnd(unittest.TestCase): def test_ctrl_c_on_the_first_screen(self): self.repo() term = self.start() - term.wait("Where to install?") + term.wait("> Install") term.send("\x03") self.assertEqual(term.close(), 130) self.assertIn(b"\x1b[?2004l\x1b[0m\x1b[?25h\x1b[?1049l", term.raw) @@ -5169,7 +5329,7 @@ class EndToEnd(unittest.TestCase): self.repo() term = self.start() - term.wait("Where to install?") + term.wait("> Install") mark = len(term.raw) os.kill(term.pid, signal.SIGTSTP) end = time.monotonic() + 10 @@ -5182,7 +5342,7 @@ class EndToEnd(unittest.TestCase): self.assertIn(b"\x1b[?25h\x1b[?1049l", term.raw[mark:]) mark = len(term.raw) os.kill(term.pid, signal.SIGCONT) - term.wait("A/Enter Continue") + term.wait("A/Enter Install") end = time.monotonic() + 5 while b"\x1b[?1049h" not in term.raw[mark:] and time.monotonic() < end: term._pump(0.05) @@ -5194,11 +5354,11 @@ class EndToEnd(unittest.TestCase): """The terminal gone, the farewell has nowhere to go: the code is 129 (SIGHUP), not 120 from the flush failing at exit.""" self.repo() - for screen_name, keys_first in (("Where to install?", ()), - ("files to download", ("\r",))): + for screen_name, keys_first in (("files to download", ()), + ("Where to install?", ("\x1b",))): with self.subTest(screen=screen_name): term = self.start() - term.wait("Where to install?") + term.wait("files to download") term.send(*keys_first) term.wait(screen_name) os.close(term.fd) @@ -5247,12 +5407,12 @@ class EndToEnd(unittest.TestCase): self.repo() self.env[install.TUI_IDLE_ENV] = "1" term = self.start() - term.wait("Where to install?") + term.wait("> Install") self.assertEqual(term.close(), install.QUIT_CODE) self.assertIn("No button pressed, closing.", term.after()) # A key pressed, the screen stays: the person is there. term = self.start() - term.wait("Where to install?") + term.wait("> Install") term.send(DOWN) end = time.monotonic() + 2.5 while time.monotonic() < end: @@ -5282,7 +5442,7 @@ class EndToEnd(unittest.TestCase): with self.subTest(env=env): self.env.update(env) term = self.start(cols=40, rows=12) - term.wait("Where to install?") + on_setups(term) screen = term.wait(bar) self.assertEqual(screen.splitlines()[-1].strip(), bar) term.send("q") @@ -5293,7 +5453,7 @@ class EndToEnd(unittest.TestCase): def test_resize_redraws(self): self.repo() term = self.start(cols=40, rows=15) - term.wait("Where to install?") + on_setups(term) term.resize(100, 30) term.send(DOWN) screen = term.wait("> Another setup or folder") @@ -5379,7 +5539,7 @@ class EndToEnd(unittest.TestCase): self.env.pop("NO_COLOR", None) self.env.update({"TERM": "xterm", **env}) term = self.start() - screen = term.wait("Where to install?") + screen = on_setups(term) self.assertIn("> RetroArch", screen) screens[name] = screen # pyte reads the colours drawn: RetroBIOS in the accent. @@ -5612,7 +5772,7 @@ class TheTerminalComesBack(unittest.TestCase): def ended(self, how) -> Pty: self.repo() term = self.start() - term.wait("Where to install?") + term.wait("> Install") # Every way out below starts with the clicks asked for, written # right after the frame. term.settle() @@ -5672,7 +5832,7 @@ class TheTerminalComesBack(unittest.TestCase): job control it stops, and fg brings the screen back.""" term = self.shell() self.typed(term, f"{shlex.quote(sys.executable)} {REPO_ROOT / 'install.py'} --tui") - term.wait("Where to install?") + term.wait("> Install") mark = len(term.raw) term.send("\x1a") end = time.monotonic() + 10 @@ -5687,7 +5847,7 @@ class TheTerminalComesBack(unittest.TestCase): while b"\x1b[?1049h" not in term.raw[mark:] and time.monotonic() < end: term._pump(0.05) self.assertIn(b"\x1b[?1049h", term.raw[mark:]) - term.wait("Where to install?") + term.wait("> Install") self.assertFalse(termios.tcgetattr(term.fd)[3] & termios.ECHO) # The clicks come back with the screen. term.settle() @@ -5709,7 +5869,7 @@ class TheTerminalComesBack(unittest.TestCase): term = Pty(["--tui"], self.env, program=program) self.addCleanup(lambda term=term: term.status is None and os.killpg(term.pid, 9)) - term.wait("Where to install?") + term.wait("> Install") term.send("\x1a") screen = term.wait("Ctrl-Z is ignored") self.assertIn("no shell started this installer", " ".join(screen.split())) @@ -5765,8 +5925,6 @@ class TheTerminalComesBack(unittest.TestCase): self.addCleanup(lambda: term.status is None and os.killpg(term.pid, 9)) term.wait("PROMPT$") self.typed(term, f"sh {REPO_ROOT / 'install.sh'} --jobs 1") - term.wait("Where to install?") - term.send("\r") term.wait("to download") term.send("\r") term.wait("Installing") @@ -10803,7 +10961,7 @@ class MouseOnAPty(unittest.TestCase): def test_taps_choose_a_row_and_press_the_bar(self): self.repo() term = self.start() - term.wait("Where to install?") + on_setups(term) term.settle() self.assertIn(install._MOUSE_ON.encode(), term.raw) row = self.line_of(term, "Another setup") @@ -11455,8 +11613,6 @@ class TapsOnAPty(unittest.TestCase): def test_taps_on_systems_tick_and_write_nothing(self): repo = self.repo() term = self.start() - term.wait("Where to install?") - term.send("\r") term.wait("> Install") row = self.line_of(term, "Choose systems") self.click(term, 20, row) @@ -11482,8 +11638,6 @@ class TapsOnAPty(unittest.TestCase): def test_the_result_is_left_by_a_tap_on_exit(self): self.repo() term = self.start() - term.wait("Where to install?") - term.send("\r") term.wait("files to download") row = self.line_of(term, "> Install") self.click(term, 20, row) @@ -12365,8 +12519,6 @@ class TapsOnAPtySeeFirst(unittest.TestCase): def test_one_tap_on_the_bar_install_installs_nothing(self): repo = self.repo() term = self.start() - term.wait("Where to install?") - term.send("\r") term.wait("> Install") term.settle() self.click(term, *self.bar_entry(term, "Install")) @@ -12380,7 +12532,7 @@ class TapsOnAPtySeeFirst(unittest.TestCase): def test_a_double_tap_on_continue_neither_quits_nor_installs(self): repo = self.repo() term = self.start() - term.wait("Where to install?") + on_setups(term) term.settle() col, line = self.bar_entry(term, "Continue") report = sgr(col + 1, line + 1) + sgr(col + 1, line + 1, release=True) @@ -12402,7 +12554,7 @@ class TapsOnAPtySeeFirst(unittest.TestCase): with self.subTest(gap=gap): repo = self.repo() term = self.start() - term.wait("Where to install?") + on_setups(term) term.settle() time.sleep(install.TUI_TAP_SETTLE) col, line = self.bar_entry(term, "Continue") @@ -12422,8 +12574,6 @@ class TapsOnAPtySeeFirst(unittest.TestCase): def test_continue_then_install_in_one_cell_stops_on_confirm(self): repo = self.repo() term = self.start() - term.wait("Where to install?") - term.send("\r") term.wait("> Install") row = self.line_of(term, "Choose systems") self.click(term, 20, row) @@ -12465,8 +12615,6 @@ class TapsOnAPtySeeFirst(unittest.TestCase): repo = self.repo(GameDataRepository) term = self.start() - term.wait("Where to install?") - term.send("\r") term.wait("> Install") for _step in range(8): if "> Choose systems" in term.settle(): @@ -12508,8 +12656,6 @@ class TapsOnAPtySeeFirst(unittest.TestCase): def test_two_taps_on_a_region_untick_it_where_it_was(self): self.repo() term = self.start() - term.wait("Where to install?") - term.send("\r") term.wait("> Install") term.send("o") term.wait("Preferred regions") @@ -12662,8 +12808,10 @@ class ChoiceStateInBothModes(unittest.TestCase): mock.patch.object(install, "detect_frontends", return_value=[]), \ mock.patch.object(install.Path, "home", return_value=home): state, _effects = install.tui_start(_args(), "linux") - text = self.screen(state) - # Named on the first screen, its plan one Enter away. + # Its plan first, the setups one Back away. + self.assertEqual(state.dest, card / "bios") + text = self.screen(listed(state)) + # Named on the setups, its plan one Enter away. self.assertIn(f"> ArkOS SD card ({name}", text) self.assertNotIn("Nothing was found here", text) install.tui_update(state, Key("enter")) @@ -12977,7 +13125,7 @@ class DriveIsACardByItsFiles(unittest.TestCase): mock.patch.object(install, "detect_frontends", return_value=[]), \ mock.patch.object(install.Path, "home", return_value=self.root / "home"): state, _effects = install.tui_start(_args(), "linux") - return state + return listed(state) def folder_screen(self, mounts: list) -> tuple[install.TuiState, str, list]: """RetroArch chosen on the first screen: (state, Which folder? at @@ -13176,8 +13324,6 @@ class TheSettleRunsFromTheFrameShown(unittest.TestCase): env = {**self.env, "SLOW": "0.5"} term = Pty([], env, 80, 24, program=[sys.executable, str(wrapper)]) self.addCleanup(lambda: term.status is None and os.kill(term.pid, 9)) - term.wait("Where to install?") - term.send("\r") term.wait("> Install") term.settle() term.send("o") @@ -14949,6 +15095,10 @@ SCREEN_WORDS = { "quit": (14, 14, 12, 12), "help": (24, 26, 26, 26), "plan-games": (36, 46, 54, 54), "games": (36, 45, 44, 44), "plan-details": (30, 30, 29, 29), "result-details": (30, 30, 19, 19), + # The plan's words, plus the recorded choice by name, its row (the one + # press back to the whole list) and Change where (back to the setups, + # the plan having opened on the one found). + "plan-record": (38, 42, 42, 42), } diff --git a/wiki/first-install.md b/wiki/first-install.md index 6b41c84a4..7093ed7ec 100644 --- a/wiki/first-install.md +++ b/wiki/first-install.md @@ -68,7 +68,8 @@ On Batocera, Recalbox and similar setups, see ## 2. Check the setup it found -It opens a menu: +With one setup found, it opens on step 3, its folder on the second line. +With none or several, it asks: ``` RetroBIOS: Where to install? @@ -80,8 +81,8 @@ It opens a menu: - **Right folder?** Press Enter. - **Wrong folder, or a handheld's SD card?** Choose - **Another setup or folder**. Press / and type the device (Miyoo Mini), - or browse. + **Another setup or folder** (**Change where** from step 3). + Press / and type the device (Miyoo Mini), or browse. Arrows move, Enter chooses, Esc goes back (A and B on a handheld). On a touch screen, tap a row twice to open it, once to tick a box. @@ -89,7 +90,7 @@ touch screen, tap a row twice to open it, once to tick a box. ## 3. Install Press Enter on **Install**. **Choose systems** picks the consoles to -keep. +keep. Run it again later: it keeps that choice, one press. **Game data** (only a game reads it) has its own row. diff --git a/wiki/installer.md b/wiki/installer.md index 0b42087a7..fd0269e33 100644 --- a/wiki/installer.md +++ b/wiki/installer.md @@ -169,8 +169,13 @@ Enter checks the BIOS folder when nothing can be copied. ## The full-screen interface { #the-full-screen-interface } Run at a terminal, the installer opens a full screen that a keyboard or a -controller drives. Three presses of A or Enter install everything the setup -reads: the setup found here, the plan, then the result. The plan screen says +controller drives. With one setup found here, it opens on that setup's plan, +and two presses of A or Enter install everything it reads: the plan, then the +result. **Change where** (or B) goes back to the setups, which open first when +none or several are found. After an install, the plan of the same folder opens +on the same choice (**Same choice as on 10 Nov: yes**, the +[install record](#the-install-record)), and **no** takes the whole list, or the +games of the card when it holds some. The plan screen says what it installs, its size and where, before anything is written. **Details** (`d`) adds the rest: how many files are in place, the free space, the files left out and why. @@ -371,6 +376,8 @@ file list is downloaded once and handed to each run. that archive in use and downloads its own copy. A file already there with other contents is moved aside first, see [Files already in the folder](#files-you-already-had). 8. Copies into standalone emulator directories, only with `--standalone-copies`. +9. Writes the [install record](#the-install-record): each file it placed, with + its SHA-1, and the choice it made. The file list names the version of the platform it was built for (Batocera 43.1, RetroBat 8.3.1). Where the system writes its own version in a file, the @@ -444,6 +451,50 @@ ones, grouped by system with the emulators that read them, and point at the emulator pages. They do not change the exit code of `--check`, since no run of the installer can fetch them. +## The install record { #the-install-record } + +An install that places files writes what it placed in a record beside the BIOS +folder: `retrobios-backup/.install.json`, in the same holder as +the [backups](#files-you-already-had). A folder with nothing writable beside it +(a drive's root) keeps it in `retrobios-backup` inside the folder. It is never +loose in the BIOS folder, which DuckStation, SwanStation and Rustation read +whole. On a card it travels with the card. + +The record is JSON, one entry per setup: + +```json +{"schema": 1, "installer": "48e57b2f26e2", + "folder": "/home/me/.config/retroarch/system", + "setups": {"retroarch": { + "written": "2026-11-10T09:48:36Z", + "list": {"version": "v1.22.2", "generated": "2026-11-10T01:52:59Z"}, + "choice": ["--system", "nintendo-gba"], + "files": [{"dest": "gba_bios.bin", "root": "", "sha1": "4176d5fc...", + "size": 16384, "from": "download"}]}}} +``` + +`files` holds each file this run and the earlier ones wrote, with the SHA-1 +checked before it was moved into place: `root` is empty for the BIOS folder, +`save` for the save directory and `data` for a data tree's member, and `from` +says `download`, `copy` (this machine, `--from`) or `pack`. A file that was +already in place is not added: the record names only what the installer wrote. +`choice` is the options of the run that decided what to install, `--all-files` +for the whole list. + +The next run for the same setup and folder takes that choice when nothing on +the command line chose: line mode installs the same systems +(`Installing 1 file (16.0 KB) for RetroArch, same choice as on 10 Nov.`), and +the full screen opens on it (**Same choice as on 10 Nov: yes**). Any option of +the choice (`--system`, `--core`, `--region`, `--for-games`, `--no-game-data`, +`--target`, `--every-board`, `--emulator`, `--installed-cores`, `--declared-only`) +replaces it, `--all-files` installs the whole list, and a run over several +setups or from a file list (`--manifest`) never reads it. `--check` and +`--dry-run` read it too, and say so. To forget it, delete the file. A record +that cannot be read, or that another version wrote, is said once and ignored, +and the next install writes a new one. A record kept for a folder of another +name (copied or renamed with it) is not applied. With `--events` the record +gives a `record` event, see [Machine-readable events](#machine-readable-events). + ## Reading a run { #reading-a-run } @@ -1885,11 +1936,12 @@ other schemas under `api/v1/schemas/`. | `downloaded` | `dest`, `ok`, `reason`, `size`, `files_done`, `files_total`, `bytes_done`, `bytes_total` | Each finished file, downloaded or copied from where a `found` event named it. `reason` says why one failed, and is empty otherwise | | `summary` | `mode`, `installed`, `up_to_date`, `pending`, `failed`, `skipped`, `left_out`, `kept`, `interrupted` | The outcome. `pending` counts what a next run would still fetch, `failed` lists `{dest, reason}`, `skipped` lists `{reason, label, files, required}` for the files the collection cannot supply, `left_out` lists `{category, label, files, dests}` for what `--no-game-data` left out, and is empty without it. `kept` lists `{folder, files, bytes}`, one per backup folder, for the files in place the run moved aside before replacing them (with `--dry-run`, would move), and is empty when none. Not written for a listing | | `app` | `system`, `folder`, `ok`, `reason`, `dests`, `written`, `kept` | After `summary`, with `--add-app` or a yes to its question: the RetroBIOS app on the card of `system` whose root is `folder`. `dests` lists the app's files below that root, `written` the ones this run wrote (empty when each was in place), `kept` the backup folders as in `summary`. `ok` is false, with `reason`, when the card takes no app (before anything is written, code 2), when the install did not finish, or when a file could not be fetched, verified or written (code 1) | +| `record` | `platform`, `folder`, `path`, `status`, `choice`, `date`, `files`, `message` | The [install record](#the-install-record) of `folder`, kept at `path`. `status` is `applied` before `choices` when the run took its choice, nothing on the command line having chosen, `written` before `summary` once an install placed files, `unreadable` when it cannot be read (said once, ignored), or `not_written` when it could not be saved, the install itself unharmed. `choice` is the recorded options as words, `date` when it was written (UTC), `files` how many files it holds for the platform | | `end` | `code` | Last line, with the exit status the process returns (see [Exit status](#exit-status)) | -Schema 1 can gain a kind (`found` came with `--from`, `declared` with `--declared-only`, `unsearched` with the search that goes on past a closed folder, `app` with `--add-app`, `data` with the size of the data trees, `version` with the list's version), never a key of an +Schema 1 can gain a kind (`found` came with `--from`, `declared` with `--declared-only`, `unsearched` with the search that goes on past a closed folder, `app` with `--add-app`, `data` with the size of the data trees, `version` with the list's version, `record` with the install record), never a key of an existing kind: a reader skips a kind it does not know. An option refused before the run starts (`install.py: error:`, code 2) writes no event at all. A program reads a missing `end` as that case, or as a From 5f3f4cff384f2c1add98c01e683545eaeff915ac Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 12:17:08 +0100 Subject: [PATCH 02/31] fix: check the install record before using it A record's choice holds only the options of the choice and their values, or the whole record is said once and ignored: it no longer reaches the commands printed for the user. A recorded games folder is kept only under the folder that holds the BIOS folder. A recorded option the list can no longer apply is left out in one line, never refused. The record is read only when it is a regular file of at most 16 MiB, its day is unknown when no clock can show it, one a newer installer wrote is left as it is, and a setup that cannot be used is dropped alone. The plan opened on the one setup found keeps that screen's notes under Details. --- install.ps1 | 2 +- install.py | 341 ++++++++++++++++++++++++++++----- install.sh | 2 +- install/launchers/index.json | 16 +- tests/test_install_journeys.py | 140 ++++++++++++++ tests/test_install_tui.py | 30 +++ wiki/installer.md | 22 ++- 7 files changed, 489 insertions(+), 64 deletions(-) diff --git a/install.ps1 b/install.ps1 index 561f5f9d0..07014e7cc 100644 --- a/install.ps1 +++ b/install.ps1 @@ -16,7 +16,7 @@ # and Invoke-WebRequest throws on a cut transfer before the hash is read: # the site's build rewrites this line there (scripts/sitebootstrap.py). $mismatchAdvice = "The download was most likely cut short: try again. Within minutes of an update of this project the two files can come from caches of different ages. Waiting five minutes settles that." - $defaultInstallSha256 = "70e71268db3c09fd3e3c9bd823bab905de73b01e95affcdae9db344a9f4087ca" + $defaultInstallSha256 = "37442a7c0d307b0b95a40d7630cf57025a6498fea6223076892371b2d6363147" # The pin above refuses any changed byte: this cap only stops a body that # cannot be the installer (a sign-in portal's page) before it is hashed. $maximumInstallerBytes = 8MB diff --git a/install.py b/install.py index 0b12df28a..0d0031846 100644 --- a/install.py +++ b/install.py @@ -6136,63 +6136,165 @@ def record_paths(folder: Path) -> list[Path]: return [holder / name for holder, _prefix in KeptFiles._holders(folder)] -def _valid_setup(setup: object) -> bool: +# Read whole, never past this: a record of every file of the longest list +# holds 1.6 MB per setup, and a few setups share one folder. +MAX_RECORD_BYTES = 16 * 1024 * 1024 +# The choice options that take a value. --for-games takes one or none. +_RECORD_VALUED = ("--system", "--core", "--emulator", "--region", "--target") + + +def games_folder_kept(value: str, folder: Path) -> bool: + """Whether a recorded --for-games folder may be read again: an absolute + path under the folder that holds the BIOS folder (a card's root, the + setup's own folder), never another drive or a network share.""" + if not value or value.startswith(("\\\\", "//")) or not os.path.isabs(value): + return False + parent = os.path.normcase(os.path.normpath(os.path.dirname(os.path.abspath(folder)))) + games = os.path.normcase(os.path.normpath(value)) + try: + return os.path.commonpath([parent, games]) == parent + except ValueError: + # Two drives on Windows: no common path. + return False + + +def valid_choice(choice: list[str], folder: Path) -> bool: + """Whether every word of a recorded choice is an option of the choice or + the value right after one: a record naming --dest, --from or --manifest + would put them in the commands printed for the user to copy.""" + words = list(choice) + while words: + flag = words.pop(0) + if flag not in RECORD_CHOICE: + return False + if flag in _RECORD_VALUED: + if not words or words[0].startswith("-") or not words[0].strip(): + return False + value = words.pop(0) + if any(ord(char) < 32 or ord(char) == 127 for char in value): + return False + elif flag == "--for-games" and words and not words[0].startswith("--"): + if not games_folder_kept(words.pop(0), folder): + return False + return True + + +def _valid_setup(setup: object, folder: Path) -> bool: if not isinstance(setup, dict): return False choice, files = setup.get("choice"), setup.get("files") return (isinstance(setup.get("written"), str) and isinstance(choice, list) - and all(isinstance(word, str) for word in choice) and isinstance(files, list) + and all(isinstance(word, str) for word in choice) and valid_choice(choice, folder) + and isinstance(files, list) and all(isinstance(item, dict) and isinstance(item.get("dest"), str) and isinstance(item.get("sha1"), str) and isinstance(item.get("size"), int) for item in files)) -def read_record(folder: Path) -> tuple[dict | None, Path | None, str]: - """(the record of folder, where it is, why it cannot be used). Neither a - record nor a reason where there is none.""" +class RecordRead(NamedTuple): + """What reading a record found: the record with its usable setups, where + it is, why it cannot be used, whether a newer installer wrote it, and + the setups it holds that cannot be used.""" + + data: dict | None + path: Path | None + problem: str + newer: bool = False + dropped: tuple = () + + +def _read_record_bytes(path: Path) -> bytes: + """The bytes of a record that is a regular file of a record's size. A + FIFO, a device or a folder is refused before it is read: reading one + waited forever.""" + info = os.stat(path) + if not stat.S_ISREG(info.st_mode): + raise OSError(errno.EINVAL, "it is not a file") + if info.st_size > MAX_RECORD_BYTES: + raise OSError(errno.EFBIG, "it is larger than any record") + flags = os.O_RDONLY | getattr(os, "O_NONBLOCK", 0) | getattr(os, "O_BINARY", 0) + handle = os.open(path, flags) + try: + # Opened without waiting, then checked again: what is open now is + # what is read, whatever took the name since the stat. + if not stat.S_ISREG(os.fstat(handle).st_mode): + raise OSError(errno.EINVAL, "it is not a file") + chunks, left = [], MAX_RECORD_BYTES + 1 + while left > 0: + chunk = os.read(handle, min(left, 1 << 20)) + if not chunk: + break + chunks.append(chunk) + left -= len(chunk) + finally: + os.close(handle) + data = b"".join(chunks) + if len(data) > MAX_RECORD_BYTES: + raise OSError(errno.EFBIG, "it is larger than any record") + return data + + +def load_record(folder: Path) -> RecordRead: + """The record of folder, read once (RecordRead).""" for path in record_paths(folder): try: - text = path.read_text(encoding="utf-8") + text = _read_record_bytes(path).decode("utf-8") except (FileNotFoundError, NotADirectoryError): continue except (OSError, UnicodeDecodeError) as exc: reason = getattr(exc, "strerror", None) or str(exc) - return None, path, f"The install record {path} cannot be read ({reason})" + return RecordRead(None, path, f"The install record {path} cannot be read ({reason})") try: data = json.loads(text) except ValueError: - return None, path, f"The install record {path} is damaged" - if not isinstance(data, dict) or not isinstance(data.get("setups"), dict): - return None, path, f"The install record {path} is damaged" - if data.get("schema") != RECORD_SCHEMA: - return None, path, (f"The install record {path} was written by another " - "version of the installer") - if not all(_valid_setup(setup) for setup in data["setups"].values()): - return None, path, f"The install record {path} is damaged" - return data, path, "" - return None, None, "" + return RecordRead(None, path, f"The install record {path} is damaged") + schema = data.get("schema") if isinstance(data, dict) else None + if isinstance(schema, int) and not isinstance(schema, bool) and schema > RECORD_SCHEMA: + # Its shape is the newer installer's: kept for it, never read. + return RecordRead(None, path, f"The install record {path} was written by a newer " + "installer", newer=True) + if (not isinstance(data, dict) or not isinstance(data.get("setups"), dict) + or not isinstance(data.get("folder"), str) or schema != RECORD_SCHEMA): + return RecordRead(None, path, f"The install record {path} is damaged") + setups = {name: setup for name, setup in data["setups"].items() + if _valid_setup(setup, folder)} + dropped = tuple(sorted(str(name) for name in data["setups"] if name not in setups)) + return RecordRead({**data, "setups": setups}, path, "", dropped=dropped) + return RecordRead(None, None, "") + + +def read_record(folder: Path) -> tuple[dict | None, Path | None, str]: + """(the record of folder, where it is, why it cannot be used). Neither a + record nor a reason where there is none.""" + found = load_record(folder) + return found.data, found.path, found.problem def setup_record(plat: str, folder: Path) -> tuple[dict | None, Path | None, str]: """The record of plat in folder, where it is, and why it cannot be used. A record written for a folder of another name (copied, or renamed with - it) is not this folder's.""" - data, path, problem = read_record(folder) - if data is None: - return None, path, problem - written_for = str(data.get("folder") or "") + it) is not this folder's. A setup of it that cannot be used (an option + the choice has no place for, a games folder elsewhere) is damaged, the + others still read.""" + found = load_record(folder) + if found.data is None: + return None, found.path, found.problem + written_for = str(found.data.get("folder") or "") if Path(written_for).name != Path(os.path.abspath(folder)).name: - return None, path, "" - return data["setups"].get(plat), path, "" + return None, found.path, "" + if plat in found.dropped: + return None, found.path, f"The install record {found.path} is damaged" + return found.data["setups"].get(plat), found.path, "" def record_day(setup: dict) -> str: """The day a record was written, as the plan says it: 3 Nov.""" try: when = datetime.datetime.fromisoformat(setup["written"].replace("Z", "+00:00")) - except (KeyError, ValueError): + # Year 1 or 9999 cannot be moved to local time: an unknown day. + local = when.astimezone() + except (KeyError, TypeError, AttributeError, ValueError, OverflowError, OSError): return "" - local = when.astimezone() day = f"{local.day} {_MONTHS[local.month - 1]}" return day if local.year == datetime.datetime.now().year else f"{day} {local.year}" @@ -6265,9 +6367,18 @@ def write_record( earlier runs placed: (where, the record of plat, why it was not written). A record that cannot be read is replaced.""" folder = Path(os.path.abspath(folder)) - data, found, _problem = read_record(folder) - if data is None: - data = {"setups": {}} + read = load_record(folder) + if read.newer: + # What a newer installer wrote is kept for it: rewritten here, the + # other setups' history would go. + if str(read.path) not in _RECORD_SAID: + _RECORD_SAID.add(str(read.path)) + print(f" {read.problem}: left as it is.") + return None, {"files": [], "written": ""}, f"{read.problem}: left as it is" + found = read.path + # A record that cannot be read is replaced, said when it was read. One + # with a setup that cannot be used keeps its others. + data = read.data if read.data is not None else {"setups": {}} previous = data["setups"].get(plat) or {} merged = {(str(item.get("root") or ""), item["dest"]): item for item in previous.get("files") or []} @@ -6339,6 +6450,29 @@ def say_record_problem(plat: str, folder: Path, path: Path | None, problem: str) choice=[], date="", files=0, message=message) +def by_record(args: argparse.Namespace) -> bool: + """Whether the run's choice came from the install record: nothing of + it was typed, so a part that cannot apply is left out, never refused.""" + return bool(getattr(args, "from_record", False)) + + +def drop_recorded(args: argparse.Namespace, plat: str, flag: str, why: str, + keep: list[str] | None = None) -> None: + """Leave out a recorded option that cannot apply, in one line: the run + goes on, and the record written after it no longer holds it. keep, for + an option of several names, is the names that still apply.""" + name = flag[2:].replace("-", "_") + chosen = _INVOCATION.chosen.get(plat, []) + if keep: + setattr(args, name, list(keep)) + _INVOCATION.chosen[plat] = [option for option in chosen if option[0] != flag] + [ + (flag, value) for value in keep] + else: + setattr(args, name, build_parser().get_default(name)) + _INVOCATION.chosen[plat] = [option for option in chosen if option[0] != flag] + print(f" Left out of the recorded choice: {flag} ({why}).") + + def apply_record(args: argparse.Namespace, plat: str, folder: Path) -> dict | None: """Take the choice recorded for plat in folder as the run's, as if its options had been typed: the plan's first choice. Returns the record, @@ -6365,6 +6499,12 @@ def apply_record(args: argparse.Namespace, plat: str, folder: Path) -> dict | No # a person expects, and said nothing new. _RECORD_TAKEN[plat] = setup _INVOCATION.chosen[plat] = [option for option in options if option[0] != "--all-files"] + if isinstance(args.for_games, Path) and not _is_dir(args.for_games): + # The games folder recorded is gone: the card's own games are read. + _INVOCATION.chosen[plat] = [(flag, None if flag == "--for-games" else value) + for flag, value in _INVOCATION.chosen[plat]] + args.for_games = True + print(" Left out of the recorded choice: its games folder (no longer there).") message = record_menu_words(setup) EVENTS.emit("record", platform=plat, folder=str(folder), path=str(path), status="applied", choice=list(setup["choice"]), date=setup["written"], @@ -10502,12 +10642,47 @@ def _known_names(values: list[str] | None, known: list[str], label: str, try: resolve_choices([value], known, label, aliases) except ValueError: - detail(f" {value} is no longer on the list: left out of the recorded choice") continue kept.append(value) return kept +def _recorded_names(args: argparse.Namespace, plat: str, flag: str, known: list[str], + aliases: dict[str, str] | None = None) -> None: + """A recorded --system, --core or --emulator kept to the names the list + still holds, the others left out in one line.""" + name = flag[2:].replace("-", "_") + values = list(getattr(args, name) or []) + kept = _known_names(values, known, flag[2:], aliases) + if kept != values: + gone = ", ".join(value for value in values if value not in kept) + drop_recorded(args, plat, flag, f"{gone} no longer on the list", kept) + + +def _recorded_emulators(args: argparse.Namespace, plat: str, manifest: dict, + files: list[dict], omitted: list[dict]) -> None: + """A recorded --emulator that cannot narrow this list, left out.""" + if "system_cores" not in manifest: + drop_recorded(args, plat, "--emulator", "the list does not say which emulators " + "read which systems") + return + _recorded_names(args, plat, "--emulator", sorted(emulator_names(manifest, files, omitted))) + + +def _recorded_regions(args: argparse.Namespace, plat: str) -> None: + """A recorded --region kept to the regions this installer knows.""" + values = list(args.region or []) + kept = [] + for value in values: + try: + resolve_regions([value]) + except ValueError: + continue + kept.append(value) + if kept != values: + drop_recorded(args, plat, "--region", "a region this installer does not know", kept) + + def _requested_narrowing( args: argparse.Namespace, plat: str, files: list[dict], omitted: list[dict], manifest: dict | None = None, @@ -10524,6 +10699,22 @@ def _requested_narrowing( asked = [(flag, axis) for flag, given, axis in ( ("--system", args.system, "systems"), ("--core", args.core, "cores"), ("--region", args.region, "regions")) if given] + if getattr(args, "from_record", False): + # A recorded option that cannot narrow this list is left out: nobody + # typed it, and every run without options would stop on it. + for flag, axis in asked: + if axis not in recorded: + drop_recorded(args, plat, flag, f"the list records no {axis}") + asked = [(flag, axis) for flag, axis in asked if axis in recorded] + _recorded_regions(args, plat) + choices = available_choices(files, omitted) + if args.system: + _recorded_names(args, plat, "--system", choices["systems"], + system_aliases(manifest)) + if args.core: + _recorded_names(args, plat, "--core", choices["cores"]) + if not (args.system or args.core or args.region): + return None for flag, axis in asked: if axis in recorded: continue @@ -10536,14 +10727,6 @@ def _requested_narrowing( print(_narrowing_advice(plat, axis, flag, recorded, pack_alone), file=sys.stderr) sys.exit(1) choices = available_choices(files, omitted) - if getattr(args, "from_record", False): - # A name the list no longer holds is dropped from a recorded choice, - # never refused: nobody typed it. - args.system = _known_names(args.system, choices["systems"], "system", - system_aliases(manifest)) or None - args.core = _known_names(args.core, choices["cores"], "core") or None - if not (args.system or args.core or args.region): - return None try: systems = resolve_choices( args.system or [], choices["systems"], "system", system_aliases(manifest), @@ -14577,6 +14760,8 @@ def main() -> None: # the menu. Yes to every question is no question. args.no_input = True _INVOCATION.record(args) + if os.environ.get(TUI_RECORD_ENV): + args.from_record = True if os.environ.get(TUI_LIST_ENV): # The full screen's own copy of the list, deleted when it closes: a # command naming it fails once the screen is gone. @@ -16424,7 +16609,12 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: if not written and setup_record(plat, folder)[0] is None: # Nothing of ours is there to record, and no choice to keep. return - options = _INVOCATION.flags(plat) + # A games folder is kept only where the next run reads it from a + # record (games_folder_kept): elsewhere the card's own games are. + options = [(flag, value if flag != "--for-games" or not value + else os.path.abspath(value) + if games_folder_kept(os.path.abspath(value), folder) else None) + for flag, value in _INVOCATION.flags(plat)] if games: options += [("--for-games", None), *([("--required-only", None)] if args.required_only else [])] @@ -16441,16 +16631,23 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: f"Recorded {_plural(count, 'file')} and this choice in {path}.") if len(platforms) == 1 and not listing and not choice_given(args): - if apply_record(args, *platforms[0]) is not None and args.target: - known = fetch_targets(platforms[0][0]) - if known is not None and args.target not in known: - # A board the list no longer names: every board's files. - args.target = None + apply_record(args, *platforms[0]) # --target is checked for every platform before anything is written, as # --installed-cores is below: EmuDeck installed 3.2 GB and only then was # steamos refused for RetroArch, with no summary of what had landed. target_lists: dict[str, dict] = {} + if args.target and by_record(args) and len(platforms) == 1: + # The screen's runs carry the record's options as typed ones. + plat = platforms[0][0] + if LOCAL.offline and local_targets(plat) is None and plat in TARGET_PLATFORMS: + drop_recorded(args, plat, "--target", "the board list needs the internet") + else: + with contextlib.redirect_stderr(io.StringIO()): + known = fetch_targets(plat) + if known is None or args.target not in known: + drop_recorded(args, plat, "--target", "the board list does not name it" + if known is not None else "the board list could not be read") if args.target: for plat_name, _bios_path in platforms: targets = fetch_targets(plat_name) @@ -16485,6 +16682,9 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: searched = [args.cores_dir] if args.cores_dir else core_dirs(plat_name, bios_path) cores_found[(plat_name, bios_path)] = installed_cores(searched) cores_searched[(plat_name, bios_path)] = searched + elif args.installed_cores and by_record(args): + drop_recorded(args, plat_name, "--installed-cores", + f"{plat_name} ships its cores with the system") elif args.installed_cores: print( f"Error: {plat_name} ships its cores with the system. " @@ -16493,7 +16693,10 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: ) sys.exit(1) if args.installed_cores and not cores_found[(plat_name, bios_path)]: - _no_core_found(plat_name, bios_path, searched) + if by_record(args): + drop_recorded(args, plat_name, "--installed-cores", "no core is installed") + else: + _no_core_found(plat_name, bios_path, searched) for plat_name, bios_path in platforms: if bios_path not in installed_paths: @@ -16536,6 +16739,8 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: ) game_data_cut = 0 + if args.no_game_data and not manifest.get("categorized") and by_record(args): + drop_recorded(args, plat_name, "--no-game-data", "the list marks no game data") if args.no_game_data and not manifest.get("categorized"): # Without the field nothing is marked, and the run would # install the game data it was asked to leave out. @@ -16619,6 +16824,9 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: found_cores = [] elif found_cores: detail(f" {_plural(len(found_cores), 'core')} installed") + if args.installed_cores and "system_cores" not in manifest and by_record(args): + drop_recorded(args, plat_name, "--installed-cores", + "the list does not say which cores read which systems") if args.installed_cores: if "system_cores" not in manifest: print( @@ -16644,6 +16852,8 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: else (files, omitted_files))) continue + if args.emulator and by_record(args): + _recorded_emulators(args, plat_name, manifest, files, omitted_files) if args.emulator: files, omitted_files = _narrow_to_emulators( args.emulator, manifest, plat_name, files, omitted_files @@ -16756,7 +16966,7 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: return _INVOCATION.command(plat, folder) # The record's options, which the menu's commands overwrite. - recorded = _INVOCATION.chosen.get(plat_name) + record_options_kept = _INVOCATION.chosen.get(plat_name) selection = _prompt_custom_selection( plat_name, bare, bare_omitted + unplaced, installed, detected_os(plat_name, bios_path) or display, @@ -16808,9 +17018,9 @@ def _install(args: argparse.Namespace, real_stdout: TextIO) -> None: _INVOCATION.chosen[plat_name] = [] else: _INVOCATION.chosen.pop(plat_name, None) - if kept_record and recorded is not None: + if kept_record and record_options_kept is not None: # Enter on the recorded choice: still the record's options. - _INVOCATION.chosen[plat_name] = recorded + _INVOCATION.chosen[plat_name] = record_options_kept elif selection is None and plat_name in _RECORD_TAKEN and not games_applied: # e: every file, the recorded narrowing given up. args.system = args.core = args.region = None @@ -17465,6 +17675,10 @@ TUI_ESC_WAIT = 0.04 TUI_FRAME = 0.1 # Set for a child run handed the interface's own copy of the file list. TUI_LIST_ENV = "RETROBIOS_TUI_LIST" +# Set for a child run whose choice options are the install record's, kept +# on the screen: a part of them that cannot apply is left out, as line mode +# leaves it out of a record it reads, never refused. +TUI_RECORD_ENV = "RETROBIOS_TUI_RECORDED" _PASTE_START = "\x1b[200~" _PASTE_END = "\x1b[201~" # Turned on by the interface, so a pasted path arrives as one piece and its @@ -18900,6 +19114,19 @@ def tui_argv(state: TuiState, run: str, python: str, script: str) -> list[str]: return argv + _TUI_MODES[run] +def tui_run_env(state: TuiState, own_list: bool) -> dict | None: + """The environment of a child run: None for this one's own, else with + the markers the run reads (TUI_LIST_ENV, TUI_RECORD_ENV).""" + marks = {TUI_LIST_ENV: "1"} if own_list else {} + if tui_record_kept(state): + marks[TUI_RECORD_ENV] = "1" + if not marks and TUI_RECORD_ENV not in os.environ: + return None + env = {key: value for key, value in os.environ.items() if key != TUI_RECORD_ENV} + env.update(marks) + return env + + def tui_hint(state: TuiState) -> Invocation: """The command the screen's choices make, every option of the run in it: what "Same choice without questions" and the sudo advice give.""" @@ -22675,6 +22902,8 @@ def _plan_lines(check: dict, dest: Path | None, state: TuiState) -> list: if check is state.check: lines += _unplaced_lines(_choice_summary(state), state, "Choose it in Options, Save folder (--save-dir).") + if check is state.check: + lines += _found_lines(state) if check is state.check and state.from_folders: # A folder copied from that holds none of them: the plan came back # the same, still saying to copy from a folder. @@ -23722,6 +23951,20 @@ def _unavailable(state: TuiState) -> tuple[list[dict], int]: return needed, others +def _found_lines(state: TuiState) -> list[TuiLine]: + """What the setups screen said of this machine, on a plan that opened + in its place: the setup found by its label, and the notes (ES-DE found, + what detection printed) on Details, one line on the plan saying so.""" + if not state.opened_on_plan or not state.setups: + return [] + lines = _details([f"Found here: {state.setups[0][2]}.", *state.notes]) + if state.notes: + brief = _styled(f"{_plural(len(state.notes), 'note')} on this machine: Details.") + brief.brief = True + lines.insert(0, brief) + return lines + + def _unavailable_brief(state: TuiState) -> list[TuiLine]: """The count of the files an emulator needs that cannot be supplied, on the screen itself: their names are on Details, and in place with @@ -25303,7 +25546,7 @@ def run_tui(args: argparse.Namespace) -> int: try: current.append(_EngineRun( tui_argv(state, effect[1], sys.executable, script), log, inbox, - state.run_id, {**os.environ, TUI_LIST_ENV: "1"} if own_list else None)) + state.run_id, tui_run_env(state, own_list))) except OSError as exc: inbox.put(("ended", state.run_id, 1, [f"The installer could not be started: {exc}"])) diff --git a/install.sh b/install.sh index c206e9c2a..461ba515b 100755 --- a/install.sh +++ b/install.sh @@ -23,7 +23,7 @@ DEFAULT_INSTALL_URL="https://raw.githubusercontent.com/Abdess/retrobios/main/ins # curl or wget stop on a cut transfer before the hash is read: the site's # build rewrites this line there (scripts/sitebootstrap.py). MISMATCH_ADVICE="The download was most likely cut short: try again. Within minutes of an update of this project the two files can come from caches of different ages. Waiting five minutes settles that." -DEFAULT_INSTALL_SHA256="70e71268db3c09fd3e3c9bd823bab905de73b01e95affcdae9db344a9f4087ca" +DEFAULT_INSTALL_SHA256="37442a7c0d307b0b95a40d7630cf57025a6498fea6223076892371b2d6363147" # The pin above refuses any changed byte: this cap only stops a body that # cannot be the installer (a sign-in portal's page) before it is hashed. MAX_INSTALLER_BYTES=8388608 diff --git a/install/launchers/index.json b/install/launchers/index.json index 30a747d52..e6f2a2d46 100644 --- a/install/launchers/index.json +++ b/install/launchers/index.json @@ -27,8 +27,8 @@ { "dest": "roms/ports/retrobios/install.py", "repo_path": "install.py", - "size": 1189759, - "sha256": "70e71268db3c09fd3e3c9bd823bab905de73b01e95affcdae9db344a9f4087ca", + "size": 1201450, + "sha256": "37442a7c0d307b0b95a40d7630cf57025a6498fea6223076892371b2d6363147", "executable": false }, { @@ -71,8 +71,8 @@ "muos": { "archive": { "dest": "ARCHIVE/RetroBIOS.muxapp", - "size": 1243384, - "sha256": "ae0d36d5f2dda70c39bfe8be474108b92f0a5a80457bc8c07d36736b09b0310d" + "size": 1255075, + "sha256": "23393eb6b88f7a7875bd034e79c02d81e80409c9403290bb96a75166bf7a60b6" }, "members": [ { @@ -92,8 +92,8 @@ { "name": "RetroBIOS/install.py", "repo_path": "install.py", - "size": 1189759, - "sha256": "70e71268db3c09fd3e3c9bd823bab905de73b01e95affcdae9db344a9f4087ca", + "size": 1201450, + "sha256": "37442a7c0d307b0b95a40d7630cf57025a6498fea6223076892371b2d6363147", "executable": false }, { @@ -166,8 +166,8 @@ { "dest": ".config/modules/retrobios/install.py", "repo_path": "install.py", - "size": 1189759, - "sha256": "70e71268db3c09fd3e3c9bd823bab905de73b01e95affcdae9db344a9f4087ca", + "size": 1201450, + "sha256": "37442a7c0d307b0b95a40d7630cf57025a6498fea6223076892371b2d6363147", "executable": false }, { diff --git a/tests/test_install_journeys.py b/tests/test_install_journeys.py index e98a2fc58..5d95df491 100644 --- a/tests/test_install_journeys.py +++ b/tests/test_install_journeys.py @@ -25,6 +25,7 @@ import subprocess import sys import tempfile import threading +import time import unittest from pathlib import Path @@ -619,5 +620,144 @@ class InstallRecord(unittest.TestCase): events(screen, "check")[0]["bytes_needed"]) +def record_text(folder: Path, choice: list[str], **setups: object) -> str: + """A record of folder whose retroarch setup chose choice.""" + setup = {"written": "2026-11-03T12:00:00Z", "list": {}, "choice": choice, + "files": [{"dest": "gba_bios.bin", "root": "", "sha1": "0" * 40, "size": 1, + "from": "download"}]} + return json.dumps({"schema": install.RECORD_SCHEMA, "installer": "x", "folder": str(folder), + "setups": {"retroarch": setup, **setups}}) + + +class RecordReview(unittest.TestCase): + """A record is data another program or a person may have written: what + it holds is checked before any of it is used or printed.""" + + setUp = InstallRecord.setUp + run_line = InstallRecord.run_line + dests = InstallRecord.dests + everything = InstallRecord.everything + + def write(self, choice: list[str], **setups: object) -> None: + self.dest.mkdir(parents=True, exist_ok=True) + self.record.parent.mkdir(exist_ok=True) + self.record.write_text(record_text(self.dest, choice, **setups), encoding="utf-8") + + def test_a_word_outside_the_choice_rejects_the_whole_record(self): + for choice in (["--system", "nintendo-gba", "--from", "/mnt/x"], + ["--manifest", "http://example.invalid/list.json"], + ["--system", "nintendo-gba", "--dest", "/etc"], + ["--system", "--yes"], ["--system", "a\nb"], ["nintendo-gba"]): + with self.subTest(choice=choice): + self.write(choice) + proc = self.run_line("--check", "--events") + said = events(proc, "record") + self.assertEqual([event["status"] for event in said], ["unreadable"], said) + self.assertEqual(self.dests(proc), self.everything()) + text = proc.stdout + proc.stderr + for word in ("/mnt/x", "example.invalid", "/etc"): + self.assertNotIn(word, text) + # The screen reads it through the same function. + state = install.TuiState() + state.platform, state.dest = "retroarch", self.dest + install._tui_record_load(state) + self.assertIsNone(state.record) + self.assertEqual(install.tui_flags(state), []) + + def test_a_recorded_games_folder_stays_beside_the_bios_folder(self): + parent = self.dest.parent + self.assertTrue(install.games_folder_kept(str(parent / "roms"), self.dest)) + self.assertTrue(install.games_folder_kept(str(parent), self.dest)) + for value in ("/etc", str(parent.parent / "other"), "roms", "\\\\server\\share", + "//server/share", ""): + with self.subTest(value=value): + self.assertFalse(install.games_folder_kept(value, self.dest)) + self.write(["--for-games", "/etc"]) + proc = self.run_line("--check", "--events") + self.assertEqual(events(proc, "record")[0]["status"], "unreadable") + self.assertEqual(self.dests(proc), self.everything()) + + def test_a_recorded_option_that_cannot_apply_is_left_out(self): + """A run nobody typed options for went on failing: the list has no + cores, no categories and no board list, and a region is unknown.""" + for choice, typed in ((["--system", "nintendo-gba", "--region", "atlantis"], + ["--region", "atlantis"]), + (["--system", "nintendo-gba", "--emulator", "nosuch"], + ["--emulator", "nosuch"]), + (["--system", "nintendo-gba", "--installed-cores"], + ["--installed-cores"]), + (["--system", "nintendo-gba", "--target", "nosuch"], + ["--target", "nosuch"]), + (["--system", "nintendo-gba", "--no-game-data"], + ["--no-game-data"])): + with self.subTest(choice=choice): + self.write(choice) + proc = self.run_line("--yes", "--events") + self.assertEqual(proc.returncode, 0, proc.stdout + proc.stderr) + self.assertEqual(proc.stderr.count("Left out of the recorded choice"), 1, + proc.stderr) + self.assertEqual(self.dests(proc), ["gba_bios.bin"]) + # Written again without it: the next run says nothing. + kept = json.loads(self.record.read_text())["setups"]["retroarch"]["choice"] + self.assertEqual(kept, ["--system", "nintendo-gba"]) + # Typed, it is refused as before. + self.assertNotEqual(self.run_line(*typed, "--check").returncode, 0) + + def test_a_date_no_clock_can_show_is_an_unknown_day(self): + if not hasattr(time, "tzset"): + self.skipTest("no tzset") + zone = os.environ.get("TZ") + + def back() -> None: + if zone is None: + os.environ.pop("TZ", None) + else: + os.environ["TZ"] = zone + time.tzset() + + self.addCleanup(back) + for tz, written in (("UTC+5", "0001-01-01T00:00:00Z"), + ("UTC-5", "9999-12-31T23:59:59Z")): + with self.subTest(written=written): + os.environ["TZ"] = tz + time.tzset() + self.assertEqual(install.record_day({"written": written}), "") + + def test_a_record_that_is_no_file_is_never_read(self): + self.dest.mkdir(parents=True) + self.record.parent.mkdir() + os.mkfifo(self.record) + proc = self.run_line("--check", "--events") + self.assertIn("it is not a file", events(proc, "record")[0]["message"]) + self.assertEqual(self.dests(proc), self.everything()) + self.record.unlink() + with open(self.record, "wb") as handle: + handle.truncate(install.MAX_RECORD_BYTES + 1) + self.assertIn("larger than any record", install.load_record(self.dest).problem) + + def test_a_newer_record_is_left_as_it_is(self): + self.dest.mkdir(parents=True) + self.record.parent.mkdir() + newer = json.dumps({"schema": install.RECORD_SCHEMA + 1, "setups": {"x": {}}}) + self.record.write_text(newer, encoding="utf-8") + proc = self.run_line("--yes", "--events") + self.assertEqual(proc.returncode, 0, proc.stderr) + self.assertEqual([event["status"] for event in events(proc, "record")], + ["unreadable", "not_written"]) + self.assertEqual(self.record.read_text(encoding="utf-8"), newer) + self.assertEqual(proc.stderr.count("written by a newer installer"), 1) + + def test_a_bad_setup_is_dropped_and_the_others_kept(self): + good = {"written": "2026-11-03T12:00:00Z", "list": {}, "choice": ["--all-files"], + "files": []} + self.write(["--system", "nintendo-gba"], lakka=good, batocera={"choice": 3}) + path, _setup, problem = install.write_record(self.dest, "retropie", {}, ["--all-files"], + []) + self.assertEqual((path, problem), (self.record, "")) + kept = json.loads(self.record.read_text())["setups"] + self.assertEqual(sorted(kept), ["lakka", "retroarch", "retropie"]) + self.assertEqual(kept["retroarch"]["choice"], ["--system", "nintendo-gba"]) + + if __name__ == "__main__": unittest.main() diff --git a/tests/test_install_tui.py b/tests/test_install_tui.py index cabc3dc56..e8e69cf95 100644 --- a/tests/test_install_tui.py +++ b/tests/test_install_tui.py @@ -1148,6 +1148,36 @@ class RecordedPlan(unittest.TestCase): press(state, "enter") self.assertEqual(state.screen, "setup") + def test_the_notes_of_the_setups_screen_are_on_the_plan(self): + """Opened on the plan, the ES-DE note and the setup's label, which + only the setups screen showed, were never seen.""" + setups = fresh_state().setups[:1] + with mock.patch.object(install, "found_setups", return_value=(setups, set())), \ + mock.patch.object(install, "detect_frontends", return_value=["esde"]), \ + mock.patch.object(install, "_mounted_cards", return_value=[]), \ + mock.patch.object(install, "_DETECTION_REFUSED", []), \ + mock.patch.object(install.Path, "exists", return_value=True): + state, _effects = install.tui_start(_args(), "linux") + self.assertTrue(state.opened_on_plan) + install.tui_receive(state, ("manifest", "retroarch", MANIFEST)) + for event in [*FILES, *SYSTEMS, CHECK]: + install.tui_receive(state, ("event", state.run_id, event)) + with mock.patch.object(install, "_tui_folder_facts", return_value={ + "free": 50 * 1024 ** 3, "writable": True}): + install.tui_receive(state, ("ended", state.run_id, 1, [])) + state.pad = "both" + plan = screen_text(install.tui_view(state, 80, 24)) + self.assertIn("1 note on this machine: Details.", plan) + self.assertNotIn(install.TUI_ESDE_NOTE, plan) + # The plan's budget, plus the note line (6 words) and Change where (2). + self.assertLessEqual(screen_words(install.tui_view(state, 80, 24)), + SCREEN_WORDS["plan"][2] + 8) + state.focus["plan"] = [row.action for row in install.tui_rows(state)].index("details") + press(state, "enter") + details = screen_text(install.tui_view(state, 120, 40)) + self.assertIn(screen_text([install.TUI_ESDE_NOTE]), details) + self.assertIn("Found here: RetroArch.", details) + def test_several_setups_open_the_list(self): with mock.patch.object(install, "found_setups", return_value=( fresh_state().setups, set())), \ diff --git a/wiki/installer.md b/wiki/installer.md index fd0269e33..6d348f2aa 100644 --- a/wiki/installer.md +++ b/wiki/installer.md @@ -172,7 +172,8 @@ Run at a terminal, the installer opens a full screen that a keyboard or a controller drives. With one setup found here, it opens on that setup's plan, and two presses of A or Enter install everything it reads: the plan, then the result. **Change where** (or B) goes back to the setups, which open first when -none or several are found. After an install, the plan of the same folder opens +none or several are found. What that screen would have noted (ES-DE found, the +setup's name) is under **Details**, one plan line saying so. After an install, the plan of the same folder opens on the same choice (**Same choice as on 10 Nov: yes**, the [install record](#the-install-record)), and **no** takes the whole list, or the games of the card when it holds some. The plan screen says @@ -489,10 +490,21 @@ the choice (`--system`, `--core`, `--region`, `--for-games`, `--no-game-data`, `--target`, `--every-board`, `--emulator`, `--installed-cores`, `--declared-only`) replaces it, `--all-files` installs the whole list, and a run over several setups or from a file list (`--manifest`) never reads it. `--check` and -`--dry-run` read it too, and say so. To forget it, delete the file. A record -that cannot be read, or that another version wrote, is said once and ignored, -and the next install writes a new one. A record kept for a folder of another -name (copied or renamed with it) is not applied. With `--events` the record +`--dry-run` read it too, and say so. To forget it, delete the file. + +A record is read only when it is a regular file of at most 16 MiB whose +choice holds nothing but the options above and their values. A games folder +(`--for-games FOLDER`) is kept only under the folder that holds the BIOS +folder, so a record never sends the games scan to another drive or a network +share: any other folder is recorded as `--for-games` alone, the card's own +games. A record that breaks any of this, or cannot be read, is said once and +ignored, and the next install writes a new one, keeping the other setups' +entries that read. One written by a newer installer is left as it is. A +recorded option the list can no longer apply (a region, an emulator, a board, +the installed cores, game data on a list that marks none) is left out in one +line, `Left out of the recorded choice: --target (...)`, and the run goes on: +typed on the command line, the same option is refused as before. A record kept +for a folder of another name (copied or renamed with it) is not applied. With `--events` the record gives a `record` event, see [Machine-readable events](#machine-readable-events). ## Reading a run { #reading-a-run } From 9f674dd849a3abc0cc2cd637f16cce7b63b3864e Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:20:42 +0100 Subject: [PATCH 03/31] docs: cite the IWADINFO reader in Doom profiles Each IWAD entry named only its iwadinfo.txt lines. It now also cites the add_pk3 rule that packs the file into game_support.pk3, the FIWadManager constructor that reads the IWADINFO lump, the Names parser and the directory scan. Load files cite the Load parser and the loader beside the IWAD, and square.pk3 the -iwad branch. --- emulators/gzdoom.yml | 78 ++++++++++++++++++++++---------------------- emulators/lzdoom.yml | 74 ++++++++++++++++++++--------------------- emulators/uzdoom.yml | 78 ++++++++++++++++++++++---------------------- 3 files changed, 115 insertions(+), 115 deletions(-) diff --git a/emulators/gzdoom.yml b/emulators/gzdoom.yml index 212441074..ee25a5c18 100644 --- a/emulators/gzdoom.yml +++ b/emulators/gzdoom.yml @@ -156,7 +156,7 @@ files: # ================================================================ # IWADs (user-supplied). At least one is needed to launch a game. - # All source refs point to wadsrc_extra/static/iwadinfo.txt entries. + # Each ref gives the iwadinfo.txt entry, then the code that reads it. # ================================================================ # ---- Doom ---- @@ -166,7 +166,7 @@ files: system: doom path: "doom.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:420, 437, 659" + source_ref: "wadsrc_extra/static/iwadinfo.txt:420, 437, 659, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" note: "The Ultimate DOOM and DOOM Registered both use this name and are told apart by their lumps." - name: "doom2.wad" @@ -174,119 +174,119 @@ files: system: doom path: "doom2.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:640, 653" + source_ref: "wadsrc_extra/static/iwadinfo.txt:640, 653, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "doom2f.wad" category: game_data system: doom path: "doom2f.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:625, 657" + source_ref: "wadsrc_extra/static/iwadinfo.txt:625, 657, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "doombfg.wad" category: game_data system: doom path: "doombfg.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:332, 666" + source_ref: "wadsrc_extra/static/iwadinfo.txt:332, 666, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "doom2bfg.wad" category: game_data system: doom path: "doom2bfg.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:560, 667" + source_ref: "wadsrc_extra/static/iwadinfo.txt:560, 667, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "doomunity.wad" category: game_data system: doom path: "doomunity.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:369, 661" + source_ref: "wadsrc_extra/static/iwadinfo.txt:369, 661, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "doom2unity.wad" category: game_data system: doom path: "doom2unity.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:592, 655" + source_ref: "wadsrc_extra/static/iwadinfo.txt:592, 655, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "doomkex.wad" category: game_data system: doom path: "doomkex.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:350, 662" + source_ref: "wadsrc_extra/static/iwadinfo.txt:350, 662, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "doom2kex.wad" category: game_data system: doom path: "doom2kex.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:576, 656" + source_ref: "wadsrc_extra/static/iwadinfo.txt:576, 656, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "doomxbox.wad" category: game_data system: doom path: "doomxbox.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:403, 660" + source_ref: "wadsrc_extra/static/iwadinfo.txt:403, 660, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "doom2xbox.wad" category: game_data system: doom path: "doom2xbox.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:608, 654" + source_ref: "wadsrc_extra/static/iwadinfo.txt:608, 654, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "doom_complete.pk3" category: game_data system: doom path: "doom_complete.pk3" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:389, 652" + source_ref: "wadsrc_extra/static/iwadinfo.txt:389, 652, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "plutonia.wad" category: game_data system: doom path: "plutonia.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:545, 670" + source_ref: "wadsrc_extra/static/iwadinfo.txt:545, 670, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "plutoniaunity.wad" category: game_data system: doom path: "plutoniaunity.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:514, 671" + source_ref: "wadsrc_extra/static/iwadinfo.txt:514, 671, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "plutoniakex.wad" category: game_data system: doom path: "plutoniakex.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:529, 672" + source_ref: "wadsrc_extra/static/iwadinfo.txt:529, 672, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "tnt.wad" category: game_data system: doom path: "tnt.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:499, 673" + source_ref: "wadsrc_extra/static/iwadinfo.txt:499, 673, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "tntunity.wad" category: game_data system: doom path: "tntunity.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:468, 674" + source_ref: "wadsrc_extra/static/iwadinfo.txt:468, 674, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "tntkex.wad" category: game_data system: doom path: "tntkex.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:483, 675" + source_ref: "wadsrc_extra/static/iwadinfo.txt:483, 675, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "nerve.wad" category: game_data @@ -309,7 +309,7 @@ files: system: doom path: "extras.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:357, 376, 488, 534, 582, 598" + source_ref: "wadsrc_extra/static/iwadinfo.txt:357, 376, 488, 534, 582, 598, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:208-215, 320-341, 877-901" note: "Loaded from the IWAD directory by the KEX and Unity editions." - name: "soundtrack" @@ -336,7 +336,7 @@ files: path: "freedoom1.wad" required: false installed_on: [retropie] - source_ref: "wadsrc_extra/static/iwadinfo.txt:307, 676" + source_ref: "wadsrc_extra/static/iwadinfo.txt:307, 676, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "freedoom2.wad" category: game_data @@ -344,14 +344,14 @@ files: path: "freedoom2.wad" required: false installed_on: [retropie] - source_ref: "wadsrc_extra/static/iwadinfo.txt:294, 677" + source_ref: "wadsrc_extra/static/iwadinfo.txt:294, 677, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "freedm.wad" category: game_data system: doom path: "freedm.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:281, 680" + source_ref: "wadsrc_extra/static/iwadinfo.txt:281, 680, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" # ---- Heretic ---- @@ -360,7 +360,7 @@ files: system: heretic path: "heretic.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:241, 244, 254, 257, 681" + source_ref: "wadsrc_extra/static/iwadinfo.txt:241, 244, 254, 257, 681, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" note: "Both Heretic and Shadow of the Serpent Riders use this name and are told apart by the EXTENDED lump." - name: "blasphem.wad" @@ -369,7 +369,7 @@ files: system: heretic path: "blasphem.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:228, 692-693" + source_ref: "wadsrc_extra/static/iwadinfo.txt:228, 692-693, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" # ---- Hexen ---- @@ -378,14 +378,14 @@ files: system: hexen path: "hexen.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:188, 684" + source_ref: "wadsrc_extra/static/iwadinfo.txt:188, 684, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "hexdd.wad" category: game_data system: hexen path: "hexdd.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:196-207, 685" + source_ref: "wadsrc_extra/static/iwadinfo.txt:196-207, 685, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" note: "Deathkings expansion. Requires hexen.wad (Required = Hexen: Beyond Heretic)." # ---- Strife ---- @@ -395,14 +395,14 @@ files: system: strife path: "strife1.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:151, 688" + source_ref: "wadsrc_extra/static/iwadinfo.txt:151, 688, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "sve.wad" category: game_data system: strife path: "sve.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:136, 140, 689" + source_ref: "wadsrc_extra/static/iwadinfo.txt:136, 140, 689, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" note: "Veteran Edition. Required = Strife: Quest for the Sigil (loads voices.wad)." - name: "voices.wad" @@ -410,7 +410,7 @@ files: system: strife path: "voices.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:142, 155" + source_ref: "wadsrc_extra/static/iwadinfo.txt:142, 155, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:208-215, 320-341, 877-901" # ---- Chex Quest ---- @@ -419,14 +419,14 @@ files: system: chex path: "chex.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:123, 694" + source_ref: "wadsrc_extra/static/iwadinfo.txt:123, 694, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "chex3.wad" category: game_data system: chex path: "chex3.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:109, 695" + source_ref: "wadsrc_extra/static/iwadinfo.txt:109, 695, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" # ---- Standalone commercial / community IWADs ---- @@ -435,7 +435,7 @@ files: system: doom path: "hacx.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:83, 698" + source_ref: "wadsrc_extra/static/iwadinfo.txt:83, 698, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "hacx2.wad" category: game_data @@ -450,21 +450,21 @@ files: system: doom path: "action2.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:97, 696" + source_ref: "wadsrc_extra/static/iwadinfo.txt:97, 696, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "harm1.wad" category: game_data system: doom path: "harm1.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:57, 697" + source_ref: "wadsrc_extra/static/iwadinfo.txt:57, 697, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "square.pk3" category: game_data system: doom path: "square.pk3" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:33" + source_ref: "wadsrc_extra/static/iwadinfo.txt:33, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:320-341, 351-396, 626-670" note: "Absent from the Names block: picked up only when named with -iwad." - name: "square1.pk3" @@ -472,18 +472,18 @@ files: system: doom path: "square1.pk3" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:45, 700" + source_ref: "wadsrc_extra/static/iwadinfo.txt:45, 700, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "delaweare.wad" category: game_data system: doom path: "delaweare.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:22, 701" + source_ref: "wadsrc_extra/static/iwadinfo.txt:22, 701, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" - name: "rotwb.wad" category: game_data system: doom path: "rotwb.wad" required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:9, 702" + source_ref: "wadsrc_extra/static/iwadinfo.txt:9, 702, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:3796, src/d_iwad.cpp:286-296, 320-341, 351-396, 502-531" diff --git a/emulators/lzdoom.yml b/emulators/lzdoom.yml index 5be55755b..0f0c79515 100644 --- a/emulators/lzdoom.yml +++ b/emulators/lzdoom.yml @@ -200,7 +200,7 @@ files: # ================================================================ # IWADs (user-supplied). One is needed to start a game. - # All source refs point to wadsrc_extra/static/iwadinfo.txt. + # Each ref gives the iwadinfo.txt entry, then the code that reads it. # ================================================================ # ---- Doom ---- @@ -209,7 +209,7 @@ files: category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:315, 363, 378, 393, 576" + source_ref: "wadsrc_extra/static/iwadinfo.txt:315, 363, 378, 393, 576, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" note: "The Ultimate DOOM, DOOM Registered, the BFG and XBox editions all use this name and are told apart by their lumps." - name: "doom1.wad" @@ -217,92 +217,92 @@ files: system: doom required: false installed_on: [retropie] - source_ref: "wadsrc_extra/static/iwadinfo.txt:402-412, 577" + source_ref: "wadsrc_extra/static/iwadinfo.txt:402-412, 577, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" note: "DOOM Shareware." - name: "doom2.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:489, 518, 545, 571" + source_ref: "wadsrc_extra/static/iwadinfo.txt:489, 518, 545, 571, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "doom2f.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:532, 572" + source_ref: "wadsrc_extra/static/iwadinfo.txt:532, 572, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "nerve.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:494, 523, 558, 562, 617" + source_ref: "wadsrc_extra/static/iwadinfo.txt:494, 523, 558, 562, 617, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:187-195, 253-263, 286-309, 319-367, 466-499, 772-789" note: "No Rest for the Living, which requires DOOM 2. Also loaded from the IWAD directory by the BFG and XBox editions of DOOM 2." - name: "doomunity.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:331, 584" + source_ref: "wadsrc_extra/static/iwadinfo.txt:331, 584, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "doom2unity.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:503, 585" + source_ref: "wadsrc_extra/static/iwadinfo.txt:503, 585, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "nerveunity.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:508" + source_ref: "wadsrc_extra/static/iwadinfo.txt:508, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:187-195, 286-309, 772-789" note: "Loaded from the IWAD directory by DOOM 2: Unity Edition." - name: "extras.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:338, 508" + source_ref: "wadsrc_extra/static/iwadinfo.txt:338, 508, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:187-195, 286-309, 772-789" note: "Loaded from the IWAD directory by the Unity editions." - name: "soundtrack" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:338, 508" + source_ref: "wadsrc_extra/static/iwadinfo.txt:338, 508, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:187-195, 286-309, 772-789" note: "Loaded from the IWAD directory by the Unity editions." - name: "doom_complete.pk3" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:350, 570" + source_ref: "wadsrc_extra/static/iwadinfo.txt:350, 570, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" note: "WadSmoosh merge of the Doom IWADs." - name: "plutonia.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:447, 461, 573" + source_ref: "wadsrc_extra/static/iwadinfo.txt:447, 461, 573, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "tnt.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:420, 434, 574" + source_ref: "wadsrc_extra/static/iwadinfo.txt:420, 434, 574, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "sigil_v1_21.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:468-478, 616" + source_ref: "wadsrc_extra/static/iwadinfo.txt:468-478, 616, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" note: "Sigil, which requires The Ultimate DOOM." - name: "sigil_shreds.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:473" + source_ref: "wadsrc_extra/static/iwadinfo.txt:473, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:187-195, 286-309, 772-789" note: "Loaded from the IWAD directory by Sigil." # ---- Freedoom (free) ---- @@ -312,20 +312,20 @@ files: system: doom required: false installed_on: [retropie] - source_ref: "wadsrc_extra/static/iwadinfo.txt:292, 589" + source_ref: "wadsrc_extra/static/iwadinfo.txt:292, 589, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "freedoom2.wad" category: game_data system: doom required: false installed_on: [retropie] - source_ref: "wadsrc_extra/static/iwadinfo.txt:280, 590" + source_ref: "wadsrc_extra/static/iwadinfo.txt:280, 590, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "freedm.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:268, 593" + source_ref: "wadsrc_extra/static/iwadinfo.txt:268, 593, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" # ---- Heretic ---- @@ -333,14 +333,14 @@ files: category: game_data system: heretic required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:231, 243, 594" + source_ref: "wadsrc_extra/static/iwadinfo.txt:231, 243, 594, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" note: "Heretic and Shadow of the Serpent Riders share the name and are told apart by their lumps." - name: "heretic1.wad" category: game_data system: heretic required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:250-260, 596" + source_ref: "wadsrc_extra/static/iwadinfo.txt:250-260, 596, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" note: "Heretic Shareware." - name: "blasphemer.wad" @@ -348,7 +348,7 @@ files: category: game_data system: heretic required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:219, 605-606" + source_ref: "wadsrc_extra/static/iwadinfo.txt:219, 605-606, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" # ---- Hexen ---- @@ -356,13 +356,13 @@ files: category: game_data system: hexen required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:181, 597" + source_ref: "wadsrc_extra/static/iwadinfo.txt:181, 597, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "hexdd.wad" category: game_data system: hexen required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:188-199, 598" + source_ref: "wadsrc_extra/static/iwadinfo.txt:188-199, 598, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" note: "Deathkings expansion, which requires hexen.wad." # ---- Strife ---- @@ -371,20 +371,20 @@ files: category: game_data system: strife required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:144, 601" + source_ref: "wadsrc_extra/static/iwadinfo.txt:144, 601, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "sve.wad" category: game_data system: strife required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:130, 134, 602" + source_ref: "wadsrc_extra/static/iwadinfo.txt:130, 134, 602, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" note: "Veteran Edition, which requires Strife: Quest for the Sigil." - name: "voices.wad" category: game_data system: strife required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:135, 148" + source_ref: "wadsrc_extra/static/iwadinfo.txt:135, 148, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:187-195, 286-309, 772-789" note: "Loaded from the IWAD directory by Strife." # ---- Chex Quest ---- @@ -393,13 +393,13 @@ files: category: game_data system: chex required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:118, 607" + source_ref: "wadsrc_extra/static/iwadinfo.txt:118, 607, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "chex3.wad" category: game_data system: chex required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:105, 608" + source_ref: "wadsrc_extra/static/iwadinfo.txt:105, 608, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" # ---- Standalone commercial and community IWADs ---- @@ -407,47 +407,47 @@ files: category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:81, 611" + source_ref: "wadsrc_extra/static/iwadinfo.txt:81, 611, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "hacx2.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:69, 612" + source_ref: "wadsrc_extra/static/iwadinfo.txt:69, 612, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "action2.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:93, 609" + source_ref: "wadsrc_extra/static/iwadinfo.txt:93, 609, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "harm1.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:57, 610" + source_ref: "wadsrc_extra/static/iwadinfo.txt:57, 610, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "square.pk3" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:33" + source_ref: "wadsrc_extra/static/iwadinfo.txt:33, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:286-309, 319-367, 566-604" note: "Absent from the Names block: picked up only when named with -iwad." - name: "square1.pk3" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:45, 613" + source_ref: "wadsrc_extra/static/iwadinfo.txt:45, 613, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "delaweare.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:22, 614" + source_ref: "wadsrc_extra/static/iwadinfo.txt:22, 614, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" - name: "rotwb.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:9, 615" + source_ref: "wadsrc_extra/static/iwadinfo.txt:9, 615, wadsrc_extra/CMakeLists.txt:3, src/d_main.cpp:2539, src/d_iwad.cpp:253-263, 286-309, 319-367, 466-499" diff --git a/emulators/uzdoom.yml b/emulators/uzdoom.yml index efb0a7e40..c36827309 100644 --- a/emulators/uzdoom.yml +++ b/emulators/uzdoom.yml @@ -228,7 +228,7 @@ files: # ================================================================ # IWADs (user-supplied). At least one is needed to launch a game. - # All source refs point to wadsrc_extra/static/iwadinfo.txt entries. + # Each ref gives the iwadinfo.txt entry, then the code that reads it. # ================================================================ # ---- Doom ---- @@ -246,110 +246,110 @@ files: category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:420, 437, 659" + source_ref: "wadsrc_extra/static/iwadinfo.txt:420, 437, 659, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" note: "The Ultimate DOOM and DOOM Registered both use this name and are told apart by their lumps." - name: "doom2.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:640, 653" + source_ref: "wadsrc_extra/static/iwadinfo.txt:640, 653, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "doom2f.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:625, 657" + source_ref: "wadsrc_extra/static/iwadinfo.txt:625, 657, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "doombfg.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:332, 666" + source_ref: "wadsrc_extra/static/iwadinfo.txt:332, 666, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "doom2bfg.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:560, 667" + source_ref: "wadsrc_extra/static/iwadinfo.txt:560, 667, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "doomunity.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:369, 661" + source_ref: "wadsrc_extra/static/iwadinfo.txt:369, 661, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "doom2unity.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:592, 655" + source_ref: "wadsrc_extra/static/iwadinfo.txt:592, 655, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "doomkex.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:350, 662" + source_ref: "wadsrc_extra/static/iwadinfo.txt:350, 662, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "doom2kex.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:576, 656" + source_ref: "wadsrc_extra/static/iwadinfo.txt:576, 656, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "doomxbox.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:403, 660" + source_ref: "wadsrc_extra/static/iwadinfo.txt:403, 660, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "doom2xbox.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:608, 654" + source_ref: "wadsrc_extra/static/iwadinfo.txt:608, 654, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "doom_complete.pk3" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:389, 652" + source_ref: "wadsrc_extra/static/iwadinfo.txt:389, 652, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "plutonia.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:545, 670" + source_ref: "wadsrc_extra/static/iwadinfo.txt:545, 670, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "plutoniaunity.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:514, 671" + source_ref: "wadsrc_extra/static/iwadinfo.txt:514, 671, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "plutoniakex.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:529, 672" + source_ref: "wadsrc_extra/static/iwadinfo.txt:529, 672, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "tnt.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:499, 673" + source_ref: "wadsrc_extra/static/iwadinfo.txt:499, 673, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "tntunity.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:468, 674" + source_ref: "wadsrc_extra/static/iwadinfo.txt:468, 674, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "tntkex.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:483, 675" + source_ref: "wadsrc_extra/static/iwadinfo.txt:483, 675, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "nerve.wad" category: game_data @@ -369,7 +369,7 @@ files: category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:357, 376, 488, 534, 582, 598" + source_ref: "wadsrc_extra/static/iwadinfo.txt:357, 376, 488, 534, 582, 598, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:214-221, 326-352, 924-947" note: "Loaded from the IWAD directory by the KEX and Unity editions." - name: "soundtrack" @@ -392,19 +392,19 @@ files: category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:307, 676" + source_ref: "wadsrc_extra/static/iwadinfo.txt:307, 676, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "freedoom2.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:294, 677" + source_ref: "wadsrc_extra/static/iwadinfo.txt:294, 677, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "freedm.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:281, 680" + source_ref: "wadsrc_extra/static/iwadinfo.txt:281, 680, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" # ---- Heretic ---- @@ -412,7 +412,7 @@ files: category: game_data system: heretic required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:241, 244, 254, 257, 681" + source_ref: "wadsrc_extra/static/iwadinfo.txt:241, 244, 254, 257, 681, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" note: "Both Heretic and Shadow of the Serpent Riders use this name and are told apart by the EXTENDED lump." - name: "blasphem.wad" @@ -420,7 +420,7 @@ files: category: game_data system: heretic required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:228, 692-693" + source_ref: "wadsrc_extra/static/iwadinfo.txt:228, 692-693, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" # ---- Hexen ---- @@ -428,13 +428,13 @@ files: category: game_data system: hexen required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:188, 684" + source_ref: "wadsrc_extra/static/iwadinfo.txt:188, 684, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "hexdd.wad" category: game_data system: hexen required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:196-207, 685" + source_ref: "wadsrc_extra/static/iwadinfo.txt:196-207, 685, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" note: "Deathkings expansion. Requires hexen.wad (Required = Hexen: Beyond Heretic)." # ---- Strife ---- @@ -443,20 +443,20 @@ files: category: game_data system: strife required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:151, 688" + source_ref: "wadsrc_extra/static/iwadinfo.txt:151, 688, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "sve.wad" category: game_data system: strife required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:136, 140, 689" + source_ref: "wadsrc_extra/static/iwadinfo.txt:136, 140, 689, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" note: "Veteran Edition. Required = Strife: Quest for the Sigil (loads voices.wad)." - name: "voices.wad" category: game_data system: strife required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:142, 155" + source_ref: "wadsrc_extra/static/iwadinfo.txt:142, 155, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:214-221, 326-352, 924-947" # ---- Chex Quest ---- @@ -464,13 +464,13 @@ files: category: game_data system: chex required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:123, 694" + source_ref: "wadsrc_extra/static/iwadinfo.txt:123, 694, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "chex3.wad" category: game_data system: chex required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:109, 695" + source_ref: "wadsrc_extra/static/iwadinfo.txt:109, 695, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" # ---- Standalone commercial / community IWADs ---- @@ -478,7 +478,7 @@ files: category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:83, 698" + source_ref: "wadsrc_extra/static/iwadinfo.txt:83, 698, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "hacx2.wad" category: game_data @@ -491,35 +491,35 @@ files: category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:97, 696" + source_ref: "wadsrc_extra/static/iwadinfo.txt:97, 696, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "harm1.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:57, 697" + source_ref: "wadsrc_extra/static/iwadinfo.txt:57, 697, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "square.pk3" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:33" + source_ref: "wadsrc_extra/static/iwadinfo.txt:33, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:326-352, 362-407, 643-692" note: "Absent from the Names block: picked up only when named with -iwad." - name: "square1.pk3" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:45, 700" + source_ref: "wadsrc_extra/static/iwadinfo.txt:45, 700, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "delaweare.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:22, 701" + source_ref: "wadsrc_extra/static/iwadinfo.txt:22, 701, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" - name: "rotwb.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:9, 702" + source_ref: "wadsrc_extra/static/iwadinfo.txt:9, 702, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" From e19308b68dc61aec8b2579595eea88b43edd3b1c Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:21:48 +0100 Subject: [PATCH 04/31] docs: cite the grpinfo reader in the Raze profile The GRP entries named only their grpinfo.txt blocks. They now cite the add_pk3 rule that packs engine/grpinfo.txt into raze.pk3, ParseAllGrpInfos that reads it from ENGINERES_FILE, ParseGrpInfo, and the size and CRC match of GrpScan (the mustcontain pass for blocks without a CRC). --- emulators/raze.yml | 104 ++++++++++++++++++++++----------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/emulators/raze.yml b/emulators/raze.yml index 3684d53cd..c16b1be3d 100644 --- a/emulators/raze.yml +++ b/emulators/raze.yml @@ -95,7 +95,7 @@ files: size: 26524524 crc32: "bbc9ce44" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:3, 48-59" + source_ref: "wadsrc/static/engine/grpinfo.txt:3, 48-59, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "DUKE3D.GRP" description: "Duke Nukem 3D (South Korean Censored)" @@ -106,7 +106,7 @@ files: size: 26385383 crc32: "aa4f6a40" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:4, 61-72" + source_ref: "wadsrc/static/engine/grpinfo.txt:4, 61-72, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "DUKE3D.GRP" description: "Duke Nukem 3D: Atomic Edition" @@ -117,7 +117,7 @@ files: size: 44356548 crc32: "fd3dcff1" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:5, 74-85" + source_ref: "wadsrc/static/engine/grpinfo.txt:5, 74-85, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "DUKE3D.GRP" description: "Duke Nukem 3D: Plutonium Pak" @@ -128,7 +128,7 @@ files: size: 44348015 crc32: "f514a6ac" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:6, 113-124" + source_ref: "wadsrc/static/engine/grpinfo.txt:6, 113-124, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "DUKE3D.GRP" description: "Duke Nukem 3D: Atomic Edition (WT)" @@ -139,7 +139,7 @@ files: size: 44356548 crc32: "982afe4a" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:7, 87-98" + source_ref: "wadsrc/static/engine/grpinfo.txt:7, 87-98, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" note: "World Tour release." - name: "DUKE3D.GRP" @@ -151,7 +151,7 @@ files: size: 44486702 crc32: "89792e05" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:100-111" + source_ref: "wadsrc/static/engine/grpinfo.txt:100-111, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" note: "World Tour release, second known build." - name: "DUKE3D.GRP" @@ -163,7 +163,7 @@ files: size: 9690241 crc32: "02f18900" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:8, 126-136" + source_ref: "wadsrc/static/engine/grpinfo.txt:8, 126-136, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "DUKE3D.GRP" description: "Duke Nukem 3D Shareware 1.0" @@ -174,7 +174,7 @@ files: size: 10429258 crc32: "a28aa589" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:9, 138-148" + source_ref: "wadsrc/static/engine/grpinfo.txt:9, 138-148, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "DUKE3D.GRP" description: "Duke Nukem 3D Shareware 1.1" @@ -185,7 +185,7 @@ files: size: 10442980 crc32: "912e1e8d" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:10, 150-160" + source_ref: "wadsrc/static/engine/grpinfo.txt:10, 150-160, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "DUKE3D.GRP" description: "Duke Nukem 3D Shareware 1.3D" @@ -196,7 +196,7 @@ files: size: 11035779 crc32: "983ad923" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:11, 162-172" + source_ref: "wadsrc/static/engine/grpinfo.txt:11, 162-172, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "DUKEDC.GRP" description: "Duke it out in D.C. (1.3D)" @@ -207,7 +207,7 @@ files: size: 7926624 crc32: "a9242158" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:14, 198-208" + source_ref: "wadsrc/static/engine/grpinfo.txt:14, 198-208, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" note: "Addon of the 1.3D release (dependency DUKE13_CRC)." - name: "DUKEDC.GRP" @@ -219,7 +219,7 @@ files: size: 8225517 crc32: "b79d997f" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:15, 210-220" + source_ref: "wadsrc/static/engine/grpinfo.txt:15, 210-220, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" note: "Addon of the Atomic Edition (dependency DUKE15_CRC)." - name: "DUKEDC.GRP" @@ -231,7 +231,7 @@ files: size: 8410183 crc32: "a8cf80da" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:16, 222-232" + source_ref: "wadsrc/static/engine/grpinfo.txt:16, 222-232, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "DUKEDC.GRP" description: "Duke it out in D.C." @@ -242,7 +242,7 @@ files: size: 8410187 crc32: "39a692bf" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:234-245" + source_ref: "wadsrc/static/engine/grpinfo.txt:234-245, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "DUKEDC.GRP" description: "Duke it out in D.C." @@ -253,7 +253,7 @@ files: size: 8410183 crc32: "777c77b1" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:247-258" + source_ref: "wadsrc/static/engine/grpinfo.txt:247-258, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "DUKEDC.GRP" description: "Duke it out in D.C." @@ -264,7 +264,7 @@ files: size: 8410149 crc32: "c63b6a8b" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:260-271" + source_ref: "wadsrc/static/engine/grpinfo.txt:260-271, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "VACATION.GRP" description: "Duke Caribbean: Life's a Beach (1.3)" @@ -275,7 +275,7 @@ files: size: 23559381 crc32: "4a2dbb62" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:17, 273-285" + source_ref: "wadsrc/static/engine/grpinfo.txt:17, 273-285, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" note: "Addon of the 1.3D release (dependency DUKE13_CRC)." - name: "VACATION.GRP" @@ -287,7 +287,7 @@ files: size: 22551333 crc32: "2f4fccee" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:18, 287-299" + source_ref: "wadsrc/static/engine/grpinfo.txt:18, 287-299, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" note: "Addon of the Atomic Edition (dependency DUKE15_CRC)." - name: "VACATION.GRP" @@ -299,7 +299,7 @@ files: size: 22521880 crc32: "b62b42fd" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:19, 301-313" + source_ref: "wadsrc/static/engine/grpinfo.txt:19, 301-313, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "VACATION.GRP" description: "Duke Caribbean: Life's a Beach" @@ -310,7 +310,7 @@ files: size: 22213819 crc32: "18f01c5b" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:20, 316-328" + source_ref: "wadsrc/static/engine/grpinfo.txt:20, 316-328, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "VACATION.GRP" description: "Duke Caribbean: Life's a Beach" @@ -321,7 +321,7 @@ files: size: 22397273 crc32: "65b5f690" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:330-343" + source_ref: "wadsrc/static/engine/grpinfo.txt:330-343, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "VACATION.GRP" description: "Duke Caribbean: Life's a Beach" @@ -332,7 +332,7 @@ files: size: 22201375 crc32: "b28e883c" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:345-358" + source_ref: "wadsrc/static/engine/grpinfo.txt:345-358, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "VACATION.GRP" description: "Duke Caribbean: Life's a Beach" @@ -343,7 +343,7 @@ files: size: 22213795 crc32: "64cf2351" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:360-373" + source_ref: "wadsrc/static/engine/grpinfo.txt:360-373, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "NWINTER.GRP" description: "Duke: Nuclear Winter" @@ -354,7 +354,7 @@ files: size: 16169365 crc32: "f1cae8e4" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:21, 375-388" + source_ref: "wadsrc/static/engine/grpinfo.txt:21, 375-388, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" note: "Addon of the Atomic Edition (dependency DUKE15_CRC)." - name: "NWINTER.GRP" @@ -366,7 +366,7 @@ files: size: 10965909 crc32: "c7efbfa9" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:390-402" + source_ref: "wadsrc/static/engine/grpinfo.txt:390-402, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" note: "Addon of the Atomic Edition (dependency DUKE15_CRC)." - name: "penthous.zip" @@ -378,7 +378,7 @@ files: size: 2112419 crc32: "7cd82a3b" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:459-470" + source_ref: "wadsrc/static/engine/grpinfo.txt:459-470, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" note: "The original ZIP release, identified as a whole file. Addon of the Atomic Edition (dependency DUKE15_CRC)." # ================================================================ @@ -394,7 +394,7 @@ files: size: 8200353 crc32: "b291418f" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:32, 485-499" + source_ref: "wadsrc/static/engine/grpinfo.txt:32, 485-499, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "BLOOD.RFF" description: "BLOOD: 1.1" @@ -405,7 +405,7 @@ files: size: 8231173 crc32: "c3a99936" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:33, 501-515" + source_ref: "wadsrc/static/engine/grpinfo.txt:33, 501-515, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "BLOOD.RFF" description: "BLOOD: One Unit Whole Blood" @@ -416,7 +416,7 @@ files: size: 9570681 crc32: "a8fdda84" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:34, 517-531" + source_ref: "wadsrc/static/engine/grpinfo.txt:34, 517-531, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "BLOOD.RFF" description: "BLOOD: Unknown Version" @@ -432,7 +432,7 @@ files: system: blood path: "SOUNDS.RFF" required: false - source_ref: "wadsrc/static/engine/grpinfo.txt:494, 510, 526, 542" + source_ref: "wadsrc/static/engine/grpinfo.txt:494, 510, 526, 542, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 772-828, 696-704, 830-875" note: "Named by loadgrp in every Blood block and loaded with the main resource." - name: "GUI.RFF" @@ -440,7 +440,7 @@ files: system: blood path: "GUI.RFF" required: false - source_ref: "wadsrc/static/engine/grpinfo.txt:494, 510, 526, 542" + source_ref: "wadsrc/static/engine/grpinfo.txt:494, 510, 526, 542, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 772-828, 696-704, 830-875" note: "Named by loadgrp in every Blood block and loaded with the main resource." - name: "BLOOD.GRP" @@ -448,7 +448,7 @@ files: system: blood path: "BLOOD.GRP" required: false - source_ref: "wadsrc/static/engine/grpinfo.txt:494, 510, 526, 542" + source_ref: "wadsrc/static/engine/grpinfo.txt:494, 510, 526, 542, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 772-828, 696-704, 830-875" note: "Named by loadgrp in every Blood block and loaded with the main resource." - name: "SURFACE.DAT" @@ -496,7 +496,7 @@ files: size: 47536148 crc32: "7545319f" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:36, 614-625" + source_ref: "wadsrc/static/engine/grpinfo.txt:36, 614-625, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "SW.GRP" description: "Shadow Warrior (Europe)" @@ -507,7 +507,7 @@ files: size: 47536148 crc32: "d4a1e153" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:627-638" + source_ref: "wadsrc/static/engine/grpinfo.txt:627-638, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "SW.GRP" description: "Shadow Warrior (UK)" @@ -518,7 +518,7 @@ files: size: 47536148 crc32: "3ee68767" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:640-651" + source_ref: "wadsrc/static/engine/grpinfo.txt:640-651, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "SW.GRP" description: "Shadow Warrior (Censored)" @@ -529,7 +529,7 @@ files: size: 47537951 crc32: "1a8776d2" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:653-664" + source_ref: "wadsrc/static/engine/grpinfo.txt:653-664, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "SW.GRP" description: "Shadow Warrior Shareware 1.0" @@ -540,7 +540,7 @@ files: size: 25702245 crc32: "daa6bece" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:666-676" + source_ref: "wadsrc/static/engine/grpinfo.txt:666-676, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "SW.GRP" description: "Shadow Warrior Shareware 1.1" @@ -551,7 +551,7 @@ files: size: 25833456 crc32: "f21a6b35" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:678-688" + source_ref: "wadsrc/static/engine/grpinfo.txt:678-688, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "SW.GRP" description: "Shadow Warrior Shareware 1.2" @@ -562,7 +562,7 @@ files: size: 26056769 crc32: "08a7fa1f" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:690-700" + source_ref: "wadsrc/static/engine/grpinfo.txt:690-700, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "WT.GRP" description: "Shadow Warrior: Wanton Destruction" @@ -573,7 +573,7 @@ files: size: 48698128 crc32: "a9aaa7b7" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:37, 714-724" + source_ref: "wadsrc/static/engine/grpinfo.txt:37, 714-724, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" note: "Addon of the registered game (dependency SWREG12_CRC)." - name: "WT.GRP" @@ -585,7 +585,7 @@ files: size: 48698128 crc32: "8b6e8011" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:726-736" + source_ref: "wadsrc/static/engine/grpinfo.txt:726-736, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "TD.GRP" description: "Shadow Warrior: Twin Dragon" @@ -596,7 +596,7 @@ files: size: 12499012 crc32: "a1a65be8" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:38, 751-762" + source_ref: "wadsrc/static/engine/grpinfo.txt:38, 751-762, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" note: "Addon of the registered game (dependency SWREG12_CRC)." - name: "TD.GRP" @@ -608,7 +608,7 @@ files: size: 6236287 crc32: "b5b71277" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:764-774" + source_ref: "wadsrc/static/engine/grpinfo.txt:764-774, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "TD.GRP" description: "Shadow Warrior: Twin Dragon" @@ -619,7 +619,7 @@ files: size: 6235578 crc32: "acc8dcde" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:776-786" + source_ref: "wadsrc/static/engine/grpinfo.txt:776-786, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "TDRAGON.EXE" description: "Shadow Warrior: Twin Dragon, loose files" @@ -652,7 +652,7 @@ files: size: 27020745 crc32: "303cbd89" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:40, wadsrc/static/engine/grpinfo.txt:927-938" + source_ref: "wadsrc/static/engine/grpinfo.txt:40, wadsrc/static/engine/grpinfo.txt:927-938, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "STUFF.DAT" description: "Exhumed" @@ -663,7 +663,7 @@ files: size: 27108170 crc32: "e3b172f1" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:41, wadsrc/static/engine/grpinfo.txt:940-951" + source_ref: "wadsrc/static/engine/grpinfo.txt:41, wadsrc/static/engine/grpinfo.txt:940-951, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "STUFF.DAT" description: "Powerslave Demo" @@ -674,7 +674,7 @@ files: size: 27020745 crc32: "1d8c7645" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:42, wadsrc/static/engine/grpinfo.txt:953-963" + source_ref: "wadsrc/static/engine/grpinfo.txt:42, wadsrc/static/engine/grpinfo.txt:953-963, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" # ================================================================ # Redneck Rampage @@ -689,7 +689,7 @@ files: size: 141174222 crc32: "19d9bc79" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:28, wadsrc/static/engine/grpinfo.txt:814-827" + source_ref: "wadsrc/static/engine/grpinfo.txt:28, wadsrc/static/engine/grpinfo.txt:814-827, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "REDNECK.GRP" description: "Redneck Rampage Rides Again" @@ -700,7 +700,7 @@ files: size: 191798609 crc32: "958018c6" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:29, wadsrc/static/engine/grpinfo.txt:829-842" + source_ref: "wadsrc/static/engine/grpinfo.txt:29, wadsrc/static/engine/grpinfo.txt:829-842, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "GAME66.CON" description: "Redneck Rampage: Suckin' Grits on Route 66" @@ -724,7 +724,7 @@ files: size: 43448927 crc32: "75c1f07b" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:24, wadsrc/static/engine/grpinfo.txt:872-884" + source_ref: "wadsrc/static/engine/grpinfo.txt:24, wadsrc/static/engine/grpinfo.txt:872-884, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "NAPALM.GRP" description: "NAPALM" @@ -735,7 +735,7 @@ files: size: 44365728 crc32: "3de1589a" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:25, wadsrc/static/engine/grpinfo.txt:886-898" + source_ref: "wadsrc/static/engine/grpinfo.txt:25, wadsrc/static/engine/grpinfo.txt:886-898, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" - name: "WW2GI.GRP" description: "WWII GI" @@ -746,4 +746,4 @@ files: size: 77939508 crc32: "907b82bf" validation: [size, crc32] - source_ref: "wadsrc/static/engine/grpinfo.txt:26, wadsrc/static/engine/grpinfo.txt:900-912" + source_ref: "wadsrc/static/engine/grpinfo.txt:26, wadsrc/static/engine/grpinfo.txt:900-912, wadsrc/CMakeLists.txt:2, source/core/version.h:66, source/core/searchpaths.cpp:393-613, 621-660, 696-704, 830-875" From a9435694450e02bac5c357464af2b0e0ced33716 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:24:01 +0100 Subject: [PATCH 05/31] docs: cite the gameflow reader in TR1X and TR2X Level, FMV and sound entries named only their gameflow.json5 line. They now cite the release packaging that ships data/trx/ship, the startup load of the mod's gameflow, the reader of the path or sfx_path key, the path patterns it resolves against, and the open of the level file. --- emulators/tr1x.yml | 64 +++++++++++++++++++------------------- emulators/tr2x.yml | 76 +++++++++++++++++++++++----------------------- 2 files changed, 70 insertions(+), 70 deletions(-) diff --git a/emulators/tr1x.yml b/emulators/tr1x.yml index 3cf5e8829..fcd3d7726 100644 --- a/emulators/tr1x.yml +++ b/emulators/tr1x.yml @@ -54,19 +54,19 @@ 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/tr1/gameflow.json5:39" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:39, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:123-131, src/trx/game/level/format/pipeline.c:96" - name: "gym.phd" path: "games/tr1/levels/gym.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:61" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:61, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:123-131, src/trx/game/level/format/pipeline.c:96" - name: "level1.phd" path: "games/tr1/levels/level1.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:99" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:99, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Caves" - name: "level2.phd" @@ -74,126 +74,126 @@ 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/tr1/gameflow.json5:120" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:120, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "City of Vilcabamba" - name: "level3a.phd" path: "games/tr1/levels/level3a.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:139" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:139, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Lost Valley" - name: "level3b.phd" path: "games/tr1/levels/level3b.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:159" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:159, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Tomb of Qualopec" - name: "level4.phd" path: "games/tr1/levels/level4.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:180" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:180, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "St. Francis' Folly" - name: "level5.phd" path: "games/tr1/levels/level5.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:202" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:202, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Colosseum" - name: "level6.phd" path: "games/tr1/levels/level6.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:223" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:223, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Palace Midas" - name: "level7a.phd" path: "games/tr1/levels/level7a.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:242" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:242, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "The Cistern" - name: "level7b.phd" path: "games/tr1/levels/level7b.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:263" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:263, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Tomb of Tihocan" - name: "level8a.phd" path: "games/tr1/levels/level8a.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:290" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:290, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "City of Khamoon" - name: "level8b.phd" path: "games/tr1/levels/level8b.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:313" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:313, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Obelisk of Khamoon" - name: "level8c.phd" path: "games/tr1/levels/level8c.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:335" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:335, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Sanctuary of the Scion" - name: "level10a.phd" path: "games/tr1/levels/level10a.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:358" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:358, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Natla's Mines" - name: "level10b.phd" path: "games/tr1/levels/level10b.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:392" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:392, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Atlantis" - name: "level10c.phd" path: "games/tr1/levels/level10c.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:418" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:418, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "The Great Pyramid" - name: "cut1.phd" path: "games/tr1/levels/cut1.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:508" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:508, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Cutscene level 1 (after Qualopec)" - name: "cut2.phd" path: "games/tr1/levels/cut2.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:531" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:531, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Cutscene level 2 (after Tihocan)" - name: "cut3.phd" path: "games/tr1/levels/cut3.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:552" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:552, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Cutscene level 3 (Khamoon ambush)" - name: "cut4.phd" path: "games/tr1/levels/cut4.phd" required: true category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:575" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:575, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Cutscene level 4 (Natla's mines)" # FMV cutscenes @@ -205,7 +205,7 @@ files: path: "games/tr1/fmv/core.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:601" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:601, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" note: "Core Design legal screen." - name: "escape.avi" @@ -213,7 +213,7 @@ files: path: "games/tr1/fmv/escape.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:602" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:602, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" note: "Eidos legal screen." - name: "cafe.avi" @@ -221,7 +221,7 @@ files: path: "games/tr1/fmv/cafe.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:603" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:603, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" note: "Intro cutscene." - name: "mansion.avi" @@ -229,56 +229,56 @@ files: path: "games/tr1/fmv/mansion.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:604" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:604, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" - name: "snow.avi" aliases: [snow.rpl] path: "games/tr1/fmv/snow.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:605" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:605, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" - name: "lift.avi" aliases: [lift.rpl] path: "games/tr1/fmv/lift.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:606" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:606, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" - name: "vision.avi" aliases: [vision.rpl] path: "games/tr1/fmv/vision.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:607" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:607, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" - name: "canyon.avi" aliases: [canyon.rpl] path: "games/tr1/fmv/canyon.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:608" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:608, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" - name: "pyramid.avi" aliases: [pyramid.rpl] path: "games/tr1/fmv/pyramid.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:609" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:609, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" - name: "prison.avi" aliases: [prison.rpl] path: "games/tr1/fmv/prison.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:610" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:610, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" - name: "end.avi" aliases: [end.rpl] path: "games/tr1/fmv/end.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr1/gameflow.json5:611" + source_ref: "data/trx/ship/games/tr1/gameflow.json5:611, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" # Music tracks (retail CD audio, ripped as trackNN.). # Enumerated by the ship tree in docs/trx/INSTALLING.md. diff --git a/emulators/tr2x.yml b/emulators/tr2x.yml index ee7d7fedf..8d6d5c68e 100644 --- a/emulators/tr2x.yml +++ b/emulators/tr2x.yml @@ -55,7 +55,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:35" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:35, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 264-273, src/trx/game/paths.c:203-212, src/trx/game/level/pipeline.c:179" note: "Shared sample bank, loaded for every level." # Levels @@ -65,167 +65,167 @@ 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:15" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:15, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:123-131, src/trx/game/level/format/pipeline.c:96" - name: "assault.tr2" path: "games/tr2/levels/assault.tr2" required: true category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:57" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:57, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:123-131, src/trx/game/level/format/pipeline.c:96" 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:89" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:89, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:125" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:125, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:151" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:151, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:179" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:179, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:211" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:211, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:241" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:241, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:271" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:271, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:301" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:301, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:334" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:334, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:365" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:365, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:398" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:398, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:427" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:427, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:457" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:457, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:486" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:486, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:515" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:515, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:546" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:546, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:573" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:573, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:600" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:600, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:714" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:714, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:729" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:729, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:744" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:744, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" 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:761" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:761, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Cutscene level 4" # FMV cutscenes @@ -237,7 +237,7 @@ files: path: "games/tr2/fmv/logo.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:780" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:780, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" note: "Eidos legal screen." - name: "ANCIENT.AVI" @@ -245,7 +245,7 @@ files: path: "games/tr2/fmv/ancient.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:781" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:781, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" note: "Intro cutscene." - name: "MODERN.AVI" @@ -253,42 +253,42 @@ files: path: "games/tr2/fmv/modern.rpl" required: false category: game_data - source_ref: "data/trx/ship/games/tr2/gameflow.json5:782" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:782, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" - 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:783" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:783, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" - 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:784" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:784, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" - 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:785" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:785, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" - 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:786" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:786, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" - 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:787" + source_ref: "data/trx/ship/games/tr2/gameflow.json5:787, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 1100-1130, src/trx/game/paths.c:192-202" # Music tracks (retail CD audio, ripped as N.). # Enumerated by the ship tree in docs/trx/INSTALLING.md (TR2 uses the @@ -700,7 +700,7 @@ files: sha1: "8d8109c1afbb2b443c1c1f57add4676f17b5dc84" md5: "04ad2f33e48081a6b27a7f0ebf90968d" category: game_data - source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:58" + source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:58, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "The Cold War" - name: "level2.tr2" @@ -711,7 +711,7 @@ files: sha1: "6c9417d3b03cc2fd9fac62cea0910d9ef107ee1b" md5: "d9b53b88dd70eec1e4b31182f3286bf5" category: game_data - source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:90" + source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:90, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Fool's Gold" - name: "level3.tr2" @@ -722,7 +722,7 @@ files: sha1: "e92f045520d6e0aaec2c42dd2c28d34a0677df70" md5: "ca4294e3bd8835ebf06e114b479a22c2" category: game_data - source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:115" + source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:115, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Furnace of the Gods" - name: "level4.tr2" @@ -733,7 +733,7 @@ files: sha1: "83ffcd559e656186bc807e1040485f72956dbc00" md5: "63ff8be5c7abf37d7065456afeda029f" category: game_data - source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:140" + source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:140, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Kingdom" - name: "level5.tr2" @@ -744,5 +744,5 @@ files: sha1: "4508d23e8475ef6afd7a1756763dd606f23c15a9" md5: "88c8124b6d152b9f3fe1c4eeec4428a5" category: game_data - source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:177" + source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:177, tools/shared/docker/game_entrypoint.py:50-53, 196-206, src/trx/game/shell/flow.c:383-385, src/trx/game/shell/mod.c:540-543, src/trx/game/paths.c:104-110, src/trx/game/game_flow/reader.c:1214-1217, 900-910, src/trx/game/paths.c:111-121, src/trx/game/level/format/pipeline.c:96" note: "Nightmare in Vegas" From 69d593eb6d63a718eeea018fc65975d85326edf7 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:25:00 +0100 Subject: [PATCH 06/31] docs: cite the base set reader in OpenTTD The original game files named only their .obg, .obs or .obm line. They now cite the CMake rules that configure and install the base set metadata, FindSets and AddFile that scan for it, FillSetDetails that reads its files and md5s groups, and the startup call per set type. --- emulators/openttd.yml | 74 +++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/emulators/openttd.yml b/emulators/openttd.yml index e5b1b7dd2..3816fde12 100644 --- a/emulators/openttd.yml +++ b/emulators/openttd.yml @@ -75,7 +75,7 @@ files: description: "Transport Tycoon Deluxe DOS graphics, base" required: false md5: "9311676280e5b14077a8ee41c1b42192" - source_ref: "media/baseset/orig_dos.obg:20, media/baseset/orig_dos_de.obg:20" + source_ref: "media/baseset/orig_dos.obg:20, media/baseset/orig_dos_de.obg:20, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:717, src/gfxinit.cpp:352-354" - name: "TRGI.GRF" path: "baseset/TRGI.GRF" @@ -84,7 +84,7 @@ files: description: "Transport Tycoon Deluxe DOS graphics, logos" required: false md5: "da6a6c9dcc451eec88d79211437b76a8" - source_ref: "media/baseset/orig_dos.obg:21, media/baseset/orig_dos_de.obg:21" + source_ref: "media/baseset/orig_dos.obg:21, media/baseset/orig_dos_de.obg:21, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:717, src/gfxinit.cpp:352-354" - name: "TRGC.GRF" path: "baseset/TRGC.GRF" @@ -93,7 +93,7 @@ files: description: "Transport Tycoon Deluxe DOS graphics, sub-arctic climate" required: false md5: "ed446637e034104c5559b32c18afe78d" - source_ref: "media/baseset/orig_dos.obg:22, media/baseset/orig_dos_de.obg:22" + source_ref: "media/baseset/orig_dos.obg:22, media/baseset/orig_dos_de.obg:22, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:717, src/gfxinit.cpp:352-354" - name: "TRGH.GRF" path: "baseset/TRGH.GRF" @@ -102,7 +102,7 @@ files: description: "Transport Tycoon Deluxe DOS graphics, sub-tropical climate" required: false md5: "ee6616fb0e6ef6b24892c58c93d86fc9" - source_ref: "media/baseset/orig_dos.obg:23, media/baseset/orig_dos_de.obg:23" + source_ref: "media/baseset/orig_dos.obg:23, media/baseset/orig_dos_de.obg:23, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:717, src/gfxinit.cpp:352-354" - name: "TRGT.GRF" path: "baseset/TRGT.GRF" @@ -111,7 +111,7 @@ files: description: "Transport Tycoon Deluxe DOS graphics, toyland" required: false md5: "e30e8a398ae86c03dc534a8ac7dfb3b6" - source_ref: "media/baseset/orig_dos.obg:24" + source_ref: "media/baseset/orig_dos.obg:24, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:717, src/gfxinit.cpp:352-354" - name: "TRGT.GRF" path: "baseset/TRGT.GRF" @@ -121,7 +121,7 @@ files: required: false md5: "fcde1d7e8a74197d72a62695884b909e" note: "The German DOS CD differs from the other DOS releases only in this file." - source_ref: "media/baseset/orig_dos_de.obg:24" + source_ref: "media/baseset/orig_dos_de.obg:24, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:717, src/gfxinit.cpp:352-354" - name: "TRG1R.GRF" path: "baseset/TRG1R.GRF" @@ -130,7 +130,7 @@ files: description: "Transport Tycoon Deluxe Windows graphics, base" required: false md5: "b04ce593d8c5016e07473a743d7d3358" - source_ref: "media/baseset/orig_win.obg:20" + source_ref: "media/baseset/orig_win.obg:20, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:717, src/gfxinit.cpp:352-354" - name: "TRGIR.GRF" path: "baseset/TRGIR.GRF" @@ -139,7 +139,7 @@ files: description: "Transport Tycoon Deluxe Windows graphics, logos" required: false md5: "0c2484ff6be49fc63a83be6ab5c38f32" - source_ref: "media/baseset/orig_win.obg:21" + source_ref: "media/baseset/orig_win.obg:21, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:717, src/gfxinit.cpp:352-354" - name: "TRGCR.GRF" path: "baseset/TRGCR.GRF" @@ -148,7 +148,7 @@ files: description: "Transport Tycoon Deluxe Windows graphics, sub-arctic climate" required: false md5: "3668f410c761a050b5e7095a2b14879b" - source_ref: "media/baseset/orig_win.obg:22" + source_ref: "media/baseset/orig_win.obg:22, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:717, src/gfxinit.cpp:352-354" - name: "TRGHR.GRF" path: "baseset/TRGHR.GRF" @@ -157,7 +157,7 @@ files: description: "Transport Tycoon Deluxe Windows graphics, sub-tropical climate" required: false md5: "06bf2b7a31766f048baac2ebe43457b1" - source_ref: "media/baseset/orig_win.obg:23" + source_ref: "media/baseset/orig_win.obg:23, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:717, src/gfxinit.cpp:352-354" - name: "TRGTR.GRF" path: "baseset/TRGTR.GRF" @@ -166,7 +166,7 @@ files: description: "Transport Tycoon Deluxe Windows graphics, toyland" required: false md5: "de53650517fe661ceaa3138c6edb0eb8" - source_ref: "media/baseset/orig_win.obg:24" + source_ref: "media/baseset/orig_win.obg:24, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:717, src/gfxinit.cpp:352-354" - name: "SAMPLE.CAT" path: "baseset/SAMPLE.CAT" @@ -175,7 +175,7 @@ files: description: "Transport Tycoon Deluxe DOS sound samples" required: false md5: "422ea3dd074d2859bb51639a6e0e85da" - source_ref: "media/baseset/orig_dos.obs:14" + source_ref: "media/baseset/orig_dos.obs:14, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:791" - name: "SAMPLE.CAT" path: "baseset/SAMPLE.CAT" @@ -184,7 +184,7 @@ files: description: "Transport Tycoon Deluxe Windows sound samples" required: false md5: "9212e81e72badd4bbe1eaeae66458e10" - source_ref: "media/baseset/orig_win.obs:14" + source_ref: "media/baseset/orig_win.obs:14, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:791" - name: "GM.CAT" path: "baseset/GM.CAT" @@ -193,7 +193,7 @@ files: description: "Transport Tycoon Deluxe DOS music catalogue" required: false md5: "7a29d2d0c4f7d2e03091ffa9b2bdfffb" - source_ref: "media/baseset/orig_dos.obm:44" + source_ref: "media/baseset/orig_dos.obm:44, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM-TTO.CAT" path: "baseset/GM-TTO.CAT" @@ -202,7 +202,7 @@ files: description: "Transport Tycoon Original music catalogue" required: false md5: "26e85ff84b0063aa5da05dd4698fc76e" - source_ref: "media/baseset/orig_tto.obm:63" + source_ref: "media/baseset/orig_tto.obm:63, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT00.GM" path: "baseset/GM_TT00.GM" @@ -211,7 +211,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Tycoon DELUXE Theme" required: false md5: "45cfec1b9d8c7a0ad45e755833cbf221" - source_ref: "media/baseset/orig_win.obm:44, media/baseset/orig_win.obm:68" + source_ref: "media/baseset/orig_win.obm:44, media/baseset/orig_win.obm:68, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT01.GM" path: "baseset/GM_TT01.GM" @@ -220,7 +220,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Snarl Up" required: false md5: "ab14ed3392d848abd2a2e90a9d75d121" - source_ref: "media/baseset/orig_win.obm:45, media/baseset/orig_win.obm:69" + source_ref: "media/baseset/orig_win.obm:45, media/baseset/orig_win.obm:69, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT02.GM" path: "baseset/GM_TT02.GM" @@ -229,7 +229,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Easy Driver" required: false md5: "dd4f696e4be5987ce738257b08b50171" - source_ref: "media/baseset/orig_win.obm:46, media/baseset/orig_win.obm:70" + source_ref: "media/baseset/orig_win.obm:46, media/baseset/orig_win.obm:70, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT03.GM" path: "baseset/GM_TT03.GM" @@ -238,7 +238,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Little Red Diesel" required: false md5: "a1bfde23343df9e4063419bf29c166b8" - source_ref: "media/baseset/orig_win.obm:47, media/baseset/orig_win.obm:71" + source_ref: "media/baseset/orig_win.obm:47, media/baseset/orig_win.obm:71, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT04.GM" path: "baseset/GM_TT04.GM" @@ -247,7 +247,7 @@ files: description: "Transport Tycoon Deluxe Windows music, City Groove" required: false md5: "4e6943aa0c455203d76c79389054747d" - source_ref: "media/baseset/orig_win.obm:48, media/baseset/orig_win.obm:72" + source_ref: "media/baseset/orig_win.obm:48, media/baseset/orig_win.obm:72, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT05.GM" path: "baseset/GM_TT05.GM" @@ -256,7 +256,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Aliens Ate My Railway" required: false md5: "cee281cb85a2e2343552d97640545a47" - source_ref: "media/baseset/orig_win.obm:49, media/baseset/orig_win.obm:73" + source_ref: "media/baseset/orig_win.obm:49, media/baseset/orig_win.obm:73, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT06.GM" path: "baseset/GM_TT06.GM" @@ -265,7 +265,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Stoke It" required: false md5: "26d1de5efa8675f94065784e9d539e49" - source_ref: "media/baseset/orig_win.obm:50, media/baseset/orig_win.obm:74" + source_ref: "media/baseset/orig_win.obm:50, media/baseset/orig_win.obm:74, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT07.GM" path: "baseset/GM_TT07.GM" @@ -274,7 +274,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Don't Walk!" required: false md5: "6f2691e17558f552ec4c565e4ab7139c" - source_ref: "media/baseset/orig_win.obm:51, media/baseset/orig_win.obm:75" + source_ref: "media/baseset/orig_win.obm:51, media/baseset/orig_win.obm:75, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT08.GM" path: "baseset/GM_TT08.GM" @@ -283,7 +283,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Sawyer's Tune" required: false md5: "a42bf2cb3340a822f1a69646fc7a487d" - source_ref: "media/baseset/orig_win.obm:52, media/baseset/orig_win.obm:76" + source_ref: "media/baseset/orig_win.obm:52, media/baseset/orig_win.obm:76, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT09.GM" path: "baseset/GM_TT09.GM" @@ -292,7 +292,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Fell Apart On Me" required: false md5: "eb35761a58a8df3c59ed8929cce13916" - source_ref: "media/baseset/orig_win.obm:53, media/baseset/orig_win.obm:77" + source_ref: "media/baseset/orig_win.obm:53, media/baseset/orig_win.obm:77, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT10.GM" path: "baseset/GM_TT10.GM" @@ -301,7 +301,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Can't Get There From Here" required: false md5: "42fecd686720a785d20a78590c466a82" - source_ref: "media/baseset/orig_win.obm:54, media/baseset/orig_win.obm:78" + source_ref: "media/baseset/orig_win.obm:54, media/baseset/orig_win.obm:78, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT11.GM" path: "baseset/GM_TT11.GM" @@ -310,7 +310,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Hard Drivin'" required: false md5: "50ef1ef02e49d2112786dd45e69dc3ee" - source_ref: "media/baseset/orig_win.obm:55, media/baseset/orig_win.obm:79" + source_ref: "media/baseset/orig_win.obm:55, media/baseset/orig_win.obm:79, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT12.GM" path: "baseset/GM_TT12.GM" @@ -319,7 +319,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Road Hog" required: false md5: "4ce707a0e0e72419f0681dd9bd95271b" - source_ref: "media/baseset/orig_win.obm:56, media/baseset/orig_win.obm:80" + source_ref: "media/baseset/orig_win.obm:56, media/baseset/orig_win.obm:80, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT13.GM" path: "baseset/GM_TT13.GM" @@ -328,7 +328,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Hold That Train!" required: false md5: "e765753be29d889ec818f38009103619" - source_ref: "media/baseset/orig_win.obm:57, media/baseset/orig_win.obm:81" + source_ref: "media/baseset/orig_win.obm:57, media/baseset/orig_win.obm:81, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT14.GM" path: "baseset/GM_TT14.GM" @@ -337,7 +337,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Broomer's Oil Rag" required: false md5: "270e2d63bd32b95a4d007ce15a6ce45f" - source_ref: "media/baseset/orig_win.obm:58, media/baseset/orig_win.obm:82" + source_ref: "media/baseset/orig_win.obm:58, media/baseset/orig_win.obm:82, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT15.GM" path: "baseset/GM_TT15.GM" @@ -346,7 +346,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Goss Groove" required: false md5: "89e116a1c0c69f1845cc903a9bfbe460" - source_ref: "media/baseset/orig_win.obm:59, media/baseset/orig_win.obm:83" + source_ref: "media/baseset/orig_win.obm:59, media/baseset/orig_win.obm:83, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT16.GM" path: "baseset/GM_TT16.GM" @@ -355,7 +355,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Small Town" required: false md5: "f824e2371b3bedfe61aad4b9c62dd6be" - source_ref: "media/baseset/orig_win.obm:60, media/baseset/orig_win.obm:84" + source_ref: "media/baseset/orig_win.obm:60, media/baseset/orig_win.obm:84, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT17.GM" path: "baseset/GM_TT17.GM" @@ -364,7 +364,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Cruise Control" required: false md5: "1b23eebb0796c1ab99cd97fa7082cf7b" - source_ref: "media/baseset/orig_win.obm:61, media/baseset/orig_win.obm:85" + source_ref: "media/baseset/orig_win.obm:61, media/baseset/orig_win.obm:85, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT18.GM" path: "baseset/GM_TT18.GM" @@ -373,7 +373,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Stroll On" required: false md5: "15650de3bad645d0e88c4f5c7a2df92a" - source_ref: "media/baseset/orig_win.obm:62, media/baseset/orig_win.obm:86" + source_ref: "media/baseset/orig_win.obm:62, media/baseset/orig_win.obm:86, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT19.GM" path: "baseset/GM_TT19.GM" @@ -382,7 +382,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Funk Central" required: false md5: "7aec079e15bd09588660b85545ac4dfc" - source_ref: "media/baseset/orig_win.obm:63, media/baseset/orig_win.obm:87" + source_ref: "media/baseset/orig_win.obm:63, media/baseset/orig_win.obm:87, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT20.GM" path: "baseset/GM_TT20.GM" @@ -391,7 +391,7 @@ files: description: "Transport Tycoon Deluxe Windows music, Jammit" required: false md5: "1509097889dee617aa1e9a1738a5a930" - source_ref: "media/baseset/orig_win.obm:64, media/baseset/orig_win.obm:88" + source_ref: "media/baseset/orig_win.obm:64, media/baseset/orig_win.obm:88, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" - name: "GM_TT21.GM" path: "baseset/GM_TT21.GM" @@ -400,4 +400,4 @@ files: description: "Transport Tycoon Deluxe Windows music, Movin' On" required: false md5: "a8d0aaad02e1a762d8d54cf81da56bab" - source_ref: "media/baseset/orig_win.obm:65, media/baseset/orig_win.obm:89" + source_ref: "media/baseset/orig_win.obm:65, media/baseset/orig_win.obm:89, media/baseset/CMakeLists.txt:4-15, 38-62, cmake/InstallAndPackage.cmake:28-34, src/base_media_base.h:198-204, src/base_media_func.h:42-139, 164-181, src/openttd.cpp:803, src/music.cpp:119-175" From c62515a78298d60fd9b9ad3c3342948c6bbbd431 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:26:07 +0100 Subject: [PATCH 07/31] docs: cite the machine reader in blueMSX Machine ROM entries named only a config.ini, most with no line. Each now gives the config.ini line that names the ROM, then libretro.c building the Machines path and calling machineCreate, readMachine parsing the Slots section, and romLoad opening each slot file. --- emulators/bluemsx.yml | 106 +++++++++++++++++++++--------------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/emulators/bluemsx.yml b/emulators/bluemsx.yml index e61d8b58a..265e0c6ba 100644 --- a/emulators/bluemsx.yml +++ b/emulators/bluemsx.yml @@ -92,7 +92,7 @@ files: required: true system: msx note: "MSX1 generic BIOS. Used by default 'MSX' machine config." - source_ref: "system/bluemsx/Machines/MSX/config.ini" + source_ref: "system/bluemsx/Machines/MSX/config.ini:28, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSX.rom path: "Machines/Shared Roms/MSX.rom" @@ -104,7 +104,7 @@ files: sha1: "e998f0c441f4f1800ef44e42cd1659150206cf79" md5: "364a1a579fe5cb8dba54519bcfcdac0d" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX/config.ini" + source_ref: "system/bluemsx/Machines/MSX/config.ini:28, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSXJ.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -114,7 +114,7 @@ files: required: false system: msx note: "MSX1 Japanese BIOS. Used by 'MSX - Japanese' machine." - source_ref: "system/bluemsx/Machines/MSX - Japanese/config.ini" + source_ref: "system/bluemsx/Machines/MSX - Japanese/config.ini:28, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSXJ.rom path: "Machines/Shared Roms/MSXJ.rom" @@ -126,7 +126,7 @@ files: sha1: "df48902f5f12af8867ae1a87f255145f0e5e0774" md5: "f005e55c680ba6e7b19f6d4dc8f73ce5" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX - Japanese/config.ini" + source_ref: "system/bluemsx/Machines/MSX - Japanese/config.ini:28, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSXBR.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -338,7 +338,7 @@ files: required: true system: msx2 note: "MSX2 generic main BIOS. Used by default 'MSX2' machine config." - source_ref: "system/bluemsx/Machines/MSX2/config.ini" + source_ref: "system/bluemsx/Machines/MSX2/config.ini:28, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSX2.rom path: "Machines/Shared Roms/MSX2.rom" @@ -350,7 +350,7 @@ files: sha1: "6103b39f1e38d1aa2d84b1c3219c44f1abb5436e" md5: "ec3a01c91f24fbddcbcab0ad301bc9ef" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX2/config.ini" + source_ref: "system/bluemsx/Machines/MSX2/config.ini:28, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSX2EXT.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -360,7 +360,7 @@ files: required: true system: msx2 note: "MSX2 extension BIOS (SubROM). Required alongside MSX2.rom." - source_ref: "system/bluemsx/Machines/MSX2/config.ini" + source_ref: "system/bluemsx/Machines/MSX2/config.ini:31, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSX2EXT.rom path: "Machines/Shared Roms/MSX2EXT.rom" @@ -372,7 +372,7 @@ files: sha1: "5c1f9c7fb655e43d38e5dd1fcc6b942b2ff68b02" md5: "2183c2aff17cf4297bdb496de78c2e8a" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX2/config.ini" + source_ref: "system/bluemsx/Machines/MSX2/config.ini:31, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSX2J.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -764,7 +764,7 @@ files: required: true system: msx2plus note: "MSX2+ main BIOS. Used by default 'MSX2+' machine config (auto-selected for .dsk/.cas/.rom)." - source_ref: "system/bluemsx/Machines/MSX2+/config.ini" + source_ref: "system/bluemsx/Machines/MSX2+/config.ini:31, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSX2P.rom path: "Machines/Shared Roms/MSX2P.rom" @@ -776,7 +776,7 @@ files: sha1: "e90f80a61d94c617850c415e12ad70ac41e66bb7" md5: "847cc025ffae665487940ff2639540e5" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX2+/config.ini" + source_ref: "system/bluemsx/Machines/MSX2+/config.ini:31, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSX2PEXT.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -786,7 +786,7 @@ files: required: true system: msx2plus note: "MSX2+ extension BIOS (SubROM)." - source_ref: "system/bluemsx/Machines/MSX2+/config.ini" + source_ref: "system/bluemsx/Machines/MSX2+/config.ini:35, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSX2PEXT.rom path: "Machines/Shared Roms/MSX2PEXT.rom" @@ -798,7 +798,7 @@ files: sha1: "fe0254cbfc11405b79e7c86c7769bd6322b04995" md5: "7c8243c71d8f143b2531f01afa6a05dc" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX2+/config.ini" + source_ref: "system/bluemsx/Machines/MSX2+/config.ini:35, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSX2PMUS.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -808,7 +808,7 @@ files: required: true system: msx2plus note: "MSX2+ MSX-MUSIC BIOS (FM-PAC built-in). Used by MSX2+ and MSX2 default configs." - source_ref: "system/bluemsx/Machines/MSX2+/config.ini" + source_ref: "system/bluemsx/Machines/MSX2+/config.ini:32, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSX2PMUS.rom path: "Machines/Shared Roms/MSX2PMUS.rom" @@ -820,7 +820,7 @@ files: sha1: "6354ccc5c100b1c558c9395fa8c00784d2e9b0a3" md5: "f877f32e6d8687474ac5ee83e40de23b" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX2+/config.ini" + source_ref: "system/bluemsx/Machines/MSX2+/config.ini:32, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" # -- MSX turboR BIOS set -- @@ -832,7 +832,7 @@ files: required: true system: msxturboR note: "MSX turboR main BIOS." - source_ref: "system/bluemsx/Machines/MSXturboR/config.ini" + source_ref: "system/bluemsx/Machines/MSXturboR/config.ini:38, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSXTR.ROM path: "Machines/Shared Roms/MSXTR.ROM" @@ -844,7 +844,7 @@ files: sha1: "242e73d8284a012b275c0a266844ebbc4269d787" md5: "fd9513736823e470965949f2a3ec6a43" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSXturboR/config.ini" + source_ref: "system/bluemsx/Machines/MSXturboR/config.ini:38, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSXTREXT.ROM installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -854,7 +854,7 @@ files: required: true system: msxturboR note: "MSX turboR extension BIOS." - source_ref: "system/bluemsx/Machines/MSXturboR/config.ini" + source_ref: "system/bluemsx/Machines/MSXturboR/config.ini:43, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSXTREXT.ROM path: "Machines/Shared Roms/MSXTREXT.ROM" @@ -866,7 +866,7 @@ files: sha1: "018d7a5222f28514908fb1b1513286a6558a6d05" md5: "824b1c4475a3bd3b91c5ae81ea940aa2" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSXturboR/config.ini" + source_ref: "system/bluemsx/Machines/MSXturboR/config.ini:43, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSXTRMUS.ROM installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -876,7 +876,7 @@ files: required: true system: msxturboR note: "MSX turboR MSX-MUSIC BIOS." - source_ref: "system/bluemsx/Machines/MSXturboR/config.ini" + source_ref: "system/bluemsx/Machines/MSXturboR/config.ini:39, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSXTRMUS.ROM path: "Machines/Shared Roms/MSXTRMUS.ROM" @@ -888,7 +888,7 @@ files: sha1: "6aea1aef5ec31c1826c22edf580525f93baad425" md5: "c688a229f834f95f8c64df7d33188cd8" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSXturboR/config.ini" + source_ref: "system/bluemsx/Machines/MSXturboR/config.ini:39, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSXTROPT.ROM installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -898,7 +898,7 @@ files: required: true system: msxturboR note: "MSX turboR option ROM (firmware utilities)." - source_ref: "system/bluemsx/Machines/MSXturboR/config.ini" + source_ref: "system/bluemsx/Machines/MSXturboR/config.ini:40, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSXTROPT.ROM path: "Machines/Shared Roms/MSXTROPT.ROM" @@ -910,7 +910,7 @@ files: sha1: "b4433a3975c57dd440d6bf12dbd28b2ac1b90ef4" md5: "2cba0d812ec445cfe63ffa2cac8d42c2" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSXturboR/config.ini" + source_ref: "system/bluemsx/Machines/MSXturboR/config.ini:40, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSXDOS23.ROM installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -920,7 +920,7 @@ files: required: true system: msxturboR note: "MSX-DOS 2.3 ROM. Used by turboR default config for disk operations." - source_ref: "system/bluemsx/Machines/MSXturboR/config.ini" + source_ref: "system/bluemsx/Machines/MSXturboR/config.ini:45, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSXDOS23.ROM path: "Machines/Shared Roms/MSXDOS23.ROM" @@ -932,7 +932,7 @@ files: sha1: "0527fb75775caa76c7eca8d449938ace83d36e96" md5: "56bf5b02fed377b7bb9d91f914965431" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSXturboR/config.ini" + source_ref: "system/bluemsx/Machines/MSXturboR/config.ini:45, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" # -- Shared utility/extension ROMs -- @@ -943,7 +943,7 @@ files: size: 262144 required: false note: "Kanji font ROM (256 KB). Used by MSX2+, turboR, and Japanese MSX2 machines." - source_ref: "system/bluemsx/Machines/MSX2+/config.ini" + source_ref: "system/bluemsx/Machines/MSX2+/config.ini:28, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: KANJI.rom path: "Machines/Shared Roms/KANJI.rom" @@ -954,7 +954,7 @@ files: sha1: "5aff2d9b6efc723bc395b0f96f0adfa83cc54a49" md5: "acf53887c2d2783dc059a9b442c86b90" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX2+/config.ini" + source_ref: "system/bluemsx/Machines/MSX2+/config.ini:28, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSXKANJI.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -963,7 +963,7 @@ files: size: 32768 required: false note: "MSX-Kanji driver ROM. Used by MSX2+, turboR, and Japanese MSX2 for kanji display." - source_ref: "system/bluemsx/Machines/MSX2+/config.ini" + source_ref: "system/bluemsx/Machines/MSX2+/config.ini:36, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MSXKANJI.rom path: "Machines/Shared Roms/MSXKANJI.rom" @@ -974,7 +974,7 @@ files: sha1: "dcc3a67732aa01c4f2ee8d1ad886444a4dbafe06" md5: "9dfdebfaa6b547222a40aab8bb2e29f8" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX2+/config.ini" + source_ref: "system/bluemsx/Machines/MSX2+/config.ini:36, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: FMPAC.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -1004,7 +1004,7 @@ files: size: 16384 required: false note: "MSX-BASIC 2 extension ROM. Used by MSX2, MSX2+, and turboR default configs." - source_ref: "system/bluemsx/Machines/MSX2/config.ini" + source_ref: "system/bluemsx/Machines/MSX2/config.ini:34, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: XBASIC2.rom path: "Machines/Shared Roms/XBASIC2.rom" @@ -1015,7 +1015,7 @@ files: sha1: "47370bec7ca1f0615a54eda548b07fbc0c7ef398" md5: "0b6120f289336538bc564548109f97c6" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX2/config.ini" + source_ref: "system/bluemsx/Machines/MSX2/config.ini:34, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: PAINT.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -1024,7 +1024,7 @@ files: size: 65536 required: false note: "Paint utility ROM. Loaded by the MSX2 - Arabic machine config." - source_ref: "system/bluemsx/Machines/MSX2 - Arabic/config.ini" + source_ref: "system/bluemsx/Machines/MSX2 - Arabic/config.ini:30, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: PAINT.rom path: "Machines/Shared Roms/PAINT.rom" @@ -1035,7 +1035,7 @@ files: sha1: "ace202e87337fbc54fea21e22c0b3af0abe6f4ae" md5: "41db0d7b37be479296ffd59fcd6775f0" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX2 - Arabic/config.ini" + source_ref: "system/bluemsx/Machines/MSX2 - Arabic/config.ini:30, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: SWP.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -1116,7 +1116,7 @@ files: size: 2097152 required: false note: "MoonSound (OPL4) wavetable ROM (2 MB). Used by MSX2, MSX2+, and turboR configs." - source_ref: "system/bluemsx/Machines/MSX2/config.ini" + source_ref: "system/bluemsx/Machines/MSX2/config.ini:26, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: MOONSOUND.rom path: "Machines/Shared Roms/MOONSOUND.rom" @@ -1127,7 +1127,7 @@ files: sha1: "32760893ce06dbe3930627755ba065cc3d8ec6ca" md5: "42af93619160ef2116416f74a6cb12f2" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX2/config.ini" + source_ref: "system/bluemsx/Machines/MSX2/config.ini:26, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" # -- Disk controller ROMs -- @@ -1138,7 +1138,7 @@ files: size: 16384 required: false note: "Panasonic disk controller ROM. Used by MSX2+ and turboR default configs." - source_ref: "system/bluemsx/Machines/MSX2+/config.ini" + source_ref: "system/bluemsx/Machines/MSX2+/config.ini:37, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: PANASONICDISK.rom path: "Machines/Shared Roms/PANASONICDISK.rom" @@ -1149,7 +1149,7 @@ files: sha1: "7ed7c55e0359737ac5e68d38cb6903f9e5d7c2b6" md5: "00aa02b6077de40a0b51d71a3c3e1d5f" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX2+/config.ini" + source_ref: "system/bluemsx/Machines/MSX2+/config.ini:37, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: PHILIPSDISK.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -1158,7 +1158,7 @@ files: size: 16384 required: false note: "Philips disk controller ROM. Used by MSX1 and MSX2 default configs." - source_ref: "system/bluemsx/Machines/MSX/config.ini" + source_ref: "system/bluemsx/Machines/MSX/config.ini:29, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: PHILIPSDISK.rom path: "Machines/Shared Roms/PHILIPSDISK.rom" @@ -1169,7 +1169,7 @@ files: sha1: "c3efedda7ab947a06d9345f7b8261076fa7ceeef" md5: "01dd1d72ed9bb6afe8a9b441c198a1cd" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX/config.ini" + source_ref: "system/bluemsx/Machines/MSX/config.ini:29, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: NATIONALDISK.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -1521,7 +1521,7 @@ files: required: true system: colecovision note: "ColecoVision BIOS ROM. Required for ColecoVision mode." - source_ref: "system/bluemsx/Machines/COL - ColecoVision/config.ini" + source_ref: "system/bluemsx/Machines/COL - ColecoVision/config.ini:23, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: coleco.rom path: "Machines/COL - ColecoVision/coleco.rom" @@ -1533,7 +1533,7 @@ files: sha1: "45bedc4cbdeac66c7df59e9e599195c778d86a92" md5: "2c66f5911e5b42b8ebe113403548eee7" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/COL - ColecoVision/config.ini" + source_ref: "system/bluemsx/Machines/COL - ColecoVision/config.ini:23, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" # ============================================================ # SEGA SF-7000 BIOS @@ -1548,7 +1548,7 @@ files: required: true system: sega-sf7000 note: "Sega SF-7000 BIOS ROM. SG-1000 and SC-3000 have no BIOS requirement." - source_ref: "system/bluemsx/Machines/SEGA - SF-7000/config.ini" + source_ref: "system/bluemsx/Machines/SEGA - SF-7000/config.ini:23, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: sf7000.rom path: "Machines/SEGA - SF-7000/sf7000.rom" @@ -1560,7 +1560,7 @@ files: sha1: "77339a6db2593aadc638bed77b8e9bed5d9d87e3" md5: "561b362f9aa4cbcb240461abf83c2e0d" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/SEGA - SF-7000/config.ini" + source_ref: "system/bluemsx/Machines/SEGA - SF-7000/config.ini:23, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" # ============================================================ # Spectravideo SVI BIOS files @@ -1574,7 +1574,7 @@ files: required: true system: spectravideo note: "SVI-318 BIOS ROM." - source_ref: "system/bluemsx/Machines/SVI - Spectravideo SVI-318/config.ini" + source_ref: "system/bluemsx/Machines/SVI - Spectravideo SVI-318/config.ini:23, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: svi318.rom path: "Machines/SVI - Spectravideo SVI-318/svi318.rom" @@ -1586,7 +1586,7 @@ files: sha1: "07758272df475e5e06187aa3574241df1b14035b" md5: "ee6ad7ea29e791b03a28a9443e622648" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/SVI - Spectravideo SVI-318/config.ini" + source_ref: "system/bluemsx/Machines/SVI - Spectravideo SVI-318/config.ini:23, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: svi328.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -1596,7 +1596,7 @@ files: required: true system: spectravideo note: "SVI-328 BIOS ROM." - source_ref: "system/bluemsx/Machines/SVI - Spectravideo SVI-328/config.ini" + source_ref: "system/bluemsx/Machines/SVI - Spectravideo SVI-328/config.ini:26, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: svi328.rom path: "Machines/SVI - Spectravideo SVI-328/svi328.rom" @@ -1608,7 +1608,7 @@ files: sha1: "7d8daf52f78371ca2c9443e04827c8e1f98c8f2c" md5: "2cebd1db9dda475a011b7bce65c984a2" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/SVI - Spectravideo SVI-328/config.ini" + source_ref: "system/bluemsx/Machines/SVI - Spectravideo SVI-328/config.ini:26, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: svi328a.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -1630,7 +1630,7 @@ files: sha1: "10349ce675f6d6d47f0976e39cb7188eba858d89" md5: "352f054ab09605070bdff49d73f335cc" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/SVI - Spectravideo SVI-328 MK2/config.ini:26" + source_ref: "system/bluemsx/Machines/SVI - Spectravideo SVI-328 MK2/config.ini:26, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" # ============================================================ # Machine-specific ROMs (Machines//) @@ -1650,7 +1650,7 @@ files: required: false system: msx2plus note: "MSX2+ European main BIOS. Used by the 'MSX2+ - European' machine config." - source_ref: "system/bluemsx/Machines/MSX2+ - European/config.ini:34" + source_ref: "system/bluemsx/Machines/MSX2+ - European/config.ini:34, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: Msx2pe.rom path: "Machines/MSX2+ - European/Msx2pe.rom" @@ -1662,7 +1662,7 @@ files: sha1: "aea0e4a635efce5336e496d36e4cb0a4b79593ff" md5: "277fd57c13f301fb4b366845a32d673a" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX2+ - European/config.ini:34" + source_ref: "system/bluemsx/Machines/MSX2+ - European/config.ini:34, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: Msx2pexte.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -1672,7 +1672,7 @@ files: required: false system: msx2plus note: "MSX2+ European extension BIOS (SubROM). Used by the 'MSX2+ - European' machine config." - source_ref: "system/bluemsx/Machines/MSX2+ - European/config.ini:39" + source_ref: "system/bluemsx/Machines/MSX2+ - European/config.ini:39, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: Msx2pexte.rom path: "Machines/MSX2+ - European/Msx2pexte.rom" @@ -1684,7 +1684,7 @@ files: sha1: "cf00ec60608010aac94cfe245eb7aa67cb44d110" md5: "f78ab735aaad7045badbda8f4c8ac751" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/MSX2+ - European/config.ini:39" + source_ref: "system/bluemsx/Machines/MSX2+ - European/config.ini:39, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: pesadelo.rom installed_on: [batocera, recalbox, retrobat, retrodeck, retropie] @@ -1694,7 +1694,7 @@ files: required: false system: msx note: "Forte II arcade board ROM (board type MSX-ForteII). Used by the 'Forte II Games - Pesadelo' machine config." - source_ref: "system/bluemsx/Machines/Forte II Games - Pesadelo/config.ini:27" + source_ref: "system/bluemsx/Machines/Forte II Games - Pesadelo/config.ini:27, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" - name: pesadelo.rom path: "Machines/Forte II Games - Pesadelo/pesadelo.rom" @@ -1706,7 +1706,7 @@ files: sha1: "12880dd7ad82acf04861843fb9d4f0f926d18f6b" md5: "ba53d700ec25bcb08020ce693319cd28" note: "Shipped in blueMSXv282full.zip." - source_ref: "system/bluemsx/Machines/Forte II Games - Pesadelo/config.ini:27" + source_ref: "system/bluemsx/Machines/Forte II Games - Pesadelo/config.ini:27, libretro.c:1196-1197, 1447, Src/Board/Machine.c:255-266, 397-470, 623-640, 1451" # ============================================================ # Databases (required for ROM identification/mapper detection) From 29eb53f0834fde0af38b5b86c6c4bceb2860239a Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:28:49 +0100 Subject: [PATCH 08/31] docs: cite the hardware config reader in openMSX System ROM entries named only a machine or extension XML. They now cite the rule that ships share (install.py for openMSX, libretro_share.py and installShare for the libretro core), HardwareConfig loading machines/ or extensions/, and Rom.cc resolving the rom by filename then by sha1 in the file pool. --- emulators/openmsx-libretro.yml | 210 ++++++++++++++++----------------- emulators/openmsx.yml | 60 +++++----- 2 files changed, 135 insertions(+), 135 deletions(-) diff --git a/emulators/openmsx-libretro.yml b/emulators/openmsx-libretro.yml index 98df73e1b..4b2131c3a 100644 --- a/emulators/openmsx-libretro.yml +++ b/emulators/openmsx-libretro.yml @@ -53,7 +53,7 @@ files: required: false validation: [sha1] description: "Read by machine Philips_VG_8020" - source_ref: "share/machines/Philips_VG_8020.xml:52-55" + source_ref: "share/machines/Philips_VG_8020.xml:52-55, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hb-75p_basic-bios1.rom" aliases: ["cx5m_basic-bios1.rom"] @@ -62,7 +62,7 @@ files: required: false validation: [sha1] description: "Read by machines Sony_HB-75P, Yamaha_CX5M" - source_ref: "share/machines/Sony_HB-75P.xml:59-62, share/machines/Yamaha_CX5M.xml:54-57" + source_ref: "share/machines/Sony_HB-75P.xml:59-62, share/machines/Yamaha_CX5M.xml:54-57, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" note: "share/machines/Yamaha_CX5M.xml names it cx5m_basic-bios1.rom." - name: "hb-75p_firmware.rom" @@ -71,7 +71,7 @@ files: required: false validation: [sha1] description: "Read by machine Sony_HB-75P" - source_ref: "share/machines/Sony_HB-75P.xml:66-69" + source_ref: "share/machines/Sony_HB-75P.xml:66-69, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hx-10_basic-bios1.rom" path: "openmsx/share/systemroms/hx-10_basic-bios1.rom" @@ -79,7 +79,7 @@ files: required: false validation: [sha1] description: "Read by machine Toshiba_HX-10" - source_ref: "share/machines/Toshiba_HX-10.xml:58-61" + source_ref: "share/machines/Toshiba_HX-10.xml:58-61, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "sfg-01.rom" path: "openmsx/share/systemroms/sfg-01.rom" @@ -87,7 +87,7 @@ files: required: false validation: [sha1] description: "Read by machine Yamaha_CX5M and extension Yamaha_SFG-01" - source_ref: "share/machines/Yamaha_CX5M.xml:80-83, share/extensions/Yamaha_SFG-01.xml:31-34" + source_ref: "share/machines/Yamaha_CX5M.xml:80-83, share/extensions/Yamaha_SFG-01.xml:31-34, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "NMS8245SystemROM1.08.bin" path: "openmsx/share/systemroms/NMS8245SystemROM1.08.bin" @@ -95,7 +95,7 @@ files: required: false validation: [sha1] description: "Read by machine Philips_NMS_8245" - source_ref: "share/machines/Philips_NMS_8245.xml:61-65, share/machines/Philips_NMS_8245.xml:92-96, share/machines/Philips_NMS_8245.xml:134-138" + source_ref: "share/machines/Philips_NMS_8245.xml:61-65, share/machines/Philips_NMS_8245.xml:92-96, share/machines/Philips_NMS_8245.xml:134-138, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "NMS8245SystemROM1.06.bin" path: "openmsx/share/systemroms/NMS8245SystemROM1.06.bin" @@ -103,7 +103,7 @@ files: required: false validation: [sha1] description: "Read by machine Philips_NMS_8245" - source_ref: "share/machines/Philips_NMS_8245.xml:66-70, share/machines/Philips_NMS_8245.xml:97-101, share/machines/Philips_NMS_8245.xml:139-143" + source_ref: "share/machines/Philips_NMS_8245.xml:66-70, share/machines/Philips_NMS_8245.xml:97-101, share/machines/Philips_NMS_8245.xml:139-143, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "NMS8245SystemROM1.05.bin" path: "openmsx/share/systemroms/NMS8245SystemROM1.05.bin" @@ -111,7 +111,7 @@ files: required: false validation: [sha1] description: "Read by machine Philips_NMS_8245" - source_ref: "share/machines/Philips_NMS_8245.xml:71-75, share/machines/Philips_NMS_8245.xml:102-106" + source_ref: "share/machines/Philips_NMS_8245.xml:71-75, share/machines/Philips_NMS_8245.xml:102-106, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "nms8245_basic-bios2.rom" aliases: ["nms8250_basic-bios2.rom"] @@ -120,7 +120,7 @@ files: required: false validation: [sha1] description: "Read by machines Philips_NMS_8245, Philips_NMS_8250" - source_ref: "share/machines/Philips_NMS_8245.xml:76-79, share/machines/Philips_NMS_8250.xml:23-26" + source_ref: "share/machines/Philips_NMS_8245.xml:76-79, share/machines/Philips_NMS_8250.xml:23-26, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" note: "share/machines/Philips_NMS_8250.xml names it nms8250_basic-bios2.rom." - name: "nms8245_msx2sub.rom" @@ -129,7 +129,7 @@ files: required: false validation: [sha1] description: "Read by machine Philips_NMS_8245" - source_ref: "share/machines/Philips_NMS_8245.xml:107-111" + source_ref: "share/machines/Philips_NMS_8245.xml:107-111, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "NMS8245SystemROM1.05.bin" path: "openmsx/share/systemroms/7e6a267e/NMS8245SystemROM1.05.bin" @@ -137,7 +137,7 @@ files: required: false validation: [sha1] description: "Read by machine Philips_NMS_8245" - source_ref: "share/machines/Philips_NMS_8245.xml:144-148" + source_ref: "share/machines/Philips_NMS_8245.xml:144-148, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "nms8245_disk.rom" path: "openmsx/share/systemroms/nms8245_disk.rom" @@ -145,7 +145,7 @@ files: required: false validation: [sha1] description: "Read by machine Philips_NMS_8245" - source_ref: "share/machines/Philips_NMS_8245.xml:149-153" + source_ref: "share/machines/Philips_NMS_8245.xml:149-153, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "nms8250_msx2sub.rom" path: "openmsx/share/systemroms/nms8250_msx2sub.rom" @@ -153,7 +153,7 @@ files: required: false validation: [sha1] description: "Read by machine Philips_NMS_8250" - source_ref: "share/machines/Philips_NMS_8250.xml:39-42" + source_ref: "share/machines/Philips_NMS_8250.xml:39-42, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "nms8250_disk.rom" path: "openmsx/share/systemroms/nms8250_disk.rom" @@ -161,7 +161,7 @@ files: required: false validation: [sha1] description: "Read by machine Philips_NMS_8250" - source_ref: "share/machines/Philips_NMS_8250.xml:62-67" + source_ref: "share/machines/Philips_NMS_8250.xml:62-67, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hb-f700p_basic-bios2.rom" path: "openmsx/share/systemroms/hb-f700p_basic-bios2.rom" @@ -169,7 +169,7 @@ files: required: false validation: [sha1] description: "Read by machine Sony_HB-F700P" - source_ref: "share/machines/Sony_HB-F700P.xml:65-68" + source_ref: "share/machines/Sony_HB-F700P.xml:65-68, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hb-f700p_msx2sub.rom" path: "openmsx/share/systemroms/hb-f700p_msx2sub.rom" @@ -177,7 +177,7 @@ files: required: false validation: [sha1] description: "Read by machine Sony_HB-F700P" - source_ref: "share/machines/Sony_HB-F700P.xml:83-87" + source_ref: "share/machines/Sony_HB-F700P.xml:83-87, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hb-f700p_disk.rom" path: "openmsx/share/systemroms/hb-f700p_disk.rom" @@ -185,7 +185,7 @@ files: required: false validation: [sha1] description: "Read by machine Sony_HB-F700P" - source_ref: "share/machines/Sony_HB-F700P.xml:94-98" + source_ref: "share/machines/Sony_HB-F700P.xml:94-98, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hb-f1xd_basic-bios2.rom" path: "openmsx/share/systemroms/hb-f1xd_basic-bios2.rom" @@ -193,7 +193,7 @@ files: required: false validation: [sha1] description: "Read by machine Sony_HB-F1XD" - source_ref: "share/machines/Sony_HB-F1XD.xml:69-72" + source_ref: "share/machines/Sony_HB-F1XD.xml:69-72, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hb-f1xd_msx2sub.rom" path: "openmsx/share/systemroms/hb-f1xd_msx2sub.rom" @@ -201,7 +201,7 @@ files: required: false validation: [sha1] description: "Read by machine Sony_HB-F1XD" - source_ref: "share/machines/Sony_HB-F1XD.xml:85-88" + source_ref: "share/machines/Sony_HB-F1XD.xml:85-88, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hb-f1xd_disk.rom" aliases: ["hbd-20w.rom", "hbd-f1.rom"] @@ -210,7 +210,7 @@ files: required: false validation: [sha1] description: "Read by machine Sony_HB-F1XD and extensions Sony_HBD-20W, Sony_HBD-F1" - source_ref: "share/machines/Sony_HB-F1XD.xml:95-98, share/extensions/Sony_HBD-20W.xml:21-24, share/extensions/Sony_HBD-F1.xml:21-24" + source_ref: "share/machines/Sony_HB-F1XD.xml:95-98, share/extensions/Sony_HBD-20W.xml:21-24, share/extensions/Sony_HBD-F1.xml:21-24, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" note: "share/extensions/Sony_HBD-20W.xml names it hbd-20w.rom, and share/extensions/Sony_HBD-F1.xml names it hbd-f1.rom." - name: "hb-f1xv_kanjifont.rom" @@ -220,7 +220,7 @@ files: required: false validation: [sha1] description: "Read by machine Sony_HB-F1XV and extension Sony_HBI-J1" - source_ref: "share/machines/Sony_HB-F1XV.xml:30-33, share/extensions/Sony_HBI-J1.xml:15-18" + source_ref: "share/machines/Sony_HB-F1XV.xml:30-33, share/extensions/Sony_HBI-J1.xml:15-18, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" note: "share/extensions/Sony_HBI-J1.xml names it hbi-j1_kanjifont.rom." - name: "Sony_HB-F1XV.rom" @@ -229,7 +229,7 @@ files: required: false validation: [sha1] description: "Read by machine Sony_HB-F1XV" - source_ref: "share/machines/Sony_HB-F1XV.xml:89-93, share/machines/Sony_HB-F1XV.xml:136-140, share/machines/Sony_HB-F1XV.xml:148-152, share/machines/Sony_HB-F1XV.xml:166-170, share/machines/Sony_HB-F1XV.xml:182-186" + source_ref: "share/machines/Sony_HB-F1XV.xml:89-93, share/machines/Sony_HB-F1XV.xml:136-140, share/machines/Sony_HB-F1XV.xml:148-152, share/machines/Sony_HB-F1XV.xml:166-170, share/machines/Sony_HB-F1XV.xml:182-186, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hb-f1xv_basic-bios2p.rom" path: "openmsx/share/systemroms/hb-f1xv_basic-bios2p.rom" @@ -237,7 +237,7 @@ files: required: false validation: [sha1] description: "Read by machine Sony_HB-F1XV" - source_ref: "share/machines/Sony_HB-F1XV.xml:94-97" + source_ref: "share/machines/Sony_HB-F1XV.xml:94-97, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hb-f1xv.rom" aliases: ["hbi-j1_msx-je.rom"] @@ -246,7 +246,7 @@ files: required: false validation: [sha1] description: "Read by machine Sony_HB-F1XV and extension Sony_HBI-J1" - source_ref: "share/machines/Sony_HB-F1XV.xml:108-111, share/extensions/Sony_HBI-J1.xml:27-30" + source_ref: "share/machines/Sony_HB-F1XV.xml:108-111, share/extensions/Sony_HBI-J1.xml:27-30, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" note: "share/extensions/Sony_HBI-J1.xml names it hbi-j1_msx-je.rom." - name: "hb-f1xv_msx2sub.rom" @@ -256,7 +256,7 @@ files: required: false validation: [sha1] description: "Read by machines Sony_HB-F1XV, Panasonic_FS-A1WSX" - source_ref: "share/machines/Sony_HB-F1XV.xml:141-144, share/machines/Panasonic_FS-A1WSX.xml:158-161" + source_ref: "share/machines/Sony_HB-F1XV.xml:141-144, share/machines/Panasonic_FS-A1WSX.xml:158-161, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" note: "share/machines/Panasonic_FS-A1WSX.xml names it fs-a1wsx_msx2psub.rom." - name: "hb-f1xv_kanjibasic.rom" @@ -266,7 +266,7 @@ files: required: false validation: [sha1] description: "Read by machines Sony_HB-F1XV, Panasonic_FS-A1WSX" - source_ref: "share/machines/Sony_HB-F1XV.xml:153-156, share/machines/Panasonic_FS-A1WSX.xml:165-168" + source_ref: "share/machines/Sony_HB-F1XV.xml:153-156, share/machines/Panasonic_FS-A1WSX.xml:165-168, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" note: "share/machines/Panasonic_FS-A1WSX.xml names it fs-a1wsx_kanjibasic.rom." - name: "hb-f1xv_disk.rom" @@ -275,7 +275,7 @@ files: required: false validation: [sha1] description: "Read by machine Sony_HB-F1XV" - source_ref: "share/machines/Sony_HB-F1XV.xml:171-174" + source_ref: "share/machines/Sony_HB-F1XV.xml:171-174, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hb-f1xv_fmbasic.rom" path: "openmsx/share/systemroms/hb-f1xv_fmbasic.rom" @@ -283,7 +283,7 @@ files: required: false validation: [sha1] description: "Read by machine Sony_HB-F1XV" - source_ref: "share/machines/Sony_HB-F1XV.xml:187-190" + source_ref: "share/machines/Sony_HB-F1XV.xml:187-190, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "fs-a1wsx_kanjifont.rom" aliases: ["fs-a1st_kanjifont.rom", "fs-a1gt_kanjifont.rom"] @@ -292,7 +292,7 @@ files: required: false validation: [sha1] description: "Read by machines Panasonic_FS-A1WSX, Panasonic_FS-A1ST, Panasonic_FS-A1GT" - source_ref: "share/machines/Panasonic_FS-A1WSX.xml:28-31, share/machines/Panasonic_FS-A1ST.xml:32-35, share/machines/Panasonic_FS-A1GT.xml:140-143" + source_ref: "share/machines/Panasonic_FS-A1WSX.xml:28-31, share/machines/Panasonic_FS-A1ST.xml:32-35, share/machines/Panasonic_FS-A1GT.xml:140-143, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" note: "share/machines/Panasonic_FS-A1ST.xml names it fs-a1st_kanjifont.rom, and share/machines/Panasonic_FS-A1GT.xml names it fs-a1gt_kanjifont.rom." - name: "fs-a1wsx_IC18.rom" @@ -301,7 +301,7 @@ files: required: false validation: [sha1] description: "Read by machine Panasonic_FS-A1WSX" - source_ref: "share/machines/Panasonic_FS-A1WSX.xml:97-101, share/machines/Panasonic_FS-A1WSX.xml:114-118, share/machines/Panasonic_FS-A1WSX.xml:153-157, share/machines/Panasonic_FS-A1WSX.xml:177-181" + source_ref: "share/machines/Panasonic_FS-A1WSX.xml:97-101, share/machines/Panasonic_FS-A1WSX.xml:114-118, share/machines/Panasonic_FS-A1WSX.xml:153-157, share/machines/Panasonic_FS-A1WSX.xml:177-181, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "fs-a1wsx_basic-bios2p.rom" path: "openmsx/share/systemroms/fs-a1wsx_basic-bios2p.rom" @@ -309,7 +309,7 @@ files: required: false validation: [sha1] description: "Read by machine Panasonic_FS-A1WSX" - source_ref: "share/machines/Panasonic_FS-A1WSX.xml:102-105" + source_ref: "share/machines/Panasonic_FS-A1WSX.xml:102-105, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "fs-a1wsx_fmbasic.rom" path: "openmsx/share/systemroms/fs-a1wsx_fmbasic.rom" @@ -317,7 +317,7 @@ files: required: false validation: [sha1] description: "Read by machine Panasonic_FS-A1WSX" - source_ref: "share/machines/Panasonic_FS-A1WSX.xml:119-123" + source_ref: "share/machines/Panasonic_FS-A1WSX.xml:119-123, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "fs-a1wsx_disk.rom" path: "openmsx/share/systemroms/fs-a1wsx_disk.rom" @@ -325,7 +325,7 @@ files: required: false validation: [sha1] description: "Read by machine Panasonic_FS-A1WSX" - source_ref: "share/machines/Panasonic_FS-A1WSX.xml:182-185" + source_ref: "share/machines/Panasonic_FS-A1WSX.xml:182-185, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "fs-a1wsx_firmware.rom" path: "openmsx/share/systemroms/fs-a1wsx_firmware.rom" @@ -333,7 +333,7 @@ files: required: false validation: [sha1] description: "Read by machine Panasonic_FS-A1WSX" - source_ref: "share/machines/Panasonic_FS-A1WSX.xml:211-214" + source_ref: "share/machines/Panasonic_FS-A1WSX.xml:211-214, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "fs-a1st_firmware.rom" path: "openmsx/share/systemroms/fs-a1st_firmware.rom" @@ -341,7 +341,7 @@ files: required: false validation: [sha1] description: "Read by machine Panasonic_FS-A1ST" - source_ref: "share/machines/Panasonic_FS-A1ST.xml:22-26" + source_ref: "share/machines/Panasonic_FS-A1ST.xml:22-26, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "fs-a1gt_firmware.rom" path: "openmsx/share/systemroms/fs-a1gt_firmware.rom" @@ -349,7 +349,7 @@ files: required: false validation: [sha1] description: "Read by machine Panasonic_FS-A1GT" - source_ref: "share/machines/Panasonic_FS-A1GT.xml:22-26" + source_ref: "share/machines/Panasonic_FS-A1GT.xml:22-26, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "ascii_msxdos22.rom" path: "openmsx/share/systemroms/ascii_msxdos22.rom" @@ -357,7 +357,7 @@ files: required: false validation: [sha1] description: "Read by extension ASCII_MSX-DOS2" - source_ref: "share/extensions/ASCII_MSX-DOS2.xml:18-21, share/extensions/ASCII_MSX-DOS2.xml:36-40" + source_ref: "share/extensions/ASCII_MSX-DOS2.xml:18-21, share/extensions/ASCII_MSX-DOS2.xml:36-40, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "msx-write_kanjifont.rom" aliases: ["ec-702_kanjifont.rom"] @@ -366,7 +366,7 @@ files: required: false validation: [sha1] description: "Read by extensions ASCII_Japanese_MSX-Write, Konami_EC-702" - source_ref: "share/extensions/ASCII_Japanese_MSX-Write.xml:15-18, share/extensions/Konami_EC-702.xml:14-17" + source_ref: "share/extensions/ASCII_Japanese_MSX-Write.xml:15-18, share/extensions/Konami_EC-702.xml:14-17, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" note: "share/extensions/Konami_EC-702.xml names it ec-702_kanjifont.rom." - name: "Japanese MSX-Write (1986) (Ascii) (J).rom" @@ -375,7 +375,7 @@ files: required: false validation: [sha1] description: "Read by extension ASCII_Japanese_MSX-Write" - source_ref: "share/extensions/ASCII_Japanese_MSX-Write.xml:26-29" + source_ref: "share/extensions/ASCII_Japanese_MSX-Write.xml:26-29, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "msx-write_ii_kanjifont.rom" path: "openmsx/share/systemroms/msx-write_ii_kanjifont.rom" @@ -383,7 +383,7 @@ files: required: false validation: [sha1] description: "Read by extension ASCII_Japanese_MSX-Write_II" - source_ref: "share/extensions/ASCII_Japanese_MSX-Write_II.xml:15-18" + source_ref: "share/extensions/ASCII_Japanese_MSX-Write_II.xml:15-18, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "Japanese MSX-Write II (1988) (Ascii) (J).rom" path: "openmsx/share/systemroms/Japanese MSX-Write II (1988) (Ascii) (J).rom" @@ -391,7 +391,7 @@ files: required: false validation: [sha1] description: "Read by extension ASCII_Japanese_MSX-Write_II" - source_ref: "share/extensions/ASCII_Japanese_MSX-Write_II.xml:28-31" + source_ref: "share/extensions/ASCII_Japanese_MSX-Write_II.xml:28-31, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "msxdos22.rom" path: "openmsx/share/systemroms/msxdos22.rom" @@ -399,7 +399,7 @@ files: required: false validation: [sha1] description: "Read by extension msxdos2" - source_ref: "share/extensions/msxdos2.xml:17-22" + source_ref: "share/extensions/msxdos2.xml:17-22, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "avt_dpf-550_disk.rom" path: "openmsx/share/systemroms/avt_dpf-550_disk.rom" @@ -407,7 +407,7 @@ files: required: false validation: [sha1] description: "Read by extension AVT_DPF-550" - source_ref: "share/extensions/AVT_DPF-550.xml:20-23" + source_ref: "share/extensions/AVT_DPF-550.xml:20-23, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "mu-pack.rom" path: "openmsx/share/systemroms/mu-pack.rom" @@ -415,7 +415,7 @@ files: required: false validation: [sha1] description: "Read by extension mu-PACK" - source_ref: "share/extensions/mu-PACK.xml:26-29" + source_ref: "share/extensions/mu-PACK.xml:26-29, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "fmpak.rom" path: "openmsx/share/systemroms/fmpak.rom" @@ -423,7 +423,7 @@ files: required: false validation: [sha1] description: "Read by extension Checkmark_FM_Stereo_PAK" - source_ref: "share/extensions/Checkmark_FM_Stereo_PAK.xml:25-28" + source_ref: "share/extensions/Checkmark_FM_Stereo_PAK.xml:25-28, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "computer_mates_disk_interface.rom" path: "openmsx/share/systemroms/computer_mates_disk_interface.rom" @@ -431,7 +431,7 @@ files: required: false validation: [sha1] description: "Read by extension Computer_Mates_Disk_Interface" - source_ref: "share/extensions/Computer_Mates_Disk_Interface.xml:44-47" + source_ref: "share/extensions/Computer_Mates_Disk_Interface.xml:44-47, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "ROM_Hunter_Mk2.rom" path: "openmsx/share/systemroms/ROM_Hunter_Mk2.rom" @@ -439,7 +439,7 @@ files: required: false validation: [sha1] description: "Read by extension ROM_Hunter_Mk2" - source_ref: "share/extensions/ROM_Hunter_Mk2.xml:17-20" + source_ref: "share/extensions/ROM_Hunter_Mk2.xml:17-20, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "ddx_3.0.rom" path: "openmsx/share/systemroms/ddx_3.0.rom" @@ -447,7 +447,7 @@ files: required: false validation: [sha1] description: "Read by extension DDX_3.0" - source_ref: "share/extensions/DDX_3.0.xml:20-25" + source_ref: "share/extensions/DDX_3.0.xml:20-25, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "mr512.rom" path: "openmsx/share/systemroms/mr512.rom" @@ -455,7 +455,7 @@ files: required: false validation: [sha1] description: "Read by extension MegaRAM_Disk" - source_ref: "share/extensions/MegaRAM_Disk.xml:19-22" + source_ref: "share/extensions/MegaRAM_Disk.xml:19-22, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "ESPUNAPI_IO.rom" path: "openmsx/share/systemroms/ESPUNAPI_IO.rom" @@ -463,7 +463,7 @@ files: required: false validation: [sha1] description: "Read by extension smxwifi" - source_ref: "share/extensions/smxwifi.xml:18-21" + source_ref: "share/extensions/smxwifi.xml:18-21, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "chakkari.rom" path: "openmsx/share/systemroms/chakkari.rom" @@ -471,7 +471,7 @@ files: required: false validation: [sha1] description: "Read by extension Epson_Chakkari_Copy" - source_ref: "share/extensions/Epson_Chakkari_Copy.xml:18-22" + source_ref: "share/extensions/Epson_Chakkari_Copy.xml:18-22, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "rs232.rom" path: "openmsx/share/systemroms/rs232.rom" @@ -479,7 +479,7 @@ files: required: false validation: [sha1] description: "Read by extension rs232" - source_ref: "share/extensions/rs232.xml:18-22" + source_ref: "share/extensions/rs232.xml:18-22, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "ct-80e.rom" path: "openmsx/share/systemroms/ct-80e.rom" @@ -487,7 +487,7 @@ files: required: false validation: [sha1] description: "Read by extension Gradiente_CT-80E" - source_ref: "share/extensions/Gradiente_CT-80E.xml:26-29" + source_ref: "share/extensions/Gradiente_CT-80E.xml:26-29, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "mpc-310h.rom" path: "openmsx/share/systemroms/mpc-310h.rom" @@ -495,7 +495,7 @@ files: required: false validation: [sha1] description: "Read by extension Hitachi_MPC-310H" - source_ref: "share/extensions/Hitachi_MPC-310H.xml:20-23" + source_ref: "share/extensions/Hitachi_MPC-310H.xml:20-23, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "yrw801.rom" path: "openmsx/share/systemroms/yrw801.rom" @@ -503,7 +503,7 @@ files: required: false validation: [sha1] description: "Read by extensions Jun_Soft_DalSoRi_R2, moonsound" - source_ref: "share/extensions/Jun_Soft_DalSoRi_R2.xml:22-25, share/extensions/moonsound.xml:16-19" + source_ref: "share/extensions/Jun_Soft_DalSoRi_R2.xml:22-25, share/extensions/moonsound.xml:16-19, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "Konami EC-701 program.rom" path: "openmsx/share/systemroms/Konami EC-701 program.rom" @@ -511,7 +511,7 @@ files: required: false validation: [sha1] description: "Read by extension Konami_EC-701" - source_ref: "share/extensions/Konami_EC-701.xml:17-21" + source_ref: "share/extensions/Konami_EC-701.xml:17-21, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "Konami EC-701 dictionary.rom" path: "openmsx/share/systemroms/Konami EC-701 dictionary.rom" @@ -519,7 +519,7 @@ files: required: false validation: [sha1] description: "Read by extension Konami_EC-701" - source_ref: "share/extensions/Konami_EC-701.xml:22-25" + source_ref: "share/extensions/Konami_EC-701.xml:22-25, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "megaflashrom_scc+_sd.rom" path: "openmsx/share/systemroms/megaflashrom_scc+_sd.rom" @@ -527,7 +527,7 @@ files: required: false validation: [sha1] description: "Flash content read by extension MegaFlashROM_SCC+_SD, found by its sha1 alone: the XML names no file" - source_ref: "share/extensions/MegaFlashROM_SCC+_SD.xml:20-22" + source_ref: "share/extensions/MegaFlashROM_SCC+_SD.xml:20-22, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "cdx-2.rom" path: "openmsx/share/systemroms/cdx-2.rom" @@ -535,7 +535,7 @@ files: required: false validation: [sha1] description: "Read by extension Microsol_CDX-2" - source_ref: "share/extensions/Microsol_CDX-2.xml:20-23" + source_ref: "share/extensions/Microsol_CDX-2.xml:20-23, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "ml-30dc.rom" path: "openmsx/share/systemroms/ml-30dc.rom" @@ -543,7 +543,7 @@ files: required: false validation: [sha1] description: "Read by extension Mitsubishi_ML-30DC_ML-30FD" - source_ref: "share/extensions/Mitsubishi_ML-30DC_ML-30FD.xml:19-22" + source_ref: "share/extensions/Mitsubishi_ML-30DC_ML-30FD.xml:19-22, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "fmpac.rom" path: "openmsx/share/systemroms/fmpac.rom" @@ -551,7 +551,7 @@ files: required: false validation: [sha1] description: "Read by extensions mbstereo, fmpac" - source_ref: "share/extensions/mbstereo.xml:23-27, share/extensions/fmpac.xml:22-26" + source_ref: "share/extensions/mbstereo.xml:23-27, share/extensions/fmpac.xml:22-26, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "novaxis.rom" path: "openmsx/share/systemroms/novaxis.rom" @@ -559,7 +559,7 @@ files: required: false validation: [sha1] description: "Read by extension Gouda_SCSI" - source_ref: "share/extensions/Gouda_SCSI.xml:18-21" + source_ref: "share/extensions/Gouda_SCSI.xml:18-21, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "msxpibios.rom" path: "openmsx/share/systemroms/msxpibios.rom" @@ -567,7 +567,7 @@ files: required: false validation: [sha1] description: "Read by extension MSXPi" - source_ref: "share/extensions/MSXPi.xml:28-35" + source_ref: "share/extensions/MSXPi.xml:28-35, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "msxaudio13.OPL3_mono.rom" path: "openmsx/share/systemroms/msxaudio13.OPL3_mono.rom" @@ -575,7 +575,7 @@ files: required: false validation: [sha1] description: "Read by extension OPL3Cartridge2_mono" - source_ref: "share/extensions/OPL3Cartridge2_mono.xml:29-34" + source_ref: "share/extensions/OPL3Cartridge2_mono.xml:29-34, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "msxaudio13.OPL3_stereo.rom" path: "openmsx/share/systemroms/msxaudio13.OPL3_stereo.rom" @@ -583,7 +583,7 @@ files: required: false validation: [sha1] description: "Read by extension OPL3Cartridge2_stereo" - source_ref: "share/extensions/OPL3Cartridge2_stereo.xml:29-34" + source_ref: "share/extensions/OPL3Cartridge2_stereo.xml:29-34, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "cf-sm003_main.rom" path: "openmsx/share/systemroms/cf-sm003_main.rom" @@ -591,7 +591,7 @@ files: required: false validation: [sha1] description: "Read by extension National_CF-SM003" - source_ref: "share/extensions/National_CF-SM003.xml:18-21" + source_ref: "share/extensions/National_CF-SM003.xml:18-21, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "cf-sm003_kanjifont.rom" path: "openmsx/share/systemroms/cf-sm003_kanjifont.rom" @@ -599,7 +599,7 @@ files: required: false validation: [sha1] description: "Read by extension National_CF-SM003" - source_ref: "share/extensions/National_CF-SM003.xml:22-25" + source_ref: "share/extensions/National_CF-SM003.xml:22-25, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "cf-sm003_data.rom" aliases: ["skw-01_data.rom"] @@ -608,7 +608,7 @@ files: required: false validation: [sha1] description: "Read by extensions National_CF-SM003, Yamaha_SKW-01" - source_ref: "share/extensions/National_CF-SM003.xml:26-29, share/extensions/Yamaha_SKW-01.xml:26-29" + source_ref: "share/extensions/National_CF-SM003.xml:26-29, share/extensions/Yamaha_SKW-01.xml:26-29, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" note: "share/extensions/Yamaha_SKW-01.xml names it skw-01_data.rom." - name: "NEOSC.ROM" @@ -617,7 +617,7 @@ files: required: false validation: [sha1] description: "Read by extension Neos_MA-20R" - source_ref: "share/extensions/Neos_MA-20R.xml:21-24" + source_ref: "share/extensions/Neos_MA-20R.xml:21-24, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "NEOSV.ROM" path: "openmsx/share/systemroms/NEOSV.ROM" @@ -625,7 +625,7 @@ files: required: false validation: [sha1] description: "Read by extension Neos_MA-20V" - source_ref: "share/extensions/Neos_MA-20V.xml:22-25" + source_ref: "share/extensions/Neos_MA-20V.xml:22-25, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "fs-fd1a.rom" path: "openmsx/share/systemroms/fs-fd1a.rom" @@ -633,7 +633,7 @@ files: required: false validation: [sha1] description: "Read by extension Panasonic_FS-FD1A" - source_ref: "share/extensions/Panasonic_FS-FD1A.xml:17-20" + source_ref: "share/extensions/Panasonic_FS-FD1A.xml:17-20, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "fs-ca1.rom" path: "openmsx/share/systemroms/fs-ca1.rom" @@ -641,7 +641,7 @@ files: required: false validation: [sha1] description: "Read by extension Panasonic_FS-CA1" - source_ref: "share/extensions/Panasonic_FS-CA1.xml:25-30" + source_ref: "share/extensions/Panasonic_FS-CA1.xml:25-30, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "fs-pw1_kanjifont.rom" path: "openmsx/share/systemroms/fs-pw1_kanjifont.rom" @@ -649,7 +649,7 @@ files: required: false validation: [sha1] description: "Read by extension Panasonic_FS-PW1" - source_ref: "share/extensions/Panasonic_FS-PW1.xml:15-18" + source_ref: "share/extensions/Panasonic_FS-PW1.xml:15-18, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "fs-pw1_msxword.rom" path: "openmsx/share/systemroms/fs-pw1_msxword.rom" @@ -657,7 +657,7 @@ files: required: false validation: [sha1] description: "Read by extension Panasonic_FS-PW1" - source_ref: "share/extensions/Panasonic_FS-PW1.xml:26-29" + source_ref: "share/extensions/Panasonic_FS-PW1.xml:26-29, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "nms1200_6.rom" path: "openmsx/share/systemroms/nms1200_6.rom" @@ -665,7 +665,7 @@ files: required: false validation: [sha1] description: "Read by extension Philips_NMS_1200" - source_ref: "share/extensions/Philips_NMS_1200.xml:19-23" + source_ref: "share/extensions/Philips_NMS_1200.xml:19-23, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "nms1205.rom" path: "openmsx/share/systemroms/nms1205.rom" @@ -673,7 +673,7 @@ files: required: false validation: [sha1] description: "Read by extension Philips_NMS_1205" - source_ref: "share/extensions/Philips_NMS_1205.xml:39-42" + source_ref: "share/extensions/Philips_NMS_1205.xml:39-42, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "msxaudio12pre4a.rom" path: "openmsx/share/systemroms/msxaudio12pre4a.rom" @@ -681,7 +681,7 @@ files: required: false validation: [sha1] description: "Read by extension Boosted_audio" - source_ref: "share/extensions/Boosted_audio.xml:36-42" + source_ref: "share/extensions/Boosted_audio.xml:36-42, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "carnivore2.rom" path: "openmsx/share/systemroms/carnivore2.rom" @@ -689,7 +689,7 @@ files: required: false validation: [sha1] description: "Flash content read by extension Carnivore2, found by its sha1 alone: the XML names no file" - source_ref: "share/extensions/Carnivore2.xml:19-23" + source_ref: "share/extensions/Carnivore2.xml:19-23, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "mfd-001_disk.rom" path: "openmsx/share/systemroms/mfd-001_disk.rom" @@ -697,7 +697,7 @@ files: required: false validation: [sha1] description: "Read by extension Sanyo_MFD-001" - source_ref: "share/extensions/Sanyo_MFD-001.xml:18-21" + source_ref: "share/extensions/Sanyo_MFD-001.xml:18-21, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "mrs-001.rom" path: "openmsx/share/systemroms/mrs-001.rom" @@ -705,7 +705,7 @@ files: required: false validation: [sha1] description: "Read by extension Sanyo_MRS-001" - source_ref: "share/extensions/Sanyo_MRS-001.xml:19-22" + source_ref: "share/extensions/Sanyo_MRS-001.xml:19-22, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hb3600_disk.rom" path: "openmsx/share/systemroms/hb3600_disk.rom" @@ -713,7 +713,7 @@ files: required: false validation: [sha1] description: "Read by extension Sharp_HB-3600" - source_ref: "share/extensions/Sharp_HB-3600.xml:18-21" + source_ref: "share/extensions/Sharp_HB-3600.xml:18-21, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hddrom.rom" path: "openmsx/share/systemroms/hddrom.rom" @@ -721,7 +721,7 @@ files: required: false validation: [sha1] description: "Read by extension Beer_IDE" - source_ref: "share/extensions/Beer_IDE.xml:18-23" + source_ref: "share/extensions/Beer_IDE.xml:18-23, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hbi-j1_kanjibasic.rom" path: "openmsx/share/systemroms/hbi-j1_kanjibasic.rom" @@ -729,7 +729,7 @@ files: required: false validation: [sha1] description: "Read by extension Sony_HBI-J1" - source_ref: "share/extensions/Sony_HBI-J1.xml:38-41" + source_ref: "share/extensions/Sony_HBI-J1.xml:38-41, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hbd-50.rom" path: "openmsx/share/systemroms/hbd-50.rom" @@ -737,7 +737,7 @@ files: required: false validation: [sha1] description: "Read by extension Sony_HBD-50" - source_ref: "share/extensions/Sony_HBD-50.xml:24-28" + source_ref: "share/extensions/Sony_HBD-50.xml:24-28, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hbk-30.rom" path: "openmsx/share/systemroms/hbk-30.rom" @@ -745,7 +745,7 @@ files: required: false validation: [sha1] description: "Read by extension Sony_HBK-30" - source_ref: "share/extensions/Sony_HBK-30.xml:19-22" + source_ref: "share/extensions/Sony_HBK-30.xml:19-22, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hbi-232.rom" path: "openmsx/share/systemroms/hbi-232.rom" @@ -753,7 +753,7 @@ files: required: false validation: [sha1] description: "Read by extension Sony_HBI-232" - source_ref: "share/extensions/Sony_HBI-232.xml:18-21" + source_ref: "share/extensions/Sony_HBI-232.xml:18-21, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "sensor-kid.rom" path: "openmsx/share/systemroms/sensor-kid.rom" @@ -761,7 +761,7 @@ files: required: false validation: [sha1] description: "Read by extension SensorKid" - source_ref: "share/extensions/SensorKid.xml:20-23" + source_ref: "share/extensions/SensorKid.xml:20-23, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "svi-707_disk.rom" path: "openmsx/share/systemroms/svi-707_disk.rom" @@ -769,7 +769,7 @@ files: required: false validation: [sha1] description: "Read by extension Spectravideo_SVI-707" - source_ref: "share/extensions/Spectravideo_SVI-707.xml:19-22" + source_ref: "share/extensions/Spectravideo_SVI-707.xml:19-22, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "svi-707_cpm.rom" path: "openmsx/share/systemroms/svi-707_cpm.rom" @@ -777,7 +777,7 @@ files: required: false validation: [sha1] description: "Read by extension Spectravideo_SVI-707" - source_ref: "share/extensions/Spectravideo_SVI-707.xml:23-26" + source_ref: "share/extensions/Spectravideo_SVI-707.xml:23-26, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "Nextor-2.1.1.SunriseIDE.ROM" path: "openmsx/share/systemroms/Nextor-2.1.1.SunriseIDE.ROM" @@ -785,7 +785,7 @@ files: required: false validation: [sha1] description: "Read by extension SunriseIDE_Nextor" - source_ref: "share/extensions/SunriseIDE_Nextor.xml:17-22" + source_ref: "share/extensions/SunriseIDE_Nextor.xml:17-22, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "ide250.dat" path: "openmsx/share/systemroms/ide250.dat" @@ -793,7 +793,7 @@ files: required: false validation: [sha1] description: "Read by extension ide" - source_ref: "share/extensions/ide.xml:17-22" + source_ref: "share/extensions/ide.xml:17-22, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "nowindDos2.rom" path: "openmsx/share/systemroms/nowindDos2.rom" @@ -801,7 +801,7 @@ files: required: false validation: [sha1] description: "Read by extension nowind" - source_ref: "share/extensions/nowind.xml:17-23" + source_ref: "share/extensions/nowind.xml:17-23, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "ym2608_adpcm_rom.bin" path: "openmsx/share/systemroms/ym2608_adpcm_rom.bin" @@ -809,7 +809,7 @@ files: required: false validation: [sha1] description: "Read by extension Makoto" - source_ref: "share/extensions/Makoto.xml:15-18" + source_ref: "share/extensions/Makoto.xml:15-18, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "TDC600.rom" path: "openmsx/share/systemroms/TDC600.rom" @@ -817,7 +817,7 @@ files: required: false validation: [sha1] description: "Read by extension Talent_TDC-600" - source_ref: "share/extensions/Talent_TDC-600.xml:18-21" + source_ref: "share/extensions/Talent_TDC-600.xml:18-21, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "dpf-550_disk.rom" path: "openmsx/share/systemroms/dpf-550_disk.rom" @@ -825,7 +825,7 @@ files: required: false validation: [sha1] description: "Read by extension Talent_DPF-550" - source_ref: "share/extensions/Talent_DPF-550.xml:18-21" + source_ref: "share/extensions/Talent_DPF-550.xml:18-21, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "Tecall_MSX_RAMFILE_TM220.rom" path: "openmsx/share/systemroms/Tecall_MSX_RAMFILE_TM220.rom" @@ -833,7 +833,7 @@ files: required: false validation: [sha1] description: "Read by extension Tecall_MSX_RAMFILE_TM220" - source_ref: "share/extensions/Tecall_MSX_RAMFILE_TM220.xml:17-20" + source_ref: "share/extensions/Tecall_MSX_RAMFILE_TM220.xml:17-20, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hx-f101pe.rom" path: "openmsx/share/systemroms/hx-f101pe.rom" @@ -841,7 +841,7 @@ files: required: false validation: [sha1] description: "Read by extension Toshiba_HX-F101PE" - source_ref: "share/extensions/Toshiba_HX-F101PE.xml:20-23" + source_ref: "share/extensions/Toshiba_HX-F101PE.xml:20-23, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "hx-mu900.rom" path: "openmsx/share/systemroms/hx-mu900.rom" @@ -849,7 +849,7 @@ files: required: false validation: [sha1] description: "Read by extension Toshiba_HX-MU900" - source_ref: "share/extensions/Toshiba_HX-MU900.xml:26-29" + source_ref: "share/extensions/Toshiba_HX-MU900.xml:26-29, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "fd-03.rom" path: "openmsx/share/systemroms/fd-03.rom" @@ -857,7 +857,7 @@ files: required: false validation: [sha1] description: "Read by extension Yamaha_FD-03" - source_ref: "share/extensions/Yamaha_FD-03.xml:20-26" + source_ref: "share/extensions/Yamaha_FD-03.xml:20-26, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "FD-051.BIN" path: "openmsx/share/systemroms/FD-051.BIN" @@ -865,7 +865,7 @@ files: required: false validation: [sha1] description: "Read by extension Yamaha_FD-05" - source_ref: "share/extensions/Yamaha_FD-05.xml:22-25" + source_ref: "share/extensions/Yamaha_FD-05.xml:22-25, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "sfg-05.rom" path: "openmsx/share/systemroms/sfg-05.rom" @@ -873,7 +873,7 @@ files: required: false validation: [sha1] description: "Read by extension Yamaha_SFG-05" - source_ref: "share/extensions/Yamaha_SFG-05.xml:31-34" + source_ref: "share/extensions/Yamaha_SFG-05.xml:31-34, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "skw-05_main.rom" path: "openmsx/share/systemroms/skw-05_main.rom" @@ -881,7 +881,7 @@ files: required: false validation: [sha1] description: "Read by extension Yamaha_SKW-05_embedded" - source_ref: "share/extensions/Yamaha_SKW-05_embedded.xml:32-36" + source_ref: "share/extensions/Yamaha_SKW-05_embedded.xml:32-36, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "skw-05_data.rom" path: "openmsx/share/systemroms/skw-05_data.rom" @@ -889,7 +889,7 @@ files: required: false validation: [sha1] description: "Read by extension Yamaha_SKW-05_embedded" - source_ref: "share/extensions/Yamaha_SKW-05_embedded.xml:37-40" + source_ref: "share/extensions/Yamaha_SKW-05_embedded.xml:37-40, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "skw-01_main.rom" path: "openmsx/share/systemroms/skw-01_main.rom" @@ -897,7 +897,7 @@ files: required: false validation: [sha1] description: "Read by extension Yamaha_SKW-01" - source_ref: "share/extensions/Yamaha_SKW-01.xml:18-21" + source_ref: "share/extensions/Yamaha_SKW-01.xml:18-21, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" - name: "skw-01_kanjifont.rom" path: "openmsx/share/systemroms/skw-01_kanjifont.rom" @@ -905,4 +905,4 @@ files: required: false validation: [sha1] description: "Read by extension Yamaha_SKW-01" - source_ref: "share/extensions/Yamaha_SKW-01.xml:22-25" + source_ref: "share/extensions/Yamaha_SKW-01.xml:22-25, build/libretro_share.py:17-23, src/libretro/LibretroCore.cc:146-160, src/config/HardwareConfig.cc:35-45, 249-277, src/memory/Rom.cc:135-136, 165-218" diff --git a/emulators/openmsx.yml b/emulators/openmsx.yml index c8f8d3913..aa080e505 100644 --- a/emulators/openmsx.yml +++ b/emulators/openmsx.yml @@ -80,7 +80,7 @@ files: size: 65536 description: "NMS 8245 combined system ROM (BIOS+BASIC 0x0000-0x7FFF, Sub ROM 0x8000-0xBFFF, FDC 0xC000-0xFFFF)" validation: [sha1] - source_ref: "share/machines/Boosted_MSX2_EN.xml:24,65,111" + source_ref: "share/machines/Boosted_MSX2_EN.xml:24,65,111, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: fmpac.rom path: "share/systemroms/fmpac.rom" @@ -88,7 +88,7 @@ files: required: true description: "Panasonic SW-M004 FMPAC (FM-PAC) sound cartridge ROM" validation: [sha1] - source_ref: "share/machines/Boosted_MSX2_EN.xml:83" + source_ref: "share/machines/Boosted_MSX2_EN.xml:83, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: phc-70fd2_basickun.rom path: "share/systemroms/phc-70fd2_basickun.rom" @@ -96,7 +96,7 @@ files: required: true description: "Sanyo PHC-70FD2 MSX-BASIC Kun compiler ROM" validation: [sha1] - source_ref: "share/machines/Boosted_MSX2_EN.xml:89, share/machines/Boosted_MSX2+_JP.xml:167, share/machines/Boosted_MSXturboR_with_IDE.xml:79" + source_ref: "share/machines/Boosted_MSX2_EN.xml:89, share/machines/Boosted_MSX2+_JP.xml:167, share/machines/Boosted_MSXturboR_with_IDE.xml:79, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: yrw801.rom path: "share/systemroms/yrw801.rom" @@ -104,7 +104,7 @@ files: required: true description: "Yamaha YRW801 MoonSound wavetable ROM" validation: [sha1] - source_ref: "share/machines/Boosted_MSX2_EN.xml:186, share/machines/Boosted_MSX2+_JP.xml:120, share/machines/Boosted_MSXturboR_with_IDE.xml:203" + source_ref: "share/machines/Boosted_MSX2_EN.xml:186, share/machines/Boosted_MSX2+_JP.xml:120, share/machines/Boosted_MSXturboR_with_IDE.xml:203, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" # ------------------------------------------------------- # Boosted_MSX2+_JP (msx2+) @@ -116,7 +116,7 @@ files: required: true description: "FS-A1WSX MSX2+ BIOS and BASIC ROM" validation: [sha1] - source_ref: "share/machines/Boosted_MSX2+_JP.xml:143" + source_ref: "share/machines/Boosted_MSX2+_JP.xml:143, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: fs-a1wsx_fmbasic.rom path: "share/systemroms/fs-a1wsx_fmbasic.rom" @@ -124,7 +124,7 @@ files: required: true description: "FS-A1WSX MSX-MUSIC (OPLL) ROM" validation: [sha1] - source_ref: "share/machines/Boosted_MSX2+_JP.xml:155" + source_ref: "share/machines/Boosted_MSX2+_JP.xml:155, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: fs-a1wsx_msx2psub.rom installed_on: [retropie] @@ -133,7 +133,7 @@ files: required: true description: "FS-A1WSX MSX2+ Sub ROM" validation: [sha1] - source_ref: "share/machines/Boosted_MSX2+_JP.xml:218" + source_ref: "share/machines/Boosted_MSX2+_JP.xml:218, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" note: "RetroPie unpacks openmsxroms.tar.gz into the installed share/systemroms, which the file pool scans. This ROM is in it as MSX2PEXT.ROM and is found by its SHA1." - name: fs-a1wsx_kanjibasic.rom @@ -142,7 +142,7 @@ files: required: true description: "FS-A1WSX Kanji Driver with BASIC ROM" validation: [sha1] - source_ref: "share/machines/Boosted_MSX2+_JP.xml:225" + source_ref: "share/machines/Boosted_MSX2+_JP.xml:225, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: fs-a1wsx_disk.rom path: "share/systemroms/fs-a1wsx_disk.rom" @@ -150,7 +150,7 @@ files: required: true description: "FS-A1WSX FDC (TC8566AF) disk controller ROM" validation: [sha1] - source_ref: "share/machines/Boosted_MSX2+_JP.xml:237" + source_ref: "share/machines/Boosted_MSX2+_JP.xml:237, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: fs-a1wsx_firmware.rom path: "share/systemroms/fs-a1wsx_firmware.rom" @@ -158,7 +158,7 @@ files: required: true description: "FS-A1WSX Panasonic firmware ROM" validation: [sha1] - source_ref: "share/machines/Boosted_MSX2+_JP.xml:251" + source_ref: "share/machines/Boosted_MSX2+_JP.xml:251, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: fs-a1wsx_kanjifont.rom path: "share/systemroms/fs-a1wsx_kanjifont.rom" @@ -167,7 +167,7 @@ files: required: true description: "Kanji font ROM (shared by FS-A1WSX and FS-A1GT machines)" validation: [sha1] - source_ref: "share/machines/Boosted_MSX2+_JP.xml:27-28, share/machines/Panasonic_FS-A1WSX.xml:29-30, share/machines/Boosted_MSXturboR_with_IDE.xml:215-216, share/machines/Panasonic_FS-A1GT.xml:141-142" + source_ref: "share/machines/Boosted_MSX2+_JP.xml:27-28, share/machines/Panasonic_FS-A1WSX.xml:29-30, share/machines/Boosted_MSXturboR_with_IDE.xml:215-216, share/machines/Panasonic_FS-A1GT.xml:141-142, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" note: "Panasonic_FS-A1WSX.xml and Boosted_MSX2+_JP.xml name it fs-a1wsx_kanjifont.rom, Panasonic_FS-A1GT.xml and Boosted_MSXturboR_with_IDE.xml name it fs-a1gt_kanjifont.rom, all four with the same sha1." # ------------------------------------------------------- @@ -182,7 +182,7 @@ files: required: true description: "FS-A1GT turboR combined firmware (512KB, contains BIOS, Sub ROM, Kanji, FDC, MSX-MUSIC, Opening ROM)" validation: [sha1] - source_ref: "share/machines/Boosted_MSXturboR_with_IDE.xml:23" + source_ref: "share/machines/Boosted_MSXturboR_with_IDE.xml:23, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: ide250.dat path: "share/systemroms/ide250.dat" @@ -190,7 +190,7 @@ files: required: true description: "Sunrise IDE 2.50 interface ROM" validation: [sha1] - source_ref: "share/machines/Boosted_MSXturboR_with_IDE.xml:49" + source_ref: "share/machines/Boosted_MSXturboR_with_IDE.xml:49, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: ide250.zip path: "share/systemroms/ide250.zip" @@ -213,7 +213,7 @@ files: required: true description: "ColecoVision system BIOS ROM" validation: [sha1] - source_ref: "share/machines/ColecoVision_SGM.xml:57" + source_ref: "share/machines/ColecoVision_SGM.xml:57, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" # ------------------------------------------------------- # Spectravideo_SVI-328 (spectravideo) @@ -224,7 +224,7 @@ files: required: true description: "SVI-328 BASIC v1.11 ROM" validation: [sha1] - source_ref: "share/machines/Spectravideo_SVI-328.xml:52" + source_ref: "share/machines/Spectravideo_SVI-328.xml:52, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" # ------------------------------------------------------- # Pioneer_PX-7 (laserdisc) @@ -236,7 +236,7 @@ files: required: true description: "Pioneer PX-7 MSX1 BIOS and BASIC ROM" validation: [sha1] - source_ref: "share/machines/Pioneer_PX-7.xml:67" + source_ref: "share/machines/Pioneer_PX-7.xml:67, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: px-7_pbasic.rom path: "share/systemroms/px-7_pbasic.rom" @@ -244,7 +244,7 @@ files: required: true description: "Pioneer PX-7 LaserDisc PBASIC controller ROM" validation: [sha1] - source_ref: "share/machines/Pioneer_PX-7.xml:82" + source_ref: "share/machines/Pioneer_PX-7.xml:82, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" # ------------------------------------------------------- # Machines whose ROMs RetroBat lists. Each ROM is found in the @@ -261,7 +261,7 @@ files: size: 32768 description: "National CF-3300 MSX1 BIOS and BASIC ROM (also used by CF-1200, CF-2700, CF-3000, FS-1300)" validation: [sha1] - source_ref: "share/machines/National_CF-3300.xml:51-52" + source_ref: "share/machines/National_CF-3300.xml:51-52, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: cf-3300_disk.rom path: "share/systemroms/cf-3300_disk.rom" @@ -270,7 +270,7 @@ files: size: 16384 description: "National CF-3300 disk controller ROM (also used by Gradiente Expert DD Plus)" validation: [sha1] - source_ref: "share/machines/National_CF-3300.xml:75-76" + source_ref: "share/machines/National_CF-3300.xml:75-76, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: fs-5500_basic-bios2.rom path: "share/systemroms/fs-5500_basic-bios2.rom" @@ -279,7 +279,7 @@ files: size: 32768 description: "National FS-5500 MSX2 BIOS and BASIC ROM" validation: [sha1] - source_ref: "share/machines/National_FS-5500F2.xml:76-77, share/machines/National_FS-5500F1.xml:78" + source_ref: "share/machines/National_FS-5500F2.xml:76-77, share/machines/National_FS-5500F1.xml:78, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: fs-5500_msx2sub.rom path: "share/systemroms/fs-5500_msx2sub.rom" @@ -288,7 +288,7 @@ files: size: 16384 description: "National FS-5500 MSX2 Sub ROM" validation: [sha1] - source_ref: "share/machines/National_FS-5500F2.xml:100-101, share/machines/National_FS-5500F1.xml:102" + source_ref: "share/machines/National_FS-5500F2.xml:100-101, share/machines/National_FS-5500F1.xml:102, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: fs-5500_kanjibasic.rom path: "share/systemroms/fs-5500_kanjibasic.rom" @@ -297,7 +297,7 @@ files: size: 32768 description: "National FS-5500 Kanji Driver ROM (also used by FS-4600F and FS-5000F2)" validation: [sha1] - source_ref: "share/machines/National_FS-5500F2.xml:107-108, share/machines/National_FS-5500F1.xml:109" + source_ref: "share/machines/National_FS-5500F2.xml:107-108, share/machines/National_FS-5500F1.xml:109, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: fs-5500_kanjifont.rom path: "share/systemroms/fs-5500_kanjifont.rom" @@ -306,7 +306,7 @@ files: size: 131072 description: "National FS-5500 Kanji font ROM (also used by FS-4000, FS-4500 and FS-4700F)" validation: [sha1] - source_ref: "share/machines/National_FS-5500F2.xml:20-21, share/machines/National_FS-5500F1.xml:22" + source_ref: "share/machines/National_FS-5500F2.xml:20-21, share/machines/National_FS-5500F1.xml:22, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: fs-5500_superimp.rom path: "share/systemroms/fs-5500_superimp.rom" @@ -315,7 +315,7 @@ files: size: 32768 description: "National FS-5500 Super Impose ROM" validation: [sha1] - source_ref: "share/machines/National_FS-5500F2.xml:117-118, share/machines/National_FS-5500F1.xml:119" + source_ref: "share/machines/National_FS-5500F2.xml:117-118, share/machines/National_FS-5500F1.xml:119, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: nms8245_msx2sub.rom path: "share/systemroms/nms8245_msx2sub.rom" @@ -326,7 +326,7 @@ files: size: 16384 description: "Philips NMS 8245 MSX2 Sub ROM (1.05/1.06 and 1.08 revisions)" validation: [sha1] - source_ref: "share/machines/Philips_NMS_8245.xml:108-110" + source_ref: "share/machines/Philips_NMS_8245.xml:108-110, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: vg8020_basic-bios1.rom path: "share/systemroms/vg8020_basic-bios1.rom" @@ -335,7 +335,7 @@ files: size: 32768 description: "Philips VG 8020 MSX1 BIOS and BASIC ROM (also used by AVT DPC-200, Goldstar FC-200, Toshiba HX-20E, HX-22I, HX-51I)" validation: [sha1] - source_ref: "share/machines/Philips_VG_8020.xml:53-54" + source_ref: "share/machines/Philips_VG_8020.xml:53-54, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: svi-738_basic-bios1.rom path: "share/systemroms/svi-738_basic-bios1.rom" @@ -344,7 +344,7 @@ files: size: 32768 description: "Spectravideo SVI-738 MSX1 BIOS and BASIC ROM" validation: [sha1] - source_ref: "share/machines/Spectravideo_SVI-738.xml:53-54" + source_ref: "share/machines/Spectravideo_SVI-738.xml:53-54, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: svi-738_se_basic-bios1.rom path: "share/systemroms/svi-738_se_basic-bios1.rom" @@ -353,7 +353,7 @@ files: size: 32768 description: "Spectravideo SVI-738 (Sweden) MSX1 BIOS and BASIC ROM" validation: [sha1] - source_ref: "share/machines/Spectravideo_SVI-738_SE.xml:53-54" + source_ref: "share/machines/Spectravideo_SVI-738_SE.xml:53-54, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: svi-738_rs232.rom path: "share/systemroms/svi-738_rs232.rom" @@ -362,7 +362,7 @@ files: size: 8192 description: "Spectravideo SVI-738 RS-232 interface ROM" validation: [sha1] - source_ref: "share/machines/Spectravideo_SVI-738.xml:76-77, share/machines/Spectravideo_SVI-738_SE.xml:76-77" + source_ref: "share/machines/Spectravideo_SVI-738.xml:76-77, share/machines/Spectravideo_SVI-738_SE.xml:76-77, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" - name: svi-738_disk.rom path: "share/systemroms/svi-738_disk.rom" @@ -373,4 +373,4 @@ files: required: false description: "Spectravideo SVI-738 disk controller ROM" validation: [sha1] - source_ref: "share/machines/Spectravideo_SVI-738.xml:90-93, share/machines/Spectravideo_SVI-738_SE.xml:90-93" + source_ref: "share/machines/Spectravideo_SVI-738.xml:90-93, share/machines/Spectravideo_SVI-738_SE.xml:90-93, build/install.py:39, src/config/HardwareConfig.cc:25-33, 249-277, src/memory/Rom.cc:97-98, 120-195" From 26c71d03dcdff63e6029746e154d1a85a9cedc27 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:29:40 +0100 Subject: [PATCH 09/31] docs: cite the fMSX ROM loader in the profile ROM, font and CARTS.SHA entries cited the copy in fMSX/ROMs, a file and not a reader. They now cite the system directory taken as ProgDir, the chdir to it, the LoadROM, LoadCart or LoadFNT call that names each file, and the function that opens it. --- emulators/fmsx.yml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/emulators/fmsx.yml b/emulators/fmsx.yml index ab89b3dd1..e0b62cdc0 100644 --- a/emulators/fmsx.yml +++ b/emulators/fmsx.yml @@ -71,7 +71,7 @@ files: required: true system: msx note: "MSX1 main BIOS (32 KB). Loaded for MSX1 model (fMSX/MSX.c:697)." - source_ref: "fMSX/ROMs/MSX.ROM" + source_ref: "libretro.c:1186, fMSX/MSX.c:523, 697, 2810-2831" # -- MSX2 BIOS -- @@ -83,7 +83,7 @@ files: required: true system: msx2 note: "MSX2 main BIOS (32 KB). Loaded for MSX2 model (fMSX/MSX.c:713)." - source_ref: "fMSX/ROMs/MSX2.ROM" + source_ref: "libretro.c:1186, fMSX/MSX.c:523, 713, 2810-2831" - name: MSX2EXT.ROM installed_on: [recalbox] @@ -93,7 +93,7 @@ files: required: true system: msx2 note: "MSX2 extension BIOS (16 KB). Loaded alongside MSX2.ROM (fMSX/MSX.c:714)." - source_ref: "fMSX/ROMs/MSX2EXT.ROM" + source_ref: "libretro.c:1186, fMSX/MSX.c:523, 714, 2810-2831" # -- MSX2+ BIOS (default model) -- @@ -105,7 +105,7 @@ files: required: true system: msx2plus note: "MSX2+ main BIOS (32 KB). Loaded for MSX2+ model, the default (fMSX/MSX.c:735)." - source_ref: "fMSX/ROMs/MSX2P.ROM" + source_ref: "libretro.c:1186, fMSX/MSX.c:523, 735, 2810-2831" - name: MSX2PEXT.ROM installed_on: [recalbox] @@ -115,7 +115,7 @@ files: required: true system: msx2plus note: "MSX2+ extension BIOS (16 KB). Loaded alongside MSX2P.ROM (fMSX/MSX.c:736)." - source_ref: "fMSX/ROMs/MSX2PEXT.ROM" + source_ref: "libretro.c:1186, fMSX/MSX.c:523, 736, 2810-2831" # -- Disk support -- @@ -126,7 +126,7 @@ files: sha1: 032cb1c1c75b9a191fa1230978971698d9d2a17f required: false note: "Disk controller BIOS (16 KB). Needed for .dsk content. Enable 'Simulate DiskROM' option (fMSX/MSX.c:784)." - source_ref: "fMSX/ROMs/DISK.ROM" + source_ref: "libretro.c:1186, fMSX/MSX.c:523, 784, 2810-2831" # -- Optional expansion ROMs -- @@ -137,7 +137,7 @@ files: sha1: 9d789166e3caf28e4742fe933d962e99618c633d required: false note: "FM-PAC cartridge ROM (64 KB, YM2413 FM synthesis). Auto-loaded into first free slot (fMSX/MSX.c:561)." - source_ref: "fMSX/ROMs/FMPAC.ROM" + source_ref: "libretro.c:1186, fMSX/MSX.c:523, 561, 2875-2890" - name: KANJI.ROM installed_on: [recalbox] @@ -146,7 +146,7 @@ files: sha1: 84a645becec0a25d3ab7a909cde1b242699a8662 required: false note: "Kanji font ROM (128 KB). Auto-loaded if present, no option needed (fMSX/MSX.c:534)." - source_ref: "fMSX/ROMs/KANJI.ROM" + source_ref: "libretro.c:1186, fMSX/MSX.c:523, 534, 2810-2831" - name: MSXDOS2.ROM installed_on: [recalbox] @@ -155,7 +155,7 @@ files: sha1: c36c9e0f96738a340381e23b4f97245388801a46 required: false note: "MSX-DOS 2 ROM (64 KB). Loaded when 'fmsx_dos2' option enabled and model is MSX2 or MSX2+ (fMSX/MSX.c:549)." - source_ref: "fMSX/ROMs/MSXDOS2.ROM" + source_ref: "libretro.c:1186, fMSX/MSX.c:523, 549, 2875-2890" - name: PAINTER.ROM installed_on: [recalbox] @@ -164,7 +164,7 @@ files: sha1: 7fd2a28c4fdaeb140f3c8c8fb90271b1472c97b9 required: false note: "Paint utility ROM (64 KB). Auto-loaded for MSX2 and MSX2+ models (fMSX/MSX.c:556)." - source_ref: "fMSX/ROMs/PAINTER.ROM" + source_ref: "libretro.c:1186, fMSX/MSX.c:523, 556, 2875-2890" - name: RS232.ROM installed_on: [recalbox] @@ -173,7 +173,7 @@ files: sha1: 7aec0134ad6a5177f4056fcb6047083e8e00529b required: false note: "RS-232C serial interface ROM (16 KB + 256 B). Loaded into slot 3:3 (fMSX/MSX.c:537)." - source_ref: "fMSX/ROMs/RS232.ROM" + source_ref: "libretro.c:1186, fMSX/MSX.c:523, 537, 2810-2831" # -- GameMaster (not bundled, requires core option) -- @@ -201,42 +201,42 @@ files: required: false md5: 85b38e4128bbc300e675f55b278683a8 note: "Default text font. Loaded by LoadFNT() (fMSX/MSX.c:527). Same content as CYRILLIC.FNT." - source_ref: "fMSX/ROMs/DEFAULT.FNT, libretro.c:1547" + source_ref: "libretro.c:955-963, 1186, 1547, fMSX/MSX.c:523-527, 2787-2794" - name: ITALIC.FNT installed_on: [recalbox] required: false md5: c83e50e9f33b8dd893c414691822740d note: "Italic text font." - source_ref: "fMSX/ROMs/ITALIC.FNT, libretro.c:1547" + source_ref: "libretro.c:955-963, 1186, 1547, fMSX/MSX.c:523-527, 2787-2794" - name: INTERNAT.FNT installed_on: [recalbox] required: false md5: ac4f4a90c1b1887db48ded39c9d9c847 note: "International text font." - source_ref: "fMSX/ROMs/INTERNAT.FNT, libretro.c:1547" + source_ref: "libretro.c:955-963, 1186, 1547, fMSX/MSX.c:523-527, 2787-2794" - name: CYRILLIC.FNT installed_on: [recalbox] required: false md5: 85b38e4128bbc300e675f55b278683a8 note: "Cyrillic text font. Same content as DEFAULT.FNT." - source_ref: "fMSX/ROMs/CYRILLIC.FNT, libretro.c:1547" + source_ref: "libretro.c:955-963, 1186, 1547, fMSX/MSX.c:523-527, 2787-2794" - name: KOREAN.FNT installed_on: [recalbox] required: false md5: 73291e76638a2f5aa2eceb843df468f4 note: "Korean text font." - source_ref: "fMSX/ROMs/KOREAN.FNT, libretro.c:1547" + source_ref: "libretro.c:955-963, 1186, 1547, fMSX/MSX.c:523-527, 2787-2794" - name: JAPANESE.FNT installed_on: [recalbox] required: false md5: aa28f0703b951a6be8df3e28e20d263d note: "Japanese text font." - source_ref: "fMSX/ROMs/JAPANESE.FNT, libretro.c:1547" + source_ref: "libretro.c:955-963, 1186, 1547, fMSX/MSX.c:523-527, 2787-2794" # -- Cartridge identification database -- @@ -252,4 +252,4 @@ files: required: false md5: 74b0f217fa0e2b8bb5a2f8e2ecc69da3 note: "SHA1 database for cartridge identification and mapper detection. Read when CARTS.CRC is absent or holds no matching line (fMSX/MSX.c:2716)." - source_ref: "fMSX/ROMs/CARTS.SHA" + source_ref: "libretro.c:1186, fMSX/MSX.c:523, 2716" From 4d376e9727118696d8a2108bd7cdbdc38198cdd7 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:34:05 +0100 Subject: [PATCH 10/31] docs: write the release notes without pronouns The release page is public text like the site. render() said "finds your setup", "file for your system" and "your BIOS folder". The pronoun test now renders the notes from release.json, once more with a pack in parts, and fails on any pronoun the script writes. --- scripts/release_notes.py | 6 +++--- tests/test_site_pronouns.py | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/scripts/release_notes.py b/scripts/release_notes.py index dff6f6f49..7308826a4 100644 --- a/scripts/release_notes.py +++ b/scripts/release_notes.py @@ -126,7 +126,7 @@ def render(record: dict, platforms_dir: str, whats_new: str) -> str: lines = [ "### Install in one command", "", - "It finds your setup and its BIOS folder, then downloads only what is missing.", + "It finds the setup and its BIOS folder, then downloads only what is missing.", "", "**Linux, macOS, Steam Deck**", "```sh", @@ -138,12 +138,12 @@ def render(record: dict, platforms_dir: str, whats_new: str) -> str: install_command("powershell"), "```", "", - (f"**On a handheld**: copy the `RetroBIOS` file for your system to the card" + (f"**On a handheld**: copy the `RetroBIOS` file for the system to the card" f" ([which one]({SITE}wiki/installer/#on-a-handheld-the-retrobios-port))."), "", "### Or download a pack", "", - "Extract it into your BIOS folder.", + "Extract it into the BIOS folder.", "", ] if any(len(pack["assets"]) > 1 for pack in packs.values()): diff --git a/tests/test_site_pronouns.py b/tests/test_site_pronouns.py index 7acc265a4..1914d30f8 100644 --- a/tests/test_site_pronouns.py +++ b/tests/test_site_pronouns.py @@ -186,6 +186,23 @@ class SitePronouns(unittest.TestCase): hits = _hits(files) self.assertEqual(hits, [], "\n".join(hits)) + def test_release_notes(self): + """The release page is public text too. Rendered from the committed + record, and once more with a pack in parts, its own paragraph.""" + sys.path.insert(0, str(ROOT / "scripts")) + import release_notes + import release_record + + record = release_record.load_record(ROOT / "release.json") + first = next(iter(record["packs"])) + parted = {**record, "packs": {**record["packs"], first: { + **record["packs"][first], "assets": ["a.part1of2.zip", "a.part2of2.zip"]}}} + platforms = str(ROOT / "platforms") + hits = [f"release notes:{number}: {line}" + for sample in (record, parted) + for number, line in pronouns(release_notes.render(sample, platforms, "x"))] + self.assertEqual(hits, [], "\n".join(hits)) + def test_every_allowed_quote_says_why(self): for quoted, reason in {**NAMES, **INSTALLER, **SOURCE}.items(): with self.subTest(quoted=quoted): From 6cbfca11976deaf6a192f0be111cb6913b7cfbc3 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:34:25 +0100 Subject: [PATCH 11/31] fix: read QEMU firmware from its loaders Entries that cited only pc-bios/meson.build now cite the code that opens them. bios-256k.bin is the firmware of the pc and q35 machines (pc_piix.c:466, pc_q35.c:349) and pc is the machine the core starts for an .iso, so it is required, and a missing image exits in x86_bios_rom_init. bios.bin is read only by the ISA PC or when the firmware option is cleared, so it is optional. qboot.rom is microvm's firmware with ACPI off. The pxe-*.rom images and efi-eepro100.rom are read through a romfile= option, the EDK2 code images through -bios. The three EDK2 variable store templates and vof-nvram.bin are removed: no code resolves them through the data directory, a pflash drive is opened by path and the core runs from the content folder (ui/libretro.c:697). --- emulators/qemu.yml | 100 ++++++++++++++++----------------------------- 1 file changed, 36 insertions(+), 64 deletions(-) diff --git a/emulators/qemu.yml b/emulators/qemu.yml index b8bce138b..ebcf2f8ec 100644 --- a/emulators/qemu.yml +++ b/emulators/qemu.yml @@ -39,11 +39,11 @@ files: sha1: "f402170ee4f374c304a7ce0b139d6cecb1732aff" md5: "e9ca30100c47a26b66488444c5b0bd15" size: 131072 - required: true + required: false note: > - SeaBIOS legacy BIOS for x86/x86_64 PC emulation. Default firmware - loaded by pc_sysfw.c for standard PC machine types. - source_ref: "source hw/i386/pc_sysfw.c:222, 243" + SeaBIOS for the ISA PC machine, and for a PC machine whose firmware + option is cleared. The pc and q35 machines load bios-256k.bin. + source_ref: "source hw/i386/pc_sysfw.c:222, 243, source hw/i386/x86-common.c:993-994" - name: "SeaBIOS (256 KB)" installed_on: [retrodeck] @@ -51,11 +51,12 @@ files: sha1: "5fe6078506094333106e6b3f33c7185dea7f0268" md5: "d3dab3095c73cad67afd3cc16a88479c" size: 262144 - required: false + required: true note: > - SeaBIOS 256 KB variant. Some machine types or configurations - may prefer this larger image. - source_ref: "source pc-bios/meson.build:30" + Firmware of the pc and q35 machines, set by their default machine + options. pc is the default machine the core starts for an .iso, + .img or .qcow, and a missing image stops QEMU. + source_ref: "source pc-bios/meson.build:30, source ui/libretro.c:24-29, 734, source hw/i386/pc_piix.c:466, 486, source hw/i386/pc_q35.c:349, source hw/i386/x86-common.c:993-1003, 1043-1045" - name: "SeaBIOS microvm" installed_on: [retrodeck] @@ -76,8 +77,8 @@ files: md5: "387c48aef9497c6c2b914b1e6b9bc7aa" size: 16384 required: false - note: "Minimal x86 firmware for fast Linux kernel booting." - source_ref: "source pc-bios/meson.build:32" + note: "Firmware of the microvm machine when ACPI is off." + source_ref: "source pc-bios/meson.build:32, source hw/i386/microvm.c:57, 277-281, source hw/i386/x86-common.c:993-994" # ======================================================== # x86 VGA BIOS (SeaVGABIOS / LGPL VGA BIOS) @@ -248,7 +249,7 @@ files: size: 67072 required: false note: "iPXE PXE boot ROM for Intel e1000 NIC (8086:100e)." - source_ref: "source pc-bios/meson.build:47" + source_ref: "source pc-bios/meson.build:47, source hw/pci/pci.c:2362-2363" - name: "PXE eepro100" installed_on: [retrodeck] @@ -268,7 +269,7 @@ files: size: 61440 required: false note: "iPXE PXE boot ROM for NE2000 PCI NIC (1050:0940)." - source_ref: "source pc-bios/meson.build:49" + source_ref: "source pc-bios/meson.build:49, source hw/pci/pci.c:2362-2363" - name: "PXE pcnet" installed_on: [retrodeck] @@ -278,7 +279,7 @@ files: size: 61440 required: false note: "iPXE PXE boot ROM for AMD PCnet NIC (1022:2000)." - source_ref: "source pc-bios/meson.build:50" + source_ref: "source pc-bios/meson.build:50, source hw/pci/pci.c:2362-2363" - name: "PXE rtl8139" installed_on: [retrodeck] @@ -288,7 +289,7 @@ files: size: 61440 required: false note: "iPXE PXE boot ROM for Realtek RTL8139 NIC (10ec:8139)." - source_ref: "source pc-bios/meson.build:51" + source_ref: "source pc-bios/meson.build:51, source hw/pci/pci.c:2362-2363" - name: "PXE virtio" installed_on: [retrodeck] @@ -298,7 +299,7 @@ files: size: 60416 required: false note: "iPXE PXE boot ROM for VirtIO NIC (1af4:1000)." - source_ref: "source pc-bios/meson.build:52" + source_ref: "source pc-bios/meson.build:52, source hw/pci/pci.c:2362-2363" # ======================================================== # EFI NETWORK BOOT ROMs (iPXE UEFI) @@ -331,7 +332,7 @@ files: size: 159232 required: false note: "iPXE EFI boot ROM for Intel eepro100 NIC." - source_ref: "source pc-bios/meson.build:54" + source_ref: "source pc-bios/meson.build:54, source hw/pci/pci.c:2362-2363" - name: "EFI ne2k_pci" installed_on: [retrodeck] @@ -392,7 +393,7 @@ files: size: 3653632 required: false note: "TianoCore UEFI firmware for x86_64. Built from edk2-stable202302." - source_ref: "source pc-bios/meson.build:12" + source_ref: "source pc-bios/meson.build:12, source hw/i386/x86-common.c:993-994" - name: "EDK2 x86_64 Secure Boot UEFI" path: "qemu/edk2-x86_64-secure-code.fd" @@ -400,7 +401,7 @@ files: size: 3653632 required: false note: "TianoCore UEFI firmware for x86_64 with Secure Boot support." - source_ref: "source pc-bios/meson.build:13" + source_ref: "source pc-bios/meson.build:13, source hw/i386/x86-common.c:993-994" - name: "EDK2 i386 UEFI" path: "qemu/edk2-i386-code.fd" @@ -408,7 +409,7 @@ files: size: 3653632 required: false note: "TianoCore UEFI firmware for i386." - source_ref: "source pc-bios/meson.build:9" + source_ref: "source pc-bios/meson.build:9, source hw/i386/x86-common.c:993-994" - name: "EDK2 i386 Secure Boot UEFI" path: "qemu/edk2-i386-secure-code.fd" @@ -416,15 +417,7 @@ files: size: 3653632 required: false note: "TianoCore UEFI firmware for i386 with Secure Boot support." - source_ref: "source pc-bios/meson.build:10" - - - name: "EDK2 i386 UEFI vars template" - path: "qemu/edk2-i386-vars.fd" - sha1: "b62e676c9317a32aaa9ee1d76268d8c55663bd6e" - size: 540672 - required: false - note: "UEFI variable store template for i386/x86_64 EDK2 firmware." - source_ref: "source pc-bios/meson.build:11" + source_ref: "source pc-bios/meson.build:10, source hw/i386/x86-common.c:993-994" - name: "EDK2 AArch64 UEFI" path: "qemu/edk2-aarch64-code.fd" @@ -432,7 +425,7 @@ files: size: 67108864 required: false note: "TianoCore UEFI firmware for AArch64 (ARM 64-bit)." - source_ref: "source pc-bios/meson.build:4" + source_ref: "source pc-bios/meson.build:4, source hw/arm/virt.c:1331" - name: "EDK2 ARM UEFI" path: "qemu/edk2-arm-code.fd" @@ -440,15 +433,7 @@ files: size: 67108864 required: false note: "TianoCore UEFI firmware for ARM (32-bit)." - source_ref: "source pc-bios/meson.build:5" - - - name: "EDK2 ARM UEFI vars template" - path: "qemu/edk2-arm-vars.fd" - sha1: "b051167e0e57bd13d77ed92ef7b474872f44ec6d" - size: 67108864 - required: false - note: "UEFI variable store template for ARM/AArch64 EDK2 firmware." - source_ref: "source pc-bios/meson.build:6" + source_ref: "source pc-bios/meson.build:5, source hw/arm/virt.c:1331" - name: "EDK2 RISC-V UEFI" path: "qemu/edk2-riscv-code.fd" @@ -456,15 +441,7 @@ files: size: 33554432 required: false note: "TianoCore UEFI firmware for RISC-V 64-bit." - source_ref: "source pc-bios/meson.build:7" - - - name: "EDK2 RISC-V UEFI vars template" - path: "qemu/edk2-riscv-vars.fd" - sha1: "c4e6cce4247ba8f32f528c1c69f49228f616677f" - size: 33554432 - required: false - note: "UEFI variable store template for RISC-V EDK2 firmware." - source_ref: "source pc-bios/meson.build:8" + source_ref: "source pc-bios/meson.build:7, source hw/riscv/boot.c:89-92" # ======================================================== # POWERPC FIRMWARE @@ -507,15 +484,6 @@ files: note: "Minimal Open Firmware shim for -machine pseries,x-vof=on. Also default for Pegasos II." source_ref: "source hw/ppc/spapr.c:107, source hw/ppc/pegasos2.c:43" - - name: "VOF NVRAM" - installed_on: [retrodeck] - path: "qemu/vof-nvram.bin" - sha1: "5d1184609b87f78635f0575467a1c3f440900ff0" - size: 16384 - required: false - note: "NVRAM template for VOF (Virtual Open Firmware)." - source_ref: "source pc-bios/meson.build:83" - - name: "U-Boot e500" installed_on: [retrodeck] path: "qemu/u-boot.e500" @@ -532,7 +500,7 @@ files: size: 524288 required: false note: "U-Boot for Sam460ex (AmigaOne) PowerPC board." - source_ref: "source pc-bios/meson.build:74" + source_ref: "source pc-bios/meson.build:74, source hw/ppc/sam460ex.c:46, 120-126, source hw/core/loader.c:1078-1079" - name: "QEMU VGA Mac driver" installed_on: [retrodeck] @@ -752,7 +720,7 @@ files: size: 9882 required: false note: "Device tree blob for Xilinx Petalogix ML605 MicroBlaze board. MicroBlaze target not built in libretro core." - source_ref: "source pc-bios/meson.build:91" + source_ref: "source pc-bios/meson.build:91, source hw/microblaze/petalogix_ml605_mmu.c:49, 209, source hw/microblaze/boot.c:133" - name: "Petalogix S3ADSP1800 DTB (MicroBlaze)" installed_on: [retrodeck] @@ -761,7 +729,7 @@ files: size: 8161 required: false note: "Device tree blob for Xilinx Petalogix S3ADSP1800 MicroBlaze board. MicroBlaze target not built in libretro core." - source_ref: "source pc-bios/meson.build:90" + source_ref: "source pc-bios/meson.build:90, source hw/microblaze/petalogix_s3adsp1800_mmu.c:44, 129, source hw/microblaze/boot.c:133" - name: "Virtex ML507 DTB (PPC)" path: "qemu/virtex-ml507.dtb" @@ -776,16 +744,20 @@ notes: this path via qemu_add_data_dir() in ui/libretro.c:659-660. default_usage: > For typical x86/x86_64 usage (loading .iso/.img/.qcow files directly), - only bios.bin (or bios-256k.bin) and vgabios.bin are strictly needed. - Other VGA BIOS variants are loaded depending on the emulated GPU. - PXE/EFI ROMs are only needed for network booting. + the default pc machine needs bios-256k.bin and the VGA BIOS of its + display. Other VGA BIOS variants are loaded depending on the emulated GPU. + A NIC reads its default romfile. The pxe-*.rom images and efi-eepro100.rom + are read only when a romfile= option names them (hw/pci/pci.c:2362-2363). multi_arch: > The libretro build targets 17 architectures. Non-x86 firmware is only needed when using .qemu_cmd_line files that invoke a different qemu-system-* binary (e.g. qemu-system-ppc for MacOS 9). edk2: > EDK2 UEFI firmware is shipped as bz2-compressed blobs in pc-bios/. These - provide UEFI boot for x86, ARM, and RISC-V machine types. Users specify - them via -bios or pflash in .qemu_cmd_line files. + provide UEFI boot for x86, ARM, and RISC-V machine types. No machine + names them: a .qemu_cmd_line names a code image with -bios, which is + looked up in the data directory. pflash drives, the variable store + templates included, are opened by path from the content folder + (ui/libretro.c:697). experimental: "This core is marked is_experimental=true in its .info file." version: "Based on QEMU 9.0.50 (io12/qemu-libretro)" From 81e98d69b0a754ddd9a36c8cb614b1e8b0e588cf Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:37:14 +0100 Subject: [PATCH 12/31] docs: cite the ScummVM readers of its data files Theme and engine data entries named only scummvm.rc or an engine_data makefile. They now cite bundle_datafiles.sh, which builds the libretro bundle from those lists, the themepath or extrapath the core sets, and the code that opens each file: the theme lookup, the icon, shader, translation and font archives, and each engine's loader. --- emulators/scummvm.yml | 96 +++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/emulators/scummvm.yml b/emulators/scummvm.yml index 08fa6d172..59887d876 100644 --- a/emulators/scummvm.yml +++ b/emulators/scummvm.yml @@ -112,7 +112,7 @@ files: required: false sha1: "aa2dfd12c11c6e6f3baaf7bf199bd6bcd71a520c" md5: "ee71d6cd464c618c632e6fd62b430d2c" - source_ref: "upstream dists/scummvm.rc:24" + source_ref: "upstream dists/scummvm.rc:24, source backends/platform/libretro/scripts/bundle_datafiles.sh:74, source backends/platform/libretro/src/libretro-os-utils.cpp:241, source gui/gui-manager.cpp:87-88, source gui/ThemeEngine.cpp:2229-2256, 2052-2066" note: "Modern GUI theme for ScummVM launcher." - name: "scummclassic.zip" @@ -121,7 +121,7 @@ files: required: false sha1: "69836fb392710f2182df07bab8960e8a2d92c1a9" md5: "8f37bd19dd51be456ac8f005fd5669a8" - source_ref: "upstream dists/scummvm.rc:23" + source_ref: "upstream dists/scummvm.rc:23, source backends/platform/libretro/scripts/bundle_datafiles.sh:74, source backends/platform/libretro/src/libretro-os-utils.cpp:241, source gui/gui-manager.cpp:87-88, source gui/ThemeEngine.cpp:2229-2256, 2052-2066" note: "Classic GUI theme for ScummVM launcher." - name: "scummremastered.zip" @@ -130,7 +130,7 @@ files: required: false sha1: "03e53349eefc39ce25220bfcb1ae4a580704d29d" md5: "0d990484d0dfc1680b20cfabcae373cd" - source_ref: "upstream dists/scummvm.rc:25" + source_ref: "upstream dists/scummvm.rc:25, source backends/platform/libretro/scripts/bundle_datafiles.sh:74, source backends/platform/libretro/src/libretro-os-utils.cpp:241, source gui/gui-manager.cpp:87-88, source gui/ThemeEngine.cpp:2229-2256, 2052-2066" note: "Remastered GUI theme for ScummVM launcher." - name: "residualvm.zip" @@ -139,7 +139,7 @@ files: required: false sha1: "589b622f55c9944c4883e4163d4d49508e22e056" md5: "b2811fa9b209733b61cd49ddb21e1e95" - source_ref: "upstream dists/scummvm.rc:26" + source_ref: "upstream dists/scummvm.rc:26, source backends/platform/libretro/scripts/bundle_datafiles.sh:74, source backends/platform/libretro/src/libretro-os-utils.cpp:241, source gui/gui-manager.cpp:87-88, source gui/ThemeEngine.cpp:2229-2256, 2052-2066" note: "ResidualVM theme for 3D adventure games (Grim Fandango, Myst III)." - name: "gui-icons.dat" @@ -148,7 +148,7 @@ files: required: false sha1: "38e74e6994924781487a0d39cc53dc4708a90c1c" md5: "9c59e0e9875434456ec1b7eb8e51666f" - source_ref: "upstream dists/scummvm.rc:27" + source_ref: "upstream dists/scummvm.rc:27, source backends/platform/libretro/scripts/bundle_datafiles.sh:74, source backends/platform/libretro/src/libretro-os-utils.cpp:241, source gui/gui-manager.cpp:118" note: "GUI icon pack used by the ScummVM launcher interface." - name: "shaders.dat" @@ -157,7 +157,7 @@ files: required: false sha1: "c67ec35c3f6e2ba7f09b8f61a78df7f713ff040c" md5: "f073f17187d0bfa3e7ebb7f328847969" - source_ref: "upstream dists/scummvm.rc:28" + source_ref: "upstream dists/scummvm.rc:28, source backends/platform/libretro/scripts/bundle_datafiles.sh:74, source backends/platform/libretro/src/libretro-os-utils.cpp:241, source backends/graphics/opengl/opengl-graphics.cpp:423, source gui/shaderbrowser-dialog.cpp:88" note: "Compiled shader pack for the GUI rendering pipeline." - name: "translations.dat" @@ -166,7 +166,7 @@ files: required: false sha1: "e5b6f6d6473e2d6aa0a250fd9983b573ebf6fbe4" md5: "a206e54bac1af13559ac8b2d9e550577" - source_ref: "upstream dists/scummvm.rc:43" + source_ref: "upstream dists/scummvm.rc:43, source backends/platform/libretro/scripts/bundle_datafiles.sh:74, source backends/platform/libretro/src/libretro-os-utils.cpp:241, source common/translation.h:288, source common/translation.cpp:282-290" note: "GUI translation strings for ScummVM launcher localization." # ================================================================ @@ -180,7 +180,7 @@ files: required: false sha1: "379f9def6d0de4b4bad18b0177df81783a51f17b" md5: "73cf5bd61896442a990e363f284a0bc2" - source_ref: "source dists/engine-data/engine_data_core.mk" + source_ref: "source dists/engine-data/engine_data_core.mk, source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/achievements.cpp:105-109" note: "Achievement definitions for supported games." - name: "classicmacfonts.dat" @@ -189,7 +189,7 @@ files: required: false sha1: "768b6231c6068e3d9b4f2cc6b1b1e5485578fde1" md5: "d4264d4573f22d290e033e1d834d7221" - source_ref: "source dists/engine-data/engine_data_core.mk" + source_ref: "source dists/engine-data/engine_data_core.mk, source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source graphics/macgui/macfontmanager.cpp:222" note: "Classic Macintosh bitmap fonts for Mac game rendering." - name: "encoding.dat" @@ -198,7 +198,7 @@ files: required: false sha1: "11d3873337827195bc16c3d3175ad00f1777ed95" md5: "f2e88b2faec499a4914c3a0bcffc7db1" - source_ref: "source dists/engine-data/engine_data_core.mk" + source_ref: "source dists/engine-data/engine_data_core.mk, source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source common/str-enc.cpp:142" note: "Character encoding tables for text rendering across languages." - name: "helpdialog.zip" @@ -207,7 +207,7 @@ files: required: false sha1: "386d8a89e180f8abab53e5d5926b6a81ee4b31dd" md5: "a9584a928c0f52ef28b33d8702983c35" - source_ref: "source dists/engine-data/engine_data_core.mk" + source_ref: "source dists/engine-data/engine_data_core.mk, source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source gui/helpdialog.cpp:69, 147-148, source graphics/image-archive.cpp:50-54" note: "Help dialog assets for the in-game help system." - name: "macgui.dat" @@ -216,7 +216,7 @@ files: required: false sha1: "1eed577281b8819367d1ee99b1a76ff3e1920735" md5: "d97f2965013b343dd3d4fdbbc7192f15" - source_ref: "source dists/engine-data/engine_data_core.mk" + source_ref: "source dists/engine-data/engine_data_core.mk, source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source graphics/macgui/datafiles.cpp:37, 81" note: "Macintosh GUI widget data for Mac-style game interfaces." # ================================================================ @@ -230,7 +230,7 @@ files: required: false sha1: "775b12b7e787bbaaeb73aa45b1ad3bb383e041ef" md5: "4f9dd40b455876d5c54b5ebd93aec88c" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_ACCESS)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_ACCESS), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/access/resources.cpp:44" note: "Engine data for Access Software games (e.g. Amazon, Martian Memorandum)." - name: "bagel.dat" @@ -239,7 +239,7 @@ files: required: false sha1: "f83084c72b1ff8e16f9c013e5ef7cfbb5f3cc835" md5: "f6d90885f6962f89de02e34031111599" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_BAGEL)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_BAGEL), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/bagel/spacebar/baglib/bagel.cpp:113, source common/engine_data.cpp:253" note: "Engine data for Bagel engine games." - name: "cryo.dat" @@ -248,7 +248,7 @@ files: required: false sha1: "220c2fe52d26b8607abeb2ad4a8ea4324daea5ba" md5: "fc5886ea5388f20eae299bb408da5bcc" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_CRYO)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_CRYO), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/cryo/resource.cpp:303" note: "Engine data for Cryo Interactive games (e.g. Dune, Lost Eden)." - name: "cryomni3d.dat" @@ -257,7 +257,7 @@ files: required: false sha1: "3971847e26be0abad8196caf03e5852a81ddbdea" md5: "7224c7a94074addeb69015b1346695d2" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_CRYOMNI3D)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_CRYOMNI3D), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/cryomni3d/cryomni3d.cpp:82" note: "Engine data for CryOmni3D games (Versailles 1685)." - name: "darkseed.dat" @@ -266,7 +266,7 @@ files: required: false sha1: "343172f1bfff8cb8c4abefa95e211379f39583b7" md5: "9a9cfe40dcca517f130d4430bd1af643" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_DARKSEED)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_DARKSEED), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/darkseed/darkseed.cpp:66-71" note: "Engine data for Dark Seed (H.R. Giger adventure game)." - name: "drascula.dat" @@ -275,7 +275,7 @@ files: required: false sha1: "05c97e92439b67aea8f6eb7fc96db023edf62124" md5: "b304979ed642a6dcaf26f43f8a37a1de" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_DRASCULA)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_DRASCULA), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/drascula/drascula.cpp:987" note: "Engine data for Drascula: The Vampire Strikes Back." - name: "freescape.dat" @@ -284,7 +284,7 @@ files: required: false sha1: "c6b3d3152e4e2ff4c9bf55e103bb39ed7faca2bd" md5: "71697f90fb0c7747616dbb0799ce966b" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_FREESCAPE)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_FREESCAPE), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/freescape/freescape.h:61, source engines/freescape/assets.cpp:115" note: "Engine data for Freescape games (Driller, Dark Side, Total Eclipse)." - name: "got.aud" @@ -293,7 +293,7 @@ files: required: false sha1: "209ab6d86a7c44f241689c5511b2027f7ad2c7c4" md5: "d13cc3c481e84e787ec8aa86dffc565f" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_GOT)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_GOT), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/got/sound.cpp:38, 194-198" note: "Audio data for Game of Thrones engine." - name: "got.gfx" @@ -302,7 +302,7 @@ files: required: false sha1: "0c9603da78b980bcf391bbf5f9103a5a642c4ee8" md5: "a29f591769bd731df0d9ddd3a191fe8c" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_GOT)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_GOT), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/got/gfx/gfx_chunks.cpp:85" note: "Graphics data for Game of Thrones engine." - name: "hadesch_translations.dat" @@ -311,7 +311,7 @@ files: required: false sha1: "17aae444b3010e72e092635d25d3b93c104b0ad2" md5: "7857da7e56a11e0749fb45100c323b3c" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_HADESCH)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_HADESCH), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/hadesch/hadesch.cpp:476" note: "Translation data for Hades Challenge." - name: "hugo.dat" @@ -320,7 +320,7 @@ files: required: false sha1: "74a5fa172f5327fedc145cb9eccc8fd050b9cfb9" md5: "a865e70f1b0998a500f522dab441c8fc" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_HUGO)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_HUGO), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/hugo/hugo.cpp:457" note: "Engine data for Hugo's House of Horrors trilogy." - name: "kyra.dat" @@ -329,7 +329,7 @@ files: required: false sha1: "31b0b9418af2f9dd4e4094aada05d48eb355975b" md5: "ebddd7bbd97135a427083db5daf6f9fc" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_KYRA)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_KYRA), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/kyra/resource/resource.h:1252, source engines/kyra/resource/staticres.cpp:138-145" note: "Engine data for Kyrandia series (Legend of Kyrandia, Hand of Fate, Malcolm's Revenge)." - name: "lure.dat" @@ -338,7 +338,7 @@ files: required: false sha1: "516347ec0ec2a397265d1b2fb053aa3758382e09" md5: "6f90cf73f36453d332d5c9cee311f81c" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_LURE)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_LURE), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/lure/luredefs.h:31, source engines/lure/lure.cpp:56" note: "Engine data for Lure of the Temptress." - name: "macventure.dat" @@ -347,7 +347,7 @@ files: required: false sha1: "e431e718e3c784532422ea2654d5fc6042a95c09" md5: "3b1faf40e685b955372e02f54ed70263" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_MACVENTURE)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_MACVENTURE), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/macventure/datafiles.cpp:40, 76" note: "Engine data for MacVenture games (Shadowgate, Deja Vu, Uninvited)." - name: "mm.dat" @@ -356,7 +356,7 @@ files: required: false sha1: "0816fe29b57911b28cbf774348f5492062326a85" md5: "01f074a6ac34dd86fcc6d1e8090614f0" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_MM)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_MM), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/mm/xeen/files.cpp:72, source engines/mm/mm1/globals.cpp:61, source common/engine_data.cpp:253" note: "Engine data for Might and Magic engine." - name: "mort.dat" @@ -365,7 +365,7 @@ files: required: false sha1: "0b9d0fa2a18eadf61aeddc19128ef90898ab7206" md5: "3cfb16d7bab4d77606b3b1274b8ae870" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_MORTEVIELLE)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_MORTEVIELLE), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/mortevielle/mortevielle.h:87, source engines/mortevielle/mortevielle.cpp:299" note: "Engine data for Mortville Manor." - name: "myst3.dat" @@ -374,7 +374,7 @@ files: required: false sha1: "5fbf7b1a596219f0daab60a8ceb2f1e59e042243" md5: "54e9056211f2fff255b6f66a3fe39a8d" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_MYST3)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_MYST3), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/myst3/database.cpp:460" note: "Engine data for Myst III: Exile." - name: "nancy.dat" @@ -383,7 +383,7 @@ files: required: false sha1: "7c8907d33da59afd4e4b62eee67541910e0b78d9" md5: "eb7cfdb3f74972beb8f43196e4e44001" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_NANCY)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_NANCY), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/nancy/nancy.cpp:1111" note: "Engine data for Nancy Drew adventure games." - name: "neverhood.dat" @@ -392,7 +392,7 @@ files: required: false sha1: "490012c996ba0c56dd8d077e1418ee53b1e96397" md5: "dfaab12ffb265646f31f51b6904246d1" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_NEVERHOOD)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_NEVERHOOD), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/neverhood/neverhood.cpp:91" note: "Engine data for The Neverhood." - name: "prince_translation.dat" @@ -401,7 +401,7 @@ files: required: false sha1: "57403a286c4d251384442a507d285b2dc5ce330e" md5: "993adab2fd44277d5fd7aa5971e7099c" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_PRINCE)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_PRINCE), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/prince/prince.cpp:339" note: "Translation data for The Prince and the Coward." - name: "queen.tbl" @@ -410,7 +410,7 @@ files: required: false sha1: "7bafa28dfd9b3be17430d467d8787d8204437ba0" md5: "93c6d6379eb0290ce93854a6888ec3f4" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_QUEEN)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_QUEEN), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/queen/resource.cpp:32, 149" note: "Resource table for Flight of the Amazon Queen." - name: "sky.cpt" @@ -419,7 +419,7 @@ files: required: false sha1: "fa03ede717223eaf011491d2066e37eb112e735b" md5: "9d00157b1cebd6368cbf88135c098f40" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_SKY)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_SKY), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/sky/compact.cpp:127" note: "Compact table for Beneath a Steel Sky." - name: "supernova.dat" @@ -428,7 +428,7 @@ files: required: false sha1: "8a571cfc431b5fe794f0262f0e55f72927ab27b4" md5: "89664136c503a30894d5c713be5bfe90" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_SUPERNOVA)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_SUPERNOVA), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/supernova/supernova.h:50, source engines/supernova/supernova.cpp:466" note: "Engine data for Mission Supernova." - name: "teenagent.dat" @@ -437,7 +437,7 @@ files: required: false sha1: "0d488164930332bae3aa1ad38cef44abbe3d00a6" md5: "4594620989a0bfd8b120da2de7ac30de" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_TEENAGENT)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_TEENAGENT), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/teenagent/resources.cpp:308" note: "Engine data for Teenagent." - name: "titanic.dat" @@ -446,7 +446,7 @@ files: required: false sha1: "15f51828f08fdbe01b56123e96312b5859a968c0" md5: "4b2fb71201dc3795cff45df6200a1918" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_TITANIC)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_TITANIC), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/titanic/support/files_manager.cpp:40" note: "Engine data for Starship Titanic." - name: "tony.dat" @@ -455,7 +455,7 @@ files: required: false sha1: "a5e19f364bda6a0d2330495114c9ad665bb79ad0" md5: "891022a4e2917bb54b5cdc9a46f5b3df" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_TONY)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_TONY), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/tony/tony.cpp:182" note: "Engine data for Tony Tough and the Night of Roasted Moths." - name: "toon.dat" @@ -464,7 +464,7 @@ files: required: false sha1: "85bb688125d66f2797a41f153ce1fa177027a83f" md5: "2b71a5d9aa19219d46711e8a77451f0f" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_TOON)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_TOON), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/toon/toon.cpp:5419" note: "Engine data for Toonstruck." - name: "ultima.dat" @@ -473,7 +473,7 @@ files: required: false sha1: "e049932518390257f4d49b1691cad229e6060079" md5: "e359fb7f14c4cb072b6e9300a23a6d62" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_ULTIMA)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_ULTIMA), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/ultima/shared/engine/data_archive.cpp:31, 84-85" note: "Engine data for Ultima series (Ultima IV-VIII, Savage Empire, Martian Dreams)." - name: "ultima8.dat" @@ -482,7 +482,7 @@ files: required: false sha1: "6319d3a245297697c1e4def78dc231a3f30708bb" md5: "e5b95811b05b9f0f593b49c860391200" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_ULTIMA)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_ULTIMA), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/ultima/ultima8/ultima8.cpp:177-182" note: "Engine data specific to Ultima VIII: Pagan." - name: "wintermute.zip" @@ -491,7 +491,7 @@ files: required: false sha1: "5302f543384b21fb55466118a6966e5ef46b85f6" md5: "9783248899f9cb531f0a3e0a711ab8b3" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_WINTERMUTE)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_WINTERMUTE), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/wintermute/base/base_file_manager.cpp:408" note: "Engine data for Wintermute engine games." - name: "fonts.dat" @@ -500,7 +500,7 @@ files: required: false sha1: "1eaef39122559500fbbc705c9425500311d23e03" md5: "6df29d218962e155d0a2114006af45c0" - source_ref: "source dists/engine-data/engine_data.mk (USE_FREETYPE2)" + source_ref: "source dists/engine-data/engine_data.mk (USE_FREETYPE2), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source graphics/fonts/ttf.cpp:954-958, source engines/scumm/he/font_he.cpp:269-273" note: "FreeType2 font data for text rendering." - name: "fonts-cjk.dat" @@ -509,7 +509,7 @@ files: required: false sha1: "b46f5a744387d1991d66a06292811f217ae063e2" md5: "18b8811c1bbc297be45f38c3bd6a0728" - source_ref: "source dists/engine-data/engine_data_big.mk (USE_FREETYPE2)" + source_ref: "source dists/engine-data/engine_data_big.mk (USE_FREETYPE2), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source graphics/fonts/ttf.cpp:975-979" note: "CJK (Chinese/Japanese/Korean) font data. Large file, only for systems with enough memory." - name: "fonts-imgui.dat" @@ -518,7 +518,7 @@ files: required: false sha1: "659a025dfa39a8caada7dac6e69b4d7c88217b3f" md5: "9eb64ec7aa31dc2f5b55541415ecdf8b" - source_ref: "source dists/engine-data/engine_data.mk (USE_IMGUI)" + source_ref: "source dists/engine-data/engine_data.mk (USE_IMGUI), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source backends/imgui/imgui_fonts.cpp:83" note: "ImGui font data for debug overlay rendering." - name: "grim-patch.lab" @@ -527,7 +527,7 @@ files: required: false sha1: "3c43b7a0125f88a9f83ae4307dca57867ffd637c" md5: "32b777b824f02b1e1259903740964058" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_GRIM)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_GRIM), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/grim/resource.cpp:126-129" note: "Patch data for Grim Fandango." - name: "monkey4-patch.m4b" @@ -536,7 +536,7 @@ files: required: false sha1: "49fc530e77b61f326f6e1d5a5147daa2fd67d1e2" md5: "9eb7b7e7cc7dad1fe08be6e73d749abe" - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_MONKEY4)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_MONKEY4), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source engines/grim/resource.cpp:159" note: "Patch data for Escape from Monkey Island." # ================================================================ @@ -547,7 +547,7 @@ files: installed_on: [lakka, recalbox, retrobat, retrodeck, retropie] path: "scummvm/extra/pred.dic" required: false - source_ref: "source dists/engine-data/engine_data.mk (ENABLE_AGI)" + source_ref: "source dists/engine-data/engine_data.mk (ENABLE_AGI), source backends/platform/libretro/scripts/bundle_datafiles.sh:75-77, source backends/platform/libretro/src/libretro-os-utils.cpp:243, source gui/predictivedialog.cpp:119" note: "Predictive text dictionary for AGI engine text input (King's Quest, Space Quest, etc)." # ================================================================ From e0e0e0e3149655cb4f943452eefc6142871f2000 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:39:49 +0100 Subject: [PATCH 13/31] docs: cite how EightyOne reaches four ROMs Four entries cited only their file in Source/ROMs. tk90.rom, tk95.rom and spectrum48.arabic.rom are in no ROM list and are read when picked with the Browse button. interface1.edition1.rom is listed for ZX Interface 1, but ConfigureFDCRom has no Interface 1 branch, so it is read only when the configuration file sets ROMINTERFACE1. --- emulators/81.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/emulators/81.yml b/emulators/81.yml index f69854522..359fe2b86 100644 --- a/emulators/81.yml +++ b/emulators/81.yml @@ -275,7 +275,8 @@ files: mode: standalone size: 8192 md5: 5c11c61a2dd2ca4bf39328d9ff42d289 - source_ref: "upstream Source/ROMs/FDCs/interface1.edition1.rom" + note: "Listed for ZX Interface 1, but ConfigureFDCRom has no Interface 1 branch, so the choice is not applied. Read when the configuration file names it as ROMINTERFACE1." + source_ref: "upstream Source/ROMs/FDCs/interface1.edition1.rom, upstream Source/HW_.cpp:2618-2622, 3732, 4957-4980, upstream Source/Spectrum/spec48.cpp:332-334" - name: "+d.g+dos.v1-a.rom" system: sinclair-zx-spectrum required: false @@ -487,7 +488,8 @@ files: mode: standalone size: 16384 md5: 9f6f56003307b9d55be96f406fdbf2b1 - source_ref: "upstream Source/ROMs/spectrum48.arabic.rom" + note: "In no ROM list: read when chosen with the Browse button." + source_ref: "upstream Source/ROMs/spectrum48.arabic.rom, upstream Source/HW_.cpp:252, 3794-3797, 3806-3835, upstream Source/Spectrum/spec48.cpp:354" - name: spectrum48.arabic.version1.rom system: sinclair-zx-spectrum required: false @@ -603,8 +605,8 @@ files: mode: standalone size: 16384 md5: b7893ad25728fbf6410f08eddd4a1cad - note: "Microdigital TK90X (Spectrum clone)." - source_ref: "upstream Source/ROMs/tk90.rom" + note: "Microdigital TK90X (Spectrum clone). In no ROM list: read when chosen with the Browse button." + source_ref: "upstream Source/ROMs/tk90.rom, upstream Source/HW_.cpp:252, 3794-3797, 3806-3835, upstream Source/Spectrum/spec48.cpp:354" - name: tk95.rom system: sinclair-zx-spectrum required: false @@ -612,5 +614,5 @@ files: mode: standalone size: 16384 md5: b7893ad25728fbf6410f08eddd4a1cad - note: "Microdigital TK95 (Spectrum clone)." - source_ref: "upstream Source/ROMs/tk95.rom" + note: "Microdigital TK95 (Spectrum clone). In no ROM list: read when chosen with the Browse button." + source_ref: "upstream Source/ROMs/tk95.rom, upstream Source/HW_.cpp:252, 3794-3797, 3806-3835, upstream Source/Spectrum/spec48.cpp:354" From c75d38fbe09fa307352fa13417e8c1e0b773217b Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:40:28 +0100 Subject: [PATCH 14/31] fix: drop cbios.txt from the MSX.emu profile The entry cited only the bundled file and its note said no code reads it. No source file of MSX.emu names cbios.txt at the pin, so it is not a file the emulator loads. --- emulators/msx-emu.yml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/emulators/msx-emu.yml b/emulators/msx-emu.yml index 8a16aa246..cb482d63f 100644 --- a/emulators/msx-emu.yml +++ b/emulators/msx-emu.yml @@ -238,19 +238,6 @@ files: description: "C-BIOS MSX-MUSIC ROM, slot 3-1 from page 2" source_ref: "MSX.emu/res/firmware/Machines/MSX2+ - C-BIOS/config.ini:31, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/blueMSX/Memory/romMapperMsxMusic.c:55-68" - - name: "cbios.txt" - path: "cbios.txt" - system: msx - required: false - bundled: true - category: game_data - size: 10469 - sha1: "78ae5c049bc94ee1284536c419388b1ab7ac218c" - description: "C-BIOS 0.29 release notes and licence, bundled beside the machine folders" - note: >- - Shipped in the application bundle. No code reads it. - source_ref: "MSX.emu/res/firmware/cbios.txt" - - name: "config.ini" path: "Machines/MSX/config.ini" system: msx From 3add162a373ed962ce5de241892834f92696c3a8 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:41:13 +0100 Subject: [PATCH 15/31] docs: cite the C64DTV ROM loaders in VICE The three C64DTV ROM entries named only their file in vice/data. They now cite the BasicName, KernalName and ChargenName resources that name them, the c64rom loaders those resources call, and the embedded table that answers the names in the libretro build. --- emulators/vice.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/emulators/vice.yml b/emulators/vice.yml index f85f64fc1..e859eb24c 100644 --- a/emulators/vice.yml +++ b/emulators/vice.yml @@ -469,7 +469,7 @@ files: md5: 57af4ae21d4b705c2991d98ed5c1f7b8 crc32: f833d117 note: "C64 BASIC V2 ROM (DTV copy). Embedded in core." - source_ref: "vice/data/C64DTV/basic-901226-01.bin" + source_ref: "vice/data/C64DTV/basic-901226-01.bin, vice/src/c64/c64rom.h:31, vice/src/c64dtv/c64dtv-resources.c:92, 157, retrodep/embedded/c64dtvembedded.c:43-48" - name: "vice/C64DTV/chargen-901225-01.bin" system: commodore-c64dtv @@ -481,7 +481,7 @@ files: md5: 12a4202f5331d45af846af6c58fba946 crc32: ec4272ee note: "C64 Character Generator (DTV copy). Embedded in core." - source_ref: "vice/data/C64DTV/chargen-901225-01.bin" + source_ref: "vice/data/C64DTV/chargen-901225-01.bin, vice/src/c64/c64rom.h:60, vice/src/c64dtv/c64dtv-resources.c:74, 151, retrodep/embedded/c64dtvembedded.c:43-48" - name: "vice/C64DTV/kernal-901227-03.bin" system: commodore-c64dtv @@ -493,7 +493,7 @@ files: md5: 39065497630802346bce17963f13c092 crc32: dbe3e7c7 note: "C64 Kernal Rev 3 (DTV copy). Embedded in core." - source_ref: "vice/data/C64DTV/kernal-901227-03.bin" + source_ref: "vice/data/C64DTV/kernal-901227-03.bin, vice/src/c64/c64rom.h:52, vice/src/c64dtv/c64dtv-resources.c:83, 154, retrodep/embedded/c64dtvembedded.c:43-48" # ------------------------------------------------------- # VIC-20 ROMs (vice_xvic) From cc0f628a123aca1e0bea5ca254fddb8c9fc423c9 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:41:43 +0100 Subject: [PATCH 16/31] fix: drop gs104.rom from the ZEsarUX profile The entry cited only the configure line that packs every *.rom into the release. The General Sound loader opens GS_ROM_NAME, fixed to gs105a.rom (src/soundchips/gs.h:34), and no code names gs104.rom, so ZEsarUX never reads it under its name. --- emulators/zesarux.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/emulators/zesarux.yml b/emulators/zesarux.yml index cc64d798c..4b2bcc19e 100644 --- a/emulators/zesarux.yml +++ b/emulators/zesarux.yml @@ -1027,15 +1027,6 @@ files: source_ref: "src/soundchips/gs.h:34, src/soundchips/gs.h:29, src/soundchips/gs.c:525-545" note: "General Sound firmware v1.05a. GS_ROM_SIZE is in KB and the read is GS_ROM_SIZE*1024." - - name: "gs104.rom" - sha1: "c865121306eb3a7d811d82fbcc653b4dc1d6fa3d" - size: 32768 - required: false - bundled: true - system: sinclair-zx-spectrum - source_ref: "src/configure:1933" - note: "General Sound firmware v1.04. Shipped alongside gs105a.rom, but GS_ROM_NAME is fixed and there is no option to point the loader elsewhere, so it is usable only in place of gs105a.rom." - # ============================================================ # Alternate machine ROMs, selectable with --romfile (src/start.c:4877-4881, # loaded at src/cpu.c:3776-3779). Documented in the shipped src/ALTERNATEROMS. From 2e02c551028736ad0fb335b051f6c05690892f4d Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:42:41 +0100 Subject: [PATCH 17/31] fix: keep the first steps under their ceiling The record's page text took first-install.md 31 words over its 400. It now says only that one setup opens on Install. RETROBIOS_TUI_RECORDED is an internal marker of the full screen's own runs, like RETROBIOS_TUI_LIST. --- tests/test_doc_pages.py | 2 +- wiki/first-install.md | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/tests/test_doc_pages.py b/tests/test_doc_pages.py index 95e17cd8f..f0b5270c8 100644 --- a/tests/test_doc_pages.py +++ b/tests/test_doc_pages.py @@ -1697,7 +1697,7 @@ class InstallerVariablesAreDocumented(unittest.TestCase): --dry-run, and no page named it or the folder it defaults to.""" # Set by the full-screen interface for the runs it starts, never by a user. - INTERNAL = {"RETROBIOS_TUI_LIST"} + INTERNAL = {"RETROBIOS_TUI_LIST", "RETROBIOS_TUI_RECORDED"} def test_every_variable_install_py_reads_is_in_the_table(self): source = (ROOT / "install.py").read_text(encoding="utf-8") diff --git a/wiki/first-install.md b/wiki/first-install.md index 7093ed7ec..51ac8c74e 100644 --- a/wiki/first-install.md +++ b/wiki/first-install.md @@ -68,8 +68,7 @@ On Batocera, Recalbox and similar setups, see ## 2. Check the setup it found -With one setup found, it opens on step 3, its folder on the second line. -With none or several, it asks: +With one setup, it opens on **Install**. Otherwise: ``` RetroBIOS: Where to install? @@ -81,8 +80,8 @@ With none or several, it asks: - **Right folder?** Press Enter. - **Wrong folder, or a handheld's SD card?** Choose - **Another setup or folder** (**Change where** from step 3). - Press / and type the device (Miyoo Mini), or browse. + **Another setup or folder**. Press / and type the device (Miyoo Mini), + or browse. Arrows move, Enter chooses, Esc goes back (A and B on a handheld). On a touch screen, tap a row twice to open it, once to tick a box. @@ -90,9 +89,9 @@ touch screen, tap a row twice to open it, once to tick a box. ## 3. Install Press Enter on **Install**. **Choose systems** picks the consoles to -keep. Run it again later: it keeps that choice, one press. +keep. -**Game data** (only a game reads it) has its own row. +**Game data** has its own row. **Old card?** In a card reader, choose **Copy the BIOS files from an old card or a folder**, then the card. From 851c7a9bc546699ebad3b055dbb11fb0662f7f20 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:42:53 +0100 Subject: [PATCH 18/31] docs: cite the software list loader in A7800 hiscore.zip and xm.zip named only their hash/a7800.xml entries. They now cite the cart_list software list of the driver, the hash path that holds the XML, its open in softlist_dev.cpp, and the ROM search by list and set name in romload.cpp. --- emulators/a7800.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/emulators/a7800.yml b/emulators/a7800.yml index efbcab113..1d39b81ad 100644 --- a/emulators/a7800.yml +++ b/emulators/a7800.yml @@ -96,7 +96,7 @@ files: required: false category: bios_zip system: atari-7800 - source_ref: "source hash/a7800.xml:8-21" + source_ref: "source hash/a7800.xml:8-21, source src/mame/drivers/a7800.cpp:1577, source src/emu/emuopts.cpp:40, source src/emu/softlist_dev.cpp:87, 309, source src/emu/romload.cpp:575-651, 1298-1302" note: >- Software list set for the High Score Cartridge configuration (CX78HSC, slot a78_hsc). Fatal when that configuration is selected and the set is @@ -112,7 +112,7 @@ files: required: false category: bios_zip system: atari-7800 - source_ref: "source hash/a7800.xml:24-38" + source_ref: "source hash/a7800.xml:24-38, source src/mame/drivers/a7800.cpp:1577, source src/emu/emuopts.cpp:40, source src/emu/softlist_dev.cpp:87, 309, source src/emu/romload.cpp:575-651, 1298-1302" note: >- Software list set for the XM Expansion Module configuration (slot a78_xm), which reuses the High Score Cartridge ROM alongside 128KB RAM, From b597944c5059fa838c9d5701a6de9fb48326ce6f Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:43:45 +0100 Subject: [PATCH 19/31] fix: read defaults.prp from the Abuse code defaults.prp cited abuse.lsp, which does not name it. dev_init opens it at every start through property_manager::load, which skips a missing file, so it is optional. It holds the level editor window positions and is written back after an -edit session. english.lsp now cites the abuse.lsp load the engine runs and the install rule. --- emulators/abuse.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/emulators/abuse.yml b/emulators/abuse.yml index e2def0df1..7985e7b9a 100644 --- a/emulators/abuse.yml +++ b/emulators/abuse.yml @@ -52,11 +52,11 @@ files: - name: "defaults.prp" category: game_data - description: "Default properties for level objects" - required: true + description: "Level editor window positions" + required: false bundled: true - source_ref: "data/abuse.lsp" - note: "Shipped in Abuse-0.9.1-win32.zip." + source_ref: "src/game.cpp:2373, src/dev.cpp:821-828, 3371-3374, src/property.cpp:155-159" + note: "Shipped in Abuse-0.9.1-win32.zip. Read at every start, and a missing file leaves the defaults. Written back after an -edit session." - name: "english.lsp" path: "lisp/english.lsp" @@ -64,5 +64,5 @@ files: description: "Localized strings loaded first by abuse.lsp" required: true bundled: true - source_ref: "data/abuse.lsp:9" + source_ref: "data/abuse.lsp:9-12, data/CMakeLists.txt:1-5, 10-16, src/loader2.cpp:284, 348-354" note: "Shipped in Abuse-0.9.1-win32.zip." From 565da616d98535e23f87a6dacb700c2683ae2918 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:44:19 +0100 Subject: [PATCH 20/31] docs: cite the ArcadeFlashWeb page load background.jpg cited flash.html and qml.qrc only. It now cites the main.qml lines that open flash.html from the application folder, and the QML image that reads the compiled copy. --- emulators/arcadeflashweb.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emulators/arcadeflashweb.yml b/emulators/arcadeflashweb.yml index 9d2931b9c..db394d5ad 100644 --- a/emulators/arcadeflashweb.yml +++ b/emulators/arcadeflashweb.yml @@ -131,7 +131,7 @@ files: note: >- Drawn behind the movie by the page's bg div. The same image is compiled into the binary for the QML side, so only this copy is read from disk. - source_ref: "ArcadeFlashWeb-release flash/flash.html:110, src/qml.qrc:23" + source_ref: "src/main.qml:327, 334, ArcadeFlashWeb-release flash/flash.html:110, src/qml.qrc:23, src/main.qml:457" - name: swfdump.exe size: 541095 From 0c2b718c5e10e883ae28baae7acf2cf1e802db05 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:44:57 +0100 Subject: [PATCH 21/31] docs: cite the ROM config reader in BeebEm Four Torch ROM entries named only their Roms_Torch.cfg line. They now cite BeebEmTorch.vbs passing -Roms Roms_Torch.cfg, BeebWin taking that file from the user data folder, RomConfigFile::Load, and BeebReadRoms opening each paged ROM. --- emulators/beebem.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/emulators/beebem.yml b/emulators/beebem.yml index d0bd0654c..415881bd5 100644 --- a/emulators/beebem.yml +++ b/emulators/beebem.yml @@ -193,7 +193,7 @@ files: max_size: 131072 validation: [size] note: "Integra-B slot under the Torch configuration." - source_ref: "UserData/Roms_Torch.cfg:24" + source_ref: "UserData/Roms_Torch.cfg:24, BeebEmTorch.vbs:3, Src/BeebWin.cpp:5291-5297, 5960-5964, 473, Src/RomConfigFile.cpp:158-162, Src/BeebMem.cpp:1321-1337" - name: WDFS.rom path: BeebFile/BBCINT/WDFS.rom @@ -206,7 +206,7 @@ files: max_size: 131072 validation: [size] note: "Filing system slot under the Torch configuration." - source_ref: "UserData/Roms_Torch.cfg:26" + source_ref: "UserData/Roms_Torch.cfg:26, BeebEmTorch.vbs:3, Src/BeebWin.cpp:5291-5297, 5960-5964, 473, Src/RomConfigFile.cpp:158-162, Src/BeebMem.cpp:1321-1337" - name: MCP120-CBL.rom path: BeebFile/BBC/MCP120-CBL.rom @@ -219,7 +219,7 @@ files: max_size: 131072 validation: [size] note: "Host tube support for the Torch Z80 co-processor on a Model B." - source_ref: "UserData/Roms_Torch.cfg:5, Help/z80torch.html" + source_ref: "UserData/Roms_Torch.cfg:5, Help/z80torch.html, BeebEmTorch.vbs:3, Src/BeebWin.cpp:5291-5297, 5960-5964, 473, Src/RomConfigFile.cpp:158-162, Src/BeebMem.cpp:1321-1337" # -- BBC Model B Plus -- @@ -413,7 +413,7 @@ files: max_size: 131072 validation: [size] note: "Host tube support for the Torch Z80 co-processor on a Master." - source_ref: "UserData/Roms_Torch.cfg:79, Help/z80torch.html" + source_ref: "UserData/Roms_Torch.cfg:79, Help/z80torch.html, BeebEmTorch.vbs:3, Src/BeebWin.cpp:5291-5297, 5960-5964, 473, Src/RomConfigFile.cpp:158-162, Src/BeebMem.cpp:1321-1337" # -- BBC Master ET -- From 611dd0fa5576f144be6a6657d6ae06dea7311a19 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:49:45 +0100 Subject: [PATCH 22/31] feat: refuse source_refs that cite only data validate_schemas now refuses a files[] source_ref whose parts are all data or build files (a table, a makefile, meson.build, the file itself). A ref passes when one part names a source file or a binary with an address. The closed-source profiles whose refs are still prose about the shipped binary are listed in DATA_ONLY_REF_EXCEPTIONS with a reason each. --- scripts/validate_schemas.py | 60 ++++++++++++++++++++++++++ tests/test_data_only_refs.py | 83 ++++++++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+) create mode 100644 tests/test_data_only_refs.py diff --git a/scripts/validate_schemas.py b/scripts/validate_schemas.py index c28cd2d82..97b40707a 100644 --- a/scripts/validate_schemas.py +++ b/scripts/validate_schemas.py @@ -87,6 +87,7 @@ def _validate_yaml_directory( out.extend(_systems_outside_profile(path, data)) out.extend(_doubled_paths(path)) out.extend(_group_requirement_split(path, data)) + out.extend(_data_only_source_refs(path, data)) return out @@ -155,6 +156,65 @@ def _group_requirement_split(path: Path, document: object) -> list[str]: return out +_CODE_SUFFIXES = frozenset( + "c cc cpp cxx c++ h hh hpp hxx inc inl ipp m mm mjs cjs js jsx ts tsx py cs java kt " + "go rs lua pas pp asm s sh bash zsh ps1 bat cmd vbs swift d zig nim qml qc rb pl php " + "scala ml hs dart vue ino z80 smali".split() +) +_CODE_FILE = re.compile(r"[\w+.-]\.([A-Za-z0-9+]+)\b") +_BINARY_EVIDENCE = re.compile( + r"\b0x[0-9a-fA-F]+\b|\bFUN_[0-9a-fA-F]+\b|\.(?:so|dll|exe|dylib|dex|apk|jar|elf|nro|xex)\b", + re.IGNORECASE, +) + +# Profiles whose files cite no published code. Each reason says why the +# check cannot apply yet. +DATA_ONLY_REF_EXCEPTIONS: dict[str, str] = { + "ace-dl": "closed source: the refs describe what the shipped binary opens", + "cpcemu": "closed source: the refs describe what the shipped binary opens", + "drastic": "closed source: the shader format files are read by the shipped binary", + "lexaloffle": "closed source: PICO-8 reads pico8_gpio, the refs are its readme and the KNULLI install script", + "mfme": "closed source: the refs are the release notes of the shipped binary", +} + + +def _ref_cites_code(ref: str) -> bool: + """A source_ref part names a source file, or a binary with an address.""" + from sourceref import split_source_ref + + if _BINARY_EVIDENCE.search(ref): + return True + for part in split_source_ref(ref): + for suffix in _CODE_FILE.findall(part.raw): + if suffix.lower() in _CODE_SUFFIXES: + return True + return False + + +def _data_only_source_refs(path: Path, document: object) -> list[str]: + """A files[] source_ref that cites only data or build files. + + A data file is evidence that the emulator reads a file only once the + code that ships and parses it is cited too: iwadinfo.txt names the + IWADs, d_iwad.cpp is what reads it. 655 entries in 27 profiles cited + the table alone, and six of them named a file no code opens. + """ + if not isinstance(document, dict) or path.stem in DATA_ONLY_REF_EXCEPTIONS: + return [] + out: list[str] = [] + for index, entry in enumerate(document.get("files") or []): + if not isinstance(entry, dict) or not entry.get("source_ref"): + continue + refs = entry["source_ref"] + for ref in refs.values() if isinstance(refs, dict) else [refs]: + if ref and not _ref_cites_code(str(ref)): + out.append( + f"{path.relative_to(ROOT)}: files[{index}] ({entry.get('name')}) " + f"source_ref cites no code that reads the file: {ref}" + ) + return out + + def _checks_without_values(path: Path, document: object) -> list[str]: """A check an entry declares with nothing to compare against. diff --git a/tests/test_data_only_refs.py b/tests/test_data_only_refs.py new file mode 100644 index 000000000..345f7d091 --- /dev/null +++ b/tests/test_data_only_refs.py @@ -0,0 +1,83 @@ +"""A files[] source_ref must cite the code that reads the file.""" + +from __future__ import annotations + +import tests # noqa: F401 offline, scratch under tmp/, the suite's own cache + +import sys +import unittest +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(REPO_ROOT / "scripts")) + +try: + import validate_schemas +except ImportError as exc: + validate_schemas = None + IMPORT_ERROR = str(exc) +else: + IMPORT_ERROR = "" + + +def _profile(ref: object) -> dict: + return {"files": [{"name": "doom.wad", "source_ref": ref}]} + + +@unittest.skipIf(validate_schemas is None, f"validate_schemas unavailable: {IMPORT_ERROR}") +class DataOnlySourceRefs(unittest.TestCase): + path = REPO_ROOT / "emulators" / "synthetic.yml" + + def errors(self, ref: object) -> list[str]: + return validate_schemas._data_only_source_refs(self.path, _profile(ref)) + + def test_a_data_table_alone_is_refused(self): + self.assertEqual(len(self.errors("wadsrc_extra/static/iwadinfo.txt:420, 437")), 1) + + def test_a_build_file_alone_is_refused(self): + for ref in ("pc-bios/meson.build:30", "wadsrc/CMakeLists.txt:1", + "dists/engine-data/engine_data.mk (ENABLE_KYRA)", "src/configure:1933"): + with self.subTest(ref=ref): + self.assertEqual(len(self.errors(ref)), 1) + + def test_a_file_in_the_tree_alone_is_refused(self): + self.assertEqual(len(self.errors("fMSX/ROMs/MSX.ROM")), 1) + + def test_the_table_with_its_reader_passes(self): + self.assertEqual(self.errors( + "wadsrc_extra/static/iwadinfo.txt:420, wadsrc_extra/CMakeLists.txt:1, " + "src/d_iwad.cpp:286-296, 502-531"), []) + + def test_a_role_prefix_is_read_through(self): + self.assertEqual(self.errors("source pc-bios/meson.build:30, source hw/i386/pc_piix.c:466"), []) + + def test_a_binary_with_an_address_passes(self): + for ref in ("libemucore.so 0x1a2b3c", "Fusion.exe 0x00401000", + "bigpemu FUN_006d8be0 (BootROM read)", "nethersx2 v2.2n classes.dex icons/star-%d.png"): + with self.subTest(ref=ref): + self.assertEqual(self.errors(ref), []) + + def test_each_build_mode_is_judged(self): + self.assertEqual(len(self.errors({"standalone": "src/main.cpp:10", "libretro": "data/list.txt:3"})), 1) + + def test_an_excepted_profile_is_not_judged(self): + name = next(iter(validate_schemas.DATA_ONLY_REF_EXCEPTIONS)) + path = REPO_ROOT / "emulators" / f"{name}.yml" + self.assertEqual(validate_schemas._data_only_source_refs(path, _profile("history.txt:38")), []) + + def test_every_exception_names_a_profile_and_a_reason(self): + for name, reason in validate_schemas.DATA_ONLY_REF_EXCEPTIONS.items(): + with self.subTest(profile=name): + self.assertTrue((REPO_ROOT / "emulators" / f"{name}.yml").is_file()) + self.assertTrue(reason.strip()) + + def test_the_profiles_cite_their_readers(self): + errors: list[str] = [] + for path in sorted((REPO_ROOT / "emulators").glob("*.yml")): + errors.extend(validate_schemas._data_only_source_refs( + path, validate_schemas._load_source(path))) + self.assertEqual(errors, []) + + +if __name__ == "__main__": + unittest.main() From bd292ba2f93031dca327ef9ffe670e772d705f85 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:51:27 +0100 Subject: [PATCH 23/31] fix: drop QEMU targets the core does not build The core is built by libretro-gitlab-build.sh (Makefile.libretro-gitlab, the MAKEFILE of .gitlab-ci.yml) with a --target-list of 17 softmmu targets, and neither hppa-softmmu nor microblaze-softmmu is among them. hw/hppa/machine.c and hw/microblaze/ are not compiled, so nothing reads hppa-firmware.img, hppa-firmware64.img or the two Petalogix device trees. The four entries and the hppa system are removed. --- emulators/qemu.yml | 41 +---------------------------------------- 1 file changed, 1 insertion(+), 40 deletions(-) diff --git a/emulators/qemu.yml b/emulators/qemu.yml index ebcf2f8ec..e19cb5549 100644 --- a/emulators/qemu.yml +++ b/emulators/qemu.yml @@ -13,7 +13,7 @@ version_basis: pattern: 'info->library_version\s+=\s+"([^"]+)' display_name: "QEMU" cores: [qemu] -systems: [ibm-pc, x86, x86-64, ppc, ppc64, sparc, sparc64, arm, aarch64, mips, mips64, riscv32, riscv64, s390x, m68k, alpha, hppa] +systems: [ibm-pc, x86, x86-64, ppc, ppc64, sparc, sparc64, arm, aarch64, mips, mips64, riscv32, riscv64, s390x, m68k, alpha] # QEMU (Quick Emulator) libretro core, based on QEMU 9.0.50. # Builds 17 targets: aarch64, alpha, arm, i386, m68k, mips(el), mips64(el), @@ -611,27 +611,6 @@ files: note: "Network boot firmware for s390x emulation." source_ref: "source hw/s390x/ipl.c:497" - # ======================================================== - # HP-PA FIRMWARE - # ======================================================== - - name: "HP-PA firmware (32-bit)" - installed_on: [retrodeck] - path: "qemu/hppa-firmware.img" - sha1: "605c36ede6c120c6cc7efe147a75a3dc4b7e4fb0" - size: 167820 - required: false - note: "SeaBIOS-hppa firmware for 32-bit HP-PARISC emulation." - source_ref: "source hw/hppa/machine.c:424" - - - name: "HP-PA firmware (64-bit)" - installed_on: [retrodeck] - path: "qemu/hppa-firmware64.img" - sha1: "b42f6d4ca74073de6c038579b4a9323ad0a6b398" - size: 206024 - required: false - note: "SeaBIOS-hppa firmware for 64-bit HP-PARISC emulation." - source_ref: "source hw/hppa/machine.c:424" - # ======================================================== # MIPS FIRMWARE (not shipped, user-supplied) # ======================================================== @@ -713,24 +692,6 @@ files: note: "Device tree blob for PowerPC Canyonlands (460EX) / Sam460ex board." source_ref: "source hw/ppc/sam460ex.c:45" - - name: "Petalogix ML605 DTB (MicroBlaze)" - installed_on: [retrodeck] - path: "qemu/petalogix-ml605.dtb" - sha1: "892d265838866869b8a8ef104252ff5b2fda156f" - size: 9882 - required: false - note: "Device tree blob for Xilinx Petalogix ML605 MicroBlaze board. MicroBlaze target not built in libretro core." - source_ref: "source pc-bios/meson.build:91, source hw/microblaze/petalogix_ml605_mmu.c:49, 209, source hw/microblaze/boot.c:133" - - - name: "Petalogix S3ADSP1800 DTB (MicroBlaze)" - installed_on: [retrodeck] - path: "qemu/petalogix-s3adsp1800.dtb" - sha1: "976600e3f89ecc1f3564b7077f53c58e0b565280" - size: 8161 - required: false - note: "Device tree blob for Xilinx Petalogix S3ADSP1800 MicroBlaze board. MicroBlaze target not built in libretro core." - source_ref: "source pc-bios/meson.build:90, source hw/microblaze/petalogix_s3adsp1800_mmu.c:44, 129, source hw/microblaze/boot.c:133" - - name: "Virtex ML507 DTB (PPC)" path: "qemu/virtex-ml507.dtb" From 3d99fb765fadaeee1e1bb89f8df807498bf07323 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:52:56 +0100 Subject: [PATCH 24/31] docs: give UZDoom libretro refs their own lines The IWAD entries cited one set of lines for both builds, read from the standalone tree. The libretro tree's d_iwad.cpp, d_main.cpp and iwadinfo.txt differ (its Names block lists doomxbox.wad and doom2xbox.wad once, not twice), so each entry now carries a standalone and a libretro ref, the second mapped line by line on the libretro pin. The libretro ref also cites the embedded game_support.pk3 and the -iwad the core passes for the content. --- emulators/uzdoom.yml | 172 ++++++++++++++++++++++++++++++++----------- 1 file changed, 129 insertions(+), 43 deletions(-) diff --git a/emulators/uzdoom.yml b/emulators/uzdoom.yml index c36827309..b237d16e3 100644 --- a/emulators/uzdoom.yml +++ b/emulators/uzdoom.yml @@ -246,144 +246,190 @@ files: category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:420, 437, 659, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:420, 437, 659, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:420, 437, 659, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" note: "The Ultimate DOOM and DOOM Registered both use this name and are told apart by their lumps." - name: "doom2.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:640, 653, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:640, 653, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:640, 653, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "doom2f.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:625, 657, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:625, 657, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:625, 657, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "doombfg.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:332, 666, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:332, 666, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:332, 666, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "doom2bfg.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:560, 667, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:560, 667, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:560, 667, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "doomunity.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:369, 661, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:369, 661, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:369, 661, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "doom2unity.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:592, 655, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:592, 655, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:592, 655, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "doomkex.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:350, 662, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:350, 662, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:350, 662, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "doom2kex.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:576, 656, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:576, 656, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:576, 656, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "doomxbox.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:403, 660, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:403, 660, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:403, 660, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "doom2xbox.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:608, 654, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:608, 654, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:608, 654, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "doom_complete.pk3" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:389, 652, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:389, 652, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:389, 652, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "plutonia.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:545, 670, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:545, 670, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:545, 668, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "plutoniaunity.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:514, 671, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:514, 671, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:514, 669, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "plutoniakex.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:529, 672, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:529, 672, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:529, 670, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "tnt.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:499, 673, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:499, 673, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:499, 671, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "tntunity.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:468, 674, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:468, 674, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:468, 672, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "tntkex.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:483, 675, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:483, 675, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:483, 673, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "nerve.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:565, 614, src/d_iwad.cpp:924-950" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:565, 614, src/d_iwad.cpp:924-950" + libretro: "wadsrc_extra/static/iwadinfo.txt:565, 614, src/d_iwad.cpp:948-974" note: "No Rest for the Living. Autoloaded by Doom 2 BFG and Xbox editions." - name: "nerveunity.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:598, src/d_iwad.cpp:924-950" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:598, src/d_iwad.cpp:924-950" + libretro: "wadsrc_extra/static/iwadinfo.txt:598, src/d_iwad.cpp:948-974" note: "Loaded from the IWAD directory by DOOM 2: Unity Edition." - name: "extras.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:357, 376, 488, 534, 582, 598, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:214-221, 326-352, 924-947" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:357, 376, 488, 534, 582, 598, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:214-221, 326-352, 924-947" + libretro: "wadsrc_extra/static/iwadinfo.txt:357, 376, 488, 534, 582, 598, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:221-228, 333-359, 948-971, src/common/platform/libretro/retro_core.cpp:61" note: "Loaded from the IWAD directory by the KEX and Unity editions." - name: "soundtrack" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:376, 598, src/d_iwad.cpp:924-950" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:376, 598, src/d_iwad.cpp:924-950" + libretro: "wadsrc_extra/static/iwadinfo.txt:376, 598, src/d_iwad.cpp:948-974" note: "Loaded from the IWAD directory by the DOOM and DOOM 2 Unity editions." - name: "id24res.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:341, 360, 379, src/d_iwad.cpp:896-912" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:341, 360, 379, src/d_iwad.cpp:896-912" + libretro: "wadsrc_extra/static/iwadinfo.txt:341, 360, 379, src/d_iwad.cpp:920-936" note: "id24 resource WAD. SupportWAD of every id IWAD block, loaded when found and i_loadsupportwad is set." # ---- Freedoom (free) ---- @@ -392,19 +438,25 @@ files: category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:307, 676, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:307, 676, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:307, 674, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "freedoom2.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:294, 677, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:294, 677, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:294, 675, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "freedm.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:281, 680, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:281, 680, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:281, 678, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" # ---- Heretic ---- @@ -412,7 +464,9 @@ files: category: game_data system: heretic required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:241, 244, 254, 257, 681, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:241, 244, 254, 257, 681, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:241, 244, 254, 257, 679, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" note: "Both Heretic and Shadow of the Serpent Riders use this name and are told apart by the EXTENDED lump." - name: "blasphem.wad" @@ -420,7 +474,9 @@ files: category: game_data system: heretic required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:228, 692-693, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:228, 692-693, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:228, 690-691, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" # ---- Hexen ---- @@ -428,13 +484,17 @@ files: category: game_data system: hexen required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:188, 684, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:188, 684, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:188, 682, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "hexdd.wad" category: game_data system: hexen required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:196-207, 685, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:196-207, 685, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:196-207, 683, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" note: "Deathkings expansion. Requires hexen.wad (Required = Hexen: Beyond Heretic)." # ---- Strife ---- @@ -443,20 +503,26 @@ files: category: game_data system: strife required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:151, 688, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:151, 688, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:151, 686, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "sve.wad" category: game_data system: strife required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:136, 140, 689, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:136, 140, 689, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:136, 140, 687, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" note: "Veteran Edition. Required = Strife: Quest for the Sigil (loads voices.wad)." - name: "voices.wad" category: game_data system: strife required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:142, 155, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:214-221, 326-352, 924-947" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:142, 155, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:214-221, 326-352, 924-947" + libretro: "wadsrc_extra/static/iwadinfo.txt:142, 155, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:221-228, 333-359, 948-971, src/common/platform/libretro/retro_core.cpp:61" # ---- Chex Quest ---- @@ -464,13 +530,17 @@ files: category: game_data system: chex required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:123, 694, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:123, 694, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:123, 692, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "chex3.wad" category: game_data system: chex required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:109, 695, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:109, 695, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:109, 693, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" # ---- Standalone commercial / community IWADs ---- @@ -478,48 +548,64 @@ files: category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:83, 698, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:83, 698, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:83, 696, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "hacx2.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:65-75, 699, src/d_iwad.cpp:362-407, src/common/filesystem/source/resourcefile.cpp:150-165" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:65-75, 699, src/d_iwad.cpp:362-407, src/common/filesystem/source/resourcefile.cpp:150-165" + libretro: "wadsrc_extra/static/iwadinfo.txt:65-75, 697, src/d_iwad.cpp:369-414, src/common/filesystem/source/resourcefile.cpp:150-165" note: "Identified by the MAP01 map and the HACX-E lump, whatever the container: every candidate is opened by its magic, so a zip under this name is read as a pk3. The Hacx 2.0 repository builds that zip from src/, where hacx-e.txt is the HACX-E lump and maps/MAP01.wad the first map." - name: "action2.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:97, 696, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:97, 696, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:97, 694, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "harm1.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:57, 697, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:57, 697, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:57, 695, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "square.pk3" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:33, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:326-352, 362-407, 643-692" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:33, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:326-352, 362-407, 643-692" + libretro: "wadsrc_extra/static/iwadinfo.txt:33, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:333-359, 369-414, 663-716, src/common/platform/libretro/retro_core.cpp:61" note: "Absent from the Names block: picked up only when named with -iwad." - name: "square1.pk3" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:45, 700, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:45, 700, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:45, 698, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "delaweare.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:22, 701, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:22, 701, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:22, 699, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" - name: "rotwb.wad" category: game_data system: doom required: false - source_ref: "wadsrc_extra/static/iwadinfo.txt:9, 702, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + source_ref: + standalone: "wadsrc_extra/static/iwadinfo.txt:9, 702, wadsrc_extra/CMakeLists.txt:1, src/d_main.cpp:4207, src/d_iwad.cpp:292-302, 326-352, 362-407, 518-547" + libretro: "wadsrc_extra/static/iwadinfo.txt:9, 700, wadsrc_extra/CMakeLists.txt:1, src/common/platform/libretro/embedded_pk3.S.in:26-31, src/common/platform/libretro/retro_resources.h:18-19, src/d_main.cpp:4243, src/d_iwad.cpp:299-309, 333-359, 369-414, 537-566, src/common/platform/libretro/retro_core.cpp:61" From 57ff75682c5152882a54d2809310331a7dc1dd66 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 13:54:08 +0100 Subject: [PATCH 25/31] docs: note the A7800 release ships hash/ The v5.2 release assets a7800-linux-v5.2.tgz, a7800-osx-v5.2.tgz and a7800-win-v5.2.zip each carry hash/a7800.xml, equal to the file at the pin apart from line endings, and a7800.ini sets hashpath to hash. The pin is an ancestor of the v5.2 tag. --- emulators/a7800.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/emulators/a7800.yml b/emulators/a7800.yml index 1d39b81ad..0a321d3df 100644 --- a/emulators/a7800.yml +++ b/emulators/a7800.yml @@ -100,7 +100,8 @@ files: note: >- Software list set for the High Score Cartridge configuration (CX78HSC, slot a78_hsc). Fatal when that configuration is selected and the set is - absent. + absent. The list is read from hash/a7800.xml, which the v5.2 release + archives for Linux, macOS and Windows carry beside the binary. contents: - name: highscre.bin description: High Score Cartridge ROM, read through the pass-through cart @@ -117,7 +118,8 @@ files: Software list set for the XM Expansion Module configuration (slot a78_xm), which reuses the High Score Cartridge ROM alongside 128KB RAM, POKEY and YM2151. Fatal when that configuration is selected and the set - is absent. + is absent. The list is read from hash/a7800.xml, which the v5.2 + release archives for Linux, macOS and Windows carry beside the binary. contents: - name: highscre.bin description: High Score Cartridge ROM, gated by XM control register bit 3 From e32cdf9154a4410925ccfab8758e76afea9a16be Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 14:00:49 +0100 Subject: [PATCH 26/31] fix: keep only the EDK2 images -bios can start Each EDK2 code image was run through a .qemu_cmd_line with -bios in the buildbot qemu_libretro.so (linux x86_64, 2026-07-27, 06ad814b) under scripts/core_probe.py, every pc-bios file staged in system/qemu. edk2-aarch64-code.fd and edk2-arm-code.fd reach the TianoCore boot screen on -M virt with ramfb. edk2-x86_64-code.fd makes QEMU exit at once, as bios-256k.bin on the same command line does not: the x86 images are 3653632 bytes, not a multiple of 64 KiB, and x86_bios_rom_init refuses them (hw/i386/x86-common.c:1000-1002), the i386 and secure images included. edk2-riscv-code.fd leaves a black screen: it is S-mode code for pflash0 (docs/system/riscv/virt.rst:59-70). The x86 and RISC-V images are read only as pflash drives, opened by path from the content folder, so the five entries are removed. --- emulators/qemu.yml | 51 ++++++++-------------------------------------- 1 file changed, 8 insertions(+), 43 deletions(-) diff --git a/emulators/qemu.yml b/emulators/qemu.yml index e19cb5549..e596e06bf 100644 --- a/emulators/qemu.yml +++ b/emulators/qemu.yml @@ -387,44 +387,12 @@ files: # ======================================================== # EDK2 UEFI FIRMWARE # ======================================================== - - name: "EDK2 x86_64 UEFI" - path: "qemu/edk2-x86_64-code.fd" - sha1: "eac1a94b8e0d7c53fd5df001c36794ec34c7c724" - size: 3653632 - required: false - note: "TianoCore UEFI firmware for x86_64. Built from edk2-stable202302." - source_ref: "source pc-bios/meson.build:12, source hw/i386/x86-common.c:993-994" - - - name: "EDK2 x86_64 Secure Boot UEFI" - path: "qemu/edk2-x86_64-secure-code.fd" - sha1: "617abe2746696bb4a309d72cecb446dc76a2a61e" - size: 3653632 - required: false - note: "TianoCore UEFI firmware for x86_64 with Secure Boot support." - source_ref: "source pc-bios/meson.build:13, source hw/i386/x86-common.c:993-994" - - - name: "EDK2 i386 UEFI" - path: "qemu/edk2-i386-code.fd" - sha1: "45b8faebdfaaf19d16e3a7c5f60d69214685071c" - size: 3653632 - required: false - note: "TianoCore UEFI firmware for i386." - source_ref: "source pc-bios/meson.build:9, source hw/i386/x86-common.c:993-994" - - - name: "EDK2 i386 Secure Boot UEFI" - path: "qemu/edk2-i386-secure-code.fd" - sha1: "6982abec8ef2ed7c8293163d5a0bd69a01a2126f" - size: 3653632 - required: false - note: "TianoCore UEFI firmware for i386 with Secure Boot support." - source_ref: "source pc-bios/meson.build:10, source hw/i386/x86-common.c:993-994" - - name: "EDK2 AArch64 UEFI" path: "qemu/edk2-aarch64-code.fd" sha1: "514edbce58bfa877170673c1799351a7dab3b6df" size: 67108864 required: false - note: "TianoCore UEFI firmware for AArch64 (ARM 64-bit)." + note: "TianoCore UEFI firmware for AArch64 (ARM 64-bit). Starts with -bios on the virt machine." source_ref: "source pc-bios/meson.build:4, source hw/arm/virt.c:1331" - name: "EDK2 ARM UEFI" @@ -432,17 +400,9 @@ files: sha1: "c20f01c28b59b388abb9d0febeec45d801a632f0" size: 67108864 required: false - note: "TianoCore UEFI firmware for ARM (32-bit)." + note: "TianoCore UEFI firmware for ARM (32-bit). Starts with -bios on the virt machine." source_ref: "source pc-bios/meson.build:5, source hw/arm/virt.c:1331" - - name: "EDK2 RISC-V UEFI" - path: "qemu/edk2-riscv-code.fd" - sha1: "2c8633d881ece0c4794d740138a318f7e9af480c" - size: 33554432 - required: false - note: "TianoCore UEFI firmware for RISC-V 64-bit." - source_ref: "source pc-bios/meson.build:7, source hw/riscv/boot.c:89-92" - # ======================================================== # POWERPC FIRMWARE # ======================================================== @@ -719,6 +679,11 @@ notes: names them: a .qemu_cmd_line names a code image with -bios, which is looked up in the data directory. pflash drives, the variable store templates included, are opened by path from the content folder - (ui/libretro.c:697). + (ui/libretro.c:697). The ARM and AArch64 code images boot through + -bios on the virt machine. The x86 images are 3653632 bytes, not a + multiple of 64 KiB, so x86_bios_rom_init refuses them + (hw/i386/x86-common.c:1000-1002), and the RISC-V image is S-mode code + for pflash0 that -bios does not start: those are read only as pflash + drives, never from the system directory. experimental: "This core is marked is_experimental=true in its .info file." version: "Based on QEMU 9.0.50 (io12/qemu-libretro)" From 1b711b96f59ef16e39ff5f520925a551a3aadaff Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 14:03:29 +0100 Subject: [PATCH 27/31] fix: read libretro MAME sets in mame/bios libretro/mame hands MAME the rompath ;/mame/bios; /mame/roms (src/osd/libretro/libretro-internal/retro_init.cpp:580-597 at 5f5a0774, 573-579 at dc1a9653 for 0.258, 582-588 at fba50741 for 0.278, CORE_NAME "mame" in libretro_shared.h). The system folder itself is never searched, and every pack put the sets there. The mame, mame0258, mame0278, mamearcade and mamemess profiles now lay their sets out in mame/bios, the standalone build keeping the top of its rompath. The release profile writer and the device and set merge write the same paths on new entries. RetroBat offers MAME as the libretro core mame and as the standalone mame64 (es_systems.cfg), two names of one profile, and laid out only the standalone build. A libretro name whose profile the platform also runs standalone under another name now makes the profile dual mode. Manifests: mame/bios gains 1453 sets on RetroArch, Lakka, RetroPie, EmuDeck and RetroDECK, 1427 on Batocera, KNULLI, RetroBat, ROCKNIX, AmberELEC and EmuELEC, 78 on Recalbox. Root copies only these cores claimed leave: 1373 on RetroArch and Lakka, 1372 on RetroPie, 1349 on ROCKNIX, 1347 on AmberELEC, 1365 on EmuELEC, 240 on RetroDECK, 26 on EmuDeck, 9 on Recalbox. Batocera, KNULLI and RetroBat keep theirs for the standalone rompath. RetroBat gains the libretro layout: mame/hash (725), mame/samples/floppy (19) and mame/plugins (71). The root copies other cores still claim now hold the copy those cores resolve (38 on RetroArch). Recalbox drops three Arcade/Arcade copies (coh3002t, pumpitup, naomi2) that only the root claim reached, mame/bios holding the copies with every member the 0.258 and 0.278 sets list. No set is lost. --- emulators/mame.yml | 1431 +++++++++++++++++++++++++- emulators/mame0258.yml | 75 ++ emulators/mame0278.yml | 78 ++ emulators/mamearcade.yml | 54 +- emulators/mamemess.yml | 125 ++- scripts/common.py | 27 + scripts/scraper/_hash_merge.py | 25 +- scripts/scraper/mame_hash_scraper.py | 4 + tests/test_hash_merge.py | 2 + tests/test_launcher_placement.py | 29 + 10 files changed, 1845 insertions(+), 5 deletions(-) diff --git a/emulators/mame.yml b/emulators/mame.yml index 7026a3b1a..a9439bbfe 100644 --- a/emulators/mame.yml +++ b/emulators/mame.yml @@ -173,7 +173,9 @@ notes: | unmodified. No hiscore support. Paths under system_dir/mame/ (artwork, cheat, hash, ini, plugins, samples, crosshair). ROM search: content_dir + system_dir/mame/bios + - system_dir/mame/roms. Cheats via per-game XML files. + system_dir/mame/roms, never system_dir itself + (src/osd/libretro/libretro-internal/retro_init.cpp:580-597), so the libretro + build reads its sets in mame/bios. Cheats via per-game XML files. The standalone build splits every search path on semicolons and tries each directory in turn until the file opens (src/emu/fileio.cpp:53-58, 330-392). rompath defaults to roms, samplepath to samples, hashpath to @@ -826,6 +828,7 @@ files: # SNK Neo Geo MVS/AES - name: neogeo.zip + path: "mame/bios/neogeo.zip" standalone_path: "neogeo.zip" required: true category: bios_zip @@ -975,6 +978,7 @@ files: # IGS PGM - name: pgm.zip + path: "mame/bios/pgm.zip" standalone_path: "pgm.zip" required: true category: bios_zip @@ -1000,6 +1004,7 @@ files: # Sega NAOMI / NAOMI 2 / GD-ROM / Atomiswave - name: naomi.zip + path: "mame/bios/naomi.zip" standalone_path: "naomi.zip" required: true category: bios_zip @@ -1138,6 +1143,7 @@ files: sha1: "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc" - name: naomi2.zip + path: "mame/bios/naomi2.zip" standalone_path: "naomi2.zip" required: true category: bios_zip @@ -1210,6 +1216,7 @@ files: sha1: "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc" - name: naomigd.zip + path: "mame/bios/naomigd.zip" standalone_path: "naomigd.zip" required: true category: bios_zip @@ -1262,6 +1269,7 @@ files: sha1: "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc" - name: awbios.zip + path: "mame/bios/awbios.zip" standalone_path: "awbios.zip" required: true category: bios_zip @@ -1282,6 +1290,7 @@ files: sha1: "5128fe2ddcced77332bdcab691c09958051fa564" - name: hod2bios.zip + path: "mame/bios/hod2bios.zip" standalone_path: "hod2bios.zip" required: false category: bios_zip @@ -1319,6 +1328,7 @@ files: sha1: "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc" - name: f355dlx.zip + path: "mame/bios/f355dlx.zip" standalone_path: "f355dlx.zip" required: false category: bios_zip @@ -1355,6 +1365,7 @@ files: sha1: "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc" - name: f355bios.zip + path: "mame/bios/f355bios.zip" standalone_path: "f355bios.zip" required: false category: bios_zip @@ -1383,6 +1394,7 @@ files: sha1: "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc" - name: airlbios.zip + path: "mame/bios/airlbios.zip" standalone_path: "airlbios.zip" required: false category: bios_zip @@ -1408,6 +1420,7 @@ files: # Sega ST-V / Lindbergh / SP / Hikaru / Chihiro / Triforce - name: stvbios.zip + path: "mame/bios/stvbios.zip" standalone_path: "stvbios.zip" required: true category: bios_zip @@ -1476,6 +1489,7 @@ files: sha1: "7d9364d546f3d3f839ec36be148076f8d26a65a6" - name: lindbios.zip + path: "mame/bios/lindbios.zip" standalone_path: "lindbios.zip" required: true category: bios_zip @@ -1507,6 +1521,7 @@ files: sha1: "f129787e487984edd23bf344f2e9500c85052275" - name: segasp.zip + path: "mame/bios/segasp.zip" standalone_path: "segasp.zip" system: sega-systemsp required: true @@ -1563,6 +1578,7 @@ files: sha1: "832a3db097af680d1d0eb9451b4650565f0cf8c7" - name: hikaru.zip + path: "mame/bios/hikaru.zip" standalone_path: "hikaru.zip" required: true category: bios_zip @@ -1596,6 +1612,7 @@ files: bad_dump: true - name: chihiro.zip + path: "mame/bios/chihiro.zip" standalone_path: "chihiro.zip" required: true category: bios_zip @@ -1632,6 +1649,7 @@ files: sha1: "82dad6e2a75bab4a4840dc6939462f1fb9b95101" - name: triforce.zip + path: "mame/bios/triforce.zip" standalone_path: "triforce.zip" required: true category: bios_zip @@ -1644,6 +1662,7 @@ files: sha1: "c3cb7227e4dbc2af861e76d00cb59726105a2e4c" - name: shtzone.zip + path: "mame/bios/shtzone.zip" standalone_path: "shtzone.zip" system: sega-shootingzone required: true @@ -1656,6 +1675,7 @@ files: sha1: "43fd8bfc395e3b2e3fbe9645d692a5eb04783d9c" - name: sammymdl.zip + path: "mame/bios/sammymdl.zip" standalone_path: "sammymdl.zip" system: sammy-medal required: true @@ -1680,6 +1700,7 @@ files: # Sega Mega Drive arcade - name: megaplay.zip + path: "mame/bios/megaplay.zip" standalone_path: "megaplay.zip" required: true category: bios_zip @@ -1721,6 +1742,7 @@ files: bad_dump: true - name: megatech.zip + path: "mame/bios/megatech.zip" standalone_path: "megatech.zip" required: true category: bios_zip @@ -1749,6 +1771,7 @@ files: sha1: "c9008c431a937c084fb475273093ca0b434b5f47" - name: isgsm.zip + path: "mame/bios/isgsm.zip" standalone_path: "isgsm.zip" system: sega-isgsm required: true @@ -1761,6 +1784,7 @@ files: sha1: "97ba0e0f0be832a5114d95151e519bc027f6675b" - name: systemy2.zip + path: "mame/bios/systemy2.zip" standalone_path: "systemy2.zip" system: sielectronics-y2 required: true @@ -1774,6 +1798,7 @@ files: # DECO Cassette - name: decocass.zip + path: "mame/bios/decocass.zip" standalone_path: "decocass.zip" required: true category: bios_zip @@ -1963,6 +1988,7 @@ files: # Nintendo arcade - name: playch10.zip + path: "mame/bios/playch10.zip" standalone_path: "playch10.zip" required: true category: bios_zip @@ -2055,6 +2081,7 @@ files: sha1: "d10acafc8da9ff479c270ec01180cca61efe62f5" - name: nss.zip + path: "mame/bios/nss.zip" standalone_path: "nss.zip" required: true category: bios_zip @@ -2078,6 +2105,7 @@ files: sha1: "e3942f9d508c3c8074c3c3941376c37ca68b8e54" - name: sfcbox.zip + path: "mame/bios/sfcbox.zip" standalone_path: "sfcbox.zip" required: true category: bios_zip @@ -2100,6 +2128,7 @@ files: sha1: "a3d336db585fe02a37c323422d9db6a33fd489a6" - name: aleck64.zip + path: "mame/bios/aleck64.zip" standalone_path: "aleck64.zip" system: nintendo-aleck64 required: true @@ -2121,6 +2150,7 @@ files: # Philips CD-i - name: cdibios.zip + path: "mame/bios/cdibios.zip" standalone_path: "cdibios.zip" required: true category: bios_zip @@ -2145,6 +2175,7 @@ files: # Commodore Cubo (CD32-based) - name: cubo.zip + path: "mame/bios/cubo.zip" standalone_path: "cubo.zip" required: true category: bios_zip @@ -2158,6 +2189,7 @@ files: # Namco boards - name: sys246.zip + path: "mame/bios/sys246.zip" standalone_path: "sys246.zip" required: true category: bios_zip @@ -2170,6 +2202,7 @@ files: sha1: "f0a74bbcaf801f3fd0b7002ebd0118564aae3528" - name: sys256.zip + path: "mame/bios/sys256.zip" standalone_path: "sys256.zip" required: true category: bios_zip @@ -2182,6 +2215,7 @@ files: sha1: "bc4fb4e1e53adbd92385f1726bd69663ff870f1e" - name: sys573.zip + path: "mame/bios/sys573.zip" standalone_path: "sys573.zip" required: true category: bios_zip @@ -2221,6 +2255,7 @@ files: # Konami - name: konamigx.zip + path: "mame/bios/konamigx.zip" standalone_path: "konamigx.zip" system: konami-gx required: true @@ -2233,6 +2268,7 @@ files: sha1: "c483aa98ff8ef40cdac359c19ad23fea5ecc1906" - name: konamigv.zip + path: "mame/bios/konamigv.zip" standalone_path: "konamigv.zip" required: true category: bios_zip @@ -2245,6 +2281,7 @@ files: sha1: "02a82a2fe1fba0404517c3602324bfa64e23e478" - name: kviper.zip + path: "mame/bios/kviper.zip" standalone_path: "kviper.zip" required: true category: bios_zip @@ -2265,6 +2302,7 @@ files: sha1: "ed7cd9b2763b3e377df9663943160f9871f65105" - name: gq863.zip + path: "mame/bios/gq863.zip" standalone_path: "gq863.zip" required: true category: bios_zip @@ -2281,6 +2319,7 @@ files: sha1: "cab5209f90f47b9ee6e721479913ad74e3ba84b1" - name: bubsys.zip + path: "mame/bios/bubsys.zip" standalone_path: "bubsys.zip" system: konami-bubblesystem required: true @@ -2305,6 +2344,7 @@ files: sha1: "7ab46f9d5d587665782cefc623b8de0124a6d38a" - name: konendev.zip + path: "mame/bios/konendev.zip" standalone_path: "konendev.zip" system: konami-endeavour required: true @@ -2317,6 +2357,7 @@ files: sha1: "3d2c40c9d504358d890364e26c9562e40314d8a4" - name: kpython.zip + path: "mame/bios/kpython.zip" standalone_path: "kpython.zip" system: konami-python required: true @@ -2329,6 +2370,7 @@ files: sha1: "4bc268a996825c1bdf6ae277d331fe7bdc0cc00c" - name: kpython2.zip + path: "mame/bios/kpython2.zip" standalone_path: "kpython2.zip" system: konami-python2 required: true @@ -2342,6 +2384,7 @@ files: # Sony ZN-based (PSX arcade, renamed from legacy cpzn/atpsx names) - name: coh1000c.zip + path: "mame/bios/coh1000c.zip" standalone_path: "coh1000c.zip" required: true category: bios_zip @@ -2364,6 +2407,7 @@ files: sha1: "966f3aee5d00e1312c455f855915d621e6cb0672" - name: coh3002c.zip + path: "mame/bios/coh3002c.zip" standalone_path: "coh3002c.zip" required: true category: bios_zip @@ -2380,6 +2424,7 @@ files: sha1: "3c3fb8227b05dace042dc1429b9f2355b1a15638" - name: coh1000t.zip + path: "mame/bios/coh1000t.zip" standalone_path: "coh1000t.zip" system: taito-fx1 required: true @@ -2396,6 +2441,7 @@ files: sha1: "96d94f2b06fb7ecd91454969f4959a583ffb9d5a" - name: coh1000a.zip + path: "mame/bios/coh1000a.zip" standalone_path: "coh1000a.zip" system: acclaim-zn1 required: true @@ -2412,6 +2458,7 @@ files: sha1: "decf77ab50f7f58c641c3214a11647924f3a8998" - name: coh1000w.zip + path: "mame/bios/coh1000w.zip" standalone_path: "coh1000w.zip" system: atari-zn1 required: true @@ -2428,6 +2475,7 @@ files: sha1: "8e87941bfb374172628c8a37647e3a66b7166aa8" - name: coh1001l.zip + path: "mame/bios/coh1001l.zip" standalone_path: "coh1001l.zip" system: atlus-zn1 required: true @@ -2444,6 +2492,7 @@ files: sha1: "8d2fe1facb4473cc20b4b477aaf881f9280939cf" - name: coh1002v.zip + path: "mame/bios/coh1002v.zip" standalone_path: "coh1002v.zip" system: videosystem-zn1 required: true @@ -2460,6 +2509,7 @@ files: sha1: "b01479dc75a4a8a86bee7ac7cd10af2bda332544" - name: coh1002e.zip + path: "mame/bios/coh1002e.zip" standalone_path: "coh1002e.zip" system: eighting-zn1 required: true @@ -2476,6 +2526,7 @@ files: sha1: "1069c1d9015028a51a1b314cfacb014ea90aa425" - name: coh1002m.zip + path: "mame/bios/coh1002m.zip" standalone_path: "coh1002m.zip" system: tecmo-tps required: true @@ -2493,6 +2544,7 @@ files: # Taito - name: coh3002t.zip + path: "mame/bios/coh3002t.zip" standalone_path: "coh3002t.zip" system: taito-gnet required: true @@ -2537,6 +2589,7 @@ files: sha1: "c6918dfbb6fcf686dde4b731e84f740177ab31f0" - name: coh1002t.zip + path: "mame/bios/coh1002t.zip" standalone_path: "coh1002t.zip" system: taito-gnet required: true @@ -2561,6 +2614,7 @@ files: sha1: "9ce888bd2a7e575c8ca71d978cb85de22afb5660" - name: taitotz.zip + path: "mame/bios/taitotz.zip" standalone_path: "taitotz.zip" system: taito-typezero required: true @@ -2578,6 +2632,7 @@ files: # Super Kaneko Nova System - name: skns.zip + path: "mame/bios/skns.zip" standalone_path: "skns.zip" required: true category: bios_zip @@ -2614,6 +2669,7 @@ files: sha1: "463962ffe19880135f0d95a7beda79e27448e872" - name: mac2bios.zip + path: "mame/bios/mac2bios.zip" standalone_path: "mac2bios.zip" system: imax-macs required: false @@ -2622,6 +2678,7 @@ files: note: "macs2os_l.bin and macs2os_h.bin are both NO_DUMP (src/mame/seta/macs.cpp:532-535). handle_missing_file (src/emu/romload.cpp:529-571) counts a missing NO_DUMP ROM as known bad, not an error, so the machine runs without the set." - name: macsbios.zip + path: "mame/bios/macsbios.zip" standalone_path: "macsbios.zip" system: imax-macs required: true @@ -2643,6 +2700,7 @@ files: # Panasonic 3DO - name: 3dobios.zip + path: "mame/bios/3dobios.zip" standalone_path: "3dobios.zip" required: true category: bios_zip @@ -2671,6 +2729,7 @@ files: sha1: "b01c53da256dde43ffec4ad3fc3adfa8d635e943" - name: alg3do.zip + path: "mame/bios/alg3do.zip" standalone_path: "alg3do.zip" system: panasonic-3do required: true @@ -2684,6 +2743,7 @@ files: # Hyper Neo-Geo 64 - name: hng64.zip + path: "mame/bios/hng64.zip" standalone_path: "hng64.zip" required: true category: bios_zip @@ -2733,6 +2793,7 @@ files: # Amiga-based - name: ar_bios.zip + path: "mame/bios/ar_bios.zip" standalone_path: "ar_bios.zip" system: arcadia-systems required: true @@ -2825,6 +2886,7 @@ files: sha1: "80070521476e92323a6baa6e55928ca5b751a332" - name: alg_bios.zip + path: "mame/bios/alg_bios.zip" standalone_path: "alg_bios.zip" system: alg-laserdisc required: true @@ -2839,6 +2901,7 @@ files: # Atari - name: atarisy1.zip + path: "mame/bios/atarisy1.zip" standalone_path: "atarisy1.zip" system: atari-system1 required: true @@ -2907,6 +2970,7 @@ files: sha1: "0a42a4816c89447b16e1f3245409591efea98a4a" - name: maxaflex.zip + path: "mame/bios/maxaflex.zip" standalone_path: "maxaflex.zip" system: exidy-maxaflex required: true @@ -2928,6 +2992,7 @@ files: # Crystal System - name: crysbios.zip + path: "mame/bios/crysbios.zip" standalone_path: "crysbios.zip" system: brezzasoft-crystal required: true @@ -2948,6 +3013,7 @@ files: # Galaxy Games # Aristocrat - name: aristmk5.zip + path: "mame/bios/aristmk5.zip" standalone_path: "aristmk5.zip" system: aristocrat-mk5 required: true @@ -3049,6 +3115,7 @@ files: sha1: "1ca091fba69e92f262dbb3d40f515703c8981793" - name: aristmk6.zip + path: "mame/bios/aristmk6.zip" standalone_path: "aristmk6.zip" system: aristocrat-mk6 required: true @@ -3453,6 +3520,7 @@ files: sha1: "6e9c9d7960fe0ef083ff824287a99d9c0b9f5e6a" - name: aristmk7.zip + path: "mame/bios/aristmk7.zip" standalone_path: "aristmk7.zip" system: aristocrat-mk7 required: true @@ -3466,6 +3534,7 @@ files: # Pinball - name: allied.zip + path: "mame/bios/allied.zip" standalone_path: "allied.zip" system: allied-leisure-pinball required: true @@ -3486,6 +3555,7 @@ files: sha1: "baa0f73fda08a3c5d6f1423fb329e4febb07ef97" - name: gp_110.zip + path: "mame/bios/gp_110.zip" standalone_path: "gp_110.zip" system: gameplan-mpu1 required: true @@ -3502,6 +3572,7 @@ files: sha1: "767e15e19e11399935c890c1d1034dccf1ad7f92" - name: gts1.zip + path: "mame/bios/gts1.zip" standalone_path: "gts1.zip" system: gottlieb-system1 required: true @@ -3518,6 +3589,7 @@ files: sha1: "31245daa9972ef8652caee69986585bb8239e86e" - name: recel.zip + path: "mame/bios/recel.zip" standalone_path: "recel.zip" system: recel-system3 required: true @@ -3534,6 +3606,7 @@ files: sha1: "8545e168a5f256150bcff12d1e6d8efffd08c3cd" - name: slvrball.zip + path: "mame/bios/slvrball.zip" standalone_path: "slvrball.zip" system: tab-silverball required: true @@ -3638,6 +3711,7 @@ files: # Nichibutsu - name: nichidvd.zip + path: "mame/bios/nichidvd.zip" standalone_path: "nichidvd.zip" system: nichibutsu-hrdvd required: true @@ -3659,6 +3733,7 @@ files: # EFO Cedar Magnet - name: cedmag.zip + path: "mame/bios/cedmag.zip" standalone_path: "cedmag.zip" system: efo-cedar-magnet required: true @@ -3672,6 +3747,7 @@ files: # Misc - name: iteagle.zip + path: "mame/bios/iteagle.zip" standalone_path: "iteagle.zip" system: itech-eagle required: true @@ -3760,6 +3836,7 @@ files: sha1: "213cbdd6cd37ad9b5bfc9545084892a68d29f5ff" - name: su2000.zip + path: "mame/bios/su2000.zip" standalone_path: "su2000.zip" system: virtuality-su2000 required: true @@ -3944,6 +4021,7 @@ files: sha1: "087b5a56ddb6bef6b1bc93b9a8e0d23de27aa399" - name: tourvis.zip + path: "mame/bios/tourvis.zip" standalone_path: "tourvis.zip" system: pce-tourvision required: true @@ -4007,6 +4085,7 @@ files: sha1: "881ea7802b9e241473bc8ced0472e0f1851c9886" - name: v4bios.zip + path: "mame/bios/v4bios.zip" standalone_path: "v4bios.zip" system: barcrest-mpu4 required: true @@ -4019,6 +4098,7 @@ files: sha1: "49798165640627eb31024319353da04380787b10" - name: miuchiz.zip + path: "mame/bios/miuchiz.zip" standalone_path: "miuchiz.zip" system: miuchiz required: true @@ -4031,6 +4111,7 @@ files: sha1: "633365fd19a3d0f2ce56cb499b2577a5fb53e466" - name: pumpitup.zip + path: "mame/bios/pumpitup.zip" standalone_path: "pumpitup.zip" system: andamiro-pumpitup required: true @@ -4058,6 +4139,7 @@ files: # Bally Astrocade - name: astrocde.zip + path: "mame/bios/astrocde.zip" standalone_path: "astrocde.zip" required: true category: bios_zip @@ -4070,6 +4152,7 @@ files: crc32: "ebc77f3a" - name: astrocdl.zip + path: "mame/bios/astrocdl.zip" standalone_path: "astrocdl.zip" required: false category: bios_zip @@ -4082,6 +4165,7 @@ files: crc32: "d7c517ba" - name: astrocdw.zip + path: "mame/bios/astrocdw.zip" standalone_path: "astrocdw.zip" required: false category: bios_zip @@ -4095,6 +4179,7 @@ files: # Apple IIgs - name: apple2gs.zip + path: "mame/bios/apple2gs.zip" standalone_path: "apple2gs.zip" required: true category: bios_zip @@ -4120,6 +4205,7 @@ files: # Apple Macintosh, machines and the devices they instantiate - name: mac128k.zip + path: "mame/bios/mac128k.zip" standalone_path: "mac128k.zip" required: true category: bios_zip @@ -4138,6 +4224,7 @@ files: crc32: "fd2665c2" - name: mac512k.zip + path: "mame/bios/mac512k.zip" standalone_path: "mac512k.zip" required: false category: bios_zip @@ -4155,6 +4242,7 @@ files: crc32: "d51f376e" - name: macplus.zip + path: "mame/bios/macplus.zip" standalone_path: "macplus.zip" required: true category: bios_zip @@ -4198,6 +4286,7 @@ files: crc32: "a28ba8ec" - name: macse.zip + path: "mame/bios/macse.zip" standalone_path: "macse.zip" required: true category: bios_zip @@ -4212,6 +4301,7 @@ files: crc32: "0f7ff80c" - name: macclasc.zip + path: "mame/bios/macclasc.zip" standalone_path: "macclasc.zip" required: true category: bios_zip @@ -4226,6 +4316,7 @@ files: crc32: "510d7d38" - name: mac2fdhd.zip + path: "mame/bios/mac2fdhd.zip" standalone_path: "mac2fdhd.zip" required: true category: bios_zip @@ -4240,6 +4331,7 @@ files: crc32: "ce3b966f" - name: maciix.zip + path: "mame/bios/maciix.zip" standalone_path: "maciix.zip" required: false category: bios_zip @@ -4255,6 +4347,7 @@ files: crc32: "ce3b966f" - name: maclc3.zip + path: "mame/bios/maclc3.zip" standalone_path: "maclc3.zip" required: true category: bios_zip @@ -4269,6 +4362,7 @@ files: crc32: "e578f5f3" - name: adbmodem.zip + path: "mame/bios/adbmodem.zip" standalone_path: "adbmodem.zip" required: true category: bios_zip @@ -4284,6 +4378,7 @@ files: sha1: "4a35a44605073ae6076a0292e2056ee4d938d1bd" - name: egret.zip + path: "mame/bios/egret.zip" standalone_path: "egret.zip" required: true category: bios_zip @@ -4310,6 +4405,7 @@ files: sha1: "8b0dae3ec66cdddbf71567365d2c462688aeb571" - name: mackbd_m0110.zip + path: "mame/bios/mackbd_m0110.zip" standalone_path: "mackbd_m0110.zip" required: true category: bios_zip @@ -4325,6 +4421,7 @@ files: sha1: "32a3b58afb445a8675b12a4de3aec2fa00c99222" - name: mackbd_m0110a.zip + path: "mame/bios/mackbd_m0110a.zip" standalone_path: "mackbd_m0110a.zip" required: true category: bios_zip @@ -4339,6 +4436,7 @@ files: sha1: "a80404a122d74721cda13b285c412057c2c78bd7" - name: mackbd_m0120.zip + path: "mame/bios/mackbd_m0120.zip" standalone_path: "mackbd_m0120.zip" required: true category: bios_zip @@ -4354,6 +4452,7 @@ files: sha1: "32a3b58afb445a8675b12a4de3aec2fa00c99222" - name: nb_mdc824.zip + path: "mame/bios/nb_mdc824.zip" standalone_path: "nb_mdc824.zip" required: true category: bios_zip @@ -4369,6 +4468,7 @@ files: sha1: "4d3c0632711b7b31c8e0c5cfdd7ec1904f178336" - name: nb_image.zip + path: "mame/bios/nb_image.zip" standalone_path: "nb_image.zip" required: false category: bios_zip @@ -4385,6 +4485,7 @@ files: # Acorn Electron - name: electron.zip + path: "mame/bios/electron.zip" standalone_path: "electron.zip" required: true category: bios_zip @@ -4400,6 +4501,7 @@ files: crc32: "b997f9cb" - name: electron64.zip + path: "mame/bios/electron64.zip" standalone_path: "electron64.zip" required: false category: bios_zip @@ -4418,6 +4520,7 @@ files: crc32: "f80a0cea" - name: electron_plus1.zip + path: "mame/bios/electron_plus1.zip" standalone_path: "electron_plus1.zip" required: true category: bios_zip @@ -4434,6 +4537,7 @@ files: sha1: "2de04ab7c81414d6c9c967f965c53fc276392463" - name: electron_plus3.zip + path: "mame/bios/electron_plus3.zip" standalone_path: "electron_plus3.zip" required: true category: bios_zip @@ -4472,6 +4576,7 @@ files: # Tandy MC-10 - name: mc10.zip + path: "mame/bios/mc10.zip" standalone_path: "mc10.zip" required: true category: bios_zip @@ -4485,6 +4590,7 @@ files: crc32: "11fda97e" - name: alice.zip + path: "mame/bios/alice.zip" standalone_path: "alice.zip" required: false category: bios_zip @@ -4499,6 +4605,7 @@ files: # NEC PC-8001 - name: pc8001.zip + path: "mame/bios/pc8001.zip" standalone_path: "pc8001.zip" required: true category: bios_zip @@ -4526,6 +4633,7 @@ files: crc32: "56653188" - name: pc8001mk2sr.zip + path: "mame/bios/pc8001mk2sr.zip" standalone_path: "pc8001mk2sr.zip" required: false category: bios_zip @@ -4556,6 +4664,7 @@ files: # Atari XE Game System - name: xegs.zip + path: "mame/bios/xegs.zip" standalone_path: "xegs.zip" required: true category: bios_zip @@ -4570,6 +4679,7 @@ files: # Casio Loopy - name: casloopy.zip + path: "mame/bios/casloopy.zip" standalone_path: "casloopy.zip" required: true category: bios_zip @@ -4587,6 +4697,7 @@ files: # Casio PV-2000 - name: pv2000.zip + path: "mame/bios/pv2000.zip" standalone_path: "pv2000.zip" required: true category: bios_zip @@ -4600,6 +4711,7 @@ files: # Coleco Adam - name: adam.zip + path: "mame/bios/adam.zip" standalone_path: "adam.zip" required: true category: bios_zip @@ -4636,6 +4748,7 @@ files: crc32: "035a7a3d" - name: adam_kb.zip + path: "mame/bios/adam_kb.zip" standalone_path: "adam_kb.zip" required: true category: bios_zip @@ -4649,6 +4762,7 @@ files: sha1: "83162ffc75847328a05429135b728a63efb05b93" - name: adam_prn.zip + path: "mame/bios/adam_prn.zip" standalone_path: "adam_prn.zip" required: true category: bios_zip @@ -4662,6 +4776,7 @@ files: sha1: "32b40679749ad0317c2c9ee9ca619fad6d850ce7" - name: adam_ddp.zip + path: "mame/bios/adam_ddp.zip" standalone_path: "adam_ddp.zip" required: true category: bios_zip @@ -4675,6 +4790,7 @@ files: sha1: "b970f11e8f443fa130fba02ad1f60da51bf89673" - name: adam_fdc.zip + path: "mame/bios/adam_fdc.zip" standalone_path: "adam_fdc.zip" required: true category: bios_zip @@ -4688,6 +4804,7 @@ files: sha1: "1cb68891c3af80e99efad7e309136ca37244f060" - name: adam_fdc_320kb.zip + path: "mame/bios/adam_fdc_320kb.zip" standalone_path: "adam_fdc_320kb.zip" required: false category: bios_zip @@ -4711,6 +4828,7 @@ files: sha1: "bc8dd00dd5cde9500a4cd7dc1e4d74330184472a" - name: adam_fdc_a720dipi.zip + path: "mame/bios/adam_fdc_a720dipi.zip" standalone_path: "adam_fdc_a720dipi.zip" required: false category: bios_zip @@ -4723,6 +4841,7 @@ files: sha1: "15b3aaebba38af84f6a1a6ccdf840ca3d58635da" - name: adam_fdc_fp720at.zip + path: "mame/bios/adam_fdc_fp720at.zip" standalone_path: "adam_fdc_fp720at.zip" required: false category: bios_zip @@ -4735,6 +4854,7 @@ files: sha1: "e593a89d7c6e7ea99e7ce376ffa2732d7b646d49" - name: adam_fdc_mihddd.zip + path: "mame/bios/adam_fdc_mihddd.zip" standalone_path: "adam_fdc_mihddd.zip" required: false category: bios_zip @@ -4747,6 +4867,7 @@ files: sha1: "f6df22339c93dca938b65d0cbe23abcad89ec230" - name: adam_spi.zip + path: "mame/bios/adam_spi.zip" standalone_path: "adam_spi.zip" required: false category: bios_zip @@ -4760,6 +4881,7 @@ files: # Entex Adventure Vision - name: advision.zip + path: "mame/bios/advision.zip" standalone_path: "advision.zip" required: true category: bios_zip @@ -4777,6 +4899,7 @@ files: # APF M-1000 / Imagination Machine - name: apfm1000.zip + path: "mame/bios/apfm1000.zip" standalone_path: "apfm1000.zip" required: true category: bios_zip @@ -4798,6 +4921,7 @@ files: # Sega Advanced Pico BEENA - name: beena.zip + path: "mame/bios/beena.zip" standalone_path: "beena.zip" required: true category: bios_zip @@ -4815,6 +4939,7 @@ files: # Bandai RX-78 - name: rx78.zip + path: "mame/bios/rx78.zip" standalone_path: "rx78.zip" required: true category: bios_zip @@ -4829,6 +4954,7 @@ files: # Sega AI Computer - name: segaai.zip + path: "mame/bios/segaai.zip" standalone_path: "segaai.zip" required: true category: bios_zip @@ -4857,6 +4983,7 @@ files: crc32: "e042754b" - name: segaai_soundbox.zip + path: "mame/bios/segaai_soundbox.zip" standalone_path: "segaai_soundbox.zip" required: false category: bios_zip @@ -4872,6 +4999,7 @@ files: # Camputers Lynx 48K - name: lynx48k.zip + path: "mame/bios/lynx48k.zip" standalone_path: "lynx48k.zip" required: true category: bios_zip @@ -4897,6 +5025,7 @@ files: # Camputers Lynx 96K - name: lynx96k.zip + path: "mame/bios/lynx96k.zip" standalone_path: "lynx96k.zip" required: true category: bios_zip @@ -4930,6 +5059,7 @@ files: # Camputers Lynx 128K - name: lynx128k.zip + path: "mame/bios/lynx128k.zip" standalone_path: "lynx128k.zip" required: true category: bios_zip @@ -4955,6 +5085,7 @@ files: # VTech CreatiVision - name: crvision.zip + path: "mame/bios/crvision.zip" standalone_path: "crvision.zip" required: true category: bios_zip @@ -4967,6 +5098,7 @@ files: crc32: "c3c590c6" - name: fnvision.zip + path: "mame/bios/fnvision.zip" standalone_path: "fnvision.zip" required: false category: bios_zip @@ -4980,6 +5112,7 @@ files: crc32: "05602697" - name: lasr2001.zip + path: "mame/bios/lasr2001.zip" standalone_path: "lasr2001.zip" required: false category: bios_zip @@ -4993,6 +5126,7 @@ files: crc32: "4dc35c39" - name: manager.zip + path: "mame/bios/manager.zip" standalone_path: "manager.zip" required: false category: bios_zip @@ -5011,6 +5145,7 @@ files: # VTech Laser 310 (VZ-300) - name: laser310.zip + path: "mame/bios/laser310.zip" standalone_path: "laser310.zip" required: true category: bios_zip @@ -5029,6 +5164,7 @@ files: # VTech Socrates Educational Video System - name: socrates.zip + path: "mame/bios/socrates.zip" standalone_path: "socrates.zip" required: true category: bios_zip @@ -5059,6 +5195,7 @@ files: # VTech V.Smile Console - name: vsmile.zip + path: "mame/bios/vsmile.zip" standalone_path: "vsmile.zip" required: true category: bios_zip @@ -5081,6 +5218,7 @@ files: # Bit Corporation Gamate - name: gamate.zip + path: "mame/bios/gamate.zip" standalone_path: "gamate.zip" required: true category: bios_zip @@ -5098,6 +5236,7 @@ files: # Epoch Game Pocket Computer - name: gamepock.zip + path: "mame/bios/gamepock.zip" standalone_path: "gamepock.zip" required: true category: bios_zip @@ -5111,6 +5250,7 @@ files: # Hartung Game Master - name: gmaster.zip + path: "mame/bios/gmaster.zip" standalone_path: "gmaster.zip" required: true category: bios_zip @@ -5124,6 +5264,7 @@ files: # Tiger game.com - name: gamecom.zip + path: "mame/bios/gamecom.zip" standalone_path: "gamecom.zip" required: true category: bios_zip @@ -5143,6 +5284,7 @@ files: # GamePark GP32 - name: gp32.zip + path: "mame/bios/gp32.zip" standalone_path: "gp32.zip" required: true category: bios_zip @@ -5176,6 +5318,7 @@ files: # Fujitsu FM-7 family - name: fm7.zip + path: "mame/bios/fm7.zip" standalone_path: "fm7.zip" required: true category: bios_zip @@ -5204,6 +5347,7 @@ files: crc32: "62402ac9" - name: fm77av.zip + path: "mame/bios/fm77av.zip" standalone_path: "fm77av.zip" required: true category: bios_zip @@ -5232,6 +5376,7 @@ files: crc32: "e9f16c42" - name: fmnew7.zip + path: "mame/bios/fmnew7.zip" standalone_path: "fmnew7.zip" required: false category: bios_zip @@ -5250,6 +5395,7 @@ files: # Technosys Aamber Pegasus - name: pegasus.zip + path: "mame/bios/pegasus.zip" standalone_path: "pegasus.zip" required: true category: bios_zip @@ -5296,6 +5442,7 @@ files: # Amstrad PCW (Joyce) - name: pcw8256.zip + path: "mame/bios/pcw8256.zip" standalone_path: "pcw8256.zip" required: true category: bios_zip @@ -5319,6 +5466,7 @@ files: crc32: "25260958" - name: pcw9512.zip + path: "mame/bios/pcw9512.zip" standalone_path: "pcw9512.zip" required: true category: bios_zip @@ -5338,6 +5486,7 @@ files: # vis.cpp: vis (parent, WORKING). Tandy/Memorex MD-2500 (1992). # CD-ROM-based multimedia system built on modified 286 PC hardware. - name: vis.zip + path: "mame/bios/vis.zip" standalone_path: "vis.zip" required: true category: bios_zip @@ -5360,6 +5509,7 @@ files: # Z80-based home computers (1977-1983). Only trs80 (Level I) is MACHINE_SUPPORTS_SAVE, # all others MACHINE_NOT_WORKING. Software lists: trs80_cass, trs80_flop, trs80_quik. - name: trs80.zip + path: "mame/bios/trs80.zip" standalone_path: "trs80.zip" required: true category: bios_zip @@ -5377,6 +5527,7 @@ files: crc32: "0033f2b9" - name: trs80l2.zip + path: "mame/bios/trs80l2.zip" standalone_path: "trs80l2.zip" required: true category: bios_zip @@ -5417,6 +5568,7 @@ files: crc32: "0033f2b9" - name: eg3003.zip + path: "mame/bios/eg3003.zip" standalone_path: "eg3003.zip" required: false category: bios_zip @@ -5449,6 +5601,7 @@ files: crc32: "150c5f1f" - name: sys80.zip + path: "mame/bios/sys80.zip" standalone_path: "sys80.zip" required: false category: bios_zip @@ -5466,6 +5619,7 @@ files: crc32: "0033f2b9" - name: ht1080z.zip + path: "mame/bios/ht1080z.zip" standalone_path: "ht1080z.zip" required: false category: bios_zip @@ -5479,6 +5633,7 @@ files: crc32: "e8c59d4f" - name: ht1080z2.zip + path: "mame/bios/ht1080z2.zip" standalone_path: "ht1080z2.zip" required: false category: bios_zip @@ -5496,6 +5651,7 @@ files: crc32: "6728f0ab" - name: ht108064.zip + path: "mame/bios/ht108064.zip" standalone_path: "ht108064.zip" required: false category: bios_zip @@ -5521,6 +5677,7 @@ files: crc32: "e76b73a4" - name: trs80m3.zip + path: "mame/bios/trs80m3.zip" standalone_path: "trs80m3.zip" required: true category: bios_zip @@ -5561,6 +5718,7 @@ files: crc32: "444c8b60" - name: trs80m4.zip + path: "mame/bios/trs80m4.zip" standalone_path: "trs80m4.zip" required: false category: bios_zip @@ -5580,6 +5738,7 @@ files: crc32: "444c8b60" - name: trs80m4p.zip + path: "mame/bios/trs80m4p.zip" standalone_path: "trs80m4p.zip" required: false category: bios_zip @@ -5605,6 +5764,7 @@ files: crc32: "1ac44bea" - name: cp500.zip + path: "mame/bios/cp500.zip" standalone_path: "cp500.zip" required: false category: bios_zip @@ -5627,6 +5787,7 @@ files: # cartridge slot with the "fdc" option by default, the coco_fdc device. # Software lists: coco_cart, coco_flop. - name: coco.zip + path: "mame/bios/coco.zip" standalone_path: "coco.zip" required: true category: bios_zip @@ -5659,6 +5820,7 @@ files: crc32: "a82a6254" - name: coco2b.zip + path: "mame/bios/coco2b.zip" standalone_path: "coco2b.zip" required: true category: bios_zip @@ -5676,6 +5838,7 @@ files: crc32: "a82a6254" - name: coco3.zip + path: "mame/bios/coco3.zip" standalone_path: "coco3.zip" required: true category: bios_zip @@ -5689,6 +5852,7 @@ files: crc32: "b4c88d6c" - name: coco3p.zip + path: "mame/bios/coco3p.zip" standalone_path: "coco3p.zip" required: true category: bios_zip @@ -5702,6 +5866,7 @@ files: crc32: "ff050d80" - name: coco_fdc.zip + path: "mame/bios/coco_fdc.zip" standalone_path: "coco_fdc.zip" required: true category: bios_zip @@ -5764,6 +5929,7 @@ files: # Dragon 64 - name: dragon64.zip + path: "mame/bios/dragon64.zip" standalone_path: "dragon64.zip" required: true category: bios_zip @@ -5782,6 +5948,7 @@ files: # Acorn Archimedes - name: aa310.zip + path: "mame/bios/aa310.zip" standalone_path: "aa310.zip" required: true category: bios_zip @@ -5935,6 +6102,7 @@ files: crc32: "96ed59b2" - name: archimedes_keyboard.zip + path: "mame/bios/archimedes_keyboard.zip" standalone_path: "archimedes_keyboard.zip" required: true category: bios_zip @@ -5949,6 +6117,7 @@ files: # Epoch Super Cassette Vision - name: scv.zip + path: "mame/bios/scv.zip" standalone_path: "scv.zip" required: true category: bios_zip @@ -5971,6 +6140,7 @@ files: # TI-99/4A - name: ti99_4a.zip + path: "mame/bios/ti99_4a.zip" standalone_path: "ti99_4a.zip" required: true category: bios_zip @@ -6000,6 +6170,7 @@ files: crc32: "37859301" - name: ti99_speech.zip + path: "mame/bios/ti99_speech.zip" standalone_path: "ti99_speech.zip" required: false category: bios_zip @@ -6020,6 +6191,7 @@ files: # Tomy Tutor - name: tutor.zip + path: "mame/bios/tutor.zip" standalone_path: "tutor.zip" required: true category: bios_zip @@ -6042,6 +6214,7 @@ files: # Philips VG-5000 - name: vg5k.zip + path: "mame/bios/vg5k.zip" standalone_path: "vg5k.zip" required: true category: bios_zip @@ -6071,6 +6244,7 @@ files: # bbcmc.cpp: bbcmc (parent, BBC Master Compact). Software lists bbc_flop, # bbc_cass and bbc_rom among others. - name: bbcm.zip + path: "mame/bios/bbcm.zip" standalone_path: "bbcm.zip" required: true category: bios_zip @@ -6128,6 +6302,7 @@ files: sha1: "f3cb7f12b7432caba28d067f01af575779220aac" - name: bbcmc.zip + path: "mame/bios/bbcmc.zip" standalone_path: "bbcmc.zip" required: true category: bios_zip @@ -6147,6 +6322,7 @@ files: sha1: "140d002d2d9cd34b47197a2ba823505af2a84633" - name: saa5050.zip + path: "mame/bios/saa5050.zip" standalone_path: "saa5050.zip" required: true category: bios_zip @@ -6163,6 +6339,7 @@ files: sha1: "6c8daba70374e5aa3a6402f24cdc5f8677d58a0f" - name: bbc_tube_80186.zip + path: "mame/bios/bbc_tube_80186.zip" standalone_path: "bbc_tube_80186.zip" required: false category: bios_zip @@ -6184,6 +6361,7 @@ files: sha1: "45dc8d7e7936afbec6de423569d9005a1c350316" - name: bbc_bitstik1.zip + path: "mame/bios/bbc_bitstik1.zip" standalone_path: "bbc_bitstik1.zip" required: false category: bios_zip @@ -6197,6 +6375,7 @@ files: sha1: "c6f2cf2f6d1e48819a8381c6a1c97ca8fa5ab117" - name: bbc_bitstik2.zip + path: "mame/bios/bbc_bitstik2.zip" standalone_path: "bbc_bitstik2.zip" required: false category: bios_zip @@ -6226,6 +6405,7 @@ files: # bk.cpp: bk0010 (parent) with clones bk001001, bk0010fd, bk0011 and # bk0011m. A clone looks for its ROMs in its own set, then in bk0010.zip. - name: bk0010.zip + path: "mame/bios/bk0010.zip" standalone_path: "bk0010.zip" required: true category: bios_zip @@ -6250,6 +6430,7 @@ files: # GCE Vectrex - name: vectrex.zip + path: "mame/bios/vectrex.zip" standalone_path: "vectrex.zip" required: true category: bios_zip @@ -6270,6 +6451,7 @@ files: # Enterprise 64/128 - name: ep64_exdos.zip + path: "mame/bios/ep64_exdos.zip" standalone_path: "ep64_exdos.zip" required: false category: bios_zip @@ -6287,6 +6469,7 @@ files: # Device ROMs: sound chip ROM data - name: qsound.zip + path: "mame/bios/qsound.zip" standalone_path: "qsound.zip" required: false category: bios_zip @@ -6306,6 +6489,7 @@ files: sha1: "555f50fe5cdf127619da7d854c03f4a244a0c501" - name: ym2413.zip + path: "mame/bios/ym2413.zip" standalone_path: "ym2413.zip" required: false category: bios_zip @@ -6325,6 +6509,7 @@ files: sha1: "bb5537717e0b34849456b5ca7d405403dc3f8fda" - name: ym2608.zip + path: "mame/bios/ym2608.zip" standalone_path: "ym2608.zip" required: false category: bios_zip @@ -6344,6 +6529,7 @@ files: sha1: "50b6c3e288eaa12ad275d4f323267bb72b0445df" - name: ekara.zip + path: "mame/bios/ekara.zip" standalone_path: "ekara.zip" system: tvgames required: true @@ -6356,6 +6542,7 @@ files: sha1: "d75dda7434933135d2f7e353840a9384e9a0d586" - name: ekaraa.zip + path: "mame/bios/ekaraa.zip" standalone_path: "ekaraa.zip" system: tvgames required: true @@ -6368,6 +6555,7 @@ files: sha1: "450fbe53826cdb87ec797f84b9757987afcc1ec5" - name: ekaraj.zip + path: "mame/bios/ekaraj.zip" standalone_path: "ekaraj.zip" system: tvgames required: true @@ -6380,6 +6568,7 @@ files: sha1: "58b7f36a81571a2df5e812c118fdf68812a05abc" - name: ekarag.zip + path: "mame/bios/ekarag.zip" standalone_path: "ekarag.zip" system: tvgames required: true @@ -6392,6 +6581,7 @@ files: sha1: "433e65a6ea029b67ee62b4b3de52ff3504cfdf16" - name: ekaras.zip + path: "mame/bios/ekaras.zip" standalone_path: "ekaras.zip" system: tvgames required: true @@ -6404,6 +6594,7 @@ files: sha1: "402053e22e371c5f5e8069a4bf3b33841e742375" - name: isinger.zip + path: "mame/bios/isinger.zip" standalone_path: "isinger.zip" system: tvgames required: true @@ -6416,6 +6607,7 @@ files: sha1: "879da069ca8c126232a1b2dfcce25c8615540e48" - name: ekaraphs.zip + path: "mame/bios/ekaraphs.zip" standalone_path: "ekaraphs.zip" system: tvgames required: true @@ -6428,6 +6620,7 @@ files: sha1: "baaf35d56fa45b6f995b8466331bb30f0035f734" - name: epitch.zip + path: "mame/bios/epitch.zip" standalone_path: "epitch.zip" system: tvgames required: true @@ -6440,6 +6633,7 @@ files: sha1: "58b7f36a81571a2df5e812c118fdf68812a05abc" - name: ekaramix.zip + path: "mame/bios/ekaramix.zip" standalone_path: "ekaramix.zip" system: tvgames required: true @@ -6452,6 +6646,7 @@ files: sha1: "26f8c9edcbbed77e86a1cb5a0b91c92a16fef433" - name: ddrfammt.zip + path: "mame/bios/ddrfammt.zip" standalone_path: "ddrfammt.zip" system: tvgames required: true @@ -6464,6 +6659,7 @@ files: sha1: "a1043047056dd27bca69767ee2044461ec549465" - name: popira.zip + path: "mame/bios/popira.zip" standalone_path: "popira.zip" system: tvgames required: true @@ -6476,6 +6672,7 @@ files: sha1: "fb2ae023fc8a188c79b2d6550f737e06c05e12da" - name: popirak.zip + path: "mame/bios/popirak.zip" standalone_path: "popirak.zip" system: tvgames required: true @@ -6488,6 +6685,7 @@ files: sha1: "7877ac33b57bdd8ceac6bda3b0006a3274ad4dce" - name: popira2.zip + path: "mame/bios/popira2.zip" standalone_path: "popira2.zip" system: tvgames required: true @@ -6500,6 +6698,7 @@ files: sha1: "8b6c812d37e2dc2f2531b0e47d84ad8485729dc5" - name: taikodp.zip + path: "mame/bios/taikodp.zip" standalone_path: "taikodp.zip" system: tvgames required: true @@ -6512,6 +6711,7 @@ files: sha1: "03cae465965935fc084fb906f8f5de7679f42dd1" - name: jpopira.zip + path: "mame/bios/jpopira.zip" standalone_path: "jpopira.zip" system: tvgames required: true @@ -6528,6 +6728,7 @@ files: sha1: "e8f4ab51445777fe459f9ff09333f548c4e3507c" - name: evio.zip + path: "mame/bios/evio.zip" standalone_path: "evio.zip" system: tvgames required: true @@ -6540,6 +6741,7 @@ files: sha1: "f2b7e213eb78065a63ef484a619bcfc61299e30e" - name: tak_daig.zip + path: "mame/bios/tak_daig.zip" standalone_path: "tak_daig.zip" system: tvgames required: true @@ -6552,6 +6754,7 @@ files: sha1: "7d7b54684f8b0b92daf02738560779c7df627b91" - name: gcslottv.zip + path: "mame/bios/gcslottv.zip" standalone_path: "gcslottv.zip" system: tvgames required: true @@ -6564,6 +6767,7 @@ files: sha1: "1c7fc0c85d817db1550d40c0258f424770e0bd81" - name: hikara.zip + path: "mame/bios/hikara.zip" standalone_path: "hikara.zip" system: tvgames required: true @@ -6576,6 +6780,7 @@ files: sha1: "684dcfeaa8ac2888da2055617603494ce5fed93c" - name: galgames.zip + path: "mame/bios/galgames.zip" standalone_path: "galgames.zip" system: ces-galaxy-games required: true @@ -7577,6 +7782,7 @@ files: # ref: upstream src/frontend/mame/infoxml.cpp:761-765, 786, 1010-1015, # upstream src/frontend/mame/infoxml.cpp:2129-2172 - name: 22vp931.zip + path: "mame/bios/22vp931.zip" standalone_path: "22vp931.zip" required: false category: bios_zip @@ -7591,6 +7797,7 @@ files: sha1: "ea2d7f6a044ed085ce5e09d8b1b1a21c37f0e9b8" - name: 3c505.zip + path: "mame/bios/3c505.zip" standalone_path: "3c505.zip" required: false category: bios_zip @@ -7627,6 +7834,7 @@ files: sha1: "ca5ddcb272ab2851e00473dc960b23039746e3d2" - name: 3xtwin.zip + path: "mame/bios/3xtwin.zip" standalone_path: "3xtwin.zip" required: false category: bios_zip @@ -7645,6 +7853,7 @@ files: sha1: "359428ce0047f9192a44790c8670af956cf6ed70" - name: 4dparprn.zip + path: "mame/bios/4dparprn.zip" standalone_path: "4dparprn.zip" required: false category: bios_zip @@ -7662,6 +7871,7 @@ files: sha1: "d6179664d6860df5ed26fce72f253e28f933b01a" - name: a1000kbd_de.zip + path: "mame/bios/a1000kbd_de.zip" standalone_path: "a1000kbd_de.zip" required: false category: bios_zip @@ -7678,6 +7888,7 @@ files: bad_dump: true - name: a1000kbd_dk.zip + path: "mame/bios/a1000kbd_dk.zip" standalone_path: "a1000kbd_dk.zip" required: false category: bios_zip @@ -7694,6 +7905,7 @@ files: bad_dump: true - name: a1000kbd_fr.zip + path: "mame/bios/a1000kbd_fr.zip" standalone_path: "a1000kbd_fr.zip" required: false category: bios_zip @@ -7710,6 +7922,7 @@ files: bad_dump: true - name: a1000kbd_gb.zip + path: "mame/bios/a1000kbd_gb.zip" standalone_path: "a1000kbd_gb.zip" required: false category: bios_zip @@ -7726,6 +7939,7 @@ files: bad_dump: true - name: a1000kbd_it.zip + path: "mame/bios/a1000kbd_it.zip" standalone_path: "a1000kbd_it.zip" required: false category: bios_zip @@ -7742,6 +7956,7 @@ files: bad_dump: true - name: a1000kbd_se.zip + path: "mame/bios/a1000kbd_se.zip" standalone_path: "a1000kbd_se.zip" required: false category: bios_zip @@ -7758,6 +7973,7 @@ files: bad_dump: true - name: a1000kbd_us.zip + path: "mame/bios/a1000kbd_us.zip" standalone_path: "a1000kbd_us.zip" required: false category: bios_zip @@ -7774,6 +7990,7 @@ files: bad_dump: true - name: a1200kbd_rb.zip + path: "mame/bios/a1200kbd_rb.zip" standalone_path: "a1200kbd_rb.zip" required: false category: bios_zip @@ -7789,6 +8006,7 @@ files: sha1: "301ec6a69404457d912c89e3fc54095eda9f0e93" - name: a1cass.zip + path: "mame/bios/a1cass.zip" standalone_path: "a1cass.zip" required: false category: bios_zip @@ -7808,6 +8026,7 @@ files: sha1: "851f3bd6863859a1a6909179a5e5bf744b3d807e" - name: a2000kbd_ch.zip + path: "mame/bios/a2000kbd_ch.zip" standalone_path: "a2000kbd_ch.zip" required: false category: bios_zip @@ -7823,6 +8042,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a2000kbd_de.zip + path: "mame/bios/a2000kbd_de.zip" standalone_path: "a2000kbd_de.zip" required: false category: bios_zip @@ -7838,6 +8058,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a2000kbd_dk.zip + path: "mame/bios/a2000kbd_dk.zip" standalone_path: "a2000kbd_dk.zip" required: false category: bios_zip @@ -7853,6 +8074,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a2000kbd_es.zip + path: "mame/bios/a2000kbd_es.zip" standalone_path: "a2000kbd_es.zip" required: false category: bios_zip @@ -7868,6 +8090,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a2000kbd_fr.zip + path: "mame/bios/a2000kbd_fr.zip" standalone_path: "a2000kbd_fr.zip" required: false category: bios_zip @@ -7883,6 +8106,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a2000kbd_g80_de.zip + path: "mame/bios/a2000kbd_g80_de.zip" standalone_path: "a2000kbd_g80_de.zip" required: false category: bios_zip @@ -7898,6 +8122,7 @@ files: sha1: "e787dc05de227f30a47ac5b9ee7a355c2e9e693b" - name: a2000kbd_g80_dk.zip + path: "mame/bios/a2000kbd_g80_dk.zip" standalone_path: "a2000kbd_g80_dk.zip" required: false category: bios_zip @@ -7913,6 +8138,7 @@ files: sha1: "e787dc05de227f30a47ac5b9ee7a355c2e9e693b" - name: a2000kbd_g80_gb.zip + path: "mame/bios/a2000kbd_g80_gb.zip" standalone_path: "a2000kbd_g80_gb.zip" required: false category: bios_zip @@ -7928,6 +8154,7 @@ files: sha1: "e787dc05de227f30a47ac5b9ee7a355c2e9e693b" - name: a2000kbd_g80_se.zip + path: "mame/bios/a2000kbd_g80_se.zip" standalone_path: "a2000kbd_g80_se.zip" required: false category: bios_zip @@ -7943,6 +8170,7 @@ files: sha1: "e787dc05de227f30a47ac5b9ee7a355c2e9e693b" - name: a2000kbd_g80_us.zip + path: "mame/bios/a2000kbd_g80_us.zip" standalone_path: "a2000kbd_g80_us.zip" required: false category: bios_zip @@ -7958,6 +8186,7 @@ files: sha1: "e787dc05de227f30a47ac5b9ee7a355c2e9e693b" - name: a2000kbd_gb.zip + path: "mame/bios/a2000kbd_gb.zip" standalone_path: "a2000kbd_gb.zip" required: false category: bios_zip @@ -7973,6 +8202,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a2000kbd_it.zip + path: "mame/bios/a2000kbd_it.zip" standalone_path: "a2000kbd_it.zip" required: false category: bios_zip @@ -7988,6 +8218,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a2000kbd_no.zip + path: "mame/bios/a2000kbd_no.zip" standalone_path: "a2000kbd_no.zip" required: false category: bios_zip @@ -8003,6 +8234,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a2000kbd_se.zip + path: "mame/bios/a2000kbd_se.zip" standalone_path: "a2000kbd_se.zip" required: false category: bios_zip @@ -8018,6 +8250,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a2000kbd_us.zip + path: "mame/bios/a2000kbd_us.zip" standalone_path: "a2000kbd_us.zip" required: false category: bios_zip @@ -8033,6 +8266,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a2aevm80.zip + path: "mame/bios/a2aevm80.zip" standalone_path: "a2aevm80.zip" required: false category: bios_zip @@ -8054,6 +8288,7 @@ files: sha1: "f90658ffee7740f3cb30ecef2e151f7dc6098833" - name: a2ap16.zip + path: "mame/bios/a2ap16.zip" standalone_path: "a2ap16.zip" required: false category: bios_zip @@ -8075,6 +8310,7 @@ files: sha1: "19c95f91a67b948fc00a14621d574d629479d451" - name: a2ap16a.zip + path: "mame/bios/a2ap16a.zip" standalone_path: "a2ap16a.zip" required: false category: bios_zip @@ -8096,6 +8332,7 @@ files: sha1: "135f4f35607dd74941f0a3cae813227bf8a8a020" - name: a2aplcrd.zip + path: "mame/bios/a2aplcrd.zip" standalone_path: "a2aplcrd.zip" required: false category: bios_zip @@ -8112,6 +8349,7 @@ files: sha1: "71d633be864b6084362e85108a4e600cbe6e44fe" - name: a2autokbd.zip + path: "mame/bios/a2autokbd.zip" standalone_path: "a2autokbd.zip" required: false category: bios_zip @@ -8127,6 +8365,7 @@ files: sha1: "a0cb73e43f30b6a05bd766136dcd3cee1384bf5f" - name: a2booti.zip + path: "mame/bios/a2booti.zip" standalone_path: "a2booti.zip" required: false category: bios_zip @@ -8143,6 +8382,7 @@ files: sha1: "f505ad4685cd44e4cce5b8d6d27b9c4fea159f11" - name: a2bufgrapplerplus.zip + path: "mame/bios/a2bufgrapplerplus.zip" standalone_path: "a2bufgrapplerplus.zip" required: false category: bios_zip @@ -8164,6 +8404,7 @@ files: sha1: "f0907cf02d8c5dbf1bfacb0d626f2231142f0ff7" - name: a2bufgrapplerplusa.zip + path: "mame/bios/a2bufgrapplerplusa.zip" standalone_path: "a2bufgrapplerplusa.zip" required: false category: bios_zip @@ -8185,6 +8426,7 @@ files: sha1: "f0907cf02d8c5dbf1bfacb0d626f2231142f0ff7" - name: a2cffa02.zip + path: "mame/bios/a2cffa02.zip" standalone_path: "a2cffa02.zip" required: false category: bios_zip @@ -8202,6 +8444,7 @@ files: sha1: "d600692ed9626668233a22a48236af639410cb7b" - name: a2cffa2.zip + path: "mame/bios/a2cffa2.zip" standalone_path: "a2cffa2.zip" required: false category: bios_zip @@ -8219,6 +8462,7 @@ files: sha1: "080ff88f19de22328e162954ee2b51ee65f9d5cd" - name: a2corvus.zip + path: "mame/bios/a2corvus.zip" standalone_path: "a2corvus.zip" required: false category: bios_zip @@ -8236,6 +8480,7 @@ files: sha1: "dbd6efeb3b54c0523b8b4eda8b3d737413f6a91a" - name: a2diskiing.zip + path: "mame/bios/a2diskiing.zip" standalone_path: "a2diskiing.zip" required: false category: bios_zip @@ -8253,6 +8498,7 @@ files: sha1: "d4181c9f046aafc3fb326b381baac809d9e38d16" - name: a2excel9.zip + path: "mame/bios/a2excel9.zip" standalone_path: "a2excel9.zip" required: false category: bios_zip @@ -8271,6 +8517,7 @@ files: sha1: "d2960851ce8f70df12d23021dfbe031ec5a8988f" - name: a2focdrv.zip + path: "mame/bios/a2focdrv.zip" standalone_path: "a2focdrv.zip" required: false category: bios_zip @@ -8288,6 +8535,7 @@ files: sha1: "acf414aa145fcfa1c12aca0269f1f7ada82f1c04" - name: a2grappler.zip + path: "mame/bios/a2grappler.zip" standalone_path: "a2grappler.zip" required: false category: bios_zip @@ -8305,6 +8553,7 @@ files: sha1: "791ebae64a7fad8f42bdfaec36b9e2d34f12ded8" - name: a2grapplerplus.zip + path: "mame/bios/a2grapplerplus.zip" standalone_path: "a2grapplerplus.zip" required: false category: bios_zip @@ -8328,6 +8577,7 @@ files: sha1: "433ae61a0553ee9c1628ea5b6376dac848c04cad" - name: a2hsscsi.zip + path: "mame/bios/a2hsscsi.zip" standalone_path: "a2hsscsi.zip" required: false category: bios_zip @@ -8345,6 +8595,7 @@ files: sha1: "7d32227299933bfc1b7f8bc2062906fdfe530674" - name: a2ieee488.zip + path: "mame/bios/a2ieee488.zip" standalone_path: "a2ieee488.zip" required: false category: bios_zip @@ -8362,6 +8613,7 @@ files: sha1: "d5cd452bdb7f9ab5c1d77806ffea4b63da77f714" - name: a2iwm.zip + path: "mame/bios/a2iwm.zip" standalone_path: "a2iwm.zip" required: false category: bios_zip @@ -8377,6 +8629,7 @@ files: sha1: "d4181c9f046aafc3fb326b381baac809d9e38d16" - name: a2kb200.zip + path: "mame/bios/a2kb200.zip" standalone_path: "a2kb200.zip" required: false category: bios_zip @@ -8392,6 +8645,7 @@ files: sha1: "019742022a2a1b449cf3d739bfdd708af6202c44" - name: a2memexp.zip + path: "mame/bios/a2memexp.zip" standalone_path: "a2memexp.zip" required: false category: bios_zip @@ -8409,6 +8663,7 @@ files: sha1: "6e823a1fa40ed37eeddcef23f5df24da2ea1463e" - name: a2mouse.zip + path: "mame/bios/a2mouse.zip" standalone_path: "a2mouse.zip" required: false category: bios_zip @@ -8438,6 +8693,7 @@ files: sha1: "ba267b69a2fda2a2348b140979ece562411bb37b" - name: a2parprn.zip + path: "mame/bios/a2parprn.zip" standalone_path: "a2parprn.zip" required: false category: bios_zip @@ -8456,6 +8712,7 @@ files: bad_dump: true - name: a2pdromdr.zip + path: "mame/bios/a2pdromdr.zip" standalone_path: "a2pdromdr.zip" required: false category: bios_zip @@ -8472,6 +8729,7 @@ files: sha1: "f0733b7a68126adc5247a1008de2ea4f65ad645a" - name: a2pic.zip + path: "mame/bios/a2pic.zip" standalone_path: "a2pic.zip" required: false category: bios_zip @@ -8489,6 +8747,7 @@ files: sha1: "de8aa285dcac88b1cc80ec9128b092833f5174b6" - name: a2q68.zip + path: "mame/bios/a2q68.zip" standalone_path: "a2q68.zip" required: false category: bios_zip @@ -8506,6 +8765,7 @@ files: sha1: "e46d5e8256faece3723e9040f78fd1c8edb3ee0e" - name: a2q68plus.zip + path: "mame/bios/a2q68plus.zip" standalone_path: "a2q68plus.zip" required: false category: bios_zip @@ -8523,6 +8783,7 @@ files: sha1: "e46d5e8256faece3723e9040f78fd1c8edb3ee0e" - name: a2ramfac.zip + path: "mame/bios/a2ramfac.zip" standalone_path: "a2ramfac.zip" required: false category: bios_zip @@ -8552,6 +8813,7 @@ files: sha1: "9286d35907939aadb1fffd3e1d75603fe3e846ad" - name: a2romfp.zip + path: "mame/bios/a2romfp.zip" standalone_path: "a2romfp.zip" required: false category: bios_zip @@ -8587,6 +8849,7 @@ files: sha1: "a28852ff997b4790e53d8d0352112c4b1a395098" - name: a2romint.zip + path: "mame/bios/a2romint.zip" standalone_path: "a2romint.zip" required: false category: bios_zip @@ -8629,6 +8892,7 @@ files: sha1: "52a18bd578a4694420009cad7a7a5779a8c00226" - name: a2scsi.zip + path: "mame/bios/a2scsi.zip" standalone_path: "a2scsi.zip" required: false category: bios_zip @@ -8645,6 +8909,7 @@ files: sha1: "451c85c46b92e6ad2ad930f055ccf0fe3049936d" - name: a2sd.zip + path: "mame/bios/a2sd.zip" standalone_path: "a2sd.zip" required: false category: bios_zip @@ -8659,6 +8924,7 @@ files: sha1: "7e0acef01e622eeed6f8e87893d07c701bbef016" - name: a2sic.zip + path: "mame/bios/a2sic.zip" standalone_path: "a2sic.zip" required: false category: bios_zip @@ -8690,6 +8956,7 @@ files: sha1: "8ff44e892b2510573e9528d781b60429c38dbe30" - name: a2sider1.zip + path: "mame/bios/a2sider1.zip" standalone_path: "a2sider1.zip" required: false category: bios_zip @@ -8707,6 +8974,7 @@ files: sha1: "7f50b5e00cac4960204f50448a6e2d623b1a41e2" - name: a2sider2.zip + path: "mame/bios/a2sider2.zip" standalone_path: "a2sider2.zip" required: false category: bios_zip @@ -8724,6 +8992,7 @@ files: sha1: "8d0a5d6ce3b9a236771126033c4aba6c0cc5e704" - name: a2ssc.zip + path: "mame/bios/a2ssc.zip" standalone_path: "a2ssc.zip" required: false category: bios_zip @@ -8741,6 +9010,7 @@ files: sha1: "6dab633470c6bc4cb3e81d09fda46597caf8ee57" - name: a2superdrive.zip + path: "mame/bios/a2superdrive.zip" standalone_path: "a2superdrive.zip" required: false category: bios_zip @@ -8758,6 +9028,7 @@ files: sha1: "440c3f84176c7b9f542da0b6ddf4fb13ec326c46" - name: a2suprterm.zip + path: "mame/bios/a2suprterm.zip" standalone_path: "a2suprterm.zip" required: false category: bios_zip @@ -8773,6 +9044,7 @@ files: sha1: "66a7411c46c04a8089a7ddfb5ffd9809dd08a21f" - name: a2surance.zip + path: "mame/bios/a2surance.zip" standalone_path: "a2surance.zip" required: false category: bios_zip @@ -8788,6 +9060,7 @@ files: sha1: "723dc6cd32de5a0f27af7503764185ac58904c05" - name: a2swyft.zip + path: "mame/bios/a2swyft.zip" standalone_path: "a2swyft.zip" required: false category: bios_zip @@ -8806,6 +9079,7 @@ files: sha1: "38be885539cf91423a246378c411ac8b2f150ec6" - name: a2thunpl.zip + path: "mame/bios/a2thunpl.zip" standalone_path: "a2thunpl.zip" required: false category: bios_zip @@ -8823,6 +9097,7 @@ files: sha1: "60f434f5325899d7ea257a6e56e6f53eae65146a" - name: a2tk10.zip + path: "mame/bios/a2tk10.zip" standalone_path: "a2tk10.zip" required: false category: bios_zip @@ -8838,6 +9113,7 @@ files: sha1: "27c5160b913e0f62120f384026d24b9f1acb6970" - name: a2tmstho.zip + path: "mame/bios/a2tmstho.zip" standalone_path: "a2tmstho.zip" required: false category: bios_zip @@ -8855,6 +9131,7 @@ files: sha1: "ae0173da61581a06188c1bee89e95a0aa536c411" - name: a2twarp.zip + path: "mame/bios/a2twarp.zip" standalone_path: "a2twarp.zip" required: false category: bios_zip @@ -8870,6 +9147,7 @@ files: sha1: "7b75534e7895e04859a0b1337801c6eeb0cef52a" - name: a2ultrme.zip + path: "mame/bios/a2ultrme.zip" standalone_path: "a2ultrme.zip" required: false category: bios_zip @@ -8895,6 +9173,7 @@ files: sha1: "d4a36837cb98bb65f7ddef7455eb5a7f8e648a82" - name: a2ulttrm.zip + path: "mame/bios/a2ulttrm.zip" standalone_path: "a2ulttrm.zip" required: false category: bios_zip @@ -8920,6 +9199,7 @@ files: sha1: "0ad0c5e802e48495da27f7bd26ee3ab1c92d74dd" - name: a2uniprint.zip + path: "mame/bios/a2uniprint.zip" standalone_path: "a2uniprint.zip" required: false category: bios_zip @@ -8937,6 +9217,7 @@ files: sha1: "0a2789ec2cb28f10a2836a91feabc24ceca8f142" - name: a2vidtrm.zip + path: "mame/bios/a2vidtrm.zip" standalone_path: "a2vidtrm.zip" required: false category: bios_zip @@ -9005,6 +9286,7 @@ files: sha1: "50c3df528109c65491a001ec74e50351a652c1fd" - name: a2vistaa800.zip + path: "mame/bios/a2vistaa800.zip" standalone_path: "a2vistaa800.zip" required: false category: bios_zip @@ -9020,6 +9302,7 @@ files: sha1: "8e0b4f4c6c467e2280bd250ee54f471728640964" - name: a2vtc1.zip + path: "mame/bios/a2vtc1.zip" standalone_path: "a2vtc1.zip" required: false category: bios_zip @@ -9045,6 +9328,7 @@ files: sha1: "0d9b1c3917e23ca35d5fbd405f05ff6e87122b92" - name: a2vulcan.zip + path: "mame/bios/a2vulcan.zip" standalone_path: "a2vulcan.zip" required: false category: bios_zip @@ -9060,6 +9344,7 @@ files: sha1: "1d668e856e33c6eeb10fe26975341afa8acb81f5" - name: a2vulgld.zip + path: "mame/bios/a2vulgld.zip" standalone_path: "a2vulgld.zip" required: false category: bios_zip @@ -9075,6 +9360,7 @@ files: sha1: "96a22c2540fa603648a4e638e176eee76523b4e1" - name: a2vuliie.zip + path: "mame/bios/a2vuliie.zip" standalone_path: "a2vuliie.zip" required: false category: bios_zip @@ -9090,6 +9376,7 @@ files: sha1: "d88ed27cd776f967b0e3440e05712b3830995f24" - name: a2zipdrv.zip + path: "mame/bios/a2zipdrv.zip" standalone_path: "a2zipdrv.zip" required: false category: bios_zip @@ -9107,6 +9394,7 @@ files: sha1: "46636bfed88c864139e3d2826661908a8c07c459" - name: a3fdc.zip + path: "mame/bios/a3fdc.zip" standalone_path: "a3fdc.zip" required: false category: bios_zip @@ -9122,6 +9410,7 @@ files: sha1: "bc39fbd5b9a8d2287ac5d0a42e639fc4d3c2f9d4" - name: a500kbd_ch.zip + path: "mame/bios/a500kbd_ch.zip" standalone_path: "a500kbd_ch.zip" required: false category: bios_zip @@ -9137,6 +9426,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a500kbd_de.zip + path: "mame/bios/a500kbd_de.zip" standalone_path: "a500kbd_de.zip" required: false category: bios_zip @@ -9152,6 +9442,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a500kbd_dk.zip + path: "mame/bios/a500kbd_dk.zip" standalone_path: "a500kbd_dk.zip" required: false category: bios_zip @@ -9167,6 +9458,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a500kbd_es.zip + path: "mame/bios/a500kbd_es.zip" standalone_path: "a500kbd_es.zip" required: false category: bios_zip @@ -9182,6 +9474,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a500kbd_fr.zip + path: "mame/bios/a500kbd_fr.zip" standalone_path: "a500kbd_fr.zip" required: false category: bios_zip @@ -9197,6 +9490,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a500kbd_gb.zip + path: "mame/bios/a500kbd_gb.zip" standalone_path: "a500kbd_gb.zip" required: false category: bios_zip @@ -9212,6 +9506,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a500kbd_it.zip + path: "mame/bios/a500kbd_it.zip" standalone_path: "a500kbd_it.zip" required: false category: bios_zip @@ -9227,6 +9522,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a500kbd_no.zip + path: "mame/bios/a500kbd_no.zip" standalone_path: "a500kbd_no.zip" required: false category: bios_zip @@ -9242,6 +9538,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a500kbd_se.zip + path: "mame/bios/a500kbd_se.zip" standalone_path: "a500kbd_se.zip" required: false category: bios_zip @@ -9257,6 +9554,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a500kbd_us.zip + path: "mame/bios/a500kbd_us.zip" standalone_path: "a500kbd_us.zip" required: false category: bios_zip @@ -9272,6 +9570,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a600kbd_ch.zip + path: "mame/bios/a600kbd_ch.zip" standalone_path: "a600kbd_ch.zip" required: false category: bios_zip @@ -9287,6 +9586,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a600kbd_de.zip + path: "mame/bios/a600kbd_de.zip" standalone_path: "a600kbd_de.zip" required: false category: bios_zip @@ -9302,6 +9602,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a600kbd_dk.zip + path: "mame/bios/a600kbd_dk.zip" standalone_path: "a600kbd_dk.zip" required: false category: bios_zip @@ -9317,6 +9618,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a600kbd_es.zip + path: "mame/bios/a600kbd_es.zip" standalone_path: "a600kbd_es.zip" required: false category: bios_zip @@ -9332,6 +9634,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a600kbd_fr.zip + path: "mame/bios/a600kbd_fr.zip" standalone_path: "a600kbd_fr.zip" required: false category: bios_zip @@ -9347,6 +9650,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a600kbd_gb.zip + path: "mame/bios/a600kbd_gb.zip" standalone_path: "a600kbd_gb.zip" required: false category: bios_zip @@ -9362,6 +9666,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a600kbd_it.zip + path: "mame/bios/a600kbd_it.zip" standalone_path: "a600kbd_it.zip" required: false category: bios_zip @@ -9377,6 +9682,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a600kbd_no.zip + path: "mame/bios/a600kbd_no.zip" standalone_path: "a600kbd_no.zip" required: false category: bios_zip @@ -9392,6 +9698,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a600kbd_se.zip + path: "mame/bios/a600kbd_se.zip" standalone_path: "a600kbd_se.zip" required: false category: bios_zip @@ -9407,6 +9714,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: a600kbd_us.zip + path: "mame/bios/a600kbd_us.zip" standalone_path: "a600kbd_us.zip" required: false category: bios_zip @@ -9422,6 +9730,7 @@ files: sha1: "83b21d0c8b93fc9b9b3b287fde4ec8f3badac5a2" - name: abc1600mac.zip + path: "mame/bios/abc1600mac.zip" standalone_path: "abc1600mac.zip" required: false category: bios_zip @@ -9440,6 +9749,7 @@ files: sha1: "a3871f0d796bea9df8f25d41b3169dd4b8ef65ab" - name: abc1600mover.zip + path: "mame/bios/abc1600mover.zip" standalone_path: "abc1600mover.zip" required: false category: bios_zip @@ -9474,6 +9784,7 @@ files: sha1: "1129917845f8e505998b15288f02bf907487e4ac" - name: abc55.zip + path: "mame/bios/abc55.zip" standalone_path: "abc55.zip" required: false category: bios_zip @@ -9488,6 +9799,7 @@ files: sha1: "04a30141ac611d0544bbb786061515040c23480c" - name: abc77.zip + path: "mame/bios/abc77.zip" standalone_path: "abc77.zip" required: false category: bios_zip @@ -9502,6 +9814,7 @@ files: sha1: "04a30141ac611d0544bbb786061515040c23480c" - name: abc800kb.zip + path: "mame/bios/abc800kb.zip" standalone_path: "abc800kb.zip" required: false category: bios_zip @@ -9516,6 +9829,7 @@ files: sha1: "1824c5d304bbd09f97056cfa408e1b18b5219ba2" - name: abc80kb.zip + path: "mame/bios/abc80kb.zip" standalone_path: "abc80kb.zip" required: false category: bios_zip @@ -9530,6 +9844,7 @@ files: sha1: "f88be4918bfd6230b73335c6a75a3010d33b2caa" - name: abc830.zip + path: "mame/bios/abc830.zip" standalone_path: "abc830.zip" required: false category: bios_zip @@ -9565,6 +9880,7 @@ files: sha1: "61ad271de53152c1640c0b364fce46d1b0b4c7e2" - name: abc832.zip + path: "mame/bios/abc832.zip" standalone_path: "abc832.zip" required: false category: bios_zip @@ -9600,6 +9916,7 @@ files: sha1: "61ad271de53152c1640c0b364fce46d1b0b4c7e2" - name: abc834.zip + path: "mame/bios/abc834.zip" standalone_path: "abc834.zip" required: false category: bios_zip @@ -9635,6 +9952,7 @@ files: sha1: "61ad271de53152c1640c0b364fce46d1b0b4c7e2" - name: abc838.zip + path: "mame/bios/abc838.zip" standalone_path: "abc838.zip" required: false category: bios_zip @@ -9670,6 +9988,7 @@ files: sha1: "61ad271de53152c1640c0b364fce46d1b0b4c7e2" - name: abc850flop.zip + path: "mame/bios/abc850flop.zip" standalone_path: "abc850flop.zip" required: false category: bios_zip @@ -9704,6 +10023,7 @@ files: sha1: "61ad271de53152c1640c0b364fce46d1b0b4c7e2" - name: abc99.zip + path: "mame/bios/abc99.zip" standalone_path: "abc99.zip" required: false category: bios_zip @@ -9734,6 +10054,7 @@ files: sha1: "0c1d9e320f82df05f4804992ef6f6f6cd20623f3" - name: abc_db4106.zip + path: "mame/bios/abc_db4106.zip" standalone_path: "abc_db4106.zip" required: false category: bios_zip @@ -9749,6 +10070,7 @@ files: sha1: "3f99ea2ef301d9e3415db152dad79171dc62cc2d" - name: abc_db4107.zip + path: "mame/bios/abc_db4107.zip" standalone_path: "abc_db4107.zip" required: false category: bios_zip @@ -9825,6 +10147,7 @@ files: sha1: "7ff8b2a19f71fe0279ab3e5a0a5fffcb6030360c" - name: abc_db4112.zip + path: "mame/bios/abc_db4112.zip" standalone_path: "abc_db4112.zip" required: false category: bios_zip @@ -9845,6 +10168,7 @@ files: sha1: "95c150d3152df318abd9267915d5669d2ec33895" - name: abc_fd2.zip + path: "mame/bios/abc_fd2.zip" standalone_path: "abc_fd2.zip" required: false category: bios_zip @@ -9867,6 +10191,7 @@ files: sha1: "d500377c34ac6c679c155f4a5208e1c3e00cd920" - name: abc_slutprov.zip + path: "mame/bios/abc_slutprov.zip" standalone_path: "abc_slutprov.zip" required: false category: bios_zip @@ -9881,6 +10206,7 @@ files: sha1: "f97cb6526a1d10b189164f26157522e382ca6bc6" - name: abc_ssa.zip + path: "mame/bios/abc_ssa.zip" standalone_path: "abc_ssa.zip" required: false category: bios_zip @@ -9903,6 +10229,7 @@ files: sha1: "9010cb3426bc61711ae940551b79b6ecba67defa" - name: abc_uni800.zip + path: "mame/bios/abc_uni800.zip" standalone_path: "abc_uni800.zip" required: false category: bios_zip @@ -9917,6 +10244,7 @@ files: sha1: "0c641f4cf321f0003da3fbd435edb138a9b949b4" - name: abc_unidisk.zip + path: "mame/bios/abc_unidisk.zip" standalone_path: "abc_unidisk.zip" required: false category: bios_zip @@ -9942,6 +10270,7 @@ files: sha1: "8db504d46ff0355c72bd58fd536abeb17425c532" - name: abcsio.zip + path: "mame/bios/abcsio.zip" standalone_path: "abcsio.zip" required: false category: bios_zip @@ -9960,6 +10289,7 @@ files: sha1: "d1f9b16530be28b03eeddb3f6ee4fa9e1cc9458e" - name: acb2072.zip + path: "mame/bios/acb2072.zip" standalone_path: "acb2072.zip" required: false category: bios_zip @@ -9984,6 +10314,7 @@ files: sha1: "82800005d532f0dc35cbf9ea6af75a97cb8b2e71" - name: ace80.zip + path: "mame/bios/ace80.zip" standalone_path: "ace80.zip" required: false category: bios_zip @@ -10001,6 +10332,7 @@ files: sha1: "8e9e9f12b78d545ccd90f5e30b6804ceeb6c939f" - name: ace_sp_reelctrl.zip + path: "mame/bios/ace_sp_reelctrl.zip" standalone_path: "ace_sp_reelctrl.zip" required: false category: bios_zip @@ -10016,6 +10348,7 @@ files: sha1: "44f78da8138caf4f79f1e8e9a2abe53d79c0fe79" - name: ace_sp_reelctrl_pcp.zip + path: "mame/bios/ace_sp_reelctrl_pcp.zip" standalone_path: "ace_sp_reelctrl_pcp.zip" required: false category: bios_zip @@ -10031,6 +10364,7 @@ files: sha1: "d1d6ea68d9aace4a4ea0de212f17426bccfe5856" - name: acorn_vdu80.zip + path: "mame/bios/acorn_vdu80.zip" standalone_path: "acorn_vdu80.zip" required: false category: bios_zip @@ -10046,6 +10380,7 @@ files: sha1: "04c326a745ba6a78185ebc2adeecb53a166a6ab3" - name: acs8600_ics.zip + path: "mame/bios/acs8600_ics.zip" standalone_path: "acs8600_ics.zip" required: false category: bios_zip @@ -10061,6 +10396,7 @@ files: sha1: "aee04574dea4c17112431536d3b7e3984b8afdc2" - name: agat7_flop.zip + path: "mame/bios/agat7_flop.zip" standalone_path: "agat7_flop.zip" required: false category: bios_zip @@ -10076,6 +10412,7 @@ files: sha1: "71626d3d2d4bbeeac2b77585b45a5566d20b8d34" - name: agat840k_hle.zip + path: "mame/bios/agat840k_hle.zip" standalone_path: "agat840k_hle.zip" required: false category: bios_zip @@ -10091,6 +10428,7 @@ files: sha1: "5d369bad6cdd6a70b0bb16480eba69640de87a2e" - name: agat9_flop.zip + path: "mame/bios/agat9_flop.zip" standalone_path: "agat9_flop.zip" required: false category: bios_zip @@ -10106,6 +10444,7 @@ files: sha1: "bf955189ebffe874c20ef649a3db8177dc16af61" - name: agat_fdc.zip + path: "mame/bios/agat_fdc.zip" standalone_path: "agat_fdc.zip" required: false category: bios_zip @@ -10125,6 +10464,7 @@ files: sha1: "b5305e82c81240a6fdc932a559b5493c59f302c6" - name: aha1542a.zip + path: "mame/bios/aha1542a.zip" standalone_path: "aha1542a.zip" required: false category: bios_zip @@ -10147,6 +10487,7 @@ files: sha1: "bba0d84fa1b67ea71905953c25201fa2020cf465" - name: aha1542b.zip + path: "mame/bios/aha1542b.zip" standalone_path: "aha1542b.zip" required: false category: bios_zip @@ -10216,6 +10557,7 @@ files: sha1: "5ad1bb4bde3e8c30380b05d32ac273c781ab12a8" - name: aha1542c.zip + path: "mame/bios/aha1542c.zip" standalone_path: "aha1542c.zip" required: false category: bios_zip @@ -10250,6 +10592,7 @@ files: sha1: "ae7900653357d5f32a2734bc13d9ec63bd805597" - name: aha1542cf.zip + path: "mame/bios/aha1542cf.zip" standalone_path: "aha1542cf.zip" required: false category: bios_zip @@ -10294,6 +10637,7 @@ files: sha1: "6edbdd9b0b15ef31ca0741cac31556d2d5266b6e" - name: aha1542cp.zip + path: "mame/bios/aha1542cp.zip" standalone_path: "aha1542cp.zip" required: false category: bios_zip @@ -10316,6 +10660,7 @@ files: sha1: "431dfc26312556ddd24fccc429b2b3e93bac5c2f" - name: aha1740.zip + path: "mame/bios/aha1740.zip" standalone_path: "aha1740.zip" required: false category: bios_zip @@ -10344,6 +10689,7 @@ files: sha1: "8ca143adfc7d20ad5d49f14dedabc8276454bf9e" - name: aha1742a.zip + path: "mame/bios/aha1742a.zip" standalone_path: "aha1742a.zip" required: false category: bios_zip @@ -10383,6 +10729,7 @@ files: sha1: "18cb3960dc47f2c14beb88f9680c1f66c4652b04" - name: aha2940.zip + path: "mame/bios/aha2940.zip" standalone_path: "aha2940.zip" required: false category: bios_zip @@ -10401,6 +10748,7 @@ files: sha1: "f134df1a542d6af8dd1878c6db0c734b7701d756" - name: aha2940au.zip + path: "mame/bios/aha2940au.zip" standalone_path: "aha2940au.zip" required: false category: bios_zip @@ -10423,6 +10771,7 @@ files: sha1: "93311b8c02e87492a40c1df6ea4eb60628bb2825" - name: alto2_cpu.zip + path: "mame/bios/alto2_cpu.zip" standalone_path: "alto2_cpu.zip" required: false category: bios_zip @@ -10609,6 +10958,7 @@ files: sha1: "583327a7d70cd02702c941c0e43c1e9408ff7fd0" - name: altos2_kbd.zip + path: "mame/bios/altos2_kbd.zip" standalone_path: "altos2_kbd.zip" required: false category: bios_zip @@ -10623,6 +10973,7 @@ files: sha1: "4b3f13e05058edef516a032a8a6652cc7e2d3be9" - name: am100kbd.zip + path: "mame/bios/am100kbd.zip" standalone_path: "am100kbd.zip" required: false category: bios_zip @@ -10638,6 +10989,7 @@ files: sha1: "9f24c54f7cee41f7fef41294f05c4bc89d65acfb" - name: amiga_a2091.zip + path: "mame/bios/amiga_a2091.zip" standalone_path: "amiga_a2091.zip" required: false category: bios_zip @@ -10698,6 +11050,7 @@ files: sha1: "761a1318106e49057f95258699076ec1079967ad" - name: amiga_a570.zip + path: "mame/bios/amiga_a570.zip" standalone_path: "amiga_a570.zip" required: false category: bios_zip @@ -10712,6 +11065,7 @@ files: sha1: "ed7e461d1fff3cda321631ae42b80e3cd4fa5ebb" - name: amiga_a590.zip + path: "mame/bios/amiga_a590.zip" standalone_path: "amiga_a590.zip" required: false category: bios_zip @@ -10791,6 +11145,7 @@ files: sha1: "761a1318106e49057f95258699076ec1079967ad" - name: amiga_ar1.zip + path: "mame/bios/amiga_ar1.zip" standalone_path: "amiga_ar1.zip" required: false category: bios_zip @@ -10813,6 +11168,7 @@ files: bad_dump: true - name: amiga_ar2.zip + path: "mame/bios/amiga_ar2.zip" standalone_path: "amiga_ar2.zip" required: false category: bios_zip @@ -10842,6 +11198,7 @@ files: bad_dump: true - name: amiga_ar3.zip + path: "mame/bios/amiga_ar3.zip" standalone_path: "amiga_ar3.zip" required: false category: bios_zip @@ -10873,6 +11230,7 @@ files: sha1: "a7431d22bfdb746a8bb6073c9edf7a2b65c6d307" - name: amiga_buddha.zip + path: "mame/bios/amiga_buddha.zip" standalone_path: "amiga_buddha.zip" required: false category: bios_zip @@ -10894,6 +11252,7 @@ files: sha1: "ec17a58962c373a2892090ec9b1722d2c326d631" - name: amiga_oktagon2008.zip + path: "mame/bios/amiga_oktagon2008.zip" standalone_path: "amiga_oktagon2008.zip" required: false category: bios_zip @@ -10909,6 +11268,7 @@ files: sha1: "56c441fa37d193393081b2e8ceae823bc7e97e49" - name: amiga_ripple.zip + path: "mame/bios/amiga_ripple.zip" standalone_path: "amiga_ripple.zip" required: false category: bios_zip @@ -10925,6 +11285,7 @@ files: sha1: "83762ef5a883e5c43ad321eaa03fde7454f70785" - name: ampex230_kbd.zip + path: "mame/bios/ampex230_kbd.zip" standalone_path: "ampex230_kbd.zip" required: false category: bios_zip @@ -10939,6 +11300,7 @@ files: sha1: "46953d6b511ee37ca0aa2316af39c875b22ee2a7" - name: ap2000.zip + path: "mame/bios/ap2000.zip" standalone_path: "ap2000.zip" required: false category: bios_zip @@ -10973,6 +11335,7 @@ files: sha1: "219ffa6ff661ce95d5772c9fc1967093718f04e9" - name: aplcd150.zip + path: "mame/bios/aplcd150.zip" standalone_path: "aplcd150.zip" required: false category: bios_zip @@ -10996,6 +11359,7 @@ files: sha1: "e4cd656e2a433229543e874a29f1567758170fc6" - name: aprissi.zip + path: "mame/bios/aprissi.zip" standalone_path: "aprissi.zip" required: false category: bios_zip @@ -11013,6 +11377,7 @@ files: sha1: "19f2bc1e60c3fd5e179c4a38f7ca4e3221553562" - name: arc_a448.zip + path: "mame/bios/arc_a448.zip" standalone_path: "arc_a448.zip" required: false category: bios_zip @@ -11030,6 +11395,7 @@ files: sha1: "8140e9cf82dc67324963766d33efd5c8ad6d53f8" - name: arc_a448b.zip + path: "mame/bios/arc_a448b.zip" standalone_path: "arc_a448b.zip" required: false category: bios_zip @@ -11047,6 +11413,7 @@ files: sha1: "125b5a505498d91ca049f95fd05e693b2396bda6" - name: arc_acejoy.zip + path: "mame/bios/arc_acejoy.zip" standalone_path: "arc_acejoy.zip" required: false category: bios_zip @@ -11063,6 +11430,7 @@ files: sha1: "1addf507844c6590d111765051a43fe571491224" - name: arc_armadeus.zip + path: "mame/bios/arc_armadeus.zip" standalone_path: "arc_armadeus.zip" required: false category: bios_zip @@ -11080,6 +11448,7 @@ files: sha1: "6129d91bcd21bdab75f1293f9daa7612feaffc4b" - name: arc_bbcio_aga30.zip + path: "mame/bios/arc_bbcio_aga30.zip" standalone_path: "arc_bbcio_aga30.zip" required: false category: bios_zip @@ -11098,6 +11467,7 @@ files: sha1: "ed8d0caa478f030e11348b23e915897f27dcf153" - name: arc_bbcio_aka10.zip + path: "mame/bios/arc_bbcio_aka10.zip" standalone_path: "arc_bbcio_aka10.zip" required: false category: bios_zip @@ -11126,6 +11496,7 @@ files: sha1: "4c3de606de594c8f6ed236ffa19374c76e307226" - name: arc_bbcio_we.zip + path: "mame/bios/arc_bbcio_we.zip" standalone_path: "arc_bbcio_we.zip" required: false category: bios_zip @@ -11144,6 +11515,7 @@ files: sha1: "05c79e38707e406eed23cec6b3d2730e8fe550e8" - name: arc_eaglem2.zip + path: "mame/bios/arc_eaglem2.zip" standalone_path: "arc_eaglem2.zip" required: false category: bios_zip @@ -11161,6 +11533,7 @@ files: sha1: "b3633b8e1d58f59f5894d14a737c69b6d9d5d46d" - name: arc_ether1_aka25.zip + path: "mame/bios/arc_ether1_aka25.zip" standalone_path: "arc_ether1_aka25.zip" required: false category: bios_zip @@ -11178,6 +11551,7 @@ files: sha1: "9a9404028d166d9cbb466513f514be5d3ea77956" - name: arc_ether2_aeh50.zip + path: "mame/bios/arc_ether2_aeh50.zip" standalone_path: "arc_ether2_aeh50.zip" required: false category: bios_zip @@ -11195,6 +11569,7 @@ files: sha1: "417000f1fa8f61f8092f8f74a0359ffb3ce72768" - name: arc_ether3_aeh54.zip + path: "mame/bios/arc_ether3_aeh54.zip" standalone_path: "arc_ether3_aeh54.zip" required: false category: bios_zip @@ -11212,6 +11587,7 @@ files: sha1: "103318a527ea5f9a3fe373bfb8f8d0ad3697617f" - name: arc_ethera.zip + path: "mame/bios/arc_ethera.zip" standalone_path: "arc_ethera.zip" required: false category: bios_zip @@ -11229,6 +11605,7 @@ files: sha1: "c6c9c9630b6777f4d49824b051fcd16fcb21b8f3" - name: arc_etherd.zip + path: "mame/bios/arc_etherd.zip" standalone_path: "arc_etherd.zip" required: false category: bios_zip @@ -11246,6 +11623,7 @@ files: sha1: "e972c1ab2ccfd20a6e5321549d555f8ae14e12f9" - name: arc_etherr.zip + path: "mame/bios/arc_etherr.zip" standalone_path: "arc_etherr.zip" required: false category: bios_zip @@ -11263,6 +11641,7 @@ files: sha1: "a8045e3749fbf24e721e84e57acb68753fa46428" - name: arc_faxpack.zip + path: "mame/bios/arc_faxpack.zip" standalone_path: "arc_faxpack.zip" required: false category: bios_zip @@ -11280,6 +11659,7 @@ files: sha1: "bbd1c4560c3bde1e61f81ae6505cd5d4658c6cb8" - name: arc_greyhawk.zip + path: "mame/bios/arc_greyhawk.zip" standalone_path: "arc_greyhawk.zip" required: false category: bios_zip @@ -11297,6 +11677,7 @@ files: sha1: "e8d5d271e2c10430ae858d2f4337fc73a0c63d82" - name: arc_hdisc_akd52.zip + path: "mame/bios/arc_hdisc_akd52.zip" standalone_path: "arc_hdisc_akd52.zip" required: false category: bios_zip @@ -11314,6 +11695,7 @@ files: sha1: "c8ebec931d6cef53b7b2965f526e8721c6cb3d28" - name: arc_hdisc_cw.zip + path: "mame/bios/arc_hdisc_cw.zip" standalone_path: "arc_hdisc_cw.zip" required: false category: bios_zip @@ -11331,6 +11713,7 @@ files: sha1: "da99cd0ee9d1eba237261f24b46e8399a2316086" - name: arc_hdisc_morley.zip + path: "mame/bios/arc_hdisc_morley.zip" standalone_path: "arc_hdisc_morley.zip" required: false category: bios_zip @@ -11348,6 +11731,7 @@ files: sha1: "42947aef6b2bafb4b971e5bc61aa31ecb385afe0" - name: arc_hdisc_we.zip + path: "mame/bios/arc_hdisc_we.zip" standalone_path: "arc_hdisc_we.zip" required: false category: bios_zip @@ -11365,6 +11749,7 @@ files: sha1: "783d94839f47ee27032027d02e2e3f808659c540" - name: arc_ide_be.zip + path: "mame/bios/arc_ide_be.zip" standalone_path: "arc_ide_be.zip" required: false category: bios_zip @@ -11398,6 +11783,7 @@ files: sha1: "f7d13fce76dbe7ac9a27fc7e4a859161bb98a9b5" - name: arc_ide_rdev.zip + path: "mame/bios/arc_ide_rdev.zip" standalone_path: "arc_ide_rdev.zip" required: false category: bios_zip @@ -11415,6 +11801,7 @@ files: sha1: "84e5d31d631b69401c47ef1ce91f11f1bb317597" - name: arc_iomidi_aka15.zip + path: "mame/bios/arc_iomidi_aka15.zip" standalone_path: "arc_iomidi_aka15.zip" required: false category: bios_zip @@ -11433,6 +11820,7 @@ files: sha1: "32e990c435b439d4a169e85a009fc6a864121c3f" - name: arc_lark.zip + path: "mame/bios/arc_lark.zip" standalone_path: "arc_lark.zip" required: false category: bios_zip @@ -11451,6 +11839,7 @@ files: sha1: "f0b2ba52d0069dfe00a7ba66fba23e0eb2346d8c" - name: arc_lbp4.zip + path: "mame/bios/arc_lbp4.zip" standalone_path: "arc_lbp4.zip" required: false category: bios_zip @@ -11474,6 +11863,7 @@ files: sha1: "b70afed20340e62279742996da9b0ccef51f08e2" - name: arc_midi2.zip + path: "mame/bios/arc_midi2.zip" standalone_path: "arc_midi2.zip" required: false category: bios_zip @@ -11492,6 +11882,7 @@ files: sha1: "d0440e4ef0fa7bbab2ea3d6f9f3f1d4513aec8c0" - name: arc_midi_aka16.zip + path: "mame/bios/arc_midi_aka16.zip" standalone_path: "arc_midi_aka16.zip" required: false category: bios_zip @@ -11520,6 +11911,7 @@ files: sha1: "f6ad28d3cf9a14af3c103f9fae74795f539f24e8" - name: arc_midimax.zip + path: "mame/bios/arc_midimax.zip" standalone_path: "arc_midimax.zip" required: false category: bios_zip @@ -11543,6 +11935,7 @@ files: sha1: "8cba82ed214246b9fb55e24e87e4629231490465" - name: arc_midimax2.zip + path: "mame/bios/arc_midimax2.zip" standalone_path: "arc_midimax2.zip" required: false category: bios_zip @@ -11561,6 +11954,7 @@ files: sha1: "d713bf8661542009defadb08cc6096af94efce3e" - name: arc_nexus_a500.zip + path: "mame/bios/arc_nexus_a500.zip" standalone_path: "arc_nexus_a500.zip" required: false category: bios_zip @@ -11578,6 +11972,7 @@ files: sha1: "4d1c8cf82fddde1e0772c475da1b3283986aa7d3" - name: arc_rom_aka05.zip + path: "mame/bios/arc_rom_aka05.zip" standalone_path: "arc_rom_aka05.zip" required: false category: bios_zip @@ -11596,6 +11991,7 @@ files: sha1: "e699157895433010b1ea110c78fbc80a4bc58f09" - name: arc_rom_r225.zip + path: "mame/bios/arc_rom_r225.zip" standalone_path: "arc_rom_r225.zip" required: false category: bios_zip @@ -11617,6 +12013,7 @@ files: sha1: "bb0825670bde59c80a73895141b2d8ad6ea87a2f" - name: arc_rs423.zip + path: "mame/bios/arc_rs423.zip" standalone_path: "arc_rs423.zip" required: false category: bios_zip @@ -11634,6 +12031,7 @@ files: sha1: "eb97839cd66dce33598aed90ac2f0624de1aa60d" - name: arc_scan256.zip + path: "mame/bios/arc_scan256.zip" standalone_path: "arc_scan256.zip" required: false category: bios_zip @@ -11651,6 +12049,7 @@ files: sha1: "9ea4bba1a752090b19a8ab9bf06414053fb8f7ff" - name: arc_scanjunior.zip + path: "mame/bios/arc_scanjunior.zip" standalone_path: "arc_scanjunior.zip" required: false category: bios_zip @@ -11669,6 +12068,7 @@ files: sha1: "3c63f8379d8fc222fc57838a9384ecec7c5d2484" - name: arc_scanjunior3.zip + path: "mame/bios/arc_scanjunior3.zip" standalone_path: "arc_scanjunior3.zip" required: false category: bios_zip @@ -11687,6 +12087,7 @@ files: sha1: "382193f2b6cf8ba5ed04481d99050fe2f691ad0a" - name: arc_scanlight.zip + path: "mame/bios/arc_scanlight.zip" standalone_path: "arc_scanlight.zip" required: false category: bios_zip @@ -11705,6 +12106,7 @@ files: sha1: "fa69fb69e01553b27409b65a37d3d30a376e7380" - name: arc_scanvideo.zip + path: "mame/bios/arc_scanvideo.zip" standalone_path: "arc_scanvideo.zip" required: false category: bios_zip @@ -11723,6 +12125,7 @@ files: sha1: "9fe739b42c5bf5dab69e3c1ffb1c3c5a5d8d7a50" - name: arc_scsi_aka30.zip + path: "mame/bios/arc_scsi_aka30.zip" standalone_path: "arc_scsi_aka30.zip" required: false category: bios_zip @@ -11740,6 +12143,7 @@ files: sha1: "6d52381fed7cfd0bd16e21566c2a5bcff98b72c0" - name: arc_scsi_aka31.zip + path: "mame/bios/arc_scsi_aka31.zip" standalone_path: "arc_scsi_aka31.zip" required: false category: bios_zip @@ -11757,6 +12161,7 @@ files: sha1: "1c2a2761a861d1560b6a245c5015059c2d0f71e7" - name: arc_scsi_aka32.zip + path: "mame/bios/arc_scsi_aka32.zip" standalone_path: "arc_scsi_aka32.zip" required: false category: bios_zip @@ -11785,6 +12190,7 @@ files: sha1: "42bddbe2841de7085371c5fe11d7c9b152070886" - name: arc_scsi_cumana.zip + path: "mame/bios/arc_scsi_cumana.zip" standalone_path: "arc_scsi_cumana.zip" required: false category: bios_zip @@ -11802,6 +12208,7 @@ files: sha1: "293b1dabd02cfa34251116d95dd19e8b58d0f0a5" - name: arc_scsi_ling.zip + path: "mame/bios/arc_scsi_ling.zip" standalone_path: "arc_scsi_ling.zip" required: false category: bios_zip @@ -11819,6 +12226,7 @@ files: sha1: "c05ea28f33afa98bd9d18bfe7dafee0a5fe7f2f4" - name: arc_scsi_morley.zip + path: "mame/bios/arc_scsi_morley.zip" standalone_path: "arc_scsi_morley.zip" required: false category: bios_zip @@ -11857,6 +12265,7 @@ files: sha1: "9164ef9edc9d2ed6a7a7c9ba6258e02db9b1d2cb" - name: arc_scsi_oak.zip + path: "mame/bios/arc_scsi_oak.zip" standalone_path: "arc_scsi_oak.zip" required: false category: bios_zip @@ -11889,6 +12298,7 @@ files: sha1: "c102d90e4f5c16fedde1ba4637170a39ed7ab371" - name: arc_scsi_vti.zip + path: "mame/bios/arc_scsi_vti.zip" standalone_path: "arc_scsi_vti.zip" required: false category: bios_zip @@ -11906,6 +12316,7 @@ files: sha1: "eb20b1369964cfaee156ba1fc3636997407cc7ba" - name: arc_serial.zip + path: "mame/bios/arc_serial.zip" standalone_path: "arc_serial.zip" required: false category: bios_zip @@ -11923,6 +12334,7 @@ files: sha1: "c100cc4f5e3d87233e6db6a1da04ac7c19ac2357" - name: arc_spectra.zip + path: "mame/bios/arc_spectra.zip" standalone_path: "arc_spectra.zip" required: false category: bios_zip @@ -11940,6 +12352,7 @@ files: sha1: "bac53e4cd1047606e6314992e2581acf09e1b658" - name: arc_ua_morley.zip + path: "mame/bios/arc_ua_morley.zip" standalone_path: "arc_ua_morley.zip" required: false category: bios_zip @@ -11958,6 +12371,7 @@ files: sha1: "423208fb3132400d3582b29481b8f7b7e6cd0c70" - name: arc_uma_morley.zip + path: "mame/bios/arc_uma_morley.zip" standalone_path: "arc_uma_morley.zip" required: false category: bios_zip @@ -11976,6 +12390,7 @@ files: sha1: "0db73540fc329b71a977a2be20c66ae2ae39df78" - name: arc_upa_hccs.zip + path: "mame/bios/arc_upa_hccs.zip" standalone_path: "arc_upa_hccs.zip" required: false category: bios_zip @@ -11994,6 +12409,7 @@ files: sha1: "1a5d5c2571624df6fbeff91045c5b40effeda1d9" - name: arc_upmidi_aka12.zip + path: "mame/bios/arc_upmidi_aka12.zip" standalone_path: "arc_upmidi_aka12.zip" required: false category: bios_zip @@ -12012,6 +12428,7 @@ files: sha1: "4e0e2cf2586c8f2fc1431458f677a45164749ab2" - name: asc88.zip + path: "mame/bios/asc88.zip" standalone_path: "asc88.zip" required: false category: bios_zip @@ -12030,6 +12447,7 @@ files: sha1: "49c44aafbb3f28478e4b5eeaa208b147fdf253b9" - name: ascsasi.zip + path: "mame/bios/ascsasi.zip" standalone_path: "ascsasi.zip" required: false category: bios_zip @@ -12045,6 +12463,7 @@ files: sha1: "e94b39875e29daff199d120c4e79dfb1adbedab2" - name: at_keybc.zip + path: "mame/bios/at_keybc.zip" standalone_path: "at_keybc.zip" required: false category: bios_zip @@ -12073,6 +12492,7 @@ files: sha1: "1ad475451db35a76d929824c035d582279fbe3a3" - name: atari1050.zip + path: "mame/bios/atari1050.zip" standalone_path: "atari1050.zip" required: false category: bios_zip @@ -12111,6 +12531,7 @@ files: sha1: "2e735fe1973000219dc81c463ca0d3fd90690d4a" - name: atari810.zip + path: "mame/bios/atari810.zip" standalone_path: "atari810.zip" required: false category: bios_zip @@ -12134,6 +12555,7 @@ files: sha1: "075b1948a5736599d5501f0125c745b1b9fcced4" - name: atom_discpack.zip + path: "mame/bios/atom_discpack.zip" standalone_path: "atom_discpack.zip" required: false category: bios_zip @@ -12148,6 +12570,7 @@ files: sha1: "71ea0a4b8d9c3caf9718fc7cc279f4306a23b39c" - name: atom_gdos.zip + path: "mame/bios/atom_gdos.zip" standalone_path: "atom_gdos.zip" required: false category: bios_zip @@ -12163,6 +12586,7 @@ files: sha1: "b8ded5f6ca78664b30e608631e95a5d2b0b3c1fc" - name: atom_gdos2015.zip + path: "mame/bios/atom_gdos2015.zip" standalone_path: "atom_gdos2015.zip" required: false category: bios_zip @@ -12177,6 +12601,7 @@ files: sha1: "ff776eff6aadaf1a7f6d856cd6d1f1f59ac97112" - name: atom_speech.zip + path: "mame/bios/atom_speech.zip" standalone_path: "atom_speech.zip" required: false category: bios_zip @@ -12192,6 +12617,7 @@ files: sha1: "e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc" - name: atom_vdu80.zip + path: "mame/bios/atom_vdu80.zip" standalone_path: "atom_vdu80.zip" required: false category: bios_zip @@ -12208,6 +12634,7 @@ files: bad_dump: true - name: ax208.zip + path: "mame/bios/ax208.zip" standalone_path: "ax208.zip" required: false category: bios_zip @@ -12223,6 +12650,7 @@ files: sha1: "0dc7ab9bdaf73231d4d6627fe6308fe8103e1bbc" - name: ax208p.zip + path: "mame/bios/ax208p.zip" standalone_path: "ax208p.zip" required: false category: bios_zip @@ -12237,6 +12665,7 @@ files: sha1: "b119000f93251894a352ecf675ee42f2e5c347bd" - name: banshee_x86.zip + path: "mame/bios/banshee_x86.zip" standalone_path: "banshee_x86.zip" required: false category: bios_zip @@ -12260,6 +12689,7 @@ files: sha1: "48b0bc08d142be3aa0d937ee56afd299b3b20386" - name: basf7100_kbd.zip + path: "mame/bios/basf7100_kbd.zip" standalone_path: "basf7100_kbd.zip" required: false category: bios_zip @@ -12275,6 +12705,7 @@ files: sha1: "6262379ba565c1de072b2b21dc3141db1ec5129c" - name: bbc_24bbc.zip + path: "mame/bios/bbc_24bbc.zip" standalone_path: "bbc_24bbc.zip" required: false category: bios_zip @@ -12293,6 +12724,7 @@ files: sha1: "65493cc1f6ae31cf39298d67dad42ea23be4cae6" - name: bbc_2ndserial.zip + path: "mame/bios/bbc_2ndserial.zip" standalone_path: "bbc_2ndserial.zip" required: false category: bios_zip @@ -12311,6 +12743,7 @@ files: sha1: "9ebbe845734d77ebf1730ea622ce2db43f18b1c2" - name: bbc_acorn1770.zip + path: "mame/bios/bbc_acorn1770.zip" standalone_path: "bbc_acorn1770.zip" required: false category: bios_zip @@ -12346,6 +12779,7 @@ files: sha1: "cf2ebc422a8d24ec6f1a0320520c38a0e704109a" - name: bbc_acorn8271.zip + path: "mame/bios/bbc_acorn8271.zip" standalone_path: "bbc_acorn8271.zip" required: false category: bios_zip @@ -12401,6 +12835,7 @@ files: sha1: "387d2468c6e1360f5b531784ce95d5f71a50c2b5" - name: bbc_ams3.zip + path: "mame/bios/bbc_ams3.zip" standalone_path: "bbc_ams3.zip" required: false category: bios_zip @@ -12420,6 +12855,7 @@ files: sha1: "a9d9123667e65334b28b8588b09642478653e356" - name: bbc_ariesb20.zip + path: "mame/bios/bbc_ariesb20.zip" standalone_path: "bbc_ariesb20.zip" required: false category: bios_zip @@ -12441,6 +12877,7 @@ files: sha1: "d04bfd332d63f6f23dca2ef81a1d2074e3d88ee9" - name: bbc_ariesb32.zip + path: "mame/bios/bbc_ariesb32.zip" standalone_path: "bbc_ariesb32.zip" required: false category: bios_zip @@ -12457,6 +12894,7 @@ files: sha1: "466e3b68f1a8e0287ae095cb3c16dac6afc89dcb" - name: bbc_autoprom.zip + path: "mame/bios/bbc_autoprom.zip" standalone_path: "bbc_autoprom.zip" required: false category: bios_zip @@ -12478,6 +12916,7 @@ files: sha1: "9f584f0cc54bbbf6128e96f5f97fa811cc3d68ce" - name: bbc_beebspch.zip + path: "mame/bios/bbc_beebspch.zip" standalone_path: "bbc_beebspch.zip" required: false category: bios_zip @@ -12502,6 +12941,7 @@ files: sha1: "e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc" - name: bbc_cc500.zip + path: "mame/bios/bbc_cc500.zip" standalone_path: "bbc_cc500.zip" required: false category: bios_zip @@ -12520,6 +12960,7 @@ files: sha1: "e645afdc5c7574a487ff484b79ea21a3b476f847" - name: bbc_chameleon.zip + path: "mame/bios/bbc_chameleon.zip" standalone_path: "bbc_chameleon.zip" required: false category: bios_zip @@ -12540,6 +12981,7 @@ files: sha1: "72cf334cdb866ba3dd2353fc7da0dfdb6abf63a7" - name: bbc_cisco.zip + path: "mame/bios/bbc_cisco.zip" standalone_path: "bbc_cisco.zip" required: false category: bios_zip @@ -12571,6 +13013,7 @@ files: sha1: "500339258bd5cad363709c774c0cee36a17986cb" - name: bbc_cms6502.zip + path: "mame/bios/bbc_cms6502.zip" standalone_path: "bbc_cms6502.zip" required: false category: bios_zip @@ -12596,6 +13039,7 @@ files: sha1: "4a7393f3a45ea309f744441c16723e2ef447a281" - name: bbc_cumana1.zip + path: "mame/bios/bbc_cumana1.zip" standalone_path: "bbc_cumana1.zip" required: false category: bios_zip @@ -12612,6 +13056,7 @@ files: sha1: "4bf31a420a9d752285b088ee4f08a64563527662" - name: bbc_cumana2.zip + path: "mame/bios/bbc_cumana2.zip" standalone_path: "bbc_cumana2.zip" required: false category: bios_zip @@ -12628,6 +13073,7 @@ files: sha1: "0dced741482321938842746ee47090ae443d7ad5" - name: bbc_cumana68k.zip + path: "mame/bios/bbc_cumana68k.zip" standalone_path: "bbc_cumana68k.zip" required: false category: bios_zip @@ -12645,6 +13091,7 @@ files: sha1: "1cb54119bf13b39d598573d8d6a7e9f70d88b50d" - name: bbc_cv1797.zip + path: "mame/bios/bbc_cv1797.zip" standalone_path: "bbc_cv1797.zip" required: false category: bios_zip @@ -12661,6 +13108,7 @@ files: sha1: "9cd39d011290b97d5ba05b6c745689a8553be5fc" - name: bbc_datacentre.zip + path: "mame/bios/bbc_datacentre.zip" standalone_path: "bbc_datacentre.zip" required: false category: bios_zip @@ -12687,6 +13135,7 @@ files: sha1: "524826112e436728ba54e73f3f6b25c7b43abd69" - name: bbc_detalker.zip + path: "mame/bios/bbc_detalker.zip" standalone_path: "bbc_detalker.zip" required: false category: bios_zip @@ -12701,6 +13150,7 @@ files: sha1: "e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc" - name: bbc_ieee488.zip + path: "mame/bios/bbc_ieee488.zip" standalone_path: "bbc_ieee488.zip" required: false category: bios_zip @@ -12730,6 +13180,7 @@ files: sha1: "0d3fcb79e70cfa42eff8cc78bf29c2493898d6eb" - name: bbc_integrab.zip + path: "mame/bios/bbc_integrab.zip" standalone_path: "bbc_integrab.zip" required: false category: bios_zip @@ -12756,6 +13207,7 @@ files: sha1: "b2b7fc3258936296f83d720759caacba5378edec" - name: bbc_kenda.zip + path: "mame/bios/bbc_kenda.zip" standalone_path: "bbc_kenda.zip" required: false category: bios_zip @@ -12771,6 +13223,7 @@ files: sha1: "594ae1d1aeaa20a1d5d1c64cd94d43926dda4029" - name: bbc_magazzino.zip + path: "mame/bios/bbc_magazzino.zip" standalone_path: "bbc_magazzino.zip" required: false category: bios_zip @@ -12786,6 +13239,7 @@ files: sha1: "0d1959ff6456453842134be9b1a3dd2ee72ae884" - name: bbc_memexb20.zip + path: "mame/bios/bbc_memexb20.zip" standalone_path: "bbc_memexb20.zip" required: false category: bios_zip @@ -12801,6 +13255,7 @@ files: sha1: "aad311797e204b0b69450460f8b4605409c31ddd" - name: bbc_mertec.zip + path: "mame/bios/bbc_mertec.zip" standalone_path: "bbc_mertec.zip" required: false category: bios_zip @@ -12816,6 +13271,7 @@ files: sha1: "0c4017ffbb480168e54c6b153da257ec5ea29d4e" - name: bbc_morleyaa.zip + path: "mame/bios/bbc_morleyaa.zip" standalone_path: "bbc_morleyaa.zip" required: false category: bios_zip @@ -12831,6 +13287,7 @@ files: sha1: "c80f47e3f661b1636d21ff542c7a39a586008098" - name: bbc_multiform.zip + path: "mame/bios/bbc_multiform.zip" standalone_path: "bbc_multiform.zip" required: false category: bios_zip @@ -12852,6 +13309,7 @@ files: sha1: "0bc06ce54ab9a2242294bbbe9ce8f07e464bb674" - name: bbc_opus1770.zip + path: "mame/bios/bbc_opus1770.zip" standalone_path: "bbc_opus1770.zip" required: false category: bios_zip @@ -12873,6 +13331,7 @@ files: sha1: "a1ad3e9acbd15400e7da1e50bc6673835cde1fe7" - name: bbc_opus2791.zip + path: "mame/bios/bbc_opus2791.zip" standalone_path: "bbc_opus2791.zip" required: false category: bios_zip @@ -12903,6 +13362,7 @@ files: sha1: "05f461464707b4ca24636c9e726af561f227ccdb" - name: bbc_opus2793.zip + path: "mame/bios/bbc_opus2793.zip" standalone_path: "bbc_opus2793.zip" required: false category: bios_zip @@ -12923,6 +13383,7 @@ files: sha1: "a6a57bb907d6b9bd351029fb0471a3a9c343da24" - name: bbc_opus3.zip + path: "mame/bios/bbc_opus3.zip" standalone_path: "bbc_opus3.zip" required: false category: bios_zip @@ -12952,6 +13413,7 @@ files: sha1: "eca3631aa420691f96b72bfdf2e9c2b613e1bf33" - name: bbc_opus8272.zip + path: "mame/bios/bbc_opus8272.zip" standalone_path: "bbc_opus8272.zip" required: false category: bios_zip @@ -12972,6 +13434,7 @@ files: sha1: "0b7194a234c2316ba825e878e3f69928bf3bb595" - name: bbc_opusa.zip + path: "mame/bios/bbc_opusa.zip" standalone_path: "bbc_opusa.zip" required: false category: bios_zip @@ -12990,6 +13453,7 @@ files: sha1: "b9f5c749412528e4f8e9cda9f13e10f8405bb195" - name: bbc_pdram.zip + path: "mame/bios/bbc_pdram.zip" standalone_path: "bbc_pdram.zip" required: false category: bios_zip @@ -13008,6 +13472,7 @@ files: sha1: "265359d1fb9c0adca53912aa6a42a995b8225a3e" - name: bbc_pms64k.zip + path: "mame/bios/bbc_pms64k.zip" standalone_path: "bbc_pms64k.zip" required: false category: bios_zip @@ -13026,6 +13491,7 @@ files: sha1: "da9abe3b1b0bf34ee5d6ed7ee032686403436289" - name: bbc_ramdisc.zip + path: "mame/bios/bbc_ramdisc.zip" standalone_path: "bbc_ramdisc.zip" required: false category: bios_zip @@ -13044,6 +13510,7 @@ files: sha1: "17e727998756fe35ff451fd2ce1d4b5977be24fc" - name: bbc_raven20.zip + path: "mame/bios/bbc_raven20.zip" standalone_path: "bbc_raven20.zip" required: false category: bios_zip @@ -13065,6 +13532,7 @@ files: sha1: "e4f2acc07969e10c082355c82d8d1cbc1c08ee2e" - name: bbc_stl1770_1.zip + path: "mame/bios/bbc_stl1770_1.zip" standalone_path: "bbc_stl1770_1.zip" required: false category: bios_zip @@ -13081,6 +13549,7 @@ files: sha1: "22e60d4dda37335f61c27a92ba76ccc3e2102c4e" - name: bbc_stl1770_2.zip + path: "mame/bios/bbc_stl1770_2.zip" standalone_path: "bbc_stl1770_2.zip" required: false category: bios_zip @@ -13097,6 +13566,7 @@ files: sha1: "78ee759c0f762bc2717d8454a88f117516d28325" - name: bbc_stl2m128.zip + path: "mame/bios/bbc_stl2m128.zip" standalone_path: "bbc_stl2m128.zip" required: false category: bios_zip @@ -13112,6 +13582,7 @@ files: sha1: "d170632b88d0ab276a919b0076dca305094a39b2" - name: bbc_stl4m32.zip + path: "mame/bios/bbc_stl4m32.zip" standalone_path: "bbc_stl4m32.zip" required: false category: bios_zip @@ -13128,6 +13599,7 @@ files: sha1: "cf45217ac88480a6963cbf75e8cf684cd81c7b09" - name: bbc_stldfdc_1.zip + path: "mame/bios/bbc_stldfdc_1.zip" standalone_path: "bbc_stldfdc_1.zip" required: false category: bios_zip @@ -13144,6 +13616,7 @@ files: sha1: "c761102ac11be629676339e9e496fb78734e4399" - name: bbc_stlswr128.zip + path: "mame/bios/bbc_stlswr128.zip" standalone_path: "bbc_stlswr128.zip" required: false category: bios_zip @@ -13160,6 +13633,7 @@ files: sha1: "1821e74feca60b95766ead06df20f6db22e2b4bb" - name: bbc_stlswr16.zip + path: "mame/bios/bbc_stlswr16.zip" standalone_path: "bbc_stlswr16.zip" required: false category: bios_zip @@ -13176,6 +13650,7 @@ files: sha1: "1821e74feca60b95766ead06df20f6db22e2b4bb" - name: bbc_stlswr32.zip + path: "mame/bios/bbc_stlswr32.zip" standalone_path: "bbc_stlswr32.zip" required: false category: bios_zip @@ -13192,6 +13667,7 @@ files: sha1: "1821e74feca60b95766ead06df20f6db22e2b4bb" - name: bbc_stlswr64.zip + path: "mame/bios/bbc_stlswr64.zip" standalone_path: "bbc_stlswr64.zip" required: false category: bios_zip @@ -13208,6 +13684,7 @@ files: sha1: "1821e74feca60b95766ead06df20f6db22e2b4bb" - name: bbc_sweetalker.zip + path: "mame/bios/bbc_sweetalker.zip" standalone_path: "bbc_sweetalker.zip" required: false category: bios_zip @@ -13223,6 +13700,7 @@ files: sha1: "e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc" - name: bbc_tube_16032.zip + path: "mame/bios/bbc_tube_16032.zip" standalone_path: "bbc_tube_16032.zip" required: false category: bios_zip @@ -13256,6 +13734,7 @@ files: sha1: "2ec67a74a81811d8c4ffaa3583e7a9c5fb2485ba" - name: bbc_tube_32016.zip + path: "mame/bios/bbc_tube_32016.zip" standalone_path: "bbc_tube_32016.zip" required: false category: bios_zip @@ -13299,6 +13778,7 @@ files: sha1: "e6a705232278c518340ddc69ea51af91965fa332" - name: bbc_tube_32016l.zip + path: "mame/bios/bbc_tube_32016l.zip" standalone_path: "bbc_tube_32016l.zip" required: false category: bios_zip @@ -13322,6 +13802,7 @@ files: sha1: "dfad1f4180c50757a74fcfe3a0ee7d7b48eb1bee" - name: bbc_tube_6502.zip + path: "mame/bios/bbc_tube_6502.zip" standalone_path: "bbc_tube_6502.zip" required: false category: bios_zip @@ -13350,6 +13831,7 @@ files: sha1: "9ecef24de58a48c3fbe01b12888c3f6a5d24f57f" - name: bbc_tube_6502e.zip + path: "mame/bios/bbc_tube_6502e.zip" standalone_path: "bbc_tube_6502e.zip" required: false category: bios_zip @@ -13369,6 +13851,7 @@ files: bad_dump: true - name: bbc_tube_6502p.zip + path: "mame/bios/bbc_tube_6502p.zip" standalone_path: "bbc_tube_6502p.zip" required: false category: bios_zip @@ -13402,6 +13885,7 @@ files: sha1: "4a00d4d3deec0ab43dc6647ac591bd71f4b24a51" - name: bbc_tube_65c102.zip + path: "mame/bios/bbc_tube_65c102.zip" standalone_path: "bbc_tube_65c102.zip" required: false category: bios_zip @@ -13430,6 +13914,7 @@ files: sha1: "9ecef24de58a48c3fbe01b12888c3f6a5d24f57f" - name: bbc_tube_80286.zip + path: "mame/bios/bbc_tube_80286.zip" standalone_path: "bbc_tube_80286.zip" required: false category: bios_zip @@ -13451,6 +13936,7 @@ files: sha1: "45dc8d7e7936afbec6de423569d9005a1c350316" - name: bbc_tube_a500.zip + path: "mame/bios/bbc_tube_a500.zip" standalone_path: "bbc_tube_a500.zip" required: false category: bios_zip @@ -13480,6 +13966,7 @@ files: sha1: "c46448435b86d1397c7cb144bece87e73a9220aa" - name: bbc_tube_a500d.zip + path: "mame/bios/bbc_tube_a500d.zip" standalone_path: "bbc_tube_a500d.zip" required: false category: bios_zip @@ -13509,6 +13996,7 @@ files: sha1: "9b6bdeef8d7fb22ef0203c2f531a4e0a55e22c6f" - name: bbc_tube_arm.zip + path: "mame/bios/bbc_tube_arm.zip" standalone_path: "bbc_tube_arm.zip" required: false category: bios_zip @@ -13542,6 +14030,7 @@ files: sha1: "abcc71cbc43489e89a87aac64e67b17daef5895a" - name: bbc_tube_arm7.zip + path: "mame/bios/bbc_tube_arm7.zip" standalone_path: "bbc_tube_arm7.zip" required: false category: bios_zip @@ -13565,6 +14054,7 @@ files: sha1: "babfb5bdb8265cf3ac7feff254146cb2d2773da1" - name: bbc_tube_casper.zip + path: "mame/bios/bbc_tube_casper.zip" standalone_path: "bbc_tube_casper.zip" required: false category: bios_zip @@ -13594,6 +14084,7 @@ files: sha1: "4195ce1ed928178fd645a267872a5b4f325d078a" - name: bbc_tube_cms6809.zip + path: "mame/bios/bbc_tube_cms6809.zip" standalone_path: "bbc_tube_cms6809.zip" required: false category: bios_zip @@ -13615,6 +14106,7 @@ files: sha1: "f431f27941e13a92cdd0a9e2eda891c73d59d835" - name: bbc_tube_matchbox.zip + path: "mame/bios/bbc_tube_matchbox.zip" standalone_path: "bbc_tube_matchbox.zip" required: false category: bios_zip @@ -13660,6 +14152,7 @@ files: sha1: "80343cb198b03ea91c8790d765f7d3869ba9bb32" - name: bbc_tube_pcplus.zip + path: "mame/bios/bbc_tube_pcplus.zip" standalone_path: "bbc_tube_pcplus.zip" required: false category: bios_zip @@ -13681,6 +14174,7 @@ files: sha1: "45dc8d7e7936afbec6de423569d9005a1c350316" - name: bbc_tube_rc6502.zip + path: "mame/bios/bbc_tube_rc6502.zip" standalone_path: "bbc_tube_rc6502.zip" required: false category: bios_zip @@ -13703,6 +14197,7 @@ files: sha1: "70b190e251e8807c4120c2ec7b930e62c19e3ea1" - name: bbc_tube_rc65816.zip + path: "mame/bios/bbc_tube_rc65816.zip" standalone_path: "bbc_tube_rc65816.zip" required: false category: bios_zip @@ -13725,6 +14220,7 @@ files: sha1: "b9943843f753470b636ee17ad820fa3ccad68249" - name: bbc_tube_x25.zip + path: "mame/bios/bbc_tube_x25.zip" standalone_path: "bbc_tube_x25.zip" required: false category: bios_zip @@ -13750,6 +14246,7 @@ files: sha1: "3d9e3f58f878d1f7c743b05e371845b3f7627129" - name: bbc_tube_z80.zip + path: "mame/bios/bbc_tube_z80.zip" standalone_path: "bbc_tube_z80.zip" required: false category: bios_zip @@ -13768,6 +14265,7 @@ files: sha1: "069077df498599a9c880d4ec9f4bc53fcc602d82" - name: bbc_tube_z80w.zip + path: "mame/bios/bbc_tube_z80w.zip" standalone_path: "bbc_tube_z80w.zip" required: false category: bios_zip @@ -13786,6 +14284,7 @@ files: sha1: "47211cead3a1b0f9830dcdef8e54e29522c69bf8" - name: bbc_tube_zep100.zip + path: "mame/bios/bbc_tube_zep100.zip" standalone_path: "bbc_tube_zep100.zip" required: false category: bios_zip @@ -13824,6 +14323,7 @@ files: sha1: "62b57c858a3baa4ff943c31f77d331c414772a61" - name: bbc_tube_zep100l.zip + path: "mame/bios/bbc_tube_zep100l.zip" standalone_path: "bbc_tube_zep100l.zip" required: false category: bios_zip @@ -13846,6 +14346,7 @@ files: sha1: "e6ee738e5f2f8556002b79d18caa8ef21f14e08d" - name: bbc_tube_zep100m.zip + path: "mame/bios/bbc_tube_zep100m.zip" standalone_path: "bbc_tube_zep100m.zip" required: false category: bios_zip @@ -13871,6 +14372,7 @@ files: sha1: "e6ee738e5f2f8556002b79d18caa8ef21f14e08d" - name: bbc_tube_zep100w.zip + path: "mame/bios/bbc_tube_zep100w.zip" standalone_path: "bbc_tube_zep100w.zip" required: false category: bios_zip @@ -13898,6 +14400,7 @@ files: sha1: "e6ee738e5f2f8556002b79d18caa8ef21f14e08d" - name: bbc_udm.zip + path: "mame/bios/bbc_udm.zip" standalone_path: "bbc_udm.zip" required: false category: bios_zip @@ -13929,6 +14432,7 @@ files: sha1: "6834e46cb15354003d553e6c2bdb4ed76b47a465" - name: bbc_voicebox.zip + path: "mame/bios/bbc_voicebox.zip" standalone_path: "bbc_voicebox.zip" required: false category: bios_zip @@ -13948,6 +14452,7 @@ files: sha1: "e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc" - name: bbc_we32kram.zip + path: "mame/bios/bbc_we32kram.zip" standalone_path: "bbc_we32kram.zip" required: false category: bios_zip @@ -13984,6 +14489,7 @@ files: sha1: "1b59a3354cfc704ad8aa60b0ed16e4cd2d815031" - name: bbc_weddb2.zip + path: "mame/bios/bbc_weddb2.zip" standalone_path: "bbc_weddb2.zip" required: false category: bios_zip @@ -14010,6 +14516,7 @@ files: sha1: "6719dc958f2631e6dc8f045429797b289bfe649a" - name: bbc_weddb3.zip + path: "mame/bios/bbc_weddb3.zip" standalone_path: "bbc_weddb3.zip" required: false category: bios_zip @@ -14026,6 +14533,7 @@ files: sha1: "618b7a1551f91e2b18608428b9e581f3d920d4b5" - name: betadisk.zip + path: "mame/bios/betadisk.zip" standalone_path: "betadisk.zip" required: false category: bios_zip @@ -14269,6 +14777,7 @@ files: sha1: "21695e3f2a8f796386ce66eea8a246b0ac44810c" - name: bingoct.zip + path: "mame/bios/bingoct.zip" standalone_path: "bingoct.zip" required: false category: bios_zip @@ -14292,6 +14801,7 @@ files: sha1: "76feec0091afb92af8ced99af61495f28f981120" - name: bk_altpro.zip + path: "mame/bios/bk_altpro.zip" standalone_path: "bk_altpro.zip" required: false category: bios_zip @@ -14320,6 +14830,7 @@ files: sha1: "4796f373e343460b2c9acf769fd4ddfa46e6e90f" - name: bk_kmd.zip + path: "mame/bios/bk_kmd.zip" standalone_path: "bk_kmd.zip" required: false category: bios_zip @@ -14347,6 +14858,7 @@ files: sha1: "28eefbb63047b26e4aec104aeeca74e2f9d0276c" - name: bk_samara.zip + path: "mame/bios/bk_samara.zip" standalone_path: "bk_samara.zip" required: false category: bios_zip @@ -14365,6 +14877,7 @@ files: sha1: "abd1a48fbc1ec3a2bcb83e8d847dbce747453a1b" - name: bluechip.zip + path: "mame/bios/bluechip.zip" standalone_path: "bluechip.zip" required: false category: bios_zip @@ -14386,6 +14899,7 @@ files: sha1: "c11317cb9370e722950579a610a3effda313aeee" - name: bml3kanji.zip + path: "mame/bios/bml3kanji.zip" standalone_path: "bml3kanji.zip" required: false category: bios_zip @@ -14402,6 +14916,7 @@ files: bad_dump: true - name: bml3mp1802.zip + path: "mame/bios/bml3mp1802.zip" standalone_path: "bml3mp1802.zip" required: false category: bios_zip @@ -14418,6 +14933,7 @@ files: bad_dump: true - name: bml3mp1805.zip + path: "mame/bios/bml3mp1805.zip" standalone_path: "bml3mp1805.zip" required: false category: bios_zip @@ -14434,6 +14950,7 @@ files: bad_dump: true - name: bsmt2000.zip + path: "mame/bios/bsmt2000.zip" standalone_path: "bsmt2000.zip" required: false category: bios_zip @@ -14448,6 +14965,7 @@ files: sha1: "6ec9eb038fb8eb842c5482aebe1d149daf49f2e6" - name: bt542b.zip + path: "mame/bios/bt542b.zip" standalone_path: "bt542b.zip" required: false category: bios_zip @@ -14470,6 +14988,7 @@ files: sha1: "054ba1ea71b2aaab31ab9dd5aca955d861f5333b" - name: bt542bh.zip + path: "mame/bios/bt542bh.zip" standalone_path: "bt542bh.zip" required: false category: bios_zip @@ -14492,6 +15011,7 @@ files: sha1: "b9b327d50cd13f3e5b5b53892b18f233aff065b7" - name: bt545s.zip + path: "mame/bios/bt545s.zip" standalone_path: "bt545s.zip" required: false category: bios_zip @@ -14514,6 +15034,7 @@ files: sha1: "797a8dba182049949f7a5c14d8bef4b4e908305b" - name: bw2_ramcard.zip + path: "mame/bios/bw2_ramcard.zip" standalone_path: "bw2_ramcard.zip" required: false category: bios_zip @@ -14528,6 +15049,7 @@ files: sha1: "a776a27d64f7b857565594beb63aa2cd692dcf04" - name: bwtwo.zip + path: "mame/bios/bwtwo.zip" standalone_path: "bwtwo.zip" required: false category: bios_zip @@ -14549,6 +15071,7 @@ files: sha1: "78761bd2369cb0c58ef1344c697a47d3a659d4bc" - name: c1526.zip + path: "mame/bios/c1526.zip" standalone_path: "c1526.zip" required: false category: bios_zip @@ -14580,6 +15103,7 @@ files: sha1: "8b7f620a8f85e250b142d72b812a67fd0e292d68" - name: c1540.zip + path: "mame/bios/c1540.zip" standalone_path: "c1540.zip" required: false category: bios_zip @@ -14599,6 +15123,7 @@ files: sha1: "56dfe79b26f50af4e83fd9604857756d196516b9" - name: c1541.zip + path: "mame/bios/c1541.zip" standalone_path: "c1541.zip" required: false category: bios_zip @@ -14664,6 +15189,7 @@ files: sha1: "8e0547430135ba462525c224e76356bd3d430f11" - name: c1541c.zip + path: "mame/bios/c1541c.zip" standalone_path: "c1541c.zip" required: false category: bios_zip @@ -14685,6 +15211,7 @@ files: sha1: "38a7a489c7bbc8661cf63476bf1eb07b38b1c704" - name: c1541dd.zip + path: "mame/bios/c1541dd.zip" standalone_path: "c1541dd.zip" required: false category: bios_zip @@ -14700,6 +15227,7 @@ files: sha1: "e4d5b9ad6b719dd988276214aa4536d3525d313c" - name: c1541ii.zip + path: "mame/bios/c1541ii.zip" standalone_path: "c1541ii.zip" required: false category: bios_zip @@ -14725,6 +15253,7 @@ files: sha1: "d3b78c3dbac55f5199f33f3fe0036439811f7fb3" - name: c1541pd.zip + path: "mame/bios/c1541pd.zip" standalone_path: "c1541pd.zip" required: false category: bios_zip @@ -14744,6 +15273,7 @@ files: sha1: "2b26adc1f4192b6ca1514754f73c929087b24426" - name: c1541pdc.zip + path: "mame/bios/c1541pdc.zip" standalone_path: "c1541pdc.zip" required: false category: bios_zip @@ -14771,6 +15301,7 @@ files: sha1: "78846af2ee6a56fceee44f9246659685ab2cbb7e" - name: c1551.zip + path: "mame/bios/c1551.zip" standalone_path: "c1551.zip" required: false category: bios_zip @@ -14785,6 +15316,7 @@ files: sha1: "fae3c788ad9a6cc2dbdfbcf6c0264b2ca921d55e" - name: c1563.zip + path: "mame/bios/c1563.zip" standalone_path: "c1563.zip" required: false category: bios_zip @@ -14800,6 +15332,7 @@ files: sha1: "2c5111a9c15be7b7955f6c8775fea25ec10c0ca0" - name: c1570.zip + path: "mame/bios/c1570.zip" standalone_path: "c1570.zip" required: false category: bios_zip @@ -14815,6 +15348,7 @@ files: sha1: "5fc06dc82ff6840f183bd43a4d9b8a16956b2f56" - name: c1571.zip + path: "mame/bios/c1571.zip" standalone_path: "c1571.zip" required: false category: bios_zip @@ -14841,6 +15375,7 @@ files: sha1: "d4b79b60cf1eaa399d0932200eb7811e00455249" - name: c1571cr.zip + path: "mame/bios/c1571cr.zip" standalone_path: "c1571cr.zip" required: false category: bios_zip @@ -14861,6 +15396,7 @@ files: sha1: "823b178561302b403e6bfd8dd741d757efef3958" - name: c1581.zip + path: "mame/bios/c1581.zip" standalone_path: "c1581.zip" required: false category: bios_zip @@ -14892,6 +15428,7 @@ files: sha1: "65bbf2be7bcd5bdcbff609d6c66471ffb9d04bfe" - name: c2031.zip + path: "mame/bios/c2031.zip" standalone_path: "c2031.zip" required: false category: bios_zip @@ -14914,6 +15451,7 @@ files: sha1: "ec6b75ecfdd4744e5d57979ef6af990444c11ae1" - name: c2040.zip + path: "mame/bios/c2040.zip" standalone_path: "c2040.zip" required: false category: bios_zip @@ -14942,6 +15480,7 @@ files: sha1: "d539858f839f96393f218307df7394362a84a26a" - name: c2040_fdc.zip + path: "mame/bios/c2040_fdc.zip" standalone_path: "c2040_fdc.zip" required: false category: bios_zip @@ -14959,6 +15498,7 @@ files: sha1: "97df576397608455616331f8e837cb3404363fa2" - name: c3040.zip + path: "mame/bios/c3040.zip" standalone_path: "c3040.zip" required: false category: bios_zip @@ -14985,6 +15525,7 @@ files: sha1: "d539858f839f96393f218307df7394362a84a26a" - name: c4023.zip + path: "mame/bios/c4023.zip" standalone_path: "c4023.zip" required: false category: bios_zip @@ -15003,6 +15544,7 @@ files: sha1: "7a8c43d2e205f58d83709c04bc7795602a892ddd" - name: c4040.zip + path: "mame/bios/c4040.zip" standalone_path: "c4040.zip" required: false category: bios_zip @@ -15051,6 +15593,7 @@ files: sha1: "6645fa40b81be1ff7d1384e9b52df06a26ab0bfb" - name: c64_ar4x.zip + path: "mame/bios/c64_ar4x.zip" standalone_path: "c64_ar4x.zip" required: false category: bios_zip @@ -15064,6 +15607,7 @@ files: sha1: "f39975d24eb009325fa5fac86b475137cac04813" - name: c64_buscard.zip + path: "mame/bios/c64_buscard.zip" standalone_path: "c64_buscard.zip" required: false category: bios_zip @@ -15079,6 +15623,7 @@ files: sha1: "8fb4ba7e3d0b58dc01b66ef962955596f1b125b5" - name: c64_buscard2.zip + path: "mame/bios/c64_buscard2.zip" standalone_path: "c64_buscard2.zip" required: false category: bios_zip @@ -15094,6 +15639,7 @@ files: sha1: "04f0a248370281fd42389928e32d11aba597cf01" - name: c64_cspeech.zip + path: "mame/bios/c64_cspeech.zip" standalone_path: "c64_cspeech.zip" required: false category: bios_zip @@ -15107,6 +15653,7 @@ files: sha1: "e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc" - name: c64_mscr.zip + path: "mame/bios/c64_mscr.zip" standalone_path: "c64_mscr.zip" required: false category: bios_zip @@ -15125,6 +15672,7 @@ files: sha1: "87e7335e626bdb73498b46c28c7baab72df38d1f" - name: c64_nl10.zip + path: "mame/bios/c64_nl10.zip" standalone_path: "c64_nl10.zip" required: false category: bios_zip @@ -15140,6 +15688,7 @@ files: sha1: "5b3b9e8a93d5d77a49160b3d0c2489ba7be99c9a" - name: c64_supercpu.zip + path: "mame/bios/c64_supercpu.zip" standalone_path: "c64_supercpu.zip" required: false category: bios_zip @@ -15155,6 +15704,7 @@ files: sha1: "6aa529a7b1b6de53e8979e407a77b4d5657727f5" - name: c64_xl80.zip + path: "mame/bios/c64_xl80.zip" standalone_path: "c64_xl80.zip" required: false category: bios_zip @@ -15169,6 +15719,7 @@ files: sha1: "4b244e6d94a7653a2e52c351589f0b469119fb04" - name: c64_z80videopak.zip + path: "mame/bios/c64_z80videopak.zip" standalone_path: "c64_z80videopak.zip" required: false category: bios_zip @@ -15183,6 +15734,7 @@ files: sha1: "4b244e6d94a7653a2e52c351589f0b469119fb04" - name: c8050.zip + path: "mame/bios/c8050.zip" standalone_path: "c8050.zip" required: false category: bios_zip @@ -15257,6 +15809,7 @@ files: sha1: "3a9a80f72ce76e5f5c72513f8ef7553212912ae3" - name: c8050fdc.zip + path: "mame/bios/c8050fdc.zip" standalone_path: "c8050fdc.zip" required: false category: bios_zip @@ -15274,6 +15827,7 @@ files: sha1: "97df576397608455616331f8e837cb3404363fa2" - name: c8250.zip + path: "mame/bios/c8250.zip" standalone_path: "c8250.zip" required: false category: bios_zip @@ -15348,6 +15902,7 @@ files: sha1: "3a9a80f72ce76e5f5c72513f8ef7553212912ae3" - name: c8250lp.zip + path: "mame/bios/c8250lp.zip" standalone_path: "c8250lp.zip" required: false category: bios_zip @@ -15389,6 +15944,7 @@ files: sha1: "3f7892a9bab84b633f45686bbbbe66bc2948c8e5" - name: c8280.zip + path: "mame/bios/c8280.zip" standalone_path: "c8280.zip" required: false category: bios_zip @@ -15434,6 +15990,7 @@ files: sha1: "a0994c80025240d2b49ffd209dbfe8a4de3975b0" - name: cadabc.zip + path: "mame/bios/cadabc.zip" standalone_path: "cadabc.zip" required: false category: bios_zip @@ -15477,6 +16034,7 @@ files: sha1: "54720d155b4990d9879b95c0d13592bb7534da09" - name: cbm2_hrga.zip + path: "mame/bios/cbm2_hrga.zip" standalone_path: "cbm2_hrga.zip" required: false category: bios_zip @@ -15492,6 +16050,7 @@ files: sha1: "d75ffa97b2dd4e1baefe4acaa130daae866ab0e8" - name: cbm2_hrgb.zip + path: "mame/bios/cbm2_hrgb.zip" standalone_path: "cbm2_hrgb.zip" required: false category: bios_zip @@ -15507,6 +16066,7 @@ files: sha1: "d75ffa97b2dd4e1baefe4acaa130daae866ab0e8" - name: cbm8000_hsg_a.zip + path: "mame/bios/cbm8000_hsg_a.zip" standalone_path: "cbm8000_hsg_a.zip" required: false category: bios_zip @@ -15526,6 +16086,7 @@ files: sha1: "12ed3176ddd632f52e91082ab574adcba2149684" - name: cbm8000_hsg_b.zip + path: "mame/bios/cbm8000_hsg_b.zip" standalone_path: "cbm8000_hsg_b.zip" required: false category: bios_zip @@ -15545,6 +16106,7 @@ files: sha1: "12ed3176ddd632f52e91082ab574adcba2149684" - name: cbm_interpod.zip + path: "mame/bios/cbm_interpod.zip" standalone_path: "cbm_interpod.zip" required: false category: bios_zip @@ -15566,6 +16128,7 @@ files: sha1: "7659c45b73f577233f7657c4da9141dcfe8b6d97" - name: cbm_serbox.zip + path: "mame/bios/cbm_serbox.zip" standalone_path: "cbm_serbox.zip" required: false category: bios_zip @@ -15580,6 +16143,7 @@ files: sha1: "9b922f1e9f9b71e771361c52d4df2aa5695488a5" - name: cchip.zip + path: "mame/bios/cchip.zip" standalone_path: "cchip.zip" required: false category: bios_zip @@ -15595,6 +16159,7 @@ files: sha1: "73bc4b46cd2d6805ec926f39f22af00e38a3f822" - name: ccs7710.zip + path: "mame/bios/ccs7710.zip" standalone_path: "ccs7710.zip" required: false category: bios_zip @@ -15638,6 +16203,7 @@ files: sha1: "d0df2aaf0134f8c1b929a4de0036fedc7e7164e2" - name: cd6809_fdc.zip + path: "mame/bios/cd6809_fdc.zip" standalone_path: "cd6809_fdc.zip" required: false category: bios_zip @@ -15653,6 +16219,7 @@ files: sha1: "9b2eec25188bed4326b84739a666435884e4ddf4" - name: cd90_015.zip + path: "mame/bios/cd90_015.zip" standalone_path: "cd90_015.zip" required: false category: bios_zip @@ -15668,6 +16235,7 @@ files: sha1: "31a6bb81baaeec5fc8de457c97264f9dfa92c18b" - name: cd90_351.zip + path: "mame/bios/cd90_351.zip" standalone_path: "cd90_351.zip" required: false category: bios_zip @@ -15695,6 +16263,7 @@ files: sha1: "7118636fb5c597c78c2fce17b02aed5e4ba38635" - name: cd90_640.zip + path: "mame/bios/cd90_640.zip" standalone_path: "cd90_640.zip" required: false category: bios_zip @@ -15710,6 +16279,7 @@ files: sha1: "5c72566c22d8160ef0c75959e1863a1309bbbe49" - name: cdd2000.zip + path: "mame/bios/cdd2000.zip" standalone_path: "cdd2000.zip" required: false category: bios_zip @@ -15740,6 +16310,7 @@ files: sha1: "882be4ed5daf70a686929fffcb66fa95b431bbe2" - name: cdr4210.zip + path: "mame/bios/cdr4210.zip" standalone_path: "cdr4210.zip" required: false category: bios_zip @@ -15764,6 +16335,7 @@ files: sha1: "6aafdedf12240ad347427287c0db289f90bd064d" - name: cdrn820s.zip + path: "mame/bios/cdrn820s.zip" standalone_path: "cdrn820s.zip" required: false category: bios_zip @@ -15788,6 +16360,7 @@ files: sha1: "e498dcd9006d257ced6cd0b50c76608e9a8023f7" - name: cdu415.zip + path: "mame/bios/cdu415.zip" standalone_path: "cdu415.zip" required: false category: bios_zip @@ -15811,6 +16384,7 @@ files: sha1: "72d0b192efc32f7c8985dd96df3e346c57a236e7" - name: cdu561_25.zip + path: "mame/bios/cdu561_25.zip" standalone_path: "cdu561_25.zip" required: false category: bios_zip @@ -15845,6 +16419,7 @@ files: sha1: "70aa550693020431ccbd374ff85e4de8809431df" - name: cdu75s.zip + path: "mame/bios/cdu75s.zip" standalone_path: "cdu75s.zip" required: false category: bios_zip @@ -15873,6 +16448,7 @@ files: sha1: "7d674116304bc6948fe4a52d9859b4eb5d40b914" - name: centennial_sl01m_15_11194.zip + path: "mame/bios/centennial_sl01m_15_11194.zip" standalone_path: "centennial_sl01m_15_11194.zip" required: false category: bios_zip @@ -15889,6 +16465,7 @@ files: bad_dump: true - name: centennial_sl02m_15_11194.zip + path: "mame/bios/centennial_sl02m_15_11194.zip" standalone_path: "centennial_sl02m_15_11194.zip" required: false category: bios_zip @@ -15905,6 +16482,7 @@ files: bad_dump: true - name: centennial_sl04m_15_11194.zip + path: "mame/bios/centennial_sl04m_15_11194.zip" standalone_path: "centennial_sl04m_15_11194.zip" required: false category: bios_zip @@ -15921,6 +16499,7 @@ files: bad_dump: true - name: cffa1.zip + path: "mame/bios/cffa1.zip" standalone_path: "cffa1.zip" required: false category: bios_zip @@ -15936,6 +16515,7 @@ files: sha1: "6a290be18485a06f243a3561c4e01be5aafa4bfe" - name: cfp1080s.zip + path: "mame/bios/cfp1080s.zip" standalone_path: "cfp1080s.zip" required: false category: bios_zip @@ -15959,6 +16539,7 @@ files: sha1: "605be871e75ff775554fc8ce4e09bc2e35a6db09" - name: cga.zip + path: "mame/bios/cga.zip" standalone_path: "cga.zip" required: false category: bios_zip @@ -15977,6 +16558,7 @@ files: sha1: "c2a8b10808bf51a3c123ba3eb1e9dd608231916f" - name: cga_iskr1030m.zip + path: "mame/bios/cga_iskr1030m.zip" standalone_path: "cga_iskr1030m.zip" required: false category: bios_zip @@ -15991,6 +16573,7 @@ files: sha1: "5bd7cb1705a69bd16115a4c9ed1c2748a5c8ad51" - name: cga_iskr1031.zip + path: "mame/bios/cga_iskr1031.zip" standalone_path: "cga_iskr1031.zip" required: false category: bios_zip @@ -16005,6 +16588,7 @@ files: sha1: "ad7e81a0c9abc224671422bbcf6f6262da92b510" - name: cga_m24.zip + path: "mame/bios/cga_m24.zip" standalone_path: "cga_m24.zip" required: false category: bios_zip @@ -16026,6 +16610,7 @@ files: sha1: "634c2d165d401883a955e144a0abfa2078a47013" - name: cga_mc1502.zip + path: "mame/bios/cga_mc1502.zip" standalone_path: "cga_mc1502.zip" required: false category: bios_zip @@ -16043,6 +16628,7 @@ files: sha1: "6766d275467672436e91ac2997ac6b77700eba1e" - name: cga_poisk2.zip + path: "mame/bios/cga_poisk2.zip" standalone_path: "cga_poisk2.zip" required: false category: bios_zip @@ -16060,6 +16646,7 @@ files: sha1: "d70f085b9b0cbd53df7c3122fbe7592998ba8fed" - name: cga_superimpose.zip + path: "mame/bios/cga_superimpose.zip" standalone_path: "cga_superimpose.zip" required: false category: bios_zip @@ -16074,6 +16661,7 @@ files: sha1: "c2a8b10808bf51a3c123ba3eb1e9dd608231916f" - name: cgenie_fdc.zip + path: "mame/bios/cgenie_fdc.zip" standalone_path: "cgenie_fdc.zip" required: false category: bios_zip @@ -16105,6 +16693,7 @@ files: bad_dump: true - name: cgthree.zip + path: "mame/bios/cgthree.zip" standalone_path: "cgthree.zip" required: false category: bios_zip @@ -16120,6 +16709,7 @@ files: sha1: "9bef98b2784b6e70167337bb27cd07952b348b5a" - name: chessmachine.zip + path: "mame/bios/chessmachine.zip" standalone_path: "chessmachine.zip" required: false category: bios_zip @@ -16165,6 +16755,7 @@ files: sha1: "cbb5b12b5917e36679d45bcbc36ea9285223a75d" - name: cit101_kbd.zip + path: "mame/bios/cit101_kbd.zip" standalone_path: "cit101_kbd.zip" required: false category: bios_zip @@ -16179,6 +16770,7 @@ files: sha1: "50fe6b5448f8ec330fa09e8b0125b5b09c680859" - name: cit101e_kbd.zip + path: "mame/bios/cit101e_kbd.zip" standalone_path: "cit101e_kbd.zip" required: false category: bios_zip @@ -16193,6 +16785,7 @@ files: sha1: "1bbbe0d422f87c856a10de5a1492297958ff47f6" - name: cit220p_kbd.zip + path: "mame/bios/cit220p_kbd.zip" standalone_path: "cit220p_kbd.zip" required: false category: bios_zip @@ -16207,6 +16800,7 @@ files: sha1: "c4e9ef8188afb18de373f2a537ca9b7a315bfb76" - name: clgd5401.zip + path: "mame/bios/clgd5401.zip" standalone_path: "clgd5401.zip" required: false category: bios_zip @@ -16236,6 +16830,7 @@ files: sha1: "b8f01c659df0531913add253d420277cba760be8" - name: clgd542x.zip + path: "mame/bios/clgd542x.zip" standalone_path: "clgd542x.zip" required: false category: bios_zip @@ -16325,6 +16920,7 @@ files: sha1: "fde41c45347b66ed4b1f99c3f7057e7411cdf4da" - name: clgd5434_pci.zip + path: "mame/bios/clgd5434_pci.zip" standalone_path: "clgd5434_pci.zip" required: false category: bios_zip @@ -16353,6 +16949,7 @@ files: sha1: "1ee70f6cc3c7b9a9afb402a1bc939f9f2e0cc739" - name: clgd5446_pci.zip + path: "mame/bios/clgd5446_pci.zip" standalone_path: "clgd5446_pci.zip" required: false category: bios_zip @@ -16376,6 +16973,7 @@ files: sha1: "ff667218261969c48082ec12aa91088a01b0cb2a" - name: clgd5465_laguna.zip + path: "mame/bios/clgd5465_laguna.zip" standalone_path: "clgd5465_laguna.zip" required: false category: bios_zip @@ -16392,6 +16990,7 @@ files: sha1: "251a953d442dc34738f80371cfbd0fd9f1097635" - name: cmdhd.zip + path: "mame/bios/cmdhd.zip" standalone_path: "cmdhd.zip" required: false category: bios_zip @@ -16406,6 +17005,7 @@ files: sha1: "defd8bc04a52904b8a3560f11c82126619513a10" - name: cmdrc2.zip + path: "mame/bios/cmdrc2.zip" standalone_path: "cmdrc2.zip" required: false category: bios_zip @@ -16425,6 +17025,7 @@ files: sha1: "eecf92fb8cc20a6c86e30f897d09d427509dd3d3" - name: cmi_ankbd.zip + path: "mame/bios/cmi_ankbd.zip" standalone_path: "cmi_ankbd.zip" required: false category: bios_zip @@ -16440,6 +17041,7 @@ files: sha1: "8c404f58ba3e5a50aa42f761e966c74374e96cc9" - name: cmi_mkbd.zip + path: "mame/bios/cmi_mkbd.zip" standalone_path: "cmi_mkbd.zip" required: false category: bios_zip @@ -16459,6 +17061,7 @@ files: sha1: "bc6784aaa5697c28eab126e20500139b8d0c1f50" - name: cms_4080term.zip + path: "mame/bios/cms_4080term.zip" standalone_path: "cms_4080term.zip" required: false category: bios_zip @@ -16477,6 +17080,7 @@ files: bad_dump: true - name: cmsscsi.zip + path: "mame/bios/cmsscsi.zip" standalone_path: "cmsscsi.zip" required: false category: bios_zip @@ -16499,6 +17103,7 @@ files: sha1: "f6028f6f2b16250950297e2ff5317ce463006796" - name: coco_dcmodem.zip + path: "mame/bios/coco_dcmodem.zip" standalone_path: "coco_dcmodem.zip" required: false category: bios_zip @@ -16514,6 +17119,7 @@ files: sha1: "703fe0aba4a603591078cb675ffd26a67c02df88" - name: coco_orch90.zip + path: "mame/bios/coco_orch90.zip" standalone_path: "coco_orch90.zip" required: false category: bios_zip @@ -16530,6 +17136,7 @@ files: sha1: "6a20fee9c70b36a6435ac8378f31d5b626017df0" - name: coco_psg.zip + path: "mame/bios/coco_psg.zip" standalone_path: "coco_psg.zip" required: false category: bios_zip @@ -16546,6 +17153,7 @@ files: sha1: "9c7c8a5cc419ca1aca4d1c5e9f1195997c2bc95c" - name: coco_rs232.zip + path: "mame/bios/coco_rs232.zip" standalone_path: "coco_rs232.zip" required: false category: bios_zip @@ -16561,6 +17169,7 @@ files: sha1: "3fad25f3462a0b581b9c182ac11ad90c8fa08cb6" - name: coco_scii.zip + path: "mame/bios/coco_scii.zip" standalone_path: "coco_scii.zip" required: false category: bios_zip @@ -16582,6 +17191,7 @@ files: sha1: "c1fa0fcbf1202a9b63aafd98dce777b502584230" - name: coco_ssc.zip + path: "mame/bios/coco_ssc.zip" standalone_path: "coco_ssc.zip" required: false category: bios_zip @@ -16602,6 +17212,7 @@ files: sha1: "e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc" - name: coco_t4426.zip + path: "mame/bios/coco_t4426.zip" standalone_path: "coco_t4426.zip" required: false category: bios_zip @@ -16649,6 +17260,7 @@ files: sha1: "03f70dcc5f7ab60cd908427d45ebd85b6f464b93" - name: coco_wpk.zip + path: "mame/bios/coco_wpk.zip" standalone_path: "coco_wpk.zip" required: false category: bios_zip @@ -16663,6 +17275,7 @@ files: sha1: "0ff5fae512c7f1abe138504d51492404dd86be03" - name: coco_wpk2.zip + path: "mame/bios/coco_wpk2.zip" standalone_path: "coco_wpk2.zip" required: false category: bios_zip @@ -16677,6 +17290,7 @@ files: sha1: "0ff5fae512c7f1abe138504d51492404dd86be03" - name: coco_wpkrs.zip + path: "mame/bios/coco_wpkrs.zip" standalone_path: "coco_wpkrs.zip" required: false category: bios_zip @@ -16691,6 +17305,7 @@ files: sha1: "0ff5fae512c7f1abe138504d51492404dd86be03" - name: compiskb.zip + path: "mame/bios/compiskb.zip" standalone_path: "compiskb.zip" required: false category: bios_zip @@ -16705,6 +17320,7 @@ files: sha1: "c04e2d325b9c04818bc7c47c3bf32b13862b11ec" - name: comx_clm.zip + path: "mame/bios/comx_clm.zip" standalone_path: "comx_clm.zip" required: false category: bios_zip @@ -16736,6 +17352,7 @@ files: sha1: "4e041cec03dda6dba5e2598d060c49908a4fab2a" - name: comx_eb.zip + path: "mame/bios/comx_eb.zip" standalone_path: "comx_eb.zip" required: false category: bios_zip @@ -16762,6 +17379,7 @@ files: sha1: "eb6b6e7bc9e761d13554482025d8cb5e260c0619" - name: comx_epr.zip + path: "mame/bios/comx_epr.zip" standalone_path: "comx_epr.zip" required: false category: bios_zip @@ -16789,6 +17407,7 @@ files: sha1: "8bc914f52f0dd2cf792da74ec4e9e333365619ef" - name: comx_fd.zip + path: "mame/bios/comx_fd.zip" standalone_path: "comx_fd.zip" required: false category: bios_zip @@ -16803,6 +17422,7 @@ files: sha1: "290e19bdc89e3c8059e63d5ae3cca4daa194e1fe" - name: comx_pl80.zip + path: "mame/bios/comx_pl80.zip" standalone_path: "comx_pl80.zip" required: false category: bios_zip @@ -16844,6 +17464,7 @@ files: sha1: "ad83a3b57e2f0fbaa1e40644cd999b3f239635e8" - name: comx_prn.zip + path: "mame/bios/comx_prn.zip" standalone_path: "comx_prn.zip" required: false category: bios_zip @@ -16869,6 +17490,7 @@ files: sha1: "be02bd388bba0211ea72d4868264a63308e4318d" - name: comx_thm.zip + path: "mame/bios/comx_thm.zip" standalone_path: "comx_thm.zip" required: false category: bios_zip @@ -16884,6 +17506,7 @@ files: sha1: "3a8760c78bd8c7bec2dbf26657b930c9a6814803" - name: concept_kbd.zip + path: "mame/bios/concept_kbd.zip" standalone_path: "concept_kbd.zip" required: false category: bios_zip @@ -16899,6 +17522,7 @@ files: sha1: "fc58d77919739b66b85eb52b084af9716cd7f260" - name: cp2024.zip + path: "mame/bios/cp2024.zip" standalone_path: "cp2024.zip" required: false category: bios_zip @@ -16927,6 +17551,7 @@ files: sha1: "79bccc33835ba01fc4eb33fb4d412a691e7790c2" - name: cp31.zip + path: "mame/bios/cp31.zip" standalone_path: "cp31.zip" required: false category: bios_zip @@ -16953,6 +17578,7 @@ files: sha1: "c257a88672ab39d2f3fad681d22e062182b0236d" - name: cp450_fdc.zip + path: "mame/bios/cp450_fdc.zip" standalone_path: "cp450_fdc.zip" required: false category: bios_zip @@ -16968,6 +17594,7 @@ files: sha1: "827697fa5b755f5dc1efb054cdbbeb04e405405b" - name: cpc_brunword4.zip + path: "mame/bios/cpc_brunword4.zip" standalone_path: "cpc_brunword4.zip" required: false category: bios_zip @@ -17106,6 +17733,7 @@ files: sha1: "50c6417b26134b68a80912bdb91c8578eb00c8a2" - name: cpc_ddi1.zip + path: "mame/bios/cpc_ddi1.zip" standalone_path: "cpc_ddi1.zip" required: false category: bios_zip @@ -17120,6 +17748,7 @@ files: sha1: "39102c8e9cb55fcc0b9b62098780ed4a3cb6a4bb" - name: cpc_dkspeech.zip + path: "mame/bios/cpc_dkspeech.zip" standalone_path: "cpc_dkspeech.zip" required: false category: bios_zip @@ -17139,6 +17768,7 @@ files: sha1: "bf28e07d5fada3678faab77f582b802164e82f62" - name: cpc_hd20.zip + path: "mame/bios/cpc_hd20.zip" standalone_path: "cpc_hd20.zip" required: false category: bios_zip @@ -17159,6 +17789,7 @@ files: sha1: "8a20788be5f957e84e849c226aa97b55b2a3aab9" - name: cpc_mface2.zip + path: "mame/bios/cpc_mface2.zip" standalone_path: "cpc_mface2.zip" required: false category: bios_zip @@ -17173,6 +17804,7 @@ files: sha1: "1431ec628d38f000715545dd2186b684c5fe5a6f" - name: cpc_ser.zip + path: "mame/bios/cpc_ser.zip" standalone_path: "cpc_ser.zip" required: false category: bios_zip @@ -17192,6 +17824,7 @@ files: sha1: "13d033f2d1cad70140deb903d787ba514f236a59" - name: cpc_serams.zip + path: "mame/bios/cpc_serams.zip" standalone_path: "cpc_serams.zip" required: false category: bios_zip @@ -17213,6 +17846,7 @@ files: sha1: "145233fe8d4db9f5265eeac767d8ee8d45d14755" - name: cpc_smartwatch.zip + path: "mame/bios/cpc_smartwatch.zip" standalone_path: "cpc_smartwatch.zip" required: false category: bios_zip @@ -17228,6 +17862,7 @@ files: sha1: "61750d0535a1fbf2a4addad9def332cbcf8917c3" - name: cpc_ssa1.zip + path: "mame/bios/cpc_ssa1.zip" standalone_path: "cpc_ssa1.zip" required: false category: bios_zip @@ -17242,6 +17877,7 @@ files: sha1: "e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc" - name: cpc_transtape.zip + path: "mame/bios/cpc_transtape.zip" standalone_path: "cpc_transtape.zip" required: false category: bios_zip @@ -17257,6 +17893,7 @@ files: sha1: "cc509d21216bf11d40f9a3e0791ef7f4ada03790" - name: cpuap.zip + path: "mame/bios/cpuap.zip" standalone_path: "cpuap.zip" required: false category: bios_zip @@ -17288,6 +17925,7 @@ files: sha1: "0800249eab8db490c1fb6fea6d65bc7e874c9a0c" - name: cq90_028.zip + path: "mame/bios/cq90_028.zip" standalone_path: "cq90_028.zip" required: false category: bios_zip @@ -17303,6 +17941,7 @@ files: sha1: "949c1f777c892da62c242215d79757d61e71e62b" - name: crd254sh.zip + path: "mame/bios/crd254sh.zip" standalone_path: "crd254sh.zip" required: false category: bios_zip @@ -17327,6 +17966,7 @@ files: sha1: "edb1f7d96f351ef70b8ade03449fb63e0e0a652b" - name: crvfdc01.zip + path: "mame/bios/crvfdc01.zip" standalone_path: "crvfdc01.zip" required: false category: bios_zip @@ -17342,6 +17982,7 @@ files: sha1: "b1e1e8a10618588b1b44b3be5d88857497f30b33" - name: crvfdc02.zip + path: "mame/bios/crvfdc02.zip" standalone_path: "crvfdc02.zip" required: false category: bios_zip @@ -17357,6 +17998,7 @@ files: sha1: "d27c3c6921e1bb3778a3f78decf106275bc0add1" - name: csd1.zip + path: "mame/bios/csd1.zip" standalone_path: "csd1.zip" required: false category: bios_zip @@ -17375,6 +18017,7 @@ files: sha1: "c67e79a7ffefc9e9eafc238cb6ff6bb718f19afb" - name: ct1741.zip + path: "mame/bios/ct1741.zip" standalone_path: "ct1741.zip" required: false category: bios_zip @@ -17397,6 +18040,7 @@ files: sha1: "c7637c92828843f47e6e2f956af639b07aee4571" - name: cuda.zip + path: "mame/bios/cuda.zip" standalone_path: "cuda.zip" required: false category: bios_zip @@ -17432,6 +18076,7 @@ files: sha1: "e5b13a2a904cc9fc612ed25b76718c501c11b00a" - name: cuda302.zip + path: "mame/bios/cuda302.zip" standalone_path: "cuda302.zip" required: false category: bios_zip @@ -17450,6 +18095,7 @@ files: sha1: "e5b13a2a904cc9fc612ed25b76718c501c11b00a" - name: cudalite.zip + path: "mame/bios/cudalite.zip" standalone_path: "cudalite.zip" required: false category: bios_zip @@ -17468,6 +18114,7 @@ files: sha1: "e5b13a2a904cc9fc612ed25b76718c501c11b00a" - name: cv8lc.zip + path: "mame/bios/cv8lc.zip" standalone_path: "cv8lc.zip" required: false category: bios_zip @@ -17483,6 +18130,7 @@ files: sha1: "a8552315d9127aee92416aa22893551851f42e5c" - name: cw7501.zip + path: "mame/bios/cw7501.zip" standalone_path: "cw7501.zip" required: false category: bios_zip @@ -17507,6 +18155,7 @@ files: sha1: "2986ee5eedbe0cb662a9a7e7fa4e6ca7ccd8c539" - name: d2fdc.zip + path: "mame/bios/d2fdc.zip" standalone_path: "d2fdc.zip" required: false category: bios_zip @@ -17524,6 +18173,7 @@ files: sha1: "bc39fbd5b9a8d2287ac5d0a42e639fc4d3c2f9d4" - name: d9060.zip + path: "mame/bios/d9060.zip" standalone_path: "d9060.zip" required: false category: bios_zip @@ -17591,6 +18241,7 @@ files: sha1: "95a48835bc2bd1c79fb1a63778de3807fb731ac6" - name: d9090.zip + path: "mame/bios/d9090.zip" standalone_path: "d9090.zip" required: false category: bios_zip @@ -17658,6 +18309,7 @@ files: sha1: "95a48835bc2bd1c79fb1a63778de3807fb731ac6" - name: db50xg.zip + path: "mame/bios/db50xg.zip" standalone_path: "db50xg.zip" required: false category: bios_zip @@ -17680,6 +18332,7 @@ files: sha1: "adf68689b4842ec5bc9b0ea1bb99cf66d2dec4de" - name: db60xg.zip + path: "mame/bios/db60xg.zip" standalone_path: "db60xg.zip" required: false category: bios_zip @@ -17702,6 +18355,7 @@ files: sha1: "adf68689b4842ec5bc9b0ea1bb99cf66d2dec4de" - name: dc320b.zip + path: "mame/bios/dc320b.zip" standalone_path: "dc320b.zip" required: false category: bios_zip @@ -17728,6 +18382,7 @@ files: sha1: "f4e3c8d7d12c394247c7ac82dedb895c88b9a907" - name: dc320e.zip + path: "mame/bios/dc320e.zip" standalone_path: "dc320e.zip" required: false category: bios_zip @@ -17754,6 +18409,7 @@ files: sha1: "b0847e442cae61da658e9041ad9fe3737e67a0ce" - name: dc820.zip + path: "mame/bios/dc820.zip" standalone_path: "dc820.zip" required: false category: bios_zip @@ -17780,6 +18436,7 @@ files: sha1: "523a3e3258f07a7f9445620294934bcbe62cd912" - name: dc820b.zip + path: "mame/bios/dc820b.zip" standalone_path: "dc820b.zip" required: false category: bios_zip @@ -17806,6 +18463,7 @@ files: sha1: "b0847e442cae61da658e9041ad9fe3737e67a0ce" - name: dectalk_isa.zip + path: "mame/bios/dectalk_isa.zip" standalone_path: "dectalk_isa.zip" required: false category: bios_zip @@ -17831,6 +18489,7 @@ files: sha1: "4b873a5e882205fcac79a27562054b5c4d1a117c" - name: dg640.zip + path: "mame/bios/dg640.zip" standalone_path: "dg640.zip" required: false category: bios_zip @@ -17845,6 +18504,7 @@ files: sha1: "4d09aae2f933478532b7d3d1a2dee7123d9828ca" - name: digilog_kbd.zip + path: "mame/bios/digilog_kbd.zip" standalone_path: "digilog_kbd.zip" required: false category: bios_zip @@ -17860,6 +18520,7 @@ files: sha1: "c80a7f9dff6942c8f54ba8a03bc72a87d075e00d" - name: dim68k_kbd.zip + path: "mame/bios/dim68k_kbd.zip" standalone_path: "dim68k_kbd.zip" required: false category: bios_zip @@ -17879,6 +18540,7 @@ files: sha1: "d1e87c8ccd17e4e2249fe89f13111ec881b7ebae" - name: dio98543.zip + path: "mame/bios/dio98543.zip" standalone_path: "dio98543.zip" required: false category: bios_zip @@ -17897,6 +18559,7 @@ files: sha1: "9ba9391cf39624ef8027ce42c84e100344b2a2b8" - name: dio98544.zip + path: "mame/bios/dio98544.zip" standalone_path: "dio98544.zip" required: false category: bios_zip @@ -17915,6 +18578,7 @@ files: sha1: "d2bcfd39452c38bc652df39f84c7041cfdf6bd51" - name: dio98550.zip + path: "mame/bios/dio98550.zip" standalone_path: "dio98550.zip" required: false category: bios_zip @@ -17930,6 +18594,7 @@ files: sha1: "d6b23a34850f24525ca5fb36de3deb91196d2dc5" - name: dio98603a.zip + path: "mame/bios/dio98603a.zip" standalone_path: "dio98603a.zip" required: false category: bios_zip @@ -18008,6 +18673,7 @@ files: sha1: "a9cbbaa5f053f374d6cbda614b727df35a61ace1" - name: dio98603b.zip + path: "mame/bios/dio98603b.zip" standalone_path: "dio98603b.zip" required: false category: bios_zip @@ -18070,6 +18736,7 @@ files: sha1: "6706ab97eab4465ea4fa2d6b07e8107468e83818" - name: dio98628.zip + path: "mame/bios/dio98628.zip" standalone_path: "dio98628.zip" required: false category: bios_zip @@ -18085,6 +18752,7 @@ files: sha1: "738fa16ac9a0f865938e7b197d26bd37c27b8660" - name: dio98629.zip + path: "mame/bios/dio98629.zip" standalone_path: "dio98629.zip" required: false category: bios_zip @@ -18100,6 +18768,7 @@ files: sha1: "b02b3688a8e415701905c7a1d8ae8848fd9b8b42" - name: diskii13.zip + path: "mame/bios/diskii13.zip" standalone_path: "diskii13.zip" required: false category: bios_zip @@ -18115,6 +18784,7 @@ files: sha1: "afd060e6f35faf3bb0146fa889fc787adf56330a" - name: dm_clgd5430.zip + path: "mame/bios/dm_clgd5430.zip" standalone_path: "dm_clgd5430.zip" required: false category: bios_zip @@ -18133,6 +18803,7 @@ files: sha1: "15131e2b2db7a34971083a250e4a21ab7bd64a9d" - name: dmv_k220.zip + path: "mame/bios/dmv_k220.zip" standalone_path: "dmv_k220.zip" required: false category: bios_zip @@ -18163,6 +18834,7 @@ files: sha1: "eedae538636009a5b86fc78e50a03c72eeb0e73b" - name: dmv_k230.zip + path: "mame/bios/dmv_k230.zip" standalone_path: "dmv_k230.zip" required: false category: bios_zip @@ -18178,6 +18850,7 @@ files: sha1: "4f50ef25008851ae6f0c670f19d63f4e61249581" - name: dmv_k231.zip + path: "mame/bios/dmv_k231.zip" standalone_path: "dmv_k231.zip" required: false category: bios_zip @@ -18193,6 +18866,7 @@ files: sha1: "4f50ef25008851ae6f0c670f19d63f4e61249581" - name: dmv_k235.zip + path: "mame/bios/dmv_k235.zip" standalone_path: "dmv_k235.zip" required: false category: bios_zip @@ -18208,6 +18882,7 @@ files: sha1: "08d48ca3b84ab26c1a764792e04ec4def7dad2ad" - name: dmv_k806.zip + path: "mame/bios/dmv_k806.zip" standalone_path: "dmv_k806.zip" required: false category: bios_zip @@ -18222,6 +18897,7 @@ files: sha1: "b82c14dba6c25cb1f60cf623989ca8c0c1ee4cc3" - name: dmv_keyboard.zip + path: "mame/bios/dmv_keyboard.zip" standalone_path: "dmv_keyboard.zip" required: false category: bios_zip @@ -18237,6 +18913,7 @@ files: sha1: "ed09048ef03c602dba17ad6fcfe125c082c9bb17" - name: dragon_fdc.zip + path: "mame/bios/dragon_fdc.zip" standalone_path: "dragon_fdc.zip" required: false category: bios_zip @@ -18251,6 +18928,7 @@ files: sha1: "a8918c71d319237c1e3155bb38620acb114a80bc" - name: dragon_jcbsnd.zip + path: "mame/bios/dragon_jcbsnd.zip" standalone_path: "dragon_jcbsnd.zip" required: false category: bios_zip @@ -18266,6 +18944,7 @@ files: sha1: "d07bb9272e3d3928059853730ff656905a80b68e" - name: dragon_jcbspch.zip + path: "mame/bios/dragon_jcbspch.zip" standalone_path: "dragon_jcbspch.zip" required: false category: bios_zip @@ -18285,6 +18964,7 @@ files: sha1: "df3f64a7a3beeb91469932035af5e4f8a7872aad" - name: dragon_serial.zip + path: "mame/bios/dragon_serial.zip" standalone_path: "dragon_serial.zip" required: false category: bios_zip @@ -18300,6 +18980,7 @@ files: sha1: "14124dfb4bd78d1907e80d779cd7f3bae30564c9" - name: dragon_sprites.zip + path: "mame/bios/dragon_sprites.zip" standalone_path: "dragon_sprites.zip" required: false category: bios_zip @@ -18314,6 +18995,7 @@ files: sha1: "f1288653a12ba9a17ef721d0f4867160c3ca341f" - name: ds1001.zip + path: "mame/bios/ds1001.zip" standalone_path: "ds1001.zip" required: false category: bios_zip @@ -18328,6 +19010,7 @@ files: sha1: "7adf1d77bab12c50ebfa9921774f9aea1e74dd7b" - name: dsd4432.zip + path: "mame/bios/dsd4432.zip" standalone_path: "dsd4432.zip" required: false category: bios_zip @@ -18361,6 +19044,7 @@ files: sha1: "12c90cd62d2287ee5018801e4ceb1042051b6783" - name: dsd5217.zip + path: "mame/bios/dsd5217.zip" standalone_path: "dsd5217.zip" required: false category: bios_zip @@ -18400,6 +19084,7 @@ files: sha1: "5fe589a79806451abcbfbcff28eca39e925df264" - name: dsp56303.zip + path: "mame/bios/dsp56303.zip" standalone_path: "dsp56303.zip" required: false category: bios_zip @@ -18414,6 +19099,7 @@ files: sha1: "a1728cfaf31919f619a6c4d579f198c5a4bb9e44" - name: dsp56311.zip + path: "mame/bios/dsp56311.zip" standalone_path: "dsp56311.zip" required: false category: bios_zip @@ -18428,6 +19114,7 @@ files: sha1: "09a704dfb8be9e5863cb0523994ce5b4fb225801" - name: dsp56362.zip + path: "mame/bios/dsp56362.zip" standalone_path: "dsp56362.zip" required: false category: bios_zip @@ -18444,6 +19131,7 @@ files: sha1: "c18cbc0fb01ad423f99eb6421a36f3915e37e843" - name: duodock.zip + path: "mame/bios/duodock.zip" standalone_path: "duodock.zip" required: false category: bios_zip @@ -18458,6 +19146,7 @@ files: sha1: "be190b869b32f33bb1e59c7ae733853cd8133a4d" - name: dvk_kmd.zip + path: "mame/bios/dvk_kmd.zip" standalone_path: "dvk_kmd.zip" required: false category: bios_zip @@ -18481,6 +19170,7 @@ files: sha1: "6bc020054934a5562e763a18f915b8d612ccc70c" - name: dw_kbd.zip + path: "mame/bios/dw_kbd.zip" standalone_path: "dw_kbd.zip" required: false category: bios_zip @@ -18496,6 +19186,7 @@ files: sha1: "3183d93e34707f4b24f4f71db658c3cf317a631a" - name: ec1841_0002.zip + path: "mame/bios/ec1841_0002.zip" standalone_path: "ec1841_0002.zip" required: false category: bios_zip @@ -18513,6 +19204,7 @@ files: sha1: "c2a8b10808bf51a3c123ba3eb1e9dd608231916f" - name: ecb_grip21.zip + path: "mame/bios/ecb_grip21.zip" standalone_path: "ecb_grip21.zip" required: false category: bios_zip @@ -18528,6 +19220,7 @@ files: sha1: "2e89f0b0c378257ff7e41c50d57d90865c6e214b" - name: econet_e01.zip + path: "mame/bios/econet_e01.zip" standalone_path: "econet_e01.zip" required: false category: bios_zip @@ -18550,6 +19243,7 @@ files: sha1: "6f44a1a48108c60a64a1774cb30c1a59c4a6a199" - name: econet_e01s.zip + path: "mame/bios/econet_e01s.zip" standalone_path: "econet_e01s.zip" required: false category: bios_zip @@ -18572,6 +19266,7 @@ files: sha1: "9b8740face15b5541e2375b3054988af00757931" - name: ef9340_1.zip + path: "mame/bios/ef9340_1.zip" standalone_path: "ef9340_1.zip" required: false category: bios_zip @@ -18588,6 +19283,7 @@ files: bad_dump: true - name: ef9365.zip + path: "mame/bios/ef9365.zip" standalone_path: "ef9365.zip" required: false category: bios_zip @@ -18605,6 +19301,7 @@ files: sha1: "0f9a64d217a0f7f04ee0720d49c5b680ad0ae359" - name: ega.zip + path: "mame/bios/ega.zip" standalone_path: "ega.zip" required: false category: bios_zip @@ -18634,6 +19331,7 @@ files: sha1: "fd6dac76d43ab8b582e70f1d5cc931d679036fb9" - name: eidemax.zip + path: "mame/bios/eidemax.zip" standalone_path: "eidemax.zip" required: false category: bios_zip @@ -18670,6 +19368,7 @@ files: sha1: "e105f258f68ffe62acf2544f2f474850ce07a0a3" - name: einstein_sd.zip + path: "mame/bios/einstein_sd.zip" standalone_path: "einstein_sd.zip" required: false category: bios_zip @@ -18685,6 +19384,7 @@ files: sha1: "d0bc01e533d8963c596154435c5b2d156a96d470" - name: einstein_speech.zip + path: "mame/bios/einstein_speech.zip" standalone_path: "einstein_speech.zip" required: false category: bios_zip @@ -18700,6 +19400,7 @@ files: sha1: "e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc" - name: eispc_kb.zip + path: "mame/bios/eispc_kb.zip" standalone_path: "eispc_kb.zip" required: false category: bios_zip @@ -18715,6 +19416,7 @@ files: sha1: "a939dd50622575c31fea9c7adb7a7db5403a7aca" - name: electron_ap1.zip + path: "mame/bios/electron_ap1.zip" standalone_path: "electron_ap1.zip" required: false category: bios_zip @@ -18741,6 +19443,7 @@ files: sha1: "f1053109ea236dd3e4b91ec64859480e8c2ed549" - name: electron_ap6.zip + path: "mame/bios/electron_ap6.zip" standalone_path: "electron_ap6.zip" required: false category: bios_zip @@ -18762,6 +19465,7 @@ files: sha1: "316a25aeeda0266dae510eea52324b087875740f" - name: electron_elksd128.zip + path: "mame/bios/electron_elksd128.zip" standalone_path: "electron_elksd128.zip" required: false category: bios_zip @@ -18777,6 +19481,7 @@ files: sha1: "d552149fec6a1deec2b75c740092bd311d67046f" - name: electron_elksd64.zip + path: "mame/bios/electron_elksd64.zip" standalone_path: "electron_elksd64.zip" required: false category: bios_zip @@ -18796,6 +19501,7 @@ files: sha1: "316a25aeeda0266dae510eea52324b087875740f" - name: electron_m2105.zip + path: "mame/bios/electron_m2105.zip" standalone_path: "electron_m2105.zip" required: false category: bios_zip @@ -18871,6 +19577,7 @@ files: sha1: "b369809275cb67dfd8a749265e91adb2d2558ae6" - name: electron_mc68k.zip + path: "mame/bios/electron_mc68k.zip" standalone_path: "electron_mc68k.zip" required: false category: bios_zip @@ -18898,6 +19605,7 @@ files: sha1: "90afb5910995511ae943ad62ea2967eff85e8ef7" - name: electron_mode7.zip + path: "mame/bios/electron_mode7.zip" standalone_path: "electron_mode7.zip" required: false category: bios_zip @@ -18919,6 +19627,7 @@ files: sha1: "3689a6ca8693fa9a6e53a02cf34d613303cb34d7" - name: electron_pwrjoy.zip + path: "mame/bios/electron_pwrjoy.zip" standalone_path: "electron_pwrjoy.zip" required: false category: bios_zip @@ -18934,6 +19643,7 @@ files: sha1: "6d3aa85a436db952906e84839496e681ea115168" - name: electron_romboxp.zip + path: "mame/bios/electron_romboxp.zip" standalone_path: "electron_romboxp.zip" required: false category: bios_zip @@ -18974,6 +19684,7 @@ files: sha1: "eb8609991a9a8fb017b8100bfca4248d65faeea8" - name: electron_sidewndr.zip + path: "mame/bios/electron_sidewndr.zip" standalone_path: "electron_sidewndr.zip" required: false category: bios_zip @@ -18989,6 +19700,7 @@ files: sha1: "771664dbf23bb14febeb414a0272762cd6091ead" - name: electron_voxbox.zip + path: "mame/bios/electron_voxbox.zip" standalone_path: "electron_voxbox.zip" required: false category: bios_zip @@ -19004,6 +19716,7 @@ files: sha1: "e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc" - name: enetlc.zip + path: "mame/bios/enetlc.zip" standalone_path: "enetlc.zip" required: false category: bios_zip @@ -19027,6 +19740,7 @@ files: sha1: "ba4fd87765104701d5e6bf7962ed3a453e3c5711" - name: enetlctp.zip + path: "mame/bios/enetlctp.zip" standalone_path: "enetlctp.zip" required: false category: bios_zip @@ -19044,6 +19758,7 @@ files: sha1: "447ce6830600f47f63fdc21dd132539decb76001" - name: enetnbtp.zip + path: "mame/bios/enetnbtp.zip" standalone_path: "enetnbtp.zip" required: false category: bios_zip @@ -19061,6 +19776,7 @@ files: sha1: "dd14bf4328d9c1ea1d2e1d441da0233e6669e919" - name: enh2000.zip + path: "mame/bios/enh2000.zip" standalone_path: "enh2000.zip" required: false category: bios_zip @@ -19076,6 +19792,7 @@ files: sha1: "473dd2e06037799e6f562c443165d9b2b9f4a368" - name: enp10.zip + path: "mame/bios/enp10.zip" standalone_path: "enp10.zip" required: false category: bios_zip @@ -19130,6 +19847,7 @@ files: sha1: "b4d6bba88dd376cc492738d57742628f42e9265e" - name: epson_fx80.zip + path: "mame/bios/epson_fx80.zip" standalone_path: "epson_fx80.zip" required: false category: bios_zip @@ -19167,6 +19885,7 @@ files: sha1: "d5074f60497cc75d40996e6cef63231d3a3697f1" - name: epson_jx80.zip + path: "mame/bios/epson_jx80.zip" standalone_path: "epson_jx80.zip" required: false category: bios_zip @@ -19204,6 +19923,7 @@ files: sha1: "d5074f60497cc75d40996e6cef63231d3a3697f1" - name: epson_pf10.zip + path: "mame/bios/epson_pf10.zip" standalone_path: "epson_pf10.zip" required: false category: bios_zip @@ -19219,6 +19939,7 @@ files: sha1: "bb176e4baf938fe58c2d32f7c46d7bb7b0627755" - name: epson_qx_option_multifont.zip + path: "mame/bios/epson_qx_option_multifont.zip" standalone_path: "epson_qx_option_multifont.zip" required: false category: bios_zip @@ -19258,6 +19979,7 @@ files: sha1: "19246af07d6728ccd74a021265df827ecc6fe2b5" - name: epson_rx80.zip + path: "mame/bios/epson_rx80.zip" standalone_path: "epson_rx80.zip" required: false category: bios_zip @@ -19291,6 +20013,7 @@ files: sha1: "3e304f5331181aedb321d3db23a9387e3cfacf0c" - name: epson_tf20.zip + path: "mame/bios/epson_tf20.zip" standalone_path: "epson_tf20.zip" required: false category: bios_zip @@ -19306,6 +20029,7 @@ files: sha1: "c9bdf393f757ba5d8f838108ceb2b079be1d616e" - name: ergoline_kbd.zip + path: "mame/bios/ergoline_kbd.zip" standalone_path: "ergoline_kbd.zip" required: false category: bios_zip @@ -19320,6 +20044,7 @@ files: sha1: "8a2e1a894fda3e92fd760b8523121ba171281206" - name: esq2x40_vfx.zip + path: "mame/bios/esq2x40_vfx.zip" standalone_path: "esq2x40_vfx.zip" required: false category: bios_zip @@ -19335,6 +20060,7 @@ files: sha1: "097fc3e1930a49ab61f73ea7a6191c892004f823" - name: et4000.zip + path: "mame/bios/et4000.zip" standalone_path: "et4000.zip" required: false category: bios_zip @@ -19359,6 +20085,7 @@ files: sha1: "8644b4178cd0e841139bfa06c9da493dd74d22e8" - name: et4000_kasan16.zip + path: "mame/bios/et4000_kasan16.zip" standalone_path: "et4000_kasan16.zip" required: false category: bios_zip @@ -19382,6 +20109,7 @@ files: sha1: "1358feb2ccaca040a176bedc7c256ec481351b41" - name: et4kw32i.zip + path: "mame/bios/et4kw32i.zip" standalone_path: "et4kw32i.zip" required: false category: bios_zip @@ -19401,6 +20129,7 @@ files: sha1: "d5aee7205af8bd1fef0ecf1db2c07308a2b10b17" - name: et532_board.zip + path: "mame/bios/et532_board.zip" standalone_path: "et532_board.zip" required: false category: bios_zip @@ -19415,6 +20144,7 @@ files: sha1: "c8f3651768efe8282ceb914a99c2355735be8976" - name: ethudock.zip + path: "mame/bios/ethudock.zip" standalone_path: "ethudock.zip" required: false category: bios_zip @@ -19430,6 +20160,7 @@ files: sha1: "85474adc62de1bdca6ce7bf694a0158d467113cc" - name: europc_kbd.zip + path: "mame/bios/europc_kbd.zip" standalone_path: "europc_kbd.zip" required: false category: bios_zip @@ -19444,6 +20175,7 @@ files: sha1: "ddb7060abddee7294723833c303090de35c1e79c" - name: ev346.zip + path: "mame/bios/ev346.zip" standalone_path: "ev346.zip" required: false category: bios_zip @@ -19462,6 +20194,7 @@ files: sha1: "ef31b62f5ac38db7cacfc4d30e203a4cc1414913" - name: everdrive_md.zip + path: "mame/bios/everdrive_md.zip" standalone_path: "everdrive_md.zip" required: false category: bios_zip @@ -19477,6 +20210,7 @@ files: sha1: "fe71de7dd1f2117409b158ccd45c68b1d6781a9c" - name: ex1280.zip + path: "mame/bios/ex1280.zip" standalone_path: "ex1280.zip" required: false category: bios_zip @@ -19498,6 +20232,7 @@ files: sha1: "88c19cf36cb98e59810dad2a2f1f0e6c884cd7eb" - name: ex800.zip + path: "mame/bios/ex800.zip" standalone_path: "ex800.zip" required: false category: bios_zip @@ -19531,6 +20266,7 @@ files: sha1: "8e30ead727b9317154742efd881206e9f9bbf95b" - name: executive10_102_kbd.zip + path: "mame/bios/executive10_102_kbd.zip" standalone_path: "executive10_102_kbd.zip" required: false category: bios_zip @@ -19546,6 +20282,7 @@ files: sha1: "2701ab4eaaf89270575ecff841f813db1907a434" - name: exorterm155_device.zip + path: "mame/bios/exorterm155_device.zip" standalone_path: "exorterm155_device.zip" required: false category: bios_zip @@ -19581,6 +20318,7 @@ files: bad_dump: true - name: exos201.zip + path: "mame/bios/exos201.zip" standalone_path: "exos201.zip" required: false category: bios_zip @@ -19606,6 +20344,7 @@ files: sha1: "2eb6f6a5b2ebbd3489721ef632f3fbf162044cf4" - name: f4431_kbd.zip + path: "mame/bios/f4431_kbd.zip" standalone_path: "f4431_kbd.zip" required: false category: bios_zip @@ -19621,6 +20360,7 @@ files: sha1: "91d0ef181fe05e9474871e26dc75c313cb67c337" - name: fc_disksys.zip + path: "mame/bios/fc_disksys.zip" standalone_path: "fc_disksys.zip" required: false category: bios_zip @@ -19642,6 +20382,7 @@ files: sha1: "af5af53f66982e749643fdf8b2acbb7d4d3ed229" - name: fd148.zip + path: "mame/bios/fd148.zip" standalone_path: "fd148.zip" required: false category: bios_zip @@ -19657,6 +20398,7 @@ files: sha1: "c11317cb9370e722950579a610a3effda313aeee" - name: fd2000.zip + path: "mame/bios/fd2000.zip" standalone_path: "fd2000.zip" required: false category: bios_zip @@ -19677,6 +20419,7 @@ files: sha1: "0c61ba58269baf2b8aadf3bbc4648c7a5a6d2128" - name: fd4000.zip + path: "mame/bios/fd4000.zip" standalone_path: "fd4000.zip" required: false category: bios_zip @@ -19697,6 +20440,7 @@ files: sha1: "d936d76fd8b50ce4c65f885703653d7c1bd7d3c9" - name: fdc344.zip + path: "mame/bios/fdc344.zip" standalone_path: "fdc344.zip" required: false category: bios_zip @@ -19714,6 +20458,7 @@ files: sha1: "b639d92435ecf2a6d4aefd3576a6955028f6bde7" - name: fdcmag.zip + path: "mame/bios/fdcmag.zip" standalone_path: "fdcmag.zip" required: false category: bios_zip @@ -19732,6 +20477,7 @@ files: sha1: "9c4443169a0b104395404274470e62b8b65efcf4" - name: fga4he.zip + path: "mame/bios/fga4he.zip" standalone_path: "fga4he.zip" required: false category: bios_zip @@ -19751,6 +20497,7 @@ files: sha1: "fe4bc168ad7ccb186a6f8158964e2116435c994b" - name: filetto_cga.zip + path: "mame/bios/filetto_cga.zip" standalone_path: "filetto_cga.zip" required: false category: bios_zip @@ -19766,6 +20513,7 @@ files: sha1: "de84bdd9245df287bbd3bb808f0c3531d13a3545" - name: freedom220_kbd.zip + path: "mame/bios/freedom220_kbd.zip" standalone_path: "freedom220_kbd.zip" required: false category: bios_zip @@ -19781,6 +20529,7 @@ files: sha1: "477eb9f3d3abc89cfc9b5f9a924a794ca48750c4" - name: fsd1.zip + path: "mame/bios/fsd1.zip" standalone_path: "fsd1.zip" required: false category: bios_zip @@ -19795,6 +20544,7 @@ files: sha1: "ab16f56989b27d89babe5f89c5a8cb3da71a82f0" - name: fsd2.zip + path: "mame/bios/fsd2.zip" standalone_path: "fsd2.zip" required: false category: bios_zip @@ -19825,6 +20575,7 @@ files: sha1: "f279d327d5e16ea1b62fb18514fb679d0b442941" - name: g80_1500.zip + path: "mame/bios/g80_1500.zip" standalone_path: "g80_1500.zip" required: false category: bios_zip @@ -19840,6 +20591,7 @@ files: sha1: "009fc939f86bf70d288523446e292095d9706ab2" - name: gamtor_vga.zip + path: "mame/bios/gamtor_vga.zip" standalone_path: "gamtor_vga.zip" required: false category: bios_zip @@ -19855,6 +20607,7 @@ files: bad_dump: true - name: geforce256.zip + path: "mame/bios/geforce256.zip" standalone_path: "geforce256.zip" required: false category: bios_zip @@ -19872,6 +20625,7 @@ files: bad_dump: true - name: geforce256ddr.zip + path: "mame/bios/geforce256ddr.zip" standalone_path: "geforce256ddr.zip" required: false category: bios_zip @@ -19888,6 +20642,7 @@ files: sha1: "aaac61e99193221280c5913cf3ca503e5b5ea408" - name: gfxultra.zip + path: "mame/bios/gfxultra.zip" standalone_path: "gfxultra.zip" required: false category: bios_zip @@ -19906,6 +20661,7 @@ files: sha1: "117cfc972ce4645538ba7262222d8ff38bc2c58c" - name: gfxultrap.zip + path: "mame/bios/gfxultrap.zip" standalone_path: "gfxultrap.zip" required: false category: bios_zip @@ -19930,6 +20686,7 @@ files: sha1: "61321dfecf1bcdd8043836fabbe41786dbf3001b" - name: gic.zip + path: "mame/bios/gic.zip" standalone_path: "gic.zip" required: false category: bios_zip @@ -19945,6 +20702,7 @@ files: bad_dump: true - name: gpib_hardbox.zip + path: "mame/bios/gpib_hardbox.zip" standalone_path: "gpib_hardbox.zip" required: false category: bios_zip @@ -19988,6 +20746,7 @@ files: sha1: "151f99dc554d3762b805fc8383cf1b3e1455784f" - name: gpib_mshark.zip + path: "mame/bios/gpib_mshark.zip" standalone_path: "gpib_mshark.zip" required: false category: bios_zip @@ -20025,6 +20784,7 @@ files: sha1: "3b384951ff54c4b45a3a778a88966d13e2c9d57a" - name: gpib_softbox.zip + path: "mame/bios/gpib_softbox.zip" standalone_path: "gpib_softbox.zip" required: false category: bios_zip @@ -20068,6 +20828,7 @@ files: sha1: "4b26d5db36f828e01268f718799f145d09b449ad" - name: gpl16250va.zip + path: "mame/bios/gpl16250va.zip" standalone_path: "gpl16250va.zip" required: false category: bios_zip @@ -20089,6 +20850,7 @@ files: sha1: "988e0befd33884b05aeccd6821e5cdd53f6a849f" - name: gpl951xx.zip + path: "mame/bios/gpl951xx.zip" standalone_path: "gpl951xx.zip" required: false category: bios_zip @@ -20104,6 +20866,7 @@ files: sha1: "01752267b404d1bd3a61efa928223eb9e147faa3" - name: gunsense.zip + path: "mame/bios/gunsense.zip" standalone_path: "gunsense.zip" required: false category: bios_zip @@ -20127,6 +20890,7 @@ files: sha1: "91813a43851c48d400fde41b1198dabf55bade2d" - name: h89bus_io_decoder_444_43.zip + path: "mame/bios/h89bus_io_decoder_444_43.zip" standalone_path: "h89bus_io_decoder_444_43.zip" required: false category: bios_zip @@ -20142,6 +20906,7 @@ files: sha1: "11da9a9145de07f1f3bf1270a10e059dff30c693" - name: h89bus_io_decoder_444_61.zip + path: "mame/bios/h89bus_io_decoder_444_61.zip" standalone_path: "h89bus_io_decoder_444_61.zip" required: false category: bios_zip @@ -20157,6 +20922,7 @@ files: sha1: "92da6484d1339160400d6bc75578a977c5e4d23e" - name: h89bus_io_decoder_cdr86.zip + path: "mame/bios/h89bus_io_decoder_cdr86.zip" standalone_path: "h89bus_io_decoder_cdr86.zip" required: false category: bios_zip @@ -20172,6 +20938,7 @@ files: sha1: "879f9d265d77f8a74c70febd9a80d6896ab8ec7e" - name: h89bus_io_decoder_mms_61c.zip + path: "mame/bios/h89bus_io_decoder_mms_61c.zip" standalone_path: "h89bus_io_decoder_mms_61c.zip" required: false category: bios_zip @@ -20187,6 +20954,7 @@ files: sha1: "33c124f44c0f9cb99c9b17ad15411b4bc6407eae" - name: h8_cpu_8080.zip + path: "mame/bios/h8_cpu_8080.zip" standalone_path: "h8_cpu_8080.zip" required: false category: bios_zip @@ -20218,6 +20986,7 @@ files: sha1: "965244277a3a8039a987e4c3593b52196e39b7e7" - name: h8_ha_8_6.zip + path: "mame/bios/h8_ha_8_6.zip" standalone_path: "h8_ha_8_6.zip" required: false category: bios_zip @@ -20239,6 +21008,7 @@ files: sha1: "90082d02ffb1d27e8172b11fff465bd24343486e" - name: hcpu30.zip + path: "mame/bios/hcpu30.zip" standalone_path: "hcpu30.zip" required: false category: bios_zip @@ -20254,6 +21024,7 @@ files: sha1: "5431b0559b168a995e725b35e1465a0b8ee8aa72" - name: hd44780.zip + path: "mame/bios/hd44780.zip" standalone_path: "hd44780.zip" required: false category: bios_zip @@ -20276,6 +21047,7 @@ files: bad_dump: true - name: hd44780u.zip + path: "mame/bios/hd44780u.zip" standalone_path: "hd44780u.zip" required: false category: bios_zip @@ -20299,6 +21071,7 @@ files: bad_dump: true - name: hd61830.zip + path: "mame/bios/hd61830.zip" standalone_path: "hd61830.zip" required: false category: bios_zip @@ -20315,6 +21088,7 @@ files: bad_dump: true - name: hdae5000.zip + path: "mame/bios/hdae5000.zip" standalone_path: "hdae5000.zip" required: false category: bios_zip @@ -20346,6 +21120,7 @@ files: sha1: "c4da28f0ad16b1288774af761b3729142e8050b3" - name: he191_3425.zip + path: "mame/bios/he191_3425.zip" standalone_path: "he191_3425.zip" required: false category: bios_zip @@ -20361,6 +21136,7 @@ files: sha1: "4369de412cef907a3734ba511abe902d2d1b6cbf" - name: heath_gp19_tlb.zip + path: "mame/bios/heath_gp19_tlb.zip" standalone_path: "heath_gp19_tlb.zip" required: false category: bios_zip @@ -20413,6 +21189,7 @@ files: sha1: "df49ce64ae48652346a91648c58178a34fb37d3c" - name: heath_igc_super19_tlb_device.zip + path: "mame/bios/heath_igc_super19_tlb_device.zip" standalone_path: "heath_igc_super19_tlb_device.zip" required: false category: bios_zip @@ -20436,6 +21213,7 @@ files: sha1: "df49ce64ae48652346a91648c58178a34fb37d3c" - name: heath_igc_tlb_device.zip + path: "mame/bios/heath_igc_tlb_device.zip" standalone_path: "heath_igc_tlb_device.zip" required: false category: bios_zip @@ -20458,6 +21236,7 @@ files: sha1: "df49ce64ae48652346a91648c58178a34fb37d3c" - name: heath_igc_ultra_tlb_device.zip + path: "mame/bios/heath_igc_ultra_tlb_device.zip" standalone_path: "heath_igc_ultra_tlb_device.zip" required: false category: bios_zip @@ -20481,6 +21260,7 @@ files: sha1: "ca39c602af48505139d2750a084b5f8f0e662ff7" - name: heath_igc_watz_tlb_device.zip + path: "mame/bios/heath_igc_watz_tlb_device.zip" standalone_path: "heath_igc_watz_tlb_device.zip" required: false category: bios_zip @@ -20510,6 +21290,7 @@ files: sha1: "1b23705290bdf9fc6342065c6a528c04bff67b13" - name: heath_imaginator_tlb.zip + path: "mame/bios/heath_imaginator_tlb.zip" standalone_path: "heath_imaginator_tlb.zip" required: false category: bios_zip @@ -20564,6 +21345,7 @@ files: sha1: "df49ce64ae48652346a91648c58178a34fb37d3c" - name: heath_super19_tlb.zip + path: "mame/bios/heath_super19_tlb.zip" standalone_path: "heath_super19_tlb.zip" required: false category: bios_zip @@ -20608,6 +21390,7 @@ files: sha1: "df49ce64ae48652346a91648c58178a34fb37d3c" - name: heath_superset_tlb.zip + path: "mame/bios/heath_superset_tlb.zip" standalone_path: "heath_superset_tlb.zip" required: false category: bios_zip @@ -20652,6 +21435,7 @@ files: sha1: "981962e5e05bbdc5a66b0e86870853ce5596e877" - name: heath_tlb.zip + path: "mame/bios/heath_tlb.zip" standalone_path: "heath_tlb.zip" required: false category: bios_zip @@ -20696,6 +21480,7 @@ files: sha1: "df49ce64ae48652346a91648c58178a34fb37d3c" - name: heath_ultra_tlb.zip + path: "mame/bios/heath_ultra_tlb.zip" standalone_path: "heath_ultra_tlb.zip" required: false category: bios_zip @@ -20740,6 +21525,7 @@ files: sha1: "ca39c602af48505139d2750a084b5f8f0e662ff7" - name: heath_watz_tlb.zip + path: "mame/bios/heath_watz_tlb.zip" standalone_path: "heath_watz_tlb.zip" required: false category: bios_zip @@ -20790,6 +21576,7 @@ files: sha1: "1b23705290bdf9fc6342065c6a528c04bff67b13" - name: hk68v10.zip + path: "mame/bios/hk68v10.zip" standalone_path: "hk68v10.zip" required: false category: bios_zip @@ -20808,6 +21595,7 @@ files: sha1: "e68699965645f0ce53de47625163c3eb02c8b727" - name: hp82900.zip + path: "mame/bios/hp82900.zip" standalone_path: "hp82900.zip" required: false category: bios_zip @@ -20822,6 +21610,7 @@ files: sha1: "fb4427f729eedba5ac01809718b841c7bdd85e1f" - name: hp82937.zip + path: "mame/bios/hp82937.zip" standalone_path: "hp82937.zip" required: false category: bios_zip @@ -20836,6 +21625,7 @@ files: sha1: "44dfc8c3f431cd37a270b094f1db751214009214" - name: hp82939.zip + path: "mame/bios/hp82939.zip" standalone_path: "hp82939.zip" required: false category: bios_zip @@ -20850,6 +21640,7 @@ files: sha1: "0f6a70eb8981a8a87c7514ce8226ff1af3ac1668" - name: hp9122c.zip + path: "mame/bios/hp9122c.zip" standalone_path: "hp9122c.zip" required: false category: bios_zip @@ -20869,6 +21660,7 @@ files: sha1: "93b2015037d76cc68b6252df03d6f184104605b9" - name: hp9133.zip + path: "mame/bios/hp9133.zip" standalone_path: "hp9133.zip" required: false category: bios_zip @@ -20892,6 +21684,7 @@ files: sha1: "61766b1f64473c17f01cbc97bd817f6076827d6a" - name: hp98034.zip + path: "mame/bios/hp98034.zip" standalone_path: "hp98034.zip" required: false category: bios_zip @@ -20906,6 +21699,7 @@ files: sha1: "3d7c1ace38c4d3178fdbf764c044535d9f6ac94f" - name: hp98035.zip + path: "mame/bios/hp98035.zip" standalone_path: "hp98035.zip" required: false category: bios_zip @@ -20920,6 +21714,7 @@ files: sha1: "34e89a37a2822f27af21969941201317dbff615b" - name: hp98046.zip + path: "mame/bios/hp98046.zip" standalone_path: "hp98046.zip" required: false category: bios_zip @@ -20934,6 +21729,7 @@ files: sha1: "d19c35b18fae52b841060ed879f860fd2cae3482" - name: hp9845_prt.zip + path: "mame/bios/hp9845_prt.zip" standalone_path: "hp9845_prt.zip" required: false category: bios_zip @@ -20949,6 +21745,7 @@ files: sha1: "1dfabd32f4bdef85f88a514bd1978b80b25a6e80" - name: hp9895.zip + path: "mame/bios/hp9895.zip" standalone_path: "hp9895.zip" required: false category: bios_zip @@ -20968,6 +21765,7 @@ files: sha1: "96edf9af78be75fbad2a0245b8af43958ba32752" - name: hpblp.zip + path: "mame/bios/hpblp.zip" standalone_path: "hpblp.zip" required: false category: bios_zip @@ -20990,6 +21788,7 @@ files: sha1: "9e13c0ef2aed6565c33795780b7102f2647cf2a0" - name: human_interface.zip + path: "mame/bios/human_interface.zip" standalone_path: "human_interface.zip" required: false category: bios_zip @@ -21008,6 +21807,7 @@ files: sha1: "90849a10bdb8c6e38e73ce027c9c0ad8b3956b1b" - name: i8244.zip + path: "mame/bios/i8244.zip" standalone_path: "i8244.zip" required: false category: bios_zip @@ -21022,6 +21822,7 @@ files: sha1: "415382715455b47b69401b3d60bd8f0036dd7fef" - name: i8245.zip + path: "mame/bios/i8245.zip" standalone_path: "i8245.zip" required: false category: bios_zip @@ -21036,6 +21837,7 @@ files: sha1: "415382715455b47b69401b3d60bd8f0036dd7fef" - name: ibm_mfc.zip + path: "mame/bios/ibm_mfc.zip" standalone_path: "ibm_mfc.zip" required: false category: bios_zip @@ -21054,6 +21856,7 @@ files: sha1: "e7edf28d20e6c146e3144526c89cd6beea64663b" - name: ibm_vga.zip + path: "mame/bios/ibm_vga.zip" standalone_path: "ibm_vga.zip" required: false category: bios_zip @@ -21073,6 +21876,7 @@ files: bad_dump: true - name: ibsap2.zip + path: "mame/bios/ibsap2.zip" standalone_path: "ibsap2.zip" required: false category: bios_zip @@ -21090,6 +21894,7 @@ files: sha1: "f40e7e50521636b441f86794bd19b77ecf9a67b4" - name: idpart_video.zip + path: "mame/bios/idpart_video.zip" standalone_path: "idpart_video.zip" required: false category: bios_zip @@ -21109,6 +21914,7 @@ files: sha1: "c6067e3fdda84e673aaa74ae6561b535157a8281" - name: ie15_device.zip + path: "mame/bios/ie15_device.zip" standalone_path: "ie15_device.zip" required: false category: bios_zip @@ -21154,6 +21960,7 @@ files: sha1: "6af9fb75f5375943d5c0ce9ed408e0fb4621b17e" - name: ie15kbd.zip + path: "mame/bios/ie15kbd.zip" standalone_path: "ie15kbd.zip" required: false category: bios_zip @@ -21190,6 +21997,7 @@ files: sha1: "0ee46f5be1b01fa917a6d483bb51463106ae441f" - name: imds2ioc.zip + path: "mame/bios/imds2ioc.zip" standalone_path: "imds2ioc.zip" required: false category: bios_zip @@ -21273,6 +22081,7 @@ files: sha1: "0ed98f9f06622949ee3cc2ffc572fb9702db0f81" - name: imi5000h.zip + path: "mame/bios/imi5000h.zip" standalone_path: "imi5000h.zip" required: false category: bios_zip @@ -21303,6 +22112,7 @@ files: sha1: "646c5a3e951535a80d24d9ce8764a3f373c508db" - name: in207100kbd.zip + path: "mame/bios/in207100kbd.zip" standalone_path: "in207100kbd.zip" required: false category: bios_zip @@ -21318,6 +22128,7 @@ files: sha1: "f3e5e7d9138abede70e97026f4b2e52e0df6ea31" - name: in213kbd.zip + path: "mame/bios/in213kbd.zip" standalone_path: "in213kbd.zip" required: false category: bios_zip @@ -21333,6 +22144,7 @@ files: sha1: "0fea01984959c8d8b7884ffca40bef402c9b99b8" - name: indusgt.zip + path: "mame/bios/indusgt.zip" standalone_path: "indusgt.zip" required: false category: bios_zip @@ -21356,6 +22168,7 @@ files: sha1: "5bceaad520dac9d0527723b3b454e8ec99748e5b" - name: intv_ecs.zip + path: "mame/bios/intv_ecs.zip" standalone_path: "intv_ecs.zip" required: false category: bios_zip @@ -21379,6 +22192,7 @@ files: sha1: "b3c14955f56c57e6f0d8fbb695771946cfcf6582" - name: intv_voice.zip + path: "mame/bios/intv_voice.zip" standalone_path: "intv_voice.zip" required: false category: bios_zip @@ -21394,6 +22208,7 @@ files: sha1: "618563e512ff5665183664f52270fa9606c9d289" - name: iq151_disc2.zip + path: "mame/bios/iq151_disc2.zip" standalone_path: "iq151_disc2.zip" required: false category: bios_zip @@ -21408,6 +22223,7 @@ files: sha1: "3e2ca80934177e7a32d0905f5a0ad14072f9dabf" - name: iq151_minigraf.zip + path: "mame/bios/iq151_minigraf.zip" standalone_path: "iq151_minigraf.zip" required: false category: bios_zip @@ -21426,6 +22242,7 @@ files: sha1: "475d294e4976f88ad13e77a39b1c607827c791dc" - name: iq151_ms15a.zip + path: "mame/bios/iq151_ms15a.zip" standalone_path: "iq151_ms15a.zip" required: false category: bios_zip @@ -21441,6 +22258,7 @@ files: sha1: "ebdc4278cfe6d3cc7dafbaa05bc6c239e4e6c09b" - name: iq151_video32.zip + path: "mame/bios/iq151_video32.zip" standalone_path: "iq151_video32.zip" required: false category: bios_zip @@ -21455,6 +22273,7 @@ files: sha1: "18800543daf4daed3f048193c6ae923b4b0e87db" - name: iq151_video64.zip + path: "mame/bios/iq151_video64.zip" standalone_path: "iq151_video64.zip" required: false category: bios_zip @@ -21469,6 +22288,7 @@ files: sha1: "4b2c1d41838d569228f61568c1a16a8d68b3dadf" - name: iris_kbd.zip + path: "mame/bios/iris_kbd.zip" standalone_path: "iris_kbd.zip" required: false category: bios_zip @@ -21484,6 +22304,7 @@ files: sha1: "ed59ef7ad493b686f8f2f764549772b75bbd0735" - name: isa_aga.zip + path: "mame/bios/isa_aga.zip" standalone_path: "isa_aga.zip" required: false category: bios_zip @@ -21501,6 +22322,7 @@ files: sha1: "aca488a16ae4ff05a1f4d14574379ff49cd48343" - name: isa_aga_pc200.zip + path: "mame/bios/isa_aga_pc200.zip" standalone_path: "isa_aga_pc200.zip" required: false category: bios_zip @@ -21518,6 +22340,7 @@ files: sha1: "99663bfb61798526e092205575370c2ad34249a1" - name: isa_epc_mda.zip + path: "mame/bios/isa_epc_mda.zip" standalone_path: "isa_epc_mda.zip" required: false category: bios_zip @@ -21536,6 +22359,7 @@ files: sha1: "38ab26224bbe66bbe2bb2ccac29b41cbf78bdbf8" - name: isa_finalchs.zip + path: "mame/bios/isa_finalchs.zip" standalone_path: "isa_finalchs.zip" required: false category: bios_zip @@ -21560,6 +22384,7 @@ files: sha1: "f422b19a806cef4fadd580caefaaf8c32b644098" - name: isa_hdc.zip + path: "mame/bios/isa_hdc.zip" standalone_path: "isa_hdc.zip" required: false category: bios_zip @@ -21578,6 +22403,7 @@ files: sha1: "601d7ceab282394ebab50763c267e915a6a2166a" - name: isa_hercules.zip + path: "mame/bios/isa_hercules.zip" standalone_path: "isa_hercules.zip" required: false category: bios_zip @@ -21602,6 +22428,7 @@ files: sha1: "3279dfeed4a0f5daa7b57d455c96eafdcbb6bf41" - name: isa_ibm_mda.zip + path: "mame/bios/isa_ibm_mda.zip" standalone_path: "isa_ibm_mda.zip" required: false category: bios_zip @@ -21620,6 +22447,7 @@ files: sha1: "c2a8b10808bf51a3c123ba3eb1e9dd608231916f" - name: isa_ibm_pgc.zip + path: "mame/bios/isa_ibm_pgc.zip" standalone_path: "isa_ibm_pgc.zip" required: false category: bios_zip @@ -21658,6 +22486,7 @@ files: sha1: "deb1195886268dcddce10459911e020f7a9f74f7" - name: isa_ibm_speech.zip + path: "mame/bios/isa_ibm_speech.zip" standalone_path: "isa_ibm_speech.zip" required: false category: bios_zip @@ -21676,6 +22505,7 @@ files: sha1: "0cb41d490db2ed59989d2eae14a002ad0382e7ad" - name: isa_pcmidi.zip + path: "mame/bios/isa_pcmidi.zip" standalone_path: "isa_pcmidi.zip" required: false category: bios_zip @@ -21694,6 +22524,7 @@ files: sha1: "9446c4939de557f839a74ca6fe7f41df46752e25" - name: isa_prose4001.zip + path: "mame/bios/isa_prose4001.zip" standalone_path: "isa_prose4001.zip" required: false category: bios_zip @@ -21720,6 +22551,7 @@ files: sha1: "5c8709c82dadaea7012859c20141ef8f59d5e473" - name: isbc202.zip + path: "mame/bios/isbc202.zip" standalone_path: "isbc202.zip" required: false category: bios_zip @@ -21747,6 +22579,7 @@ files: sha1: "fc3b7f9c3e71ea1442827c51247a9944c6d40b37" - name: isbc8024.zip + path: "mame/bios/isbc8024.zip" standalone_path: "isbc8024.zip" required: false category: bios_zip @@ -21768,6 +22601,7 @@ files: sha1: "565ab4740d3151eb4d8ef9ff3e02570cf7804be1" - name: isbc_215g.zip + path: "mame/bios/isbc_215g.zip" standalone_path: "isbc_215g.zip" required: false category: bios_zip @@ -21787,6 +22621,7 @@ files: sha1: "295dd4e75f699aaf93227cc4876cee8accae383a" - name: ivelultrkb.zip + path: "mame/bios/ivelultrkb.zip" standalone_path: "ivelultrkb.zip" required: false category: bios_zip @@ -21802,6 +22637,7 @@ files: sha1: "676b6e775d5159049cae5b6143398ec7b2bf437a" - name: jaleco_vj_pc.zip + path: "mame/bios/jaleco_vj_pc.zip" standalone_path: "jaleco_vj_pc.zip" required: false category: bios_zip @@ -21818,6 +22654,7 @@ files: bad_dump: true - name: jc1310.zip + path: "mame/bios/jc1310.zip" standalone_path: "jc1310.zip" required: false category: bios_zip @@ -21836,6 +22673,7 @@ files: sha1: "5a32d2001bb1a489657f9488136b5d621f803703" - name: jvs13551.zip + path: "mame/bios/jvs13551.zip" standalone_path: "jvs13551.zip" required: false category: bios_zip @@ -21872,6 +22710,7 @@ files: sha1: "8c4dc85438298e31e25f69542804a78ff0e20962" - name: k573_dio.zip + path: "mame/bios/k573_dio.zip" standalone_path: "k573_dio.zip" required: false category: bios_zip @@ -21887,6 +22726,7 @@ files: sha1: "2b108a56653f91cb3351718c45dfcf979bc35ef1" - name: k573kara.zip + path: "mame/bios/k573kara.zip" standalone_path: "k573kara.zip" required: false category: bios_zip @@ -21902,6 +22742,7 @@ files: sha1: "2b108a56653f91cb3351718c45dfcf979bc35ef1" - name: k573mcr.zip + path: "mame/bios/k573mcr.zip" standalone_path: "k573mcr.zip" required: false category: bios_zip @@ -21917,6 +22758,7 @@ files: sha1: "927f62f63b5caa7899392decacd12fea0e6fdbea" - name: k573msu.zip + path: "mame/bios/k573msu.zip" standalone_path: "k573msu.zip" required: false category: bios_zip @@ -21936,6 +22778,7 @@ files: sha1: "71b87c8b25b9613b4d4511c53d0a3a3aacf1499d" - name: k7659_keyboard.zip + path: "mame/bios/k7659_keyboard.zip" standalone_path: "k7659_keyboard.zip" required: false category: bios_zip @@ -21950,6 +22793,7 @@ files: sha1: "b97e7df93778fa371b96b6f4fb1a5b1c8b89d7ba" - name: kaypro10kbd.zip + path: "mame/bios/kaypro10kbd.zip" standalone_path: "kaypro10kbd.zip" required: false category: bios_zip @@ -21964,6 +22808,7 @@ files: sha1: "aa7cd3f476466203294675d56098dff45952b9b0" - name: kayproiikbd.zip + path: "mame/bios/kayproiikbd.zip" standalone_path: "kayproiikbd.zip" required: false category: bios_zip @@ -21978,6 +22823,7 @@ files: sha1: "7919385fe8badbb610b793a3f5e4077982094aaa" - name: kb_3270pc.zip + path: "mame/bios/kb_3270pc.zip" standalone_path: "kb_3270pc.zip" required: false category: bios_zip @@ -21993,6 +22839,7 @@ files: sha1: "a3701e4617383a4de0fd5e2e86c4b74beaf94a7b" - name: kb_ec1841.zip + path: "mame/bios/kb_ec1841.zip" standalone_path: "kb_ec1841.zip" required: false category: bios_zip @@ -22007,6 +22854,7 @@ files: sha1: "1db430c72c2d007ea0b8ae2514ff15c96baba308" - name: kb_iskr1030.zip + path: "mame/bios/kb_iskr1030.zip" standalone_path: "kb_iskr1030.zip" required: false category: bios_zip @@ -22022,6 +22870,7 @@ files: sha1: "03959d3350e012ebfe61cee9c062b6c1fdd8766e" - name: kb_ms_natural.zip + path: "mame/bios/kb_ms_natural.zip" standalone_path: "kb_ms_natural.zip" required: false category: bios_zip @@ -22037,6 +22886,7 @@ files: sha1: "72134882a5c03e785db07cc54dfb7572c0a730d9" - name: kb_pcat101.zip + path: "mame/bios/kb_pcat101.zip" standalone_path: "kb_pcat101.zip" required: false category: bios_zip @@ -22052,6 +22902,7 @@ files: sha1: "ac739dc0408ea0b3be60f85b7a2eb822753a054c" - name: kb_pcat84.zip + path: "mame/bios/kb_pcat84.zip" standalone_path: "kb_pcat84.zip" required: false category: bios_zip @@ -22066,6 +22917,7 @@ files: sha1: "5f722bdb3b57f5a532c02a5c3f78f30d785796f2" - name: kb_pcxt83.zip + path: "mame/bios/kb_pcxt83.zip" standalone_path: "kb_pcxt83.zip" required: false category: bios_zip @@ -22080,6 +22932,7 @@ files: sha1: "4f5b2a075c68f6493310ec1e2a24271ceea330df" - name: kbd_lle_en_us.zip + path: "mame/bios/kbd_lle_en_us.zip" standalone_path: "kbd_lle_en_us.zip" required: false category: bios_zip @@ -22099,6 +22952,7 @@ files: sha1: "4de550ff1eec7996c7f26e92c5d268aa24024a7f" - name: kc_d004.zip + path: "mame/bios/kc_d004.zip" standalone_path: "kc_d004.zip" required: false category: bios_zip @@ -22114,6 +22968,7 @@ files: sha1: "66f476de78fb474d9ac61c6eaffce3354fd66776" - name: kc_d004_gide.zip + path: "mame/bios/kc_d004_gide.zip" standalone_path: "kc_d004_gide.zip" required: false category: bios_zip @@ -22150,6 +23005,7 @@ files: sha1: "8232adb5e5f0b25b52f9873cff14831da3a0398a" - name: keytronic_l2207.zip + path: "mame/bios/keytronic_l2207.zip" standalone_path: "keytronic_l2207.zip" required: false category: bios_zip @@ -22171,6 +23027,7 @@ files: sha1: "a1c9c505eb3ccf132307b2ac0e04b0326f50621e" - name: keytronic_pc3270.zip + path: "mame/bios/keytronic_pc3270.zip" standalone_path: "keytronic_pc3270.zip" required: false category: bios_zip @@ -22185,6 +23042,7 @@ files: sha1: "b75b6d4509036406052157bc34159f7039cdc72e" - name: keytronic_pc3270_at.zip + path: "mame/bios/keytronic_pc3270_at.zip" standalone_path: "keytronic_pc3270_at.zip" required: false category: bios_zip @@ -22199,6 +23057,7 @@ files: sha1: "b75b6d4509036406052157bc34159f7039cdc72e" - name: km035.zip + path: "mame/bios/km035.zip" standalone_path: "km035.zip" required: false category: bios_zip @@ -22213,6 +23072,7 @@ files: sha1: "cfbf54f7e831b3fc0b8502a5eeb03b8618bb32b0" - name: ks0066.zip + path: "mame/bios/ks0066.zip" standalone_path: "ks0066.zip" required: false category: bios_zip @@ -22235,6 +23095,7 @@ files: bad_dump: true - name: labtam_3232.zip + path: "mame/bios/labtam_3232.zip" standalone_path: "labtam_3232.zip" required: false category: bios_zip @@ -22285,6 +23146,7 @@ files: sha1: "032df47e1ba34653b5837f68eefa3ecaac17a483" - name: labtam_8086cpu.zip + path: "mame/bios/labtam_8086cpu.zip" standalone_path: "labtam_8086cpu.zip" required: false category: bios_zip @@ -22305,6 +23167,7 @@ files: sha1: "c575d5d53f2fe99569af002c636754dedca09e3b" - name: labtam_vducom.zip + path: "mame/bios/labtam_vducom.zip" standalone_path: "labtam_vducom.zip" required: false category: bios_zip @@ -22356,6 +23219,7 @@ files: sha1: "61503b5109183a5814be3fcaa393fde8f5bd5359" - name: labtam_z80sbc.zip + path: "mame/bios/labtam_z80sbc.zip" standalone_path: "labtam_z80sbc.zip" required: false category: bios_zip @@ -22386,6 +23250,7 @@ files: sha1: "5bd6f3dd1c1f6f3e07706293bfc46a9bfc43d1f2" - name: lba_enhancer.zip + path: "mame/bios/lba_enhancer.zip" standalone_path: "lba_enhancer.zip" required: false category: bios_zip @@ -22404,6 +23269,7 @@ files: sha1: "d275193a870250f212dc29768d4e68fb43770e95" - name: lc7985.zip + path: "mame/bios/lc7985.zip" standalone_path: "lc7985.zip" required: false category: bios_zip @@ -22420,6 +23286,7 @@ files: bad_dump: true - name: ldv1000.zip + path: "mame/bios/ldv1000.zip" standalone_path: "ldv1000.zip" required: false category: bios_zip @@ -22434,6 +23301,7 @@ files: sha1: "52f91c304a878ba02b2fa1cda1a9489d6dd5a34f" - name: lha201.zip + path: "mame/bios/lha201.zip" standalone_path: "lha201.zip" required: false category: bios_zip @@ -22449,6 +23317,7 @@ files: sha1: "4316fd50ce03d1b8f522327c8caa79edc88ac55a" - name: lisa2fdc.zip + path: "mame/bios/lisa2fdc.zip" standalone_path: "lisa2fdc.zip" required: false category: bios_zip @@ -22468,6 +23337,7 @@ files: sha1: "f3164923330a51366a06d9d8a4a01ec7b0d3a8aa" - name: lisafdc.zip + path: "mame/bios/lisafdc.zip" standalone_path: "lisafdc.zip" required: false category: bios_zip @@ -22487,6 +23357,7 @@ files: sha1: "872211d21386cd9625b3735d7682e2b2ecff05b4" - name: lisavideo.zip + path: "mame/bios/lisavideo.zip" standalone_path: "lisavideo.zip" required: false category: bios_zip @@ -22501,6 +23372,7 @@ files: sha1: "3b0023bd90f2ca1be0b099160a566b044856885d" - name: lk201.zip + path: "mame/bios/lk201.zip" standalone_path: "lk201.zip" required: false category: bios_zip @@ -22519,6 +23391,7 @@ files: sha1: "9744c561d76fe85afaccc7a2485ce2865236873a" - name: lm24014h.zip + path: "mame/bios/lm24014h.zip" standalone_path: "lm24014h.zip" required: false category: bios_zip @@ -22534,6 +23407,7 @@ files: sha1: "4680d3ae99102369b4145604ee7c25fa83760784" - name: lrk331.zip + path: "mame/bios/lrk331.zip" standalone_path: "lrk331.zip" required: false category: bios_zip @@ -22556,6 +23430,7 @@ files: sha1: "1a33462a29b306b01960cf2ac0b209b2adf58dbe" - name: luna_68k_cmc.zip + path: "mame/bios/luna_68k_cmc.zip" standalone_path: "luna_68k_cmc.zip" required: false category: bios_zip @@ -22571,6 +23446,7 @@ files: sha1: "22290850761ed3dddb2369e062012679e2963fa3" - name: luna_68k_gpu.zip + path: "mame/bios/luna_68k_gpu.zip" standalone_path: "luna_68k_gpu.zip" required: false category: bios_zip @@ -22590,6 +23466,7 @@ files: sha1: "4a87417d9bf801e797bf504d18a6c6b5d3911706" - name: luna_68k_ioc.zip + path: "mame/bios/luna_68k_ioc.zip" standalone_path: "luna_68k_ioc.zip" required: false category: bios_zip @@ -22609,6 +23486,7 @@ files: sha1: "881623c3a64260f5cc1be066dbb47799d1f2ce14" - name: lux10828.zip + path: "mame/bios/lux10828.zip" standalone_path: "lux10828.zip" required: false category: bios_zip @@ -22649,6 +23527,7 @@ files: sha1: "04973ad69de8da403739caaebe0b0f6757e4a6b1" - name: lux21046.zip + path: "mame/bios/lux21046.zip" standalone_path: "lux21046.zip" required: false category: bios_zip @@ -22683,6 +23562,7 @@ files: sha1: "61ad271de53152c1640c0b364fce46d1b0b4c7e2" - name: lux21056.zip + path: "mame/bios/lux21056.zip" standalone_path: "lux21056.zip" required: false category: bios_zip @@ -22713,6 +23593,7 @@ files: sha1: "342b8e214a8c4c2b014604e53c45ef1bd1c69ea3" - name: lx800.zip + path: "mame/bios/lx800.zip" standalone_path: "lx800.zip" required: false category: bios_zip @@ -22746,6 +23627,7 @@ files: sha1: "9618c940dd10d5b43cd1edd5763b90e6447de667" - name: lx810l.zip + path: "mame/bios/lx810l.zip" standalone_path: "lx810l.zip" required: false category: bios_zip @@ -22779,6 +23661,7 @@ files: sha1: "8e6f2f98abcbd8af6e34b9ba746edf0d18aef843" - name: m1comm.zip + path: "mame/bios/m1comm.zip" standalone_path: "m1comm.zip" required: false category: bios_zip @@ -22800,6 +23683,7 @@ files: sha1: "0cd0983cc8b2f2d6b41617d0d0a24cc6c188e62a" - name: m20_8086.zip + path: "mame/bios/m20_8086.zip" standalone_path: "m20_8086.zip" required: false category: bios_zip @@ -22815,6 +23699,7 @@ files: sha1: "2bb424afd874cc6562e9642780eaac2391308053" - name: m24_kbd.zip + path: "mame/bios/m24_kbd.zip" standalone_path: "m24_kbd.zip" required: false category: bios_zip @@ -22830,6 +23715,7 @@ files: sha1: "b5076d40c255e17dc93478e2254ea19aff4918b3" - name: m24_z8000.zip + path: "mame/bios/m24_z8000.zip" standalone_path: "m24_z8000.zip" required: false category: bios_zip @@ -22845,6 +23731,7 @@ files: sha1: "ff048cf61b090b147be7e29a929a0be7b3ac8409" - name: m50458.zip + path: "mame/bios/m50458.zip" standalone_path: "m50458.zip" required: false category: bios_zip @@ -22866,6 +23753,7 @@ files: bad_dump: true - name: m50dass.zip + path: "mame/bios/m50dass.zip" standalone_path: "m50dass.zip" required: false category: bios_zip @@ -22880,6 +23768,7 @@ files: sha1: "f6aa309bc8be15c26d91f3cf048ea140a9ca12eb" - name: m68705p3.zip + path: "mame/bios/m68705p3.zip" standalone_path: "m68705p3.zip" required: false category: bios_zip @@ -22897,6 +23786,7 @@ files: sha1: "45104fe1dbd683d251ed2b9411b1f4befbb5aff4" - name: m68705p5.zip + path: "mame/bios/m68705p5.zip" standalone_path: "m68705p5.zip" required: false category: bios_zip @@ -22911,6 +23801,7 @@ files: sha1: "c154f78c23f10bb903a531cb19e99121d5f7c19c" - name: m68705r3.zip + path: "mame/bios/m68705r3.zip" standalone_path: "m68705r3.zip" required: false category: bios_zip @@ -22925,6 +23816,7 @@ files: sha1: "834ea00aef5de12dbcd6421a6e21d5ea96cfbf37" - name: m68705u3.zip + path: "mame/bios/m68705u3.zip" standalone_path: "m68705u3.zip" required: false category: bios_zip @@ -22939,6 +23831,7 @@ files: sha1: "834ea00aef5de12dbcd6421a6e21d5ea96cfbf37" - name: m68hc05pge.zip + path: "mame/bios/m68hc05pge.zip" standalone_path: "m68hc05pge.zip" required: false category: bios_zip @@ -22954,6 +23847,7 @@ files: sha1: "79dc721651bf47aec53f57885779c84c4781761d" - name: mach64isa.zip + path: "mame/bios/mach64isa.zip" standalone_path: "mach64isa.zip" required: false category: bios_zip @@ -22992,6 +23886,7 @@ files: sha1: "0f4cf9221179c675dafafde638bc00244b6feb63" - name: mackbd_m0110a_f.zip + path: "mame/bios/mackbd_m0110a_f.zip" standalone_path: "mackbd_m0110a_f.zip" required: false category: bios_zip @@ -23007,6 +23902,7 @@ files: sha1: "a80404a122d74721cda13b285c412057c2c78bd7" - name: mackbd_m0110a_j.zip + path: "mame/bios/mackbd_m0110a_j.zip" standalone_path: "mackbd_m0110a_j.zip" required: false category: bios_zip @@ -23022,6 +23918,7 @@ files: sha1: "a80404a122d74721cda13b285c412057c2c78bd7" - name: mackbd_m0110b.zip + path: "mame/bios/mackbd_m0110b.zip" standalone_path: "mackbd_m0110b.zip" required: false category: bios_zip @@ -23037,6 +23934,7 @@ files: sha1: "32a3b58afb445a8675b12a4de3aec2fa00c99222" - name: mackbd_m0110f.zip + path: "mame/bios/mackbd_m0110f.zip" standalone_path: "mackbd_m0110f.zip" required: false category: bios_zip @@ -23052,6 +23950,7 @@ files: sha1: "32a3b58afb445a8675b12a4de3aec2fa00c99222" - name: mackbd_m0110j.zip + path: "mame/bios/mackbd_m0110j.zip" standalone_path: "mackbd_m0110j.zip" required: false category: bios_zip @@ -23067,6 +23966,7 @@ files: sha1: "32a3b58afb445a8675b12a4de3aec2fa00c99222" - name: mackbd_m0110t.zip + path: "mame/bios/mackbd_m0110t.zip" standalone_path: "mackbd_m0110t.zip" required: false category: bios_zip @@ -23082,6 +23982,7 @@ files: sha1: "32a3b58afb445a8675b12a4de3aec2fa00c99222" - name: mackbd_m0120p.zip + path: "mame/bios/mackbd_m0120p.zip" standalone_path: "mackbd_m0120p.zip" required: false category: bios_zip @@ -23097,6 +23998,7 @@ files: sha1: "32a3b58afb445a8675b12a4de3aec2fa00c99222" - name: macxlfdc.zip + path: "mame/bios/macxlfdc.zip" standalone_path: "macxlfdc.zip" required: false category: bios_zip @@ -23118,6 +24020,7 @@ files: sha1: "aa446b0c4acb4cb6c9d0adfbbea900fb8c04c1e9" - name: macxlvideo.zip + path: "mame/bios/macxlvideo.zip" standalone_path: "macxlvideo.zip" required: false category: bios_zip @@ -23133,6 +24036,7 @@ files: sha1: "ec2533a6bd9e75d02fa69754fb82c7c28f0366ab" - name: mc1502_rom.zip + path: "mame/bios/mc1502_rom.zip" standalone_path: "mc1502_rom.zip" required: false category: bios_zip @@ -23147,6 +24051,7 @@ files: sha1: "003f872e12f00800e22ab6bbc009d36bfde67b9d" - name: mc_mk4_hopper.zip + path: "mame/bios/mc_mk4_hopper.zip" standalone_path: "mc_mk4_hopper.zip" required: false category: bios_zip @@ -23162,6 +24067,7 @@ files: sha1: "70ed27a9df57bc2bf9b6cd94ca86469fe6f9d5b4" - name: mcx128.zip + path: "mame/bios/mcx128.zip" standalone_path: "mcx128.zip" required: false category: bios_zip @@ -23183,6 +24089,7 @@ files: sha1: "c8fd92705fc42deb6a0ffac6274e27fd61ecd4cc" - name: md_kbd.zip + path: "mame/bios/md_kbd.zip" standalone_path: "md_kbd.zip" required: false category: bios_zip @@ -23198,6 +24105,7 @@ files: sha1: "20cf62fc31257b6c3e767152086f2604fead97bd" - name: md_rom_svp.zip + path: "mame/bios/md_rom_svp.zip" standalone_path: "md_rom_svp.zip" required: false category: bios_zip @@ -23211,6 +24119,7 @@ files: sha1: "0b951ea9c6094b3c34e4f0b64d031c75c237564f" - name: mdisplay3.zip + path: "mame/bios/mdisplay3.zip" standalone_path: "mdisplay3.zip" required: false category: bios_zip @@ -23226,6 +24135,7 @@ files: sha1: "88f06ec8f403eaaf7cbce4cc84807b5742ce7108" - name: mg1_kbd_device.zip + path: "mame/bios/mg1_kbd_device.zip" standalone_path: "mg1_kbd_device.zip" required: false category: bios_zip @@ -23240,6 +24150,7 @@ files: sha1: "c6e90b10241fa61e12124ef9a5cea15212d5866c" - name: mga2064w.zip + path: "mame/bios/mga2064w.zip" standalone_path: "mga2064w.zip" required: false category: bios_zip @@ -23278,6 +24189,7 @@ files: sha1: "d62d6a57c75f2266e3d0f85916f366d62ad56ce4" - name: microtan_kbd_mt009.zip + path: "mame/bios/microtan_kbd_mt009.zip" standalone_path: "microtan_kbd_mt009.zip" required: false category: bios_zip @@ -23293,6 +24205,7 @@ files: sha1: "89dcc0712745ed9ba876a78eefd55e9a54fc4fad" - name: microtouch.zip + path: "mame/bios/microtouch.zip" standalone_path: "microtouch.zip" required: false category: bios_zip @@ -23322,6 +24235,7 @@ files: sha1: "5a60d7d1f8a0b3898aabcabe43dc51e9f90306f7" - name: midcsd.zip + path: "mame/bios/midcsd.zip" standalone_path: "midcsd.zip" required: false category: bios_zip @@ -23337,6 +24251,7 @@ files: sha1: "360f3f59877f0bc25b4154782a2011963dd80a52" - name: midssio.zip + path: "mame/bios/midssio.zip" standalone_path: "midssio.zip" required: false category: bios_zip @@ -23352,6 +24267,7 @@ files: sha1: "9ac9b01d24affc0ee9227a4364c4fd8f8290343a" - name: mie.zip + path: "mame/bios/mie.zip" standalone_path: "mie.zip" required: false category: bios_zip @@ -23370,6 +24286,7 @@ files: sha1: "864d14d58732dd4e2ee538ccc71fa8df7013ba06" - name: mindset_sound_module.zip + path: "mame/bios/mindset_sound_module.zip" standalone_path: "mindset_sound_module.zip" required: false category: bios_zip @@ -23385,6 +24302,7 @@ files: sha1: "30cdc0dedaa5246f4952df452a99ca22e3cd0636" - name: minichif.zip + path: "mame/bios/minichif.zip" standalone_path: "minichif.zip" required: false category: bios_zip @@ -23400,6 +24318,7 @@ files: sha1: "c1296995238ef23f18e7fec70a144a0566a25a27" - name: mks3.zip + path: "mame/bios/mks3.zip" standalone_path: "mks3.zip" required: false category: bios_zip @@ -23415,6 +24334,7 @@ files: sha1: "fee3628ac49556a60a597ee6ea71fb48646c6229" - name: mm1kb.zip + path: "mame/bios/mm1kb.zip" standalone_path: "mm1kb.zip" required: false category: bios_zip @@ -23430,6 +24350,7 @@ files: sha1: "925c9ee22db13566416cdbc505c03d4116ff8d5f" - name: mm5740.zip + path: "mame/bios/mm5740.zip" standalone_path: "mm5740.zip" required: false category: bios_zip @@ -23466,6 +24387,7 @@ files: sha1: "e7b9feba5f789f388d27820b5f3fa591d41b4ab1" - name: mockingboardd.zip + path: "mame/bios/mockingboardd.zip" standalone_path: "mockingboardd.zip" required: false category: bios_zip @@ -23502,6 +24424,7 @@ files: sha1: "e8d20f4b59fe867ff76434d35a14d2cbdc8533e3" - name: model1io.zip + path: "mame/bios/model1io.zip" standalone_path: "model1io.zip" required: false category: bios_zip @@ -23528,6 +24451,7 @@ files: sha1: "c19d044d4c2fe551474492aa51922587394dd371" - name: model1io2.zip + path: "mame/bios/model1io2.zip" standalone_path: "model1io2.zip" required: false category: bios_zip @@ -23554,6 +24478,7 @@ files: sha1: "81892251d466f630a96af25bde652c20e47d7ede" - name: mpcb828.zip + path: "mame/bios/mpcb828.zip" standalone_path: "mpcb828.zip" required: false category: bios_zip @@ -23569,6 +24494,7 @@ files: sha1: "5378e33ef62309bc0c8cbe9ccbd87fd871bdc195" - name: mpcb896.zip + path: "mame/bios/mpcb896.zip" standalone_path: "mpcb896.zip" required: false category: bios_zip @@ -23584,6 +24510,7 @@ files: sha1: "550aab8b0c8d85c9a69fe94ae042b6bb9f9d7db1" - name: mpcb963.zip + path: "mame/bios/mpcb963.zip" standalone_path: "mpcb963.zip" required: false category: bios_zip @@ -23599,6 +24526,7 @@ files: sha1: "58bcc2afb66168f1d44a0366b6a5ccc4c22e0f32" - name: mpcba79.zip + path: "mame/bios/mpcba79.zip" standalone_path: "mpcba79.zip" required: false category: bios_zip @@ -23614,6 +24542,7 @@ files: sha1: "a35f7117cb657122dedd71864e58d8c08ca12190" - name: mpcbb68.zip + path: "mame/bios/mpcbb68.zip" standalone_path: "mpcbb68.zip" required: false category: bios_zip @@ -23629,6 +24558,7 @@ files: sha1: "5c286e87f051c6bd38137f47f89975f507b11b12" - name: mpcbb92.zip + path: "mame/bios/mpcbb92.zip" standalone_path: "mpcbb92.zip" required: false category: bios_zip @@ -23644,6 +24574,7 @@ files: sha1: "9ddc6cccc80fee2a5ac77307b33a70b074b8c7d6" - name: mpf1_epb.zip + path: "mame/bios/mpf1_epb.zip" standalone_path: "mpf1_epb.zip" required: false category: bios_zip @@ -23659,6 +24590,7 @@ files: sha1: "489e597c12a14a1cf9568d18b299e4f4ae656f71" - name: mpf1_epb_ibp.zip + path: "mame/bios/mpf1_epb_ibp.zip" standalone_path: "mpf1_epb_ibp.zip" required: false category: bios_zip @@ -23674,6 +24606,7 @@ files: sha1: "296842ee5bac23f41f46534663d4f0bfc04075cf" - name: mpf1_iom_ip.zip + path: "mame/bios/mpf1_iom_ip.zip" standalone_path: "mpf1_iom_ip.zip" required: false category: bios_zip @@ -23689,6 +24622,7 @@ files: sha1: "2c3c26290e041e913d00d7e0d65d53480e27187c" - name: mpf1_prt.zip + path: "mame/bios/mpf1_prt.zip" standalone_path: "mpf1_prt.zip" required: false category: bios_zip @@ -23704,6 +24638,7 @@ files: sha1: "f31536ee9dbb9babb9ce16a7490db654ca0b5749" - name: mpf1_prt_ip.zip + path: "mame/bios/mpf1_prt_ip.zip" standalone_path: "mpf1_prt_ip.zip" required: false category: bios_zip @@ -23719,6 +24654,7 @@ files: sha1: "6a3e7daa7834d67fd572261ed4a9a62c4594fe3f" - name: mpf1_sgb.zip + path: "mame/bios/mpf1_sgb.zip" standalone_path: "mpf1_sgb.zip" required: false category: bios_zip @@ -23734,6 +24670,7 @@ files: sha1: "13f3c7243d691b66ad5f0dcbbc16488c8905a394" - name: mpf1_ssb.zip + path: "mame/bios/mpf1_ssb.zip" standalone_path: "mpf1_ssb.zip" required: false category: bios_zip @@ -23749,6 +24686,7 @@ files: sha1: "35847f8164eed4c0794a8b74e5d7fa972b10eb90" - name: mpf1_ssb_ip.zip + path: "mame/bios/mpf1_ssb_ip.zip" standalone_path: "mpf1_ssb_ip.zip" required: false category: bios_zip @@ -23764,6 +24702,7 @@ files: sha1: "42a1ce714fe9017cc9c2838757bf072414c752d0" - name: mpf1_tva_ip.zip + path: "mame/bios/mpf1_tva_ip.zip" standalone_path: "mpf1_tva_ip.zip" required: false category: bios_zip @@ -23779,6 +24718,7 @@ files: sha1: "3a5b0dba5d1e2edda8563b55010c86efd1548d0b" - name: mpf1_vid.zip + path: "mame/bios/mpf1_vid.zip" standalone_path: "mpf1_vid.zip" required: false category: bios_zip @@ -23799,6 +24739,7 @@ files: sha1: "9cf717de353b86c38f94b805d31a16d8079896af" - name: mps1200.zip + path: "mame/bios/mps1200.zip" standalone_path: "mps1200.zip" required: false category: bios_zip @@ -23814,6 +24755,7 @@ files: sha1: "0ceb753c17599bc69458cfbb1cb3e81c2b60d107" - name: mps1250.zip + path: "mame/bios/mps1250.zip" standalone_path: "mps1250.zip" required: false category: bios_zip @@ -23829,6 +24771,7 @@ files: sha1: "bb7357e83497b333e3f95548d94970003b2dfa9d" - name: mpu401.zip + path: "mame/bios/mpu401.zip" standalone_path: "mpu401.zip" required: false category: bios_zip @@ -23847,6 +24790,7 @@ files: sha1: "00efbfb96aeb997b69bb16981c6751d3c784bb87" - name: mr9735_002.zip + path: "mame/bios/mr9735_002.zip" standalone_path: "mr9735_002.zip" required: false category: bios_zip @@ -23863,6 +24807,7 @@ files: bad_dump: true - name: ms7004.zip + path: "mame/bios/ms7004.zip" standalone_path: "ms7004.zip" required: false category: bios_zip @@ -23877,6 +24822,7 @@ files: sha1: "2d7cc7cd182f2ee09ecf2c539e33db3c2195f778" - name: msdsd1.zip + path: "mame/bios/msdsd1.zip" standalone_path: "msdsd1.zip" required: false category: bios_zip @@ -23896,6 +24842,7 @@ files: sha1: "99dd15c6d97938eba73880b18986a037e90742ab" - name: msdsd2.zip + path: "mame/bios/msdsd2.zip" standalone_path: "msdsd2.zip" required: false category: bios_zip @@ -23915,6 +24862,7 @@ files: sha1: "4beec0b7ce2349add3b0a5bceee60826637df8d9" - name: msm6222b01.zip + path: "mame/bios/msm6222b01.zip" standalone_path: "msm6222b01.zip" required: false category: bios_zip @@ -23930,6 +24878,7 @@ files: sha1: "e108b520e6d20459a7bbd5958bbfa1d551a690bd" - name: msmt070.zip + path: "mame/bios/msmt070.zip" standalone_path: "msmt070.zip" required: false category: bios_zip @@ -23945,6 +24894,7 @@ files: sha1: "25bfb863336315975568f137e7e76bdc8101ab02" - name: msmt071.zip + path: "mame/bios/msmt071.zip" standalone_path: "msmt071.zip" required: false category: bios_zip @@ -23960,6 +24910,7 @@ files: sha1: "49bd1890cc71dd8a7cbf5e17bf04843d6e075299" - name: msmt081.zip + path: "mame/bios/msmt081.zip" standalone_path: "msmt081.zip" required: false category: bios_zip @@ -23975,6 +24926,7 @@ files: sha1: "a5da37c3d9e040fc6d9ca99b82a25ed3ce4c57ff" - name: msmt094.zip + path: "mame/bios/msmt094.zip" standalone_path: "msmt094.zip" required: false category: bios_zip @@ -24018,6 +24970,7 @@ files: sha1: "a33cd5c0f3e45fdd7e22df2ff1648f4d73b09b19" - name: msx_cart_bm_012.zip + path: "mame/bios/msx_cart_bm_012.zip" standalone_path: "msx_cart_bm_012.zip" required: false category: bios_zip @@ -24033,6 +24986,7 @@ files: sha1: "6d07637ad3a61b509221ed4650eed18442371010" - name: msx_cart_easispeech.zip + path: "mame/bios/msx_cart_easispeech.zip" standalone_path: "msx_cart_easispeech.zip" required: false category: bios_zip @@ -24047,6 +25001,7 @@ files: sha1: "e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc" - name: msx_cart_sfg01.zip + path: "mame/bios/msx_cart_sfg01.zip" standalone_path: "msx_cart_sfg01.zip" required: false category: bios_zip @@ -24062,6 +25017,7 @@ files: sha1: "434651305f92aa770a89e40b81125fb22d91603d" - name: msx_cart_sfg05.zip + path: "mame/bios/msx_cart_sfg05.zip" standalone_path: "msx_cart_sfg05.zip" required: false category: bios_zip @@ -24089,6 +25045,7 @@ files: bad_dump: true - name: msx_cart_skw01.zip + path: "mame/bios/msx_cart_skw01.zip" standalone_path: "msx_cart_skw01.zip" required: false category: bios_zip @@ -24111,6 +25068,7 @@ files: sha1: "f0901a63de6c95a42ce6ad82dd5e6bfba4bcf180" - name: msx_cart_sunrise_ataide.zip + path: "mame/bios/msx_cart_sunrise_ataide.zip" standalone_path: "msx_cart_sunrise_ataide.zip" required: false category: bios_zip @@ -24152,6 +25110,7 @@ files: sha1: "cbeb5830ee740747aa61ef5b896e2eb6d7acd7ab" - name: msx_moonsound.zip + path: "mame/bios/msx_moonsound.zip" standalone_path: "msx_moonsound.zip" required: false category: bios_zip @@ -24167,6 +25126,7 @@ files: sha1: "32760893ce06dbe3930627755ba065cc3d8ec6ca" - name: mtx_cfx.zip + path: "mame/bios/mtx_cfx.zip" standalone_path: "mtx_cfx.zip" required: false category: bios_zip @@ -24207,6 +25167,7 @@ files: sha1: "3e8dcc3d88158e0dc30d7d9ecec7e427883f7171" - name: mtx_sdxbas.zip + path: "mame/bios/mtx_sdxbas.zip" standalone_path: "mtx_sdxbas.zip" required: false category: bios_zip @@ -24228,6 +25189,7 @@ files: sha1: "f08e6a8cffbb3ca39633be6e9958bec85d1e5981" - name: mtx_sdxcpm.zip + path: "mame/bios/mtx_sdxcpm.zip" standalone_path: "mtx_sdxcpm.zip" required: false category: bios_zip @@ -24248,6 +25210,7 @@ files: sha1: "f84883f79bed34501e5828336894fad929bddbb5" - name: mu5lcd.zip + path: "mame/bios/mu5lcd.zip" standalone_path: "mu5lcd.zip" required: false category: bios_zip @@ -24263,6 +25226,7 @@ files: sha1: "3db0b16f27b501ff8d8ac3fb631dd315571230d3" - name: mulcd.zip + path: "mame/bios/mulcd.zip" standalone_path: "mulcd.zip" required: false category: bios_zip @@ -24282,6 +25246,7 @@ files: sha1: "2ff0899bfee7795ba52a3d56c96edf31d9e6a3f9" - name: mvme120.zip + path: "mame/bios/mvme120.zip" standalone_path: "mvme120.zip" required: false category: bios_zip @@ -24312,6 +25277,7 @@ files: sha1: "2f933d0eb46d00db0051ce23c3e53ccef75a2c69" - name: mvme121.zip + path: "mame/bios/mvme121.zip" standalone_path: "mvme121.zip" required: false category: bios_zip @@ -24342,6 +25308,7 @@ files: sha1: "2f933d0eb46d00db0051ce23c3e53ccef75a2c69" - name: mvme122.zip + path: "mame/bios/mvme122.zip" standalone_path: "mvme122.zip" required: false category: bios_zip @@ -24372,6 +25339,7 @@ files: sha1: "2f933d0eb46d00db0051ce23c3e53ccef75a2c69" - name: mvme123.zip + path: "mame/bios/mvme123.zip" standalone_path: "mvme123.zip" required: false category: bios_zip @@ -24402,6 +25370,7 @@ files: sha1: "2f933d0eb46d00db0051ce23c3e53ccef75a2c69" - name: mvme147.zip + path: "mame/bios/mvme147.zip" standalone_path: "mvme147.zip" required: false category: bios_zip @@ -24432,6 +25401,7 @@ files: sha1: "ff9db90a05c295819ce7ca7c1a6ac67b04003728" - name: mvme180.zip + path: "mame/bios/mvme180.zip" standalone_path: "mvme180.zip" required: false category: bios_zip @@ -24462,6 +25432,7 @@ files: sha1: "0105317abf0105216078c94c02c223dd1cd61068" - name: mvme181.zip + path: "mame/bios/mvme181.zip" standalone_path: "mvme181.zip" required: false category: bios_zip @@ -24492,6 +25463,7 @@ files: sha1: "5871b5194e7fc623923f5df005b0463002e85626" - name: mvme187.zip + path: "mame/bios/mvme187.zip" standalone_path: "mvme187.zip" required: false category: bios_zip @@ -24512,6 +25484,7 @@ files: sha1: "62515c6e0dbeca6d18f373ad33e185096f10d2fc" - name: mvme327a.zip + path: "mame/bios/mvme327a.zip" standalone_path: "mvme327a.zip" required: false category: bios_zip @@ -24532,6 +25505,7 @@ files: sha1: "ec5fc0709d8e91119d39231ace66f4fcbdb457e9" - name: mvme328.zip + path: "mame/bios/mvme328.zip" standalone_path: "mvme328.zip" required: false category: bios_zip @@ -24562,6 +25536,7 @@ files: sha1: "0a39873b5a17f71db86afcd361141e5b9f6786e9" - name: mvme350.zip + path: "mame/bios/mvme350.zip" standalone_path: "mvme350.zip" required: false category: bios_zip @@ -24580,6 +25555,7 @@ files: sha1: "d0929dbfeb0cfda63df6b5bc29ee27fbf665def7" - name: mz1e30.zip + path: "mame/bios/mz1e30.zip" standalone_path: "mz1e30.zip" required: false category: bios_zip @@ -24601,6 +25577,7 @@ files: sha1: "8b4f722e9a61c3e6aacebcda03c67253b8d9f468" - name: mz1p16.zip + path: "mame/bios/mz1p16.zip" standalone_path: "mz1p16.zip" required: false category: bios_zip @@ -24635,6 +25612,7 @@ files: sha1: "2e059c2f7d653294c77fe8e1a37436b4c028e122" - name: mzr8105.zip + path: "mame/bios/mzr8105.zip" standalone_path: "mzr8105.zip" required: false category: bios_zip @@ -24653,6 +25631,7 @@ files: sha1: "a00b68f4d649bcc09a29361f8692e52be12b3792" - name: nabupc_keyboard.zip + path: "mame/bios/nabupc_keyboard.zip" standalone_path: "nabupc_keyboard.zip" required: false category: bios_zip @@ -24667,6 +25646,7 @@ files: sha1: "2f6ff63ca2f2ac90f3e03ef4f2b79883205e8a4e" - name: namco50.zip + path: "mame/bios/namco50.zip" standalone_path: "namco50.zip" required: false category: bios_zip @@ -24681,6 +25661,7 @@ files: sha1: "f03c79451e73b3a93c1591cdb27fedc9f130508d" - name: namco51.zip + path: "mame/bios/namco51.zip" standalone_path: "namco51.zip" required: false category: bios_zip @@ -24695,6 +25676,7 @@ files: sha1: "50de79e0d6a76bda95ffb02fcce369a79e6abfec" - name: namco52.zip + path: "mame/bios/namco52.zip" standalone_path: "namco52.zip" required: false category: bios_zip @@ -24709,6 +25691,7 @@ files: sha1: "4883b2fdbc99eb7b9906357fcc53915842c2c186" - name: namco53.zip + path: "mame/bios/namco53.zip" standalone_path: "namco53.zip" required: false category: bios_zip @@ -24723,6 +25706,7 @@ files: sha1: "758d8583d658e4f1df93184009d86c3eb8713899" - name: namco54.zip + path: "mame/bios/namco54.zip" standalone_path: "namco54.zip" required: false category: bios_zip @@ -24737,6 +25721,7 @@ files: sha1: "01bdf984a49e8d0cc8761b2cc162fd6434d5afbe" - name: namco62.zip + path: "mame/bios/namco62.zip" standalone_path: "namco62.zip" required: false category: bios_zip @@ -24751,6 +25736,7 @@ files: sha1: "fe0a60fc339ac2eeed4879a64c1aab130f9d4cfe" - name: namco_amc.zip + path: "mame/bios/namco_amc.zip" standalone_path: "namco_amc.zip" required: false category: bios_zip @@ -24766,6 +25752,7 @@ files: sha1: "803652b7b8fde2196b7fb742ba8b9843e4fcd2de" - name: namco_asca1.zip + path: "mame/bios/namco_asca1.zip" standalone_path: "namco_asca1.zip" required: false category: bios_zip @@ -24781,6 +25768,7 @@ files: sha1: "497af1059f85c07bea2dd0d303481623f6019dcf" - name: namco_asca3.zip + path: "mame/bios/namco_asca3.zip" standalone_path: "namco_asca3.zip" required: false category: bios_zip @@ -24796,6 +25784,7 @@ files: sha1: "9d7ebe274c0d26f5f38747224d42d0375e2ed14c" - name: namco_asca3a.zip + path: "mame/bios/namco_asca3a.zip" standalone_path: "namco_asca3a.zip" required: false category: bios_zip @@ -24811,6 +25800,7 @@ files: sha1: "ffa8782ca641d71d57df23ed1c5911db05d3df97" - name: namco_asca5.zip + path: "mame/bios/namco_asca5.zip" standalone_path: "namco_asca5.zip" required: false category: bios_zip @@ -24826,6 +25816,7 @@ files: sha1: "320db5e78ae23c5f94e368432d51573b409995db" - name: namco_csz1.zip + path: "mame/bios/namco_csz1.zip" standalone_path: "namco_csz1.zip" required: false category: bios_zip @@ -24841,6 +25832,7 @@ files: sha1: "b5df211988d856572fcc313480e693c8561784e4" - name: namco_cyberlead.zip + path: "mame/bios/namco_cyberlead.zip" standalone_path: "namco_cyberlead.zip" required: false category: bios_zip @@ -24856,6 +25848,7 @@ files: sha1: "d938b1e1ae596d0ab1007352f61b0b800363c762" - name: namco_cyberlead_led.zip + path: "mame/bios/namco_cyberlead_led.zip" standalone_path: "namco_cyberlead_led.zip" required: false category: bios_zip @@ -24871,6 +25864,7 @@ files: sha1: "61d61338e1bb414af32dbdc1e24d54c02fb9196e" - name: namco_cyberleada.zip + path: "mame/bios/namco_cyberleada.zip" standalone_path: "namco_cyberleada.zip" required: false category: bios_zip @@ -24886,6 +25880,7 @@ files: sha1: "d938b1e1ae596d0ab1007352f61b0b800363c762" - name: namco_emio102.zip + path: "mame/bios/namco_emio102.zip" standalone_path: "namco_emio102.zip" required: false category: bios_zip @@ -24901,6 +25896,7 @@ files: sha1: "71d61d9218543e1b0b2a6c550a8ff2b7c6267257" - name: namco_fca10.zip + path: "mame/bios/namco_fca10.zip" standalone_path: "namco_fca10.zip" required: false category: bios_zip @@ -24916,6 +25912,7 @@ files: sha1: "9d7ebe274c0d26f5f38747224d42d0375e2ed14c" - name: namco_fca11.zip + path: "mame/bios/namco_fca11.zip" standalone_path: "namco_fca11.zip" required: false category: bios_zip @@ -24939,6 +25936,7 @@ files: sha1: "a1a487361053af564f6ec67e545413e370a3b38c" - name: namco_fcb.zip + path: "mame/bios/namco_fcb.zip" standalone_path: "namco_fcb.zip" required: false category: bios_zip @@ -24959,6 +25957,7 @@ files: sha1: "9d7ebe274c0d26f5f38747224d42d0375e2ed14c" - name: namco_tssio.zip + path: "mame/bios/namco_tssio.zip" standalone_path: "namco_tssio.zip" required: false category: bios_zip @@ -24974,6 +25973,7 @@ files: sha1: "1330189184a636328d956c0e435f8d9ad2e96a80" - name: namco_xmiu1.zip + path: "mame/bios/namco_xmiu1.zip" standalone_path: "namco_xmiu1.zip" required: false category: bios_zip @@ -24989,6 +25989,7 @@ files: sha1: "6fa5dc81d258137c1b1ad427d49d136d0bbf53fa" - name: namcoc65.zip + path: "mame/bios/namcoc65.zip" standalone_path: "namcoc65.zip" required: false category: bios_zip @@ -25003,6 +26004,7 @@ files: sha1: "2c420d34dba21e409bf78ddca710fc7de65a6642" - name: namcoc67.zip + path: "mame/bios/namcoc67.zip" standalone_path: "namcoc67.zip" required: false category: bios_zip @@ -25018,6 +26020,7 @@ files: sha1: "c9ec18d5f88d53976b94444eedc64d5568155958" - name: namcoc68.zip + path: "mame/bios/namcoc68.zip" standalone_path: "namcoc68.zip" required: false category: bios_zip @@ -25032,6 +26035,7 @@ files: sha1: "38d1ad1b1287cadef0c999aff9357927315f8e6b" - name: namcoc69.zip + path: "mame/bios/namcoc69.zip" standalone_path: "namcoc69.zip" required: false category: bios_zip @@ -25046,6 +26050,7 @@ files: sha1: "61a4981fc2716c228b6121fedcbf1ed6f34dc2de" - name: namcoc70.zip + path: "mame/bios/namcoc70.zip" standalone_path: "namcoc70.zip" required: false category: bios_zip @@ -25060,6 +26065,7 @@ files: sha1: "7ce91eda76e86b5cab625e2b67c463b7d143832e" - name: namcoc71.zip + path: "mame/bios/namcoc71.zip" standalone_path: "namcoc71.zip" required: false category: bios_zip @@ -25075,6 +26081,7 @@ files: sha1: "e363ac50f5556f83308d4cc191b455e9b62bcfc8" - name: namcoc74.zip + path: "mame/bios/namcoc74.zip" standalone_path: "namcoc74.zip" required: false category: bios_zip @@ -25089,6 +26096,7 @@ files: sha1: "8f3248b1890abb2e649927240ae46f73bb171e3b" - name: namcoc75.zip + path: "mame/bios/namcoc75.zip" standalone_path: "namcoc75.zip" required: false category: bios_zip @@ -25103,6 +26111,7 @@ files: sha1: "3103e5a0a2867620309fd4fe478a2be0effbeff8" - name: namcoc76.zip + path: "mame/bios/namcoc76.zip" standalone_path: "namcoc76.zip" required: false category: bios_zip @@ -25117,6 +26126,7 @@ files: sha1: "ceb184ef0486caf715dd997101999785f67a40b8" - name: nanoreseau_mo.zip + path: "mame/bios/nanoreseau_mo.zip" standalone_path: "nanoreseau_mo.zip" required: false category: bios_zip @@ -25132,6 +26142,7 @@ files: sha1: "b5b7cb6d12493d849330b6b5628efd1a83a4bbf5" - name: nanoreseau_to.zip + path: "mame/bios/nanoreseau_to.zip" standalone_path: "nanoreseau_to.zip" required: false category: bios_zip @@ -25147,6 +26158,7 @@ files: sha1: "973209f4baa5e81bf7885c0602949e064bac7862" - name: nb_aenet.zip + path: "mame/bios/nb_aenet.zip" standalone_path: "nb_aenet.zip" required: false category: bios_zip @@ -25164,6 +26176,7 @@ files: sha1: "01ddc15ee84b17128203cb812f29bac6b20fd642" - name: nb_amc3b.zip + path: "mame/bios/nb_amc3b.zip" standalone_path: "nb_amc3b.zip" required: false category: bios_zip @@ -25181,6 +26194,7 @@ files: sha1: "d0a41df667e6b51fbc63f9251d593f4fc49104ba" - name: nb_btbug.zip + path: "mame/bios/nb_btbug.zip" standalone_path: "nb_btbug.zip" required: false category: bios_zip @@ -25204,6 +26218,7 @@ files: sha1: "c783d19a5e4c536e58e1e7e201ec47e8fb78d435" - name: nb_c264.zip + path: "mame/bios/nb_c264.zip" standalone_path: "nb_c264.zip" required: false category: bios_zip @@ -25225,6 +26240,7 @@ files: sha1: "98d35ed3fb0bca4a9bee1cdb2af0d3f22b379386" - name: nb_laserview.zip + path: "mame/bios/nb_laserview.zip" standalone_path: "nb_laserview.zip" required: false category: bios_zip @@ -25242,6 +26258,7 @@ files: sha1: "fd505505226abb5fea7c10ed14e8841077ef1be6" - name: nb_m2hr.zip + path: "mame/bios/nb_m2hr.zip" standalone_path: "nb_m2hr.zip" required: false category: bios_zip @@ -25259,6 +26276,7 @@ files: sha1: "37c59f38ae34021d0cb86c2e76a598b7e6077c0d" - name: nb_m2vc.zip + path: "mame/bios/nb_m2vc.zip" standalone_path: "nb_m2vc.zip" required: false category: bios_zip @@ -25276,6 +26294,7 @@ files: sha1: "abe85d8a882bb2b8187a28bd6707fc2f5d77eedd" - name: nb_mdc48.zip + path: "mame/bios/nb_mdc48.zip" standalone_path: "nb_mdc48.zip" required: false category: bios_zip @@ -25293,6 +26312,7 @@ files: sha1: "4ae21d6d7bbaa6fc7aa301bee2b791ed33b1dcf9" - name: nb_pcs8.zip + path: "mame/bios/nb_pcs8.zip" standalone_path: "nb_pcs8.zip" required: false category: bios_zip @@ -25310,6 +26330,7 @@ files: sha1: "bd4ceb4b229c9ce3e8f5386d5132ff26de6067e1" - name: nb_qdlink.zip + path: "mame/bios/nb_qdlink.zip" standalone_path: "nb_qdlink.zip" required: false category: bios_zip @@ -25327,6 +26348,7 @@ files: sha1: "d70bc32ad50ceb5cb75c6251293cacd65d8313aa" - name: nb_rtpd.zip + path: "mame/bios/nb_rtpd.zip" standalone_path: "nb_rtpd.zip" required: false category: bios_zip @@ -25344,6 +26366,7 @@ files: sha1: "4abb64e49201e966c17a255a94b670564b229934" - name: nb_sp8s3.zip + path: "mame/bios/nb_sp8s3.zip" standalone_path: "nb_sp8s3.zip" required: false category: bios_zip @@ -25367,6 +26390,7 @@ files: sha1: "124c9847bf07733d131c977c4395cfbbb6470973" - name: nb_spdq.zip + path: "mame/bios/nb_spdq.zip" standalone_path: "nb_spdq.zip" required: false category: bios_zip @@ -25384,6 +26408,7 @@ files: sha1: "9511c2df47140f4279196d3b8836b53429879dd9" - name: nb_thungx.zip + path: "mame/bios/nb_thungx.zip" standalone_path: "nb_thungx.zip" required: false category: bios_zip @@ -25401,6 +26426,7 @@ files: sha1: "c5a1eab749b76aaf3e0ede2120fa99dd7f720196" - name: nb_thungx16.zip + path: "mame/bios/nb_thungx16.zip" standalone_path: "nb_thungx16.zip" required: false category: bios_zip @@ -25415,6 +26441,7 @@ files: sha1: "ea008fa93f56807f48d9535f70efebdf3def2609" - name: nb_vikbw.zip + path: "mame/bios/nb_vikbw.zip" standalone_path: "nb_vikbw.zip" required: false category: bios_zip @@ -25432,6 +26459,7 @@ files: sha1: "d08349edfc82a0bd5ea848e053e1712092308f74" - name: nb_wkstn.zip + path: "mame/bios/nb_wkstn.zip" standalone_path: "nb_wkstn.zip" required: false category: bios_zip @@ -25449,6 +26477,7 @@ files: sha1: "697412843cfd56be2b382f8952ef3f5a8323066a" - name: nb_wspt.zip + path: "mame/bios/nb_wspt.zip" standalone_path: "nb_wspt.zip" required: false category: bios_zip @@ -25466,6 +26495,7 @@ files: sha1: "ce2bf2374bb994c17962dba8f3d11bc1260e2644" - name: ncr53c825_pci.zip + path: "mame/bios/ncr53c825_pci.zip" standalone_path: "ncr53c825_pci.zip" required: false category: bios_zip @@ -25484,6 +26514,7 @@ files: sha1: "ed22a726976fdc34db6176a1384609f93d50f27a" - name: neon250.zip + path: "mame/bios/neon250.zip" standalone_path: "neon250.zip" required: false category: bios_zip @@ -25500,6 +26531,7 @@ files: sha1: "1ddda1494d5b32148e2c9e7a6557f00ee9cffea6" - name: nes_rob.zip + path: "mame/bios/nes_rob.zip" standalone_path: "nes_rob.zip" required: false category: bios_zip @@ -25515,6 +26547,7 @@ files: sha1: "a87e2f0f5e454c093d1352ac368aa9e82e9f6790" - name: newbrain_eim.zip + path: "mame/bios/newbrain_eim.zip" standalone_path: "newbrain_eim.zip" required: false category: bios_zip @@ -25541,6 +26574,7 @@ files: sha1: "f90db4f8318777313a862b3d5bab83c2fd260010" - name: newbrain_fdc.zip + path: "mame/bios/newbrain_fdc.zip" standalone_path: "newbrain_fdc.zip" required: false category: bios_zip @@ -25565,6 +26599,7 @@ files: sha1: "c2aa1d27d4f3a24ab0c8135df746a4a44201a7f4" - name: nlq401.zip + path: "mame/bios/nlq401.zip" standalone_path: "nlq401.zip" required: false category: bios_zip @@ -25599,6 +26634,7 @@ files: sha1: "b6374abaebb8e484e573caa21b1cc87f1554c8d6" - name: nmk004.zip + path: "mame/bios/nmk004.zip" standalone_path: "nmk004.zip" required: false category: bios_zip @@ -25613,6 +26649,7 @@ files: sha1: "f55f9e6bb55bfa56f9f797518dca032aaa3f6a32" - name: nokia_crtc186.zip + path: "mame/bios/nokia_crtc186.zip" standalone_path: "nokia_crtc186.zip" required: false category: bios_zip @@ -25636,6 +26673,7 @@ files: sha1: "9810732a52ee6b8313d27462b27acc7e4d5badeb" - name: novell_dcb.zip + path: "mame/bios/novell_dcb.zip" standalone_path: "novell_dcb.zip" required: false category: bios_zip @@ -25654,6 +26692,7 @@ files: sha1: "a13c0aab46084a0805256f1d2b8b8beaccc9e253" - name: np600a3.zip + path: "mame/bios/np600a3.zip" standalone_path: "np600a3.zip" required: false category: bios_zip @@ -25676,6 +26715,7 @@ files: sha1: "520773e235a826438b025381cd3861df86d4965d" - name: nss_tvinterface.zip + path: "mame/bios/nss_tvinterface.zip" standalone_path: "nss_tvinterface.zip" required: false category: bios_zip @@ -25722,6 +26762,7 @@ files: sha1: "b20d7856e4739bafcd66434adf9881824f8a611b" - name: omniwave.zip + path: "mame/bios/omniwave.zip" standalone_path: "omniwave.zip" required: false category: bios_zip @@ -25736,6 +26777,7 @@ files: sha1: "1e894c0345eaf0ea713f36a75b065f7ee419c63c" - name: omti8621isa.zip + path: "mame/bios/omti8621isa.zip" standalone_path: "omti8621isa.zip" required: false category: bios_zip @@ -25758,6 +26800,7 @@ files: sha1: "4f382dbb0ca4873c44afd48c5bffb50b9c89e7dc" - name: oric_jasmin.zip + path: "mame/bios/oric_jasmin.zip" standalone_path: "oric_jasmin.zip" required: false category: bios_zip @@ -25773,6 +26816,7 @@ files: sha1: "70e59b8abd67092f050462abc6cb5271e4c15f01" - name: oric_microdisc.zip + path: "mame/bios/oric_microdisc.zip" standalone_path: "oric_microdisc.zip" required: false category: bios_zip @@ -25788,6 +26832,7 @@ files: sha1: "0d2ef6e67322f48f4b7e08d8bbe68827e2074561" - name: osa_analyst.zip + path: "mame/bios/osa_analyst.zip" standalone_path: "osa_analyst.zip" required: false category: bios_zip @@ -25854,6 +26899,7 @@ files: sha1: "d336cb2096780b4d3bcceda0d2ed1246e780cd8d" - name: osa_bforce.zip + path: "mame/bios/osa_bforce.zip" standalone_path: "osa_bforce.zip" required: false category: bios_zip @@ -25869,6 +26915,7 @@ files: sha1: "7baa809ffc09117a27bdeede655f92bc3a6d1626" - name: osa_maestro.zip + path: "mame/bios/osa_maestro.zip" standalone_path: "osa_maestro.zip" required: false category: bios_zip @@ -25950,6 +26997,7 @@ files: sha1: "d336cb2096780b4d3bcceda0d2ed1246e780cd8d" - name: osa_maestroa.zip + path: "mame/bios/osa_maestroa.zip" standalone_path: "osa_maestroa.zip" required: false category: bios_zip @@ -25971,6 +27019,7 @@ files: sha1: "ef81b9a0dcfbd8427025cfe9bf738d42a7a1139a" - name: osa_sparc.zip + path: "mame/bios/osa_sparc.zip" standalone_path: "osa_sparc.zip" required: false category: bios_zip @@ -26030,6 +27079,7 @@ files: sha1: "44b3394e0586c126ee95129c65e6692ffc01fa8e" - name: oti64111_pci.zip + path: "mame/bios/oti64111_pci.zip" standalone_path: "oti64111_pci.zip" required: false category: bios_zip @@ -26048,6 +27098,7 @@ files: sha1: "16826d93bc2a09d91b52cca3f72447501daee2d2" - name: p1_fdc.zip + path: "mame/bios/p1_fdc.zip" standalone_path: "p1_fdc.zip" required: false category: bios_zip @@ -26079,6 +27130,7 @@ files: sha1: "b188ba856bd28e4964a88feb0b0b2ba7eb320efc" - name: p1_hdc.zip + path: "mame/bios/p1_hdc.zip" standalone_path: "p1_hdc.zip" required: false category: bios_zip @@ -26110,6 +27162,7 @@ files: sha1: "5cf2ae0ec1fa3edb3fe882c805da0bbc3ac21792" - name: p1_rom.zip + path: "mame/bios/p1_rom.zip" standalone_path: "p1_rom.zip" required: false category: bios_zip @@ -26135,6 +27188,7 @@ files: sha1: "f2d1a6c90e4708bcc56186b2fb906fa852667084" - name: p72.zip + path: "mame/bios/p72.zip" standalone_path: "p72.zip" required: false category: bios_zip @@ -26168,6 +27222,7 @@ files: sha1: "10430f1d3b73ad413d77053515d9d53831a1341b" - name: pa7246.zip + path: "mame/bios/pa7246.zip" standalone_path: "pa7246.zip" required: false category: bios_zip @@ -26183,6 +27238,7 @@ files: sha1: "5c21cf1f241ef1fa0b41009ea41e81771729785f" - name: partner_gdp.zip + path: "mame/bios/partner_gdp.zip" standalone_path: "partner_gdp.zip" required: false category: bios_zip @@ -26198,6 +27254,7 @@ files: sha1: "7c7c2d855fdfb90c86ed47c1b33c354c922ed4d0" - name: pc1512kb.zip + path: "mame/bios/pc1512kb.zip" standalone_path: "pc1512kb.zip" required: false category: bios_zip @@ -26213,6 +27270,7 @@ files: sha1: "4422c6475596c3881c11b6a6266811c336d55d19" - name: pc1640_iga.zip + path: "mame/bios/pc1640_iga.zip" standalone_path: "pc1640_iga.zip" required: false category: bios_zip @@ -26227,6 +27285,7 @@ files: sha1: "98302006ee38a17c09bd75504cc18c0649174e33" - name: pc6022.zip + path: "mame/bios/pc6022.zip" standalone_path: "pc6022.zip" required: false category: bios_zip @@ -26261,6 +27320,7 @@ files: sha1: "fab85e88566ffa10923dec3a1a6b0d8346bc69ec" - name: pc80s31.zip + path: "mame/bios/pc80s31.zip" standalone_path: "pc80s31.zip" required: false category: bios_zip @@ -26284,6 +27344,7 @@ files: sha1: "80da2dee49d4307f00895a129a5cfeff00cf5321" - name: pc80s31k.zip + path: "mame/bios/pc80s31k.zip" standalone_path: "pc80s31k.zip" required: false category: bios_zip @@ -26305,6 +27366,7 @@ files: sha1: "1492116f15c426f9796dc2bb6fcccf2656c0ca75" - name: pc88va2_fd_if.zip + path: "mame/bios/pc88va2_fd_if.zip" standalone_path: "pc88va2_fd_if.zip" required: false category: bios_zip @@ -26319,6 +27381,7 @@ files: sha1: "a9375aa480f85e1422a0e1385acb0ea170c5c2e0" - name: pc9801_14.zip + path: "mame/bios/pc9801_14.zip" standalone_path: "pc9801_14.zip" required: false category: bios_zip @@ -26338,6 +27401,7 @@ files: sha1: "5b014c5de1b8e41a412cafd61d7e9d18abdeb6be" - name: pc9801_26.zip + path: "mame/bios/pc9801_26.zip" standalone_path: "pc9801_26.zip" required: false category: bios_zip @@ -26370,6 +27434,7 @@ files: bad_dump: true - name: pc9801_27.zip + path: "mame/bios/pc9801_27.zip" standalone_path: "pc9801_27.zip" required: false category: bios_zip @@ -26385,6 +27450,7 @@ files: sha1: "b607707d74b5a7d3ba211825de31a8f32aec8146" - name: pc9801_55l.zip + path: "mame/bios/pc9801_55l.zip" standalone_path: "pc9801_55l.zip" required: false category: bios_zip @@ -26404,6 +27470,7 @@ files: sha1: "182bb45ba0da7a4f9113e268e04ffca8403cf164" - name: pc9801_55u.zip + path: "mame/bios/pc9801_55u.zip" standalone_path: "pc9801_55u.zip" required: false category: bios_zip @@ -26423,6 +27490,7 @@ files: sha1: "7781dab492df889148e070a7da7ead207e18ed04" - name: pc9801_86.zip + path: "mame/bios/pc9801_86.zip" standalone_path: "pc9801_86.zip" required: false category: bios_zip @@ -26446,6 +27514,7 @@ files: bad_dump: true - name: pc98_fdd_2dd.zip + path: "mame/bios/pc98_fdd_2dd.zip" standalone_path: "pc98_fdd_2dd.zip" required: false category: bios_zip @@ -26465,6 +27534,7 @@ files: sha1: "4160a6db096dbeff18e50cbee98f5d5c1a29e2d1" - name: pc98_fdd_2hd.zip + path: "mame/bios/pc98_fdd_2hd.zip" standalone_path: "pc98_fdd_2hd.zip" required: false category: bios_zip @@ -26481,6 +27551,7 @@ files: bad_dump: true - name: pc98_otomichan_kai.zip + path: "mame/bios/pc98_otomichan_kai.zip" standalone_path: "pc98_otomichan_kai.zip" required: false category: bios_zip @@ -26502,6 +27573,7 @@ files: bad_dump: true - name: pcd_kbd.zip + path: "mame/bios/pcd_kbd.zip" standalone_path: "pcd_kbd.zip" required: false category: bios_zip @@ -26517,6 +27589,7 @@ files: sha1: "3d6140764d3d043428c941826370ebf1597c63bd" - name: pcd_video.zip + path: "mame/bios/pcd_video.zip" standalone_path: "pcd_video.zip" required: false category: bios_zip @@ -26531,6 +27604,7 @@ files: sha1: "98b9cd0f38c51b4988a3aed0efcf004bedd115ff" - name: pcx_video.zip + path: "mame/bios/pcx_video.zip" standalone_path: "pcx_video.zip" required: false category: bios_zip @@ -26553,6 +27627,7 @@ files: sha1: "145a6648d75c1dc4788f9bc7790281ef7e8f8426" - name: pd32.zip + path: "mame/bios/pd32.zip" standalone_path: "pd32.zip" required: false category: bios_zip @@ -26575,6 +27650,7 @@ files: sha1: "6a8b0e6cd27fd3a7d7ca870790c6793edf9de083" - name: pd3_30hr.zip + path: "mame/bios/pd3_30hr.zip" standalone_path: "pd3_30hr.zip" required: false category: bios_zip @@ -26592,6 +27668,7 @@ files: sha1: "be34c8604b8a1ae9c9f3b0b90faba9a1a64a5855" - name: pd3_30hrint.zip + path: "mame/bios/pd3_30hrint.zip" standalone_path: "pd3_30hrint.zip" required: false category: bios_zip @@ -26607,6 +27684,7 @@ files: sha1: "be34c8604b8a1ae9c9f3b0b90faba9a1a64a5855" - name: pd3_c264.zip + path: "mame/bios/pd3_c264.zip" standalone_path: "pd3_c264.zip" required: false category: bios_zip @@ -26624,6 +27702,7 @@ files: sha1: "0584deb38b402718f2abef456b0035b34fddb473" - name: pd3_lviw.zip + path: "mame/bios/pd3_lviw.zip" standalone_path: "pd3_lviw.zip" required: false category: bios_zip @@ -26641,6 +27720,7 @@ files: sha1: "1e58593b1a8720193d1651b0d8a0d43e4e47563d" - name: pd3_mclr.zip + path: "mame/bios/pd3_mclr.zip" standalone_path: "pd3_mclr.zip" required: false category: bios_zip @@ -26658,6 +27738,7 @@ files: sha1: "9141eb1a0e5061e0409d65a89b4eaeb119ee4ffb" - name: pd3_mclrint.zip + path: "mame/bios/pd3_mclrint.zip" standalone_path: "pd3_mclrint.zip" required: false category: bios_zip @@ -26673,6 +27754,7 @@ files: sha1: "9141eb1a0e5061e0409d65a89b4eaeb119ee4ffb" - name: pd3_pc16.zip + path: "mame/bios/pd3_pc16.zip" standalone_path: "pd3_pc16.zip" required: false category: bios_zip @@ -26690,6 +27772,7 @@ files: sha1: "e41ecc7d12fc13bc74f9223ca02920e8a7eb072b" - name: pd3_pcs8.zip + path: "mame/bios/pd3_pcs8.zip" standalone_path: "pd3_pcs8.zip" required: false category: bios_zip @@ -26705,6 +27788,7 @@ files: sha1: "ef2d7ad3309a0df16ec392a82110118830d276b5" - name: pdc20262.zip + path: "mame/bios/pdc20262.zip" standalone_path: "pdc20262.zip" required: false category: bios_zip @@ -26728,6 +27812,7 @@ files: sha1: "ace4872c6060e9dd8458540c0f3193d1a9b4321a" - name: pdc20268.zip + path: "mame/bios/pdc20268.zip" standalone_path: "pdc20268.zip" required: false category: bios_zip @@ -26746,6 +27831,7 @@ files: sha1: "7303819fee09922db5fd0d9632b0e1734cb70fb5" - name: pds30_emac.zip + path: "mame/bios/pds30_emac.zip" standalone_path: "pds30_emac.zip" required: false category: bios_zip @@ -26763,6 +27849,7 @@ files: sha1: "65a8e87180a793cd54d30930cc030b95723369f1" - name: pds_hyper.zip + path: "mame/bios/pds_hyper.zip" standalone_path: "pds_hyper.zip" required: false category: bios_zip @@ -26781,6 +27868,7 @@ files: sha1: "4ebe1ead72064c470b7262c14e7e6887643816bf" - name: pds_sefp.zip + path: "mame/bios/pds_sefp.zip" standalone_path: "pds_sefp.zip" required: false category: bios_zip @@ -26802,6 +27890,7 @@ files: sha1: "4673d9f341766c49ff1264b7819916e28a20518f" - name: pdslc_macconlc.zip + path: "mame/bios/pdslc_macconlc.zip" standalone_path: "pdslc_macconlc.zip" required: false category: bios_zip @@ -26819,6 +27908,7 @@ files: sha1: "317255bcb552ef43f43f85109706ed860baaf6dc" - name: pencil2_coleco.zip + path: "mame/bios/pencil2_coleco.zip" standalone_path: "pencil2_coleco.zip" required: false category: bios_zip @@ -26834,6 +27924,7 @@ files: sha1: "ca889d41ea41a781edde7eb004ab530043fbc1a7" - name: permedia2.zip + path: "mame/bios/permedia2.zip" standalone_path: "permedia2.zip" required: false category: bios_zip @@ -26869,6 +27960,7 @@ files: sha1: "9f02e4d1a64c42e4a17df8428d8cc9a72e78e0d5" - name: pet_superpet.zip + path: "mame/bios/pet_superpet.zip" standalone_path: "pet_superpet.zip" required: false category: bios_zip @@ -26903,6 +27995,7 @@ files: sha1: "9b4a5134d20345171e7303445f87c4e0b9addc96" - name: pg200.zip + path: "mame/bios/pg200.zip" standalone_path: "pg200.zip" required: false category: bios_zip @@ -26918,6 +28011,7 @@ files: sha1: "145e12e5cf22b6db4958651a04d892f4a4215bb1" - name: plg100_vl.zip + path: "mame/bios/plg100_vl.zip" standalone_path: "plg100_vl.zip" required: false category: bios_zip @@ -26932,6 +28026,7 @@ files: sha1: "13d54c33a4708c77de2dc1e02210da107add6ce6" - name: plg150_ap.zip + path: "mame/bios/plg150_ap.zip" standalone_path: "plg150_ap.zip" required: false category: bios_zip @@ -26954,6 +28049,7 @@ files: sha1: "c0b5dfb1fbb5a3ddd33e6303039fbc197478abd2" - name: polyvti.zip + path: "mame/bios/polyvti.zip" standalone_path: "polyvti.zip" required: false category: bios_zip @@ -26969,6 +28065,7 @@ files: sha1: "7b9fee0c8ef2605b85d12b6d9fe8feb82418c63a" - name: pr8210.zip + path: "mame/bios/pr8210.zip" standalone_path: "pr8210.zip" required: false category: bios_zip @@ -26983,6 +28080,7 @@ files: sha1: "b514326ca1f52d6d89056868f9d17eabd4e3f31d" - name: prav8ckb.zip + path: "mame/bios/prav8ckb.zip" standalone_path: "prav8ckb.zip" required: false category: bios_zip @@ -26998,6 +28096,7 @@ files: sha1: "f4bb44507889fd06d9e952aeb6c44be66ec6f8e9" - name: premier_fdc.zip + path: "mame/bios/premier_fdc.zip" standalone_path: "premier_fdc.zip" required: false category: bios_zip @@ -27012,6 +28111,7 @@ files: sha1: "eb686ce6afe63e4d4011b333a882ca812c69307f" - name: profighterq.zip + path: "mame/bios/profighterq.zip" standalone_path: "profighterq.zip" required: false category: bios_zip @@ -27063,6 +28163,7 @@ files: sha1: "d9c0a7a2c466fa1fcc1680ee5dc3777714c05fe5" - name: profighterqa.zip + path: "mame/bios/profighterqa.zip" standalone_path: "profighterqa.zip" required: false category: bios_zip @@ -27118,6 +28219,7 @@ files: sha1: "bdf291d2e3601d7b48c348b1d99b8872b1b4fedd" - name: profighterqb.zip + path: "mame/bios/profighterqb.zip" standalone_path: "profighterqb.zip" required: false category: bios_zip @@ -27161,6 +28263,7 @@ files: sha1: "d83dc1b50771f5d8b68293c85b0b94e257521bd3" - name: profighterx.zip + path: "mame/bios/profighterx.zip" standalone_path: "profighterx.zip" required: false category: bios_zip @@ -27212,6 +28315,7 @@ files: sha1: "51f461756668a51e4f9b800168412dab26cd5ca9" - name: promotion3210.zip + path: "mame/bios/promotion3210.zip" standalone_path: "promotion3210.zip" required: false category: bios_zip @@ -27230,6 +28334,7 @@ files: sha1: "bd43f05ae7ddb4bbf515132b72b32719b60e6950" - name: ps2_keybc.zip + path: "mame/bios/ps2_keybc.zip" standalone_path: "ps2_keybc.zip" required: false category: bios_zip @@ -27251,6 +28356,7 @@ files: sha1: "ac45a4d0f30b046ada300f1d105bcf0fb2db318a" - name: psion_3fax.zip + path: "mame/bios/psion_3fax.zip" standalone_path: "psion_3fax.zip" required: false category: bios_zip @@ -27265,6 +28371,7 @@ files: sha1: "85d6f7e3cd316be5f49e7dd25755673144fce3d7" - name: psion_3link_ser.zip + path: "mame/bios/psion_3link_ser.zip" standalone_path: "psion_3link_ser.zip" required: false category: bios_zip @@ -27280,6 +28387,7 @@ files: sha1: "11cab06779ea19f109970dfa641b89f0121bfd95" - name: psx_cd.zip + path: "mame/bios/psx_cd.zip" standalone_path: "psx_cd.zip" required: false category: bios_zip @@ -27365,6 +28473,7 @@ files: sha1: "6fe45fd6fb96b12a25a45f39b5efd0be5e3f3e86" - name: psxgboost.zip + path: "mame/bios/psxgboost.zip" standalone_path: "psxgboost.zip" required: false category: bios_zip @@ -27380,6 +28489,7 @@ files: sha1: "c20ab073f61242f37665f12199b95cfa3a83e9fc" - name: pvga1a.zip + path: "mame/bios/pvga1a.zip" standalone_path: "pvga1a.zip" required: false category: bios_zip @@ -27419,6 +28529,7 @@ files: sha1: "d53d2a9aeffc7c41199fe91bc3d6d2e4d90173c8" - name: pvga1a_jk.zip + path: "mame/bios/pvga1a_jk.zip" standalone_path: "pvga1a_jk.zip" required: false category: bios_zip @@ -27484,6 +28595,7 @@ files: sha1: "218811ae3f58002eece74c4e444309d8a2a21836" - name: px320a.zip + path: "mame/bios/px320a.zip" standalone_path: "px320a.zip" required: false category: bios_zip @@ -27528,6 +28640,7 @@ files: sha1: "5b70f32e83d8c19d2895d38d0f7e15f2eee326fd" - name: qg640.zip + path: "mame/bios/qg640.zip" standalone_path: "qg640.zip" required: false category: bios_zip @@ -27549,6 +28662,7 @@ files: sha1: "815b195c37ca1053e5cddfa1efd4764c4550f4b5" - name: ql_cumanafdi.zip + path: "mame/bios/ql_cumanafdi.zip" standalone_path: "ql_cumanafdi.zip" required: false category: bios_zip @@ -27570,6 +28684,7 @@ files: sha1: "323120cd3e1eaa38f6d0ae74367a4835a5a2a011" - name: ql_gold.zip + path: "mame/bios/ql_gold.zip" standalone_path: "ql_gold.zip" required: false category: bios_zip @@ -27590,6 +28705,7 @@ files: sha1: "e80851fc536eef2b83c611e717e563b05bba8b3d" - name: ql_kdi.zip + path: "mame/bios/ql_kdi.zip" standalone_path: "ql_kdi.zip" required: false category: bios_zip @@ -27606,6 +28722,7 @@ files: sha1: "ff8158d25864d920f3f6df259167e91c2784692c" - name: ql_mhd.zip + path: "mame/bios/ql_mhd.zip" standalone_path: "ql_mhd.zip" required: false category: bios_zip @@ -27621,6 +28738,7 @@ files: sha1: "1beb87a207ecd0f47a43ed4b1bcc81d89ac75ffc" - name: ql_mpfdi.zip + path: "mame/bios/ql_mpfdi.zip" standalone_path: "ql_mpfdi.zip" required: false category: bios_zip @@ -27637,6 +28755,7 @@ files: sha1: "f9f5e5d55f3046f63b4eae59222b81290d626e72" - name: ql_opdbm.zip + path: "mame/bios/ql_opdbm.zip" standalone_path: "ql_opdbm.zip" required: false category: bios_zip @@ -27651,6 +28770,7 @@ files: sha1: "de485e89272e3b51086967333cda9de806ba3876" - name: ql_pcmlqdi.zip + path: "mame/bios/ql_pcmlqdi.zip" standalone_path: "ql_pcmlqdi.zip" required: false category: bios_zip @@ -27667,6 +28787,7 @@ files: sha1: "d2038f0b1a62e8e65ec86660d03c25489ce40274" - name: ql_qldisc.zip + path: "mame/bios/ql_qldisc.zip" standalone_path: "ql_qldisc.zip" required: false category: bios_zip @@ -27688,6 +28809,7 @@ files: sha1: "de8c5a4257107a4a41bc94c532cbfb7c65bfb472" - name: ql_qplus4.zip + path: "mame/bios/ql_qplus4.zip" standalone_path: "ql_qplus4.zip" required: false category: bios_zip @@ -27702,6 +28824,7 @@ files: sha1: "53d6828c1b6ba052b862fd80ac8a364b0078330d" - name: ql_qubide.zip + path: "mame/bios/ql_qubide.zip" standalone_path: "ql_qubide.zip" required: false category: bios_zip @@ -27735,6 +28858,7 @@ files: sha1: "4cf0da7ff5c7a950e8e13f8ed7125fff10ddda0d" - name: ql_sdisk.zip + path: "mame/bios/ql_sdisk.zip" standalone_path: "ql_sdisk.zip" required: false category: bios_zip @@ -27749,6 +28873,7 @@ files: sha1: "bf531758145ffd083e01c1cf9c45d0e9264a3b53" - name: ql_sqboard256.zip + path: "mame/bios/ql_sqboard256.zip" standalone_path: "ql_sqboard256.zip" required: false category: bios_zip @@ -27775,6 +28900,7 @@ files: sha1: "a3a233e4f6c8450055fa537601a2a2eef143edca" - name: ql_sqboard512.zip + path: "mame/bios/ql_sqboard512.zip" standalone_path: "ql_sqboard512.zip" required: false category: bios_zip @@ -27801,6 +28927,7 @@ files: sha1: "a3a233e4f6c8450055fa537601a2a2eef143edca" - name: ql_sqmouse.zip + path: "mame/bios/ql_sqmouse.zip" standalone_path: "ql_sqmouse.zip" required: false category: bios_zip @@ -27826,6 +28953,7 @@ files: sha1: "a3a233e4f6c8450055fa537601a2a2eef143edca" - name: ql_sqmouse512.zip + path: "mame/bios/ql_sqmouse512.zip" standalone_path: "ql_sqmouse512.zip" required: false category: bios_zip @@ -27852,6 +28980,7 @@ files: sha1: "a3a233e4f6c8450055fa537601a2a2eef143edca" - name: ql_trump.zip + path: "mame/bios/ql_trump.zip" standalone_path: "ql_trump.zip" required: false category: bios_zip @@ -27887,6 +29016,7 @@ files: sha1: "de0f67408021a3b33b3916514a5f81d9c8edad93" - name: ql_trump256.zip + path: "mame/bios/ql_trump256.zip" standalone_path: "ql_trump256.zip" required: false category: bios_zip @@ -27922,6 +29052,7 @@ files: sha1: "de0f67408021a3b33b3916514a5f81d9c8edad93" - name: ql_trump512.zip + path: "mame/bios/ql_trump512.zip" standalone_path: "ql_trump512.zip" required: false category: bios_zip @@ -27957,6 +29088,7 @@ files: sha1: "de0f67408021a3b33b3916514a5f81d9c8edad93" - name: ql_trump768.zip + path: "mame/bios/ql_trump768.zip" standalone_path: "ql_trump768.zip" required: false category: bios_zip @@ -27992,6 +29124,7 @@ files: sha1: "de0f67408021a3b33b3916514a5f81d9c8edad93" - name: qsound_hle.zip + path: "mame/bios/qsound_hle.zip" standalone_path: "qsound_hle.zip" required: false category: bios_zip @@ -28009,6 +29142,7 @@ files: sha1: "555f50fe5cdf127619da7d854c03f4a244a0c501" - name: qts1.zip + path: "mame/bios/qts1.zip" standalone_path: "qts1.zip" required: false category: bios_zip @@ -28032,6 +29166,7 @@ files: sha1: "05d97009b5b8034dda520f655c73c474da97f822" - name: quadro.zip + path: "mame/bios/quadro.zip" standalone_path: "quadro.zip" required: false category: bios_zip @@ -28053,6 +29188,7 @@ files: sha1: "006b72eb2bcb549686e4e39f8ca17972435178e4" - name: qvision_wavestar.zip + path: "mame/bios/qvision_wavestar.zip" standalone_path: "qvision_wavestar.zip" required: false category: bios_zip @@ -28069,6 +29205,7 @@ files: sha1: "0b32c371cc0fe17acbd7c566e707fd6687f5e7ae" - name: qx10_keyboard_ascii.zip + path: "mame/bios/qx10_keyboard_ascii.zip" standalone_path: "qx10_keyboard_ascii.zip" required: false category: bios_zip @@ -28084,6 +29221,7 @@ files: sha1: "26b7f447acfe2c605dbe0fc98e6c777f0fa8a94d" - name: qx10_keyboard_hasci.zip + path: "mame/bios/qx10_keyboard_hasci.zip" standalone_path: "qx10_keyboard_hasci.zip" required: false category: bios_zip @@ -28099,6 +29237,7 @@ files: sha1: "26b7f447acfe2c605dbe0fc98e6c777f0fa8a94d" - name: rageiidvd.zip + path: "mame/bios/rageiidvd.zip" standalone_path: "rageiidvd.zip" required: false category: bios_zip @@ -28125,6 +29264,7 @@ files: sha1: "a068ef73d56b5fc200076283d32676b818404f1b" - name: rc2014_micro.zip + path: "mame/bios/rc2014_micro.zip" standalone_path: "rc2014_micro.zip" required: false category: bios_zip @@ -28140,6 +29280,7 @@ files: sha1: "40a030b931ebe6cca654ce056c228297f245b057" - name: rc2014_mini_cpm.zip + path: "mame/bios/rc2014_mini_cpm.zip" standalone_path: "rc2014_mini_cpm.zip" required: false category: bios_zip @@ -28155,6 +29296,7 @@ files: sha1: "c96e9ebd6ce019c264aaea156532fcf807d4c74c" - name: rc2014_pagable_rom.zip + path: "mame/bios/rc2014_pagable_rom.zip" standalone_path: "rc2014_pagable_rom.zip" required: false category: bios_zip @@ -28176,6 +29318,7 @@ files: sha1: "ff5b3873abdcbe8ab48f62a9dbdf39314b938e89" - name: rc2014_rom_ram_512k.zip + path: "mame/bios/rc2014_rom_ram_512k.zip" standalone_path: "rc2014_rom_ram_512k.zip" required: false category: bios_zip @@ -28247,6 +29390,7 @@ files: sha1: "5c642cb3113bc0a51562dc92c8b46bde414adb6c" - name: rc2014_switchable_rom.zip + path: "mame/bios/rc2014_switchable_rom.zip" standalone_path: "rc2014_switchable_rom.zip" required: false category: bios_zip @@ -28283,6 +29427,7 @@ files: sha1: "0077ab5e669da6e95ed2f66c9e759067c4236e36" - name: riva128.zip + path: "mame/bios/riva128.zip" standalone_path: "riva128.zip" required: false category: bios_zip @@ -28309,6 +29454,7 @@ files: sha1: "894c855c6d676de0d04d396f7e93a0e6cb98a4b3" - name: riva128zx.zip + path: "mame/bios/riva128zx.zip" standalone_path: "riva128zx.zip" required: false category: bios_zip @@ -28335,6 +29481,7 @@ files: sha1: "7126c4c4d20c48848defc5dd05f0d5b698948015" - name: rivatnt.zip + path: "mame/bios/rivatnt.zip" standalone_path: "rivatnt.zip" required: false category: bios_zip @@ -28366,6 +29513,7 @@ files: sha1: "602ba5812e608bb7275336e9abab4b822f7b1b98" - name: rivatnt2.zip + path: "mame/bios/rivatnt2.zip" standalone_path: "rivatnt2.zip" required: false category: bios_zip @@ -28387,6 +29535,7 @@ files: sha1: "709632adf1e156fab3af0723b73a1e6c2c39e987" - name: rivatnt2_m64.zip + path: "mame/bios/rivatnt2_m64.zip" standalone_path: "rivatnt2_m64.zip" required: false category: bios_zip @@ -28453,6 +29602,7 @@ files: sha1: "529a79296c914a2dcdd568221b9aac914869bade" - name: rivatnt2_ultra.zip + path: "mame/bios/rivatnt2_ultra.zip" standalone_path: "rivatnt2_ultra.zip" required: false category: bios_zip @@ -28469,6 +29619,7 @@ files: sha1: "733d8c3f179f89f0e238ffb95717c0fafd1053aa" - name: rm_mq2.zip + path: "mame/bios/rm_mq2.zip" standalone_path: "rm_mq2.zip" required: false category: bios_zip @@ -28484,6 +29635,7 @@ files: sha1: "ba523af357b61bbe6192727139850f36597d79f1" - name: robotron_k7070.zip + path: "mame/bios/robotron_k7070.zip" standalone_path: "robotron_k7070.zip" required: false category: bios_zip @@ -28509,6 +29661,7 @@ files: sha1: "62516f2e1cb62698445f80fd823d39a1a78a7807" - name: robotron_k7071.zip + path: "mame/bios/robotron_k7071.zip" standalone_path: "robotron_k7071.zip" required: false category: bios_zip @@ -28531,6 +29684,7 @@ files: sha1: "8428e344df95451a34ad01322e245d2357712010" - name: rolm_pdc.zip + path: "mame/bios/rolm_pdc.zip" standalone_path: "rolm_pdc.zip" required: false category: bios_zip @@ -28545,6 +29699,7 @@ files: sha1: "e1a465c2274a63e81dba7a71fc8b30f10c03baf0" - name: rolm_smioc.zip + path: "mame/bios/rolm_smioc.zip" standalone_path: "rolm_smioc.zip" required: false category: bios_zip @@ -28559,6 +29714,7 @@ files: sha1: "8ee9879033623490ce6703ba5429af2b16dbae84" - name: rt1000b.zip + path: "mame/bios/rt1000b.zip" standalone_path: "rt1000b.zip" required: false category: bios_zip @@ -28577,6 +29733,7 @@ files: sha1: "4a5b2219b9ea5bfbeefaf6b958f4095c53c0e8b4" - name: rtpc_kbd.zip + path: "mame/bios/rtpc_kbd.zip" standalone_path: "rtpc_kbd.zip" required: false category: bios_zip @@ -28591,6 +29748,7 @@ files: sha1: "d7305e978e9c047a34d2c26176ce7ac0467f1219" - name: rtpc_kls.zip + path: "mame/bios/rtpc_kls.zip" standalone_path: "rtpc_kls.zip" required: false category: bios_zip @@ -28606,6 +29764,7 @@ files: sha1: "83858109c39d5be37e49f24d1db4e2b15f38843e" - name: rx01.zip + path: "mame/bios/rx01.zip" standalone_path: "rx01.zip" required: false category: bios_zip @@ -28665,6 +29824,7 @@ files: sha1: "abf87d731213e51413c6ef3172f14353da36e791" - name: s100_am310.zip + path: "mame/bios/s100_am310.zip" standalone_path: "s100_am310.zip" required: false category: bios_zip @@ -28680,6 +29840,7 @@ files: sha1: "20716814381eb751261ee0607f3efff0d5375bd5" - name: s100_djdma.zip + path: "mame/bios/s100_djdma.zip" standalone_path: "s100_djdma.zip" required: false category: bios_zip @@ -28711,6 +29872,7 @@ files: sha1: "1e58dfb7b8a2a5bbaa6589d4018042626fd5ceaf" - name: s100_nsmdsa.zip + path: "mame/bios/s100_nsmdsa.zip" standalone_path: "s100_nsmdsa.zip" required: false category: bios_zip @@ -28726,6 +29888,7 @@ files: bad_dump: true - name: s100_nsmdsad.zip + path: "mame/bios/s100_nsmdsad.zip" standalone_path: "s100_nsmdsad.zip" required: false category: bios_zip @@ -28740,6 +29903,7 @@ files: sha1: "bf1552c4818f30473798af4f54e65e1957e0db48" - name: s100_sj2db.zip + path: "mame/bios/s100_sj2db.zip" standalone_path: "s100_sj2db.zip" required: false category: bios_zip @@ -28755,6 +29919,7 @@ files: sha1: "e4b2ae886c0dd7717e2e02ae2e202115d8ec2def" - name: s1410.zip + path: "mame/bios/s1410.zip" standalone_path: "s1410.zip" required: false category: bios_zip @@ -28781,6 +29946,7 @@ files: sha1: "bf68e99dad182bfcbb5d488aeb440cba572a6ef8" - name: s3_764.zip + path: "mame/bios/s3_764.zip" standalone_path: "s3_764.zip" required: false category: bios_zip @@ -28800,6 +29966,7 @@ files: sha1: "c77b3f11cc15679121314823588887dd547cd715" - name: s8k_cpu.zip + path: "mame/bios/s8k_cpu.zip" standalone_path: "s8k_cpu.zip" required: false category: bios_zip @@ -28875,6 +30042,7 @@ files: sha1: "c2ab2bfaf21d60f69ea7ede01a929ac46511061b" - name: s8k_cpu10.zip + path: "mame/bios/s8k_cpu10.zip" standalone_path: "s8k_cpu10.zip" required: false category: bios_zip @@ -28902,6 +30070,7 @@ files: sha1: "86569a6c8649f691acbf7d42a825bde105460f55" - name: s8k_hpcpu.zip + path: "mame/bios/s8k_hpcpu.zip" standalone_path: "s8k_hpcpu.zip" required: false category: bios_zip @@ -28920,6 +30089,7 @@ files: sha1: "bc804e09cf6905c9f0ccc502a15c98841ee4b087" - name: s97269pb.zip + path: "mame/bios/s97269pb.zip" standalone_path: "s97269pb.zip" required: false category: bios_zip @@ -28943,6 +30113,7 @@ files: sha1: "5f4de97cfe6fe39da75761e0f434de28d30f3e3b" - name: s97801_device.zip + path: "mame/bios/s97801_device.zip" standalone_path: "s97801_device.zip" required: false category: bios_zip @@ -28987,6 +30158,7 @@ files: sha1: "649abcfde9752f427ec7d1efdc013a4f01dc271c" - name: s97801_kbd.zip + path: "mame/bios/s97801_kbd.zip" standalone_path: "s97801_kbd.zip" required: false category: bios_zip @@ -29023,6 +30195,7 @@ files: sha1: "970a45b509081603e25319e1bbf0f7941f91a056" - name: s_smp.zip + path: "mame/bios/s_smp.zip" standalone_path: "s_smp.zip" required: false category: bios_zip @@ -29041,6 +30214,7 @@ files: sha1: "97e352553e94242ae823547cd853eecda55c20f0" - name: saa5051.zip + path: "mame/bios/saa5051.zip" standalone_path: "saa5051.zip" required: false category: bios_zip @@ -29056,6 +30230,7 @@ files: bad_dump: true - name: saa5052.zip + path: "mame/bios/saa5052.zip" standalone_path: "saa5052.zip" required: false category: bios_zip @@ -29072,6 +30247,7 @@ files: bad_dump: true - name: saa5053.zip + path: "mame/bios/saa5053.zip" standalone_path: "saa5053.zip" required: false category: bios_zip @@ -29087,6 +30263,7 @@ files: bad_dump: true - name: saa5054.zip + path: "mame/bios/saa5054.zip" standalone_path: "saa5054.zip" required: false category: bios_zip @@ -29102,6 +30279,7 @@ files: bad_dump: true - name: saa5055.zip + path: "mame/bios/saa5055.zip" standalone_path: "saa5055.zip" required: false category: bios_zip @@ -29118,6 +30296,7 @@ files: bad_dump: true - name: saa5056.zip + path: "mame/bios/saa5056.zip" standalone_path: "saa5056.zip" required: false category: bios_zip @@ -29133,6 +30312,7 @@ files: bad_dump: true - name: saa5057.zip + path: "mame/bios/saa5057.zip" standalone_path: "saa5057.zip" required: false category: bios_zip @@ -29148,6 +30328,7 @@ files: bad_dump: true - name: saa5240a.zip + path: "mame/bios/saa5240a.zip" standalone_path: "saa5240a.zip" required: false category: bios_zip @@ -29163,6 +30344,7 @@ files: bad_dump: true - name: saa5240b.zip + path: "mame/bios/saa5240b.zip" standalone_path: "saa5240b.zip" required: false category: bios_zip @@ -29178,6 +30360,7 @@ files: bad_dump: true - name: saa5243e.zip + path: "mame/bios/saa5243e.zip" standalone_path: "saa5243e.zip" required: false category: bios_zip @@ -29192,6 +30375,7 @@ files: bad_dump: true - name: sad8852.zip + path: "mame/bios/sad8852.zip" standalone_path: "sad8852.zip" required: false category: bios_zip @@ -29210,6 +30394,7 @@ files: sha1: "7a3d43e6b1f6fcd4402c54aaacf169ac74141cd2" - name: satcdb.zip + path: "mame/bios/satcdb.zip" standalone_path: "satcdb.zip" required: false category: bios_zip @@ -29236,6 +30421,7 @@ files: sha1: "f4f6c2aac68c352814d396ae41f81f54ad228e68" - name: sb300p.zip + path: "mame/bios/sb300p.zip" standalone_path: "sb300p.zip" required: false category: bios_zip @@ -29251,6 +30437,7 @@ files: sha1: "1c6006fb8cb555eff0cb7c2783c776d05c6797f8" - name: sbus_hme.zip + path: "mame/bios/sbus_hme.zip" standalone_path: "sbus_hme.zip" required: false category: bios_zip @@ -29266,6 +30453,7 @@ files: sha1: "b54bb0f01c45accdbc58c3a86f8de34949374880" - name: sbus_sunpc.zip + path: "mame/bios/sbus_sunpc.zip" standalone_path: "sbus_sunpc.zip" required: false category: bios_zip @@ -29281,6 +30469,7 @@ files: sha1: "21c4c02bc5a3a0494301f19c54ba0e207568fb42" - name: sc119.zip + path: "mame/bios/sc119.zip" standalone_path: "sc119.zip" required: false category: bios_zip @@ -29307,6 +30496,7 @@ files: sha1: "cf4ad058931f0297fd2f8f81d15eb83ecbd29376" - name: scorpion_ic.zip + path: "mame/bios/scorpion_ic.zip" standalone_path: "scorpion_ic.zip" required: false category: bios_zip @@ -29344,6 +30534,7 @@ files: sha1: "91c273c94cd0dbca655e192dd01ac6dc3a4f60a8" - name: sdtandy_fdc.zip + path: "mame/bios/sdtandy_fdc.zip" standalone_path: "sdtandy_fdc.zip" required: false category: bios_zip @@ -29358,6 +30549,7 @@ files: sha1: "ca03942118f2deab2f6c8a89b8a4f41f2d0b94f1" - name: sed1200da.zip + path: "mame/bios/sed1200da.zip" standalone_path: "sed1200da.zip" required: false category: bios_zip @@ -29373,6 +30565,7 @@ files: sha1: "086406eb74e9ed97b309d2a4bdedc567626e9a98" - name: sed1200db.zip + path: "mame/bios/sed1200db.zip" standalone_path: "sed1200db.zip" required: false category: bios_zip @@ -29388,6 +30581,7 @@ files: sha1: "c8c856f1357286a2c8c806af81724a828345357e" - name: sed1200fa.zip + path: "mame/bios/sed1200fa.zip" standalone_path: "sed1200fa.zip" required: false category: bios_zip @@ -29402,6 +30596,7 @@ files: sha1: "086406eb74e9ed97b309d2a4bdedc567626e9a98" - name: sed1200fb.zip + path: "mame/bios/sed1200fb.zip" standalone_path: "sed1200fb.zip" required: false category: bios_zip @@ -29416,6 +30611,7 @@ files: sha1: "c8c856f1357286a2c8c806af81724a828345357e" - name: sed1278.zip + path: "mame/bios/sed1278.zip" standalone_path: "sed1278.zip" required: false category: bios_zip @@ -29439,6 +30635,7 @@ files: bad_dump: true - name: sega837_14438.zip + path: "mame/bios/sega837_14438.zip" standalone_path: "sega837_14438.zip" required: false category: bios_zip @@ -29458,6 +30655,7 @@ files: sha1: "ea1a32c4da1ed9745300bcdd7964a7c0964e3221" - name: sega_sp400.zip + path: "mame/bios/sega_sp400.zip" standalone_path: "sega_sp400.zip" required: false category: bios_zip @@ -29477,6 +30675,7 @@ files: sha1: "65016f3b022af30cc6b084af1e43b29168721a60" - name: segabill.zip + path: "mame/bios/segabill.zip" standalone_path: "segabill.zip" required: false category: bios_zip @@ -29493,6 +30692,7 @@ files: sha1: "edf5ade72d9fa2f4d5f83f9f89e6cecfadd77f56" - name: segadimm.zip + path: "mame/bios/segadimm.zip" standalone_path: "segadimm.zip" required: false category: bios_zip @@ -29580,6 +30780,7 @@ files: sha1: "1e39983779a62ebc6801ec6f2a5138717a7a5259" - name: seganetw.zip + path: "mame/bios/seganetw.zip" standalone_path: "seganetw.zip" required: false category: bios_zip @@ -29594,6 +30795,7 @@ files: sha1: "45d94d0c39be1cb3db9fab6610a88a550adda4e9" - name: sente6vb.zip + path: "mame/bios/sente6vb.zip" standalone_path: "sente6vb.zip" required: false category: bios_zip @@ -29609,6 +30811,7 @@ files: sha1: "f0c447adc5b67917851a9df978df851247e75c43" - name: serad.zip + path: "mame/bios/serad.zip" standalone_path: "serad.zip" required: false category: bios_zip @@ -29624,6 +30827,7 @@ files: sha1: "6a1c2d351d5552d54d835b7726b3f9b921605d0e" - name: sfd1001.zip + path: "mame/bios/sfd1001.zip" standalone_path: "sfd1001.zip" required: false category: bios_zip @@ -29654,6 +30858,7 @@ files: sha1: "3b954eb34f7ea088eed1d33ebc6d6e83a3e9be15" - name: sgi_gm1.zip + path: "mame/bios/sgi_gm1.zip" standalone_path: "sgi_gm1.zip" required: false category: bios_zip @@ -29668,6 +30873,7 @@ files: sha1: "ad22a07d0a57b012e708b38216b7f3e600e12597" - name: sgi_ip2.zip + path: "mame/bios/sgi_ip2.zip" standalone_path: "sgi_ip2.zip" required: false category: bios_zip @@ -29698,6 +30904,7 @@ files: sha1: "32907201621ef128c4150721570085c554df918e" - name: sgi_ip4.zip + path: "mame/bios/sgi_ip4.zip" standalone_path: "sgi_ip4.zip" required: false category: bios_zip @@ -29752,6 +30959,7 @@ files: sha1: "aceb115a2f4d2e3a229b2c2c3b20314674113705" - name: sgi_kbd.zip + path: "mame/bios/sgi_kbd.zip" standalone_path: "sgi_kbd.zip" required: false category: bios_zip @@ -29766,6 +30974,7 @@ files: sha1: "a000a2b29e8629c686b29a5af22beedcc94710dc" - name: sgi_pm1.zip + path: "mame/bios/sgi_pm1.zip" standalone_path: "sgi_pm1.zip" required: false category: bios_zip @@ -29796,6 +31005,7 @@ files: sha1: "ec2827ec430af78446ec1c11a99742ae3be59521" - name: sgi_pm2.zip + path: "mame/bios/sgi_pm2.zip" standalone_path: "sgi_pm2.zip" required: false category: bios_zip @@ -29827,6 +31037,7 @@ files: sha1: "1cab5ce1c7df43ebeffab04b388d2e07c9853f8f" - name: side116.zip + path: "mame/bios/side116.zip" standalone_path: "side116.zip" required: false category: bios_zip @@ -29845,6 +31056,7 @@ files: sha1: "a5b130a6d17c972d6c378cb2cd8113a4039631fe" - name: simutrek.zip + path: "mame/bios/simutrek.zip" standalone_path: "simutrek.zip" required: false category: bios_zip @@ -29864,6 +31076,7 @@ files: sha1: "1eb3467f1c41553375b2c21952cd593b167f5416" - name: sis630_gui.zip + path: "mame/bios/sis630_gui.zip" standalone_path: "sis630_gui.zip" required: false category: bios_zip @@ -29886,6 +31099,7 @@ files: bad_dump: true - name: sis6326_agp.zip + path: "mame/bios/sis6326_agp.zip" standalone_path: "sis6326_agp.zip" required: false category: bios_zip @@ -29911,6 +31125,7 @@ files: sha1: "332ab9499142e8f7a235afe046e8e8d21a28580d" - name: sis6326_dvd.zip + path: "mame/bios/sis6326_dvd.zip" standalone_path: "sis6326_dvd.zip" required: false category: bios_zip @@ -29926,6 +31141,7 @@ files: sha1: "7566f1483c3e963762ef19b4deeb8fc24ccd217f" - name: sis6326_pci.zip + path: "mame/bios/sis6326_pci.zip" standalone_path: "sis6326_pci.zip" required: false category: bios_zip @@ -29953,6 +31169,7 @@ files: sha1: "7ce995ec0d8b9ac4f0f40ccd0a61d7fc209d313f" - name: sis900_eth.zip + path: "mame/bios/sis900_eth.zip" standalone_path: "sis900_eth.zip" required: false category: bios_zip @@ -29969,6 +31186,7 @@ files: bad_dump: true - name: smoc501.zip + path: "mame/bios/smoc501.zip" standalone_path: "smoc501.zip" required: false category: bios_zip @@ -29993,6 +31211,7 @@ files: sha1: "96c73a3a2ecdc8c903e920f2afba5b4edd5cdba6" - name: sms_diypaddle.zip + path: "mame/bios/sms_diypaddle.zip" standalone_path: "sms_diypaddle.zip" required: false category: bios_zip @@ -30010,6 +31229,7 @@ files: sha1: "dd9e20f2447c43dbe29a49bb3a4fd8049775acd3" - name: smvme2000.zip + path: "mame/bios/smvme2000.zip" standalone_path: "smvme2000.zip" required: false category: bios_zip @@ -30041,6 +31261,7 @@ files: sha1: "78427f7b9a6f676945c2cdb90632a16a619c83f9" - name: sn74s262.zip + path: "mame/bios/sn74s262.zip" standalone_path: "sn74s262.zip" required: false category: bios_zip @@ -30057,6 +31278,7 @@ files: bad_dump: true - name: sn74s263.zip + path: "mame/bios/sn74s263.zip" standalone_path: "sn74s263.zip" required: false category: bios_zip @@ -30073,6 +31295,7 @@ files: bad_dump: true - name: sns_dsp1bleg.zip + path: "mame/bios/sns_dsp1bleg.zip" standalone_path: "sns_dsp1bleg.zip" required: false category: bios_zip @@ -30087,6 +31310,7 @@ files: sha1: "3a218b0e4572a8eba6d0121b17fdac9529609220" - name: sns_dsp1leg.zip + path: "mame/bios/sns_dsp1leg.zip" standalone_path: "sns_dsp1leg.zip" required: false category: bios_zip @@ -30101,6 +31325,7 @@ files: sha1: "0a03ccb1fd2bea91151c745a4d1f217ae784f889" - name: sns_dsp1leg_hi.zip + path: "mame/bios/sns_dsp1leg_hi.zip" standalone_path: "sns_dsp1leg_hi.zip" required: false category: bios_zip @@ -30115,6 +31340,7 @@ files: sha1: "0a03ccb1fd2bea91151c745a4d1f217ae784f889" - name: sns_dsp2leg.zip + path: "mame/bios/sns_dsp2leg.zip" standalone_path: "sns_dsp2leg.zip" required: false category: bios_zip @@ -30129,6 +31355,7 @@ files: sha1: "06dd9fcb118d18f6bbe234e013cb8780e06d6e63" - name: sns_dsp3leg.zip + path: "mame/bios/sns_dsp3leg.zip" standalone_path: "sns_dsp3leg.zip" required: false category: bios_zip @@ -30143,6 +31370,7 @@ files: sha1: "1b133741fad810eb7320c21ecfdd427d25a46da1" - name: sns_dsp4leg.zip + path: "mame/bios/sns_dsp4leg.zip" standalone_path: "sns_dsp4leg.zip" required: false category: bios_zip @@ -30157,6 +31385,7 @@ files: sha1: "76fd25f7dc26c3b3f7868a3aa78c7684068713e5" - name: sns_rom_sgb.zip + path: "mame/bios/sns_rom_sgb.zip" standalone_path: "sns_rom_sgb.zip" required: false category: bios_zip @@ -30171,6 +31400,7 @@ files: sha1: "aa2f50a77dfb4823da96ba99309085a3c6278515" - name: sns_rom_sgb2.zip + path: "mame/bios/sns_rom_sgb2.zip" standalone_path: "sns_rom_sgb2.zip" required: false category: bios_zip @@ -30185,6 +31415,7 @@ files: sha1: "93407ea10d2f30ab96a314d8eca44fe160aea734" - name: sns_seta10leg.zip + path: "mame/bios/sns_seta10leg.zip" standalone_path: "sns_seta10leg.zip" required: false category: bios_zip @@ -30199,6 +31430,7 @@ files: sha1: "cc1984e989cb94e3dcbb5f99e085b5414e18a017" - name: sns_seta11leg.zip + path: "mame/bios/sns_seta11leg.zip" standalone_path: "sns_seta11leg.zip" required: false category: bios_zip @@ -30213,6 +31445,7 @@ files: sha1: "1375b8c1efc8cae4962b57dfe22f6b78e1ddacc8" - name: softcard3.zip + path: "mame/bios/softcard3.zip" standalone_path: "softcard3.zip" required: false category: bios_zip @@ -30228,6 +31461,7 @@ files: sha1: "aff45dd8850641b4616b61750c104e7ee45a99a4" - name: sound_orchestra.zip + path: "mame/bios/sound_orchestra.zip" standalone_path: "sound_orchestra.zip" required: false category: bios_zip @@ -30249,6 +31483,7 @@ files: bad_dump: true - name: spc1000_fdd_exp.zip + path: "mame/bios/spc1000_fdd_exp.zip" standalone_path: "spc1000_fdd_exp.zip" required: false category: bios_zip @@ -30264,6 +31499,7 @@ files: sha1: "8e9d8f63a7fb87af417e95603e71cf537a6e83f1" - name: speakboard.zip + path: "mame/bios/speakboard.zip" standalone_path: "speakboard.zip" required: false category: bios_zip @@ -30283,6 +31519,7 @@ files: sha1: "3def9ee386ab6c31436888261bded042cd64a0eb" - name: spectred_kbd.zip + path: "mame/bios/spectred_kbd.zip" standalone_path: "spectred_kbd.zip" required: false category: bios_zip @@ -30298,6 +31535,7 @@ files: sha1: "136c2b562999a6e340fe0e9a3776cea8c2e3647e" - name: spectrum_beta128.zip + path: "mame/bios/spectrum_beta128.zip" standalone_path: "spectrum_beta128.zip" required: false category: bios_zip @@ -30329,6 +31567,7 @@ files: sha1: "745e9caf576e64a5386ad845256d28593d34cc40" - name: spectrum_betacbi.zip + path: "mame/bios/spectrum_betacbi.zip" standalone_path: "spectrum_betacbi.zip" required: false category: bios_zip @@ -30365,6 +31604,7 @@ files: sha1: "3e5f7d43218b5bd2a6e2aa28220c77cb651f5daa" - name: spectrum_betaclone.zip + path: "mame/bios/spectrum_betaclone.zip" standalone_path: "spectrum_betaclone.zip" required: false category: bios_zip @@ -30406,6 +31646,7 @@ files: sha1: "cdbd0ac2262ede3852998174f88ae333419a570f" - name: spectrum_betaplus.zip + path: "mame/bios/spectrum_betaplus.zip" standalone_path: "spectrum_betaplus.zip" required: false category: bios_zip @@ -30452,6 +31693,7 @@ files: sha1: "bf8cee39eb4b2a09a3f07db4cb8e7952bce4d3dd" - name: spectrum_betav2.zip + path: "mame/bios/spectrum_betav2.zip" standalone_path: "spectrum_betav2.zip" required: false category: bios_zip @@ -30473,6 +31715,7 @@ files: sha1: "1c5ec9f56651ae527cdc092af1c602803104d5c3" - name: spectrum_betav3.zip + path: "mame/bios/spectrum_betav3.zip" standalone_path: "spectrum_betav3.zip" required: false category: bios_zip @@ -30499,6 +31742,7 @@ files: sha1: "9480e5402bb8611b88657107a8aad889f353071b" - name: spectrum_d40.zip + path: "mame/bios/spectrum_d40.zip" standalone_path: "spectrum_d40.zip" required: false category: bios_zip @@ -30519,6 +31763,7 @@ files: sha1: "b8473235feecff4eccbace56a90cf1d8c79506eb" - name: spectrum_d80.zip + path: "mame/bios/spectrum_d80.zip" standalone_path: "spectrum_d80.zip" required: false category: bios_zip @@ -30540,6 +31785,7 @@ files: sha1: "b8473235feecff4eccbace56a90cf1d8c79506eb" - name: spectrum_d80v2.zip + path: "mame/bios/spectrum_d80v2.zip" standalone_path: "spectrum_d80v2.zip" required: false category: bios_zip @@ -30556,6 +31802,7 @@ files: sha1: "e8d3355051fb287dd0dda34ba8824442130c8254" - name: spectrum_disciple.zip + path: "mame/bios/spectrum_disciple.zip" standalone_path: "spectrum_disciple.zip" required: false category: bios_zip @@ -30589,6 +31836,7 @@ files: sha1: "b872377ea9f91b29a811b0d484699ffe87bdf9fd" - name: spectrum_flpone.zip + path: "mame/bios/spectrum_flpone.zip" standalone_path: "spectrum_flpone.zip" required: false category: bios_zip @@ -30609,6 +31857,7 @@ files: sha1: "eb1d28bf8aa35bfab3a45a5827f252498ac2c651" - name: spectrum_gamma.zip + path: "mame/bios/spectrum_gamma.zip" standalone_path: "spectrum_gamma.zip" required: false category: bios_zip @@ -30625,6 +31874,7 @@ files: sha1: "dffeb9f47b3eca94afbb61373eba003efd4675ff" - name: spectrum_intf1.zip + path: "mame/bios/spectrum_intf1.zip" standalone_path: "spectrum_intf1.zip" required: false category: bios_zip @@ -30645,6 +31895,7 @@ files: sha1: "5cfb6bca4177c45fefd571734576b55e3a127c08" - name: spectrum_kempcentref.zip + path: "mame/bios/spectrum_kempcentref.zip" standalone_path: "spectrum_kempcentref.zip" required: false category: bios_zip @@ -30660,6 +31911,7 @@ files: sha1: "b26e9f720a215019b8710a4a094d6fde6ecae5fd" - name: spectrum_kempcentreu.zip + path: "mame/bios/spectrum_kempcentreu.zip" standalone_path: "spectrum_kempcentreu.zip" required: false category: bios_zip @@ -30675,6 +31927,7 @@ files: sha1: "6d0772e81cfd9bc994b1c91d4e01b45e0fc0d3d3" - name: spectrum_kempdisc.zip + path: "mame/bios/spectrum_kempdisc.zip" standalone_path: "spectrum_kempdisc.zip" required: false category: bios_zip @@ -30701,6 +31954,7 @@ files: sha1: "4a75fb4951d74e254c230d56b5566c924b3c38f6" - name: spectrum_lprint.zip + path: "mame/bios/spectrum_lprint.zip" standalone_path: "spectrum_lprint.zip" required: false category: bios_zip @@ -30715,6 +31969,7 @@ files: sha1: "3e4c7ecd8c3eb011cdf75eb23faf8d8ea8329757" - name: spectrum_lprint3.zip + path: "mame/bios/spectrum_lprint3.zip" standalone_path: "spectrum_lprint3.zip" required: false category: bios_zip @@ -30745,6 +32000,7 @@ files: sha1: "d9c0297c05e8092fb7e0198f4172d3d4e6ed252c" - name: spectrum_mface1.zip + path: "mame/bios/spectrum_mface1.zip" standalone_path: "spectrum_mface1.zip" required: false category: bios_zip @@ -30775,6 +32031,7 @@ files: sha1: "a7e03e7fee3aa05ce1501072aab4534ea7bae257" - name: spectrum_mface128.zip + path: "mame/bios/spectrum_mface128.zip" standalone_path: "spectrum_mface128.zip" required: false category: bios_zip @@ -30795,6 +32052,7 @@ files: sha1: "8df204ab490b87c389971ce0c7fb5f9cbd281f14" - name: spectrum_mface128v1.zip + path: "mame/bios/spectrum_mface128v1.zip" standalone_path: "spectrum_mface128v1.zip" required: false category: bios_zip @@ -30815,6 +32073,7 @@ files: sha1: "6cd6fd2c0fbb40a989a568db9d08ba8eed49cbbd" - name: spectrum_mface1v1.zip + path: "mame/bios/spectrum_mface1v1.zip" standalone_path: "spectrum_mface1v1.zip" required: false category: bios_zip @@ -30830,6 +32089,7 @@ files: sha1: "c3018d1b495b8bc0a135038db0987de7091c9d4c" - name: spectrum_mface1v2.zip + path: "mame/bios/spectrum_mface1v2.zip" standalone_path: "spectrum_mface1v2.zip" required: false category: bios_zip @@ -30845,6 +32105,7 @@ files: sha1: "b442eb634a72fb63f1ccbbd0021a7a581152888d" - name: spectrum_mface1v3.zip + path: "mame/bios/spectrum_mface1v3.zip" standalone_path: "spectrum_mface1v3.zip" required: false category: bios_zip @@ -30860,6 +32121,7 @@ files: sha1: "20cd508b0143166558a7238c7a9ccfbe37b90b0d" - name: spectrum_mface3.zip + path: "mame/bios/spectrum_mface3.zip" standalone_path: "spectrum_mface3.zip" required: false category: bios_zip @@ -30889,6 +32151,7 @@ files: sha1: "6573c2b8f55f66ef71ce3992f654080141e09739" - name: spectrum_mikroplus.zip + path: "mame/bios/spectrum_mikroplus.zip" standalone_path: "spectrum_mikroplus.zip" required: false category: bios_zip @@ -30904,6 +32167,7 @@ files: sha1: "66cc823587b520af9636eed7a342d69d3dd15123" - name: spectrum_mpoker.zip + path: "mame/bios/spectrum_mpoker.zip" standalone_path: "spectrum_mpoker.zip" required: false category: bios_zip @@ -30918,6 +32182,7 @@ files: sha1: "fd918519e4bd0eb8220d157a1c3f314669764657" - name: spectrum_mprint.zip + path: "mame/bios/spectrum_mprint.zip" standalone_path: "spectrum_mprint.zip" required: false category: bios_zip @@ -30938,6 +32203,7 @@ files: sha1: "1356bfae3264b952f83a33e25af536c0f13f50e7" - name: spectrum_opus.zip + path: "mame/bios/spectrum_opus.zip" standalone_path: "spectrum_opus.zip" required: false category: bios_zip @@ -30973,6 +32239,7 @@ files: sha1: "098a812c4707251f647553a2abc1436afa38f43c" - name: spectrum_plus2test.zip + path: "mame/bios/spectrum_plus2test.zip" standalone_path: "spectrum_plus2test.zip" required: false category: bios_zip @@ -30988,6 +32255,7 @@ files: sha1: "2ed54f8ccf1ef26045bb409bb86c859ee23e83d1" - name: spectrum_plusd.zip + path: "mame/bios/spectrum_plusd.zip" standalone_path: "spectrum_plusd.zip" required: false category: bios_zip @@ -31021,6 +32289,7 @@ files: sha1: "5142068ae01ff29979b08e6b322512750fbc6a04" - name: spectrum_proceed.zip + path: "mame/bios/spectrum_proceed.zip" standalone_path: "spectrum_proceed.zip" required: false category: bios_zip @@ -31037,6 +32306,7 @@ files: sha1: "c999b0e4f5537405ed56c4c96beca5e7f5eb2b1e" - name: spectrum_sdi.zip + path: "mame/bios/spectrum_sdi.zip" standalone_path: "spectrum_sdi.zip" required: false category: bios_zip @@ -31052,6 +32322,7 @@ files: sha1: "52405bb42e46a12b57806fd7f26691681afe2d8e" - name: spectrum_spdos.zip + path: "mame/bios/spectrum_spdos.zip" standalone_path: "spectrum_spdos.zip" required: false category: bios_zip @@ -31067,6 +32338,7 @@ files: sha1: "bb0706cf1538da8acd12b8c9cd2cd75ca689ec44" - name: spectrum_speccydos.zip + path: "mame/bios/spectrum_speccydos.zip" standalone_path: "spectrum_speccydos.zip" required: false category: bios_zip @@ -31093,6 +32365,7 @@ files: sha1: "e72d2ea19cbe8f3459e4fc9d3c57975dc9917bd6" - name: spectrum_specmate.zip + path: "mame/bios/spectrum_specmate.zip" standalone_path: "spectrum_specmate.zip" required: false category: bios_zip @@ -31107,6 +32380,7 @@ files: sha1: "c8f128610eeb5142d4d80f28e5dd07b7a5ab6b84" - name: spectrum_swiftdisc.zip + path: "mame/bios/spectrum_swiftdisc.zip" standalone_path: "spectrum_swiftdisc.zip" required: false category: bios_zip @@ -31128,6 +32402,7 @@ files: sha1: "5afe0364afedc83c03995d44914fe7f207fb5c28" - name: spectrum_swiftdisc2.zip + path: "mame/bios/spectrum_swiftdisc2.zip" standalone_path: "spectrum_swiftdisc2.zip" required: false category: bios_zip @@ -31157,6 +32432,7 @@ files: sha1: "2ad28d44bc33a50ed5f93f2520f25100dd36841d" - name: spectrum_usource.zip + path: "mame/bios/spectrum_usource.zip" standalone_path: "spectrum_usource.zip" required: false category: bios_zip @@ -31172,6 +32448,7 @@ files: sha1: "fae53678a85ba503b77ed2d877de2635b284eef1" - name: spectrum_uspeech.zip + path: "mame/bios/spectrum_uspeech.zip" standalone_path: "spectrum_uspeech.zip" required: false category: bios_zip @@ -31191,6 +32468,7 @@ files: sha1: "e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc" - name: spectrum_vtx5000.zip + path: "mame/bios/spectrum_vtx5000.zip" standalone_path: "spectrum_vtx5000.zip" required: false category: bios_zip @@ -31212,6 +32490,7 @@ files: sha1: "4490186845b198ca9191dd711bd38274cba6f04b" - name: spectrum_wafa.zip + path: "mame/bios/spectrum_wafa.zip" standalone_path: "spectrum_wafa.zip" required: false category: bios_zip @@ -31227,6 +32506,7 @@ files: sha1: "e979f9b1ada4a723ec69734c1848adbbf8d920c5" - name: st_kbd.zip + path: "mame/bios/st_kbd.zip" standalone_path: "st_kbd.zip" required: false category: bios_zip @@ -31242,6 +32522,7 @@ files: sha1: "1102f20d38f333234041c13687d82528b7cde2e1" - name: stereo_fx.zip + path: "mame/bios/stereo_fx.zip" standalone_path: "stereo_fx.zip" required: false category: bios_zip @@ -31260,6 +32541,7 @@ files: sha1: "e66c2619a6c05199554b5702d67877ae3799d415" - name: stic.zip + path: "mame/bios/stic.zip" standalone_path: "stic.zip" required: false category: bios_zip @@ -31274,6 +32556,7 @@ files: sha1: "f9608bb4ad1cfe3640d02844c7ad8e0bcd974917" - name: sun1_cpu.zip + path: "mame/bios/sun1_cpu.zip" standalone_path: "sun1_cpu.zip" required: false category: bios_zip @@ -31415,6 +32698,7 @@ files: sha1: "9b268792b28d858d6b6a1b6c4148af88a8d6b735" - name: sun_gem.zip + path: "mame/bios/sun_gem.zip" standalone_path: "sun_gem.zip" required: false category: bios_zip @@ -31430,6 +32714,7 @@ files: sha1: "b22046b8b574acf7818ebb00dc8d78c04c170ac0" - name: sv603.zip + path: "mame/bios/sv603.zip" standalone_path: "sv603.zip" required: false category: bios_zip @@ -31445,6 +32730,7 @@ files: sha1: "8a30abe5ffef810b0f99b86db38b1b3c9d259b78" - name: sv806.zip + path: "mame/bios/sv806.zip" standalone_path: "sv806.zip" required: false category: bios_zip @@ -31466,6 +32752,7 @@ files: sha1: "3f16d5513ad35692488ae7d864f660e76c6e8ed3" - name: sw1000xg.zip + path: "mame/bios/sw1000xg.zip" standalone_path: "sw1000xg.zip" required: false category: bios_zip @@ -31524,6 +32811,7 @@ files: sha1: "46a7a7225cd7e1818ba551325d2af5ac1bf5b2bf" - name: swp30.zip + path: "mame/bios/swp30.zip" standalone_path: "swp30.zip" required: false category: bios_zip @@ -31541,6 +32829,7 @@ files: sha1: "ab3aeacc7a6261cd77019d2f3febd2c21986bf46" - name: swtpc8212_device.zip + path: "mame/bios/swtpc8212_device.zip" standalone_path: "swtpc8212_device.zip" required: false category: bios_zip @@ -31588,6 +32877,7 @@ files: sha1: "813d2e85ddb258c5b032b959e695ad33200cbcc4" - name: sx1541.zip + path: "mame/bios/sx1541.zip" standalone_path: "sx1541.zip" required: false category: bios_zip @@ -31617,6 +32907,7 @@ files: sha1: "8e0547430135ba462525c224e76356bd3d430f11" - name: sys68k_cpu1.zip + path: "mame/bios/sys68k_cpu1.zip" standalone_path: "sys68k_cpu1.zip" required: false category: bios_zip @@ -31648,6 +32939,7 @@ files: sha1: "1e24530a6d5dc4fb77fde67acae08d371e59fc0f" - name: sys68k_cpu20.zip + path: "mame/bios/sys68k_cpu20.zip" standalone_path: "sys68k_cpu20.zip" required: false category: bios_zip @@ -31675,6 +32967,7 @@ files: sha1: "49b272184a04570b09004de71fae0ed0d1bf5929" - name: sys68k_cpu21.zip + path: "mame/bios/sys68k_cpu21.zip" standalone_path: "sys68k_cpu21.zip" required: false category: bios_zip @@ -31702,6 +32995,7 @@ files: sha1: "49b272184a04570b09004de71fae0ed0d1bf5929" - name: sys68k_cpu21a.zip + path: "mame/bios/sys68k_cpu21a.zip" standalone_path: "sys68k_cpu21a.zip" required: false category: bios_zip @@ -31729,6 +33023,7 @@ files: sha1: "49b272184a04570b09004de71fae0ed0d1bf5929" - name: sys68k_cpu21b.zip + path: "mame/bios/sys68k_cpu21b.zip" standalone_path: "sys68k_cpu21b.zip" required: false category: bios_zip @@ -31756,6 +33051,7 @@ files: sha1: "49b272184a04570b09004de71fae0ed0d1bf5929" - name: sys68k_cpu21s.zip + path: "mame/bios/sys68k_cpu21s.zip" standalone_path: "sys68k_cpu21s.zip" required: false category: bios_zip @@ -31783,6 +33079,7 @@ files: sha1: "49b272184a04570b09004de71fae0ed0d1bf5929" - name: sys68k_cpu21ya.zip + path: "mame/bios/sys68k_cpu21ya.zip" standalone_path: "sys68k_cpu21ya.zip" required: false category: bios_zip @@ -31810,6 +33107,7 @@ files: sha1: "49b272184a04570b09004de71fae0ed0d1bf5929" - name: sys68k_cpu21yb.zip + path: "mame/bios/sys68k_cpu21yb.zip" standalone_path: "sys68k_cpu21yb.zip" required: false category: bios_zip @@ -31837,6 +33135,7 @@ files: sha1: "49b272184a04570b09004de71fae0ed0d1bf5929" - name: sys68k_cpu30.zip + path: "mame/bios/sys68k_cpu30.zip" standalone_path: "sys68k_cpu30.zip" required: false category: bios_zip @@ -31868,6 +33167,7 @@ files: sha1: "651dfc2f9a865fc6adf49dad90f9e705f2889919" - name: sys68k_cpu30be.zip + path: "mame/bios/sys68k_cpu30be.zip" standalone_path: "sys68k_cpu30be.zip" required: false category: bios_zip @@ -31899,6 +33199,7 @@ files: sha1: "651dfc2f9a865fc6adf49dad90f9e705f2889919" - name: sys68k_cpu30x.zip + path: "mame/bios/sys68k_cpu30x.zip" standalone_path: "sys68k_cpu30x.zip" required: false category: bios_zip @@ -31930,6 +33231,7 @@ files: sha1: "651dfc2f9a865fc6adf49dad90f9e705f2889919" - name: sys68k_cpu30xa.zip + path: "mame/bios/sys68k_cpu30xa.zip" standalone_path: "sys68k_cpu30xa.zip" required: false category: bios_zip @@ -31961,6 +33263,7 @@ files: sha1: "651dfc2f9a865fc6adf49dad90f9e705f2889919" - name: sys68k_cpu30za.zip + path: "mame/bios/sys68k_cpu30za.zip" standalone_path: "sys68k_cpu30za.zip" required: false category: bios_zip @@ -31992,6 +33295,7 @@ files: sha1: "651dfc2f9a865fc6adf49dad90f9e705f2889919" - name: sys68k_cpu33.zip + path: "mame/bios/sys68k_cpu33.zip" standalone_path: "sys68k_cpu33.zip" required: false category: bios_zip @@ -32015,6 +33319,7 @@ files: sha1: "651dfc2f9a865fc6adf49dad90f9e705f2889919" - name: sys68k_iscsi1.zip + path: "mame/bios/sys68k_iscsi1.zip" standalone_path: "sys68k_iscsi1.zip" required: false category: bios_zip @@ -32046,6 +33351,7 @@ files: sha1: "074085ef96e1fe2a551938bdeee6a9cab40ff09c" - name: sys68k_isio1.zip + path: "mame/bios/sys68k_isio1.zip" standalone_path: "sys68k_isio1.zip" required: false category: bios_zip @@ -32065,6 +33371,7 @@ files: sha1: "215f7ff90d9dbe2bea54510e3722fb33d4e54193" - name: t5182.zip + path: "mame/bios/t5182.zip" standalone_path: "t5182.zip" required: false category: bios_zip @@ -32079,6 +33386,7 @@ files: sha1: "a1c9e1ac293f107f69cc5788cf6abc3db1646e33" - name: tanbus_ra32krom.zip + path: "mame/bios/tanbus_ra32krom.zip" standalone_path: "tanbus_ra32krom.zip" required: false category: bios_zip @@ -32106,6 +33414,7 @@ files: sha1: "5e49edda4b550506aca70d1f7e7de7a352f0359f" - name: tanbus_tandos.zip + path: "mame/bios/tanbus_tandos.zip" standalone_path: "tanbus_tandos.zip" required: false category: bios_zip @@ -32127,6 +33436,7 @@ files: sha1: "b1e42cbf7197e693073d2578561803ea4c8efa8c" - name: tanbus_tanex.zip + path: "mame/bios/tanbus_tanex.zip" standalone_path: "tanbus_tanex.zip" required: false category: bios_zip @@ -32182,6 +33492,7 @@ files: sha1: "93d205ffb07a339f801b9aa9469e069de321c41c" - name: tanbus_vid8082.zip + path: "mame/bios/tanbus_vid8082.zip" standalone_path: "tanbus_vid8082.zip" required: false category: bios_zip @@ -32197,6 +33508,7 @@ files: sha1: "1db8b055306067eb62940c0e9e63d97a2fab20f9" - name: tandberg_tdv2100_disp_logic.zip + path: "mame/bios/tandberg_tdv2100_disp_logic.zip" standalone_path: "tandberg_tdv2100_disp_logic.zip" required: false category: bios_zip @@ -32228,6 +33540,7 @@ files: sha1: "014d524d977927c140237c47e8ba692c1a89397a" - name: tandberg_tdv2100_keyboard.zip + path: "mame/bios/tandberg_tdv2100_keyboard.zip" standalone_path: "tandberg_tdv2100_keyboard.zip" required: false category: bios_zip @@ -32247,6 +33560,7 @@ files: sha1: "a8985ae2c90f8e7361c3e4418314925b17e72b10" - name: tandy_1000_graphics.zip + path: "mame/bios/tandy_1000_graphics.zip" standalone_path: "tandy_1000_graphics.zip" required: false category: bios_zip @@ -32262,6 +33576,7 @@ files: sha1: "b63da2a656b6c0a8a32f2be8bdcb51aed983a450" - name: tandy_1000x_graphics.zip + path: "mame/bios/tandy_1000x_graphics.zip" standalone_path: "tandy_1000x_graphics.zip" required: false category: bios_zip @@ -32277,6 +33592,7 @@ files: sha1: "b63da2a656b6c0a8a32f2be8bdcb51aed983a450" - name: tdl12.zip + path: "mame/bios/tdl12.zip" standalone_path: "tdl12.zip" required: false category: bios_zip @@ -32294,6 +33610,7 @@ files: sha1: "1cf0bf8702747ff3047691d2b661bb08d40754f0" - name: technica.zip + path: "mame/bios/technica.zip" standalone_path: "technica.zip" required: false category: bios_zip @@ -32310,6 +33627,7 @@ files: bad_dump: true - name: tek410x_kbd.zip + path: "mame/bios/tek410x_kbd.zip" standalone_path: "tek410x_kbd.zip" required: false category: bios_zip @@ -32325,6 +33643,7 @@ files: sha1: "165ffc2c0775c1a3c2cc3ec86fb05adc8e8bb3eb" - name: tek_msu_fdc.zip + path: "mame/bios/tek_msu_fdc.zip" standalone_path: "tek_msu_fdc.zip" required: false category: bios_zip @@ -32340,6 +33659,7 @@ files: sha1: "b29b3705692d50f15f7e8bbba12a24c69817d52e" - name: teletex800.zip + path: "mame/bios/teletex800.zip" standalone_path: "teletex800.zip" required: false category: bios_zip @@ -32354,6 +33674,7 @@ files: sha1: "4911332709a8dcda12e72bcdf7a0acd58d65cbfd" - name: tetriskr_cga.zip + path: "mame/bios/tetriskr_cga.zip" standalone_path: "tetriskr_cga.zip" required: false category: bios_zip @@ -32400,6 +33721,7 @@ files: sha1: "14dfd3dbd51f8bd6f3290293b8ea1c165e8cf7fd" - name: tgui9680.zip + path: "mame/bios/tgui9680.zip" standalone_path: "tgui9680.zip" required: false category: bios_zip @@ -32415,6 +33737,7 @@ files: sha1: "67896a854d43a575037613b3506aea6dae5d6a19" - name: ti99_arcturus.zip + path: "mame/bios/ti99_arcturus.zip" standalone_path: "ti99_arcturus.zip" required: false category: bios_zip @@ -32440,6 +33763,7 @@ files: sha1: "65850c57e9480a5d8bdd852692f18d0162ca1406" - name: ti99_bwg.zip + path: "mame/bios/ti99_bwg.zip" standalone_path: "ti99_bwg.zip" required: false category: bios_zip @@ -32457,6 +33781,7 @@ files: sha1: "6ad77033ed268f986d9a5439e65f7d391c4b7651" - name: ti99_ccdcc.zip + path: "mame/bios/ti99_ccdcc.zip" standalone_path: "ti99_ccdcc.zip" required: false category: bios_zip @@ -32478,6 +33803,7 @@ files: sha1: "26f8096ae60f3839902b4e8764c5fde283ad4ba2" - name: ti99_ccfdc.zip + path: "mame/bios/ti99_ccfdc.zip" standalone_path: "ti99_ccfdc.zip" required: false category: bios_zip @@ -32499,6 +33825,7 @@ files: sha1: "7744f777b51eedf614f766576bbc3f8c2c2e0042" - name: ti99_ddcc1.zip + path: "mame/bios/ti99_ddcc1.zip" standalone_path: "ti99_ddcc1.zip" required: false category: bios_zip @@ -32516,6 +33843,7 @@ files: sha1: "17af3130d3631b1bc1aa4d7e32a1b1feb66bbfb6" - name: ti99_evpc.zip + path: "mame/bios/ti99_evpc.zip" standalone_path: "ti99_evpc.zip" required: false category: bios_zip @@ -32533,6 +33861,7 @@ files: sha1: "6e8060f86e3bb9c36f244d88825e3fe237bfe9a9" - name: ti99_fdc.zip + path: "mame/bios/ti99_fdc.zip" standalone_path: "ti99_fdc.zip" required: false category: bios_zip @@ -32554,6 +33883,7 @@ files: sha1: "3646c3bcd2dce16b918ee01ea65312f36ae811d2" - name: ti99_gkracker.zip + path: "mame/bios/ti99_gkracker.zip" standalone_path: "ti99_gkracker.zip" required: false category: bios_zip @@ -32571,6 +33901,7 @@ files: sha1: "a3bd5257c63e190800921b52dbe3ffa91ad91113" - name: ti99_hfdc.zip + path: "mame/bios/ti99_hfdc.zip" standalone_path: "ti99_hfdc.zip" required: false category: bios_zip @@ -32588,6 +33919,7 @@ files: sha1: "11df2ecef51de6f543e4eaf8b2529d3e65d0bd59" - name: ti99_myarcmem.zip + path: "mame/bios/ti99_myarcmem.zip" standalone_path: "ti99_myarcmem.zip" required: false category: bios_zip @@ -32605,6 +33937,7 @@ files: sha1: "4dc7fdfa46842957bcbb0cf2c37764e4bb6d877a" - name: ti99_pcode.zip + path: "mame/bios/ti99_pcode.zip" standalone_path: "ti99_pcode.zip" required: false category: bios_zip @@ -32657,6 +33990,7 @@ files: sha1: "24e2608179921aef312cdee6f455e3f46deb30d0" - name: ti99_rs232.zip + path: "mame/bios/ti99_rs232.zip" standalone_path: "ti99_rs232.zip" required: false category: bios_zip @@ -32674,6 +34008,7 @@ files: sha1: "ee609a18a21f1a3ddab334e8798d5f2a0fcefa91" - name: ti99_thermal.zip + path: "mame/bios/ti99_thermal.zip" standalone_path: "ti99_thermal.zip" required: false category: bios_zip @@ -32691,6 +34026,7 @@ files: sha1: "2f923e59a3a52b3645e8d26e11a697f320c6d4cb" - name: ti99_tipi.zip + path: "mame/bios/ti99_tipi.zip" standalone_path: "ti99_tipi.zip" required: false category: bios_zip @@ -32718,6 +34054,7 @@ files: sha1: "99986d6ef89ab3eeba08eb6593193e99292458fb" - name: ti99_whtscsi.zip + path: "mame/bios/ti99_whtscsi.zip" standalone_path: "ti99_whtscsi.zip" required: false category: bios_zip @@ -32735,6 +34072,7 @@ files: sha1: "f8d8861863e6a17042428e94967fd4ffc4b9d1de" - name: ti_hx5102.zip + path: "mame/bios/ti_hx5102.zip" standalone_path: "ti_hx5102.zip" required: false category: bios_zip @@ -32754,6 +34092,7 @@ files: sha1: "2f1d01378943436f0abd5b20710f6c8c175fde13" - name: tiki100_8088.zip + path: "mame/bios/tiki100_8088.zip" standalone_path: "tiki100_8088.zip" required: false category: bios_zip @@ -32780,6 +34119,7 @@ files: sha1: "b6d4a7a3eb29d97971443b8a31ec5a4ce5ced0d8" - name: tim011_kbd.zip + path: "mame/bios/tim011_kbd.zip" standalone_path: "tim011_kbd.zip" required: false category: bios_zip @@ -32794,6 +34134,7 @@ files: sha1: "d6d505271d91df4e079ec3c0a4abbe75ae9d649b" - name: tk02.zip + path: "mame/bios/tk02.zip" standalone_path: "tk02.zip" required: false category: bios_zip @@ -32809,6 +34150,7 @@ files: sha1: "cd57e630371b4d0314e3f15693753fb195c7257d" - name: tms320c30.zip + path: "mame/bios/tms320c30.zip" standalone_path: "tms320c30.zip" required: false category: bios_zip @@ -32825,6 +34167,7 @@ files: bad_dump: true - name: tms320c31.zip + path: "mame/bios/tms320c31.zip" standalone_path: "tms320c31.zip" required: false category: bios_zip @@ -32841,6 +34184,7 @@ files: bad_dump: true - name: tms320c32.zip + path: "mame/bios/tms320c32.zip" standalone_path: "tms320c32.zip" required: false category: bios_zip @@ -32857,6 +34201,7 @@ files: bad_dump: true - name: tms320vc33.zip + path: "mame/bios/tms320vc33.zip" standalone_path: "tms320vc33.zip" required: false category: bios_zip @@ -32872,6 +34217,7 @@ files: bad_dump: true - name: tp880v.zip + path: "mame/bios/tp880v.zip" standalone_path: "tp880v.zip" required: false category: bios_zip @@ -32888,6 +34234,7 @@ files: sha1: "724f54573b1b0c79f20250fdb6434bb2248c5e04" - name: tp881v.zip + path: "mame/bios/tp881v.zip" standalone_path: "tp881v.zip" required: false category: bios_zip @@ -32909,6 +34256,7 @@ files: sha1: "8e5bfd427c0bdea4ab350333fd5a814712014302" - name: trio64dx_pci.zip + path: "mame/bios/trio64dx_pci.zip" standalone_path: "trio64dx_pci.zip" required: false category: bios_zip @@ -32942,6 +34290,7 @@ files: sha1: "e652dd2cec49d5edf3cb207e410233963efa22b8" - name: trs80m2kb.zip + path: "mame/bios/trs80m2kb.zip" standalone_path: "trs80m2kb.zip" required: false category: bios_zip @@ -32957,6 +34306,7 @@ files: sha1: "c944cb9be062c9eed4f20a5b2568c8019dc71e27" - name: tsvme104.zip + path: "mame/bios/tsvme104.zip" standalone_path: "tsvme104.zip" required: false category: bios_zip @@ -32977,6 +34327,7 @@ files: sha1: "3b9834731f2b1a47f8c840c5e47d9fc4a8769d42" - name: turbogx.zip + path: "mame/bios/turbogx.zip" standalone_path: "turbogx.zip" required: false category: bios_zip @@ -32992,6 +34343,7 @@ files: sha1: "e4a51d78e199cd57f2fcb9d45b25dfae2bd537e4" - name: turbogxp.zip + path: "mame/bios/turbogxp.zip" standalone_path: "turbogxp.zip" required: false category: bios_zip @@ -33007,6 +34359,7 @@ files: sha1: "721fc378d4b952b5cbb271e16bd67bc02439efdc" - name: tv950kb.zip + path: "mame/bios/tv950kb.zip" standalone_path: "tv950kb.zip" required: false category: bios_zip @@ -33022,6 +34375,7 @@ files: sha1: "99e73e9c74b10055733e89b92adbc5bf7f4ff338" - name: tv955kb.zip + path: "mame/bios/tv955kb.zip" standalone_path: "tv955kb.zip" required: false category: bios_zip @@ -33037,6 +34391,7 @@ files: sha1: "0b62003ab7931822f1bcac8370517c685849f62c" - name: tvc_hbf.zip + path: "mame/bios/tvc_hbf.zip" standalone_path: "tvc_hbf.zip" required: false category: bios_zip @@ -33068,6 +34423,7 @@ files: sha1: "2fa44ad089a51f453b580e0b13e3be96a0f14649" - name: tvga9000.zip + path: "mame/bios/tvga9000.zip" standalone_path: "tvga9000.zip" required: false category: bios_zip @@ -33092,6 +34448,7 @@ files: sha1: "9cff3cb86a85dcbd34234bc4fd1dd0011f3d48fd" - name: ubpnic.zip + path: "mame/bios/ubpnic.zip" standalone_path: "ubpnic.zip" required: false category: bios_zip @@ -33110,6 +34467,7 @@ files: sha1: "e0effcf33a25954d990d0d01d5c0ac009a1f282d" - name: ultra12f.zip + path: "mame/bios/ultra12f.zip" standalone_path: "ultra12f.zip" required: false category: bios_zip @@ -33144,6 +34502,7 @@ files: sha1: "48d6e65001a262b3e99d373fa59e0672c5ec4284" - name: ultra12f32.zip + path: "mame/bios/ultra12f32.zip" standalone_path: "ultra12f32.zip" required: false category: bios_zip @@ -33166,6 +34525,7 @@ files: sha1: "110e724b4116fc2cbd050d9f2e541d2366fd9f4c" - name: ultra14f.zip + path: "mame/bios/ultra14f.zip" standalone_path: "ultra14f.zip" required: false category: bios_zip @@ -33188,6 +34548,7 @@ files: sha1: "9c1539f8473f8330be323e728e7aabccc77542d0" - name: ultra24f.zip + path: "mame/bios/ultra24f.zip" standalone_path: "ultra24f.zip" required: false category: bios_zip @@ -33218,6 +34579,7 @@ files: sha1: "052602e4788b7364670f7c0b5fe0bb0eacc4d9ac" - name: umc6650.zip + path: "mame/bios/umc6650.zip" standalone_path: "umc6650.zip" required: false category: bios_zip @@ -33233,6 +34595,7 @@ files: sha1: "f94805457976d60b91e8df18f9f49cccec77be78" - name: uniap2ti.zip + path: "mame/bios/uniap2ti.zip" standalone_path: "uniap2ti.zip" required: false category: bios_zip @@ -33248,6 +34611,7 @@ files: sha1: "220cc21d86f1ab63a301ae7a9c5ff0f3f6cddb70" - name: upd7220.zip + path: "mame/bios/upd7220.zip" standalone_path: "upd7220.zip" required: false category: bios_zip @@ -33266,6 +34630,7 @@ files: sha1: "e154b3106a80c9c98d9f2ee18efcd7f4b4aa7d49" - name: uts_400kbd.zip + path: "mame/bios/uts_400kbd.zip" standalone_path: "uts_400kbd.zip" required: false category: bios_zip @@ -33281,6 +34646,7 @@ files: sha1: "84081e108aa5801047851b435fd4b043922b2f6e" - name: uts_extw.zip + path: "mame/bios/uts_extw.zip" standalone_path: "uts_extw.zip" required: false category: bios_zip @@ -33296,6 +34662,7 @@ files: sha1: "a6486576525f7eec617fd7f9db469063f8c357fc" - name: v102_kbd.zip + path: "mame/bios/v102_kbd.zip" standalone_path: "v102_kbd.zip" required: false category: bios_zip @@ -33311,6 +34678,7 @@ files: sha1: "b26ebdde63ec0e94c08780285def39a282e128b3" - name: v50_kbd.zip + path: "mame/bios/v50_kbd.zip" standalone_path: "v50_kbd.zip" required: false category: bios_zip @@ -33325,6 +34693,7 @@ files: sha1: "5224887097004894ab9f4876f3217f3da08801da" - name: v550_kbd.zip + path: "mame/bios/v550_kbd.zip" standalone_path: "v550_kbd.zip" required: false category: bios_zip @@ -33340,6 +34709,7 @@ files: sha1: "2d88202d0548e934800f07667c8d13a3762b12fa" - name: vanta.zip + path: "mame/bios/vanta.zip" standalone_path: "vanta.zip" required: false category: bios_zip @@ -33365,6 +34735,7 @@ files: sha1: "b28a56bcf466fcd9308541acaa1c7c94f493149a" - name: vector4_kbd.zip + path: "mame/bios/vector4_kbd.zip" standalone_path: "vector4_kbd.zip" required: false category: bios_zip @@ -33379,6 +34750,7 @@ files: sha1: "0023f0639e2f1d9e8860c6c4244e25fd8bf82331" - name: vic1515.zip + path: "mame/bios/vic1515.zip" standalone_path: "vic1515.zip" required: false category: bios_zip @@ -33394,6 +34766,7 @@ files: sha1: "035c23dc83923eea34feea260445356a909fbd98" - name: vic1520.zip + path: "mame/bios/vic1520.zip" standalone_path: "vic1520.zip" required: false category: bios_zip @@ -33415,6 +34788,7 @@ files: sha1: "74c15b2cc1f7632bffa37439609cbdb50b82ea92" - name: vic20_fe3.zip + path: "mame/bios/vic20_fe3.zip" standalone_path: "vic20_fe3.zip" required: false category: bios_zip @@ -33433,6 +34807,7 @@ files: sha1: "e64d69870b757a409abeb5f19e34866eef37ab18" - name: vic20_videopak.zip + path: "mame/bios/vic20_videopak.zip" standalone_path: "vic20_videopak.zip" required: false category: bios_zip @@ -33448,6 +34823,7 @@ files: bad_dump: true - name: victor9k_fdc.zip + path: "mame/bios/victor9k_fdc.zip" standalone_path: "victor9k_fdc.zip" required: false category: bios_zip @@ -33466,6 +34842,7 @@ files: sha1: "6eeff3d2063ae2d97452101aa61e27ef83a467e5" - name: victor9k_kb.zip + path: "mame/bios/victor9k_kb.zip" standalone_path: "victor9k_kb.zip" required: false category: bios_zip @@ -33481,6 +34858,7 @@ files: sha1: "61d92ba90f98f8978bbd9303c1ac3134cde8cdcb" - name: videnh2.zip + path: "mame/bios/videnh2.zip" standalone_path: "videnh2.zip" required: false category: bios_zip @@ -33496,6 +34874,7 @@ files: sha1: "91f3e4a56382aea91d9197f06550e42fcfbcd1bf" - name: virge_pci.zip + path: "mame/bios/virge_pci.zip" standalone_path: "virge_pci.zip" required: false category: bios_zip @@ -33518,6 +34897,7 @@ files: sha1: "e885371816d3237f7badd57ccd602cd863c9c9f8" - name: virgedx_pci.zip + path: "mame/bios/virgedx_pci.zip" standalone_path: "virgedx_pci.zip" required: false category: bios_zip @@ -33545,6 +34925,7 @@ files: sha1: "9a7f58fab7811342a00bbc76837b4f9015913ddb" - name: virgevx_pci.zip + path: "mame/bios/virgevx_pci.zip" standalone_path: "virgevx_pci.zip" required: false category: bios_zip @@ -33562,6 +34943,7 @@ files: sha1: "fdab43f15da1d66bca286583f9da86873f3e22de" - name: vision864.zip + path: "mame/bios/vision864.zip" standalone_path: "vision864.zip" required: false category: bios_zip @@ -33580,6 +34962,7 @@ files: sha1: "340a64402958d2ee734d929dfce147d9afcf23f4" - name: vision964.zip + path: "mame/bios/vision964.zip" standalone_path: "vision964.zip" required: false category: bios_zip @@ -33598,6 +34981,7 @@ files: sha1: "004e2432c4783f1539a7989e7d9ee422df09e695" - name: vision968.zip + path: "mame/bios/vision968.zip" standalone_path: "vision968.zip" required: false category: bios_zip @@ -33626,6 +35010,7 @@ files: sha1: "236829f1e6065a2f0ebee91f71891d8402f0ab5a" - name: voicebox.zip + path: "mame/bios/voicebox.zip" standalone_path: "voicebox.zip" required: false category: bios_zip @@ -33640,6 +35025,7 @@ files: sha1: "e60fcb5fa16ff3f3b69d36c7a6e955744d3feafc" - name: voodoo_3000_x86.zip + path: "mame/bios/voodoo_3000_x86.zip" standalone_path: "voodoo_3000_x86.zip" required: false category: bios_zip @@ -33665,6 +35051,7 @@ files: sha1: "298b305c38bda9d5848894dfd6aabcc5af8c61bf" - name: votraxtnt.zip + path: "mame/bios/votraxtnt.zip" standalone_path: "votraxtnt.zip" required: false category: bios_zip @@ -33701,6 +35088,7 @@ files: sha1: "af83b9e84f44c126b24ee754a22e34ca992a8d3d" - name: votrsc01.zip + path: "mame/bios/votrsc01.zip" standalone_path: "votrsc01.zip" required: false category: bios_zip @@ -33715,6 +35103,7 @@ files: sha1: "268b5884dce04e49e2376df3e2dc82e852b708c1" - name: votrsc01a.zip + path: "mame/bios/votrsc01a.zip" standalone_path: "votrsc01a.zip" required: false category: bios_zip @@ -33750,6 +35139,7 @@ files: sha1: "1d6da90b1807a01b5e186ef08476119a862b5e6d" - name: vp700.zip + path: "mame/bios/vp700.zip" standalone_path: "vp700.zip" required: false category: bios_zip @@ -33765,6 +35155,7 @@ files: sha1: "8fa88740cae82d8d62ea34891a657d3ca1fb732a" - name: vtech_fdc.zip + path: "mame/bios/vtech_fdc.zip" standalone_path: "vtech_fdc.zip" required: false category: bios_zip @@ -33782,6 +35173,7 @@ files: sha1: "59d1cbcfa6c5e1906a32704fbf0d9670f0d1fd8b" - name: vtech_rs232.zip + path: "mame/bios/vtech_rs232.zip" standalone_path: "vtech_rs232.zip" required: false category: bios_zip @@ -33805,6 +35197,7 @@ files: sha1: "28e00c7ff33143a948308330859bee54b474e114" - name: vtech_rtty.zip + path: "mame/bios/vtech_rtty.zip" standalone_path: "vtech_rtty.zip" required: false category: bios_zip @@ -33822,6 +35215,7 @@ files: sha1: "de737ef0e0b582b3102da473836af1fa159a2e78" - name: vtech_sdloader.zip + path: "mame/bios/vtech_sdloader.zip" standalone_path: "vtech_sdloader.zip" required: false category: bios_zip @@ -33849,6 +35243,7 @@ files: sha1: "d4f8fa0c7a70984334be3e5c831017cfc53683b2" - name: vtech_wordpro.zip + path: "mame/bios/vtech_wordpro.zip" standalone_path: "vtech_wordpro.zip" required: false category: bios_zip @@ -33873,6 +35268,7 @@ files: sha1: "b4de50f943243f18a2bfabef354b76d77178c189" - name: wangpc_lic.zip + path: "mame/bios/wangpc_lic.zip" standalone_path: "wangpc_lic.zip" required: false category: bios_zip @@ -33888,6 +35284,7 @@ files: sha1: "81e52e70e0c6e34715119b121ec19a7758cd6772" - name: wangpc_rtc.zip + path: "mame/bios/wangpc_rtc.zip" standalone_path: "wangpc_rtc.zip" required: false category: bios_zip @@ -33903,6 +35300,7 @@ files: sha1: "6b3f0d787d014b1fd3925812c905ddb63c5055f1" - name: wangpc_wdc.zip + path: "mame/bios/wangpc_wdc.zip" standalone_path: "wangpc_wdc.zip" required: false category: bios_zip @@ -33922,6 +35320,7 @@ files: sha1: "060c576d70069ece2d0dbce86ffc448df2b169e7" - name: wangpckb.zip + path: "mame/bios/wangpckb.zip" standalone_path: "wangpckb.zip" required: false category: bios_zip @@ -33936,6 +35335,7 @@ files: sha1: "2bb34a1de2d94b2885d9e8fcd4964296f6276c5c" - name: wd1002a_wx1.zip + path: "mame/bios/wd1002a_wx1.zip" standalone_path: "wd1002a_wx1.zip" required: false category: bios_zip @@ -33953,6 +35353,7 @@ files: sha1: "3bd29538832d3084cbddeec92593988772755283" - name: wd1007a.zip + path: "mame/bios/wd1007a.zip" standalone_path: "wd1007a.zip" required: false category: bios_zip @@ -33970,6 +35371,7 @@ files: sha1: "5ff6a70b1b44962654d02f85916c1b09bc4ebc96" - name: wd90c00_jk.zip + path: "mame/bios/wd90c00_jk.zip" standalone_path: "wd90c00_jk.zip" required: false category: bios_zip @@ -34010,6 +35412,7 @@ files: bad_dump: true - name: wd90c11_lr.zip + path: "mame/bios/wd90c11_lr.zip" standalone_path: "wd90c11_lr.zip" required: false category: bios_zip @@ -34029,6 +35432,7 @@ files: sha1: "10fd263ab0187d8960d4cb2954254732ac29472f" - name: wd90c30_lr.zip + path: "mame/bios/wd90c30_lr.zip" standalone_path: "wd90c30_lr.zip" required: false category: bios_zip @@ -34058,6 +35462,7 @@ files: sha1: "902418504a446f0a484fd3da6f65d3cff3987280" - name: wd90c31_lr.zip + path: "mame/bios/wd90c31_lr.zip" standalone_path: "wd90c31_lr.zip" required: false category: bios_zip @@ -34082,6 +35487,7 @@ files: sha1: "7f236d6acb34d07480584d51f6bb57836ff262c4" - name: wd90c31a_lr.zip + path: "mame/bios/wd90c31a_lr.zip" standalone_path: "wd90c31a_lr.zip" required: false category: bios_zip @@ -34106,6 +35512,7 @@ files: sha1: "52ed7b8301ec5ebab0d87bab8cddd9cc8612e2ab" - name: wd90c31a_zs.zip + path: "mame/bios/wd90c31a_zs.zip" standalone_path: "wd90c31a_zs.zip" required: false category: bios_zip @@ -34124,6 +35531,7 @@ files: sha1: "52cefcc9a1b7374c7414bb93a7805207ba5b7fe3" - name: wd90c33_zz.zip + path: "mame/bios/wd90c33_zz.zip" standalone_path: "wd90c33_zz.zip" required: false category: bios_zip @@ -34142,6 +35550,7 @@ files: sha1: "0f93213ed439059d23e0793478793ffd6188ce12" - name: wd90c90_jk.zip + path: "mame/bios/wd90c90_jk.zip" standalone_path: "wd90c90_jk.zip" required: false category: bios_zip @@ -34161,6 +35570,7 @@ files: sha1: "578ee0e8f9a5e56df6c05386978d0f41c638ddcf" - name: wd9710_pci.zip + path: "mame/bios/wd9710_pci.zip" standalone_path: "wd9710_pci.zip" required: false category: bios_zip @@ -34179,6 +35589,7 @@ files: sha1: "b5dbb28d60adf53c711ec16bc45eab102e40b6a2" - name: wdxt_gen.zip + path: "mame/bios/wdxt_gen.zip" standalone_path: "wdxt_gen.zip" required: false category: bios_zip @@ -34201,6 +35612,7 @@ files: sha1: "8c22bd664177eb6126f3011eda8c5655fffe0ef2" - name: wg130.zip + path: "mame/bios/wg130.zip" standalone_path: "wg130.zip" required: false category: bios_zip @@ -34215,6 +35627,7 @@ files: sha1: "93ebe213ea7a085c67d88974ed39ac3e9bf8059b" - name: wyse700.zip + path: "mame/bios/wyse700.zip" standalone_path: "wyse700.zip" required: false category: bios_zip @@ -34236,6 +35649,7 @@ files: sha1: "1beeb133c5e39eee9914bdc5924039d70b5edcad" - name: x68k_cz6bs1.zip + path: "mame/bios/x68k_cz6bs1.zip" standalone_path: "x68k_cz6bs1.zip" required: false category: bios_zip @@ -34251,6 +35665,7 @@ files: sha1: "49616c09a8986ffe6a12ad600febe512f7ba8ae4" - name: x820iikb.zip + path: "mame/bios/x820iikb.zip" standalone_path: "x820iikb.zip" required: false category: bios_zip @@ -34266,6 +35681,7 @@ files: sha1: "3f05959f54a558b273567b1b4f0c7cdf46d8d9bf" - name: x820kb.zip + path: "mame/bios/x820kb.zip" standalone_path: "x820kb.zip" required: false category: bios_zip @@ -34280,6 +35696,7 @@ files: sha1: "3f05959f54a558b273567b1b4f0c7cdf46d8d9bf" - name: xerox820_16_8.zip + path: "mame/bios/xerox820_16_8.zip" standalone_path: "xerox820_16_8.zip" required: false category: bios_zip @@ -34295,6 +35712,7 @@ files: sha1: "a5f20c74fc53f9d695d8894534ab69a39e2c38d8" - name: xerox820_emii_flpy5.zip + path: "mame/bios/xerox820_emii_flpy5.zip" standalone_path: "xerox820_emii_flpy5.zip" required: false category: bios_zip @@ -34314,6 +35732,7 @@ files: sha1: "54d205e5a7ed80feb7cd06eddc863110fc655dde" - name: xerox820_emii_rgd5.zip + path: "mame/bios/xerox820_emii_rgd5.zip" standalone_path: "xerox820_emii_rgd5.zip" required: false category: bios_zip @@ -34333,6 +35752,7 @@ files: sha1: "54d205e5a7ed80feb7cd06eddc863110fc655dde" - name: xetec_c5181.zip + path: "mame/bios/xetec_c5181.zip" standalone_path: "xetec_c5181.zip" required: false category: bios_zip @@ -34348,6 +35768,7 @@ files: sha1: "431c57e876c7432c07469c461e7438678ebb0043" - name: xt446.zip + path: "mame/bios/xt446.zip" standalone_path: "xt446.zip" required: false category: bios_zip @@ -34387,6 +35808,7 @@ files: sha1: "bdca8c5158f452f2b5535c7d658c9b22c6d66048" - name: xtide.zip + path: "mame/bios/xtide.zip" standalone_path: "xtide.zip" required: false category: bios_zip @@ -34526,6 +35948,7 @@ files: sha1: "c0053710ebac15284e740889967d73a6657734c7" - name: ym2423.zip + path: "mame/bios/ym2423.zip" standalone_path: "ym2423.zip" required: false category: bios_zip @@ -34539,6 +35962,7 @@ files: sha1: "59c51918f02891d6a0e917f7ebc27e42f7eadd15" - name: ymf281.zip + path: "mame/bios/ymf281.zip" standalone_path: "ymf281.zip" required: false category: bios_zip @@ -34552,6 +35976,7 @@ files: sha1: "5242d7b9c677c48e156ba5753db1a73db627a1a9" - name: z8671.zip + path: "mame/bios/z8671.zip" standalone_path: "z8671.zip" required: false category: bios_zip @@ -34566,6 +35991,7 @@ files: sha1: "290a24c77debd2e280fe31380287838c5fb7cabd" - name: z8682.zip + path: "mame/bios/z8682.zip" standalone_path: "z8682.zip" required: false category: bios_zip @@ -34581,6 +36007,7 @@ files: bad_dump: true - name: zip100_ide.zip + path: "mame/bios/zip100_ide.zip" standalone_path: "zip100_ide.zip" required: false category: bios_zip @@ -34609,6 +36036,7 @@ files: sha1: "b8df2a733838db5116982a7295484b77b272287c" - name: zorba_kbd.zip + path: "mame/bios/zorba_kbd.zip" standalone_path: "zorba_kbd.zip" required: false category: bios_zip @@ -34623,6 +36051,7 @@ files: sha1: "4b6fca9379d5199d1347ad1187cbfdebfc4c73e7" - name: zxbus_neogs.zip + path: "mame/bios/zxbus_neogs.zip" standalone_path: "zxbus_neogs.zip" required: false category: bios_zip diff --git a/emulators/mame0258.yml b/emulators/mame0258.yml index 3df4ed857..b31382b7f 100644 --- a/emulators/mame0258.yml +++ b/emulators/mame0258.yml @@ -104,6 +104,7 @@ notes: 'libretro/mame built at the 0.258 release. BIOS root sets read from mamed sets and their ROMs are that release''s, not the current one''s.' files: - name: 3dobios.zip + path: mame/bios/3dobios.zip required: true category: bios_zip system: panasonic-3do @@ -130,6 +131,7 @@ files: sha1: b01c53da256dde43ffec4ad3fc3adfa8d635e943 description: Sanyo TRY 3DO Interactive Multiplayer - name: airlbios.zip + path: mame/bios/airlbios.zip required: false category: bios_zip system: sega-naomi @@ -152,6 +154,7 @@ files: crc32: 3ea24b6a sha1: 3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc - name: aleck64.zip + path: mame/bios/aleck64.zip required: true category: bios_zip source_ref: "upstream src/mame/nintendo/aleck64.cpp:1416" @@ -169,6 +172,7 @@ files: crc32: 4f2ae525 sha1: eab43f8cc52c8551d9cff6fced18ef80eaba6f05 - name: alg3do.zip + path: mame/bios/alg3do.zip required: true category: bios_zip source_ref: "upstream src/mame/misc/3do.cpp:296" @@ -178,6 +182,7 @@ files: crc32: b832da9a sha1: 520d3d1b5897800af47f92efd2444a26b7a7dead - name: alg_bios.zip + path: mame/bios/alg_bios.zip required: true category: bios_zip source_ref: "upstream src/mame/amiga/alg.cpp:926" @@ -188,6 +193,7 @@ files: sha1: 891e9a547772fe0c6c19b610baf8bc4ea7fcb785 description: Kickstart 1.3 (34.5) - name: allied.zip + path: mame/bios/allied.zip required: true category: bios_zip source_ref: "upstream src/mame/pinball/allied.cpp:775" @@ -205,6 +211,7 @@ files: crc32: 13f42789 sha1: baa0f73fda08a3c5d6f1423fb329e4febb07ef97 - name: ar_bios.zip + path: mame/bios/ar_bios.zip required: true category: bios_zip source_ref: "upstream src/mame/amiga/arsystems.cpp:1015" @@ -294,6 +301,7 @@ files: crc32: a5cc4515 sha1: 80070521476e92323a6baa6e55928ca5b751a332 - name: aristmk5.zip + path: mame/bios/aristmk5.zip required: true category: bios_zip source_ref: "upstream src/mame/acorn/aristmk5.cpp:8644" @@ -383,6 +391,7 @@ files: crc32: 941d4cdb sha1: 1ca091fba69e92f262dbb3d40f515703c8981793 - name: aristmk6.zip + path: mame/bios/aristmk6.zip required: true category: bios_zip source_ref: "upstream src/mame/aristocrat/aristmk6.cpp:6544" @@ -772,6 +781,7 @@ files: crc32: 117b75f2 sha1: 2129286853d3c50b8a943b71334d4ef6b98adc05 - name: atarisy1.zip + path: mame/bios/atarisy1.zip required: true category: bios_zip source_ref: "upstream src/mame/atari/atarisy1.cpp:2554" @@ -837,6 +847,7 @@ files: crc32: 92d6a0b4 sha1: 0a42a4816c89447b16e1f3245409591efea98a4a - name: awbios.zip + path: mame/bios/awbios.zip required: true category: bios_zip system: sammy-atomiswave @@ -855,6 +866,7 @@ files: crc32: 82a105f0 sha1: 5128fe2ddcced77332bdcab691c09958051fa564 - name: bubsys.zip + path: mame/bios/bubsys.zip required: true category: bios_zip source_ref: "upstream src/mame/konami/nemesis.cpp:3162" @@ -876,6 +888,7 @@ files: crc32: 2f44f970 sha1: 7ab46f9d5d587665782cefc623b8de0124a6d38a - name: cdibios.zip + path: mame/bios/cdibios.zip required: true category: bios_zip system: philips-cdi @@ -897,6 +910,7 @@ files: sha1: 56d0acd7caad51c7de703247cd6d842b36173079 bad_dump: true - name: cedmag.zip + path: mame/bios/cedmag.zip required: true category: bios_zip source_ref: "upstream src/mame/efo/cedar_magnet.cpp:1167" @@ -906,6 +920,7 @@ files: crc32: 86c4a4f0 sha1: 6db1a006b2e0b2a7cc9748ade881debb098b6757 - name: chihiro.zip + path: mame/bios/chihiro.zip required: true category: bios_zip system: sega-chihiro @@ -940,6 +955,7 @@ files: crc32: 7742ab62 sha1: 82dad6e2a75bab4a4840dc6939462f1fb9b95101 - name: coh1000a.zip + path: mame/bios/coh1000a.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/zn.cpp:5364" @@ -953,6 +969,7 @@ files: crc32: c425eaf5 sha1: decf77ab50f7f58c641c3214a11647924f3a8998 - name: coh1000c.zip + path: mame/bios/coh1000c.zip required: true category: bios_zip system: capcom-zn1 @@ -973,6 +990,7 @@ files: crc32: bb7ba033 sha1: 966f3aee5d00e1312c455f855915d621e6cb0672 - name: coh1000t.zip + path: mame/bios/coh1000t.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/zn.cpp:5397" @@ -986,6 +1004,7 @@ files: crc32: daac13e7 sha1: 96d94f2b06fb7ecd91454969f4959a583ffb9d5a - name: coh1000w.zip + path: mame/bios/coh1000w.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/zn.cpp:5360" @@ -999,6 +1018,7 @@ files: crc32: 1cac067e sha1: 8e87941bfb374172628c8a37647e3a66b7166aa8 - name: coh1001l.zip + path: mame/bios/coh1001l.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/zn.cpp:5445" @@ -1012,6 +1032,7 @@ files: crc32: 181668b3 sha1: 8d2fe1facb4473cc20b4b477aaf881f9280939cf - name: coh1002e.zip + path: mame/bios/coh1002e.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/zn.cpp:5423" @@ -1025,6 +1046,7 @@ files: crc32: a7dd922e sha1: 1069c1d9015028a51a1b314cfacb014ea90aa425 - name: coh1002m.zip + path: mame/bios/coh1002m.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/zn.cpp:5371" @@ -1038,6 +1060,7 @@ files: crc32: 50dc8322 sha1: cef4011c6c06d6fce546e1db5d9fbae155eabf57 - name: coh1002v.zip + path: mame/bios/coh1002v.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/zn.cpp:5391" @@ -1051,6 +1074,7 @@ files: crc32: 1ce271df sha1: b01479dc75a4a8a86bee7ac7cd10af2bda332544 - name: coh3002c.zip + path: mame/bios/coh3002c.zip required: true category: bios_zip system: capcom-zn2 @@ -1065,6 +1089,7 @@ files: crc32: 7808fcef sha1: 3c3fb8227b05dace042dc1429b9f2355b1a15638 - name: coh3002t.zip + path: mame/bios/coh3002t.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/taitogn.cpp:1096" @@ -1096,6 +1121,7 @@ files: sha1: 047852d456b6ff85f8e640887caa03cf3e63ffad description: G-NET BIOS v2 flasher - name: crysbios.zip + path: mame/bios/crysbios.zip required: true category: bios_zip source_ref: "upstream src/mame/misc/crystal.cpp:818" @@ -1111,6 +1137,7 @@ files: sha1: f60c016be2ff11e47b2192acddb92676043af501 description: AMG0110D PCB - name: cubo.zip + path: mame/bios/cubo.zip required: true category: bios_zip system: commodore-cubo @@ -1121,6 +1148,7 @@ files: crc32: d3837ae4 sha1: 06807db3181637455f4d46582d9972afec8956d9 - name: decocass.zip + path: mame/bios/decocass.zip required: true category: bios_zip system: deco-cassette @@ -1307,6 +1335,7 @@ files: crc32: a6df18fd sha1: 1f9ea47e372d31767c936c15852b43df2b0ee8ff - name: f355bios.zip + path: mame/bios/f355bios.zip required: false category: bios_zip system: sega-naomi @@ -1333,6 +1362,7 @@ files: crc32: 3ea24b6a sha1: 3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc - name: f355dlx.zip + path: mame/bios/f355dlx.zip required: false category: bios_zip system: sega-naomi @@ -1367,6 +1397,7 @@ files: crc32: 3ea24b6a sha1: 3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc - name: galgbios.zip + path: mame/bios/galgbios.zip required: true category: bios_zip source_ref: "upstream src/mame/ces/galgames.cpp:1240" @@ -1388,6 +1419,7 @@ files: crc32: e3ae423c sha1: 66d1964845a99a5ed4b19b4135b55cde6b5fe295 - name: gp_110.zip + path: mame/bios/gp_110.zip required: true category: bios_zip source_ref: "upstream src/mame/pinball/gp_1.cpp:577" @@ -1401,6 +1433,7 @@ files: crc32: a223f2e8 sha1: 767e15e19e11399935c890c1d1034dccf1ad7f92 - name: gq863.zip + path: mame/bios/gq863.zip required: true category: bios_zip system: konami-twinkle @@ -1415,6 +1448,7 @@ files: crc32: 6f42a09e sha1: cab5209f90f47b9ee6e721479913ad74e3ba84b1 - name: gts1.zip + path: mame/bios/gts1.zip required: true category: bios_zip source_ref: "upstream src/mame/pinball/gts1.cpp:1076" @@ -1428,6 +1462,7 @@ files: crc32: 4cd312dd sha1: 31245daa9972ef8652caee69986585bb8239e86e - name: hikaru.zip + path: mame/bios/hikaru.zip required: true category: bios_zip system: sega-hikaru @@ -1450,6 +1485,7 @@ files: crc32: 7cbf2fb6 sha1: 7384e3c9314add7d61f93c9edd9fb7788d08f423 - name: hng64.zip + path: mame/bios/hng64.zip required: true category: bios_zip system: hyper-neogeo64 @@ -1496,6 +1532,7 @@ files: crc32: dabec5d2 sha1: 19c5be89c57387d6ea563b3dc55674d0692af98e - name: hod2bios.zip + path: mame/bios/hod2bios.zip required: false category: bios_zip system: sega-naomi @@ -1530,6 +1567,7 @@ files: crc32: 3ea24b6a sha1: 3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc - name: isgsm.zip + path: mame/bios/isgsm.zip required: true category: bios_zip source_ref: "upstream src/mame/sega/segas16b_isgsm.cpp:608" @@ -1539,6 +1577,7 @@ files: crc32: 2292585c sha1: 97ba0e0f0be832a5114d95151e519bc027f6675b - name: iteagle.zip + path: mame/bios/iteagle.zip required: true category: bios_zip source_ref: "upstream src/mame/itech/iteagle.cpp:715" @@ -1619,6 +1658,7 @@ files: crc32: 4f1ff45a sha1: 213cbdd6cd37ad9b5bfc9545084892a68d29f5ff - name: konamigv.zip + path: mame/bios/konamigv.zip required: true category: bios_zip system: konami-gv @@ -1629,6 +1669,7 @@ files: crc32: ad498d2d sha1: 02a82a2fe1fba0404517c3602324bfa64e23e478 - name: konamigx.zip + path: mame/bios/konamigx.zip required: true category: bios_zip source_ref: "upstream src/mame/konami/konamigx.cpp:4045" @@ -1638,6 +1679,7 @@ files: crc32: d5fa95f5 sha1: c483aa98ff8ef40cdac359c19ad23fea5ecc1906 - name: konendev.zip + path: mame/bios/konendev.zip required: true category: bios_zip source_ref: "upstream src/mame/konami/konendev.cpp:723" @@ -1647,6 +1689,7 @@ files: crc32: 36122a98 sha1: 3d2c40c9d504358d890364e26c9562e40314d8a4 - name: kpython.zip + path: mame/bios/kpython.zip required: true category: bios_zip source_ref: "upstream src/mame/konami/kpython.cpp:376" @@ -1656,6 +1699,7 @@ files: crc32: 98de405e sha1: 4bc268a996825c1bdf6ae277d331fe7bdc0cc00c - name: kpython2.zip + path: mame/bios/kpython2.zip required: true category: bios_zip source_ref: "upstream src/mame/konami/kpython2.cpp:1918" @@ -1665,6 +1709,7 @@ files: crc32: 79d60546 sha1: 0ea98a25a32145dda514de2f0d4bfbbd806bd00c - name: kviper.zip + path: mame/bios/kviper.zip required: true category: bios_zip system: konami-viper @@ -1683,6 +1728,7 @@ files: crc32: f1511505 sha1: ed7cd9b2763b3e377df9663943160f9871f65105 - name: lindbios.zip + path: mame/bios/lindbios.zip required: true category: bios_zip system: sega-lindbergh @@ -1712,11 +1758,13 @@ files: crc32: f78d14d7 sha1: f129787e487984edd23bf344f2e9500c85052275 - name: mac2bios.zip + path: mame/bios/mac2bios.zip required: false category: bios_zip source_ref: "upstream src/mame/seta/macs.cpp:796" contents: [] - name: macsbios.zip + path: mame/bios/macsbios.zip required: true category: bios_zip source_ref: "upstream src/mame/seta/macs.cpp:795" @@ -1730,6 +1778,7 @@ files: crc32: 538b68e4 sha1: a0534147791e94e726f49451d0e95671ae0a87d5 - name: maxaflex.zip + path: mame/bios/maxaflex.zip required: true category: bios_zip source_ref: "upstream src/mame/atari/maxaflex.cpp:450" @@ -1747,6 +1796,7 @@ files: crc32: edf5c950 sha1: 9ad046ea41a61585dd8d2f2d4167a3cc39d2928f - name: megaplay.zip + path: mame/bios/megaplay.zip required: true category: bios_zip system: sega-megaplay @@ -1786,6 +1836,7 @@ files: sha1: ba79183e4b522d1b57a46a56fc7d9b85de24df36 bad_dump: true - name: megatech.zip + path: mame/bios/megatech.zip required: true category: bios_zip system: sega-megatech @@ -1812,6 +1863,7 @@ files: sha1: c9008c431a937c084fb475273093ca0b434b5f47 description: Ver 0 Rev B (alt?) - name: naomi.zip + path: mame/bios/naomi.zip required: true category: bios_zip system: sega-naomi @@ -1940,6 +1992,7 @@ files: crc32: 3ea24b6a sha1: 3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc - name: naomi2.zip + path: mame/bios/naomi2.zip required: true category: bios_zip system: sega-naomi2 @@ -2006,6 +2059,7 @@ files: crc32: 3ea24b6a sha1: 3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc - name: naomigd.zip + path: mame/bios/naomigd.zip required: true category: bios_zip system: sega-naomigd @@ -2056,6 +2110,7 @@ files: crc32: 3ea24b6a sha1: 3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc - name: neogeo.zip + path: mame/bios/neogeo.zip required: true category: bios_zip system: snk-neogeo-mvs @@ -2202,6 +2257,7 @@ files: crc32: c2ea0cfd sha1: fd4a618cdcdbf849374f0a50dd8efe9dbab706c3 - name: nichidvd.zip + path: mame/bios/nichidvd.zip required: true category: bios_zip source_ref: "upstream src/mame/nichibutsu/hrdvd.cpp:1008" @@ -2219,6 +2275,7 @@ files: crc32: '36135792' sha1: 1b9c50bd02df8227b228b35cc485efd5a13ec639 - name: nss.zip + path: mame/bios/nss.zip required: true category: bios_zip system: nintendo-nss @@ -2240,6 +2297,7 @@ files: sha1: e3942f9d508c3c8074c3c3941376c37ca68b8e54 description: Nintendo Super System (Single Cart BIOS v3, hack?) - name: pgm.zip + path: mame/bios/pgm.zip required: true category: bios_zip system: igs-pgm @@ -2262,6 +2320,7 @@ files: crc32: 45ae7159 sha1: d3ed3ff3464557fd0df6b069b2e431528b0ebfa8 - name: playch10.zip + path: mame/bios/playch10.zip required: true category: bios_zip system: nintendo-playch10 @@ -2352,6 +2411,7 @@ files: crc32: 48de65dc sha1: d10acafc8da9ff479c270ec01180cca61efe62f5 - name: pumpitup.zip + path: mame/bios/pumpitup.zip required: true category: bios_zip source_ref: "upstream src/mame/misc/xtom3d.cpp:453" @@ -2369,11 +2429,13 @@ files: crc32: 9c436cfa sha1: 480ea52e74721d1963ced41be5c482b7b913ccd2 - name: recel.zip + path: mame/bios/recel.zip required: false category: bios_zip source_ref: "upstream src/mame/pinball/recel.cpp:505" contents: [] - name: sammymdl.zip + path: mame/bios/sammymdl.zip required: true category: bios_zip source_ref: "upstream src/mame/sigma/sigmab98.cpp:2301" @@ -2383,6 +2445,7 @@ files: crc32: c3c74dc5 sha1: 07352e6dba7514214e778ba39e1ca773e4698858 - name: segasp.zip + path: mame/bios/segasp.zip required: true category: bios_zip source_ref: "upstream src/mame/sega/segasp.cpp:977" @@ -2436,6 +2499,7 @@ files: crc32: 947ddfad sha1: 832a3db097af680d1d0eb9451b4650565f0cf8c7 - name: sfcbox.zip + path: mame/bios/sfcbox.zip required: true category: bios_zip system: nintendo-sfcbox @@ -2456,6 +2520,7 @@ files: crc32: ad3ec05c sha1: a3d336db585fe02a37c323422d9db6a33fd489a6 - name: shtzone.zip + path: mame/bios/shtzone.zip required: true category: bios_zip source_ref: "upstream src/mame/sega/shtzone.cpp:362" @@ -2465,6 +2530,7 @@ files: crc32: ea8901d9 sha1: 43fd8bfc395e3b2e3fbe9645d692a5eb04783d9c - name: skns.zip + path: mame/bios/skns.zip required: true category: bios_zip system: super-kaneko-nova @@ -2499,6 +2565,7 @@ files: crc32: 1d90517c sha1: 463962ffe19880135f0d95a7beda79e27448e872 - name: stvbios.zip + path: mame/bios/stvbios.zip required: true category: bios_zip system: sega-stv @@ -2565,6 +2632,7 @@ files: crc32: 15432ae2 sha1: 7d9364d546f3d3f839ec36be148076f8d26a65a6 - name: su2000.zip + path: mame/bios/su2000.zip required: true category: bios_zip source_ref: "upstream src/mame/misc/su2000.cpp:302" @@ -2746,6 +2814,7 @@ files: crc32: d84b58c2 sha1: 087b5a56ddb6bef6b1bc93b9a8e0d23de27aa399 - name: sys246.zip + path: mame/bios/sys246.zip required: true category: bios_zip system: namco-system246 @@ -2756,6 +2825,7 @@ files: crc32: 2b2e41a2 sha1: f0a74bbcaf801f3fd0b7002ebd0118564aae3528 - name: sys256.zip + path: mame/bios/sys256.zip required: true category: bios_zip system: namco-system256 @@ -2766,6 +2836,7 @@ files: crc32: b2a8eeb6 sha1: bc4fb4e1e53adbd92385f1726bd69663ff870f1e - name: sys573.zip + path: mame/bios/sys573.zip required: true category: bios_zip system: namco-system573 @@ -2802,6 +2873,7 @@ files: sha1: 779177e6312ef272483eeb64a5e84bbae6e301f2 description: Found on Dancing Stage Euro Mix 2 - name: taitotz.zip + path: mame/bios/taitotz.zip required: true category: bios_zip source_ref: "upstream src/mame/taito/taitotz.cpp:3057" @@ -2815,6 +2887,7 @@ files: crc32: c7c2dc6b sha1: bf88c818166c285130c5c73d6982f009da26e143 - name: tourvis.zip + path: mame/bios/tourvis.zip required: true category: bios_zip source_ref: "upstream src/mame/pce/tourvis.cpp:476" @@ -2875,6 +2948,7 @@ files: sha1: 881ea7802b9e241473bc8ced0472e0f1851c9886 description: VT-11 - name: triforce.zip + path: mame/bios/triforce.zip required: true category: bios_zip system: sega-triforce @@ -2885,6 +2959,7 @@ files: crc32: d1883221 sha1: c3cb7227e4dbc2af861e76d00cb59726105a2e4c - name: v4bios.zip + path: mame/bios/v4bios.zip required: true category: bios_zip source_ref: "upstream src/mame/barcrest/mpu4vid.cpp:8677" diff --git a/emulators/mame0278.yml b/emulators/mame0278.yml index f37e94c1f..786261693 100644 --- a/emulators/mame0278.yml +++ b/emulators/mame0278.yml @@ -104,6 +104,7 @@ notes: 'libretro/mame built at the 0.278 release. BIOS root sets read from mamed sets and their ROMs are that release''s, not the current one''s.' files: - name: 3dobios.zip + path: mame/bios/3dobios.zip required: true category: bios_zip system: panasonic-3do @@ -130,6 +131,7 @@ files: sha1: b01c53da256dde43ffec4ad3fc3adfa8d635e943 description: Sanyo TRY 3DO Interactive Multiplayer - name: airlbios.zip + path: mame/bios/airlbios.zip required: false category: bios_zip system: sega-naomi @@ -152,6 +154,7 @@ files: crc32: 3ea24b6a sha1: 3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc - name: aleck64.zip + path: mame/bios/aleck64.zip required: true category: bios_zip source_ref: "upstream src/mame/nintendo/aleck64.cpp:1415" @@ -169,6 +172,7 @@ files: crc32: 4f2ae525 sha1: eab43f8cc52c8551d9cff6fced18ef80eaba6f05 - name: alg3do.zip + path: mame/bios/alg3do.zip required: true category: bios_zip source_ref: "upstream src/mame/misc/3do.cpp:296" @@ -178,6 +182,7 @@ files: crc32: b832da9a sha1: 520d3d1b5897800af47f92efd2444a26b7a7dead - name: alg_bios.zip + path: mame/bios/alg_bios.zip required: true category: bios_zip source_ref: "upstream src/mame/amiga/alg.cpp:925" @@ -188,6 +193,7 @@ files: sha1: 891e9a547772fe0c6c19b610baf8bc4ea7fcb785 description: Kickstart 1.3 (34.5) - name: allied.zip + path: mame/bios/allied.zip required: true category: bios_zip source_ref: "upstream src/mame/pinball/allied.cpp:775" @@ -205,6 +211,7 @@ files: crc32: 13f42789 sha1: baa0f73fda08a3c5d6f1423fb329e4febb07ef97 - name: ar_bios.zip + path: mame/bios/ar_bios.zip required: true category: bios_zip source_ref: "upstream src/mame/amiga/arsystems.cpp:1013" @@ -294,6 +301,7 @@ files: crc32: a5cc4515 sha1: 80070521476e92323a6baa6e55928ca5b751a332 - name: aristmk5.zip + path: mame/bios/aristmk5.zip required: true category: bios_zip source_ref: "upstream src/mame/acorn/aristmk5.cpp:9293" @@ -392,6 +400,7 @@ files: crc32: 941d4cdb sha1: 1ca091fba69e92f262dbb3d40f515703c8981793 - name: aristmk6.zip + path: mame/bios/aristmk6.zip required: true category: bios_zip source_ref: "upstream src/mame/aristocrat/aristmk6.cpp:6636" @@ -789,6 +798,7 @@ files: crc32: 117b75f2 sha1: 2129286853d3c50b8a943b71334d4ef6b98adc05 - name: aristmk7.zip + path: mame/bios/aristmk7.zip required: true category: bios_zip source_ref: "upstream src/mame/aristocrat/aristmk7.cpp:233" @@ -798,6 +808,7 @@ files: crc32: f2fea07e sha1: 285038473fbe3a5708045e2f8b14562f3c24b203 - name: atarisy1.zip + path: mame/bios/atarisy1.zip required: true category: bios_zip source_ref: "upstream src/mame/atari/atarisy1.cpp:2553" @@ -863,6 +874,7 @@ files: crc32: 92d6a0b4 sha1: 0a42a4816c89447b16e1f3245409591efea98a4a - name: awbios.zip + path: mame/bios/awbios.zip required: true category: bios_zip system: sammy-atomiswave @@ -881,6 +893,7 @@ files: crc32: 82a105f0 sha1: 5128fe2ddcced77332bdcab691c09958051fa564 - name: bubsys.zip + path: mame/bios/bubsys.zip required: true category: bios_zip source_ref: "upstream src/mame/konami/nemesis.cpp:3234" @@ -902,6 +915,7 @@ files: crc32: 2f44f970 sha1: 7ab46f9d5d587665782cefc623b8de0124a6d38a - name: cdibios.zip + path: mame/bios/cdibios.zip required: true category: bios_zip system: philips-cdi @@ -923,6 +937,7 @@ files: sha1: 56d0acd7caad51c7de703247cd6d842b36173079 bad_dump: true - name: cedmag.zip + path: mame/bios/cedmag.zip required: true category: bios_zip source_ref: "upstream src/mame/efo/cedar_magnet.cpp:1166" @@ -932,6 +947,7 @@ files: crc32: 86c4a4f0 sha1: 6db1a006b2e0b2a7cc9748ade881debb098b6757 - name: chihiro.zip + path: mame/bios/chihiro.zip required: true category: bios_zip system: sega-chihiro @@ -966,6 +982,7 @@ files: crc32: 7742ab62 sha1: 82dad6e2a75bab4a4840dc6939462f1fb9b95101 - name: coh1000a.zip + path: mame/bios/coh1000a.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/zn.cpp:6072" @@ -979,6 +996,7 @@ files: crc32: c425eaf5 sha1: decf77ab50f7f58c641c3214a11647924f3a8998 - name: coh1000c.zip + path: mame/bios/coh1000c.zip required: true category: bios_zip system: capcom-zn1 @@ -999,6 +1017,7 @@ files: crc32: bb7ba033 sha1: 966f3aee5d00e1312c455f855915d621e6cb0672 - name: coh1000t.zip + path: mame/bios/coh1000t.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/zn.cpp:6046" @@ -1012,6 +1031,7 @@ files: crc32: daac13e7 sha1: 96d94f2b06fb7ecd91454969f4959a583ffb9d5a - name: coh1000w.zip + path: mame/bios/coh1000w.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/zn.cpp:6081" @@ -1025,6 +1045,7 @@ files: crc32: 1cac067e sha1: 8e87941bfb374172628c8a37647e3a66b7166aa8 - name: coh1001l.zip + path: mame/bios/coh1001l.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/zn.cpp:6085" @@ -1038,6 +1059,7 @@ files: crc32: 181668b3 sha1: 8d2fe1facb4473cc20b4b477aaf881f9280939cf - name: coh1002e.zip + path: mame/bios/coh1002e.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/zn.cpp:6095" @@ -1051,6 +1073,7 @@ files: crc32: a7dd922e sha1: 1069c1d9015028a51a1b314cfacb014ea90aa425 - name: coh1002m.zip + path: mame/bios/coh1002m.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/zn.cpp:6146" @@ -1064,6 +1087,7 @@ files: crc32: 50dc8322 sha1: cef4011c6c06d6fce546e1db5d9fbae155eabf57 - name: coh1002t.zip + path: mame/bios/coh1002t.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/taitogn.cpp:1378" @@ -1085,6 +1109,7 @@ files: crc32: 9100dbf2 sha1: 9ce888bd2a7e575c8ca71d978cb85de22afb5660 - name: coh1002v.zip + path: mame/bios/coh1002v.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/zn.cpp:6089" @@ -1098,6 +1123,7 @@ files: crc32: 1ce271df sha1: b01479dc75a4a8a86bee7ac7cd10af2bda332544 - name: coh3002c.zip + path: mame/bios/coh3002c.zip required: true category: bios_zip system: capcom-zn2 @@ -1112,6 +1138,7 @@ files: crc32: 7808fcef sha1: 3c3fb8227b05dace042dc1429b9f2355b1a15638 - name: coh3002t.zip + path: mame/bios/coh3002t.zip required: true category: bios_zip source_ref: "upstream src/mame/sony/taitogn.cpp:1377" @@ -1153,6 +1180,7 @@ files: sha1: c6918dfbb6fcf686dde4b731e84f740177ab31f0 description: MB2011 - name: crysbios.zip + path: mame/bios/crysbios.zip required: true category: bios_zip source_ref: "upstream src/mame/misc/crystal.cpp:818" @@ -1168,6 +1196,7 @@ files: sha1: f60c016be2ff11e47b2192acddb92676043af501 description: AMG0110D PCB - name: cubo.zip + path: mame/bios/cubo.zip required: true category: bios_zip system: commodore-cubo @@ -1178,6 +1207,7 @@ files: crc32: d3837ae4 sha1: 06807db3181637455f4d46582d9972afec8956d9 - name: decocass.zip + path: mame/bios/decocass.zip required: true category: bios_zip system: deco-cassette @@ -1364,6 +1394,7 @@ files: crc32: a6df18fd sha1: 1f9ea47e372d31767c936c15852b43df2b0ee8ff - name: f355bios.zip + path: mame/bios/f355bios.zip required: false category: bios_zip system: sega-naomi @@ -1390,6 +1421,7 @@ files: crc32: 3ea24b6a sha1: 3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc - name: f355dlx.zip + path: mame/bios/f355dlx.zip required: false category: bios_zip system: sega-naomi @@ -1424,6 +1456,7 @@ files: crc32: 3ea24b6a sha1: 3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc - name: galgbios.zip + path: mame/bios/galgbios.zip required: true category: bios_zip source_ref: "upstream src/mame/ces/galgames.cpp:1288" @@ -1445,6 +1478,7 @@ files: crc32: e3ae423c sha1: 66d1964845a99a5ed4b19b4135b55cde6b5fe295 - name: gp_110.zip + path: mame/bios/gp_110.zip required: true category: bios_zip source_ref: "upstream src/mame/pinball/gp_1.cpp:577" @@ -1458,6 +1492,7 @@ files: crc32: a223f2e8 sha1: 767e15e19e11399935c890c1d1034dccf1ad7f92 - name: gq863.zip + path: mame/bios/gq863.zip required: true category: bios_zip system: konami-twinkle @@ -1472,6 +1507,7 @@ files: crc32: 6f42a09e sha1: cab5209f90f47b9ee6e721479913ad74e3ba84b1 - name: gts1.zip + path: mame/bios/gts1.zip required: true category: bios_zip source_ref: "upstream src/mame/pinball/gts1.cpp:1074" @@ -1485,6 +1521,7 @@ files: crc32: 4cd312dd sha1: 31245daa9972ef8652caee69986585bb8239e86e - name: hikaru.zip + path: mame/bios/hikaru.zip required: true category: bios_zip system: sega-hikaru @@ -1516,6 +1553,7 @@ files: sha1: 6c2de7dae32bef855d9bc556568c3a170f54caa5 bad_dump: true - name: hng64.zip + path: mame/bios/hng64.zip required: true category: bios_zip system: hyper-neogeo64 @@ -1562,6 +1600,7 @@ files: crc32: dabec5d2 sha1: 19c5be89c57387d6ea563b3dc55674d0692af98e - name: hod2bios.zip + path: mame/bios/hod2bios.zip required: false category: bios_zip system: sega-naomi @@ -1596,6 +1635,7 @@ files: crc32: 3ea24b6a sha1: 3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc - name: isgsm.zip + path: mame/bios/isgsm.zip required: true category: bios_zip source_ref: "upstream src/mame/sega/segas16b_isgsm.cpp:608" @@ -1605,6 +1645,7 @@ files: crc32: 2292585c sha1: 97ba0e0f0be832a5114d95151e519bc027f6675b - name: iteagle.zip + path: mame/bios/iteagle.zip required: true category: bios_zip source_ref: "upstream src/mame/itech/iteagle.cpp:715" @@ -1685,6 +1726,7 @@ files: crc32: 4f1ff45a sha1: 213cbdd6cd37ad9b5bfc9545084892a68d29f5ff - name: konamigv.zip + path: mame/bios/konamigv.zip required: true category: bios_zip system: konami-gv @@ -1695,6 +1737,7 @@ files: crc32: ad498d2d sha1: 02a82a2fe1fba0404517c3602324bfa64e23e478 - name: konamigx.zip + path: mame/bios/konamigx.zip required: true category: bios_zip source_ref: "upstream src/mame/konami/konamigx.cpp:4196" @@ -1704,6 +1747,7 @@ files: crc32: d5fa95f5 sha1: c483aa98ff8ef40cdac359c19ad23fea5ecc1906 - name: konendev.zip + path: mame/bios/konendev.zip required: true category: bios_zip source_ref: "upstream src/mame/konami/konendev.cpp:914" @@ -1713,6 +1757,7 @@ files: crc32: 36122a98 sha1: 3d2c40c9d504358d890364e26c9562e40314d8a4 - name: kpython.zip + path: mame/bios/kpython.zip required: true category: bios_zip source_ref: "upstream src/mame/konami/kpython.cpp:376" @@ -1722,6 +1767,7 @@ files: crc32: 98de405e sha1: 4bc268a996825c1bdf6ae277d331fe7bdc0cc00c - name: kpython2.zip + path: mame/bios/kpython2.zip required: true category: bios_zip source_ref: "upstream src/mame/konami/kpython2.cpp:1918" @@ -1731,6 +1777,7 @@ files: crc32: 79d60546 sha1: 0ea98a25a32145dda514de2f0d4bfbbd806bd00c - name: kviper.zip + path: mame/bios/kviper.zip required: true category: bios_zip system: konami-viper @@ -1749,6 +1796,7 @@ files: crc32: f1511505 sha1: ed7cd9b2763b3e377df9663943160f9871f65105 - name: lindbios.zip + path: mame/bios/lindbios.zip required: true category: bios_zip system: sega-lindbergh @@ -1778,11 +1826,13 @@ files: crc32: f78d14d7 sha1: f129787e487984edd23bf344f2e9500c85052275 - name: mac2bios.zip + path: mame/bios/mac2bios.zip required: false category: bios_zip source_ref: "upstream src/mame/seta/macs.cpp:791" contents: [] - name: macsbios.zip + path: mame/bios/macsbios.zip required: true category: bios_zip source_ref: "upstream src/mame/seta/macs.cpp:790" @@ -1800,6 +1850,7 @@ files: crc32: 669096c1 sha1: 36f55a2e4865bdf0506746a4df51bfb1944f905e - name: maxaflex.zip + path: mame/bios/maxaflex.zip required: true category: bios_zip source_ref: "upstream src/mame/atari/maxaflex.cpp:450" @@ -1817,6 +1868,7 @@ files: crc32: edf5c950 sha1: 9ad046ea41a61585dd8d2f2d4167a3cc39d2928f - name: megaplay.zip + path: mame/bios/megaplay.zip required: true category: bios_zip system: sega-megaplay @@ -1856,6 +1908,7 @@ files: sha1: ba79183e4b522d1b57a46a56fc7d9b85de24df36 bad_dump: true - name: megatech.zip + path: mame/bios/megatech.zip required: true category: bios_zip system: sega-megatech @@ -1882,6 +1935,7 @@ files: sha1: c9008c431a937c084fb475273093ca0b434b5f47 description: Ver 0 Rev B (alt?) - name: miuchiz.zip + path: mame/bios/miuchiz.zip required: true category: bios_zip source_ref: "upstream src/mame/misc/miuchiz.cpp:227" @@ -1891,6 +1945,7 @@ files: crc32: 2ff7ec96 sha1: 633365fd19a3d0f2ce56cb499b2577a5fb53e466 - name: naomi.zip + path: mame/bios/naomi.zip required: true category: bios_zip system: sega-naomi @@ -2023,6 +2078,7 @@ files: crc32: 3ea24b6a sha1: 3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc - name: naomi2.zip + path: mame/bios/naomi2.zip required: true category: bios_zip system: sega-naomi2 @@ -2089,6 +2145,7 @@ files: crc32: 3ea24b6a sha1: 3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc - name: naomigd.zip + path: mame/bios/naomigd.zip required: true category: bios_zip system: sega-naomigd @@ -2139,6 +2196,7 @@ files: crc32: 3ea24b6a sha1: 3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc - name: neogeo.zip + path: mame/bios/neogeo.zip required: true category: bios_zip system: snk-neogeo-mvs @@ -2285,6 +2343,7 @@ files: crc32: c2ea0cfd sha1: fd4a618cdcdbf849374f0a50dd8efe9dbab706c3 - name: nichidvd.zip + path: mame/bios/nichidvd.zip required: true category: bios_zip source_ref: "upstream src/mame/nichibutsu/hrdvd.cpp:1010" @@ -2302,6 +2361,7 @@ files: crc32: '36135792' sha1: 1b9c50bd02df8227b228b35cc485efd5a13ec639 - name: nss.zip + path: mame/bios/nss.zip required: true category: bios_zip system: nintendo-nss @@ -2323,6 +2383,7 @@ files: sha1: e3942f9d508c3c8074c3c3941376c37ca68b8e54 description: Nintendo Super System (Single Cart BIOS v3, hack?) - name: pgm.zip + path: mame/bios/pgm.zip required: true category: bios_zip system: igs-pgm @@ -2345,6 +2406,7 @@ files: crc32: 45ae7159 sha1: d3ed3ff3464557fd0df6b069b2e431528b0ebfa8 - name: playch10.zip + path: mame/bios/playch10.zip required: true category: bios_zip system: nintendo-playch10 @@ -2435,6 +2497,7 @@ files: crc32: 48de65dc sha1: d10acafc8da9ff479c270ec01180cca61efe62f5 - name: pumpitup.zip + path: mame/bios/pumpitup.zip required: true category: bios_zip source_ref: "upstream src/mame/misc/xtom3d.cpp:993" @@ -2458,6 +2521,7 @@ files: crc32: 9c436cfa sha1: 480ea52e74721d1963ced41be5c482b7b913ccd2 - name: recel.zip + path: mame/bios/recel.zip required: true category: bios_zip source_ref: "upstream src/mame/pinball/recel.cpp:547" @@ -2471,6 +2535,7 @@ files: crc32: 39a70611 sha1: 8545e168a5f256150bcff12d1e6d8efffd08c3cd - name: sammymdl.zip + path: mame/bios/sammymdl.zip required: true category: bios_zip source_ref: "upstream src/mame/sigma/sigmab98.cpp:2409" @@ -2491,6 +2556,7 @@ files: sha1: c3ceea196e5c1c6a9e03cf3a22e9f25f0099a38e description: IPL Ver. 1.0 - name: segasp.zip + path: mame/bios/segasp.zip required: true category: bios_zip source_ref: "upstream src/mame/sega/segasp.cpp:1041" @@ -2544,6 +2610,7 @@ files: crc32: 947ddfad sha1: 832a3db097af680d1d0eb9451b4650565f0cf8c7 - name: sfcbox.zip + path: mame/bios/sfcbox.zip required: true category: bios_zip system: nintendo-sfcbox @@ -2564,6 +2631,7 @@ files: crc32: ad3ec05c sha1: a3d336db585fe02a37c323422d9db6a33fd489a6 - name: shtzone.zip + path: mame/bios/shtzone.zip required: true category: bios_zip source_ref: "upstream src/mame/sega/shtzone.cpp:378" @@ -2573,6 +2641,7 @@ files: crc32: ea8901d9 sha1: 43fd8bfc395e3b2e3fbe9645d692a5eb04783d9c - name: skns.zip + path: mame/bios/skns.zip required: true category: bios_zip system: super-kaneko-nova @@ -2607,6 +2676,7 @@ files: crc32: 1d90517c sha1: 463962ffe19880135f0d95a7beda79e27448e872 - name: stvbios.zip + path: mame/bios/stvbios.zip required: true category: bios_zip system: sega-stv @@ -2673,6 +2743,7 @@ files: crc32: 15432ae2 sha1: 7d9364d546f3d3f839ec36be148076f8d26a65a6 - name: su2000.zip + path: mame/bios/su2000.zip required: true category: bios_zip source_ref: "upstream src/mame/misc/su2000.cpp:302" @@ -2854,6 +2925,7 @@ files: crc32: d84b58c2 sha1: 087b5a56ddb6bef6b1bc93b9a8e0d23de27aa399 - name: sys246.zip + path: mame/bios/sys246.zip required: true category: bios_zip system: namco-system246 @@ -2864,6 +2936,7 @@ files: crc32: 2b2e41a2 sha1: f0a74bbcaf801f3fd0b7002ebd0118564aae3528 - name: sys256.zip + path: mame/bios/sys256.zip required: true category: bios_zip system: namco-system256 @@ -2874,6 +2947,7 @@ files: crc32: b2a8eeb6 sha1: bc4fb4e1e53adbd92385f1726bd69663ff870f1e - name: sys573.zip + path: mame/bios/sys573.zip required: true category: bios_zip system: namco-system573 @@ -2910,6 +2984,7 @@ files: sha1: 779177e6312ef272483eeb64a5e84bbae6e301f2 description: Found on Dancing Stage Euro Mix 2 - name: taitotz.zip + path: mame/bios/taitotz.zip required: true category: bios_zip source_ref: "upstream src/mame/taito/taitotz.cpp:3014" @@ -2923,6 +2998,7 @@ files: crc32: c7c2dc6b sha1: bf88c818166c285130c5c73d6982f009da26e143 - name: tourvis.zip + path: mame/bios/tourvis.zip required: true category: bios_zip source_ref: "upstream src/mame/pce/tourvis.cpp:475" @@ -2983,6 +3059,7 @@ files: sha1: 881ea7802b9e241473bc8ced0472e0f1851c9886 description: VT-11 - name: triforce.zip + path: mame/bios/triforce.zip required: true category: bios_zip system: sega-triforce @@ -2993,6 +3070,7 @@ files: crc32: d1883221 sha1: c3cb7227e4dbc2af861e76d00cb59726105a2e4c - name: v4bios.zip + path: mame/bios/v4bios.zip required: true category: bios_zip source_ref: "upstream src/mame/barcrest/mpu4vid.cpp:8696" diff --git a/emulators/mamearcade.yml b/emulators/mamearcade.yml index 1eea839c2..3a6ee87bd 100644 --- a/emulators/mamearcade.yml +++ b/emulators/mamearcade.yml @@ -67,7 +67,9 @@ notes: | selection via src/mame/arcade.flt: 1130 arcade drivers from the full set. Excludes console/computer/pinball/fruit machine drivers. 50 BIOS root sets (vs 99 in full MAME). romload.cpp unmodified. - ROM search: content_dir + system_dir/mame/bios + system_dir/mame/roms. + ROM search: content_dir + system_dir/mame/bios + system_dir/mame/roms, never + system_dir itself (src/osd/libretro/libretro-internal/retro_init.cpp:580-597), + so the sets are read in mame/bios. files: # Support trees under system_dir/mame/, the paths Set_Path_Option passes @@ -104,6 +106,7 @@ files: # SNK Neo Geo MVS (AES excluded via arcade.flt) - name: neogeo.zip + path: "mame/bios/neogeo.zip" required: true category: bios_zip system: snk-neogeo-mvs @@ -252,6 +255,7 @@ files: # IGS PGM - name: pgm.zip + path: "mame/bios/pgm.zip" required: true category: bios_zip system: igs-pgm @@ -276,6 +280,7 @@ files: # Sega NAOMI / NAOMI 2 / GD-ROM / Atomiswave - name: naomi.zip + path: "mame/bios/naomi.zip" required: true category: bios_zip system: sega-naomi @@ -413,6 +418,7 @@ files: sha1: "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc" - name: naomi2.zip + path: "mame/bios/naomi2.zip" required: true category: bios_zip system: sega-naomi2 @@ -484,6 +490,7 @@ files: sha1: "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc" - name: naomigd.zip + path: "mame/bios/naomigd.zip" required: true category: bios_zip system: sega-naomigd @@ -535,6 +542,7 @@ files: sha1: "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc" - name: awbios.zip + path: "mame/bios/awbios.zip" required: true category: bios_zip system: sammy-atomiswave @@ -554,6 +562,7 @@ files: sha1: "5128fe2ddcced77332bdcab691c09958051fa564" - name: hod2bios.zip + path: "mame/bios/hod2bios.zip" required: false category: bios_zip system: sega-naomi @@ -590,6 +599,7 @@ files: sha1: "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc" - name: f355dlx.zip + path: "mame/bios/f355dlx.zip" required: false category: bios_zip system: sega-naomi @@ -625,6 +635,7 @@ files: sha1: "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc" - name: f355bios.zip + path: "mame/bios/f355bios.zip" required: false category: bios_zip system: sega-naomi @@ -652,6 +663,7 @@ files: sha1: "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc" - name: airlbios.zip + path: "mame/bios/airlbios.zip" required: false category: bios_zip system: sega-naomi @@ -676,6 +688,7 @@ files: # Sega ST-V - name: stvbios.zip + path: "mame/bios/stvbios.zip" required: true category: bios_zip system: sega-stv @@ -743,6 +756,7 @@ files: sha1: "7d9364d546f3d3f839ec36be148076f8d26a65a6" - name: sammymdl.zip + path: "mame/bios/sammymdl.zip" required: true category: bios_zip system: sammy-medal @@ -766,6 +780,7 @@ files: # Sega Mega Drive arcade - name: megaplay.zip + path: "mame/bios/megaplay.zip" required: true category: bios_zip system: sega-megaplay @@ -806,6 +821,7 @@ files: bad_dump: true - name: megatech.zip + path: "mame/bios/megatech.zip" required: true category: bios_zip system: sega-megatech @@ -833,6 +849,7 @@ files: sha1: "c9008c431a937c084fb475273093ca0b434b5f47" - name: isgsm.zip + path: "mame/bios/isgsm.zip" required: true category: bios_zip system: sega-isgsm @@ -845,6 +862,7 @@ files: # DECO Cassette - name: decocass.zip + path: "mame/bios/decocass.zip" required: true category: bios_zip system: deco-cassette @@ -1033,6 +1051,7 @@ files: # Nintendo arcade - name: playch10.zip + path: "mame/bios/playch10.zip" required: true category: bios_zip system: nintendo-playch10 @@ -1124,6 +1143,7 @@ files: sha1: "d10acafc8da9ff479c270ec01180cca61efe62f5" - name: nss.zip + path: "mame/bios/nss.zip" required: true category: bios_zip system: nintendo-nss @@ -1146,6 +1166,7 @@ files: sha1: "e3942f9d508c3c8074c3c3941376c37ca68b8e54" - name: aleck64.zip + path: "mame/bios/aleck64.zip" required: true category: bios_zip system: nintendo-aleck64 @@ -1166,6 +1187,7 @@ files: # Philips CD-i - name: cdibios.zip + path: "mame/bios/cdibios.zip" required: true category: bios_zip system: philips-cdi @@ -1189,6 +1211,7 @@ files: # Commodore Cubo (CD32-based) - name: cubo.zip + path: "mame/bios/cubo.zip" required: true category: bios_zip system: commodore-cubo @@ -1201,6 +1224,7 @@ files: # Namco - name: sys573.zip + path: "mame/bios/sys573.zip" required: true category: bios_zip system: namco-system573 @@ -1239,6 +1263,7 @@ files: # Konami - name: konamigx.zip + path: "mame/bios/konamigx.zip" required: true category: bios_zip system: konami-gx @@ -1250,6 +1275,7 @@ files: sha1: "c483aa98ff8ef40cdac359c19ad23fea5ecc1906" - name: konamigv.zip + path: "mame/bios/konamigv.zip" required: true category: bios_zip system: konami-gv @@ -1261,6 +1287,7 @@ files: sha1: "02a82a2fe1fba0404517c3602324bfa64e23e478" - name: kviper.zip + path: "mame/bios/kviper.zip" required: true category: bios_zip system: konami-viper @@ -1280,6 +1307,7 @@ files: sha1: "ed7cd9b2763b3e377df9663943160f9871f65105" - name: gq863.zip + path: "mame/bios/gq863.zip" required: true category: bios_zip system: konami-twinkle @@ -1295,6 +1323,7 @@ files: sha1: "cab5209f90f47b9ee6e721479913ad74e3ba84b1" - name: bubsys.zip + path: "mame/bios/bubsys.zip" required: true category: bios_zip system: konami-bubble-system @@ -1319,6 +1348,7 @@ files: # Sony ZN-based (PSX arcade) - name: coh1000c.zip + path: "mame/bios/coh1000c.zip" required: true category: bios_zip system: capcom-zn1 @@ -1340,6 +1370,7 @@ files: sha1: "966f3aee5d00e1312c455f855915d621e6cb0672" - name: coh3002c.zip + path: "mame/bios/coh3002c.zip" required: true category: bios_zip system: capcom-zn2 @@ -1355,6 +1386,7 @@ files: sha1: "3c3fb8227b05dace042dc1429b9f2355b1a15638" - name: coh1000t.zip + path: "mame/bios/coh1000t.zip" required: true category: bios_zip system: taito-fx1 @@ -1370,6 +1402,7 @@ files: sha1: "96d94f2b06fb7ecd91454969f4959a583ffb9d5a" - name: coh1000a.zip + path: "mame/bios/coh1000a.zip" required: true category: bios_zip system: acclaim-zn1 @@ -1385,6 +1418,7 @@ files: sha1: "decf77ab50f7f58c641c3214a11647924f3a8998" - name: coh1000w.zip + path: "mame/bios/coh1000w.zip" required: true category: bios_zip system: atari-zn1 @@ -1400,6 +1434,7 @@ files: sha1: "8e87941bfb374172628c8a37647e3a66b7166aa8" - name: coh1001l.zip + path: "mame/bios/coh1001l.zip" required: true category: bios_zip system: atlus-zn1 @@ -1415,6 +1450,7 @@ files: sha1: "8d2fe1facb4473cc20b4b477aaf881f9280939cf" - name: coh1002v.zip + path: "mame/bios/coh1002v.zip" required: true category: bios_zip system: videosystem-zn1 @@ -1430,6 +1466,7 @@ files: sha1: "b01479dc75a4a8a86bee7ac7cd10af2bda332544" - name: coh1002e.zip + path: "mame/bios/coh1002e.zip" required: true category: bios_zip system: eighting-zn1 @@ -1445,6 +1482,7 @@ files: sha1: "1069c1d9015028a51a1b314cfacb014ea90aa425" - name: coh1002m.zip + path: "mame/bios/coh1002m.zip" required: true category: bios_zip system: tecmo-tps @@ -1461,6 +1499,7 @@ files: # Taito - name: coh3002t.zip + path: "mame/bios/coh3002t.zip" required: true category: bios_zip system: taito-gnet @@ -1504,6 +1543,7 @@ files: sha1: "c6918dfbb6fcf686dde4b731e84f740177ab31f0" - name: coh1002t.zip + path: "mame/bios/coh1002t.zip" required: true category: bios_zip system: taito-gnet @@ -1528,6 +1568,7 @@ files: # Super Kaneko Nova System - name: skns.zip + path: "mame/bios/skns.zip" required: true category: bios_zip system: super-kaneko-nova @@ -1563,6 +1604,7 @@ files: sha1: "463962ffe19880135f0d95a7beda79e27448e872" - name: mac2bios.zip + path: "mame/bios/mac2bios.zip" required: false category: bios_zip system: imax-macs @@ -1570,6 +1612,7 @@ files: note: "macs2os_l.bin and macs2os_h.bin are both NO_DUMP (src/mame/seta/macs.cpp:532-535). handle_missing_file (src/emu/romload.cpp:529-571) counts a missing NO_DUMP ROM as known bad, not an error, so the machine runs without the set." - name: macsbios.zip + path: "mame/bios/macsbios.zip" required: true category: bios_zip system: imax-macs @@ -1590,6 +1633,7 @@ files: # Hyper Neo-Geo 64 - name: hng64.zip + path: "mame/bios/hng64.zip" required: true category: bios_zip system: hyper-neogeo64 @@ -1638,6 +1682,7 @@ files: # Amiga-based - name: ar_bios.zip + path: "mame/bios/ar_bios.zip" required: true category: bios_zip system: arcadia-systems @@ -1730,6 +1775,7 @@ files: # Atari - name: atarisy1.zip + path: "mame/bios/atarisy1.zip" required: true category: bios_zip system: atari-system1 @@ -1797,6 +1843,7 @@ files: sha1: "0a42a4816c89447b16e1f3245409591efea98a4a" - name: maxaflex.zip + path: "mame/bios/maxaflex.zip" required: true category: bios_zip system: exidy-maxaflex @@ -1817,6 +1864,7 @@ files: # Crystal System - name: crysbios.zip + path: "mame/bios/crysbios.zip" required: true category: bios_zip system: brezzasoft-crystal @@ -1835,6 +1883,7 @@ files: # Galaxy Games - name: galgames.zip + path: "mame/bios/galgames.zip" required: true category: bios_zip system: ces-galaxy-games @@ -1867,6 +1916,7 @@ files: # EFO Cedar Magnet - name: cedmag.zip + path: "mame/bios/cedmag.zip" required: true category: bios_zip system: efo-cedar-magnet @@ -1879,6 +1929,7 @@ files: # Misc - name: iteagle.zip + path: "mame/bios/iteagle.zip" required: true category: bios_zip system: itech-eagle @@ -1966,6 +2017,7 @@ files: sha1: "213cbdd6cd37ad9b5bfc9545084892a68d29f5ff" - name: pumpitup.zip + path: "mame/bios/pumpitup.zip" required: true category: bios_zip system: andamiro-pumpitup diff --git a/emulators/mamemess.yml b/emulators/mamemess.yml index 043df037f..eace3aea0 100644 --- a/emulators/mamemess.yml +++ b/emulators/mamemess.yml @@ -57,7 +57,9 @@ notes: | romload.cpp unmodified. No hiscore support. Paths under system_dir/mame/ (artwork, cheat, hash, ini, plugins, samples, - crosshair). ROM search: content_dir + system_dir/mame/bios + system_dir/mame/roms. + crosshair). ROM search: content_dir + system_dir/mame/bios + system_dir/mame/roms, + never system_dir itself (src/osd/libretro/libretro-internal/retro_init.cpp:580-597), + so the sets are read in mame/bios. Hash directory contains software list XMLs needed for MESS software loading. mess.flt exceptions: adds AES (+aes), CD-i consoles (+cdimono1, +cdimono2, @@ -457,6 +459,7 @@ files: # Miuchiz Virtual Companions - name: miuchiz.zip + path: "mame/bios/miuchiz.zip" required: true category: bios_zip source_ref: "upstream src/mame/misc/miuchiz.cpp:227" @@ -468,6 +471,7 @@ files: # XaviX TV games: e-kara family - name: ekara.zip + path: "mame/bios/ekara.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2904" @@ -478,6 +482,7 @@ files: sha1: "d75dda7434933135d2f7e353840a9384e9a0d586" - name: ekaraa.zip + path: "mame/bios/ekaraa.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2905" @@ -488,6 +493,7 @@ files: sha1: "450fbe53826cdb87ec797f84b9757987afcc1ec5" - name: ekaraj.zip + path: "mame/bios/ekaraj.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2906" @@ -498,6 +504,7 @@ files: sha1: "58b7f36a81571a2df5e812c118fdf68812a05abc" - name: ekarag.zip + path: "mame/bios/ekarag.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2907" @@ -508,6 +515,7 @@ files: sha1: "433e65a6ea029b67ee62b4b3de52ff3504cfdf16" - name: ekaras.zip + path: "mame/bios/ekaras.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2908" @@ -518,6 +526,7 @@ files: sha1: "402053e22e371c5f5e8069a4bf3b33841e742375" - name: isinger.zip + path: "mame/bios/isinger.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2910" @@ -528,6 +537,7 @@ files: sha1: "879da069ca8c126232a1b2dfcce25c8615540e48" - name: ekaraphs.zip + path: "mame/bios/ekaraphs.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2913" @@ -538,6 +548,7 @@ files: sha1: "baaf35d56fa45b6f995b8466331bb30f0035f734" - name: epitch.zip + path: "mame/bios/epitch.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2916" @@ -548,6 +559,7 @@ files: sha1: "58b7f36a81571a2df5e812c118fdf68812a05abc" - name: ekaramix.zip + path: "mame/bios/ekaramix.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2919" @@ -559,6 +571,7 @@ files: # XaviX TV games: DDR / Popira / misc - name: ddrfammt.zip + path: "mame/bios/ddrfammt.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2922" @@ -569,6 +582,7 @@ files: sha1: "a1043047056dd27bca69767ee2044461ec549465" - name: popira.zip + path: "mame/bios/popira.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2925" @@ -579,6 +593,7 @@ files: sha1: "fb2ae023fc8a188c79b2d6550f737e06c05e12da" - name: popirak.zip + path: "mame/bios/popirak.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2927" @@ -589,6 +604,7 @@ files: sha1: "7877ac33b57bdd8ceac6bda3b0006a3274ad4dce" - name: popira2.zip + path: "mame/bios/popira2.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2930" @@ -599,6 +615,7 @@ files: sha1: "8b6c812d37e2dc2f2531b0e47d84ad8485729dc5" - name: taikodp.zip + path: "mame/bios/taikodp.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2933" @@ -609,6 +626,7 @@ files: sha1: "03cae465965935fc084fb906f8f5de7679f42dd1" - name: jpopira.zip + path: "mame/bios/jpopira.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2936" @@ -623,6 +641,7 @@ files: sha1: "e8f4ab51445777fe459f9ff09333f548c4e3507c" - name: evio.zip + path: "mame/bios/evio.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2939" @@ -633,6 +652,7 @@ files: sha1: "f2b7e213eb78065a63ef484a619bcfc61299e30e" - name: tak_daig.zip + path: "mame/bios/tak_daig.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2944" @@ -643,6 +663,7 @@ files: sha1: "7d7b54684f8b0b92daf02738560779c7df627b91" - name: gcslottv.zip + path: "mame/bios/gcslottv.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2946" @@ -653,6 +674,7 @@ files: sha1: "1c7fc0c85d817db1550d40c0258f424770e0bd81" - name: hikara.zip + path: "mame/bios/hikara.zip" required: true category: bios_zip source_ref: "source src/mame/tvgames/xavix.cpp:2951" @@ -664,6 +686,7 @@ files: # Bally Astrocade - name: astrocde.zip + path: "mame/bios/astrocde.zip" required: true category: bios_zip system: bally-astrocade @@ -675,6 +698,7 @@ files: crc32: "ebc77f3a" - name: astrocdl.zip + path: "mame/bios/astrocdl.zip" required: false category: bios_zip system: bally-astrocade @@ -686,6 +710,7 @@ files: crc32: "d7c517ba" - name: astrocdw.zip + path: "mame/bios/astrocdw.zip" required: false category: bios_zip system: bally-astrocade @@ -698,6 +723,7 @@ files: # Apple II family: machine ROM sets - name: apple2.zip + path: "mame/bios/apple2.zip" required: true category: bios_zip system: apple2 @@ -729,6 +755,7 @@ files: crc32: "079589c4" - name: apple2p.zip + path: "mame/bios/apple2p.zip" required: true category: bios_zip system: apple2 @@ -764,6 +791,7 @@ files: crc32: "079589c4" - name: apple2e.zip + path: "mame/bios/apple2e.zip" required: true category: bios_zip system: apple2 @@ -787,6 +815,7 @@ files: crc32: "e47045f4" - name: apple2ee.zip + path: "mame/bios/apple2ee.zip" required: true category: bios_zip system: apple2 @@ -811,6 +840,7 @@ files: # Apple II: peripheral device ROM sets - name: a2diskiing.zip + path: "mame/bios/a2diskiing.zip" required: true category: bios_zip system: apple2 @@ -823,6 +853,7 @@ files: crc32: "ce7144f6" - name: d2fdc.zip + path: "mame/bios/d2fdc.zip" required: true category: bios_zip system: apple2 @@ -835,6 +866,7 @@ files: crc32: "b72a2c70" - name: a2cffa02.zip + path: "mame/bios/a2cffa02.zip" required: false category: bios_zip system: apple2 @@ -847,6 +879,7 @@ files: crc32: "3ecafce5" - name: votrsc01.zip + path: "mame/bios/votrsc01.zip" required: false category: bios_zip system: apple2 @@ -859,6 +892,7 @@ files: crc32: "528d1c57" - name: votrsc01a.zip + path: "mame/bios/votrsc01a.zip" required: false category: bios_zip system: apple2 @@ -872,6 +906,7 @@ files: # Apple IIgs - name: apple2gs.zip + path: "mame/bios/apple2gs.zip" required: true category: bios_zip system: apple-iigs @@ -896,6 +931,7 @@ files: # Casio Loopy - name: casloopy.zip + path: "mame/bios/casloopy.zip" required: true category: bios_zip system: casio-loopy @@ -912,6 +948,7 @@ files: # Casio PV-2000 - name: pv2000.zip + path: "mame/bios/pv2000.zip" required: true category: bios_zip system: casio-pv2000 @@ -924,6 +961,7 @@ files: # Coleco Adam - name: adam.zip + path: "mame/bios/adam.zip" required: true category: bios_zip system: coleco-adam @@ -959,6 +997,7 @@ files: crc32: "035a7a3d" - name: adam_kb.zip + path: "mame/bios/adam_kb.zip" required: true category: bios_zip system: coleco-adam @@ -970,6 +1009,7 @@ files: crc32: "ef204746" - name: adam_prn.zip + path: "mame/bios/adam_prn.zip" required: true category: bios_zip system: coleco-adam @@ -981,6 +1021,7 @@ files: crc32: "e8db783b" - name: adam_ddp.zip + path: "mame/bios/adam_ddp.zip" required: true category: bios_zip system: coleco-adam @@ -992,6 +1033,7 @@ files: crc32: "6b9ea1cf" - name: adam_fdc.zip + path: "mame/bios/adam_fdc.zip" required: true category: bios_zip system: coleco-adam @@ -1003,30 +1045,35 @@ files: crc32: "4b0b7143" - name: adam_fdc_320kb.zip + path: "mame/bios/adam_fdc_320kb.zip" required: false category: bios_zip system: coleco-adam source_ref: "upstream src/devices/bus/adamnet/fdc.cpp:76-85" - name: adam_fdc_a720dipi.zip + path: "mame/bios/adam_fdc_a720dipi.zip" required: false category: bios_zip system: coleco-adam source_ref: "upstream src/devices/bus/adamnet/fdc.cpp:92-96" - name: adam_fdc_fp720at.zip + path: "mame/bios/adam_fdc_fp720at.zip" required: false category: bios_zip system: coleco-adam source_ref: "upstream src/devices/bus/adamnet/fdc.cpp:103-107" - name: adam_fdc_mihddd.zip + path: "mame/bios/adam_fdc_mihddd.zip" required: false category: bios_zip system: coleco-adam source_ref: "upstream src/devices/bus/adamnet/fdc.cpp:114-117" - name: adam_spi.zip + path: "mame/bios/adam_spi.zip" required: false category: bios_zip system: coleco-adam @@ -1034,6 +1081,7 @@ files: # Entex Adventure Vision - name: advision.zip + path: "mame/bios/advision.zip" required: true category: bios_zip system: entex-advision @@ -1050,6 +1098,7 @@ files: # Bandai RX-78 - name: rx78.zip + path: "mame/bios/rx78.zip" required: true category: bios_zip system: bandai-rx78 @@ -1063,6 +1112,7 @@ files: # VTech CreatiVision - name: crvision.zip + path: "mame/bios/crvision.zip" required: true category: bios_zip system: crvision @@ -1074,6 +1124,7 @@ files: crc32: "c3c590c6" - name: fnvision.zip + path: "mame/bios/fnvision.zip" required: false category: bios_zip system: crvision @@ -1086,6 +1137,7 @@ files: crc32: "05602697" - name: lasr2001.zip + path: "mame/bios/lasr2001.zip" required: false category: bios_zip system: crvision @@ -1098,6 +1150,7 @@ files: crc32: "4dc35c39" - name: manager.zip + path: "mame/bios/manager.zip" required: false category: bios_zip system: crvision @@ -1115,6 +1168,7 @@ files: # VTech Laser 310 (VZ-300) - name: laser310.zip + path: "mame/bios/laser310.zip" required: true category: bios_zip system: laser310 @@ -1132,6 +1186,7 @@ files: # VTech Socrates Educational Video System - name: socrates.zip + path: "mame/bios/socrates.zip" required: true category: bios_zip system: vtech-socrates @@ -1161,6 +1216,7 @@ files: # Mattel Aquarius - name: aquarius.zip + path: "mame/bios/aquarius.zip" required: true category: bios_zip system: mattel-aquarius @@ -1180,6 +1236,7 @@ files: crc32: "e117f57c" - name: aquarius2.zip + path: "mame/bios/aquarius2.zip" required: true category: bios_zip system: mattel-aquarius @@ -1199,6 +1256,7 @@ files: crc32: "e117f57c" - name: aquarius_ar.zip + path: "mame/bios/aquarius_ar.zip" required: true category: bios_zip system: mattel-aquarius @@ -1215,6 +1273,7 @@ files: # Camputers Lynx 48K - name: lynx48k.zip + path: "mame/bios/lynx48k.zip" required: true category: bios_zip system: camplynx @@ -1239,6 +1298,7 @@ files: # Camputers Lynx 96K - name: lynx96k.zip + path: "mame/bios/lynx96k.zip" required: true category: bios_zip system: camplynx @@ -1271,6 +1331,7 @@ files: # Camputers Lynx 128K - name: lynx128k.zip + path: "mame/bios/lynx128k.zip" required: true category: bios_zip system: camplynx @@ -1295,6 +1356,7 @@ files: # EACA Colour Genie: parent machine ROM set - name: cgenie.zip + path: "mame/bios/cgenie.zip" required: true category: bios_zip system: cgenie @@ -1327,6 +1389,7 @@ files: # EACA Colour Genie: clone: New Zealand - name: cgenienz.zip + path: "mame/bios/cgenienz.zip" required: false category: bios_zip system: cgenie @@ -1347,6 +1410,7 @@ files: # EACA Colour Genie: expansion: FDC - name: cgenie_fdc.zip + path: "mame/bios/cgenie_fdc.zip" required: false category: bios_zip system: cgenie @@ -1372,6 +1436,7 @@ files: # Acorn Atom: parent machine ROM set - name: atom.zip + path: "mame/bios/atom.zip" required: true category: bios_zip system: atom @@ -1388,6 +1453,7 @@ files: # Acorn Atom: clone: Atom with BBC Basic - name: atombbc.zip + path: "mame/bios/atombbc.zip" required: false category: bios_zip system: atom @@ -1404,6 +1470,7 @@ files: # Acorn Atom: clone: Busicomputers Prophet 2 - name: prophet2.zip + path: "mame/bios/prophet2.zip" required: false category: bios_zip system: atom @@ -1424,6 +1491,7 @@ files: # Acorn Atom: bus device: Disc Pack (default on pl6) - name: atom_discpack.zip + path: "mame/bios/atom_discpack.zip" required: false category: bios_zip system: atom @@ -1437,6 +1505,7 @@ files: # Acorn Atom: bus device: GDOS - name: atom_gdos.zip + path: "mame/bios/atom_gdos.zip" required: false category: bios_zip system: atom @@ -1449,6 +1518,7 @@ files: # Acorn Atom: bus device: GDOS-2015 - name: atom_gdos2015.zip + path: "mame/bios/atom_gdos2015.zip" required: false category: bios_zip system: atom @@ -1461,6 +1531,7 @@ files: # Acorn Atom: bus device: Speech Module - name: atom_speech.zip + path: "mame/bios/atom_speech.zip" required: false category: bios_zip system: atom @@ -1473,6 +1544,7 @@ files: # Acorn Atom: bus device: 80 Column VDU - name: atom_vdu80.zip + path: "mame/bios/atom_vdu80.zip" required: false category: bios_zip system: atom @@ -1485,6 +1557,7 @@ files: # Tiger game.com - name: gamecom.zip + path: "mame/bios/gamecom.zip" required: true category: bios_zip system: tiger-game-com @@ -1501,6 +1574,7 @@ files: # Bit Corporation Gamate - name: gamate.zip + path: "mame/bios/gamate.zip" required: true category: bios_zip system: gamate @@ -1517,6 +1591,7 @@ files: # Epoch Game Pocket Computer - name: gamepock.zip + path: "mame/bios/gamepock.zip" required: true category: bios_zip system: gamepock @@ -1529,6 +1604,7 @@ files: # Hartung Game Master - name: gmaster.zip + path: "mame/bios/gmaster.zip" required: true category: bios_zip system: hartung-game-master @@ -1541,6 +1617,7 @@ files: # Fujitsu FM-7 family - name: fm7.zip + path: "mame/bios/fm7.zip" required: true category: bios_zip system: fm7 @@ -1568,6 +1645,7 @@ files: crc32: "62402ac9" - name: fm77av.zip + path: "mame/bios/fm77av.zip" required: true category: bios_zip system: fm7 @@ -1595,6 +1673,7 @@ files: crc32: "e9f16c42" - name: fmnew7.zip + path: "mame/bios/fmnew7.zip" required: false category: bios_zip system: fm7 @@ -1612,6 +1691,7 @@ files: # Sharp MZ-80K (Japanese, parent) - name: mz80kj.zip + path: "mame/bios/mz80kj.zip" required: true category: bios_zip system: mz80k @@ -1636,6 +1716,7 @@ files: # Sharp MZ-80K (clone) - name: mz80k.zip + path: "mame/bios/mz80k.zip" required: true category: bios_zip system: mz80k @@ -1668,6 +1749,7 @@ files: # Sharp MZ-2000 - name: mz2000.zip + path: "mame/bios/mz2000.zip" required: true category: bios_zip system: mz2000 @@ -1684,6 +1766,7 @@ files: # Sharp MZ-2500 - name: mz2500.zip + path: "mame/bios/mz2500.zip" required: true category: bios_zip system: mz2500 @@ -1716,6 +1799,7 @@ files: # Sharp MZ-700 - name: mz700.zip + path: "mame/bios/mz700.zip" required: true category: bios_zip system: mz700 @@ -1732,6 +1816,7 @@ files: # Sharp MZ-800 - name: mz800.zip + path: "mame/bios/mz800.zip" required: true category: bios_zip system: mz800 @@ -1756,6 +1841,7 @@ files: # NEC PC-6001 family - name: pc6001.zip + path: "mame/bios/pc6001.zip" required: true category: bios_zip system: pc60 @@ -1775,6 +1861,7 @@ files: crc32: "b0142d32" - name: pc6001a.zip + path: "mame/bios/pc6001a.zip" required: false category: bios_zip system: pc60 @@ -1794,6 +1881,7 @@ files: crc32: "49c21d08" - name: pc6001mk2.zip + path: "mame/bios/pc6001mk2.zip" required: true category: bios_zip system: pc60 @@ -1821,6 +1909,7 @@ files: crc32: "20c8f3eb" - name: pc6601.zip + path: "mame/bios/pc6601.zip" required: false category: bios_zip system: pc60 @@ -1848,6 +1937,7 @@ files: crc32: "20c8f3eb" - name: pc6001mk2sr.zip + path: "mame/bios/pc6001mk2sr.zip" required: true category: bios_zip system: pc60 @@ -1867,6 +1957,7 @@ files: crc32: "73bc3256" - name: pc6601sr.zip + path: "mame/bios/pc6601sr.zip" required: false category: bios_zip system: pc60 @@ -1911,6 +2002,7 @@ files: # Technosys Aamber Pegasus - name: pegasus.zip + path: "mame/bios/pegasus.zip" required: true category: bios_zip system: pegasus @@ -1956,6 +2048,7 @@ files: # Funtech Super A'Can - name: supracan.zip + path: "mame/bios/supracan.zip" required: true category: bios_zip system: supracan @@ -1975,6 +2068,7 @@ files: crc32: "bf950ab7" - name: umc6650.zip + path: "mame/bios/umc6650.zip" required: true category: bios_zip system: supracan @@ -1990,6 +2084,7 @@ files: # vis.cpp: vis (parent, WORKING). Tandy/Memorex MD-2500 (1992). # CD-ROM-based multimedia system built on modified 286 PC hardware. - name: vis.zip + path: "mame/bios/vis.zip" required: true category: bios_zip system: tandy-vis @@ -2011,6 +2106,7 @@ files: # Z80-based home computers (1977-1983). Only trs80 (Level I) is MACHINE_SUPPORTS_SAVE, # all others MACHINE_NOT_WORKING. Software lists: trs80_cass, trs80_flop, trs80_quik. - name: trs80.zip + path: "mame/bios/trs80.zip" required: true category: bios_zip system: trs80 @@ -2027,6 +2123,7 @@ files: crc32: "0033f2b9" - name: trs80l2.zip + path: "mame/bios/trs80l2.zip" required: true category: bios_zip system: trs80 @@ -2066,6 +2163,7 @@ files: crc32: "0033f2b9" - name: eg3003.zip + path: "mame/bios/eg3003.zip" required: false category: bios_zip system: trs80 @@ -2097,6 +2195,7 @@ files: crc32: "150c5f1f" - name: sys80.zip + path: "mame/bios/sys80.zip" required: false category: bios_zip system: trs80 @@ -2113,6 +2212,7 @@ files: crc32: "0033f2b9" - name: ht1080z.zip + path: "mame/bios/ht1080z.zip" required: false category: bios_zip system: trs80 @@ -2125,6 +2225,7 @@ files: crc32: "e8c59d4f" - name: ht1080z2.zip + path: "mame/bios/ht1080z2.zip" required: false category: bios_zip system: trs80 @@ -2141,6 +2242,7 @@ files: crc32: "6728f0ab" - name: ht108064.zip + path: "mame/bios/ht108064.zip" required: false category: bios_zip system: trs80 @@ -2165,6 +2267,7 @@ files: crc32: "e76b73a4" - name: trs80m3.zip + path: "mame/bios/trs80m3.zip" required: true category: bios_zip system: trs80 @@ -2204,6 +2307,7 @@ files: crc32: "444c8b60" - name: trs80m4.zip + path: "mame/bios/trs80m4.zip" required: false category: bios_zip system: trs80 @@ -2222,6 +2326,7 @@ files: crc32: "444c8b60" - name: trs80m4p.zip + path: "mame/bios/trs80m4p.zip" required: false category: bios_zip system: trs80 @@ -2246,6 +2351,7 @@ files: crc32: "1ac44bea" - name: cp500.zip + path: "mame/bios/cp500.zip" required: false category: bios_zip system: trs80 @@ -2263,6 +2369,7 @@ files: # TI-99/4A family: machine ROM sets - name: ti99_4a.zip + path: "mame/bios/ti99_4a.zip" required: true category: bios_zip system: ti99 @@ -2291,6 +2398,7 @@ files: crc32: "37859301" - name: ti99_4.zip + path: "mame/bios/ti99_4.zip" required: false category: bios_zip system: ti99 @@ -2320,6 +2428,7 @@ files: # TI-99/4A: peripheral device ROM sets - name: ti99_speech.zip + path: "mame/bios/ti99_speech.zip" required: false category: bios_zip system: ti99 @@ -2336,6 +2445,7 @@ files: crc32: "65d00401" - name: ti99_fdc.zip + path: "mame/bios/ti99_fdc.zip" required: false category: bios_zip system: ti99 @@ -2352,6 +2462,7 @@ files: crc32: "2c921087" - name: ti99_bwg.zip + path: "mame/bios/ti99_bwg.zip" required: false category: bios_zip system: ti99 @@ -2364,6 +2475,7 @@ files: crc32: "06f1ec89" - name: ti99_ccdcc.zip + path: "mame/bios/ti99_ccdcc.zip" required: false category: bios_zip system: ti99 @@ -2380,6 +2492,7 @@ files: crc32: "9c4e5c08" - name: ti99_ccfdc.zip + path: "mame/bios/ti99_ccfdc.zip" required: false category: bios_zip system: ti99 @@ -2396,6 +2509,7 @@ files: crc32: "0cad8f5b" - name: ti99_rs232.zip + path: "mame/bios/ti99_rs232.zip" required: false category: bios_zip system: ti99 @@ -2408,6 +2522,7 @@ files: crc32: "eab382fb" - name: ti99_evpc.zip + path: "mame/bios/ti99_evpc.zip" required: false category: bios_zip system: ti99 @@ -2420,6 +2535,7 @@ files: crc32: "a062b75d" - name: ti99_hfdc.zip + path: "mame/bios/ti99_hfdc.zip" required: false category: bios_zip system: ti99 @@ -2432,6 +2548,7 @@ files: crc32: "66fbe0ed" - name: ti99_pcode.zip + path: "mame/bios/ti99_pcode.zip" required: false category: bios_zip system: ti99 @@ -2480,6 +2597,7 @@ files: crc32: "46a06b8b" - name: ti99_ddcc1.zip + path: "mame/bios/ti99_ddcc1.zip" required: false category: bios_zip system: ti99 @@ -2492,6 +2610,7 @@ files: crc32: "042968a9" - name: ti99_myarcmem.zip + path: "mame/bios/ti99_myarcmem.zip" required: false category: bios_zip system: ti99 @@ -2504,6 +2623,7 @@ files: crc32: "41fbb96d" - name: ti99_tipi.zip + path: "mame/bios/ti99_tipi.zip" required: false category: bios_zip system: ti99 @@ -2524,6 +2644,7 @@ files: crc32: "3b9cb922" - name: ti99_whtscsi.zip + path: "mame/bios/ti99_whtscsi.zip" required: false category: bios_zip system: ti99 @@ -2536,6 +2657,7 @@ files: crc32: "6e067c22" - name: ti99_arcturus.zip + path: "mame/bios/ti99_arcturus.zip" required: false category: bios_zip system: ti99 @@ -2556,6 +2678,7 @@ files: crc32: "e9ce9f4e" - name: ti99_gkracker.zip + path: "mame/bios/ti99_gkracker.zip" required: false category: bios_zip system: ti99 diff --git a/scripts/common.py b/scripts/common.py index d70cda1c0..1b09493e6 100644 --- a/scripts/common.py +++ b/scripts/common.py @@ -2905,6 +2905,32 @@ def own_build_tags(config: dict, standalone: set[str]) -> set[str]: } +def twin_build_names(config: dict) -> set[str]: + """The libretro core names of emulators a platform also runs standalone + under another name. + + RetroBat's es_systems.cfg offers MAME as the libretro core mame and as + the standalone mame64, two names of one profile: the platform runs it + both ways, and each build reads its own layout. + """ + standalone = {str(c) for c in config.get("standalone_cores") or []} + libretro = {str(c) for c in config.get("cores") or []} - standalone if isinstance( + config.get("cores"), list + ) else set() + if not standalone or not libretro: + return set() + profiles = load_emulator_profiles(str(Path(__file__).resolve().parent.parent / "emulators")) + found: set[str] = set() + for key, profile in profiles.items(): + kind = str(profile.get("type", "")) + if "libretro" not in kind or "standalone" not in kind: + continue + names = {key, *(str(c) for c in profile.get("cores") or [])} + if names & standalone: + found |= names & libretro + return found + + def standalone_set(config: dict) -> set[str]: """The emulators a platform launches standalone, with its dual-mode ones. @@ -2924,6 +2950,7 @@ def standalone_set(config: dict) -> set[str]: & set(map(str, config.get("standalone_cores") or [])) } names |= own_build_tags(config, names) + names |= {DUAL_MODE_PREFIX + n for n in twin_build_names(config)} # The system directory each core is handed travels the same way, so # platform_layouts places a core's files below it for every reader. names |= { diff --git a/scripts/scraper/_hash_merge.py b/scripts/scraper/_hash_merge.py index 4fe3cc93d..b83531a83 100644 --- a/scripts/scraper/_hash_merge.py +++ b/scripts/scraper/_hash_merge.py @@ -578,8 +578,10 @@ def _append_new_entries(text: str, files: list[dict], original: str) -> str: return text lines = [] + profile_type = str(existing_data.get("type") or "") for fe in new_entries: lines.append(f"\n - name: {_yaml_scalar(fe['name'])}") + lines.extend(set_path_lines(profile_type, fe["name"])) lines.append(f" required: {str(fe['required']).lower()}") lines.append(" category: bios_zip") if fe.get("source_ref"): @@ -715,10 +717,27 @@ def _rewrite_systems(section: str, systems: dict[str, list[str]]) -> str: return "\n".join(out) -def _format_device_entry(name: str, device: dict, role: str) -> str: +def set_path_lines(profile_type: str, name: str) -> list[str]: + """Where each build of a MAME profile reads a set it lists. + + The libretro build searches the content folder, then /mame/bios + and /mame/roms (libretro-internal/retro_init.cpp, + Set_Path_Option), never the system folder itself. The standalone build + reads the top of its rompath. + """ + if "libretro" not in profile_type: + return [] + lines = [f' path: "mame/bios/{name}"'] + if "standalone" in profile_type: + lines.append(f' standalone_path: "{name}"') + return lines + + +def _format_device_entry(name: str, device: dict, role: str, profile_type: str = "") -> str: """One generated device entry, in the field order of the written ones.""" lines = [ f" - name: {_zip_scalar(name)}", + *set_path_lines(profile_type, name), " required: false", " category: bios_zip", *_system_lines(device.get("systems") or []), @@ -779,7 +798,9 @@ def merge_mame_devices( name = f"{set_name}.zip" existing = entries.get(name) if not existing: - new_blocks[name] = _format_device_entry(name, device, role) + new_blocks[name] = _format_device_entry( + name, device, role, str(profile.get("type") or "") + ) report["added"].append(set_name) continue if any(e.get("category") != "bios_zip" for e in existing): diff --git a/scripts/scraper/mame_hash_scraper.py b/scripts/scraper/mame_hash_scraper.py index 550d34b12..28557323b 100644 --- a/scripts/scraper/mame_hash_scraper.py +++ b/scripts/scraper/mame_hash_scraper.py @@ -453,6 +453,10 @@ def release_profile( name = f"{set_name}.zip" entry: dict[str, Any] = { "name": name, + # The libretro build searches the content folder, then + # /mame/bios and /mame/roms (retro_init.cpp, + # Set_Path_Option): the system folder itself is not read. + "path": f"mame/bios/{name}", "required": settled_required(known.get(name, {}), data), "category": "bios_zip", } diff --git a/tests/test_hash_merge.py b/tests/test_hash_merge.py index 8b63de4b3..22e63b710 100644 --- a/tests/test_hash_merge.py +++ b/tests/test_hash_merge.py @@ -488,6 +488,8 @@ class AReleaseProfileDescribesItsOwnRelease(unittest.TestCase): self.assertEqual(files["neogeo.zip"]["system"], "snk-neogeo-mvs") self.assertNotIn("system", files["newset.zip"]) self.assertEqual(files["neogeo.zip"]["source_ref"], "upstream src/mame/neogeo/neogeo.cpp:10") + # The libretro build reads /mame/bios, never the system root. + self.assertEqual(files["neogeo.zip"]["path"], "mame/bios/neogeo.zip") def test_a_set_the_release_runs_without_is_not_required(self): """recel is undumped at 0.258: the current profile's true does not apply.""" diff --git a/tests/test_launcher_placement.py b/tests/test_launcher_placement.py index b02453c77..9942638b7 100644 --- a/tests/test_launcher_placement.py +++ b/tests/test_launcher_placement.py @@ -859,6 +859,35 @@ class MameSearchPaths(unittest.TestCase): self.assertEqual(entry["standalone_path"], "psxmame/bios/" + entry["name"]) +class LibretroMameSetsInMameBios(unittest.TestCase): + """libretro/mame searches the content folder, then /mame/bios and + /mame/roms, never the system folder itself + (src/osd/libretro/libretro-internal/retro_init.cpp:580-597).""" + + def test_every_libretro_mame_set_is_read_in_mame_bios(self) -> None: + profiles = load_emulator_profiles(str(REPO_ROOT / "emulators")) + for key in ("mame", "mame0258", "mame0278", "mamearcade", "mamemess"): + sets = [f for f in profiles[key]["files"] if f.get("category") == "bios_zip" + and f.get("mode") != "standalone" and f["name"] != "bbc.zip"] + self.assertTrue(sets, key) + for entry in sets: + self.assertEqual(entry.get("path"), "mame/bios/" + entry["name"], key) + + def test_the_standalone_build_keeps_its_rompath_layout(self) -> None: + profile = load_emulator_profiles(str(REPO_ROOT / "emulators"))["mame"] + for entry in profile["files"]: + if str(entry.get("path", "")).startswith("mame/bios/"): + self.assertEqual(entry.get("standalone_path"), entry["name"]) + + def test_retrobat_lays_out_both_builds(self) -> None: + # es_systems.cfg offers the libretro core mame and the standalone + # mame64, two names of one profile. + profile = load_emulator_profiles(str(REPO_ROOT / "emulators"))["mame"] + config = load_platform_config("retrobat", str(REPO_ROOT / "platforms")) + builds = sorted(s for _v, s in platform_layouts("mame", profile, standalone_set(config))) + self.assertEqual(builds, [False, True]) + + class GzdoomOnRetroDECK(unittest.TestCase): """RetroDECK writes RETRODECKROMSDIR/doom into [IWADSearch.Directories] (gzdoom.ini:9, component_prepare.sh:27).""" From 6c41ff95ea839dece5562be0e34d8f5cd1a5cb55 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 14:04:44 +0100 Subject: [PATCH 28/31] fix: give AdvanceMAME's sets both dir_rom folders EmuELEC starts AdvanceMAME for arcade, mame and cps1-3 (es_systems.json). advmame.sh sets dir_rom to /storage/roms/arcade for arcade and keeps /storage/roms/mame for every other system (advmame.sh:26-30, 80), so an arcade set is read in both. A binding gave each entry one place: an entry launched both for a system a record names and for one it does not now takes the place of each, in the pack, the manifest and verify. A system the platform's list or machines put the entry under stands for the entry's own ids, so XRoar's coco3.rom stays in RetroBat's bios/coco alone. The AdvanceMAME sets are filed under arcade as well as their board. A second-pass copy outside the BIOS tree now carries its layout path and resolves by it, as the first pass does: EmuELEC's roms/mame/stvbios.zip took bios/Arcade/MAME's set by that tail, roms/arcade/stvbios.zip the Arcade/Arcade one. Manifests: EmuELEC gains the 29 sets in roms/arcade, each the file roms/mame holds. roms/mame/stvbios.zip changes from bios/Arcade/MAME to bios/Arcade/Arcade/stvbios.zip, the copy the entry resolves to. Nothing else moves. --- emulators/advancemame.yml | 116 +++++++++++++++++++++++-------- scripts/common.py | 84 ++++++++++++++++------ scripts/packextras.py | 5 ++ tests/test_launcher_placement.py | 34 +++++++-- 4 files changed, 183 insertions(+), 56 deletions(-) diff --git a/emulators/advancemame.yml b/emulators/advancemame.yml index 11e2e4482..b1e4dd9c6 100644 --- a/emulators/advancemame.yml +++ b/emulators/advancemame.yml @@ -162,7 +162,9 @@ files: path: "neogeo.zip" required: true category: bios_zip - system: snk-neogeo-mvs + systems: + - snk-neogeo-mvs + - arcade source_ref: "src/drivers/neogeo.c:7941-7955,8555" note: >- Eight MVS BIOS variants selected with misc_bios (euro, euro-s1, us, @@ -230,7 +232,9 @@ files: path: "pgm.zip" required: true category: bios_zip - system: igs-pgm + systems: + - igs-pgm + - arcade source_ref: "src/drivers/pgm.c:4415-4426, src/drivers/pgm.c:6904" contents: - name: pgm_p01s.rom @@ -254,7 +258,9 @@ files: path: "stvbios.zip" required: true category: bios_zip - system: sega-stv + systems: + - sega-stv + - arcade source_ref: "src/drivers/stv.c:3251-3253,4281" note: >- Nine BIOS variants selected with misc_bios (japan, japana, us, japanb, @@ -311,7 +317,9 @@ files: path: "megaplay.zip" required: true category: bios_zip - system: sega-megaplay + systems: + - sega-megaplay + - arcade source_ref: "src/drivers/megaplay.c:793-796,991" note: >- Two BIOS variants selected with misc_bios (ver1, ver2), ver1 by @@ -333,7 +341,9 @@ files: path: "megatech.zip" required: true category: bios_zip - system: sega-megatech + systems: + - sega-megatech + - arcade source_ref: "src/drivers/megatech.c:456-459,868" contents: - name: epr12664.20 @@ -346,7 +356,9 @@ files: path: "decocass.zip" required: true category: bios_zip - system: deco-cassette + systems: + - deco-cassette + - arcade source_ref: "src/drivers/decocass.c:729-732,1215" note: >- Two main CPU BIOS variants selected with misc_bios (bios0, bios1), @@ -399,7 +411,9 @@ files: path: "playch10.zip" required: true category: bios_zip - system: nintendo-playch10 + systems: + - nintendo-playch10 + - arcade source_ref: "src/drivers/playch10.c:1650-1653,1661" note: >- Two BIOS variants selected with misc_bios (dual, single), dual by @@ -451,7 +465,9 @@ files: path: "nss.zip" required: true category: bios_zip - system: nintendo-nss + systems: + - nintendo-nss + - arcade source_ref: "src/drivers/nss.c:526-528,659" contents: - name: spc700.rom @@ -480,7 +496,9 @@ files: path: "skns.zip" required: true category: bios_zip - system: super-kaneko-nova + systems: + - super-kaneko-nova + - arcade source_ref: "src/drivers/suprnova.c:1272-1279,1767" note: >- Five region BIOS ROMs, all loaded into the same region. @@ -516,7 +534,9 @@ files: path: "konamigx.zip" required: true category: bios_zip - system: konami-gx + systems: + - konami-gx + - arcade source_ref: "src/drivers/konamigx.c:2180-2183,3521" contents: - name: 300a01.34k @@ -529,7 +549,9 @@ files: path: "konamigv.zip" required: true category: bios_zip - system: konami-gv + systems: + - konami-gv + - arcade source_ref: "src/drivers/konamigv.c:974-978,1060" contents: - name: 999a01.7e @@ -542,7 +564,9 @@ files: path: "cvs.zip" required: true category: bios_zip - system: century-cvs + systems: + - century-cvs + - arcade source_ref: "src/drivers/cvs.c:422-432,1403" contents: - name: 5b.bin @@ -566,7 +590,9 @@ files: path: "cpzn1.zip" required: true category: bios_zip - system: capcom-zn1 + systems: + - capcom-zn1 + - arcade source_ref: "src/drivers/zn.c:3188-3190, src/drivers/zn.c:4635" contents: - name: coh-1000c.353 @@ -579,7 +605,9 @@ files: path: "cpzn2.zip" required: true category: bios_zip - system: capcom-zn2 + systems: + - capcom-zn2 + - arcade source_ref: "src/drivers/zn.c:3423-3425, src/drivers/zn.c:4653" contents: - name: coh-3002c.353 @@ -592,7 +620,9 @@ files: path: "tps.zip" required: true category: bios_zip - system: tecmo-tps + systems: + - tecmo-tps + - arcade source_ref: "src/drivers/zn.c:3866-3868, src/drivers/zn.c:4700" contents: - name: coh-1002m.353 @@ -605,7 +635,9 @@ files: path: "taitofx1.zip" required: true category: bios_zip - system: taito-fx1 + systems: + - taito-fx1 + - arcade source_ref: "src/drivers/zn.c:4162-4164, src/drivers/zn.c:4733" contents: - name: coh-1000t.353 @@ -618,7 +650,9 @@ files: path: "psarc95.zip" required: true category: bios_zip - system: eighting-zn1 + systems: + - eighting-zn1 + - arcade source_ref: "src/drivers/zn.c:4434-4436, src/drivers/zn.c:4760" contents: - name: coh-1002e.353 @@ -631,7 +665,9 @@ files: path: "atluspsx.zip" required: true category: bios_zip - system: atlus-zn1 + systems: + - atlus-zn1 + - arcade source_ref: "src/drivers/zn.c:4605-4607, src/drivers/zn.c:4772" contents: - name: coh-1001l.353 @@ -644,7 +680,9 @@ files: path: "atpsx.zip" required: true category: bios_zip - system: atari-zn1 + systems: + - atari-zn1 + - arcade source_ref: "src/drivers/zn.c:4520-4522, src/drivers/zn.c:4680" contents: - name: coh-1000w.353 @@ -657,7 +695,9 @@ files: path: "acpsx.zip" required: true category: bios_zip - system: acclaim-zn1 + systems: + - acclaim-zn1 + - arcade source_ref: "src/drivers/zn.c:4543-4545, src/drivers/zn.c:4689" contents: - name: coh-1000a.353 @@ -670,7 +710,9 @@ files: path: "coh1002v.zip" required: true category: bios_zip - system: videosystem-zn1 + systems: + - videosystem-zn1 + - arcade source_ref: "src/drivers/zn.c:4090-4096, src/drivers/zn.c:4722" contents: - name: coh-1002v.ic353 @@ -683,7 +725,9 @@ files: path: "aleck64.zip" required: true category: bios_zip - system: nintendo-aleck64 + systems: + - nintendo-aleck64 + - arcade source_ref: "src/drivers/aleck64.c:697-699,778" contents: - name: pifdata.bin @@ -696,7 +740,9 @@ files: path: "atarisy1.zip" required: true category: bios_zip - system: atari-system1 + systems: + - atari-system1 + - arcade source_ref: "src/drivers/atarisy1.c:837-850, src/drivers/atarisy1.c:2299" contents: - name: "136032.114.j11" @@ -720,7 +766,9 @@ files: path: "cedmag.zip" required: true category: bios_zip - system: efo-cedar-magnet + systems: + - efo-cedar-magnet + - arcade source_ref: "src/drivers/cedar_magnet.c:881-890, src/drivers/cedar_magnet.c:948" contents: - name: "magnet-master-vid-e03.bin" @@ -733,7 +781,9 @@ files: path: "ar_bios.zip" required: true category: bios_zip - system: arcadia-systems + systems: + - arcadia-systems + - arcade source_ref: "src/drivers/arsystems.c:356-377,823" note: >- Three BIOS variants selected with misc_bios (onep300, onep211, @@ -801,7 +851,9 @@ files: path: "maxaflex.zip" required: true category: bios_zip - system: exidy-maxaflex + systems: + - exidy-maxaflex + - arcade source_ref: "src/drivers/maxaflex.c:520-529,585" contents: - name: atarixl.rom @@ -825,7 +877,9 @@ files: path: "crysbios.zip" required: true category: bios_zip - system: brezzasoft-crystal + systems: + - brezzasoft-crystal + - arcade source_ref: "src/drivers/crystal.c:924-929,1032" contents: - name: mx27l1000.u14 @@ -838,7 +892,9 @@ files: path: "macsbios.zip" required: true category: bios_zip - system: imax-macs + systems: + - imax-macs + - arcade source_ref: "src/drivers/macs.c:396-404,614" contents: - name: macsos_l.u43 @@ -857,7 +913,9 @@ files: path: "bctvidbs.zip" required: true category: bios_zip - system: barcrest-mpu4 + systems: + - barcrest-mpu4 + - arcade source_ref: "src/drivers/mpu4.c:2016-2019,2177" contents: - name: vid.p1 diff --git a/scripts/common.py b/scripts/common.py index 1b09493e6..cb4149de5 100644 --- a/scripts/common.py +++ b/scripts/common.py @@ -3184,6 +3184,29 @@ def standalone_bindings_for( ) +def _placed_entry(entry: dict, profile: dict, placed: tuple[str, str]) -> dict: + """A standalone entry moved to the (tree, path) a platform reads it from.""" + tree, path = placed + moved = {**entry, "standalone_path": path, + "layout_path": standalone_layout_path(entry, profile)} + if entry.get("load_from"): + # The build's own root no longer applies: RetroDECK hands + # Cemu's MLC, read from its data directory, to bios/cemu. + load_from = entry["load_from"] + moved["load_from"] = { + **(load_from if isinstance(load_from, dict) else {"libretro": load_from}), + "standalone": "system_dir", + } + if tree == "install": + # Below the roms root inside the install tree (AmberELEC's + # /storage/roms): a plain dest the platform prefix skips. + return {**moved, "unprefixed": True} + # A file the launcher runs from the roms directory (ROCKNIX's + # roms/pico-8) or an emulator folder (RetroBat's emulators/pico8) + # is relative to it, and says so. + return {**moved, "root": tree} if tree else moved + + def platform_layouts( emu_name: str, profile: dict, standalone_cores: set[str] ) -> list[tuple[dict, bool]]: @@ -3218,7 +3241,14 @@ def platform_layouts( for system in own: family.setdefault(system, set()).update(entry_launch_systems(f, index) - own) - def bindings_of(entry: dict) -> dict[str, tuple[str, str]]: + # The systems the launcher records name: a launch for one of them reads + # the folder its record gives, every other launch the folder the records + # naming none give. + named_systems = frozenset().union(*( + h.systems for h in _handed(standalone_cores) if h.emulator in names + )) if per_system else frozenset() + + def launch_systems(entry: dict) -> frozenset[str]: systems: frozenset[str] = frozenset() if per_system: own = entry_launch_systems(entry, {}) @@ -3232,12 +3262,39 @@ def platform_layouts( systems = systems.union(*( index.get(MACHINE_KEY + _norm_system_id(s), set()) for s in own )) + return systems + + def bindings_for(systems: frozenset[str]) -> dict[str, tuple[str, str]]: if systems not in by_systems: by_systems[systems] = standalone_bindings_for( emu_name, profile, standalone_cores, systems ) return by_systems[systems] + def bindings_of(entry: dict) -> dict[str, tuple[str, str]]: + return bindings_for(launch_systems(entry)) + + def destinations(entry: dict) -> list[tuple[str, str] | None]: + """Each place the entry's launches read it from, in launch order. + + An entry of a system a record names is read where that record puts + it. One also launched for systems no record names is read, for those + launches, where the records naming none put it: EmuELEC starts + AdvanceMAME with dir_rom roms/arcade for arcade and roms/mame for + mame and cps1-3 (advmame.sh:26-30), and an arcade set is read in both. + """ + systems = launch_systems(entry) + found = [standalone_destination(entry, profile, bindings_for(systems))] + # A system the platform's list or machines put the entry under + # stands for the entry's own ids: XRoar's coco3 is launched as coco. + own = entry_launch_systems(entry, {}) + launched = (systems - own) | (own & named_systems) if systems != own else systems + if launched & named_systems and launched - named_systems: + generic = standalone_destination(entry, profile, bindings_for(frozenset())) + if generic not in found: + found.append(generic) + return found + layout_entries = [ f for f in profile.get("files") or [] if isinstance(f, dict) and standalone_layout_path(f, profile) is not None @@ -3255,30 +3312,11 @@ def platform_layouts( if not isinstance(f, dict) or standalone_layout_path(f, profile) is None: files.append(f) continue - placed = standalone_destination(f, profile, bindings_of(f)) - if placed is None or placed[0] == "outside": + places = [p for p in destinations(f) if p is not None and p[0] != "outside"] + if not places: files.append({**f, "unplaced": OUTSIDE_BIOS_FOLDER}) continue - tree, path = placed - moved = {**f, "standalone_path": path, - "layout_path": standalone_layout_path(f, profile)} - if f.get("load_from"): - # The build's own root no longer applies: RetroDECK hands - # Cemu's MLC, read from its data directory, to bios/cemu. - load_from = f["load_from"] - moved["load_from"] = { - **(load_from if isinstance(load_from, dict) else {"libretro": load_from}), - "standalone": "system_dir", - } - if tree == "install": - # Below the roms root inside the install tree (AmberELEC's - # /storage/roms): a plain dest the platform prefix skips. - files.append({**moved, "unprefixed": True}) - continue - # A file the launcher runs from the roms directory (ROCKNIX's - # roms/pico-8) or an emulator folder (RetroBat's emulators/pico8) - # is relative to it, and says so. - files.append({**moved, "root": tree} if tree else moved) + files.extend(_placed_entry(f, profile, placed) for placed in places) standalone = {**profile, "files": files} dual = {c.removeprefix(DUAL_MODE_PREFIX) for c in standalone_cores if c.startswith(DUAL_MODE_PREFIX)} diff --git a/scripts/packextras.py b/scripts/packextras.py index 1531c384a..e47228a7b 100644 --- a/scripts/packextras.py +++ b/scripts/packextras.py @@ -1545,6 +1545,11 @@ def _collect_emulator_extras( extra["system_dir"] = f["system_dir"] if f.get("unprefixed"): extra["unprefixed"] = True + # A copy placed outside the BIOS tree resolves by its layout + # path alone, as the first pass does: EmuELEC's + # roms/mame/stvbios.zip took bios/Arcade/MAME's set by that tail. + if f.get("layout_path"): + extra["layout_path"] = f["layout_path"] extra["claim_order"] = (2, 0, emu_name) if _take(extra, full_dest, seen_dests, taken): extras.append(extra) diff --git a/tests/test_launcher_placement.py b/tests/test_launcher_placement.py index 9942638b7..6e4d1558a 100644 --- a/tests/test_launcher_placement.py +++ b/tests/test_launcher_placement.py @@ -912,13 +912,38 @@ class AdvanceMameOnEmuELEC(unittest.TestCase): """advmame.rc sets dir_rom /storage/roms/mame, /storage/roms/arcade for the arcade system (advmame.rc:11, advmame.sh:26-30).""" - def test_the_sets_land_in_roms_mame(self) -> None: + def test_the_sets_land_in_roms_mame_and_roms_arcade(self) -> None: + # Started for arcade it reads roms/arcade, for mame and cps1-3 + # roms/mame (es_systems.json, advmame.sh:26-30): an arcade set is + # read in both. view = standalone_view("advancemame", "emuelec") sets = [e for e in view["files"] if e.get("category") == "bios_zip"] - self.assertEqual(len(sets), 29) + self.assertEqual(len(sets), 58) + places: dict[str, set[str]] = {} for entry in sets: - self.assertEqual(entry["standalone_path"], "mame/" + entry["name"]) self.assertTrue(entry.get("unprefixed")) + places.setdefault(entry["name"], set()).add(entry["standalone_path"]) + self.assertEqual(len(places), 29) + for name, paths in places.items(): + self.assertEqual(paths, {"mame/" + name, "arcade/" + name}) + + def test_both_copies_are_one_file(self) -> None: + # Outside the BIOS tree the folder is no proof of content: each copy + # resolves by its layout path, so both folders hold the same file. + from common import load_database + + db = load_database(str(REPO_ROOT / "database.json")) + with redirect_stdout(io.StringIO()): + manifest = generate_manifest( + "emuelec", str(REPO_ROOT / "platforms"), db, str(REPO_ROOT / "bios"), + str(REPO_ROOT / "platforms" / "_registry.yml"), + emulators_dir=str(REPO_ROOT / "emulators"), offline=True, + ) + by_dest = {f["dest"]: f["sha1"] for f in manifest["files"]} + sets = [d.removeprefix("arcade/") for d in by_dest if d.startswith("arcade/")] + self.assertEqual(len(sets), 29) + for name in sets: + self.assertEqual(by_dest["arcade/" + name], by_dest["mame/" + name], name) def test_the_roms_folder_is_no_proof_of_content(self) -> None: # bios/Arcade/MAME/konamigv.zip is MAME 0.289's set, not AdvanceMAME's. @@ -926,7 +951,8 @@ class AdvanceMameOnEmuELEC(unittest.TestCase): db = load_database(str(REPO_ROOT / "database.json")) view = standalone_view("advancemame", "emuelec") - (entry,) = [e for e in view["files"] if e["name"] == "konamigv.zip"] + entry = next(e for e in view["files"] + if e["name"] == "konamigv.zip" and e["standalone_path"].startswith("mame/")) moved, _status = resolve_local_file(entry, db, dest_hint=entry["standalone_path"]) plain = {k: v for k, v in entry.items() if k not in ("layout_path", "standalone_path", "unprefixed")} From bd8cf8ed2c9ae601db4bfacb953b1a7fe29a7c7c Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 14:04:54 +0100 Subject: [PATCH 29/31] fix: deliver MAME trees a search setting moves A tree installed with MAME sits where its search setting points by default. When a launcher passes the setting, MAME reads the folder it is given and never the installed copy: RetroBat passes -hash bios/mame/hash and -sp bios/mame/samples (Mame64.Generator.cs:30, 101, 106-107, 172, 177-178), KNULLI -samplepath /userdata/bios/mame/samples (mameGenerator.py:129), RetroDECK samplepath $bios_path/mame-sa/samples (mame/component_prepare.sh:94, 117). A bundled entry whose layout folder a passed search setting (standalone_pools) binds is now delivered there. A moved directory entry is found by its layout path and laid out below the platform's folder, the folder proving nothing about content. A layout tail two trees answer (MAME's hash/) falls back on the platform's tail. A file the profile names itself only shadows a tree member of the same build below the same root. Manifests: RetroDECK gains the 19 floppy samples in bios/mame-sa/samples/ floppy. RetroBat's hash/ and samples/floppy and KNULLI's samples/floppy reach the folders the libretro layout already fills, with the same files. --- scripts/common.py | 53 +++++++++++++++++++++++++++++--- tests/test_launcher_placement.py | 34 ++++++++++++++++++++ 2 files changed, 82 insertions(+), 5 deletions(-) diff --git a/scripts/common.py b/scripts/common.py index cb4149de5..cb3e294d1 100644 --- a/scripts/common.py +++ b/scripts/common.py @@ -2760,27 +2760,49 @@ def expand_directory_entries( if not any(entry.get("type") == "directory" for entry in files): return files + # A file the profile names itself is left to that entry, in the same + # build and below the same root: MAME's libretro floppy samples share + # their path with the standalone tree RetroPie reads below roms/. + other_build = "libretro" if standalone else "standalone" named = { - destination(entry) for entry in files if entry.get("type") != "directory" + (entry.get("root") or "", destination(entry)) for entry in files + if entry.get("type") != "directory" and entry.get("mode") != other_build } expanded: list[dict] = [] for entry in files: if entry.get("type") != "directory": expanded.append(entry) continue - members = directory_members(db, destination(entry)) + target = destination(entry) + # A directory a platform moved (platform_layouts) is the profile's + # tree at the platform's place: the collection holds it under the + # layout path, and the platform's folder proves nothing (RetroDECK + # hands MAME samplepath $bios_path/mame-sa/samples). + layout = str(entry.get("layout_path") or "") if standalone else "" + members = directory_members(db, layout) if layout else {} + if not members: + # A layout tail two trees answer (MAME's hash/) leaves the + # platform's own tail. + layout = "" + members = directory_members(db, target) + if layout and layout.strip("/") != target.strip("/"): + source, place = layout.strip("/") + "/", target.strip("/") + "/" + members = { + place + dest[len(source):]: sha1 + for dest, sha1 in members.items() if dest.startswith(source) + } if not members: expanded.append(entry) continue inherited = { key: value for key, value in entry.items() - if key not in ("type", "standalone_path") + if key not in ("type", "standalone_path", "layout_path") } expanded.extend( {**inherited, "name": dest, "path": dest, "sha1": sha1} for dest, sha1 in members.items() - if dest not in named + if (entry.get("root") or "", dest) not in named ) return expanded @@ -3274,6 +3296,20 @@ def platform_layouts( def bindings_of(entry: dict) -> dict[str, tuple[str, str]]: return bindings_for(launch_systems(entry)) + # The layout folders a search setting stands for (standalone_pools): + # bound, the launcher passes the setting and the default is not read. + pool_folders = { + str(v).strip("/") for v in (profile.get("standalone_pools") or {}).values() + } - {""} + + def passed_setting(entry: dict) -> bool: + layout = str(standalone_layout_path(entry, profile) or "") + bindings = bindings_of(entry) + return any( + folder in bindings and (layout == folder or layout.startswith(folder + "/")) + for folder in pool_folders + ) + def destinations(entry: dict) -> list[tuple[str, str] | None]: """Each place the entry's launches read it from, in launch order. @@ -3316,7 +3352,14 @@ def platform_layouts( if not places: files.append({**f, "unplaced": OUTSIDE_BIOS_FOLDER}) continue - files.extend(_placed_entry(f, profile, placed) for placed in places) + moved = f + if f.get("bundled") and passed_setting(f): + # The copy installed with the emulator sits where the setting + # pointed before the launcher moved it: RetroBat passes MAME + # -hash bios/mame/hash (Mame64.Generator.cs:172, 177-178), and + # the hash/ beside mame.exe is no longer read. + moved = {k: v for k, v in f.items() if k != "bundled"} + files.extend(_placed_entry(moved, profile, placed) for placed in places) standalone = {**profile, "files": files} dual = {c.removeprefix(DUAL_MODE_PREFIX) for c in standalone_cores if c.startswith(DUAL_MODE_PREFIX)} diff --git a/tests/test_launcher_placement.py b/tests/test_launcher_placement.py index 6e4d1558a..605776250 100644 --- a/tests/test_launcher_placement.py +++ b/tests/test_launcher_placement.py @@ -851,6 +851,40 @@ class MameSearchPaths(unittest.TestCase): e.get("unplaced") == "outside_bios_folder" for e in self.sets(view) )) + def test_a_passed_search_setting_leaves_the_bundled_tree_unread(self) -> None: + # RetroBat passes -hash bios/mame/hash and -sp bios/mame/samples + # (Mame64.Generator.cs:30, 101, 106-107, 172, 177-178), RetroDECK + # writes samplepath $bios_path/mame-sa/samples (component_prepare.sh:94): + # the trees beside the executable are not read, the pack brings them. + for platform, tree, place in ( + ("retrobat", "hash/", "mame/hash/"), + ("retrobat", "floppy/", "mame/samples/floppy/"), + ("knulli", "floppy/", "mame/samples/floppy/"), + ("retrodeck", "floppy/", "mame-sa/samples/floppy/"), + ): + view = standalone_view("mame", platform) + (entry,) = [e for e in view["files"] + if e["name"] == tree and e.get("mode") == "standalone"] + self.assertEqual(entry["standalone_path"], place, platform) + self.assertNotIn("bundled", entry, platform) + # Where no launcher passes the setting, the bundled copy is read. + view = standalone_view("mame", "emudeck") + (entry,) = [e for e in view["files"] + if e["name"] == "hash/" and e.get("mode") == "standalone"] + self.assertTrue(entry.get("bundled")) + + def test_a_moved_tree_is_found_by_its_layout_path(self) -> None: + from common import expand_directory_entries, load_database + + db = load_database(str(REPO_ROOT / "database.json")) + view = standalone_view("mame", "retrodeck") + (tree,) = [e for e in view["files"] + if e["name"] == "floppy/" and e.get("mode") == "standalone"] + members = expand_directory_entries([tree], db, standalone=True) + self.assertEqual(len(members), 19) + for member in members: + self.assertTrue(member["path"].startswith("mame-sa/samples/floppy/")) + def test_psxmame_reads_bios_psxmame_bios(self) -> None: # -rompath bios/psxmame/bios; (PSXMame.Generator.cs:38-48). view = standalone_view("psxmame", "retrobat") From 83e901a5d4fd5e4af267d1478a3ddbe229252d95 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 14:05:03 +0100 Subject: [PATCH 30/31] feat: read RetroPie search lists below $romdir RetroPie writes MAME's mame.ini with samplepath $romdir/mame/samples; $romdir/arcade/samples and artpath the same way (scriptmodules/emulators/ mame.sh:135-136), and MAME4ALL's mame.cfg with rompath and samplepath below $romdir (mame4all.sh:78-79). The extractor kept the lines naming $biosdir only. An iniSet whose value lists folders below $romdir is now a search path, one folder alone being where the program writes (cfg_directory and the others). $romdir is read as RetroPie's roms root (retropie_packages.sh:47-49). Rescraped at the pinned revision 427e7621: the four records are the only change. Manifests: RetroPie's standalone MAME reads bbc.zip in roms/mame/samples, no longer named as read outside the BIOS folder, and its 19 floppy samples there. --- platforms/retropie.yml | 36 +++++++++++++++++++++++++ scripts/launchers.py | 5 ++-- scripts/scraper/retropie_launchers.py | 23 ++++++++++++++++ tests/test_launcher_placement.py | 12 +++++++++ tests/test_launchers_retropie.py | 39 +++++++++++++++++++++++++++ 5 files changed, 113 insertions(+), 2 deletions(-) diff --git a/platforms/retropie.yml b/platforms/retropie.yml index 34276c303..f63b8e80e 100644 --- a/platforms/retropie.yml +++ b/platforms/retropie.yml @@ -693,6 +693,24 @@ launchers: passes_to: rompath in $md_conf_root/mame/mame.ini fails_when_missing: false source_ref: "scriptmodules/emulators/mame.sh:133" +- emulator: mame + package: mame + build: standalone + kind: passes_path + names: [] + search_dir: $romdir/mame/samples;$romdir/arcade/samples + passes_to: samplepath in $md_conf_root/mame/mame.ini + fails_when_missing: false + source_ref: "scriptmodules/emulators/mame.sh:135" +- emulator: mame + package: mame + build: standalone + kind: passes_path + names: [] + search_dir: $romdir/mame/artwork;$romdir/arcade/artwork + passes_to: artpath in $md_conf_root/mame/mame.ini + fails_when_missing: false + source_ref: "scriptmodules/emulators/mame.sh:136" - emulator: mame4all package: mame4all repo: "git https://github.com/RetroPie/mame4all-pi.git master" @@ -703,6 +721,24 @@ launchers: kind: package names: [] source_ref: "scriptmodules/emulators/mame4all.sh:12, 16, 91-92" +- emulator: mame4all + package: mame4all + build: standalone + kind: passes_path + names: [] + search_dir: $romdir/mame-mame4all/samples;$romdir/arcade/samples + passes_to: samplepath in $md_conf_root/mame-mame4all/mame.cfg + fails_when_missing: false + source_ref: "scriptmodules/emulators/mame4all.sh:78" +- emulator: mame4all + package: mame4all + build: standalone + kind: passes_path + names: [] + search_dir: $romdir/mame-mame4all;$romdir/arcade + passes_to: rompath in $md_conf_root/mame-mame4all/mame.cfg + fails_when_missing: false + source_ref: "scriptmodules/emulators/mame4all.sh:79" - emulator: minivmac package: minivmac repo: "git https://github.com/minivmac/minivmac.git master" diff --git a/scripts/launchers.py b/scripts/launchers.py index 6d959339a..2884035b9 100644 --- a/scripts/launchers.py +++ b/scripts/launchers.py @@ -314,8 +314,9 @@ BIOS_ROOT_VARIABLES = ("$biosdir", "$home/RetroPie/BIOS", "${biosPath}", "$bios_ # The name a platform's launch code gives its roms root: RetroDECK's # component scripts write $roms_path (retrodeck_launchers), the setting whose -# default is the roms root (config/retrodeck/retrodeck.json:5). -ROMS_ROOT_VARIABLES = ("$roms_path", "${roms_path}") +# default is the roms root (config/retrodeck/retrodeck.json:5), RetroPie's +# scriptmodules $romdir (retropie_packages.sh:47-49). +ROMS_ROOT_VARIABLES = ("$roms_path", "${roms_path}", "$romdir", "${romdir}") # The kinds that hand an emulator a whole directory. A scans_dir record sets # the directory the emulator picks its file from: ROCKNIX writes ARMSX2's diff --git a/scripts/scraper/retropie_launchers.py b/scripts/scraper/retropie_launchers.py index a56cd9a2c..1f48b28c0 100644 --- a/scripts/scraper/retropie_launchers.py +++ b/scripts/scraper/retropie_launchers.py @@ -32,6 +32,9 @@ SECTIONS = ("emulators", "libretrocores", "ports") PACKAGES_SCRIPT = "retropie_packages.sh" BIOSDIR = "$biosdir" +# The roms root (retropie_packages.sh:47-49): MAME's mame.ini lists rom, +# sample and artwork folders below it (scriptmodules/emulators/mame.sh:133-136). +ROMDIR = "$romdir" # The package whose config every lr- core runs under. LIBRETRO_FRONTEND = "retroarch" # The launch scripts copied next to an emulator spell the directory out. @@ -464,6 +467,20 @@ class Scripts: return results +def _search_list_in_roms(event: "Event") -> bool: + """An iniSet whose value is a list of folders below the roms root. + + One folder alone is where a program writes (cfg_directory, nvram_directory + and the others MAME's mame.ini sets): a list is where it searches. + """ + if len(event.words) < 3 or len(event.words[2]) != 1: + return False + parts = [p for p in event.words[2][0].split(";") if p] + return len(parts) > 1 and all( + p.startswith(ROMDIR + "/") or p.startswith("${romdir}/") for p in parts + ) + + def _mentions_bios(text: str) -> bool: return BIOSDIR in text or "${biosdir}" in text or BIOS_SPELLED in text @@ -541,6 +558,12 @@ class PackageReader: if command == "addEmulator": self._add_emulator(event) return + if command == "iniSet" and not _mentions_bios(event.raw): + # A search path below the roms root: MAME reads its samples from + # samplepath $romdir/mame/samples;$romdir/arcade/samples. + if _search_list_in_roms(event): + self._ini_set(event) + return if not _mentions_bios(event.raw): return if command in HOUSEKEEPING: diff --git a/tests/test_launcher_placement.py b/tests/test_launcher_placement.py index 605776250..b5793b2e1 100644 --- a/tests/test_launcher_placement.py +++ b/tests/test_launcher_placement.py @@ -873,6 +873,18 @@ class MameSearchPaths(unittest.TestCase): if e["name"] == "hash/" and e.get("mode") == "standalone"] self.assertTrue(entry.get("bundled")) + def test_retropie_reads_samples_below_its_roms(self) -> None: + # samplepath $romdir/mame/samples;$romdir/arcade/samples (mame.sh:135). + view = standalone_view("mame", "retropie") + (bbc,) = [e for e in view["files"] if e["name"] == "bbc.zip"] + self.assertEqual((bbc["standalone_path"], bbc.get("root")), + ("mame/samples/bbc.zip", "roms")) + (tree,) = [e for e in view["files"] + if e["name"] == "floppy/" and e.get("mode") == "standalone"] + self.assertEqual((tree["standalone_path"], tree.get("root")), + ("mame/samples/floppy/", "roms")) + self.assertNotIn("bundled", tree) + def test_a_moved_tree_is_found_by_its_layout_path(self) -> None: from common import expand_directory_entries, load_database diff --git a/tests/test_launchers_retropie.py b/tests/test_launchers_retropie.py index b57cc60b8..1e194179a 100644 --- a/tests/test_launchers_retropie.py +++ b/tests/test_launchers_retropie.py @@ -239,6 +239,45 @@ class LinksAndCopies(unittest.TestCase): self.assertEqual(base[0]["names"], ["hiscore.dat", "cheat.dat"]) +MAME = module("mame", """ + function configure_mame() { + local system="mame" + local temp_ini_mame="$(mktemp)" + iniConfig " " "" "$temp_ini_mame" + iniSet "rompath" "$romdir/$system;$romdir/arcade;$biosdir/$system" + iniSet "hashpath" "$md_inst/hash" + iniSet "samplepath" "$romdir/$system/samples;$romdir/arcade/samples" + iniSet "cfg_directory" "$romdir/$system/cfg" + copyDefaultConfig "$temp_ini_mame" "$md_conf_root/$system/mame.ini" + addEmulator 0 "$md_id" "arcade" "$md_inst/mame %BASENAME%" + addSystem "arcade" + } +""", 109) + + +class IniSearchLists(unittest.TestCase): + """MAME's mame.ini lists folders below $romdir (mame.sh:133-136).""" + + def test_a_list_below_the_roms_root_is_a_search_path(self): + found = [r for r in records({f"{EMULATORS}/mame.sh": MAME}, "mame") + if r["kind"] == "passes_path"] + self.assertEqual( + [(r["search_dir"], r["passes_to"].split(" in ")[0]) for r in found], + [ + ("$romdir/mame;$romdir/arcade;$biosdir/mame", "rompath"), + ("$romdir/mame/samples;$romdir/arcade/samples", "samplepath"), + ], + ) + self.assertEqual(found[1]["source_ref"], f"{EMULATORS}/mame.sh:115") + + def test_one_folder_written_to_is_no_search_path(self): + # cfg_directory is where MAME writes, $md_inst/hash a folder of the + # package itself. + found = records({f"{EMULATORS}/mame.sh": MAME}, "mame") + self.assertFalse([r for r in found if "cfg" in str(r.get("search_dir"))]) + self.assertFalse([r for r in found if "hash" in str(r.get("search_dir"))]) + + class CommandLines(unittest.TestCase): def test_sdltrs_passes_one_rom_per_machine(self): found = records({f"{EMULATORS}/sdltrs.sh": SDLTRS}, "sdltrs") From 409578e20eccd34cb0dc82eff86e734b361871b8 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 10 Nov 2026 14:05:10 +0100 Subject: [PATCH 31/31] feat: read Batocera's MAME search paths Batocera starts MAME with -rompath ;/userdata/bios/mame; /userdata/bios, /userdata/roms/mame and the softlist folder added for MESS systems, and -samplepath, -artpath and -crosshairpath below /userdata/bios/mame (generators/mame/mameGenerator.py:129-143, 189 at batocera-43.1, MAME_BIOS in mamePaths.py). No extractor read that generator. It now goes through the generic reader KNULLI uses for its fork of the same file, keeping the command line search settings: the Macintosh boot disk the command names is a file. Rescraped at batocera-43.1: the six records are the only change. Manifests: Batocera drops samples/bbc.zip at the BIOS root, read by neither build. mame/samples/bbc.zip, which its list declares, serves both. The sets stay at the BIOS root, which the rompath lists. --- platforms/batocera.yml | 53 +++++++++++++++++++++++++++ scripts/scraper/batocera_launchers.py | 24 +++++++++++- tests/test_launcher_placement.py | 8 ++++ tests/test_launchers.py | 40 ++++++++++++++++++++ 4 files changed, 124 insertions(+), 1 deletion(-) diff --git a/platforms/batocera.yml b/platforms/batocera.yml index fccda9985..3accfa622 100644 --- a/platforms/batocera.yml +++ b/platforms/batocera.yml @@ -6814,6 +6814,59 @@ launchers: fails_when_missing: false source_ref: "package/batocera/core/batocera-configgen/configgen/configgen/generators/shadps4/shadps4Generator.py:46,\ \ 228" +- emulator: mame + build: standalone + kind: passes_path + names: [] + search_dir: ;/userdata/bios/mame;/userdata/bios + passes_to: command line -rompath + fails_when_missing: false + depends_on_option: messMode == -1 + source_ref: "package/batocera/core/batocera-configgen/configgen/configgen/generators/mame/mameGenerator.py:129-130" +- emulator: mame + build: standalone + kind: passes_path + names: [] + search_dir: ;/userdata/bios/mame;/userdata/bios;/userdata/roms/mame; + passes_to: command line -rompath + fails_when_missing: false + depends_on_option: "not (messMode == -1) and softList in subdirSoftList" + source_ref: "package/batocera/core/batocera-configgen/configgen/configgen/generators/mame/mameGenerator.py:129,\ + \ 132-133" +- emulator: mame + build: standalone + kind: passes_path + names: [] + search_dir: ;/userdata/bios/mame;/userdata/bios;/userdata/roms/mame + passes_to: command line -rompath + fails_when_missing: false + depends_on_option: "not (messMode == -1) and not (softList in subdirSoftList)" + source_ref: "package/batocera/core/batocera-configgen/configgen/configgen/generators/mame/mameGenerator.py:129,\ + \ 132, 135" +- emulator: mame + build: standalone + kind: passes_path + names: [] + search_dir: /userdata/bios/mame/samples + passes_to: command line -samplepath + fails_when_missing: false + source_ref: "package/batocera/core/batocera-configgen/configgen/configgen/generators/mame/mameGenerator.py:142" +- emulator: mame + build: standalone + kind: passes_path + names: [] + search_dir: /var/run/mame_artwork/;/usr/bin/mame/artwork/;/userdata/bios/mame/artwork;/userdata/decorations + passes_to: command line -artpath + fails_when_missing: false + source_ref: "package/batocera/core/batocera-configgen/configgen/configgen/generators/mame/mameGenerator.py:143" +- emulator: mame + build: standalone + kind: passes_path + names: [] + search_dir: /userdata/bios/mame/artwork/crosshairs + passes_to: command line -crosshairpath + fails_when_missing: false + source_ref: "package/batocera/core/batocera-configgen/configgen/configgen/generators/mame/mameGenerator.py:189" configs_root: path: /userdata/system/configs from_bios: ../system/configs diff --git a/scripts/scraper/batocera_launchers.py b/scripts/scraper/batocera_launchers.py index 723e7d5ad..f7e44d1ea 100644 --- a/scripts/scraper/batocera_launchers.py +++ b/scripts/scraper/batocera_launchers.py @@ -1119,10 +1119,32 @@ def patched_paths(read: Callable[[str], str], patches: tuple[str, ...] = PATH_PA return launchers +# Generators whose command line hands the emulator /userdata/bios folders as +# search paths: MAME's -rompath and -samplepath (mame/mameGenerator.py). +SEARCH_PATH_GENERATORS = ("mame/mameGenerator.py",) + + +def search_paths(cg: Configgen) -> list[Launcher]: + """Every /userdata/bios path a generator's command line names, read as + KNULLI's generic reader reads its fork of the same generator.""" + try: + from .knulli_launchers import GenericSites, bios_sites # noqa: PLC0415 + except ImportError: + from knulli_launchers import GenericSites, bios_sites # type: ignore[no-redef] # noqa: PLC0415 + # A boot disk image the command line names (the Macintosh's + # /userdata/bios/.img) is a file, no search path. + return [ + launcher + for path in SEARCH_PATH_GENERATORS + for launcher in bios_sites(cg, GenericSites(path, "passes_path")) + if re.match(r"command line -\w", launcher.passes_to or "") + ] + + EXTRACTORS: tuple[Callable[[Configgen], list[Launcher]], ...] = ( duckstation, duckstation_legacy, hatari, xemu, melonds, mupen64plus, x16emu, gsplus, lexaloffle, environment_directories, config_directories, - core_file_options, working_directories, + core_file_options, working_directories, search_paths, ) diff --git a/tests/test_launcher_placement.py b/tests/test_launcher_placement.py index b5793b2e1..b8a24598c 100644 --- a/tests/test_launcher_placement.py +++ b/tests/test_launcher_placement.py @@ -885,6 +885,14 @@ class MameSearchPaths(unittest.TestCase): ("mame/samples/floppy/", "roms")) self.assertNotIn("bundled", tree) + def test_batocera_keeps_the_sets_at_the_root_and_samples_in_bios_mame(self) -> None: + # -rompath ;/userdata/bios/mame;/userdata/bios and + # -samplepath /userdata/bios/mame/samples (mameGenerator.py:129-142). + view = standalone_view("mame", "batocera") + self.assertTrue(all(e["standalone_path"] == e["name"] for e in self.sets(view))) + (bbc,) = [e for e in view["files"] if e["name"] == "bbc.zip"] + self.assertEqual(bbc["standalone_path"], "mame/samples/bbc.zip") + def test_a_moved_tree_is_found_by_its_layout_path(self) -> None: from common import expand_directory_entries, load_database diff --git a/tests/test_launchers.py b/tests/test_launchers.py index c211f63ca..2921a3d2f 100644 --- a/tests/test_launchers.py +++ b/tests/test_launchers.py @@ -529,6 +529,46 @@ OPENMSX_FILEPOOL = ''' def generate(self, system, rom): file.write("filepool add -path /userdata/bios/openmsx -types system_rom -position 2\\n")''' +MAME = f"{GENERATORS}/mame/mameGenerator.py" +MAME_PATHS = f"{GENERATORS}/mame/mamePaths.py" +MAME_HEAD = """from __future__ import annotations +from ...batoceraPaths import BIOS +from .mamePaths import MAME_BIOS +class MameGenerator: + def generate(self, system, rom, playersControllers, metadata, guns, wheels, gameResolution):""" +MAME_COMMAND = """ if messMode == -1: + commandArray += [ "-rompath", f"{romDirname};{MAME_BIOS};{BIOS}" ]""" +MAME_SAMPLES = """ commandArray += [ "-samplepath", MAME_BIOS / "samples" ]""" +MAME_BOOT = """ if boot_disk: + bootDisk = f"/userdata/bios/{boot_disk}.img" + commandArray += [ bootType, bootDisk ]""" + + +class MameSearchPaths(unittest.TestCase): + """mameGenerator.py:129-142 at batocera-43.1: -rompath and -samplepath.""" + + def test_the_command_line_search_paths_are_recorded(self): + from scraper.batocera_launchers import search_paths + + cg = configgen({ + MAME: placed({1: MAME_HEAD, 129: MAME_COMMAND, 142: MAME_SAMPLES, 378: MAME_BOOT}), + MAME_PATHS: "from ...batoceraPaths import BIOS\nMAME_BIOS = BIOS / 'mame'\n", + }) + records = [r.entry() for r in search_paths(cg)] + self.assertEqual( + [(r["emulator"], r["search_dir"], r["passes_to"], r.get("depends_on_option")) + for r in records], + [ + ("mame", ";/userdata/bios/mame;/userdata/bios", + "command line -rompath", "messMode == -1"), + ("mame", "/userdata/bios/mame/samples", "command line -samplepath", None), + ], + ) + self.assertEqual(records[0]["source_ref"], f"{MAME}:129-130") + # The boot disk the command names is a file, no search path. + self.assertFalse([r for r in records if "boot_disk" in r["search_dir"]]) + + class ConfigDirectories(unittest.TestCase): """A BIOS directory written into the emulator's config, at batocera-43.1."""