Files
pokemon_pinball_wiki/applications-and-services.md
2026-07-06 20:06:06 -05:00

142 lines
5.4 KiB
Markdown

# Applications and Services
## Game Entry Points
Top-level symlinks:
| Path | Target |
| --- | --- |
| `/games/game` | `pokemon_pro/game` |
| `/games/conagent` | `pokemon_pro/conagent` |
| `/games/data` | `pokemon_pro/data` |
| `/games/spike3` | `pokemon_pro/spike3` |
Main executables:
| Path | Type | Size |
| --- | --- | ---: |
| `/games/pokemon_pro/game` | Stripped AArch64 PIE, dynamically linked | 52,829,400 |
| `/games/pokemon_pro/conagent` | Stripped AArch64 PIE, dynamically linked | 272,432 |
| `/games/pokemon_pro/spike3/bin/dprint` | Stripped AArch64 PIE, dynamically linked | see artifact index |
| `/games/pokemon_pro/spike3/bin/boot_display` | Stripped AArch64 PIE, dynamically linked | see artifact index |
| `/games/pokemon_pro/spike3/bin/bttest` | Stripped AArch64 PIE, dynamically linked | see artifact index |
| `/games/pokemon_pro/spike3/spike_menu/game` | Stripped AArch64 PIE, dynamically linked | 4,645,784 |
| `/games/pokemon_pro/spike3/netbridge/netbridge.elf` | 32-bit ARM statically linked ELF with debug info, not stripped | see artifact index |
Large payloads:
- `/games/pokemon_pro/image.bin`: 1,154,884,359 bytes.
- `/games/pokemon_pro/assets/godot/main.pck`: 256,326,416 bytes.
- `/games/pokemon_pro/spike3/spike_menu/image.bin`: 14,959,521 bytes.
Asset extraction status:
- `/games/pokemon_pro/assets/godot/main.pck` has been statically extracted into workspace-local `assets/`; see `godot-and-radium-assets.md`.
- `/games/pokemon_pro/image.bin` did not expose standard media signatures in first-pass static scans and remains a Radium/runtime image reverse-engineering target.
## Game Data
Release-note files:
- `/games/pokemon_pro/data/pro_release_notes.txt`
- `/games/pokemon_pro/data/premium_release_notes.txt`
Version hints:
- `/games/spk/index/pokemon_pro.sidx -> pokemon_pro-0_83_0.sidx`
- `/games/pokemon_pro/data/*_release_notes.txt` match the Pokemon Pro/Premium title.
Bundled node firmware images:
- `coil4node-LPC1112_101-1_33_0.hex`
- `pinnode-LPC1112_101-1_33_0.hex`
- `hdmi_ws2812node-LPC1313-1_33_0.hex`
- `tmc5041node-LPC1313-1_33_0.hex`
- `pinnode-LPC1313-1_33_0.hex`
- `lcdnode-LPC1113_302-1_33_0.hex`
- `coil4_lednode-LPC1313-1_33_0.hex`
- `coil4node-LPC1313-1_33_0.hex`
- `magsensornode-LPC812-1_33_0.hex`
- `hdminode-LPC1313-1_33_0.hex`
- `ws2812pinnode-LPC1313-1_33_0.hex`
- `node4-LPC1124_303-1_33_0.hex`
- `node4-LPC812-1_33_0.hex`
- `ws2812node-LPC1313-1_33_0.hex`
- `pinnode-LPC1112_201-1_33_0.hex`
- `coil4node-LPC1112_201-1_33_0.hex`
- `tmc2590node-LPC1313-1_33_0.hex`
These are likely firmware payloads for distributed SPIKE node boards.
## Monitors
`/etc/init.d/S95game` starts these in the background when `/games/game` exists:
- `/etc/init.d/reboot_monitor`
- `/etc/init.d/conagent_monitor`
- `/etc/init.d/game_monitor`
- `/etc/init.d/update`
`game_monitor`:
- Starts `/games/game`.
- Interprets game exit codes:
- `0`: restart requested.
- `1`: reboot requested.
- `2`: exit requested, development-only control-C path.
- `3`: power loss.
- `4`: fatal error.
- `5`: dispatch timeout.
- `6`: deep sleep.
- `>=128`: uncaught signal, encoded as `exit_reason - 128`.
- On power loss or deep sleep, syncs filesystems, remounts `/data` and `/connectivity` read-only, and hangs waiting for power removal.
- On reboot request, syncs, remounts persistent filesystems read-only, calls `/sbin/reboot -f`, and hangs.
- On repeated fatal/non-normal exits, tracks restart sentinels under `/tmp/game_restarts`.
- After more than 4 restart sentinels, clears selected `/connectivity` caches. If cache was already cleared and restart pressure continues, it reboots.
`conagent_monitor`:
- Loops forever.
- Starts `/games/conagent`.
- Sleeps one second and restarts it whenever it exits.
`reboot_monitor`:
- Tracks machine reboots under `/connectivity/machine_reboots`.
- If more than 9 reboot markers exist before the system reaches 5 minutes uptime, it clears selected `/connectivity` caches.
- Creates a reboot marker, sleeps 300 seconds, then clears reboot markers.
## Display Utilities
`/etc/init.d/shared` resolves:
- `BOOT_DISPLAY=/games/spike3/bin/boot_display`, fallback `/usr/local/spike/boot_display`.
- `DPRINT=/games/spike3/bin/dprint`, fallback `/usr/local/spike/dprint`.
`boot_display` is launched early by `S12lvds_panel`; `dprint` is used by startup/update scripts to print messages to the boot display.
## Bluetooth Support Scripts
Bundled scripts under `/games/pokemon_pro/spike3/scripts`:
- `find_trusted_devices.sh`: walks `/var/lib/bluetooth` and prints device directories whose `info` contains `Trusted=true`.
- `find_untrusted_devices.sh`: walks `/var/lib/bluetooth` and prints devices missing that trusted marker.
- `copy_newest_corefile_to_usb.sh`: archives the newest core file from `/connectivity/dump/cores` into an encrypted 7z file and copies it to `/media` after mounting `/dev/sda1` or `/dev/sda`.
Sensitive note: `copy_newest_corefile_to_usb.sh` reads a passphrase from `/games/spike3/scripts/corefile_passphrase.txt`; the value is not copied into this wiki.
## Netbridge / Debug Hardware
`/games/pokemon_pro/spike3/netbridge` contains:
- `netbridge.elf`: 32-bit ARM static executable with debug info, not stripped.
- `rp2040.cfg`: OpenOCD RP2040 target config.
- `spike3-swd.cfg`: OpenOCD config using `bcm2835gpio`.
`spike3-swd.cfg` maps:
- SWCLK to GPIO 11.
- SWDIO to GPIO 10.
This is a strong next target for understanding how the Pi interfaces with an RP2040 or other debug bridge in the machine.