△◯✕□ RiptOPL DOCS
Downloads GitHub
ps2build C++ migration

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.

Network Boot (SMB / UDP)

UDPFS and UDPBD stream PS2 games from a PC and require Neutrino. Set Network Connectivity (Off / Manual / Auto) in Game Sources and choose the Protocol indented under it (the same row is on the Network page). The picker contains SMB / UDPFS / UDPBD / HTTP. SMB and HTTP use OPL's own core; HTTP has separate setup and limits.

Four rows, Off by default
The old Network Boot ON/OFF toggle and the separate Net Boot Protocol picker are retired placeholders. The network is now four rows. Network Connectivity, on Game Sources, is an Off / Manual / Auto start mode and defaults to Off (no network device). Protocol chooses SMB / UDPFS / UDPBD / HTTP; it sits indented under Network Connectivity on Game Sources and on the Network page, as one setting. SMB Version and Access, on the Network page, qualify the chosen protocol. Turning Connectivity Off keeps your protocol for when you turn it back on. UDPFS needs a static PS2 IP and a matching PC-side server. Pick a protocol only when you have those pieces in place. Local devices (USB / internal HDD / MMCE) are independent and browse alongside whichever network protocol you choose.

The Network rows

Game Sources holds Network Connectivity with Protocol indented under it. Network holds the same Protocol row, plus SMB Version and Access. The SMB version is editable for SMB. Access is Files/IMG for UDPFS, locked to Files for SMB/HTTP and IMG for UDPBD. The first protocol can start while the NIC is unused; switching an already loaded protocol requires restarting RiptOPL.

ChoiceWire protocolOn the PS2PC serverCore
Off — no network device (default) — —
SMB SMBv1 or SMB2 (Network → SMB Version; default SMBv1) a mounted file share PS2 Servers (recommended) / Samba OPL's own core (not Neutrino)
UDPFS UDPRDMA a games source served over UDP — a filesystem (udpfs:, loose ISOs) or a block device (massN:, disk image), set by Access below PS2 Servers (recommended, PC) / udpfs-server (Android) / udpfsd Neutrino only
UDPBD SUDPBDv2 a served disk image mounted as massN: PS2 Servers (recommended) / udpbd-server Neutrino only
HTTPHTTP byte rangesgames.csv catalog and ISO streamsServer meeting the client profileOPL core; hardware validation pending
POPS UDPFS and Ember network libraries
RiptOPL’s UDPFS/UDPBD pages currently enumerate Ember folders. POPSTARTER can read VCDs over UDPFS using Okeanos’s BDM-UDPFS Assault: USB is tried first, then the same VCD path is read from the server. Other POPS files remain on USB. See manual setup, supplied files and credits. This separate driver survives POPSTARTER’s IOP reset; automatic network VCD enumeration/equip remains a separate integration step. UDPBD is outside this driver’s scope.
Apply and retry without leaving the page
Confirming Network Settings applies the current values and begins a new connection attempt immediately. If a router or server was slow and the page reports a failed connection, press Select / Refresh on that network page to retry it; reopening settings or saving every setting is no longer required.

UDPFS is the one modern network-boot protocol (Rick Gaiser's UDPRDMA transport). It comes in two shapes, chosen with the Access row (see the comparison below): Files (the udpfs_ioman filesystem, loose ISOs) or IMG (the udpfs_bd block device, a served disk image). It has no DHCP client and needs a static PS2 IP; if neutrino.elf is missing at launch, OPL warns and returns to the menu.

UDPBD vs UDPFS — pick by your PC server
UDPBD (the older SUDPBDv2 udpbd.irx protocol) is a first-class fourth choice, not retired — it is kept because SUDPBDv2 is wire-incompatible with UDPRDMA (UDPBD speaks port 0xBDBD via udpbd-server; UDPFS speaks 0xF5F6 via udpfsd), so users still running the old udpbd-server must be able to keep selecting it. A config saved as UDPBD stays UDPBD — RiptOPL never silently migrates you off it. If you are setting up fresh, prefer UDPFS (it also serves loose ISOs and transparent .zso/.cso/.chd — see below).
UDPBD, UDPFS and SMB work on a real PS2
All three have launched games on real hardware from PS2 Servers. The UDPBD test (2026-09-26, Kingdom Hearts) used every Neutrino setting at its default — Neutrino Path blank (RiptOPL found neutrino.elf inside the served image) and no per-game filesystem or arguments. For an ordinary FAT/exFAT image with your games in DVD/, leave the game's Neutrino Filesystem on Auto: bd treats the whole block device as the disc, which only fits a server exporting a single raw ISO.

SMB Version — SMBv1 or SMB2

When Protocol = SMB, the SMB Version row selects the wire dialect: SMBv1 (the default) or SMB2. It applies to both halves of SMB — browsing the share from the menu and reading the game in-game. The row is greyed unless Protocol is SMB, and its value is preserved while greyed, so flipping away to UDPFS and back does not silently reset you to SMBv1.

SMB3 is not offered. It is reserved internally but deliberately absent from the picker, because it mandates packet signing that this tree does not implement.

Your server must speak the dialect you pick
An SMBv1-only server lists nothing under SMB2. If your share stops listing after you switch to SMB2, switch back to SMBv1 or point RiptOPL at a server that speaks SMB2.

Switching protocols with saved settings

UDPFS remembers its own Files/IMG choice independently of UDPBD, which always uses IMG. Switching to UDPBD and back should restore your previous UDPFS choice; a fresh configuration defaults to Files. Set Access on the Network page and make sure the PC server serves the matching folder or disk image.

Once a network driver has loaded, changing its protocol or UDPFS Access requires a restart. If restarting the application leaves the old connection active or the new protocol unavailable, fully restart the console and relaunch RiptOPL with the saved settings. Deleting your configuration is not the normal way to apply a protocol change. For a report, record both the old and new protocol, UDPFS Access, whether you restarted the application or console, and the server version.

Access — Files vs IMG

The Access row is on Settings → Network, alongside Protocol. Game Sources shows Connectivity and Protocol, but no Access row. Access is only free to change while Protocol = UDPFS — under SMB it is value-locked to Files and under UDPBD to IMG, greyed in both cases. Its two values are Files (default) and IMG. They are the same UDPFS protocol in two shapes: Files is the udpfs_ioman filesystem (udpfs:), IMG is the udpfs_bd block device (massN:).

Files (default)IMG
IOP driverudpfs_ioman.irx → udpfs: (filesystem)udpfs_bd.irx → massN: (block device)
PC servesa folder containing CD/ and DVD/ subfolders of ISOs (the standard OPL layout — OPL lists from <served>/CD + <served>/DVD, not the folder root)a FAT/exFAT disk image
Server commandudpfsd -fsroot <dir>udpfsd -bdpath <image>
Launchby name (-dvd=udpfs:<name>, stock -bsd=udpfs) — no massN:, no fragment listmounted like a USB drive (massN:, fragment-list launch)
Add a gamedrop it into the served CD/ or DVD/ foldermount the image, copy, unmount
Compressiontransparent .zso/.cso/.chd— (raw sectors only)

Both ride the same UDPRDMA transport and the same server — pcm720/udpfsd, a single prebuilt Go binary (no Python) that serves both; just pass -fsroot <dir> for Files (the filesystem) or -bdpath <image> for IMG (the block image).

No PC on the network? udpfs-server by YouKnow-sys is an Android app that serves the same thing from a phone or tablet — folders or disk images, so it covers both Files and IMG. It is found by broadcast, so there is no server address to type in on the console, and it works over a router or a direct cable. Built on the same udpfsd underneath; MIT licensed.

Whichever server you use, a UDPBD-only udpbd-server (SUDPBDv2) will not talk to either backend. Because both backends bind the same UDPRDMA port and the IOP can load only one per boot, you can't run both at once — Files vs IMG is a config-time choice, and switching between them needs an OPL restart to take effect (OPL shows the usual restart-to-apply notice).

So why offer both Files and IMG?

They're the same protocol but a genuinely different workflow. Files is the lower-friction, "modern" model (loose ISOs, drop-in, transparent .zso/.cso/.chd compression) and matches how NHDDL and pcm720's server are designed. IMG reuses OPL's existing massN: block pipeline (a disk image the PS2 mounts with its own FAT/exFAT drivers) — handy if you already keep a block image or want the exact same shape as USB/HDD. Pick whichever fits how you store your games. (If you already run the old udpbd-server, that's a separate UDPBD choice — see above — not a UDPFS mode.)

Which PC-side UDPFS server do I run?

The RiptOPL release ships Neutrino as a drag-and-drop neutrino/ folder, but it does not embed PC server software. Open PS2-Servers.url from the package or visit PS2 Servers for the maintained UDPFS / SMBv1 / UDPBD all-in-one launcher, then choose UDPFS and follow its protocol-specific settings. Advanced users can instead run pcm720/udpfsd directly: pass -fsroot <dir> for Files or -bdpath <image> for IMG. The standalone udpbd-server speaks SUDPBDv2 and does not work with UDPFS; use it only with the separate Protocol = UDPBD choice.

Why does UDPFS IMG need a private bsd-udpfsbd.toml when a stock bsd-udpfs.toml exists?

The -bsd token is just a config filename: at game boot Neutrino loads config/bsd-<token>.toml, and the toml's body picks the IOP driver. Stock Neutrino already ships a bsd-udpfs.toml whose body is the FHI filesystem driver (udpfs_ioman / udpfs_fhi, no i_bdm, registers no massN: block device). The Files mode uses that stock token as-is — -bsd=udpfs, opening the game -dvd=udpfs:<name> by name.

The IMG mode needs the block-device body instead (udpfs_bd.irx, i_bdm → massN:) because that launch hands Neutrino -dvd=massN:. Neutrino ships udpfs_bd.irx but no built-in -bsd token for it, so RiptOPL auto-injects config/bsd-udpfsbd.toml into the bundled Neutrino folder at build time and emits -bsd=udpfsbd. The private name is deliberate — bsd-udpfsbd.toml will not collide with stock's bsd-udpfs.toml (a different driver), so the block config and the stock filesystem config coexist on one Neutrino install. If you assembled Neutrino yourself, copy neutrino/bsd-udpfsbd.toml from the RiptOPL source tree into your neutrino/config/ folder.

Requirements

Selecting a network protocol

Set a static IP on the PS2 (UDPFS and UDPBD)

For UDPFS (either access mode) or UDPBD, go to Settings → Network and set a fixed IP address, subnet mask, and gateway. You do not have to turn DHCP off: selecting either UDP protocol locks IP Address Type to Static, and if you use DHCP for SMB or HTTP that choice is kept and comes back when you switch protocol. The UDP IOP modules read this address at module-load time and have no way to acquire a lease later.

Pick your Network Protocol (and Access)

In Settings → Game Sources, set Network Connectivity to Manual or Auto, and set the Protocol under it (or on Settings → Network) to SMB, UDPFS, UDPBD or HTTP. Set Network Connectivity back to Off to disable networking; the protocol is kept for when you turn it back on. When Protocol = SMB, pick the SMB Version — SMBv1 (default) or SMB2. The Access row (Files / IMG) is always present, but it is only free to change under UDPFS: under SMB it is locked to Files and under UDPBD to IMG, greyed in both cases. Because the PS2 has a single NIC, choosing one excludes the others automatically. Save settings. When UDPFS is selected, SMB's server / port / share / credentials fields on the Network page are hidden automatically. Switching between Files and IMG needs an OPL restart to take effect (only one UDPFS backend can bind the transport per boot).

Start the PC server

Open PS2-Servers.url from the RiptOPL package or visit PS2 Servers. In its all-in-one launcher, choose the server that matches RiptOPL's Protocol row: SMBv1 server (RiptOPL), UDPFS, or UDPBD. Select the games folder or disk image, click Start, and follow the protocol-specific settings the launcher displays.

Advanced: run pcm720/udpfsd directly

For UDPFS only, advanced users can run pcm720/udpfsd in the mode that matches the chosen access mode. Files serves a directory containing CD/ and DVD/ subfolders; IMG serves a FAT/exFAT disk image.

# UDPFS Files — a folder with CD/ and DVD/ subfolders of ISOs
udpfsd -fsroot /path/to/games            # Files   (Linux/macOS)
udpfsd.exe -fsroot C:\path\to\games      # Files   (Windows)

# UDPFS IMG — a served FAT/exFAT disk image
udpfsd -bdpath /path/to/games.img        # IMG   (Linux/macOS)
udpfsd.exe -bdpath C:\path\to\games.img  # IMG   (Windows)

Boot the PS2 and find your games

RiptOPL loads the IOP module as soon as it starts. UDPFS Files mounts the udpfs: filesystem; UDPFS IMG mounts the served image as massN:. Your games appear in the UDPFS games list. Select a game and launch it — Neutrino is invoked automatically; SMB boots through OPL's own core.

Neutrino-only: no OPL core fallback (UDPFS)

UDPFS (both Files and IMG) has no embedded cdvdman backend, so it cannot use OPL's built-in EE core. Every UDPFS game launches via Neutrino, regardless of the per-game Loader Core setting. In the per-game Compatibility screen, the Loader Core selector is locked to Neutrino on the block-device tabs (UDPFS IMG and UDPBD) — it cannot be changed to <OPL>; on the UDPFS Files tab the row stays editable, but the launch forces Neutrino anyway. If neutrino.elf is missing when a game is launched, OPL shows a warning and returns to the menu; it does not attempt an OPL-core fallback.

SMB is different: it is served by OPL's own core, needs no Neutrino, and behaves like the classic OPL network share. See SMB (network share).

Per-game settings still work
UDPFS games support the full per-game settings screen in its Neutrino-aware mode: compat modes 1/2/3/5 (mapped to -gc), mode 7 (fix IOP buffer overrun, -gc=7), the Neutrino Video picker (-gsm), VMC, and free-text Neutrino Launch Args. OPL-core-only panels (GSM, Cheats, PADEMU, OSD Language) show a "not used with the Neutrino core" notice. See Per-game Settings and Neutrino Core for details.

One NIC, one transport — how the four rows interlock

The PS2 has a single Ethernet adapter (SMAP), and every network transport — SMB, UDPFS and UDPBD — loads a SMAP driver on it. Only one can own the adapter at a time, so RiptOPL exposes them as mutually exclusive values of one Protocol row rather than independent toggles. That replaces the old model, where a separate Network Boot toggle and an Ethernet (SMB) mode had to be greyed against each other. Network Connectivity decides whether the stack starts at all, and on the Network page the chosen protocol qualifies its own sub-rows (SMB Version is live only under SMB; Access is free only under UDPFS, and is value-locked to Files under SMB and to IMG under UDPBD). Switching between SMB, UDPFS and UDPBD is just changing the Protocol value and saving. (The same one-transport-per-boot rule is why Access = Files vs IMG is a config-time choice, applied on the next restart.)

Local devices — USB, MX4SIO, iLink, internal HDD (APA / exFAT), and MMCE — are entirely independent of these rows and browse alongside whichever network protocol you pick (or none).

Config file keys

These values are stored in settings_riptopl.cfg.

KeyTypeDefaultMeaning
network_protocolint (0–5)0Authoritative selector. User-facing: 0=Off, 1=SMB, 2=UDPFS (Access = Files), 5=HTTP. 3=UDPFSBD is the internal value for Access = IMG — the picker maps both 2 and 3 onto the single "UDPFS" menu entry, and the Access row picks between them. 4=UDPBD is a first-class value for the retained UDPBD (SUDPBDv2) choice: it is preserved as-is on load, never migrated, so users still on the old udpbd-server keep it.
net_protocol_pickint (1–5)1The protocol last chosen (never Off), using the network_protocol values. network_protocol is 0 while Network Connectivity is Off; this is what the Protocol rows show then, and what turning Connectivity back on restores.
net_start_modeint (0–2)0Network Connectivity: 0=Off, 1=Manual, 2=Auto. Reconciled with network_protocol on load — a protocol of Off forces this to Off, and a live protocol with an Off (or out-of-range) start mode is floored to Manual.
smb_dialectint (0/1)0Row 3 SMB Version: 0=SMBv1 (default), 1=SMB2. Only meaningful while the protocol is SMB; the value is kept (not reset) when the row is greyed. SMB3 is reserved internally and is not a selectable value.
enable_udpbdbool (0/1)0Legacy back-compat shadow (superseded by network_protocol). Still dual-written: 1 whenever the protocol resolves to UDPFSBD (IMG) or UDPBD — both block-device transports set it.
net_boot_protocolint (0/1)0Legacy back-compat shadow (superseded). Derived from the selector; only meaningful when the legacy enable_udpbd=1. Selecting UDPBD sets enable_udpbd=1 with the classic UDPBD encoding, so a fresh UDPBD config still produces the legacy UDPBD shadow values.
eth_modeint—Legacy back-compat shadow of the old ETH/SMB start mode; the unified selector supersedes it. Still written for older readers.

There is no separate config key for the Access (Files / IMG) row — it is folded into network_protocol itself (2 = Files, 3 = IMG). RiptOPL writes the legacy enable_udpbd / net_boot_protocol / eth_mode keys alongside the new one (a dual-write) purely so older builds can still read the config; network_protocol is the source of truth. The PS2 IP address used by the UDPFS IOP modules is read from the standard Network page fields (the same ones SMB uses); there are no protocol-specific network keys.

Game folder layout on the server

For the IMG mode (Access = IMG) and SMB, the PC server exports a FAT/exFAT volume the PS2 reads with the same folder conventions as a USB drive:

mass0:/  (device root — folders sit here directly by default)
  CD/          ← PS2 CD-ROM images (.iso)
  DVD/         ← PS2 DVD images (.iso)
  ART/         ← cover art (same naming as USB)
  CFG/         ← per-game config files
  VMC/         ← virtual memory cards (optional)
  POPS/        ← PS1 POPS firmware (for VCD, if used)
  POPSTARTER/  ← POPSTARTER.ELF (for VCD, if used)
  APPS/        ← homebrew ELF files (optional)

The UDPFS Files mode uses the same CD/ + DVD/ layout, just without a disk image: point udpfsd -fsroot at a folder that contains CD/ and DVD/ subfolders of ISOs (OPL lists from <served>/CD + <served>/DVD, not the served root). Drop an ISO into CD/ or DVD/ and it appears in the UDPFS games list — no massN:, no fragment list, and transparent .zso/.cso/.chd compression.

Can I use ZSO or UL-format images over UDPFS?

It depends on the access mode. Files (the filesystem) supports transparent .zso/.cso/.chd compression — Neutrino opens the file by name and the server decompresses on the fly. The IMG mode serves raw sectors only, and USB Extreme split (.ul) images require the OPL built-in core, which UDPFS does not use — so in IMG mode, only standard ISO images work.

Troubleshooting

SymptomLikely causeFix
No network games list appears Network Protocol is Off, or the IOP module failed to load (no network link at boot). Check Game Sources → Network Connectivity is Manual or Auto (not Off), and that Protocol is set to your chosen transport. Verify the PS2 has a physical Ethernet link before power-on.
"UDPFS/UDPBD use the saved static PS2 IP" notice when selecting a UDP protocol or at boot Your kept IP Address Type preference is DHCP, which SMB and HTTP still use. UDP always uses the static fields. Nothing to switch off. Check that the IP address, mask and gateway in Settings → Network suit your LAN.
List appears but game list is empty PC server not running, wrong IP, or the server is in a different mode than the Access you selected. Confirm the server is running. Confirm the PS2 IP on the Network page matches the server's expected client address. Confirm the Access mode matches the server flag (-fsroot for Files, -bdpath for IMG).
Game launches but immediately crashes or freezes neutrino.elf not found, wrong ip= in the Neutrino toml, or server disconnect mid-launch. Verify neutrino.elf exists (bundled neutrino/ folder, or wherever Neutrino Path points). Check the ip= line in the active mode's toml (neutrino/config/bsd-udpfs.toml for Files, bsd-udpfsbd.toml for IMG) matches your PS2's static IP. Keep the PC server running throughout play.
UDPFS IMG game fails but Files works (or vice-versa) For IMG: bsd-udpfsbd.toml missing from the Neutrino config folder, or the server is in the wrong mode for the Access you selected. (Switching Files ↔ IMG also needs an OPL restart.) Use the bundled Neutrino folder from the RiptOPL release (it contains config/bsd-udpfsbd.toml pre-injected). If you installed Neutrino manually, copy neutrino/bsd-udpfsbd.toml from the RiptOPL source into neutrino/config/. Make sure the server runs with -bdpath for IMG (block) or -fsroot for Files (filesystem), and that you restarted OPL after switching Access.
Existing UDPBD setup stopped working after updating The Protocol row is set to something other than UDPBD (UDPBD is wire-incompatible with UDPFS, so a UDPFS pick won't talk to udpbd-server). Set Network → Protocol back to UDPBD (with Network Connectivity on Manual or Auto) and keep running the same udpbd-server on the PC — a config saved as UDPBD is preserved as-is, never migrated. (Alternatively, switch to UDPFS and run udpfsd instead — but that is a different protocol and server.)

For further reading see Neutrino Core (per-game settings, launch args) and SMB (network share) (the SMB protocol in depth, which uses the OPL built-in core and does not require Neutrino).