From 001bbcf9d13c0c28022cae5621757025a084fb06 Mon Sep 17 00:00:00 2001 From: Mihawk <163614687+mihawk-99@users.noreply.github.com> Date: Sun, 18 Oct 2026 07:58:19 -0400 Subject: [PATCH] Evidence: Game Forwarder on the console; README: make a tile in the WebUI evidence/game-forwarder-webui (tools/evidence.py distil of klog/game-forwarder-webui/ record.txt, game names masked): on the owner's base PS5 (13.40, ShadowMountPlus 1.7-beta5fix1), builds 9adce7a0 (8a31a1f) and 57fc257a (2512f39): - the routes from the PC: a tile made (PPSA99171, its files and param.json, in manual.lst), installed by ShadowMountPlus once RetroArch closed, opened (five arguments, "forwarder: /app0/content/snes/ with snes9x, closing after it"), renamed and re-pictured and the spike's tile deleted while RetroArch ran, both finished by the daemon once it closed ("removed", "installed again with its new name or icon"; /user/appmeta shows the new name and icon); - the page in a browser: 33 systems in the picker, each with its icon; a tile made from a SNES game's 3D box and one from a Genesis game's logo with the system's icon in the corner ("Saving..." while ShadowMountPlus answered); an installed tile deleted ("leaves the home screen once RetroArch closes"), uninstalled and its folder gone once RetroArch closed; the home screen's icons are byte for byte the PNGs the page drew (512x512); the Genesis tile opened its game with genesis_plus_gx and closed after it. Not checked (human_check): a tile opened on the home screen while RetroArch is open should bring up the console's prompt to close it; the control payload cannot press the home screen. README: "Start a game from a home screen forwarder" opens with "Make a tile in the WebUI" (the page, ShadowMountPlus 1.7 or later, why changes wait for RetroArch to close, where games may be); the arguments follow as "Make a forwarder by hand", unchanged. No line removed. Gates: format, unit (210 tests), build, integration (210 tests), evidence (138 captures, 0 failed) - PASS. --- README.md | 20 ++++++++ evidence/game-forwarder-webui/capture.json | 47 +++++++++++++++++++ .../game-forwarder-webui/expectation.json | 22 +++++++++ 3 files changed, 89 insertions(+) create mode 100644 evidence/game-forwarder-webui/capture.json create mode 100644 evidence/game-forwarder-webui/expectation.json diff --git a/README.md b/README.md index 89df2d1..63bdf5c 100644 --- a/README.md +++ b/README.md @@ -254,6 +254,26 @@ and **EXTERNAL** (`/mnt`) may be empty. ## Start a game from a home screen forwarder +### Make a tile in the WebUI + +The WebUI's **Game Forwarder** page makes home screen tiles that each open one game in +RetroArch. Choose a system, then one of its games from your library, the name the home screen +shows, the core (the game's own is chosen for you) and a picture: its box art, 3D box, logo, +cartridge or disc, screenshot, title screen or fan art, filling the square or fitted in it, with +the system's icon in the bottom right corner if you like. A picture the game has no file for +yet is greyed out; **Download Media** can find it. Choose **Create tile**, then close +RetroArch: the tile appears on the home screen. A new name or picture, and a tile you delete, +reach the home screen the same way, once RetroArch closes. + +A tile is a small title of its own, `PPSA99170` to `PPSA99269` in `/data/homebrew`, which +[ShadowMountPlus](https://github.com/drakmor/ShadowMountPlus) 1.7 or later installs. The page +needs it loaded with its API on (the default), and says so when it does not answer. +ShadowMountPlus installs and removes nothing while a game runs, and RetroArch counts as one: +that is why changes wait for RetroArch to close. Delete tiles from the page, which also removes +their folder. A tile opens a game in the content folder or on a USB or extended storage drive. + +### Make a forwarder by hand + A forwarder is a small app with its own home screen tile that launches `PPSA99169` with launch arguments. The title then starts that game in RetroArch with the core given, instead of opening the picker or a frontend. diff --git a/evidence/game-forwarder-webui/capture.json b/evidence/game-forwarder-webui/capture.json new file mode 100644 index 0000000..598365e --- /dev/null +++ b/evidence/game-forwarder-webui/capture.json @@ -0,0 +1,47 @@ +{ + "step": "game-forwarder-webui", + "recorded": "2026-10-18T11:44:54Z", + "console_run": "", + "revision": "8a31a1f (routes, build 9adce7a0) and 2512f39 (page, build 57fc257a)", + "command": "the WebUI at http://:6769: its /api/forwarders routes from the PC, then the Game Forwarder page in a browser; RetroArch and the tiles started and closed through the control payload", + "raw_capture": "klog/game-forwarder-webui/record.txt", + "raw_lines": 35, + "raw_bytes": 3143, + "lines": [ + "==> the WebUI at http://:6769: its /api/forwarders routes from the PC (step 2), then the Game Forwarder page in a browser (step 4); RetroArch and the tiles started and closed through the control payload", + "Console: the owner's base PS5, firmware 13.40, ShadowMountPlus 1.7-beta5fix1, 2026-10-18. Builds 9adce7a0 (8a31a1f, the routes) and 57fc257a (2512f39, the page). Game names are masked.", + "-- the routes (8a31a1f)", + "GET /api/forwarders: shadowmount answers, version 1.7-beta5fix1; PPSA99170 installed (the spike's tile)", + "POST /api/forwarders (a SNES game, core snes9x): 201 {'id': 'PPSA99171'}", + "PPSA99171: eboot.bin, forward.txt, launch.elf 110832 bytes, sce_module/libc.prx, sce_sys/icon0.png, sce_sys/param.json", + "param.json: PPSA99171 99171 UP9000-PPSA99171_00-FORWARDER0099171", + "manual.lst: /data/homebrew/PPSA99170, /data/homebrew/PPSA99171", + "RetroArch closed -> ShadowMountPlus: NOTIFY: installed game PPSA99171", + "tile PPSA99171: launch payload 110832 bytes, 110832 sent to 127.0.0.1:9021 (errno 0)", + "launch PPSA99171: 5 argument(s) from forward.txt", + "forwarder: /app0/content/snes/ with /app0/cores/snes9x_libretro.so, closing after it", + "PPSA99171 renamed and given a new icon: state updating; PPSA99170 deleted: {\"state\":\"pending\"}, manual list empty", + "RetroArch closed -> daemon: forwarder PPSA99170: removed", + "RetroArch closed -> daemon: forwarder PPSA99171: installed again with its new name or icon", + "/user/appmeta/PPSA99171 titleName: Forwarder renamed; icon0.png the new one (first pixel 20 60 d0)", + "/user/appmeta/PPSA99170 and /data/homebrew/PPSA99170: 550 No such file or directory", + "-- the page (2512f39)", + "page: 33 systems in the picker, each with its icon", + "page: a SNES game, picture 3D box (fitted): Tile created. It appears on the home screen once RetroArch closes. (PPSA99170)", + "page: a second waiting tile, made by a repeated test click (PPSA99172): Tile removed.", + "page: Sega - Mega Drive - Genesis, a game, picture logo (fitted), system icon in the corner, core genesis_plus_gx prefilled: Saving... then Tile created (PPSA99172 again)", + "page: PPSA99171 (installed) deleted: The tile leaves the home screen once RetroArch closes.", + "API: PPSA99170 waiting, PPSA99171 removing, PPSA99172 waiting; manual.lst /data/homebrew/PPSA99170, /data/homebrew/PPSA99172", + "RetroArch closed -> ShadowMountPlus: NOTIFY: installed game PPSA99170; NOTIFY: installed game PPSA99172", + "RetroArch closed -> daemon: forwarder PPSA99170: launch.elf brought up to this build", + "RetroArch closed -> daemon: forwarder PPSA99171: removed", + "ShadowMountPlus: [API] uninstall requested: title=PPSA99171", + "/user/appmeta/PPSA99171, /user/app/PPSA99171 and /data/homebrew/PPSA99171: 550 No such file or directory", + "/user/appmeta/PPSA99170 icon0.png: 408809 bytes, 512x512, the tile's own: True", + "/user/appmeta/PPSA99172 icon0.png: 71761 bytes, 512x512, the tile's own: True", + "tile PPSA99172: launch payload 110832 bytes, 110832 sent to 127.0.0.1:9021 (errno 0)", + "launch PPSA99172: 5 argument(s) from forward.txt", + "forwarder: /app0/content/genesis/ with /app0/cores/genesis_plus_gx_libretro.so, closing after it", + "Left on the console: PPSA99170 and PPSA99172 on the home screen, made by the page." + ] +} diff --git a/evidence/game-forwarder-webui/expectation.json b/evidence/game-forwarder-webui/expectation.json new file mode 100644 index 0000000..2535b38 --- /dev/null +++ b/evidence/game-forwarder-webui/expectation.json @@ -0,0 +1,22 @@ +{ + "step": "game-forwarder-webui", + "note": "Game Forwarder on the console: tiles made, renamed, given a picture and deleted through the WebUI; ShadowMountPlus installs and uninstalls them once RetroArch closes, the WebUI's daemon finishes what waited; a tile opens its game in RetroArch with its core and closes after it; the home screen shows the picture the page drew, the system's icon in its corner.", + "must_contain": [ + "shadowmount answers, version 1.7-beta5fix1", + "NOTIFY: installed game PPSA99171", + "launch PPSA99171: 5 argument(s) from forward.txt", + "forwarder: /app0/content/snes/ with /app0/cores/snes9x_libretro.so, closing after it", + "daemon: forwarder PPSA99170: removed", + "forwarder PPSA99171: installed again with its new name or icon", + "titleName: Forwarder renamed", + "33 systems in the picker, each with its icon", + "Tile created. It appears on the home screen once RetroArch closes.", + "The tile leaves the home screen once RetroArch closes.", + "daemon: forwarder PPSA99171: removed", + "[API] uninstall requested: title=PPSA99171", + "icon0.png: 71761 bytes, 512x512, the tile's own: True", + "forwarder: /app0/content/genesis/ with /app0/cores/genesis_plus_gx_libretro.so, closing after it" + ], + "must_not_contain": [], + "human_check": "The owner opens a tile on the home screen while RetroArch is open: the console asks to close RetroArch first, then the game starts. Not checked here: the control payload cannot press the home screen." +}