PortareOS

A ROCKNIX fork optimized for the Retroid Pocket Nova.



What this is

PortareOS is a personal fork of ROCKNIX, which is itself a fork of JELOS. Nearly everything here is their work. This fork adds a thin layer of tuning for exactly one handheld: the Retroid Pocket Nova.

It is not a general-purpose distribution and does not want to be one. Only the SM8550 platform is built. Every other device is left untouched in the tree so the useful parts can go back upstream.


Why it exists

In ROCKNIX the Nova shares its device tree and all of its emulator configuration with the Retroid Pocket 6. That is sensible from upstream's side — they are the same SoC — but the two handhelds do not have the same screen:

Panel, by device
Retroid Pocket 61080 × 1920 portrait → 1920 × 1080 in use, 16:9
Retroid Pocket Nova1280 × 960 landscape, 4:3, 120 Hz

So a pile of defaults written for a 1080p 16:9 display land unexamined on a 4:3 one. Emulators render at 1920×1080 and get squeezed onto a screen that has 41% fewer pixels. That is the gap this fork closes.

There is a happier consequence too. 960 is exactly four times 240p, and twice 480p — and almost every retro system is one or the other. Integer scaling on this panel is pixel-perfect and still fills the screen, which is normally a trade-off you have to pick between.


What is different

Display geometry
Render resolutions corrected from 1920×1080 to 1280×960 for Supermodel, Flycast and melonDS. Integer scaling enabled by default for the twenty systems whose native height divides cleanly into 960 — PS1, N64, NES, Mega Drive, PC Engine, Saturn, Dreamcast and friends.
120 Hz panel
The panel driver exposed a synthetic 60 Hz mode that the init sequence could pick by mistake, programming the panel for one refresh rate while the display controller drove another. Only 120 Hz is exposed now.
Deep suspend
Upstream gates deep suspend to devices where it has been validated, and the Nova was not on the list. It is here. Close the lid on a game, come back to it three seconds later.
microSD at full speed
The stock driver has an SDR104 tuning bug on this SoC, so the vendor device tree caps the card slot to legacy High Speed. Swapping in the downstream controller driver should take it from roughly 13 MB/s to 85 MB/s.
Input latency
Ongoing. The emulator frame queue is down from two buffered frames to zero; the gamepad MCU handshake no longer loses the controller after an unlucky resume. The remaining work needs a high-speed camera and a stopwatch, not a text editor.

Hardware

Retroid Pocket Nova
SoCQualcomm QCS8550 — Snapdragon 8 Gen 2
CPU1 × Cortex-X3, 4 × A710/A715, 3 × A510
GPUAdreno 740, Freedreno / Mesa
Display1280 × 960, 4:3, 120 Hz
Gamepadrsinput MCU over UART
KernelLinux 7.2.2

Getting it

There are no builds to download. If you want one, you build it:

git clone https://github.com/portare-ch/distribution
cd distribution
make docker-SM8550

Images land in target/. The build wants a container runtime, roughly 100 GB of disk and several hours the first time through.

One warning

PortareOS uses its own boot partition label. That means the first image must be written to the card as a fresh install — an in-place update on top of an existing ROCKNIX installation will not find its boot partition. Updates between PortareOS builds work normally.


Credits

This project is a thin layer on a very deep stack. Thanks to ROCKNIX, JELOS, LibreELEC, CoreELEC, and everyone whose emulators and drivers do the actual work.

Several of the SM8550 kernel patches carried here come from pocknix-os by shuuri-labs — the microSD work (originally Alex Ling, via Armbian), the gamepad MCU handshake and the panel refresh-rate fix among them. Authorship is preserved in every patch header.

For the upstream project, its community and its documentation, go to rocknix.org. Please do not take PortareOS problems to the ROCKNIX maintainers — they are mine.