This repository is the C++/ps2build transition of RiptOPL. These guides include the production project's full documentation; feature and hardware parity are still being validated. The release targets are Korium, RetroAchievements and IncebtIon, all on ps2build. Check the migration ledger before treating an imported production feature as verified here.
Neutrino Core
RiptOPL may remain inside APPS/. Its installation folder is independent of Neutrino. Automatic card lookup expects the complete Neutrino installation at mc0:/neutrino/ or mc1:/neutrino/. If Neutrino is nested in another app folder, set its full ELF path explicitly; keep its configuration and modules alongside it.
RiptOPL can hand any individual game to an external Neutrino ELF instead of OPL's built-in EE core. The choice is made per game, leaving other titles on the default OPL core untouched. This is useful for titles that boot more reliably under Neutrino, or when you want fine-grained control over Neutrino's own launch flags.
Neutrino is created by rickgaiser — a
"Small, Fast and Modular PS2 Device Emulator". The
release package bundles the official latest build as a ready-to-use neutrino/ folder
under its AFL-3.0 licence; see Credits for the full
attribution. Report launching problems to us and genuine Neutrino bugs upstream.
1. Install Neutrino
The release package includes a complete neutrino/ folder: copy the whole folder
to a location RiptOPL can keep available through the handoff. On ordinary non-MMCE setups,
mc0:/neutrino/ or mc1:/neutrino/ is supported. A memory card is the last
automatic location OPL looks, not the first.
mmceN: rather than
relying on the same slot's mcN: view: use mmceN:/neutrino/, or put
neutrino/ under the configured MMCE Prefix Path. The GameID command switches the
emulated memory-card view. An mcN:-hosted Neutrino would be displaced by that switch,
so RiptOPL detects the collision and skips the GameID switch for that launch to keep the
loader readable. An mmceN: install is not affected, so the per-game card switch can
still occur. The automatic lookup deliberately probes the active game device before the memory cards.
The lookup order is fixed:
| Priority | Where OPL looks |
|---|---|
| 1 | Neutrino Path, when it is set (Settings → Game Launching → Neutrino Defaults) — see §3 |
| 2 | The active game's own device: <games prefix>/neutrino/, then <device root>/neutrino/. For an APA HDD game this is the OPL data home already mounted on pfs0: (+OPL or __common/OPL) |
| 3 | mc0: / mc1:: NEUTRINO/neutrino.elf and its lowercase / NEUTRINO.ELF variants |
A Neutrino Path that is set but unavailable does not strand the launch: the lookup carries on to the game device and the memory cards. If none of them holds a complete install when you launch a game set to the Neutrino core, OPL shows a warning and falls back to the <OPL> core for that launch only.
hdd0:/+OPL/neutrino/ or
hdd0:/__common/OPL/neutrino/ and you use it for USB, MMCE or network games, set
Neutrino Path to hdd:/neutrino/neutrino.elf. HDD games still find it through the
game-device tier.
The old Neutrino Device picker is gone. If it was set to Memory Card or HDD (APA), that choice now appears as the matching Neutrino Path, and until you edit it RiptOPL also tries the other folder/file spellings the picker accepted, because memory cards and APA partitions are case-sensitive. The other old choices load as <not set>.
Network boot exception
The UDPBD / UDPFS feature ships its own bundled Neutrino — a drag-and-drop neutrino/ folder (neutrino.elf plus config/ and modules/) in the release zip, pre-populated with the UDPFS config. Per-game Neutrino use still needs you to supply neutrino.elf at the paths above.
2. Pick the core per game
Open Game Settings
Highlight a game, press Triangle and choose Game Settings.
Set Loader Core
Change Loader Core to Neutrino. The other option is <OPL> (the built-in core; default for every game).
Save
Save. The selection is written as $CoreLoader in that game's .cfg file.
Where Neutrino works
| Game source | Neutrino? |
|---|---|
| USB / MX4SIO | Yes |
| iLink / IEEE 1394 (FAT PS2 models only) | Supported and wired; the post-2692 build adds quick boot for RiptOPL's inherited-stack handoff and is pending hardware retest |
| Internal ATA (BDM block device) | Yes |
| Internal HDD (APA partition → HDL) | Yes |
| MMCE (SD2PSX / MemCard PRO2) | Yes |
| UDPBD / UDPFS (network block device) | Yes — and required; no OPL core backend exists for these (see Network Boot). Both work on a real PS2; the UDPBD test (2026-09-26) used every Neutrino setting at its default. |
| SMB / Ethernet | No — falls back to <OPL> |
USB Extreme split images (.ul) | No — falls back to <OPL> |
Compressed ISO (.zso) | No — falls back to <OPL> |
-bsd=ilink token but did not add -qb. RiptOPL's bridge deliberately
preserves the mounted iLink environment, while Neutrino documents -qb as direct entry into
its load environment, so that omission is a source-confirmed handoff mismatch consistent with the
failure. The post-2692 correction below still needs a hardware pass to prove whether it was the
complete cause; this page does not call it a pass yet.
-qb retest is therefore necessary but may not be sufficient — some iLink
enclosures are expected to fail upstream as well.
Unsupported sources fall back to the <OPL> core automatically with an on-screen warning. No manual intervention is needed — OPL detects the format and adjusts.
*.VCD, ember.elf for Ember titles — never OPL's core and never Neutrino. The Loader Core selector is locked and has no effect for PS1 games. See PS1 Games (VCD).
3. Neutrino Path
Settings → Game Launching → Neutrino Defaults → Neutrino Path is a full-path text field. It shows <not set> until you enter a path, which keeps the automatic lookup. The row is only a preview: selecting it opens the full-size editor, which takes the whole path and scrolls to keep the cursor in view. It replaced the old Neutrino Device picker.
The path may be on a different device from the game. RiptOPL keeps both the game's device and
Neutrino's device mounted through the handoff, so it can, for example, load neutrino.elf
from mmce0: and launch an APA HDD game. These spellings are accepted:
| Meaning | Accepted examples |
|---|---|
| USB | usb:/..., usb0:/... |
| Internal exFAT HDD | ata:/..., ata0:/... |
| MX4SIO | mx4:/..., mx4sio:/..., massX:/... |
| iLink | ilink:/... |
| A mounted BDM slot | mass:/... (every mounted slot), mass0:/... (that one slot) |
| MMCE | mmce:/..., mmce0:/..., mmce1:/... |
| Memory card | mc:/..., mc?:/..., mc0:/..., mc1:/... |
| SMB share | smb:/... |
| UDPFS files | udpfs:/... |
| UDPFS / UDPBD disk | udpfsd:/..., udpfsbd:/..., udpbd:/... |
| APA HDD OPL data home | hdd:/..., hdd0:/... |
| Mounted PFS partition | pfs:/..., pfs0:/... |
- BDM devices are matched against what is mounted now. A typed alias (
usb:,ata:,mx4sio:,ilink:) searches every mounted device of that family, identified by its driver. Only when none is mounted does RiptOPL load that one driver and wait briefly: 2 s, or 5 s for the internal HDD.mass0:means exactly that slot and loads nothing; slot numbers follow the order devices mounted in. - APA:
hdd:/resolves only inside the OPL data home that is already mounted. It never mounts another partition, and a nonzerohddN:is refused. - Network paths start their network stack when no other network protocol is running. The PS2 has one network adapter, so the other protocols stay unavailable until you reboot.
- HTTP URLs cannot be used. HTTP games are streamed by the in-game driver, and there is no
http:filesystem to loadneutrino.elffrom.
The game-device probe accepts the normal NEUTRINO/neutrino.elf /
neutrino/neutrino.elf case variants. For MMCE this means, for example,
mmce0:/OPL/neutrino/neutrino.elf when OPL is the Prefix Path, then
mmce0:/neutrino/neutrino.elf at the bare root.
4. Launch arguments
OPL always builds the mandatory Neutrino arguments automatically from the game and its settings — most of which you never type yourself (-dbc, -logo and -gsm are the three exceptions: forward one yourself and OPL drops its own copy — see the callout at the end of this section, and §5):
| Auto-emitted argument | When emitted |
|---|---|
-bsd=<usb|ilink|mx4sio|ata|mmce|udpbd|udpfsbd|udpfs> | Always (the storage backend) |
-bsdfs=hdl | Internal HDD (APA) only |
-bsdfs=<exfat|hdl|bd> | Only when the game's Neutrino Filesystem is set off Auto, or when you type -bsdfs= into the arguments — a typed one wins over the picker (per-game arguments over global ones, the last one wins, nothing after --b). Block devices only, never MMCE/UDPFS. hdl/bd also reshape -dvd to hdl:/bdfs:, and a typed -dvd= wins if it is forwarded (a long argument list can drop it). bd names the drive as <driver><N>p0 (a second USB stick is usb1p0) from the device number the drive reported; if it never reported one, the launch is refused while the menu is still up rather than guessed as device 0 — whether bd was picked or typed, even beside a typed -dvd=. ATA is exempt (one device, always 0). |
-dvd=<path> / -dvd=hdl:<partition> | Always (the game image or partition) |
-elf=cdrom0:\<startup>;1 | When Auto Boot ELF (-elf) is on (the default, Settings → Game Launching → Neutrino Defaults) and you have not forwarded an -elf= yourself. Neutrino uses it to find a per-title config. |
-qb | USB, iLink, UDPBD and both UDPFS legs — the same set NHDDL uses (every mode except HDL). RiptOPL's no-reset bridge preserves the mounted BDM/UDPFS environment; quick boot enters Neutrino's load environment without resetting that inherited stack away. Without it, a UDPBD launch reconnected on its own after the reset, read the image's partition table and never reached the game. An active user-supplied copy is never duplicated. |
-gc=<modes> | Only when OPL compat modes are set for the game |
-dbc | Only when Debug Colors is enabled |
-logo | Only when PS2 Logo is enabled |
-gsm=<mode> | Only when a Neutrino Video mode resolves — the per-game picker, or the global Settings → Game Launching → Neutrino Defaults → Neutrino Video default when the per-game picker is “Default” (see §5) |
-mc0=<path> / -mc1=<path> | Only when a per-game VMC is configured for that slot |
-cfg=riptopl-cheats | Only when cheats are on for the game and at least one code is enabled. The codes are written to riptopl-cheats.toml first (see Cheats). It goes after your own options; Neutrino keeps only the last -cfg, so a -cfg= you forward still loads, through that file's depends. |
Global and per-game extra args
On top of the auto-built arguments you can pass extra Neutrino flags in two places. Both sets are appended after the auto-built arguments; global first, then per-game, so a game can extend or override the global defaults.
- Global (every Neutrino launch): Settings → Game Launching → Neutrino Defaults → Neutrino Advanced Arguments — config key
neutrino_argsinsettings_riptopl.cfg. - Per game (one title only): Triangle → Game Settings → Neutrino Launch Args — config key
$NeutrinoArgsin the game's.cfg.
Arguments are space-separated. Example:
-mt=dvd -gsm=1
neutrino_args (global, in settings_riptopl.cfg) or $NeutrinoArgs (per game, in the game's .cfg) directly — OPL reads and forwards the full string at launch. The editor preserves every field you do not touch at its full stored length, so opening and closing the dialog never truncates a hand-edited value.
Structured Neutrino Args sub-screen
Both the global entry (Settings → Game Launching → Neutrino Defaults → Neutrino Advanced Arguments) and the per-game field (Triangle → Game Settings → Neutrino Launch Args) are buttons that open the same companion sub-screen. It breaks the argument string into named fields — Quick Boot (-qb), Debug Colors (-dbc), PS2 Logo (-logo), Working Dir (-cwd), Config (-cfg), Boot ELF (-elf), ATA0 Image (-ata0), ATA0 ID (-ata0id), ATA1 Image (-ata1), plus a free-form Extra field — reassembles them in a valid canonical order with --b kept last, and writes the result back as a single flat string: the global into neutrino_args, the per-game value into $NeutrinoArgs (each game edited independently).
| Field | Argument emitted | Notes |
|---|---|---|
| Quick Boot (-qb) | -qb | Enter Neutrino's load environment directly; emitted first if enabled and supplied automatically for USB, iLink, UDPBD and UDPFS |
| Debug Colors (-dbc) | -dbc | Neutrino's debug colour output; forwarding it here suppresses OPL's own auto-emitted copy |
| PS2 Logo (-logo) | -logo | Show the PS2 logo; forwarding it here suppresses OPL's own auto-emitted copy |
| Working Dir (-cwd) | -cwd=<path> | Override Neutrino's working directory |
| Config (-cfg) | -cfg=<path> | Point Neutrino at an alternate config file |
| Boot ELF (-elf) | -elf=<path> | Launch a different ELF instead of the disc boot ELF |
| ATA0 Image (-ata0) | -ata0=<path> | Override the primary ATA image path |
| ATA0 ID | -ata0id=<id> | Override the ATA0 device ID string |
| ATA1 Image (-ata1) | -ata1=<path> | Override the secondary ATA image path |
| Extra | (verbatim) | Any other flags, including --b and everything after it (passed to the booted ELF); placed last |
The canonical reassembly order is: -qb → -dbc → -logo → -cwd → -cfg → -elf → -ata0 → -ata0id → -ata1 → Extra. The Extra slot also collects any flags the parser does not recognise, preserving them verbatim. --b and everything following it is always kept at the tail (those tokens are arguments forwarded to the booted ELF, not to Neutrino itself).
-bsd, -dvd, -gc, and -mc0/-mc1 are always constructed from the game settings by OPL. Do not enter them in the Extra field or the Launch Args text box — doing so produces a duplicate that Neutrino may reject or misinterpret. Use the dedicated UI controls (compat modes, VMC slots, etc.) to set those values instead.
-dbc, -logo, and -gsm are the exceptions: they have dedicated controls (the Debug Colors and PS2 Logo toggles in the args sub-screen, and the Neutrino Video picker), and if you do forward one of them yourself OPL suppresses its own auto-emitted copy so exactly one reaches Neutrino. A copy disabled with a leading $ does not count as forwarded, so OPL still emits its own in that case.
See the exact arguments: Show Launch Arguments
Settings → Game Launching → Neutrino Defaults → Show Launch Arguments (off by default; config key neutrino_show_args) shows the complete argument list just before a Neutrino launch hands over. It is the list the launch passes, not a reconstruction: the auto-built arguments, then yours. Entries are separated by spaces, and a path with spaces in it is shown in quotes so it still reads as one argument.
- Accept launches. Back stays in the menu.
- A list too long for the hand-over (14 entries or 256 bytes) is refused before the preview, as it always is.
- Auto Loading never asks: there is nobody at the menu to answer.
In the arguments sub-screen, a flag typed into Extra that has its own row — -logo, say — moves into that row when you save. It is still sent; it just shows in its row instead of in Extra.
5. Per-game Neutrino Video (-gsm)
When a game's Loader Core is set to Neutrino, a Neutrino Video picker appears in Game Settings. This is the Neutrino-side stand-in for the OPL GSM panel (which is an OPL-core-only feature and is greyed under Neutrino). The picker maps to Neutrino's -gsm flag:
| Picker value | Neutrino flag emitted |
|---|---|
| Off (default) | (nothing emitted) |
| 240p | -gsm=fp1 |
| 480p | -gsm=fp2 |
| 1080i x1 | -gsm=1080ix1 |
| 1080i x2 | -gsm=1080ix2 |
| 1080i x3 | -gsm=1080ix3 |
| Default | follows the global Settings → Game Launching → Neutrino Defaults → Neutrino Video value (no per-game key saved) |
Global default: the same picker also exists in Settings (with its GSM-comp half). Games whose per-game picker is “Default” follow it — so one global change forces e.g. -gsm=1080ix3 for every Neutrino game. An explicit per-game value — including Off — overrides the global.
-gsm=1080ix3) is the community workaround for progressive-looking output —
the same effect previously reached by launching Neutrino from PS2BBLE/OSDmenu with
-gsm=1080ix3. Set it per game, or globally and leave games on “Default”. True 1080p is not
one of Neutrino's -gsm modes — its option remains 1080i. RiptOPL's native
OPL core separately provides a hardware-confirmed forced-progressive 1080p GSM mode in every
standard loader; it is guarded by a three-step confirmation, with Triangle + Cross at console
boot changing only the menu to 480p (Triangle + Circle forces the interlaced Auto mode instead). A game video override must be changed in game settings; the display/connection must accept 480p for menu recovery.The picker is the default source for -gsm. If you manually type -gsm=<value> into the Neutrino Launch Args field, that value wins — OPL emits only one -gsm argument, because Neutrino aborts on a duplicate or malformed value.
Mode 7 — fix IOP buffer overrun (-gc=7)
The compat modes list contains a Neutrino-only entry: Mode 7. This maps to -gc=7 and targets a small class of games that overrun an IOP buffer during loading. It is greyed out when the Loader Core is set to <OPL> (the inverse of Modes 4 and 6, which are greyed under Neutrino). Enable it in Game Settings when the game's core is Neutrino.
6. Core-aware per-game settings
The per-game settings screen adapts to the Loader Core chosen for each title, so you only see controls the selected core actually honors.
When Loader Core = Neutrino
- Neutrino Launch Args and Neutrino Video picker are active and editable.
- Compat Modes 4 (Skip Videos) and 6 (Disable IGR) are greyed — these are OPL ee-core features with no Neutrino equivalent. OPL never forwards them.
- Mode 7 is available (Neutrino-only; see above).
- The Configure GSM, Controller Emulation and OSD Settings screens show a "not used with the Neutrino core" message instead of dead controls. Use the Neutrino Video picker for video forcing.
- Cheat Settings works on both cores; only its PS2RD Cheat Image row is greyed, because Neutrino has no cheat-image support. See Cheats with the Neutrino core.
- VMC and the rest of Game Settings remain fully available — VMC is passed to Neutrino as
-mc0/-mc1arguments on BDM devices (USB/iLink/MX4SIO/exFAT HDD/UDPBD), MMCE and UDPFS. The one exception is APA HDD: Neutrino has no APA/pfs backing store to open the.binfrom, so the game boots without the VMC and OPL shows a warning (the OPL core honors the same card normally). See VMC with the Neutrino core. - UDPBD / UDPFS games have no OPL core backend, so the Loader Core selector is locked to Neutrino for them and cannot be changed.
When Loader Core = <OPL>
The screen is unchanged from classic OPL. The Neutrino Launch Args field and Neutrino Video picker are greyed (they are never read on the OPL path). Mode 7 is greyed. Modes 4 and 6 are available as usual.
What does Neutrino actually honor from OPL's per-game settings?
Neutrino honors: the storage backend + image path (-bsd / -dvd, automatic), the compat mode subset that maps to -gc (Modes 1/2/3/5/7), VMC via -mc0/-mc1 (BDM/MMCE/UDPFS — not APA HDD), -logo (PS2 logo), -dbc (debug colors), the Neutrino Video picker (-gsm; per-game with a global default in Settings), the free-text Neutrino Launch Args field, and PS2RD cheats (handed over in riptopl-cheats.toml; see Cheats). It does not honor: the PS2RD Cheat Image (.img), OPL GSM (OPL patches the GS registers), IGR (OPL's in-game reset hook), PADEMU (OPL's USB gamepad emulation), or OSD Language — all are OPL-embedded-core features with no Neutrino equivalent.
7. Network boot — UDPBD / UDPFS
UDPBD and UDPFS stream games from a PC over the LAN as network block devices. The block protocols (UDPBD and UDPFS-Image) share the BDM block tab — labelled UDPBD Games or UDPFSBD Games depending on which one is active — while UDPFS-Files is a separate filesystem device with its own UDPFS Games tab. Only one can be active per boot anyway (a single NIC), so the two never appear side by side. Either list carries covers and per-game settings. Because there is no OPL cdvdman backend for network block devices, these games always and only launch via Neutrino — OPL forces the Neutrino core automatically, and if neutrino.elf is missing it warns and returns to the menu (there is no <OPL> fallback).
Full setup, server instructions, and the UDPBD vs UDPFS protocol comparison are on the Network Boot page.
When automatic installation lookup skips a folder
An ELF alone is not a complete Neutrino installation. The resolver checks for config/system.toml or the supported flat-layout system.toml alongside it. Both mc0:/neutrino/neutrino.elf and mc1:/neutrino/neutrino.elf are fallback candidates. Keep the bundled config/ and modules/ folders when copying the installation. A selected valid custom installation or complete installation on the game's device can take precedence over the memory-card fallback.
If manual selection works but automatic lookup fails, report the exact loader revision, active game device, custom path and folder tree. Do not conclude that slot 2 is unsupported from that symptom alone.