mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-11-14 05:53:47 -06:00
chore: merge origin/main
This commit is contained in:
commit
469f569890
48 files changed
+481
-277
No files matched your search
+56
-56
@@ -488,13 +488,13 @@ def generate_home(
|
||||
works_with = ", ".join(named) + (f" and {others} more" if others else "")
|
||||
|
||||
lines = [
|
||||
"# BIOS files for your emulators",
|
||||
"# BIOS files for emulators",
|
||||
"",
|
||||
"Some consoles need a small program to start their games. It is called "
|
||||
"the **BIOS**. Your emulator needs a copy of it. We put the right copy "
|
||||
"the **BIOS**. The emulator needs a copy of it. RetroBIOS puts the right copy "
|
||||
"in the right folder.",
|
||||
"",
|
||||
markup.button("Get your files", "which-pack.md", primary=True) + " "
|
||||
markup.button("Get the files", "which-pack.md", primary=True) + " "
|
||||
+ markup.button("What is a BIOS?", "wiki/what-are-bios-files.md"),
|
||||
"",
|
||||
f"Free. No account. Works with {works_with}.",
|
||||
@@ -503,9 +503,9 @@ def generate_home(
|
||||
"[When a game does not start](wiki/troubleshooting.md)",
|
||||
"- Have a file? [Check it](files/index.md)",
|
||||
"",
|
||||
"## Do I need it?",
|
||||
"## Is it needed? { #do-i-need-it }",
|
||||
"",
|
||||
"- **Yes**, if your emulator says a BIOS is missing.",
|
||||
"- **Yes**, if the emulator says a BIOS is missing.",
|
||||
"- **Yes** for PlayStation 1 and 2, Saturn and Neo Geo.",
|
||||
"- **Better with it** for Dreamcast: some games need it.",
|
||||
"- **Usually not** for NES, Super Nintendo, Mega Drive and Game Boy.",
|
||||
@@ -515,12 +515,12 @@ def generate_home(
|
||||
"## Three steps",
|
||||
"",
|
||||
*markup.steps([
|
||||
"**Pick your device.** Its page shows your BIOS folder.",
|
||||
"**Pick the device.** Its page shows the BIOS folder.",
|
||||
"**Run one command.** Some setups have a ZIP.",
|
||||
"**Start a game.**",
|
||||
]),
|
||||
*install_demo(),
|
||||
"## Pick your device",
|
||||
"## Pick the device { #pick-your-device }",
|
||||
"",
|
||||
*setup_picker(registry, display),
|
||||
"## Is it safe?",
|
||||
@@ -574,7 +574,7 @@ def generate_explore_index(db: dict, coverages: dict, profiles: dict) -> str:
|
||||
"",
|
||||
"## Help the project",
|
||||
"",
|
||||
"A file you hold, an emulator profile or a correction fills a gap for "
|
||||
"A file sent in, an emulator profile or a correction fills a gap for "
|
||||
"every setup at once. For contributors: [How to contribute](contributing.md).",
|
||||
"",
|
||||
]
|
||||
@@ -752,7 +752,7 @@ def _folder_words(display: str, extract_to: str | None) -> str:
|
||||
"""The folder a pack or a copy goes into, in words: the device's path,
|
||||
or a folder of the setup named as the setup's."""
|
||||
if not extract_to:
|
||||
return "your BIOS folder"
|
||||
return "the BIOS folder"
|
||||
if _setup_relative(extract_to):
|
||||
return f"{display}'s `{extract_to.rstrip('/')}` folder"
|
||||
return f"`{extract_to}`"
|
||||
@@ -824,7 +824,7 @@ def generate_get_page(platform_name: str) -> str:
|
||||
"",
|
||||
f"- {_fmt_size(pack['download_size'])} to download, "
|
||||
f"{_fmt_size(pack['extracted_size'])} once unzipped.",
|
||||
*(["- You need both parts." if parts == 2 else f"- You need all {parts} parts."]
|
||||
*(["- Both parts are needed." if parts == 2 else f"- All {parts} parts are needed."]
|
||||
if parts > 1 else []),
|
||||
*_unzip_into(platform_name, display, extract_to, parts),
|
||||
*(line for text in release for line in (text, "")),
|
||||
@@ -2349,7 +2349,7 @@ def generate_data_page(exports: list[dict], measurements_sqlite: Path | None = N
|
||||
"per `bios/<Manufacturer>/<Console>/` folder of the collection, named "
|
||||
"`Manufacturer\\Console` so the tools look in that subfolder, each file a "
|
||||
"rom named by its path below that folder. It audits a copy of the "
|
||||
"collection's `bios/` tree, or rebuilds that layout from your own dumps.",
|
||||
"collection's `bios/` tree, or rebuilds that layout from a reader's own dumps.",
|
||||
"",
|
||||
"A setup's DAT, `downloads/dat/<platform>.dat`, describes its BIOS folder "
|
||||
"once installed: one game named after the folder (`bios`, `system`), each "
|
||||
@@ -2449,7 +2449,7 @@ def _browser_title(relative: Path, title: str) -> str:
|
||||
# Material appends " - RetroBIOS": the home title says what the site
|
||||
# is, instead of "RetroBIOS - RetroBIOS".
|
||||
"index.md": "BIOS and firmware packs for RetroArch, Batocera and more",
|
||||
"platforms/index.md": "Your setup",
|
||||
"platforms/index.md": "Setups",
|
||||
"systems/index.md": "Systems",
|
||||
"emulators/index.md": "Emulators",
|
||||
"wiki/index.md": "Reference",
|
||||
@@ -2510,7 +2510,7 @@ def _shorten(plain: str, limit: int = 157) -> str:
|
||||
def _page_description(markdown: str, relative: Path, title: str) -> str:
|
||||
key = relative.as_posix()
|
||||
specific = {
|
||||
"index.md": "The BIOS files your emulators need, for RetroArch, Batocera, EmuDeck and more: the folder they go in, one command that installs and checks them, and packs to download.",
|
||||
"index.md": "The BIOS files emulators need, for RetroArch, Batocera, EmuDeck and more: the folder they go in, one command that installs and checks them, and packs to download.",
|
||||
"data.md": "Versioned RetroBIOS JSON API, CSV exports, SQLite snapshot, schemas, checksums and data interpretation guidance.",
|
||||
"cross-reference.md": "Every emulator core each retrogaming platform runs, the systems it emulates and the upstream project it comes from.",
|
||||
"gaps.md": "Current RetroBIOS verification gaps, platform-to-emulator divergences, missing files and documented source limitations.",
|
||||
@@ -2518,7 +2518,7 @@ def _page_description(markdown: str, relative: Path, title: str) -> str:
|
||||
sitemeasurements.EXPLORER_PAGE: "The records of emulator cores run headless on demand, each with its claim, verdict, the BIOS it ran, method, computer and full record, filterable, and as SQLite.",
|
||||
"provenance.md": "Hash-based comparison of RetroBIOS metadata with No-Intro, Redump and TOSEC catalog snapshots.",
|
||||
"explore.md": "Systems, emulators and installer options to explore, with the figures of the BIOS collection.",
|
||||
"which-pack.md": "Pick your device or setup and get its BIOS files: the folder they go in, one command that installs and checks them, or a ZIP pack to extract.",
|
||||
"which-pack.md": "Pick a device or setup and get its BIOS files: the folder they go in, one command that installs and checks them, or a ZIP pack to extract.",
|
||||
"contributing.md": "Add a BIOS file the collection lacks from the browser, checked on arrival, or add a platform or an emulator profile.",
|
||||
}
|
||||
if key in specific:
|
||||
@@ -2571,7 +2571,7 @@ def _lead(markdown: str) -> str:
|
||||
|
||||
def _emulator_description(markdown: str, key: str, title: str, intro: str) -> str:
|
||||
"""An emulator page by its intro sentence ("DuckStation emulates Sony
|
||||
PlayStation. It picks the BIOS for your game's region: ..."), or by
|
||||
PlayStation. It picks the BIOS for the game's region: ..."), or by
|
||||
its profile table when the profile names no system."""
|
||||
notes = re.search(r"<summary>Technical notes</summary>\s*\n\n(.+?)(?:\n\n|$)", markdown, re.S)
|
||||
if not intro and notes:
|
||||
@@ -3357,12 +3357,12 @@ def decorate_markdown_pages(docs: Path) -> dict[str, str]:
|
||||
|
||||
|
||||
def generate_platform_index(coverages: dict, registry: dict | None = None) -> str:
|
||||
"""The Your setup tab: every platform by the device it runs on, and one
|
||||
"""The Setups tab: every platform by the device it runs on, and one
|
||||
line to the table that sets them side by side (setup_table), which is
|
||||
reference matter and sits with how each setup checks its files."""
|
||||
registry = registry or {}
|
||||
lines = [
|
||||
"# Your setup",
|
||||
"# Setups",
|
||||
"",
|
||||
"Each setup's page gives the folder and the command.",
|
||||
"",
|
||||
@@ -4241,7 +4241,7 @@ def _share_tabs(name: str, share: str) -> tuple[dict[str, str], dict[str, str]]:
|
||||
how = {
|
||||
"macos": (f"In Finder, Go > Connect to Server: `{url}`. Then paste the line in "
|
||||
"**Terminal**."),
|
||||
"linux": (f"Open `{url}` in your file manager. Paste the line in a terminal, "
|
||||
"linux": (f"Open `{url}` in the file manager. Paste the line in a terminal, "
|
||||
f"with the folder it opened for `/path/to/{volume}`."),
|
||||
}
|
||||
return args, how
|
||||
@@ -4282,7 +4282,7 @@ def _card_route(name: str, display: str, guide: Guide) -> list[str]:
|
||||
return [lead, "", *terminal_tabs(tabs, args, steps=False)]
|
||||
# A folder on the card's Linux partition: Windows and macOS show the
|
||||
# small boot partition alone, and no folder there fits --dest.
|
||||
put = ("Put the device's card in your computer." if "windows" in tabs
|
||||
put = ("Put the device's card in a computer." if "windows" in tabs
|
||||
else "Only a Linux computer opens the card.")
|
||||
lead = (f"No network? {put} After `--dest`, "
|
||||
f"name the folder the device calls `{extract_to}`.")
|
||||
@@ -4309,14 +4309,14 @@ def _setup_routes(name: str, display: str, page_link: bool = False) -> list[str]
|
||||
card = _card_route(name, display, guide)
|
||||
shared = _get_page_line(name, display) if page_link else []
|
||||
if share or (card and guide.run == ("device",)):
|
||||
computer = ["## From your computer { #from-your-computer }", ""]
|
||||
computer = ["## From a computer { #from-your-computer }", ""]
|
||||
if share:
|
||||
args, how = _share_tabs(name, share)
|
||||
# The setup page stays in its word budget: its Mac and Linux
|
||||
# lines are on the get/ page, the one the command is shared from.
|
||||
tabs = ("windows",) if page_link else ("windows", "macos", "linux")
|
||||
computer += [
|
||||
"Needs the device on your network.",
|
||||
"Needs the device on the same network.",
|
||||
"",
|
||||
*terminal_tabs(tabs, args, how=how),
|
||||
*([f"[Mac or Linux](../{get_page_link(name)}#from-your-computer)", ""]
|
||||
@@ -4330,7 +4330,7 @@ def _setup_routes(name: str, display: str, page_link: bool = False) -> list[str]
|
||||
|
||||
|
||||
# Shown in the "On the device" tab of a guide that has no `terminal:` of its own.
|
||||
DEVICE_TERMINAL_FALLBACK = "Or fill the folder from your computer, with the ZIP."
|
||||
DEVICE_TERMINAL_FALLBACK = "Or fill the folder from a computer, with the ZIP."
|
||||
|
||||
|
||||
def _computer_first(name: str, guide: Guide) -> bool:
|
||||
@@ -4365,11 +4365,11 @@ def _guide_download(name: str, display: str, guide: Guide, extract_to: str | Non
|
||||
f"{_fmt_size(pack['extracted_size'])} once unzipped."
|
||||
]
|
||||
if parts > 1:
|
||||
bullets.append("You need both parts." if parts == 2 else f"You need all {parts} parts.")
|
||||
bullets.append("Both parts are needed." if parts == 2 else f"All {parts} parts are needed.")
|
||||
if _computer_first(name, guide) and network:
|
||||
target = "the network folder above"
|
||||
else:
|
||||
target = f"`{extract_to}`" if extract_to else "your BIOS folder"
|
||||
target = f"`{extract_to}`" if extract_to else "the BIOS folder"
|
||||
bullets.append(f"Unzip {'them all' if parts > 1 else 'it'} into {target}."
|
||||
+ (" Files like `neogeo.zip` stay zipped." if _ships_neogeo(name) else ""))
|
||||
if guide.download_hint and not _computer_first(name, guide):
|
||||
@@ -4395,7 +4395,7 @@ def _guide_download(name: str, display: str, guide: Guide, extract_to: str | Non
|
||||
|
||||
|
||||
def only_some_consoles(name: str, prefix: str = "") -> list[str]:
|
||||
"""The way to a smaller download, in the words Get your files uses."""
|
||||
"""The way to a smaller download, in the words Get the files uses."""
|
||||
return [
|
||||
f"Only some consoles? [Pick them]({prefix}which-pack.md?platform={name}"
|
||||
f"#only-some-consoles), or the command's **{_installer().TUI_SYSTEMS_ROW}**.",
|
||||
@@ -4486,7 +4486,7 @@ def generate_handheld_guide(guide: HandheldGuide) -> str:
|
||||
"",
|
||||
"## Where the files go { #where-the-files-go }",
|
||||
"",
|
||||
"Put the SD card in a computer. Find your system below.",
|
||||
"Put the SD card in a computer. Find the system below.",
|
||||
"",
|
||||
"| System | Devices | BIOS folder on the card |",
|
||||
"|--------|---------|-------------------------|",
|
||||
@@ -4542,7 +4542,7 @@ def _platform_guide(name: str, display: str, cov: dict, registry: dict, no_list:
|
||||
if _computer_first(name, guide):
|
||||
lines += [
|
||||
*_guide_download(name, display, guide, extract_to,
|
||||
"## From your computer { #download }"),
|
||||
"## From a computer { #download }"),
|
||||
*_offline_line(name),
|
||||
*_guide_install(name, guide, "## On the device { #install }"),
|
||||
]
|
||||
@@ -5505,7 +5505,7 @@ def generate_provenance_page(
|
||||
"",
|
||||
*([f'<p class="rb-timestamp">Catalogs as of: {as_of}.</p>', ""] if as_of else []),
|
||||
"Provenance says whether a file is, byte for byte, a dump that Redump, "
|
||||
"No-Intro or TOSEC catalogues. It tells you where a dump is known from, "
|
||||
"No-Intro or TOSEC catalogues. It says where a dump is known from, "
|
||||
"not whether an emulator accepts it: that is the emulator's code, read "
|
||||
"in its profile. Example: `scph5501.bin` is Redump's `ps-30a.bin`.",
|
||||
"",
|
||||
@@ -5542,7 +5542,7 @@ def generate_provenance_page(
|
||||
"arcade sets tracked by MAME driver source instead.",
|
||||
"",
|
||||
"When the two views disagree, this project follows the code, because "
|
||||
"that is what decides whether your emulator boots. The reasoning is in "
|
||||
"that is what decides whether the emulator boots. The reasoning is in "
|
||||
"the [technical questions](wiki/technical-faq.md#are-these-files-verified-against-original-"
|
||||
"hardware-dumps).",
|
||||
"",
|
||||
@@ -6996,7 +6996,7 @@ def _group_lines(
|
||||
lines += [f"- **{key}**: {text.lstrip(': ')}"
|
||||
for key, block in blocks.items() for _lead, text in block]
|
||||
return [*lines, ""]
|
||||
lines = ["**Start with** the files of your machine:", ""]
|
||||
lines = ["**Start with** the files of the machine:", ""]
|
||||
for key, block in blocks.items():
|
||||
for lead, text in block:
|
||||
if lead == "*":
|
||||
@@ -7208,7 +7208,7 @@ def _start_lines(block: list[tuple[str, str]], console: str = "") -> list[str]:
|
||||
below = " They come first below." if _sep else ""
|
||||
return [" ".join(filter(None, [f"**Start with**: {named}.{below}", instead])), ""]
|
||||
bios = f"the {console} BIOS" if console else "the BIOS"
|
||||
lines = [f"**Start with** {bios} for the region of your games:", ""]
|
||||
lines = [f"**Start with** {bios} for the region of the games:", ""]
|
||||
for lead, text in block:
|
||||
lines.append(f"- **{lead or 'Some emulators also require'}**: {text}")
|
||||
if instead:
|
||||
@@ -7265,7 +7265,7 @@ def _romset_note(consoles: dict[str, list]) -> list[str]:
|
||||
|
||||
|
||||
_NEXT_FROM_SYSTEMS = [
|
||||
"[Get your files](../which-pack.md), for the setup you play on",
|
||||
"[Get the files](../which-pack.md), for the setup in use",
|
||||
"[When a game does not start](../wiki/troubleshooting.md)",
|
||||
"[Every emulator](../emulators/index.md), and the files each one reads",
|
||||
]
|
||||
@@ -8979,7 +8979,7 @@ def _install_block(name: str, profile: dict) -> list[str]:
|
||||
f"BIOS folder, then downloads only the files {emu} reads there and checks "
|
||||
"each one.")
|
||||
else:
|
||||
lead = ("The installer finds your setup and its BIOS folder, then downloads "
|
||||
lead = ("The installer finds the setup and its BIOS folder, then downloads "
|
||||
"only the files this emulator reads there and checks each one.")
|
||||
if profile.get("type") == "standalone + libretro":
|
||||
# The command fills a setup, never the app's own folder.
|
||||
@@ -9245,7 +9245,7 @@ def _install_picker(declared: list[tuple[str, str]]) -> list[str]:
|
||||
"",
|
||||
'<div class="rb-install" data-rb-install="" hidden>',
|
||||
"",
|
||||
f'<label class="rb-install-setup">Your setup <select>{options}</select></label>',
|
||||
f'<label class="rb-install-setup">Setup <select>{options}</select></label>',
|
||||
"",
|
||||
*terminal_tabs(INSTALL_PICKER_OSES, args, steps=False),
|
||||
"",
|
||||
@@ -9508,7 +9508,7 @@ def _emulator_file_summary(files: list[dict]) -> list[str]:
|
||||
if _regional_choice([f for f in files if f.get("required") is True and not comes_with_app(f)]):
|
||||
# DuckStation takes the BIOS of the game's region: "3 required"
|
||||
# read as "get all three".
|
||||
line = (f"{total}. One of {req_count:,} is required, for your games' region. "
|
||||
line = (f"{total}. One of {req_count:,} is required, for the games' region. "
|
||||
f"{len(slots) - req_count:,} {'is' if len(slots) - req_count == 1 else 'are'} "
|
||||
"optional.")
|
||||
if hle_count:
|
||||
@@ -9916,7 +9916,7 @@ def _any_name_folder(profile: dict, entry: dict) -> str:
|
||||
own = ("[the app's data folder](#data-folder)" if profile.get("data_root")
|
||||
else "the app's own data folder")
|
||||
return f"the {_code(folder.strip('/'))} folder inside {own}"
|
||||
return f"{_code(folder)}, inside your BIOS folder"
|
||||
return f"{_code(folder)}, inside the BIOS folder"
|
||||
|
||||
|
||||
def _any_name_steps(emu_name: str, profile: dict, entry: dict, href: str,
|
||||
@@ -10001,7 +10001,7 @@ def _emulator_intro(emu_name: str, profile: dict, href: str = "", name: str = ""
|
||||
# DuckStation needs the BIOS of the game's region, not all three: the
|
||||
# page said "3 of them required" and read as "get all of these".
|
||||
others = len(files) - len(required)
|
||||
sentences.append(f"It picks the BIOS for your game's region: {by_region}.")
|
||||
sentences.append(f"It picks the BIOS for the game's region: {by_region}.")
|
||||
if others:
|
||||
sentences.append(
|
||||
f"The {_count(others, 'other file')} {'is' if others == 1 else 'are'} optional.")
|
||||
@@ -10293,7 +10293,7 @@ def emulator_pages(
|
||||
lines[trees_start:] = search_excluded(lines[trees_start:])
|
||||
|
||||
lines.extend(_next_block([
|
||||
"[Get your files](../which-pack.md), for the setup you play on",
|
||||
"[Get the files](../which-pack.md), for the setup in use",
|
||||
"[Every system](../systems/index.md), and the files each one needs",
|
||||
"[When a game does not start](../wiki/troubleshooting.md)",
|
||||
]))
|
||||
@@ -10855,15 +10855,15 @@ def generate_gap_analysis(
|
||||
lines = [
|
||||
"# What the packs do not hold",
|
||||
"",
|
||||
"What each pack still cannot give you, and why. Most gaps are not "
|
||||
"What each pack still cannot give, and why. Most gaps are not "
|
||||
"firmware: a platform's list can also name game files, such as "
|
||||
"Diablo's `diabdat.mpq`, which you copy from your own game, or files "
|
||||
"Diablo's `diabdat.mpq`, which comes from an owned copy of the game, or files "
|
||||
"no emulator of that platform opens. Those are counted apart. A missing "
|
||||
"firmware file means a console that does not start, and each one is "
|
||||
"named below with the platforms that list it.",
|
||||
"",
|
||||
"Each file here is a request: if you hold one of the files under "
|
||||
"\"Files to source\", [adding it](contributing.md) fills the gap for "
|
||||
"Each file here is a request: for a file under \"Files to source\", "
|
||||
"[adding it](contributing.md) fills the gap for "
|
||||
"every platform at once.",
|
||||
"",
|
||||
" ".join([
|
||||
@@ -11584,7 +11584,7 @@ def generate_not_found() -> str:
|
||||
'<p><button type="button" class="rb-notfound-search" data-rb-open-search>Search the site</button></p>',
|
||||
"",
|
||||
"- [Start here](index.md): what BIOS files are and how to install them",
|
||||
"- [Get your files](which-pack.md): the pack or the command for your device",
|
||||
"- [Get the files](which-pack.md): the pack or the command for each device",
|
||||
"- Browse [platforms](platforms/index.md), [systems](systems/index.md) "
|
||||
"or [emulators](emulators/index.md)",
|
||||
"",
|
||||
@@ -11625,7 +11625,7 @@ def generate_wiki_data_model(db: dict, profiles: dict) -> str:
|
||||
"lists every file the collection holds, keyed by its SHA1. A platform YAML "
|
||||
"copies the BIOS list a setup publishes. An emulator profile records what "
|
||||
"one emulator opens, read from its code. The sections below show the "
|
||||
"fields of each, with a real entry, so you can read the data or build on it.",
|
||||
"fields of each, with a real entry, to read the data or build on it.",
|
||||
"",
|
||||
"Example: `scph5501.bin` is one entry of `database.json` (key "
|
||||
"`0555c6fa...`), one entry of `platforms/batocera.yml` (its MD5) and one "
|
||||
@@ -11955,17 +11955,17 @@ def generate_which_pack() -> str:
|
||||
f"terms: {', '.join(IOS_TERMS)}",
|
||||
"---",
|
||||
"",
|
||||
"# Get your files",
|
||||
"# Get the files",
|
||||
"",
|
||||
"Pick your setup. Its page gives the folder and the command.",
|
||||
"Pick the setup. Its page gives the folder and the command.",
|
||||
"",
|
||||
"## Pick your setup",
|
||||
"## Pick the setup { #pick-your-setup }",
|
||||
"",
|
||||
*setup_picker(registry, display),
|
||||
"## Folders and ZIP files { #manual-download }",
|
||||
"",
|
||||
"- A big ZIP comes in parts, like `Pack.part1of2.zip`. Download every part.",
|
||||
"- Unzip them into your BIOS folder. Put the files straight in it, "
|
||||
"- Unzip them into the BIOS folder. Put the files straight in it, "
|
||||
"not in a new folder.",
|
||||
"- Leave the ZIPs inside, like `neogeo.zip`, as they are.",
|
||||
"- A few ZIPs hold their own top folder. Their setup's page says where "
|
||||
@@ -11994,20 +11994,20 @@ def generate_which_pack() -> str:
|
||||
*ios_section(),
|
||||
"## Not in the list? One command finds it { #quick-install }",
|
||||
"",
|
||||
"A **terminal** is a window where you type commands.",
|
||||
"A **terminal** is a window for typing commands.",
|
||||
"",
|
||||
*terminal_tabs(box_tabs, {}, under_steps=box_steps, under_command=box_demos),
|
||||
"On Batocera, Recalbox and other game systems, run it on the device. "
|
||||
"Your setup's page shows how.",
|
||||
"The setup's page shows how.",
|
||||
"",
|
||||
*first_screen_words(),
|
||||
"",
|
||||
*trust_box(""),
|
||||
"**Check your folder later.** Add `--check`. It changes nothing.",
|
||||
"**Check the folder later.** Add `--check`. It changes nothing.",
|
||||
"",
|
||||
*terminal_tabs(all_tabs, dict.fromkeys(TERMINALS, "--check"), steps=False),
|
||||
*markup.details("note", "Fill an SD card from a computer", [
|
||||
"Name your setup and the BIOS folder on the card. For RetroArch on a "
|
||||
"Name the setup and the BIOS folder on the card. For RetroArch on a "
|
||||
"Nintendo Switch:",
|
||||
"",
|
||||
"Linux, macOS:",
|
||||
@@ -12020,7 +12020,7 @@ def generate_which_pack() -> str:
|
||||
*fence("powershell", install_command(
|
||||
"powershell", "--platform retroarch --dest E:\\retroarch\\cores\\system")),
|
||||
]),
|
||||
*markup.details("note", "Copy the BIOS files from your old card", [
|
||||
*markup.details("note", "Copy the BIOS files from an old card", [
|
||||
"Plug the old card in and add `--from` with its folder. The BIOS files "
|
||||
"found there are copied, and the rest downloaded. The old card is only read.",
|
||||
"",
|
||||
@@ -12112,7 +12112,7 @@ def _platform_nav(coverages: dict, registry: dict) -> list:
|
||||
# The tabs in reading order, by the level their pages declare.
|
||||
TABS = {
|
||||
"start": "Start here",
|
||||
"setup": "Your setup",
|
||||
"setup": "Setups",
|
||||
"explore": "Explore",
|
||||
"reference": "Reference",
|
||||
"contribute": "Contribute",
|
||||
@@ -12212,7 +12212,7 @@ def generate_nav(
|
||||
) -> list:
|
||||
"""The navigation, five tabs in reading order.
|
||||
|
||||
Start here is for someone who knows nothing yet, Your setup for someone
|
||||
Start here is for someone who knows nothing yet, Setups for someone
|
||||
who knows their device, Explore for one system or emulator, Reference for
|
||||
checking the work, Contribute for adding to it. Each tab opens on its
|
||||
index page.
|
||||
@@ -12223,7 +12223,7 @@ def generate_nav(
|
||||
own order.
|
||||
"""
|
||||
generated: dict[str, list[tuple]] = {
|
||||
"start": [(0, "index.md"), (20, {"Get your files": "which-pack.md"})],
|
||||
"start": [(0, "index.md"), (20, {"Get the files": "which-pack.md"})],
|
||||
"setup": [(10 * i, item)
|
||||
for i, item in enumerate(_platform_nav(coverages, registry or {}))],
|
||||
"explore": [
|
||||
|
||||
@@ -32,7 +32,7 @@ QUOTING = (f"A folder goes in single quotes, attached to its option. One that ho
|
||||
"command and refuses such a folder.")
|
||||
|
||||
START_PAGES = (
|
||||
("Which pack do I need", "which-pack/", "pick a device or setup, get the folder its BIOS files go in, "
|
||||
("Which pack is needed", "which-pack/", "pick a device or setup, get the folder its BIOS files go in, "
|
||||
"one command that installs and checks them, or a ZIP pack"),
|
||||
("First install", "wiki/first-install/", "the steps from nothing to a working BIOS folder"),
|
||||
("What are BIOS files", "wiki/what-are-bios-files/", "why emulators need them and where they come from"),
|
||||
@@ -57,7 +57,7 @@ MORE = (
|
||||
("Emulators", "emulators/", "one page per emulator"),
|
||||
("Systems", "systems/", "one page per console maker, every file with its hashes"),
|
||||
("Installer", "wiki/installer/", "every option of install.py"),
|
||||
("What we count", "wiki/privacy/", "the site's cookie-free counting"),
|
||||
("What is counted", "wiki/privacy/", "the site's cookie-free counting"),
|
||||
("Is it legal?", "wiki/legal/", "the project's position"),
|
||||
("Contributing", "contributing/", "add a missing file or an emulator profile"),
|
||||
)
|
||||
@@ -142,7 +142,7 @@ ANSWER_RULES = (
|
||||
f"up: {SITE}files/?hash=<value> (the page) or api/v1/lookup/<first two hex>.json (the data).",
|
||||
"Prefer the installer to a manual copy: it puts each file in its folder and checks its hash. "
|
||||
"Give the command the setup's page gives, with `--for-games --required-only` for the fewest files.",
|
||||
"Say where an answer comes from: link the page you read.",
|
||||
"Say where an answer comes from: link the source page.",
|
||||
"On a page of the site, the WebMCP tools answer from the data: setup_bios_files (folder and "
|
||||
"files of a setup), emulator_bios_files, lookup_bios_hash, device_setup_command, search_retrobios.",
|
||||
f"Whether sharing BIOS files is legal depends on the country: point to [Is it legal?]({SITE}wiki/legal/), "
|
||||
@@ -173,7 +173,7 @@ def skill_md() -> str:
|
||||
"",
|
||||
"## Steps",
|
||||
"",
|
||||
"1. Ask where the games are: on the device itself (you have its terminal or SSH), or on "
|
||||
"1. Ask where the games are: on the device itself (with its terminal or SSH), or on "
|
||||
"its card plugged into this computer.",
|
||||
f"2. Preview, nothing is written: `{SH} --for-games --required-only --dry-run` "
|
||||
f"(Windows PowerShell: `{PS} --for-games --required-only --dry-run`).",
|
||||
@@ -221,9 +221,9 @@ def ard_manifest() -> dict:
|
||||
"description": "An agent skill that installs the BIOS files a device needs, only "
|
||||
"what the games on its card need to start.",
|
||||
"representativeQueries": [
|
||||
"install the minimum BIOS files for the games on my R36S running dArkOS",
|
||||
"set up BIOS files for RetroArch on my Steam Deck",
|
||||
"my emulator says BIOS missing, fix it",
|
||||
"install the minimum BIOS files for the games on an R36S running dArkOS",
|
||||
"set up BIOS files for RetroArch on a Steam Deck",
|
||||
"the emulator says BIOS missing, fix it",
|
||||
],
|
||||
"capabilities": ["SetupBios"],
|
||||
"tags": ["bios", "firmware", "emulation", "retrogaming"],
|
||||
|
||||
@@ -397,8 +397,8 @@ def _emulator_names_in(emulators_dir: str) -> dict[str, str]:
|
||||
def _bios_chain_boxes() -> list[Box]:
|
||||
platform, _emulator = CHAIN_EXAMPLES[0]
|
||||
return [
|
||||
Box("Your device", ["A PC, a Steam Deck, a handheld or a TV box"], number="1"),
|
||||
Box("Setup", ["The menu you pick a game from"], number="2"),
|
||||
Box("The device", ["A PC, a Steam Deck, a handheld or a TV box"], number="1"),
|
||||
Box("Setup", ["The menu that picks a game"], number="2"),
|
||||
Box("Emulator", ["Starts the game and reads its BIOS"], number="3"),
|
||||
Box("BIOS folder", [f"{_display(platform)} reads", Mono(_folder(platform))],
|
||||
accent=True, number="4"),
|
||||
@@ -421,8 +421,8 @@ def _bios_chain_caption() -> str:
|
||||
|
||||
def _install_boxes() -> list[Box]:
|
||||
return [
|
||||
Box("Finds your setup", ["And the folder it reads"], number="1"),
|
||||
Box("Looks at your files", ["The ones already in the folder"], number="2"),
|
||||
Box("Finds the setup", ["And the folder it reads"], number="1"),
|
||||
Box("Looks at the files", ["The ones already in the folder"], number="2"),
|
||||
Box("Downloads the rest", ["Only what is missing or different"], number="3"),
|
||||
Box("Checks each file", ["Before saving it"], accent=True, number="4"),
|
||||
]
|
||||
@@ -604,7 +604,7 @@ def _figures() -> dict[str, Figure]:
|
||||
"install-flow": Figure(
|
||||
"install-flow",
|
||||
"What the command does",
|
||||
"The command finds your setup and its BIOS folder, looks at the files already "
|
||||
"The command finds the setup and its BIOS folder, looks at the files already "
|
||||
"there, downloads what is missing or different, then checks each file before "
|
||||
"saving it.",
|
||||
"Running the command again repeats the same steps and downloads only what changed.",
|
||||
@@ -904,7 +904,7 @@ GLANCE_GROUPS: tuple[tuple[str, tuple[str, ...]], ...] = (
|
||||
"--cores-dir")),
|
||||
("Look first", ("--check", "--dry-run", "--list-platforms", "--list-targets",
|
||||
"--list-systems", "--list-cores", "--list-emulators")),
|
||||
("From files you have", ("--from", "--from-pack", "--manifest", "--offline", "--restore")),
|
||||
("From files on hand", ("--from", "--from-pack", "--manifest", "--offline", "--restore")),
|
||||
("How the run talks", ("--tui", "--plain", "--no-input", "--yes", "--quiet", "--verbose",
|
||||
"--events", "--jobs", "--version", "--help")),
|
||||
)
|
||||
@@ -999,7 +999,7 @@ def prepare_page(markdown: str, page: Path) -> str:
|
||||
OG_SECTIONS: dict[str, tuple[str, str]] = {
|
||||
"home": ("BIOS and firmware packs", "Checked file by file, for {frontends}"),
|
||||
"start": ("Start here", "What BIOS files are, and how to install them with one command"),
|
||||
"setup": ("Your setup", "Where the files go on each device and frontend"),
|
||||
"setup": ("Setups", "Where the files go on each device and frontend"),
|
||||
"explore": ("Systems and emulators", "Which files each console and emulator reads"),
|
||||
"reference": ("Reference", "Verification modes, gaps, provenance and the data API"),
|
||||
"contribute": ("Contribute", "Adding files, emulator profiles and platforms"),
|
||||
|
||||
@@ -651,8 +651,8 @@ def _sidebar_link(rel: str) -> str:
|
||||
PRUNED_TABS = ("explore",)
|
||||
|
||||
# Reading runs from one tab into the next only here: the last Start here
|
||||
# page leads to Your setup. Every other tab is read on its own.
|
||||
CHAINED_TABS = (("start-here", "your-setup"),)
|
||||
# page leads to Setups. Every other tab is read on its own.
|
||||
CHAINED_TABS = (("start-here", "setups"),)
|
||||
|
||||
|
||||
def topic_id(label: str) -> str:
|
||||
@@ -804,7 +804,7 @@ def sidebar(nav: list, present: set[str], anchors: dict[str, set[str]] | None =
|
||||
|
||||
def _reading(nav: list, present: set[str]) -> list[list[dict]]:
|
||||
"""The previous and next links, in runs. An overview is named after the
|
||||
group or tab it opens ("Your setup", not "Overview")."""
|
||||
group or tab it opens ("Setups", not "Overview")."""
|
||||
def walk(value: list, name: str) -> Iterator[dict]:
|
||||
for entry in value:
|
||||
if isinstance(entry, str):
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
"""What the install box of Get your files shows under each tab.
|
||||
"""What the install box of Get the files shows under each tab.
|
||||
|
||||
Two things per tab, both drawn from data:
|
||||
|
||||
|
||||
Reference in new issue
Block a user