chore: merge main into the launcher fixes

This commit is contained in:
Abdessamad Derraz committed 2026-10-23 18:53:10 +02:00
commit 41efb3e99f
35 files changed
+1251 -188

No files matched your search

+30 -34
View File
@@ -67,44 +67,44 @@ curl -fsSL https://raw.githubusercontent.com/Abdess/retrobios/main/install.sh |
On Batocera, Recalbox and similar setups, see
[Get your files](../which-pack.md).
## 2. Check the folder it found
## 2. Check the setup it found
It shows your setup and its BIOS folder:
It opens a menu:
```
Found <your setup> at <its folder>
RetroBIOS: Where do you play?
Found on this machine:
> <your setup>
Another setup or folder
BIOS folder: <its folder>
```
- **Right folder?** Go on.
- **Wrong folder?** Press Ctrl+C. Run it again with your folder:
- **Right folder?** Press Enter.
- **Wrong folder?** Choose **Another setup or folder**, then browse to yours.
- **A handheld's SD card in a reader?** It is listed, as **muOS SD card**.
<!-- os-tabs windows: --dest D:\path\to\bios -->
```sh
curl -fsSL https://raw.githubusercontent.com/Abdess/retrobios/main/install.sh | sh -s -- --dest ~/path/to/bios
```
Arrows move, Enter chooses, Esc goes back. A controller's A and B do the same.
## 3. Choose what to install
## 3. Install
```
Enter) install everything
i) only what the installed cores read
c) choose systems, cores and regions
q) quit
```
The next screen counts the missing files and the free space.
Press Enter on **Install**. **Choose systems** keeps the consoles you
play.
**Enter** installs everything. **c** lets you pick consoles.
**Old card?** In a card reader, choose **Copy the BIOS files from your old
card or a folder**, then the card. It stays unchanged.
## 4. Wait
Ctrl+C stops it. Run the command again to carry on.
B or Ctrl+C stops it. Run it again to carry on.
## 5. Read the last line
## 5. Read the result
- **`Done.`** `N files installed, M already up to date.` All files are in place.
- **`Finished with errors.`** Some files failed. Run the same command again.
It retries only those.
- **`Nothing was installed.`** The lines above it say why. See
[If it stops](#if-it-stops).
- **Done**: all files are in place.
- **Finished with errors**: run the command again. It retries only those.
- **Nothing installed**: the screen says why. See [If it stops](#if-it-stops).
For questions line by line (screen readers), add `--plain`.
## What the command does
@@ -127,18 +127,14 @@ All good:
## Undo
Every file it replaces goes to a `retrobios-backup` folder next to your BIOS
folder. The last lines say how to put them back.
Files it replaces go to a `retrobios-backup` folder beside your BIOS folder.
The result says how to restore them.
## If it stops
### No supported platform detected.
### Nothing was found here.
At a terminal, a menu follows. Pick your setup by its number, then type its
BIOS folder, or press Enter for the usual one.
With `--no-input`, or without a terminal, it stops and prints the command to
use.
Choose **Another setup or folder**, then your setup and its folder.
### Error: Python 3.8 or newer is required.
@@ -157,9 +153,9 @@ The download was cut short. Nothing was changed. Run the command again.
You cannot write there. Do what the message says.
### Not enough space on the drive holding ...
### The card is full
Nothing was written. Free some space, or pick another drive with `--dest`.
Nothing was written. Free some space, or choose another folder.
### The game still does not start
+31 -1
View File
@@ -67,7 +67,10 @@ curl -fsSL https://raw.githubusercontent.com/Abdess/retrobios/main/install.sh \
```
`--dest` is the BIOS folder itself: on a card, `retroarch/cores/system` for
RetroArch on Switch, `RetroArch/system` on Android.
RetroArch on Switch, `RetroArch/system` on Android. The root of a handheld's
card works too when the installer knows that card (muOS, Onion, spruceOS,
KNULLI, ROCKNIX and the MinUI family, see
[Platform detection](#platform-detection)): the files go where its system reads.
PowerShell needs another form. `iex` takes the script text as its own argument,
so anything appended to `irm ... | iex` is read as an argument to `iex` and
@@ -454,6 +457,9 @@ python install.py --from ~/Downloads --from /media/me/backup
python install.py --check --from /media/me/STOCK
```
The first line names the root of the muOS card, the one holding `MUOS`: the
files go to `MUOS/bios` on it, where muOS reads them, and the run says so.
Every file is recognised by its contents, never by its name:
`PSX BIOS (USA).bin` in a subfolder lands as `scph5501.bin` when it holds those
bytes, and a file of the right name with other bytes (an empty file left by a
@@ -749,6 +755,26 @@ family writes the release name as the first line of `.system/version.txt` at
the card root (`MinUI-`, `NextUI-`, `MyMinUI-`), and that line names the file
list.
A card that holds a system's own files is read the same way, without
`--platform` or with the one that names its list, by the rules the table above
gives for the device, below the card's root instead of its mount point:
| On the card | System | Files go to |
|-------------|--------|-------------|
| `MUOS/` | muOS | `MUOS/bios`, RetroArch's list |
| `.tmp_update/onionVersion/version.txt` | Onion | `BIOS`, RetroArch's list |
| `spruce/` | spruceOS | `BIOS`, RetroArch's list |
| `System/usr/trimui/crossmix-version.txt` | CrossMix-OS | `BIOS`, RetroArch's list |
| `.allium/` | Allium | `BIOS`, RetroArch's list |
| `Koriki/version.txt` | Koriki | `BIOS`, RetroArch's list |
| `system/batocera.conf` with `system.hostname=KNULLI`, as KNULLI's first boot writes its share | KNULLI | `bios`, KNULLI's list |
| `.config/system/configs/system.cfg` with `root.password=rocknix`, as ROCKNIX's first boot writes its storage | ROCKNIX | `roms/bios`, ROCKNIX's list |
The full screen lists such a card on its first screen ("muOS SD card (E:\)").
Named by its system (`--platform muos`, `--platform onion`), a `--dest` that
is neither such a card nor its BIOS folder is refused, with the folder that
system reads.
Desktop installs are read from their own configuration, and several can be
found on one machine.
@@ -1173,6 +1199,10 @@ fields, the installer refuses to narrow rather than install everything.
| `130` | stopped with Ctrl+C, or with `q`, Ctrl+C or Ctrl+D at a question. Run the same command again to carry on |
| `141` | the output was piped to a reader that closed early (`--list-platforms \| head`) |
The full screen ended by SIGTERM (Start+Select on a handheld) before any
install exits `143`. During an install it stops the install first, and exits
`130`.
`install.ps1` passes the installer's code on unchanged: run as a file it exits
with it, run through `irm \| iex` it sets `$LASTEXITCODE` (an `exit` there
would close the PowerShell window). It declares no parameter of its own, so
+1
View File
@@ -591,6 +591,7 @@ does not look.
| `known_hash_adler32` | expected Adler-32 hash (Dolphin's DSP ROMs). Pair with `adler32_byteswap` when the code hashes 16-bit byte-swapped data |
| `adler32_pairs_with`, `adler32_pairs` | the file hashed together with this one and the combinations the code accepts, this file's value first, in table order: Dolphin warns on a DSP ROM pair outside its `known_roms` even when each file passes alone |
| `pin_frozen` | why `source_commit` is held on purpose rather than followed. The profile is then judged against its own revision, like one pinned to a superseded tag |
| `data_root` | per operating system (`android`, `ios`, `windows`, `macos`, `linux`), the folder the app reads its user data from, under which `standalone_path` destinations sit: `path` as the user finds it (`Android/data/<package>/files`, `%APPDATA%/...`), with the `source_ref` that builds it. Only the systems the app runs on are keyed |
| `upstream_frozen` | why `upstream_commit` is held: the port vendors that upstream tree, synced to that release, or merged that commit. The upstream view is read at its own pin and a bump leaves it. Without it, a port that is a GitHub fork of its upstream follows the merge base of the two |
| `prose_written_at` | the pin a reader confirmed the prose citations against. When the profile's history shows a text living under several pins, profile_sync takes this one as the revision the text describes, so a bump is no longer refused for a citation already reread. It never overrides a history with a single candidate |
| `version_source` | for a project published outside any forge, `{url, pattern}`: the page that announces releases and a regular expression whose first group is the latest version. `profile_sync --check-version` compares it with `core_version`, and `check_freshness --profiles` calls the profile stale when they differ. `no_genuine_copy` names an announced version found only rebuilt or re-signed: the profile stays on the newest unmodified build and is not stale until the page announces a later one |
+2 -1
View File
@@ -38,7 +38,8 @@ Run it without `--check`. It adds missing files and replaces wrong ones.
- **Right folder?** [Get your files](../which-pack.md) names it.
- **Exact name?** `scph5501.bin` and `SCPH-5501.BIN` differ. On Linux,
capitals count too.
- **A `bios` folder inside your BIOS folder?** Move its files up one level.
- **A `bios` folder inside your BIOS folder?** Run the installer: it copies
those files up one level.
- **Unzipped by hand on Linux?** The command adds names that differ by
capitals.
- **A ZIP in parts, like `Pack.part1of2.zip`?** Unzip every part into one