Skip to content

romi v0.4.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 17:40
· 97 commits to main since this release

3D comes to playing games inside romi. Dreamcast, NAOMI, N64 and PlayStation games now play in the middle of the launcher, drawn sharp at about the size they're shown. Games also run more smoothly in the panel than before.

3D systems in romi

Cores that draw with the GPU now work in romi: Flycast (Dreamcast, NAOMI), Mupen64Plus-Next (N64) and Beetle PSX HW (PlayStation). romi gives them an OpenGL context with no window, on the GPU your screen is plugged into, and reads each frame back to show it like any other. This is new, and so far it has only been tried on AMD with Mesa; reports from other GPUs are welcome.

  • The same settings as RetroArch. Cores get the core options RetroArch has for them and for the game, so a game plays the same in both.
  • Controllers. Sticks and analog triggers work, and every port has a pad plugged in (Flycast plugs in no memory card without one). A game that's played with the stick no longer has the stick also working as the d-pad.
  • Sharp 3D. 3D is drawn at about the size the panel shows it, up to 960 lines (1280×960), rather than at 640×480 scaled up. Scanlines and the CRT mask stay at the console's 240 lines, as on a TV. "sharp_3d": false, or Options → Sharp 3D, draws at RetroArch's setting instead, which is left as it is.
  • Black borders cropped. Most N64 games draw inside a black border a CRT's edges hid. Once a game has drawn for a couple of seconds, romi shows only the part it draws in. "crop_borders", or Options → Crop borders, turns it off.
  • A smooth start. Cores run their first frames, muted, behind the launch animation, so Flycast's slow first frames (it compiles its shaders) no longer stutter the game as it comes on.

Vulkan renderers (ParaLLEl-RDP, and Flycast's and Beetle's Vulkan modes) aren't supported yet; a game set to use one in RetroArch won't start in romi.

Smoother play

  • Frames go to the terminal as soon as they're made, and are handed over evenly spaced, rather than whenever the launcher's loop came round. They used to reach the terminal 12 to 22 ms apart; now it's 15.5 to 18.5, as close to 60 fps as the terminal allows.
  • Frames drawn with the GPU are read back without waiting for it. With the game big on a 4K screen, waiting for the GPU took most of a frame, and the game fell behind its sound. 3D games now hold 60 fps there, at the cost of one frame's delay.
  • ROMI_FRAME_LOG=frames.csv records when each frame was made, sent and read by the terminal, and how often the sound ran dry, with a summary. It's for finding out why a game plays unevenly. ROMI_CORE_LOG keeps what a core says.

Fixes

  • Stopping a game played with bsnes-hd crashed romi.
  • Cores that print to the terminal no longer scroll the launcher.

Install

Prebuilt binaries for x86_64 and aarch64 Linux are below. They run on glibc 2.35 and newer (Ubuntu 22.04, Debian 12, Fedora 36 and later). They need libudev and ALSA's libasound, which nearly every desktop already has, and libEGL for 3D games.

tar -xzf romi-v0.4.0-x86_64-linux.tar.gz
install -Dm755 romi-v0.4.0-x86_64-linux/romi ~/.local/bin/romi

On Arch, build the package with makepkg -si in packaging/arch. To build from source, see the README.

Full changelog: v0.3.0...v0.4.0