docs: bring the installer pages up to the code

This commit is contained in:
Abdessamad Derraz committed 2026-11-03 10:17:47 +01:00
1 parent 4f7000f66d
commit 084bce08f9
5 files changed
+47 -49

No files matched your search

+8 -8
View File
@@ -9,7 +9,7 @@ terms: ios, iphone, ipad
## Do I need BIOS files?
- **Yes** for PlayStation 1 and 2, Saturn and Neo Geo.
- **Better with it** for Dreamcast: some games need it.
- **Better with it** for Dreamcast. Some games need it.
- **Usually not** for NES or Super Nintendo.
[What is a BIOS?](what-are-bios-files.md)
@@ -43,7 +43,7 @@ Usually. The command installs each setup's own, like `neogeo.zip`.
## My arcade game fails (which MAME version?) { #my-arcade-game-does-not-start }
Game sets must match the emulator's version:
Game sets must match the emulator's version. See
[the list](technical-faq.md#which-mame-version-do-the-arcade-bios-sets-match).
## Keys, firmware or BIOS?
@@ -61,7 +61,7 @@ Game sets must match the emulator's version:
- It never touches games or saves.
- It keeps each file it replaces in `retrobios-backup`, for `--restore`.
Read them: [install.sh](https://github.com/Abdess/retrobios/blob/main/install.sh),
Read them. [install.sh](https://github.com/Abdess/retrobios/blob/main/install.sh),
[install.ps1](https://github.com/Abdess/retrobios/blob/main/install.ps1),
[install.py](https://github.com/Abdess/retrobios/blob/main/install.py).
@@ -89,17 +89,17 @@ curl -fsSL https://abdess.github.io/retrobios/i \
## No internet on the device?
Fill it from a computer or point `--from-pack` at your ZIP: [Without a network](installer.md#without-a-network-offline-install).
Fill it from a computer, or point `--from-pack` at your ZIP. See [Without a network](installer.md#without-a-network-offline-install).
## Lost or wiped card?
`--from` copies BIOS files from an old card or backup:
`--from` copies BIOS files from an old card or backup. See
[Copy from an old card](installer.md#copy-from-an-old-card).
## My setup is not in the list
- Name your emulator's BIOS folder with `--dest`.
- ES-DE, LaunchBox: the command fills their emulators' folders.
- ES-DE or LaunchBox? The command fills their emulators' folders.
- iPhone, iPad (iOS): no terminal.
[Pick your consoles and copy them to the app](../which-pack.md#iphone-and-ipad).
@@ -109,11 +109,11 @@ Some come with the emulator.
## My game shows a black screen
Often a missing BIOS: [When a game does not start](troubleshooting.md).
Often a missing BIOS. See [When a game does not start](troubleshooting.md).
## Can I copy my own console's BIOS? { #copy-your-own-bios }
Yes: [PCSX2](https://pcsx2.net/docs/setup/bios/) for PlayStation 2,
Yes. See [PCSX2](https://pcsx2.net/docs/setup/bios/) for PlayStation 2,
[melonDS](https://melonds.kuribo64.net/faq.php) for DS and DSi.
## Is this legal?
+1 -1
View File
@@ -159,7 +159,7 @@ curl -fsSL https://abdess.github.io/retrobios/i | sh -s -- --platform retropie -
### Error: the downloaded installer does not match its expected fingerprint.
Nothing ran: something changed the file. Try another network.
Nothing ran, because something changed the file. Try another network.
### Cannot create ...
+34 -36
View File
@@ -254,7 +254,9 @@ green, files missing or left out yellow, failures and a refused folder red, and
secondary text dim. Only the 16 basic colours are used, the ones a handheld's
console has. `NO_COLOR` set to any value but an empty one turns colour off, as do
`TERM=dumb` or no `TERM`, a terminal whose description names fewer than 8 colours
and an output that is not a terminal. The text stays the same. The line-by-line
and an output that is not a terminal. The text stays the same. `TERM=dumb`, no
`TERM` outside Windows, or a terminal that moves no cursor the ANSI way
(`TERM=vt52`) also replace the live progress line with a line per file. The line-by-line
questions paint the end of a run the same way.
However the screen ends (Enter on the result, `q`, Ctrl+C, Ctrl+D, SIGTERM, a
@@ -321,12 +323,12 @@ file list is downloaded once and handed to each run.
## What the installer does
1. Detects the host OS and the platforms installed on it.
2. Fetches `install/<platform>.json` from the same revision the bootstrap
verified the installer against, so the file list and the code reading it
always come from one commit.
3. Prints the file count and total size, then a safety notice counting the
entries the collection cannot serve, how many of those the platform marks
required, and why. At a terminal, the
2. Fetches `install/<platform>.json` from `main`, the newest file list,
whatever commit the installer itself came from. `RETROBIOS_REF` reads it
from a tag or a commit instead (see [For packagers](#for-packagers)).
3. Prints the file count and total size, then a `Not installable:` line
counting the files the collection does not hold and how many of them are
required. At a terminal, the
[full-screen interface](#the-full-screen-interface) then offers **Install**
for everything and **Choose systems** for fewer, and `--plain` asks the
same as questions (see below).
@@ -473,9 +475,6 @@ Checking existing files...
```
<!-- /generated: run-index -->
`Not installable` counts the files of the list that the collection does not
hold. They are named at the end of the run.
On a first install nothing is in place. On a later run the line counts what
is already there, and only the rest is downloaded. A download of 1 GB or more
is confirmed first, the size and the folder in the question.
@@ -838,7 +837,7 @@ lists, a game engine's own data. The manifest marks each of these files
and names what it left out with its category (ten names, `--verbose` for all):
```text
2436 game data files left out (--no-game-data): ports/doom/doom1.wad, ports/doom2/doom2.wad, ...
2912 game data files left out (--no-game-data), 150 of them not installable: ports/CaveStory/Doukutsu.exe, ports/dinothawr/dinothawr.game, ports/doom/doom1.wad, ...
```
It is the cut `generate_pack.py --no-game-data` makes, and a test holds the
@@ -854,7 +853,7 @@ they need. The cores are the `<name>_libretro.so` (`.dll`, `.dylib`,
way with `--dest` or without, `cores/` beside RetroArch when the setting is
unset, a `retroarch.cfg` next to the system directory for a portable install,
and the folders RetroPie (`/opt/retropie/libretrocores`)
and Lakka (`/usr/lib/libretro`, `/storage/cores`) install into. A core file
and Lakka (`/usr/lib/libretro`, `/storage/cores`, `/tmp/cores`) install into. A core file
is named the buildbot's way (`mednafen_psx`), and the manifest maps each name to
the profile its files are filed under (`beetle_psx`).
@@ -949,15 +948,11 @@ what the options name, everything by default.
<!-- /generated: options -->
`--check` reads the same file list, hashes the destination and exits, with
code 1 when a file is missing or does not match and 0 when every one does. Wrong
copies are listed first and in full, then the missing ones whose
reason it found, then the first ten other missing ones (`--verbose` lists them
all). See [Why a file is refused](#why-a-file-is-refused). `--dry-run` counts the data trees in its total. Without
it, a file already present with the expected hash is left untouched, and one
whose contents do not match is re-downloaded and replaced by the verified copy,
the old one kept beside the BIOS folder.
Files the list does not name are never read, moved or deleted.
`--check` exits with code 1 when a file is missing or does not match, and 0
when every one does. What it lists is under
[Why a file is refused](#why-a-file-is-refused). An install leaves a file with
the expected hash untouched and replaces any other, the old one kept beside
the BIOS folder. Files the list does not name are never read, moved or deleted.
## Platform detection
@@ -967,7 +962,8 @@ system built on another one (KOLOS on JELOS, dArkOS on ArkOS, spruceOS on a
TrimUI) matches both and is the one meant. Two unrelated systems matching
are both named: at a terminal the run asks which one, otherwise it stops and
asks for `--dest`. The run names the system as it names itself, with the file
list it gets: `Found AmberELEC at /storage/roms/bios (RetroArch files)`.
list it gets when that list is another system's:
`Found JELOS at /storage/roms/bios (RetroArch files)`.
`--list-platforms` lists every system below.
Where a system's RetroArch config is named, its `system_directory` is the
@@ -985,9 +981,9 @@ rewrites both to `/roms2/bios`: a second card is followed through them.
| `/recalbox/recalbox.version` or `/usr/bin/recalbox-settings` | Recalbox | Recalbox | `/recalbox/share/bios` |
| `/opt/muos` | muOS | RetroArch | `system_directory` of `/opt/muos/share/info/config/retroarch.cfg`, else of the default it is copied from: `/run/muos/storage/bios`, which muOS binds to `MUOS/bios` on the second card when that card holds one, else the first. Cores are read from that config's `libretro_directory` (`/opt/muos/share/core`) |
| `/mnt/mmc/MUOS/` | muOS | RetroArch | `/mnt/mmc/MUOS/bios` |
| `/etc/os-release` `NAME=AmberELEC` (CHAos writes the same) | AmberELEC | AmberELEC | `/storage/roms` (its list names `bios/`, `ports/` and `neogeo/` there) |
| `/etc/os-release` `NAME=AmberELEC` (CHAos writes the same) | AmberELEC | AmberELEC | `/storage/roms` (its list names `bios/` and `neogeo/` there) |
| `/usr/bin/batocera-info` naming PAN4ELEC, on AmberELEC | PAN4ELEC | AmberELEC | as AmberELEC |
| `/etc/os-release` `NAME=EmuELEC` | EmuELEC | EmuELEC | as AmberELEC |
| `/etc/os-release` `NAME=EmuELEC` | EmuELEC | EmuELEC | `/storage/roms` (its list names `bios/`, `ports/` and `neogeo/` there) |
| `/etc/os-release` `OS_NAME=JELOS` | JELOS | RetroArch | `/storage/.config/retroarch/retroarch.cfg`, else `/storage/roms/bios` |
| `/usr/lib/systemd/system/jelos-ready.service`, on JELOS | KOLOS | RetroArch | as JELOS |
| `/etc/os-release` `OS_NAME=UnofficialOS` | UnofficialOS | RetroArch | as JELOS |
@@ -1154,14 +1150,15 @@ DuckStation and PCSX2, for one), the installer fills their own BIOS folders:
the folders of the [standalone copies](#standalone-copies) list that exist on
the machine, with the files that list names, taken from the EmuDeck file list
and then RetroArch's. At a terminal it asks first. `--check` and `--dry-run`
work as for a platform. With `--system`, `--core`, `--emulator`, `--region` or
`--target` the run asks for a platform as before, since those name a
platform's lists.
work as for a platform. With `--system`, `--core`, `--emulator`, `--region`,
`--target`, `--installed-cores` or `--declared-only` the run asks for a
platform as before, since those name a platform's lists.
When a platform named with `--platform` is not found on the machine, the
destination falls back to the directory its detection looks for:
`/userdata/bios` for Batocera, `/recalbox/share/bios` for Recalbox,
`/storage/system` for Lakka, `~/retrodeck` for RetroDECK, `~/Emulation/bios`
`/userdata/bios` for Batocera and KNULLI, `/recalbox/share/bios` for Recalbox,
`/storage/system` for Lakka, `/storage/roms/bios` for ROCKNIX,
`/storage/roms` for AmberELEC and EmuELEC, `~/retrodeck` for RetroDECK, `~/Emulation/bios`
for EmuDeck (`C:\Emulation\bios` on Windows), `/media/fat/games` for MiSTer,
`~/RetroPie/BIOS` for RetroPie, `/romm/library/bios` for RomM,
`C:\RetroBat\bios` for RetroBat, and RetroArch's own default system
@@ -1269,7 +1266,8 @@ declare them (Batocera, EmuDeck, Recalbox, RetroArch, RetroBat, RetroDECK):
| Files | Copied to |
|-------|-----------|
| `prod.keys`, `title.keys` | yuzu, eden, citron, suyu and Ryujinx key directories |
| `prod.keys` | yuzu, eden, citron, suyu and Ryujinx key directories |
| `title.keys` | yuzu, eden, citron and suyu key directories |
| `Citra/sysdata/aes_keys.txt`, `Citra/sysdata/boot9.bin` | Azahar `sysdata` |
| `scph*.bin` | DuckStation `bios` |
| `ps2-*.bin` | PCSX2 `bios`, native and Flatpak |
@@ -1763,8 +1761,8 @@ RetroArch folder that holds only `scph5501.bin`, in the order written:
| `RETROBIOS_INSTALL_URL` | Where the bootstrap fetches `install.py`. HTTPS only |
| `RETROBIOS_INSTALL_SHA256` | The SHA-256 the bootstrap requires of that installer, 64 hex characters. When either of these two is set and the fingerprint does not match, the error names the variable instead of suggesting a retry |
| `RETROBIOS_BOOTSTRAP` | Set by `install.sh` (`sh`) and `install.ps1` (`ps1`) for the temporary installer they run, so that its hints give back the one-line command rather than `python3 install.py` |
| `NO_COLOR` | Plain text, no colour, even at a terminal, when set to any value but an empty one. `TERM=dumb`, or no `TERM` outside Windows, also turns the live progress line and the colour off, as does a terminal whose description moves no cursor the ANSI way (`TERM=vt52`). A description naming fewer than 8 colours keeps the live line and drops the colour. The full screen then draws the same text without colour: the row in focus is marked with `>` as well as reverse video, and every state is written in words |
| `TERM`, `TERMINFO`, `TERMINFO_DIRS` | Decide whether the full screen opens. `TERM` unset or `dumb` (outside Windows) gives the questions line by line. Otherwise the terminal's description is read where ncurses reads it: `TERMINFO`, then `~/.terminfo`, then each folder of `TERMINFO_DIRS`, then the system's own. A description whose cursor moves are not the ANSI ones the screen writes (`TERM=vt52`) gives the questions too, and `--tui` there stops with the reason |
| `NO_COLOR` | Set to any value but an empty one: no colour, even at a terminal. The full screen then marks the row in focus with `>` as well as reverse video. What else turns colour off is under [The full-screen interface](#the-full-screen-interface) |
| `TERM`, `TERMINFO`, `TERMINFO_DIRS` | Decide whether the full screen opens, as [The full-screen interface](#the-full-screen-interface) says. The terminal's description is read where ncurses reads it: `TERMINFO`, then `~/.terminfo`, then each folder of `TERMINFO_DIRS`, then the system's own |
| `FORCE_COLOR`, `CLICOLOR_FORCE` | Colour even when the output is a pipe or a file, set to any value but `0` or an empty one. `NO_COLOR` wins over both, and the progress line stays one line per file |
| `SSL_CERT_FILE`, `SSL_CERT_DIR` | The trusted certificates to check servers with, for a Python that finds none of its own |
| `RETROBIOS_PLAIN`, `ACCESSIBLE` | Set to anything but `0`: the questions come line by line, as with `--plain`, instead of the full-screen interface |
@@ -1853,10 +1851,10 @@ finds here. `--help` lists the options with examples.
### No file list
The installer reads its manifests from the revision the bootstrap checked it
against. A platform name is checked before anything is downloaded, so a
"No file list" message comes from the revision: `RETROBIOS_REF` naming a tag
that does not exist, or one older than the platform. Unset it, or pick a tag
The installer reads its file lists from `main`, or from the ref
`RETROBIOS_REF` names. A platform name is checked before anything is
downloaded, so a "No file list" message comes from that ref: a tag that does
not exist, or one older than the platform. Unset it, or pick a tag
from the releases page ([Environment overrides](#environment-overrides)).
### Upper and lower case
+3 -3
View File
@@ -88,9 +88,9 @@ that (`emulators/beetle_psx.yml`, notes). The real file still ships, because
the stand-in is not perfect: some games glitch or do not start.
A profile entry records it as `hle_fallback: true`. That flag does not decide
`required`: 13 of the 778 entries that carry it are required, among them Beetle
PSX's three region BIOS. Verification reports a missing `hle_fallback` file at
INFO either way.
`required`: some entries that carry it are required, such as Yabause's
`saturn_bios.bin`. Verification reports a missing `hle_fallback` file at INFO
either way.
## How often are packs updated?
+1 -1
View File
@@ -69,7 +69,7 @@ version.
- **A BIOS setting?** Some emulators can skip the BIOS. In PCSX ReARMed, set
**BIOS Selection** to **Auto**.
- **The screen says "Please insert PlayStation CD-ROM"?** The BIOS works.
The game did not load: open its `.cue` or `.m3u` file, not a `.bin`.
The game did not load. Open its `.cue` or `.m3u` file, not a `.bin`.
## If the command fails { #installation-script-fails }