feat: taps follow the row, quits exit 2

code_audit_19 and tui_audit_12. A tap ticks a box and opens a choice on a
second tap of the row the screen saw tapped. One list drives the plan's game
data row, save line and data files. The version note, --offline in shown
commands, exit 2 for a chosen quit, legacy mouse reports read from bytes,
colour roles that read their words, the setup list's device column, the
copy browser, a drive two systems fit, WSL's Windows folder, and line mode
wording.
This commit is contained in:
Abdessamad Derraz committed 2026-10-28 03:15:07 +01:00
1 parent a1d094c8b3
commit c8377de90d
27 files changed
+1978 -565

No files matched your search

+1 -1
View File
@@ -11,7 +11,7 @@
$ErrorActionPreference = "Stop"
$defaultInstallUrl = "https://raw.githubusercontent.com/Abdess/retrobios/main/install.py"
$defaultInstallSha256 = "7757b36db5beb3cbeb3717e0736db630237e87da5189a14d5092e679b69156af"
$defaultInstallSha256 = "7029f605591f09c020aafcd521d8a7134ace78cc566435d8e76be33c42a9f6dc"
$maximumInstallerBytes = 2MB
$installerExit = 0
$installer = if ($PSScriptRoot) { Join-Path $PSScriptRoot "install.py" } else { $null }
+717 -187
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -18,7 +18,7 @@ esac
TEMP_INSTALLER=""
TEMP_DIRECTORY=""
DEFAULT_INSTALL_URL="https://raw.githubusercontent.com/Abdess/retrobios/main/install.py"
DEFAULT_INSTALL_SHA256="7757b36db5beb3cbeb3717e0736db630237e87da5189a14d5092e679b69156af"
DEFAULT_INSTALL_SHA256="7029f605591f09c020aafcd521d8a7134ace78cc566435d8e76be33c42a9f6dc"
MAX_INSTALLER_BYTES=2097152
cleanup() {
+14 -14
View File
@@ -27,8 +27,8 @@
{
"dest": "roms/ports/retrobios/install.py",
"repo_path": "install.py",
"size": 854609,
"sha256": "7757b36db5beb3cbeb3717e0736db630237e87da5189a14d5092e679b69156af",
"size": 881442,
"sha256": "7029f605591f09c020aafcd521d8a7134ace78cc566435d8e76be33c42a9f6dc",
"executable": false
},
{
@@ -62,8 +62,8 @@
{
"dest": "roms/ports/retrobios/tui.txt",
"repo_path": "ports/shared/tui.txt",
"size": 35356,
"sha256": "d2d56e2c67f0a5d0d11fc75e28f337516006cc4414e18662e100359caa642a97",
"size": 35599,
"sha256": "1925428b1bb42384980a3336fa95051c173600367c6d15a4656bae08e6a6473c",
"executable": false
}
]
@@ -71,8 +71,8 @@
"muos": {
"archive": {
"dest": "ARCHIVE/RetroBIOS.muxapp",
"size": 907158,
"sha256": "15c404a5dfb8d084caa11843d3969e7f0222f434c9b2320b04a0d89ca7336f21"
"size": 934234,
"sha256": "56675adcad36deb03879b7f5961203f6c65cc2f4f13170f6d38b37ed1fe5b367"
},
"members": [
{
@@ -92,8 +92,8 @@
{
"name": "RetroBIOS/install.py",
"repo_path": "install.py",
"size": 854609,
"sha256": "7757b36db5beb3cbeb3717e0736db630237e87da5189a14d5092e679b69156af",
"size": 881442,
"sha256": "7029f605591f09c020aafcd521d8a7134ace78cc566435d8e76be33c42a9f6dc",
"executable": false
},
{
@@ -141,8 +141,8 @@
{
"name": "RetroBIOS/tui.txt",
"repo_path": "ports/shared/tui.txt",
"size": 35356,
"sha256": "d2d56e2c67f0a5d0d11fc75e28f337516006cc4414e18662e100359caa642a97",
"size": 35599,
"sha256": "1925428b1bb42384980a3336fa95051c173600367c6d15a4656bae08e6a6473c",
"executable": false
}
]
@@ -166,8 +166,8 @@
{
"dest": ".config/modules/retrobios/install.py",
"repo_path": "install.py",
"size": 854609,
"sha256": "7757b36db5beb3cbeb3717e0736db630237e87da5189a14d5092e679b69156af",
"size": 881442,
"sha256": "7029f605591f09c020aafcd521d8a7134ace78cc566435d8e76be33c42a9f6dc",
"executable": false
},
{
@@ -208,8 +208,8 @@
{
"dest": ".config/modules/retrobios/tui.txt",
"repo_path": "ports/shared/tui.txt",
"size": 35356,
"sha256": "d2d56e2c67f0a5d0d11fc75e28f337516006cc4414e18662e100359caa642a97",
"size": 35599,
"sha256": "1925428b1bb42384980a3336fa95051c173600367c6d15a4656bae08e6a6473c",
"executable": false
}
]
+4
View File
@@ -881,6 +881,10 @@ rb_here() {
# Ended by Start + Select or a signal: the player asked to leave, and no
# button may be left to close a message.
:
elif [ "$status" = "2" ] && [ "$(head -n 1 "$RB_STATE/tui.err" 2>/dev/null)" = "RetroBIOS: quit. Nothing was installed." ]; then
# Quit chosen (B on the first screen, Quit): the player asked to leave,
# as with Start + Select.
:
elif [ "$status" != "0" ] && [ "$(head -n 1 "$RB_STATE/tui.err" 2>/dev/null)" = "RetroBIOS: No button pressed, closing." ]; then
# Closed for want of a button: the mapper never opened the pad, so no A
# is coming. The error it closed is the next line, shown for
+50 -50
View File
@@ -38,13 +38,13 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Continue^[[0;2m B/Esc Quit ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Continue ^[[0;2mB/Esc^[[0m Quit ^[[0;2m?^[[0m Help
=== platforms
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Which setup?^[[0m
Choose the setup that will use the BIOS files.
^[[0;2m Filter: setup or device (/)^[[0m
Filter: setup or device (/)
^[[0;7;35m > RetroArch^[[0m
Batocera
Recalbox
@@ -56,30 +56,30 @@
BizHawk
MiSTer FPGA
RetroPie
Allium, SD card Miyoo Mini, Miyoo Mini Plus, Miyoo Mini Flip
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, Odroid Go Advance, Odroid Go Super, RG351V, +6
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, RG351MP, RG351V, R35S, RGB10
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
JELOS, SD card RG351M, RG351V, RG353M, RG353P, RG353V, RG353VS, RG503, RG552, R33S, R36S, +24
KNULLI, SD card RG ARC-S, RG28XX, RG34XX, RG35XX, RG35XX Plus, RG35XX H, RG35XX 2024, +15
KOLOS, SD card RG353P, RG353M, RG353V, RG353VS, RG503, RK2023, RGB30, RGB10 Max 3
Koriki, SD card Miyoo Mini
MinUI, SD card RG28XX, RG34XX, RG34XX SP, RG35XX, RG35XX Plus, RG35XX H, RG35XX SP, +16
MiyooCFW, SD card BittBoy, Pocket Go, PowKiddy Q90, PowKiddy V90, PowKiddy Q20 Mini, Sup M3, +1
muOS, SD card RG35XX H, RG35XX Plus, RG35XX SP, RG35XX 2024, RG34XX, RG40XX H, RG40XX V, +4
MyMinUI, SD card RG35XX, Miyoo Mini, Miyoo Mini Flip, Miyoo Mini Plus, Miyoo A30, +16
NextUI, SD card TrimUI Brick, TrimUI Smart Pro
Onion, SD card Miyoo Mini, Miyoo Mini Plus
plumOS, SD card MagicX XU20 V32
RetroOZ, SD card Odroid Go Super, Odroid Go Advance, RGB10 Max, RGB10 Max 2
ROCKNIX, SD card RG351, RG353, RG503, RG552, RG 55G1, RG ARC, RG35XX 2024, RG35XX Plus, +37
spruceOS, SD card Miyoo A30, Miyoo Flip, Miyoo Mini, Miyoo Mini Plus, Miyoo Mini Flip, +5
UnofficialOS, SD card R35S, R36S, RG351M, RG351P, RG351V, RG353M, RG353P, RG353V, RG503, +5
^[[0;2m ^[[0;1;35mA/Enter^[[0m Choose^[[0;2m B/Esc Back / Filter ? Help^[[0m
Allium, SD card Miyoo Mini, Miyoo Mini Plus, +1
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, +9
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, +4
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
JELOS, SD card RG351M, RG351V, RG353M, RG353P, +30
KNULLI, SD card RG ARC-S, RG28XX, RG34XX, RG35XX, +18
KOLOS, SD card RG353P, RG353M, RG353V, RG353VS, RG503, +3
Koriki, SD card Miyoo Mini
MinUI, SD card RG28XX, RG34XX, RG34XX SP, RG35XX, +19
MiyooCFW, SD card BittBoy, Pocket Go, PowKiddy Q90, +4
muOS, SD card RG35XX H, RG35XX Plus, RG35XX SP, +8
MyMinUI, SD card RG35XX, Miyoo Mini, Miyoo Mini Flip, +18
NextUI, SD card TrimUI Brick, TrimUI Smart Pro
Onion, SD card Miyoo Mini, Miyoo Mini Plus
plumOS, SD card MagicX XU20 V32
RetroOZ, SD card Odroid Go Super, Odroid Go Advance, +2
ROCKNIX, SD card RG351, RG353, RG503, RG552, RG 55G1, +40
spruceOS, SD card Miyoo A30, Miyoo Flip, Miyoo Mini, +7
UnofficialOS, SD card R35S, R36S, RG351M, RG351P, RG351V, +9
^[[0;1;35mA/Enter^[[0m Choose ^[[0;2mB/Esc^[[0m Back ^[[0;2m/^[[0m Filter ^[[0;2m?^[[0m Help
=== folder
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Which folder?^[[0m
@@ -120,7 +120,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Use this folder^[[0;2m B/Esc Back ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Use this folder ^[[0;2mB/Esc^[[0m Back ^[[0;2m?^[[0m Help
=== folder-card
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Where is the SD card?^[[0m
@@ -161,7 +161,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Browse^[[0;2m B/Esc Back ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Browse ^[[0;2mB/Esc^[[0m Back ^[[0;2m?^[[0m Help
=== browse
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Browse for a folder^[[0m
@@ -202,7 +202,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Use this folder^[[0;2m B/Esc Back ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Use this folder ^[[0;2mB/Esc^[[0m Back ^[[0;2m?^[[0m Help
=== path
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Type a path^[[0m
@@ -243,7 +243,7 @@
^[[0;2m ^[[0;1;35mEnter^[[0m Use this folder^[[0;2m Esc Back Ctrl-U Clear^[[0m
^[[0;1;35mEnter^[[0m Use this folder ^[[0;2mEsc^[[0m Back ^[[0;2mCtrl-U^[[0m Clear
=== create
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Create the folder?^[[0m
@@ -284,7 +284,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Create^[[0;2m B/Esc Quit^[[0m
^[[0;1;35mA/Enter^[[0m Create ^[[0;2mB/Esc^[[0m Quit
=== checking
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Checking^[[0m
@@ -325,7 +325,7 @@
^[[0;2m ^[[0;1;35mCtrl-C^[[0m Quit^[[0;2m B/Esc Quit^[[0m
^[[0;1;35mCtrl-C^[[0m Quit ^[[0;2mB/Esc^[[0m Quit
=== plan
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: RetroArch^[[0m
@@ -366,7 +366,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Install^[[0;2m B/Esc Back Y/o Options ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Install ^[[0;2mB/Esc^[[0m Back ^[[0;2mY/o^[[0m Options ^[[0;2m?^[[0m Help
=== plan-in-place
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: RetroArch^[[0m
@@ -407,13 +407,13 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Close^[[0;2m B/Esc Back Y/o Options ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Close ^[[0;2mB/Esc^[[0m Back ^[[0;2mY/o^[[0m Options ^[[0;2m?^[[0m Help
=== systems
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Choose systems^[[0m
All
None
^[[0;2m Filter (/ to type)^[[0m
Filter (/ to type)
^[[0;7;35m > [x] nintendo-gba (gba) 1 file, 16.0 KB^[[0m
[x] sony-playstation 3 files, 1.0 MB
^[[0;2m [ ] nintendo-famicom-disk (ファミコン) in place^[[0m
@@ -448,7 +448,7 @@
^[[0;1m ^[[0;1;35m2^[[0;1m of ^[[0;1;35m3^[[0;1m systems: ^[[0;1;35m4^[[0;1m files, ^[[0;1;35m1.0 MB^[[0m
^[[0;2m ^[[0;1;35mA/Enter^[[0m Continue^[[0;2m B/Esc Back X/Space Tick ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Continue ^[[0;2mB/Esc^[[0m Back ^[[0;2mX/Space^[[0m Tick ^[[0;2m?^[[0m Help
=== options
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Options^[[0m
@@ -459,7 +459,7 @@
Installed cores only: no (1 found) --installed-cores
Cores: all --core
Parallel downloads: 8 --jobs
BIOS folder: ^[[0;1m~/.config/retroarch/system --dest^[[0m
BIOS folder: ^[[0;1m~/.config/retroarch/system^[[0m --dest
Copy from: none --from
Preview the file list --dry-run
Show the command line
@@ -489,7 +489,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Open^[[0;2m B/Esc Back Left/Right Set ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Open ^[[0;2mB/Esc^[[0m Back ^[[0;2mLeft/Right^[[0m Set ^[[0;2m?^[[0m Help
=== regions
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Preferred regions^[[0m
@@ -530,7 +530,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Tick^[[0;2m B/Esc Done Left/Right Order ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Tick ^[[0;2mB/Esc^[[0m Done ^[[0;2mLeft/Right^[[0m Order ^[[0;2m?^[[0m Help
=== cores
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Cores^[[0m
@@ -571,7 +571,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Filter^[[0;2m B/Esc Back X/Space Tick ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Filter ^[[0;2mB/Esc^[[0m Back ^[[0;2mX/Space^[[0m Tick ^[[0;2m?^[[0m Help
=== preview
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Preview^[[0m
@@ -612,7 +612,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Back
^[[0;1;35mA/Enter^[[0m Back
=== command
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Command line^[[0m
@@ -653,14 +653,14 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Back
^[[0;1;35mA/Enter^[[0m Back
=== confirm
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Confirm^[[0m
Counted again for your choices. Nothing is written before Install.
^[[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 in place, ^[[0;33m1 missing^[[0m, 0 wrong copies
0 in place, 1 missing, 0 wrong copies
Free space: 50.0 GB
^[[0;7;35m > Install^[[0m
@@ -694,7 +694,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Install^[[0;2m B/Esc Back ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Install ^[[0;2mB/Esc^[[0m Back ^[[0;2m?^[[0m Help
=== installing
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Installing^[[0m
@@ -702,7 +702,7 @@
528.0 KB of 1.0 MB
128.9 KB/s, 0:04 left
2 of 4 files
^[[0;2m B, Ctrl-C or Select+Start stops. What is done stays done.^[[0m
B, Ctrl-C or Select+Start stops. What is done stays done.
^[[0;1;31mFAILED^[[0m scph5500.bin (HTTP 404)
^[[0;32m ok^[[0m gba_bios.bin
@@ -735,7 +735,7 @@
^[[0;2m ^[[0;1;35mB/Esc^[[0m Stop^[[0;2m ? Help^[[0m
^[[0;1;35mB/Esc^[[0m Stop ^[[0;2m?^[[0m Help
=== result
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: ^[[0;1;31mFinished with errors^[[0m
@@ -776,7 +776,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Exit
^[[0;1;35mA/Enter^[[0m Exit
=== error
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: ^[[0;1;31mSomething went wrong^[[0m
@@ -817,7 +817,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Choose^[[0;2m B/Esc Back^[[0m
^[[0;1;35mA/Enter^[[0m Choose ^[[0;2mB/Esc^[[0m Back
=== quit
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Quit?^[[0m
@@ -858,7 +858,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Quit^[[0;2m B/Esc Stay^[[0m
^[[0;1;35mA/Enter^[[0m Quit ^[[0;2mB/Esc^[[0m Stay
=== help
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Keys^[[0m
@@ -899,4 +899,4 @@
^[[0;2m Any key closes this help^[[0m
Any key closes this help
+31 -31
View File
@@ -8,13 +8,13 @@
Another setup or folder
BIOS folder:
/home/user/.config/retroarch/system
^[[0;1m/home/user/.config/retroarch/system^[[0m
ES-DE found: its BIOS files go to each
^[[0;2m ^[[0;1;35mA^[[0m Continue^[[0;2m B Quit ? Help^[[0m
^[[0;1;35mA^[[0m Continue ^[[0;2mB^[[0m Quit ^[[0;2m?^[[0m Help
=== platforms
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Which setup?^[[0m
^[[0;2m Filter: setup or device (/)^[[0m
Filter: setup or device (/)
^[[0;7;35m > RetroArch^[[0m
Batocera
Recalbox
@@ -23,7 +23,7 @@
Lakka
RetroDECK
^[[0;2m 1-7 of 34^[[0m
^[[0;2m ^[[0;1;35mA^[[0m Choose^[[0;2m B Back / Filter ? Help^[[0m
^[[0;1;35mA^[[0m Choose ^[[0;2mB^[[0m Back ^[[0;2m/^[[0m Filter ^[[0;2m?^[[0m Help
=== folder
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Which folder?^[[0m
@@ -36,7 +36,7 @@
Type a path
^[[0;2m ^[[0;1;35mA^[[0m Use this folder^[[0;2m B Back ? Help^[[0m
^[[0;1;35mA^[[0m Use this folder ^[[0;2mB^[[0m Back ^[[0;2m?^[[0m Help
=== folder-card
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Where is the SD card?^[[0m
@@ -49,7 +49,7 @@
^[[0;7;35m > Browse for a folder^[[0m
Type a path
Look again
^[[0;2m ^[[0;1;35mA^[[0m Browse^[[0;2m B Back ? Help^[[0m
^[[0;1;35mA^[[0m Browse ^[[0;2mB^[[0m Back ^[[0;2m?^[[0m Help
=== browse
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Browse for a folder^[[0m
@@ -62,7 +62,7 @@
system/
^[[0;2m ^[[0;1;35mA^[[0m Use this folder^[[0;2m B Back ? Help^[[0m
^[[0;1;35mA^[[0m Use this folder ^[[0;2mB^[[0m Back ^[[0;2m?^[[0m Help
=== path
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Type a path^[[0m
@@ -75,7 +75,7 @@
^[[0;2m ^[[0;1;35mEnter^[[0m Use this folder^[[0;2m Esc Back^[[0m
^[[0;1;35mEnter^[[0m Use this folder ^[[0;2mEsc^[[0m Back
=== create
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Create the folder?^[[0m
@@ -88,7 +88,7 @@
^[[0;2m ^[[0;1;35mA^[[0m Create^[[0;2m B Quit^[[0m
^[[0;1;35mA^[[0m Create ^[[0;2mB^[[0m Quit
=== checking
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Checking^[[0m
@@ -101,7 +101,7 @@
^[[0;2m ^[[0;1;35mCtrl-C^[[0m Quit^[[0;2m B Quit^[[0m
^[[0;1;35mCtrl-C^[[0m Quit ^[[0;2mB^[[0m Quit
=== plan
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: RetroArch^[[0m
@@ -114,7 +114,7 @@
Copy from your old card or a folder
Options
Quit
^[[0;2m ^[[0;1;35mA^[[0m Install^[[0;2m B Back Y Options ? Help^[[0m
^[[0;1;35mA^[[0m Install ^[[0;2mB^[[0m Back ^[[0;2mY^[[0m Options ^[[0;2m?^[[0m Help
=== plan-in-place
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: RetroArch^[[0m
@@ -127,20 +127,20 @@
Options
^[[0;2m ^[[0;1;35mA^[[0m Close^[[0;2m B Back Y Options ? Help^[[0m
^[[0;1;35mA^[[0m Close ^[[0;2mB^[[0m Back ^[[0;2mY^[[0m Options ^[[0;2m?^[[0m Help
=== systems
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Choose systems^[[0m
All
None
^[[0;2m Filter (/ to type)^[[0m
Filter (/ to type)
^[[0;7;35m > [x] nintendo-gba (gba) 16.0 KB^[[0m
[x] sony-playstation 1.0 MB
^[[0;2m [ ] nintendo-famicom-disk in place^[[0m
^[[0;1m ^[[0;1;35m2^[[0;1m of ^[[0;1;35m3^[[0;1m systems: ^[[0;1;35m4^[[0;1m files, ^[[0;1;35m1.0 MB^[[0m
^[[0;2m ^[[0;1;35mA^[[0m Continue^[[0;2m B Back X Tick ? Help^[[0m
^[[0;1;35mA^[[0m Continue ^[[0;2mB^[[0m Back ^[[0;2mX^[[0m Tick ^[[0;2m?^[[0m Help
=== options
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Options^[[0m
@@ -153,7 +153,7 @@
Copy from: none
Preview the file list
Show the command line
^[[0;2m ^[[0;1;35mA^[[0m Open^[[0;2m B Back <> Set ? Help^[[0m
^[[0;1;35mA^[[0m Open ^[[0;2mB^[[0m Back ^[[0;2m<>^[[0m Set ^[[0;2m?^[[0m Help
=== regions
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Preferred regions^[[0m
@@ -166,7 +166,7 @@
[ ] Japan
^[[0;2m ^[[0;1;35mA^[[0m Tick^[[0;2m B Done <> Order ? Help^[[0m
^[[0;1;35mA^[[0m Tick ^[[0;2mB^[[0m Done ^[[0;2m<>^[[0m Order ^[[0;2m?^[[0m Help
=== cores
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Cores^[[0m
@@ -179,7 +179,7 @@
^[[0;2m ^[[0;1;35mA^[[0m Filter^[[0;2m B Back X Tick ? Help^[[0m
^[[0;1;35mA^[[0m Filter ^[[0;2mB^[[0m Back ^[[0;2mX^[[0m Tick ^[[0;2m?^[[0m Help
=== preview
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Preview^[[0m
@@ -192,7 +192,7 @@
missing 16.0 KB gba_bios.bin
^[[0;2m ^[[0;1;35mA^[[0m Back
^[[0;1;35mA^[[0m Back
=== command
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Command line^[[0m
@@ -205,7 +205,7 @@
^[[0;2m ^[[0;1;35mA^[[0m Back
^[[0;1;35mA^[[0m Back
=== confirm
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Confirm^[[0m
@@ -213,12 +213,12 @@
Nothing is written before Install.
^[[0;1m ^[[0;1;35m1^[[0;1m file to download, ^[[0;1;35m16.0 KB^[[0m
BIOS folder: ^[[0;1m~/.co.../retroarch/system^[[0m
0 in place, ^[[0;33m1 missing^[[0m, 0 wrong copies
0 in place, 1 missing, 0 wrong copies
Free space: 50.0 GB
^[[0;7;35m > Install^[[0m
Back
^[[0;2m ^[[0;1;35mA^[[0m Install^[[0;2m B Back ? Help^[[0m
^[[0;1;35mA^[[0m Install ^[[0;2mB^[[0m Back ^[[0;2m?^[[0m Help
=== installing
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Installing^[[0m
@@ -226,25 +226,25 @@
528.0 KB of 1.0 MB
128.9 KB/s, 0:04 left
2 of 4 files
^[[0;2m B, Ctrl-C or Select+Start stops. What^[[0m
^[[0;2m is done stays done.^[[0m
B, Ctrl-C or Select+Start stops. What
is done stays done.
^[[0;1;31mFAILED^[[0m scph5500.bin (HTTP 404)
^[[0;32m ok^[[0m gba_bios.bin
^[[0;2m ^[[0;1;35mB^[[0m Stop^[[0;2m ? Help^[[0m
^[[0;1;35mB^[[0m Stop ^[[0;2m?^[[0m Help
=== result
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: ^[[0;1;31mFinished with errors^[[0m
^[[0;1m ^[[0;1;32m3 installed^[[0;1m, ^[[0;1;31m1 failed^[[0;1m.^[[0m
BIOS folder:
/home/user/.config/retroarch/system
^[[0;1m/home/user/.config/retroarch/system^[[0m
^[[0;1;31mfailed:^[[0m scph5500.bin (HTTP 404)
The files it replaced are kept in
/home/user/.config/retroarch/retrobios-backup/2026-10-23_1200
To put them back: python3 install.py
^[[0;2m 1-8 of 17^[[0m
^[[0;2m ^[[0;1;35mA^[[0m Exit^[[0;2m ^v Scroll^[[0m
^[[0;2m 1-8 of 16^[[0m
^[[0;1;35mA^[[0m Exit ^[[0;2m^v^[[0m Scroll
=== error
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: ^[[0;1;31mSomething went wrong^[[0m
@@ -257,7 +257,7 @@
^[[0;7;35m > Choose another setup or folder^[[0m
Quit
^[[0;2m ^[[0;1;35mA^[[0m Choose^[[0;2m B Back PgUp/PgDn Scroll^[[0m
^[[0;1;35mA^[[0m Choose ^[[0;2mB^[[0m Back ^[[0;2mPgUp/PgDn^[[0m Scroll
=== quit
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Quit?^[[0m
@@ -270,7 +270,7 @@
^[[0;2m ^[[0;1;35mA^[[0m Quit^[[0;2m B Stay^[[0m
^[[0;1;35mA^[[0m Quit ^[[0;2mB^[[0m Stay
=== help
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Keys^[[0m
@@ -282,5 +282,5 @@
?, F1 This help
BIOS folder:
/home/user/.config/retroarch/system
^[[0;2m Any key closes this help^[[0m
^[[0;1m/home/user/.config/retroarch/system^[[0m
Any key closes this help
+31 -31
View File
@@ -8,16 +8,16 @@
Another setup or folder
BIOS folder:
/home/user/.config/retroarch/system
^[[0;1m/home/user/.config/retroarch/system^[[0m
ES-DE found: its BIOS files go to each
emulator, not to ES-DE itself.
^[[0;2m ^[[0;1;35mA^[[0m Continue^[[0;2m B Quit ? Help^[[0m
^[[0;1;35mA^[[0m Continue ^[[0;2mB^[[0m Quit ^[[0;2m?^[[0m Help
=== platforms
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Which setup?^[[0m
^[[0;2m Filter: setup or device (/)^[[0m
Filter: setup or device (/)
^[[0;7;35m > RetroArch^[[0m
Batocera
Recalbox
@@ -29,7 +29,7 @@
BizHawk
MiSTer FPGA
^[[0;2m 1-10 of 34^[[0m
^[[0;2m ^[[0;1;35mA^[[0m Choose^[[0;2m B Back / Filter ? Help^[[0m
^[[0;1;35mA^[[0m Choose ^[[0;2mB^[[0m Back ^[[0;2m/^[[0m Filter ^[[0;2m?^[[0m Help
=== folder
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Which folder?^[[0m
@@ -45,7 +45,7 @@
^[[0;2m ^[[0;1;35mA^[[0m Use this folder^[[0;2m B Back ? Help^[[0m
^[[0;1;35mA^[[0m Use this folder ^[[0;2mB^[[0m Back ^[[0;2m?^[[0m Help
=== folder-card
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Where is the SD card?^[[0m
@@ -61,7 +61,7 @@
Look again
^[[0;2m ^[[0;1;35mA^[[0m Browse^[[0;2m B Back ? Help^[[0m
^[[0;1;35mA^[[0m Browse ^[[0;2mB^[[0m Back ^[[0;2m?^[[0m Help
=== browse
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Browse for a folder^[[0m
@@ -77,7 +77,7 @@
^[[0;2m ^[[0;1;35mA^[[0m Use this folder^[[0;2m B Back ? Help^[[0m
^[[0;1;35mA^[[0m Use this folder ^[[0;2mB^[[0m Back ^[[0;2m?^[[0m Help
=== path
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Type a path^[[0m
@@ -93,7 +93,7 @@
^[[0;2m ^[[0;1;35mEnter^[[0m Use this folder^[[0;2m Esc Back^[[0m
^[[0;1;35mEnter^[[0m Use this folder ^[[0;2mEsc^[[0m Back
=== create
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Create the folder?^[[0m
@@ -109,7 +109,7 @@
^[[0;2m ^[[0;1;35mA^[[0m Create^[[0;2m B Quit^[[0m
^[[0;1;35mA^[[0m Create ^[[0;2mB^[[0m Quit
=== checking
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Checking^[[0m
@@ -125,7 +125,7 @@
^[[0;2m ^[[0;1;35mCtrl-C^[[0m Quit^[[0;2m B Quit^[[0m
^[[0;1;35mCtrl-C^[[0m Quit ^[[0;2mB^[[0m Quit
=== plan
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: RetroArch^[[0m
@@ -141,7 +141,7 @@
Options
Quit
^[[0;2m ^[[0;1;35mA^[[0m Install^[[0;2m B Back Y Options ? Help^[[0m
^[[0;1;35mA^[[0m Install ^[[0;2mB^[[0m Back ^[[0;2mY^[[0m Options ^[[0;2m?^[[0m Help
=== plan-in-place
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: RetroArch^[[0m
@@ -157,13 +157,13 @@
^[[0;2m ^[[0;1;35mA^[[0m Close^[[0;2m B Back Y Options ? Help^[[0m
^[[0;1;35mA^[[0m Close ^[[0;2mB^[[0m Back ^[[0;2mY^[[0m Options ^[[0;2m?^[[0m Help
=== systems
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Choose systems^[[0m
All
None
^[[0;2m Filter (/ to type)^[[0m
Filter (/ to type)
^[[0;7;35m > [x] nintendo-gba (gba) 16.0 KB^[[0m
[x] sony-playstation 1.0 MB
^[[0;2m [ ] nintendo-famicom-disk in place^[[0m
@@ -173,7 +173,7 @@
^[[0;1m ^[[0;1;35m2^[[0;1m of ^[[0;1;35m3^[[0;1m systems: ^[[0;1;35m4^[[0;1m files, ^[[0;1;35m1.0 MB^[[0m
^[[0;2m ^[[0;1;35mA^[[0m Continue^[[0;2m B Back X Tick ? Help^[[0m
^[[0;1;35mA^[[0m Continue ^[[0;2mB^[[0m Back ^[[0;2mX^[[0m Tick ^[[0;2m?^[[0m Help
=== options
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Options^[[0m
@@ -189,7 +189,7 @@
Sets --region
^[[0;2m ^[[0;1;35mA^[[0m Open^[[0;2m B Back <> Set ? Help^[[0m
^[[0;1;35mA^[[0m Open ^[[0;2mB^[[0m Back ^[[0;2m<>^[[0m Set ^[[0;2m?^[[0m Help
=== regions
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Preferred regions^[[0m
@@ -205,7 +205,7 @@
^[[0;2m ^[[0;1;35mA^[[0m Tick^[[0;2m B Done <> Order ? Help^[[0m
^[[0;1;35mA^[[0m Tick ^[[0;2mB^[[0m Done ^[[0;2m<>^[[0m Order ^[[0;2m?^[[0m Help
=== cores
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Cores^[[0m
@@ -221,7 +221,7 @@
^[[0;2m ^[[0;1;35mA^[[0m Filter^[[0;2m B Back X Tick ? Help^[[0m
^[[0;1;35mA^[[0m Filter ^[[0;2mB^[[0m Back ^[[0;2mX^[[0m Tick ^[[0;2m?^[[0m Help
=== preview
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Preview^[[0m
@@ -237,7 +237,7 @@
^[[0;2m ^[[0;1;35mA^[[0m Back
^[[0;1;35mA^[[0m Back
=== command
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Command line^[[0m
@@ -253,7 +253,7 @@
^[[0;2m ^[[0;1;35mA^[[0m Back
^[[0;1;35mA^[[0m Back
=== confirm
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Confirm^[[0m
@@ -261,7 +261,7 @@
Nothing is written before Install.
^[[0;1m ^[[0;1;35m1^[[0;1m file to download, ^[[0;1;35m16.0 KB^[[0m
BIOS folder: ^[[0;1m~/.co.../retroarch/system^[[0m
0 in place, ^[[0;33m1 missing^[[0m, 0 wrong copies
0 in place, 1 missing, 0 wrong copies
Free space: 50.0 GB
^[[0;7;35m > Install^[[0m
@@ -269,7 +269,7 @@
^[[0;2m ^[[0;1;35mA^[[0m Install^[[0;2m B Back ? Help^[[0m
^[[0;1;35mA^[[0m Install ^[[0;2mB^[[0m Back ^[[0;2m?^[[0m Help
=== installing
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Installing^[[0m
@@ -277,21 +277,21 @@
528.0 KB of 1.0 MB
128.9 KB/s, 0:04 left
2 of 4 files
^[[0;2m B, Ctrl-C or Select+Start stops. What^[[0m
^[[0;2m is done stays done.^[[0m
B, Ctrl-C or Select+Start stops. What
is done stays done.
^[[0;1;31mFAILED^[[0m scph5500.bin (HTTP 404)
^[[0;32m ok^[[0m gba_bios.bin
^[[0;2m ^[[0;1;35mB^[[0m Stop^[[0;2m ? Help^[[0m
^[[0;1;35mB^[[0m Stop ^[[0;2m?^[[0m Help
=== result
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: ^[[0;1;31mFinished with errors^[[0m
^[[0;1m ^[[0;1;32m3 installed^[[0;1m, ^[[0;1;31m1 failed^[[0;1m.^[[0m
BIOS folder:
/home/user/.config/retroarch/system
^[[0;1m/home/user/.config/retroarch/system^[[0m
^[[0;1;31mfailed:^[[0m scph5500.bin (HTTP 404)
The files it replaced are kept in
/home/user/.config/retroarch/retrobios-backup/2026-10-23_1200
@@ -300,8 +300,8 @@
--restore
/home/user/.config/retroarch/retrobios-backup/2026-10-23_1200
^[[0;2m 1-11 of 17^[[0m
^[[0;2m ^[[0;1;35mA^[[0m Exit^[[0;2m ^v Scroll^[[0m
^[[0;2m 1-11 of 16^[[0m
^[[0;1;35mA^[[0m Exit ^[[0;2m^v^[[0m Scroll
=== error
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: ^[[0;1;31mSomething went wrong^[[0m
@@ -317,7 +317,7 @@
Quit
^[[0;2m ^[[0;1;35mA^[[0m Choose^[[0;2m B Back^[[0m
^[[0;1;35mA^[[0m Choose ^[[0;2mB^[[0m Back
=== quit
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Quit?^[[0m
@@ -333,7 +333,7 @@
^[[0;2m ^[[0;1;35mA^[[0m Quit^[[0;2m B Stay^[[0m
^[[0;1;35mA^[[0m Quit ^[[0;2mB^[[0m Stay
=== help
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Keys^[[0m
@@ -345,8 +345,8 @@
?, F1 This help
BIOS folder:
/home/user/.config/retroarch/system
^[[0;1m/home/user/.config/retroarch/system^[[0m
^[[0;2m Any key closes this help^[[0m
Any key closes this help
+35 -35
View File
@@ -22,11 +22,11 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Continue^[[0;2m B/Esc Quit ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Continue ^[[0;2mB/Esc^[[0m Quit ^[[0;2m?^[[0m Help
=== platforms
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Which setup?^[[0m
^[[0;2m Filter: setup or device (/)^[[0m
Filter: setup or device (/)
^[[0;7;35m > RetroArch^[[0m
Batocera
Recalbox
@@ -38,16 +38,16 @@
BizHawk
MiSTer FPGA
RetroPie
Allium, SD card Miyoo Mini, Miyoo Mini Plus, Miyoo Mini Flip
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, Odroid Go Advance, +8
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, RG351MP, RG351V, +2
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
Allium, SD card Miyoo Mini, Miyoo Mini Plus, +1
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, +9
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, +4
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
^[[0;2m 1-19 of 34^[[0m
^[[0;2m ^[[0;1;35mA/Enter^[[0m Choose^[[0;2m B/Esc Back / Filter ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Choose ^[[0;2mB/Esc^[[0m Back ^[[0;2m/^[[0m Filter ^[[0;2m?^[[0m Help
=== folder
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Which folder?^[[0m
@@ -72,7 +72,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Use this folder^[[0;2m B/Esc Back ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Use this folder ^[[0;2mB/Esc^[[0m Back ^[[0;2m?^[[0m Help
=== folder-card
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Where is the SD card?^[[0m
@@ -97,7 +97,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Browse^[[0;2m B/Esc Back ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Browse ^[[0;2mB/Esc^[[0m Back ^[[0;2m?^[[0m Help
=== browse
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Browse for a folder^[[0m
@@ -122,7 +122,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Use this folder^[[0;2m B/Esc Back ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Use this folder ^[[0;2mB/Esc^[[0m Back ^[[0;2m?^[[0m Help
=== path
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Type a path^[[0m
@@ -147,7 +147,7 @@
^[[0;2m ^[[0;1;35mEnter^[[0m Use this folder^[[0;2m Esc Back Ctrl-U Clear^[[0m
^[[0;1;35mEnter^[[0m Use this folder ^[[0;2mEsc^[[0m Back ^[[0;2mCtrl-U^[[0m Clear
=== create
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Create the folder?^[[0m
@@ -172,7 +172,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Create^[[0;2m B/Esc Quit^[[0m
^[[0;1;35mA/Enter^[[0m Create ^[[0;2mB/Esc^[[0m Quit
=== checking
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Checking^[[0m
@@ -197,7 +197,7 @@
^[[0;2m ^[[0;1;35mCtrl-C^[[0m Quit^[[0;2m B/Esc Quit^[[0m
^[[0;1;35mCtrl-C^[[0m Quit ^[[0;2mB/Esc^[[0m Quit
=== plan
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: RetroArch^[[0m
@@ -222,7 +222,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Install^[[0;2m B/Esc Back Y/o Options ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Install ^[[0;2mB/Esc^[[0m Back ^[[0;2mY/o^[[0m Options ^[[0;2m?^[[0m Help
=== plan-in-place
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: RetroArch^[[0m
@@ -247,13 +247,13 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Close^[[0;2m B/Esc Back Y/o Options ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Close ^[[0;2mB/Esc^[[0m Back ^[[0;2mY/o^[[0m Options ^[[0;2m?^[[0m Help
=== systems
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Choose systems^[[0m
All
None
^[[0;2m Filter (/ to type)^[[0m
Filter (/ to type)
^[[0;7;35m > [x] nintendo-gba (gba) 1 file, 16.0 KB^[[0m
[x] sony-playstation 3 files, 1.0 MB
^[[0;2m [ ] nintendo-famicom-disk (ファミコン) in place^[[0m
@@ -272,7 +272,7 @@
^[[0;1m ^[[0;1;35m2^[[0;1m of ^[[0;1;35m3^[[0;1m systems: ^[[0;1;35m4^[[0;1m files, ^[[0;1;35m1.0 MB^[[0m
^[[0;2m ^[[0;1;35mA/Enter^[[0m Continue^[[0;2m B/Esc Back X/Space Tick ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Continue ^[[0;2mB/Esc^[[0m Back ^[[0;2mX/Space^[[0m Tick ^[[0;2m?^[[0m Help
=== options
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Options^[[0m
@@ -283,7 +283,7 @@
Installed cores only: no (1 found) --installed-cores
Cores: all --core
Parallel downloads: 8 --jobs
BIOS folder: ^[[0;1m~/.config/retroarch/system --dest^[[0m
BIOS folder: ^[[0;1m~/.config/retroarch/system^[[0m --dest
Copy from: none --from
Preview the file list --dry-run
Show the command line
@@ -297,7 +297,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Open^[[0;2m B/Esc Back Left/Right Set ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Open ^[[0;2mB/Esc^[[0m Back ^[[0;2mLeft/Right^[[0m Set ^[[0;2m?^[[0m Help
=== regions
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Preferred regions^[[0m
@@ -322,7 +322,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Tick^[[0;2m B/Esc Done Left/Right Order ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Tick ^[[0;2mB/Esc^[[0m Done ^[[0;2mLeft/Right^[[0m Order ^[[0;2m?^[[0m Help
=== cores
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Cores^[[0m
@@ -347,7 +347,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Filter^[[0;2m B/Esc Back X/Space Tick ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Filter ^[[0;2mB/Esc^[[0m Back ^[[0;2mX/Space^[[0m Tick ^[[0;2m?^[[0m Help
=== preview
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Preview^[[0m
@@ -372,7 +372,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Back
^[[0;1;35mA/Enter^[[0m Back
=== command
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Command line^[[0m
@@ -397,14 +397,14 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Back
^[[0;1;35mA/Enter^[[0m Back
=== confirm
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Confirm^[[0m
Counted again for your choices. Nothing is written before Install.
^[[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 in place, ^[[0;33m1 missing^[[0m, 0 wrong copies
0 in place, 1 missing, 0 wrong copies
Free space: 50.0 GB
^[[0;7;35m > Install^[[0m
@@ -422,7 +422,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Install^[[0;2m B/Esc Back ? Help^[[0m
^[[0;1;35mA/Enter^[[0m Install ^[[0;2mB/Esc^[[0m Back ^[[0;2m?^[[0m Help
=== installing
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Installing^[[0m
@@ -430,7 +430,7 @@
528.0 KB of 1.0 MB
128.9 KB/s, 0:04 left
2 of 4 files
^[[0;2m B, Ctrl-C or Select+Start stops. What is done stays done.^[[0m
B, Ctrl-C or Select+Start stops. What is done stays done.
^[[0;1;31mFAILED^[[0m scph5500.bin (HTTP 404)
^[[0;32m ok^[[0m gba_bios.bin
@@ -447,7 +447,7 @@
^[[0;2m ^[[0;1;35mB/Esc^[[0m Stop^[[0;2m ? Help^[[0m
^[[0;1;35mB/Esc^[[0m Stop ^[[0;2m?^[[0m Help
=== result
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: ^[[0;1;31mFinished with errors^[[0m
@@ -472,7 +472,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Exit
^[[0;1;35mA/Enter^[[0m Exit
=== error
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: ^[[0;1;31mSomething went wrong^[[0m
@@ -497,7 +497,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Choose^[[0;2m B/Esc Back^[[0m
^[[0;1;35mA/Enter^[[0m Choose ^[[0;2mB/Esc^[[0m Back
=== quit
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Quit?^[[0m
@@ -522,7 +522,7 @@
^[[0;2m ^[[0;1;35mA/Enter^[[0m Quit^[[0;2m B/Esc Stay^[[0m
^[[0;1;35mA/Enter^[[0m Quit ^[[0;2mB/Esc^[[0m Stay
=== help
^[[0;1m ^[[0;1;35mRetroBIOS^[[0;1m: Keys^[[0m
@@ -547,4 +547,4 @@
^[[0;2m Any key closes this help^[[0m
Any key closes this help
+23 -23
View File
@@ -14,27 +14,27 @@
BizHawk
MiSTer FPGA
RetroPie
Allium, SD card Miyoo Mini, Miyoo Mini Plus, Miyoo Mini Flip
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, Odroid Go Advance, Odroid Go Super, RG351V, +6
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, RG351MP, RG351V, R35S, RGB10
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
JELOS, SD card RG351M, RG351V, RG353M, RG353P, RG353V, RG353VS, RG503, RG552, R33S, R36S, +24
KNULLI, SD card RG ARC-S, RG28XX, RG34XX, RG35XX, RG35XX Plus, RG35XX H, RG35XX 2024, +15
KOLOS, SD card RG353P, RG353M, RG353V, RG353VS, RG503, RK2023, RGB30, RGB10 Max 3
Koriki, SD card Miyoo Mini
MinUI, SD card RG28XX, RG34XX, RG34XX SP, RG35XX, RG35XX Plus, RG35XX H, RG35XX SP, +16
MiyooCFW, SD card BittBoy, Pocket Go, PowKiddy Q90, PowKiddy V90, PowKiddy Q20 Mini, Sup M3, +1
muOS, SD card RG35XX H, RG35XX Plus, RG35XX SP, RG35XX 2024, RG34XX, RG40XX H, RG40XX V, +4
MyMinUI, SD card RG35XX, Miyoo Mini, Miyoo Mini Flip, Miyoo Mini Plus, Miyoo A30, +16
NextUI, SD card TrimUI Brick, TrimUI Smart Pro
Onion, SD card Miyoo Mini, Miyoo Mini Plus
plumOS, SD card MagicX XU20 V32
RetroOZ, SD card Odroid Go Super, Odroid Go Advance, RGB10 Max, RGB10 Max 2
ROCKNIX, SD card RG351, RG353, RG503, RG552, RG 55G1, RG ARC, RG35XX 2024, RG35XX Plus, +37
spruceOS, SD card Miyoo A30, Miyoo Flip, Miyoo Mini, Miyoo Mini Plus, Miyoo Mini Flip, +5
UnofficialOS, SD card R35S, R36S, RG351M, RG351P, RG351V, RG353M, RG353P, RG353V, RG503, +5
Allium, SD card Miyoo Mini, Miyoo Mini Plus, +1
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, +9
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, +4
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
JELOS, SD card RG351M, RG351V, RG353M, RG353P, +30
KNULLI, SD card RG ARC-S, RG28XX, RG34XX, RG35XX, +18
KOLOS, SD card RG353P, RG353M, RG353V, RG353VS, RG503, +3
Koriki, SD card Miyoo Mini
MinUI, SD card RG28XX, RG34XX, RG34XX SP, RG35XX, +19
MiyooCFW, SD card BittBoy, Pocket Go, PowKiddy Q90, +4
muOS, SD card RG35XX H, RG35XX Plus, RG35XX SP, +8
MyMinUI, SD card RG35XX, Miyoo Mini, Miyoo Mini Flip, +18
NextUI, SD card TrimUI Brick, TrimUI Smart Pro
Onion, SD card Miyoo Mini, Miyoo Mini Plus
plumOS, SD card MagicX XU20 V32
RetroOZ, SD card Odroid Go Super, Odroid Go Advance, +2
ROCKNIX, SD card RG351, RG353, RG503, RG552, RG 55G1, +40
spruceOS, SD card Miyoo A30, Miyoo Flip, Miyoo Mini, +7
UnofficialOS, SD card R35S, R36S, RG351M, RG351P, RG351V, +9
A/Enter Choose B/Esc Back / Filter ? Help
+8 -8
View File
@@ -12,13 +12,13 @@
BizHawk
MiSTer FPGA
RetroPie
Allium, SD card Miyoo Mini, Miyoo Mini Plus, Miyoo Mini Flip
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, Odroid Go Advance, +8
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, RG351MP, RG351V, +2
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
Allium, SD card Miyoo Mini, Miyoo Mini Plus, +1
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, +9
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, +4
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
1-19 of 34
A/Enter Choose B/Esc Back / Filter ? Help
+1 -1
View File
@@ -8,5 +8,5 @@
/home/user/.config/retroarch/retrobios-backup/2026-10-23_1200
To put them back: python3 install.py
1-8 of 17
1-8 of 16
A Exit ^v Scroll
+1 -1
View File
@@ -11,5 +11,5 @@
--restore
/home/user/.config/retroarch/retrobios-backup/2026-10-23_1200
1-11 of 17
1-11 of 16
A Exit ^v Scroll
+8 -8
View File
@@ -96,14 +96,14 @@
BizHawk
MiSTer FPGA
RetroPie
Allium, SD card Miyoo Mini, Miyoo Mini Plus, Miyoo Mini Flip
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, Odroid Go Advance, +8
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, RG351MP, RG351V, +2
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
Allium, SD card Miyoo Mini, Miyoo Mini Plus, +1
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, +9
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, +4
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
1-19 of 34
A Choose B Back
=== folder 40x12
+8 -8
View File
@@ -96,14 +96,14 @@
BizHawk
MiSTer FPGA
RetroPie
Allium, SD card Miyoo Mini, Miyoo Mini Plus, Miyoo Mini Flip
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, Odroid Go Advance, +8
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, RG351MP, RG351V, +2
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
Allium, SD card Miyoo Mini, Miyoo Mini Plus, +1
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, +9
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, +4
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
1-19 of 34
A Choose B Back
=== folder 40x12
+8 -8
View File
@@ -96,14 +96,14 @@
BizHawk
MiSTer FPGA
RetroPie
Allium, SD card Miyoo Mini, Miyoo Mini Plus, Miyoo Mini Flip
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, Odroid Go Advance, +8
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, RG351MP, RG351V, +2
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
Allium, SD card Miyoo Mini, Miyoo Mini Plus, +1
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, +9
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, +4
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
1-19 of 34
A Choose B Back
=== folder 40x12
+10 -10
View File
@@ -96,14 +96,14 @@
BizHawk
MiSTer FPGA
RetroPie
Allium, SD card Miyoo Mini, Miyoo Mini Plus, Miyoo Mini Flip
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, Odroid Go Advance, +8
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, RG351MP, RG351V, +2
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
Allium, SD card Miyoo Mini, Miyoo Mini Plus, +1
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, +9
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, +4
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
1-19 of 34
Enter Choose Esc Back / Filter ? Help
=== folder 40x12
@@ -927,7 +927,7 @@
/home/user/.config/retroarch/retrobios-backup/2026-10-23_1200
To put them back: python3 install.py
1-8 of 17
1-8 of 16
Enter Exit ^v Scroll
=== result 40x15
RetroBIOS: Finished with errors
@@ -943,7 +943,7 @@
--restore
/home/user/.config/retroarch/retrobios-backup/2026-10-23_1200
1-11 of 17
1-11 of 16
Enter Exit ^v Scroll
=== result 80x24
RetroBIOS: Finished with errors
+8 -8
View File
@@ -96,14 +96,14 @@
BizHawk
MiSTer FPGA
RetroPie
Allium, SD card Miyoo Mini, Miyoo Mini Plus, Miyoo Mini Flip
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, Odroid Go Advance, +8
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, RG351MP, RG351V, +2
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
Allium, SD card Miyoo Mini, Miyoo Mini Plus, +1
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, +9
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, +4
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
1-19 of 34
A Choose R2 Back
=== folder 40x12
+8 -8
View File
@@ -96,14 +96,14 @@
BizHawk
MiSTer FPGA
RetroPie
Allium, SD card Miyoo Mini, Miyoo Mini Plus, Miyoo Mini Flip
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, Odroid Go Advance, +8
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, RG351MP, RG351V, +2
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
Allium, SD card Miyoo Mini, Miyoo Mini Plus, +1
AmberELEC, SD card RG351, RG552
Anbernic stock firmware, SD card RG35XX Plus, RG35XX H, RG35XX SP, RG28XX
ArchR, SD card R36S, R33S, R36S Soysauce, +9
ArkOS, SD card RG353M, RG353V, RG503, RGB30, RK2023, +4
CrossMix-OS, SD card TrimUI Smart Pro
dArkOS, SD card Odroid Go Advance, RGB10, RG351MP, G350
EmuELEC, SD card Odroid Go
1-19 of 34
Start Choose B Back
=== folder 40x12
+5 -4
View File
@@ -102,18 +102,19 @@ class InstallerOutputExample(unittest.TestCase):
menu = re.search(r"RetroArch: (\d+) files, ([\d.]+ [KMG]B)[.,]([^`]*)", text)
self.assertEqual(menu.groups()[:2], (count, size))
self.assertSplitAddsUp(menu.group(3), count, size)
games = re.search(r"g\) leave out the (\d+) game data files \(([\d.]+ [KMG]B)\)",
games = re.search(r"g\) Game data: kept \((\d+) files, ([\d.]+ [KMG]B)\)",
menu.group(3))
self.assertIsNotNone(games, "the menu offers to leave the game data out")
split = re.search(r"(\d+) BIOS files \(([\d.]+ [KMG]B)\) and (\d+) game data files "
r"\(([\d.]+ [KMG]B)\)", menu.group(3))
split = re.search(r"(\d+) BIOS files \(([\d.]+ [KMG]B)\)(?:,| and) (\d+) game data "
r"files \(([\d.]+ [KMG]B)\)", menu.group(3))
self.assertEqual(games.groups(), split.groups()[2:])
def assertSplitAddsUp(self, text: str, count: str, size: str) -> None:
"""The run counted 8069 files where its menu counted 3259 BIOS files
and 5089 game data files: the parts add up to the total they divide,
the sizes within the rounding of their three figures."""
split = re.search(r"(\d+) BIOS files \(([\d.]+) ([KMG]B)\) and (\d+) game data "
# Data files are a third kind, counted beside the two (tui_audit_12 P2-3).
split = re.search(r"(\d+) BIOS files \(([\d.]+) ([KMG]B)\)(?:,| and) (\d+) game data "
r"files \(([\d.]+) ([KMG]B)\)", text)
self.assertIsNotNone(split, "a categorized list says its BIOS files and game data")
bios, bios_size, bios_unit, games, game_size, game_unit = split.groups()
+24
View File
@@ -510,6 +510,9 @@ if os.environ.get("FAKE_IDLE_ERROR"):
# RETROBIOS_IDLE_EXIT on an error screen: the idle line, then the error.
print("RetroBIOS: No button pressed, closing.", file=sys.stderr)
print("Error: " + os.environ["FAKE_IDLE_ERROR"], file=sys.stderr)
if os.environ.get("FAKE_QUIT"):
# q or Quit on the screen: the farewell on stderr, code 2.
print("RetroBIOS: quit. Nothing was installed.", file=sys.stderr)
if os.environ.get("FAKE_ERROR"):
print("Error: " + os.environ["FAKE_ERROR"], file=sys.stderr)
sys.exit(int(os.environ.get("FAKE_CODE", "0")))
@@ -959,6 +962,27 @@ class ThePortMasterPort(unittest.TestCase):
self.assertIn("Error: the folder is read-only", device.screen)
self.assertIn("log.txt", device.screen)
def test_a_quit_chosen_shows_no_message(self):
"""code_audit_19 P3-1: a quit chosen exits 2, below 128, and the
first line of tui.err went into a message box waiting for A."""
device = self.device()
proc = device.run(["bash", self.script], FAKE_QUIT="1", FAKE_CODE="2",
RB_MESSAGE_WAIT="300")
self.assertEqual(proc.returncode, 2)
self.assertLess(device.elapsed, 15)
self.assertNotIn("Nothing was installed", device.screen)
self.assertNotIn("Press A", device.screen)
device.assert_console_restored()
def test_the_quit_line_is_the_one_install_py_writes(self):
state = install.TuiState(os_type="linux", home=Path.home())
state.quit_asked, state.exit_code = True, install.QUIT_CODE
self.assertTrue(install.tui_quit_chosen(state))
line = install.tui_farewell(state)[0]
tui = (REPO_ROOT / "ports" / "shared" / "tui.txt").read_text(encoding="utf-8")
self.assertIn(f'= "{line}" ]', tui)
self.assertIn(f'print("{line}", file=sys.stderr)', FAKE_INSTALL)
def test_offline_installs_from_a_pack_on_the_card(self):
device = self.device(FAKE_CURL="7")
roms = device.root / "roms"
+2 -2
View File
@@ -1790,7 +1790,7 @@ class TestDetectedPlatformPrompt(unittest.TestCase):
def test_q_quits_and_the_menu_says_so(self):
result, out = self._answer("q")
self.assertIsInstance(result, SystemExit)
self.assertEqual(result.code, 130)
self.assertEqual(result.code, install.QUIT_CODE)
self.assertIn("q) quit", out)
def test_a_wrong_answer_names_the_choices(self):
@@ -1859,7 +1859,7 @@ class TestManualPlatformPrompt(unittest.TestCase):
with unittest.mock.patch("builtins.input", lambda _prompt="": "q"):
with self.assertRaises(SystemExit) as raised:
install._prompt_manual_platform("linux")
self.assertEqual(raised.exception.code, 130)
self.assertEqual(raised.exception.code, install.QUIT_CODE)
def test_quotes_around_a_typed_folder_are_dropped(self):
"""Explorer's "Copy as path" quotes the folder: the files went into a
+4 -3
View File
@@ -721,9 +721,10 @@ class TheOneLinerNarrows(unittest.TestCase):
self.assertFalse((repo.root / '"').exists())
self.assertEqual(len([p for p in card.rglob("*") if p.is_file()]), 5)
def test_q_at_every_menu_stops_on_130(self):
def test_q_at_every_menu_stops_on_the_quit_code(self):
"""`install.sh && retroarch` started RetroArch after a q, which left
with 0 where Ctrl+C and Ctrl+D leave with 130."""
with 0. A quit chosen ends on 2, nothing installed, where Ctrl+C and
Ctrl+D leave with 130 (code_audit_19 P3-1)."""
files = [{"dest": "a.bin", "size": 1, "systems": ["nintendo-gba"]}]
menus = (
lambda: install._choose_platform("Platform:"),
@@ -736,7 +737,7 @@ class TheOneLinerNarrows(unittest.TestCase):
mock.patch("sys.stdout", new_callable=lambda: open(os.devnull, "w")), \
self.assertRaises(SystemExit) as stop:
menu()
self.assertEqual(stop.exception.code, 130)
self.assertEqual(stop.exception.code, install.QUIT_CODE)
@unittest.skipIf(os.name == "nt", "a pseudo-terminal is a POSIX one")
def test_ctrl_d_at_the_first_question_has_nothing_to_carry_on(self):
+905 -75
View File
File diff suppressed because it is too large. Load diff
+3 -3
View File
@@ -289,7 +289,7 @@ class InstallerLeavesGameDataOut(unittest.TestCase):
self.assertEqual(proc.returncode, 0, proc.stdout + proc.stderr)
self.assertTrue((self.bios / "a.bin").exists())
self.assertFalse((self.bios / "game.wad").exists())
self.assertIn("Left out as game data (--no-game-data): 2 files, 1 of them not installable: "
self.assertIn("2 game data files left out (--no-game-data), 1 of them not installable: "
"game.wad, level.dat",
proc.stdout)
@@ -300,7 +300,7 @@ class InstallerLeavesGameDataOut(unittest.TestCase):
with self.subTest(mode=mode):
proc = self.run_installer("--no-game-data", mode)
self.assertIn(
"Left out as game data (--no-game-data): 2 files, 1 of them not installable: "
"2 game data files left out (--no-game-data), 1 of them not installable: "
"game.wad, level.dat",
proc.stdout,
)
@@ -313,7 +313,7 @@ class InstallerLeavesGameDataOut(unittest.TestCase):
proc = self.run_installer()
self.assertEqual(proc.returncode, 0, proc.stdout + proc.stderr)
self.assertTrue((self.bios / "game.wad").exists())
self.assertNotIn("Left out as game data", proc.stdout)
self.assertNotIn("game data files left out", proc.stdout)
def test_events_name_what_was_left_out(self):
self.serve()
+6 -7
View File
@@ -26,7 +26,7 @@ irm https://raw.githubusercontent.com/Abdess/retrobios/main/install.ps1 | iex
</TabItem>
<TabItem label="macOS">
Open **Terminal**. It is in Applications, then Utilities.
Open **Terminal**, in Applications, then Utilities.
```sh title="Terminal"
curl -fsSL https://raw.githubusercontent.com/Abdess/retrobios/main/install.sh | sh
@@ -53,7 +53,7 @@ curl -fsSL https://raw.githubusercontent.com/Abdess/retrobios/main/install.sh |
</TabItem>
<TabItem label="Android (Termux)">
Install **Termux**, a terminal app. Run these three lines in it.
Install **Termux**, a terminal app, and run these lines.
```sh title="Terminal"
pkg install python
@@ -84,11 +84,11 @@ It opens a menu:
**Another setup or folder**. Press / and type the device (Miyoo Mini),
or browse.
Arrows move, Enter chooses, Esc goes back, as A and B on a handheld.
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.
## 3. Install
It counts missing files and free space.
Press Enter on **Install**. **Choose systems** keeps the consoles you
play.
@@ -138,13 +138,12 @@ says how to restore them.
### Nothing was found here.
Choose your setup in the list, then its folder. Where the screen offers
Choose your setup, then its folder. Where the screen offers
**Another setup or folder**, choose it first.
### Error: Python 3.8 or newer is required.
The message shows the command that installs Python. Run it, then run the
installer again.
Run the command the message shows, then the installer again.
RetroPie 4.8 has Python 3.7.3, and its update finds nothing newer. Run it on
a computer, with RetroPie's `bios` share open, `\\RETROPIE\bios` from Windows:
+62 -38
View File
@@ -238,21 +238,29 @@ started it, the one thing that can resume it: started from a terminal app's
`-e`, a desktop entry or a launcher's `sh -c`, the key is ignored and the bar
says why.
A mouse or a touch screen works too, beside the keys and buttons. A click or
a tap on a row moves the cursor there, and a second one on the row under the
cursor does what Enter does: one row of a terminal is far smaller than a
finger. The entries of the bottom line press their key, the line that says
which rows are in view shows the next page, and the wheel scrolls a list or a
text without moving the cursor unless it would leave the screen. Nothing
happens until the button or the finger comes up, and only where it went down.
The right and middle buttons do nothing. The installer asks the terminal for
clicks only on a terminal that reports them (`TERM` not `linux`, `dumb` or
unset), never on a handheld route (`RETROBIOS_PAD`) or with
`RETROBIOS_NO_MOUSE=1`, and gives them back on every way out, a stop with
Ctrl+Z included. On the result, the command line screen, any screen showing
a command and the screen where a path is typed, the terminal keeps the mouse,
so text is selected, copied and pasted as usual. Elsewhere, hold Shift while
selecting. `--plain` never asks for clicks. Clicks and taps were checked on
A mouse or a touch screen works too, beside the keys and buttons, in a
terminal that reports clicks: those of Linux, macOS, WSL and Termux. A click
or a tap on a box (a system, a core, a region) ticks or unticks it, as Space
does. On any other row it moves the cursor there, and a second one on that
row does what Enter does: one row of a terminal is far smaller than a finger,
and the row a screen opens on (**Install** on Confirm) is never chosen by one
tap. The entries of the bottom line press their key, **Exit** on the result
too, the line that says which rows are in view shows the next page, and the
wheel scrolls a list or a text without moving the cursor unless it would leave
the screen. Nothing happens until the button or the finger comes up, and only
where it went down. The right and middle buttons do nothing. The help and the
bottom line of a list of boxes say how a tap acts.
Clicks are off in the Windows console the PowerShell command runs in, which
reports no click as a key, with `TERM` unset or set to `dumb`, `unknown`,
`linux` or a name starting with `vt`, `cons` or `ansi`, on a handheld route
(`RETROBIOS_PAD`), and with `RETROBIOS_NO_MOUSE` set. The installer gives
them back on every way out, a stop with Ctrl+Z included. On the command line
screen, any screen showing a command and the screen where a path is typed,
the terminal keeps the mouse, so text is selected, copied and pasted as usual.
The result takes taps, so a touch screen can leave it: it is printed again in
the terminal once the screen closes, its commands with it. Elsewhere, hold
Shift while selecting. `--plain` never asks for clicks. Clicks and taps were checked on
2026-10-27 in xterm, tmux, GNU screen 4.09, Windows Terminal (WSL) and Termux
on Android 17. macOS Terminal and iTerm2 are not checked yet, nor the key
they use to select over the installer.
@@ -654,32 +662,42 @@ the plan screen of the [full-screen interface](#the-full-screen-interface)
offers **Install**, **Choose systems** and **Options**. With `--plain`, or where
the full screen cannot open (a terminal smaller than 40x12, `TERM=dumb`), the
same choice comes as questions after detection. A RetroArch run with `--plain`
printed this on 2026-10-27:
printed this on 2026-10-28, `g` then pressed:
```
RetroArch: 8358 files, 6.6 GB, and 2636 data files (38.5 MB).
3269 BIOS files (4.1 GB) and 5089 game data files (2.5 GB).
3269 BIOS files (4.1 GB), 5089 game data files (2.5 GB) and 2636 data files (38.5 MB).
Game data: files a game or a game engine reads, of no use to the other cores. Data files: the files an emulator reads from a data folder of its own, such as Dolphin's Sys and PPSSPP's assets.
BIOS folder: /home/me/.config/retroarch/system
106 files read from RetroArch's save directory go to a folder per core under /home/me/.config/retroarch/saves
Enter) install everything
i) only what the installed cores read: 87 files, 43.8 MB
c) choose systems, cores and regions
f) copy from a folder or an old card
g) leave out the 5089 game data files (2.5 GB), game data: files a game or a game engine reads, of no use to the other cores
g) Game data: kept (5089 files, 2.5 GB): leave it out
q) quit
>
Counted again for your choices. Nothing is written before Enter.
RetroArch: 3269 files, 4.1 GB, and 2636 data files (38.5 MB).
3269 BIOS files (4.1 GB) and 2636 data files (38.5 MB). 5089 game data files left out.
```
A list that marks its game data counts it apart from the BIOS files, on the
plan, in this menu and on the result (`Installed: 3269 BIOS files, 5089 game
data files and 2636 data files.`), the parts adding up to the total. `g` leaves
the game data of the choice out, as `--no-game-data` does, and counts again
(`g` then keeps it). The plan screen has the same choice as a row of its own,
**Game data (5089 files, 2.5 GB): kept, leave out**, one press toggling it,
and Options keeps its **Game data** row too.
A list that marks its game data counts three kinds of file apart, on the plan,
in this menu and on the result (`Installed: 3269 BIOS files, 5089 game data
files and 2636 data files.`), the parts adding up to the total: BIOS files,
game data, and the data files of an emulator's own data folder (Dolphin's
`Sys`, PPSSPP's assets). What the last two are is said once, under the counts.
`g` leaves the game data of the choice out, as `--no-game-data` does, and
counts again (`g` then keeps it). The plan screen has the same choice as a row
of its own, **Game data: kept** with its count, one press toggling it to
**Game data: left out**, and Options keeps its **Game data** row too. Its
count follows the systems chosen, as `g` counts them, and a choice that holds
no game data has no row. Given `--no-game-data`, neither the menu nor the plan
offers the game data back.
`i` appears for RetroArch, Lakka and RetroPie when cores are found installed,
and the line above is a RetroArch with Beetle PSX HW, Snes9x, mGBA, Genesis Plus GX
and FCEUmm.
`i) only what the installed cores read: 87 files, 43.8 MB` appears for
RetroArch, Lakka and RetroPie when cores are found installed, here a RetroArch
with Beetle PSX HW, Snes9x, mGBA, Genesis Plus GX and FCEUmm.
It keeps what those cores read and drops the systems none of them emulates,
the rule `--installed-cores` applies.
@@ -740,7 +758,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
Left out as game data (--no-game-data): 2436 files: ports/doom/doom1.wad, ports/doom2/doom2.wad, ...
2436 game data files left out (--no-game-data): ports/doom/doom1.wad, ports/doom2/doom2.wad, ...
```
It is the cut `generate_pack.py --no-game-data` makes, and a test holds the
@@ -830,7 +848,7 @@ what the options name, everything by default.
| <span id="option-no-input"></span>`--no-input` | Never ask a question, even at a terminal. A run whose output goes to a file or a pipe asks nothing either, and says so on stderr. It finds the setups and the mounted cards the screen finds: one is taken, as Enter takes it, and two stop the run with an `error` event (`stage` `detect`, `reason` `conflict`) naming each with its `--platform` and `--dest` |
| <span id="option-check"></span>`--check` | Report and exit without writing |
| <span id="option-dry-run"></span>`--dry-run` | Show what would be downloaded, the totals first, then by system and with sizes, without writing anything. A plan taller than the screen names the ten largest systems, and `--verbose` lists every system and file |
| <span id="option-yes"></span>`--yes`, `-y` | Do not ask before a download of 1 GB or more, nor anything else. Implies `--no-input`, so a run that needs an answer (nothing found here, two setups found) stops on what to name instead |
| <span id="option-yes"></span>`--yes`, `-y` | Do not ask before a download of 1 GB or more, nor anything else. Implies `--no-input`, so a run that needs an answer (nothing found here, a file list or a pack naming its platform included, or two setups found) stops on what to name instead. `--platform` names a setup, whose usual folder is then taken |
| <span id="option-quiet"></span>`--quiet`, `-q` | Print only failures and the final summary. Implies `--no-input` |
| <span id="option-events"></span>`--events` | Write the run as JSON events on standard output, one object per line, and the usual text on standard error. Implies `--no-input`. See [Machine-readable events](#machine-readable-events) |
| <span id="option-from"></span>`--from FOLDER` | Copy the BIOS files a folder holds (an old SD card, a backup, a ZIP) instead of downloading them, each one recognised by its hash and copied, never moved. Repeat for several folders. See [Copy from an old card](#copy-from-an-old-card) |
@@ -971,7 +989,10 @@ with its root password, and a card whose password was changed is named by
nothing, never by another system. A drive whose files fit two systems is named
by neither: the first screen and `--plain` say which systems it could be and
the two commands that name it, and a `--dest` named with one of them takes it
as that system's, with a note.
as that system's, with a note. The full screen lists it under each system it
could be ("KNULLI2: if it is a KNULLI card"), and with a file list for one of
them it is that system's card, offered first, never "no card is mounted".
`--plain` numbers it the same way ("Type 1 if it is the KNULLI card").
The full screen lists such a card on its first screen ("muOS SD card (E:\)"),
and a SHARE drive the same way ("Batocera SHARE drive (SHARE)"): its root, typed
@@ -995,7 +1016,10 @@ Under WSL both sides are searched. The Windows one is reached through its
`/mnt/c/...`, and the Windows variables the rules use (`USERPROFILE`,
`APPDATA`, `LOCALAPPDATA`, `ProgramFiles`) are read through `cmd.exe` when
WSL does not pass them. A forced `--platform retrobat` falls back to
`/mnt/c/RetroBat/bios`.
`/mnt/c/RetroBat/bios`. With nothing found, the folder question offers both
usual folders of a setup that has one on each side: RetroArch's in this Linux
(`~/.config/retroarch/system`, under Enter) and the Windows one
(`C:\RetroArch-Win64\system`), each named by its side.
| Evidence | Platform | BIOS directory |
|----------|----------|----------------|
@@ -1289,7 +1313,7 @@ Each launcher also sets `RETROBIOS_IDLE_EXIT` to 300: with no button pressed
for 5 minutes since it opened, and no check or install running, the interface
closes by itself. A pad the system has no mapping for sends nothing, and would
otherwise leave the console stuck on the interface with no way out. It closes
with `RetroBIOS: No button pressed, closing.` and exit status 130, as a quit
with `RetroBIOS: No button pressed, closing.` and exit status 2, as a quit
before the install. Closed on an error or a result screen, it prints that
screen's words after the line and exits with its code (1 for `No internet:
offline mode`), so the launcher can tell an error from a close with nothing to
@@ -1536,8 +1560,8 @@ fields, the installer refuses to narrow rather than install everything.
|------|---------|
| `0` | everything asked for is installed or already up to date |
| `1` | a failure: the one-liner could not download or verify `install.py`, or found no Python 3.8 (nothing was run), an unusable base URL, an unknown platform or target, `--installed-cores` with no core found, a manifest that fails validation, a fetch that never succeeded, no platform to install for in a non-interactive run, some files failed or were left out by `--offline` while others installed, `--check` found files to fetch, a `--from-pack` pack that cannot be read, lacks a part or is for another platform, a `--from` folder that does not exist or cannot be read, a `--dest` that is not the card of the system named (another system's card, a folder inside one, a drive with none of its files where its card always has them, or a folder that does not exist), `--restore` could not put a file back, or `--add-app` could not put every file of the app on the card |
| `2` | nothing was installed: every file the run tried failed (a BIOS folder that cannot be written, for one), or `--offline` left every file out, the drive has too little free space for the download (checked before any folder is created), or the question about a folder that does not exist, named with `--dest` or typed at the folder question, was answered no. Also an option the installer refused before any download: an unknown option, `--jobs` outside 1 to 32, `--target` with `--every-board` or `--from-pack`, `--target` or `--list-targets` with `--offline` (or `RETROBIOS_INSTALL_OFFLINE` set), which read a core list from the network, `--add-app` with `--check`, `--dry-run`, a listing, `--from-pack` or `--offline`. The message then starts with `install.py: error:`. Also `--add-app` for a folder on no card that takes the app, said in an `Error:` line and an `app` event before anything is written. With `--restore`, a folder that is not a dated folder inside `retrobios-backup` |
| `130` | stopped with Ctrl+C, or with `q`, Ctrl+C or Ctrl+D at a question, or the full screen closed with no button pressed (`RETROBIOS_IDLE_EXIT`) before an install. A quit chosen (`q`, **Quit**) is code `130` too, and the terminal keeps `RetroBIOS: quit. Nothing was installed.` where a stop keeps `stopped`. Run the same command again to carry on |
| `2` | nothing was installed: every file the run tried failed (a BIOS folder that cannot be written, for one), or `--offline` left every file out, the drive has too little free space for the download (checked before any folder is created), or the question about a folder that does not exist, named with `--dest` or typed at the folder question, was answered no. Also an option the installer refused before any download: an unknown option, `--jobs` outside 1 to 32, `--target` with `--every-board` or `--from-pack`, `--target` or `--list-targets` with `--offline` (or `RETROBIOS_INSTALL_OFFLINE` set), which read a core list from the network, `--add-app` with `--check`, `--dry-run`, a listing, `--from-pack` or `--offline`. The message then starts with `install.py: error:`. Also `--add-app` for a folder on no card that takes the app, said in an `Error:` line and an `app` event before anything is written. With `--restore`, a folder that is not a dated folder inside `retrobios-backup`. Also a quit chosen before the install, as `gh` ends a cancelled prompt: `q` at a question, `q` or **Quit** on the full screen, which then keeps `RetroBIOS: quit. Nothing was installed.`, and the full screen closed with no button pressed (`RETROBIOS_IDLE_EXIT`). No code but `0` closes a Windows Terminal tab started on the installer itself, so such a tab stays open on a quit |
| `130` | stopped with Ctrl+C, or with Ctrl+C or Ctrl+D at a question, the terminal keeping `RetroBIOS: stopped. Nothing was installed.` before an install. Run the same command again to carry on |
| `141` | the output was piped to a reader that closed early (`--list-platforms \| head`) |
<!-- /generated: exit-codes -->
@@ -1641,8 +1665,8 @@ RetroArch folder that holds only `scph5501.bin`, in the order written:
| `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 |
| `RETROBIOS_PAD` | The buttons a handheld launcher's mapper sends to the full screen (`gptokeyb`, `gptokeyb_muxterm`, `muxterm`, `evmapy`, `miyoo`), so its hints name them. See [On a handheld](#on-a-handheld-the-retrobios-port) |
| `RETROBIOS_IDLE_EXIT` | Seconds the full screen waits for a first button, counted while nothing runs. With none pressed, it closes with exit status 130, or with the code of the error or result screen it closed on |
| `RETROBIOS_NO_MOUSE` | Set to anything but `0`: the full screen never asks the terminal for clicks, and the mouse selects text everywhere as it does outside the installer |
| `RETROBIOS_IDLE_EXIT` | Seconds the full screen waits for a first button, counted while nothing runs. With none pressed, it closes with exit status 2, as a quit, or with the code of the error or result screen it closed on |
| `RETROBIOS_NO_MOUSE` | Set to any value but `0` or an empty one: the full screen never asks the terminal for clicks, and the mouse selects text everywhere as it does outside the installer |
| `HTTPS_PROXY`, `NO_PROXY` | Honoured for every download through the standard library's default proxy handling: one names the proxy, the other the hosts to reach directly |
## When something goes wrong