ARCH R

PortMaster

Run PC ports natively on the R36S

PortMaster is a launcher / port repository that runs native PC binaries (Half-Life, Diablo II, Doom 3, Quake, Stardew Valley, Vvvvvv, …) directly on the handheld using box86 / box64 translation when needed. ArchR ships PortMaster pre-installed and pre-wired.


What's included by default

PortMaster GUI            /storage/roms/ports/PortMaster/
gptokeyb                  joypad → keyboard event translator
oga_controls              extra device-specific input glue
control.txt               default key map
SDL2 + lib32 / box86      32-bit x86 binaries via box86
SDL2 + box64              64-bit x86_64 binaries via box64
Python 3 + lzma           used by the GUI and many ports

Verified at boot:

python3 -c 'import lzma'   # works
ls -la /dev/uinput          # crw-rw-rw- (udev rule 91-uinput.rules)

Run a port

Open PortMaster

In EmulationStation, scroll to the Ports system. The first entry is "PortMaster" — open it. The GUI launches.

Browse / install

Press B on a port to install. Files land in /storage/roms/ports/<port-name>/. PortMaster downloads any data files (ROM-style assets aren't included — copy wad/mpq/etc. to the port folder per its README).

Quit PortMaster GUI

MODE + B returns to ES. Installed ports appear as launchers (.sh files) in the Ports system list.

Play a port

Just like a ROM — select the launcher, press A. ArchR pauses background services (Syncthing, Tailscale, ZeroTier) for the duration, switches the CPU governor to performance, and pins the GPU at 650 MHz.

Exit

Each port has its own hotkey, usually MODE + START + SELECT. Some use MODE + START alone. The combo is documented in the port's README inside /storage/roms/ports/<port>/README.md.


Bring-your-own-data ports

Some ports ship only the engine. They expect you to drop the original game data into the port's folder. Examples:

PortWhat to drop
HalfLifevalve/ and cstrike/ from your Steam install
Diablo II*.mpq files from a legitimate copy
Doom 3pak*.pk4 from the retail install
Quakeid1/pak0.pak and pak1.pak
Stardew ValleyContent/, StardewValley.dll, etc. from your Steam Linux install
TombRaiderdata/ from the original CD
DevilutionX (Diablo I)diabdat.mpq

PortMaster shows a per-port checklist of missing files in the GUI before letting you launch.


Network play

PortMaster ports that support multiplayer (Quake, Half-Life DM, etc.) can use:

  • Tailscale or ZeroTier for "internet LAN" play with friends — toggle on in ES → System Settings → Network.
  • Local LAN broadcast — works out of the box; both devices need to be on the same WiFi.

ArchR keeps all VPN services paused until you launch a game that needs them, then resumes when you exit.


Performance expectations

Cortex-A35 + Mali-G31 is a budget SoC. Realistic baseline:

TierExamplesExpectation
Native ARM, lightweightVvvvvv, Stardew Valley, Cute Fame, OpenRAfull speed, full battery life
box86 (32-bit x86)Diablo II, Half-Life, Quake, Doom 325-60 fps depending on settings
box64 (64-bit x86_64)Newer indie titles (Hollow Knight class)playable but heavy — needs CPU Overclock on
Heavy 3D / RTDOOM Eternal, modern AAAnot viable

Toggle Enable CPU Overclock in ES (lifts cap from 1.4 → 1.5 GHz) for box86/64 ports that struggle.


Troubleshooting

Port hangs at black screen. Joypad permissions probably wrong. Check ls -la /dev/uinput returns mode 666. If not, the udev rule didn't apply — sudo chmod 666 /dev/uinput for now and report a bug.

gptokeyb: Permission denied. Same as above.

Port asks for missing data files. Drop them in /storage/roms/ports/<port>/ per the port's README. PortMaster's GUI lists missing files before launch.

box86: assertion failure. The port was built against a newer libstdc++ than what ArchR ships. Wait for an update or report it on the PortMaster Discord.

PortMaster GUI itself fails to start. Run start_portmaster.sh over SSH and read the trace. The script is now idempotent (rm -rf + guards) so re-launching is always safe.


Where things live

/storage/roms/ports/
├── PortMaster/             GUI + scripts (managed)
│   ├── PortMaster.sh
│   ├── control.txt         default joypad → key map
│   ├── gptokeyb            input translator
│   └── ...
├── DiabloII.sh             generated launcher per port
├── DiabloII/               actual port files
├── HalfLife.sh
├── HalfLife/
└── ...

Removing a port: delete the .sh and the matching folder, then ES → Game Settings → Rescan ROMs.

On this page