Releases: NathanNeurotic/POPSLoader
Release list
Rolling Release
POPSLoader — Rolling Test Build ⚙️
This is a bleeding-edge TEST build, not a stable release. It has everything from the latest stable plus features still being tested. Please try it and report anything odd — and mention you're on the rolling build. To go back to stable, just reinstall the latest entry on the Releases page.
Here's everything new or changed since BETA-9.
🆕 Currently testing (newest — we'd love your feedback)
- 🆕 Internal HDD (exFAT) — NEW backend! You can now play from an exFAT-formatted internal SATA/IDE drive, picked from the carousel's HDD (exFAT) entry. Set Settings → BDMA Mode to ATA, put the usual
POPS/folder (with your.VCDfiles) on the exFAT drive, and it works just like USB / MX4SIO / MMCE — same layout, sameXX.launch; the BDM Assault drivers (R3Z3N's ATA build) do the rest. It's built and the rolling build is green, but it has not been tested on real hardware yet — if you have an exFAT internal drive, please try it and tell us whether the HDD (exFAT) page lists your games and they launch. (Don't see your games? Confirm the drive is exFAT, BDMA Mode is ATA, and your files are inPOPS/.)
Newest this cycle — UI, cover art & navigation (please eyeball the items marked below):
-
Per-game info text — add a
<game>.txtfor a game, then turn on Settings → Game details (Off / Left / Center / Right alignment) to show it in a panel under the cover. Your line breaks are kept. Scroll long text with the right analog stick (fixed Fast pace, ~7 lines/sec — the Fast/Medium/Slow setting was removed since Fast tested best). Covers and these details files have a selectable home now. Settings → Game List → Cover/details folder picks where they're looked up first on USB / MX4SIO / MMCE: POPS/ART (default), POPS right beside the game, or a top-level ART folder at the drive's root. The game's ownPOPS/folder is always checked too as a fallback, so art beside the.VCDkeeps working. On the internal HDD it stayshdd0:__common/POPS/ART/. For a multi-disc game, name the file after the game without the(Disc N)part and one.png/.txtcovers every disc (the exact per-disc name still works too). -
Smoother list navigation — the left analog stick now moves the cursor one game at a time (just like the d-pad), with a comfortable hold-to-repeat (it starts repeating after a short hold, then about 5 items/sec). Left/Right (d-pad or stick) jumps a whole page, and L1 still bounces between top ↔ bottom. The stick only kicks in on real analog/DualShock pads now (a digital pad no longer injects a phantom direction), so up/down lands on individual items cleanly — oldman63 and Nuno6573 confirmed this on hardware. And the list no longer bogs down while cover art is on — it was redoing work every frame; please tell us if scrolling feels snappy with covers enabled.
-
Game list cache (opt-in) — Settings → Game list cache. USB / MMCE / MX4SIO / HDD can save their scanned list per device so the "Building game list…" step only runs once (rebuild it any time with R1). Off by default. If you switch it on, please test that games still launch from the cached list, not just that it loads fast.
-
New cover-box artwork (newest) — the placeholder in the preview box is now a proper jewel-case picture instead of a text label. With cover preview off you see a clean default case; with preview on but the game has no cover art, that default case gets a small "missing cover" mark layered on top. (The old "Cover disabled" text label is gone, and the single old
MISSING.pngplaceholder was dropped — that alone shaved ~62 KB off the build.) The default, the missing mark, and the frame outline all line up inside the jewel-case window. Please eyeball this on a TV — does the default cover + missing mark sit squarely inside the frame on both NTSC and PAL? It hasn't been checked on real hardware yet. -
Cleaner game list — wider list, the device name (e.g. "USB") no longer overlaps the top row, and the "Building…" progress bar is calmer.
-
Boot polish — the welcome splash now appears immediately (covering the old boot black screen) and is centered from the first frame; leaner build (~48 KB smaller). Please just confirm boot still reaches the menu cleanly on each device.
-
Boot sound on/off — Settings. A new Boot sound switch (default On) for the splash chime; turn it off for a silent boot. It saves with your other settings — oldman63 confirmed it saves and survives a reboot on hardware.
-
Overscan (CRT inset) — Settings → "Overscan (CRT inset)". If a real CRT cuts off the edges of the menu, nudge this up (Off, then 5 → up in steps of 5) to pull the whole UI inward, OPL-style. It previews live as you adjust and reverts if you back out without saving; Off by default so nothing changes unless you ask. This one needs CRT eyeballs — try it on a tube TV and tell us whether the inset clears your overscan without leaving black borders.
-
HDD load crash — FIXED. The big one: the HDD game list could fail with "Failed to load HDD" on the second boot (and stay broken until you cleared a file) because of a cache bug. That's fixed — the HDD list should now load reliably every boot. If you ever see "Failed to load HDD" again, please screenshot it — it now shows the real reason on a second line.
-
Display / Video standard fix — Settings → Video. POPSLoader now honors your Video Standard choice, with a new Auto default that matches your console's region (fixes e.g. PAL consoles displaying in PAL when NTSC was selected). On PAL the UI now renders natively at 640×512 so it fills the whole screen — no more letterbox / dead band. Two safety nets like OPL: hold START during boot to skip past video settings if a bad mode leaves you with no picture, and a confirm/revert prompt when you change the mode (it auto-reverts if you don't confirm in time). PAL hardware verification is exactly what we'd love feedback on — does the screen fill edge-to-edge?
-
Per-device POPSTARTER pickup — you can now drop a specific
POPSTARTER.ELFbuild on a removable device and have that device's games use it, without forcing it everywhere. At launch the search order is: your explicit POPSTARTER Path setting (or an absolute Profile pick, which now acts as a preset) if it resolves → the game device's own<device>:/POPS/POPSTARTER.ELFif present → thePOPSTARTER.ELFnext to POPSLOADER.ELF → the usual Memory Card fallback. So e.g. a USB-delay build in your USB drive'sPOPS/folder serves USB games while a faster build elsewhere serves the rest. The internal HDD (PFS) install uses the same idea viahdd0:__common/POPS/POPSTARTER.ELF, routed through the existing HDD partition machinery so launch behavior is unchanged. This hasn't been hardware-tested yet — if you place a per-device POPSTARTER, please confirm the right build is used and your games still launch. -
POPSTARTER Memory Card Folder toggle — Settings. A new switch for the
mc:/POPSTARTERfolder on your Memory Card. Turning it off deletesmc:/POPSTARTER(you'll get a confirm prompt first — it's a destructive action). It's interlocked with BDMA: you can't disable the folder while BDMA mode is on, and you can't enable BDMA while the folder is off. (Heads-up for the curious: the installed BDMA mode is recorded in abdma_mode.txtmarker in your POPSTARTER pack folder — renamed from the old.pldr_bdma_mode; the legacy name is still read.) -
Boot Page — Settings → Startup. Choose where POPSLoader opens after boot: the device carousel (default), or jump straight into a specific device's game list (MX4SIO / USB / MMCE / HDD).
-
Multi-disc games — Settings → Game List. Optionally hide the extra discs of multi-disc games so only Disc 1 shows. It works by filename, so name your files like
Game (Disc 1).VCD/Game (Disc 2).VCD. Launch Disc 1 and swap discs in-game with your VMC. -
Hide games — press L3 on any game to hide/unhide it (drops a tiny
<name>.hidefile next to its.VCD, the same way a cover.pngcan sit beside the game); press R3 to reveal a device's hidden games — they show dimmed so L3 can unhide them — or hide them again. Settings → Game List → Hidden games: Hidden filters them out of the list; Visible (manage) shows them dimmed so you can toggle them back with L3. In-app hiding now works on every device page — USB / MX4SIO / MMCE / Memory Card and the internal HDD (the HDD writes the.hidestraight to its boot partition; the old "add the file from a PC" step is gone). If an HDD write ever fails, it falls back to telling you to add the.hidefrom a PC — please report it if you see that. -
Carousel device visibility — Settings → Carousel Devices. Hide carousel entries you don't use (including SMB if you don't have a network share, or the not-yet-implemented iLink stub) with a Shown / Hidden toggle per device; at least one device always stays visible. Your launch behavior is unchanged — hidden entries are just skipped on the carousel.
-
HDD settings now save on the HDD — on an HDD install, your Settings save directly to the HDD (on its boot partition), right where POPSLoader lives — same as a USB / MX4SIO / MMCE install keeps its own settings. This used to be a read-only "probe"; it's a real save now. It boots on PCSX2 and provato confirmed the HDD is writable on real hardware, but the full save flow is still validating on hardware — so please save a setting, reboot, and tell us if it stuck.
🎮 Since BETA-9 — the big stuff
Internal HDD (PFS)
- Major HDD reliability fixes — games that wouldn't launch from an HDD-resident POPSTARTER now work.
- The HDD game list now loads even wh...
POPSLoader BETA-12 — Hardware fixes, MX4SIO realignment & game-list features
POPSLoader BETA-12
The culmination of the BETA-9 → BETA-12 line. BETA-12 folds in a full round of hardware-tester fixes, a rewrite of MX4SIO handling to match OPL's passive BDM model, a batch of game-list features, and two independent source-audit hardening passes — on top of everything shipped since BETA-9.
Hardware-validated where noted; the rest boots clean on PCSX2 and is in hardware validation. If you hit a regression, please open an issue.
⚠️ Requirements — POPS binaries are REQUIRED and are NOT included
POPSLoader is only the launcher GUI. It does not ship the proprietary POPS binaries — you must supply them yourself.
POPS binaries — place in <device>:/POPS/ or hdd:/__common/POPS/:
IOPRP252.IMG,POPS.ELF,POPS.PAK,POPS_IOX.PAK— from AnimMouse's POPS-binaries
POPSTARTER — point POPSLoader at a POPSTARTER.ELF (any supported device): mc0:/POPSTARTER/POPSTARTER.ELF, mass:/POPS/POPSTARTER.ELF, mmce:/POPS/POPSTARTER.ELF, mx4sio:/POPS/POPSTARTER.ELF.
PS1 game images — .VCD files in <device>:/POPS/ (or hdd:/__.POPS/). Optional <Title>.png cover art (200×200, 8-bit, non-interlaced RGB(A) PNG) and — new in BETA-12 — an optional <Title>.txt details blurb alongside each VCD.
A memory card in slot 1 (
mc0) is required for settings and BDMA. BDMA is required for every device except HDD (PFS), and only one BDMA mode is active at a time.
🆕 New in BETA-12
Hardware-tester fixes (#494–#497)
- #494 — Settings now load on a cold USB boot. Saving always worked, but the boot-time settings read could fire before the USB drive finished re-mounting, so the config silently fell back to defaults. The read now waits for the mass device and retries (the same self-heal the game-launch path already had).
- #496 — Cover art is pixel-aspect correct per video mode. Covers (and the jewel-case frame) are sized from the source aspect ×
480/SCR.Y, so square art displays square on both NTSC (640×448) and PAL (640×512). (The original "stretched" report turned out to be a 16:9 TV setting — but the per-mode correction is a genuine refinement and is in.) - #497 — The USB "crash" was a false alarm. It was a spurious pre-exec watchdog that could only mis-fire; the block was removed. Genuine post-exec detection stays.
- #495 — Video-standard readback. Settings → Display → Video Standard now shows the live GS output mode/resolution, so a PAL-on-NTSC mismatch is visible without any launch flags.
MX4SIO realigned to the OPL/BDM model
MX4SIO is now treated as a plain passive BDM mass device (like USB): loading the driver is the init, with no synchronous EE-side card-probe that could stall when no card is present. It only comes up when you actually booted from it, when a configured path lives on it, or when you open the MX4SIO page — never speculatively. A crash-marker makes a no-card stall self-recover on the next boot instead of bricking it.
Game list
- Multi-disc collapse — "Multi-disc games → First disc only" (Settings → Game List) hides secondary discs; detection now covers
(Disc N),[Disc N],(Disc N of M),(CD N)(Redump/No-Intro). Deliberately ignores bareDisc N/CD Nsuffixes to avoid hiding standalone magazine/demo/music discs. - Per-game details panel — optional
<Title>.txtshown word-wrapped and centered under the cover art, toggled by a new Game details setting (off by default). Gracefully absent when no.txtexists. - L1 — bounce to ends — jumps to the top of the list; press again to bounce to the bottom (fast nav for 1000+ libraries).
- R1 — rescan in place — re-runs the current device's scan without leaving the page (HDD wipes+rebuilds its cache; MMCE/MX4SIO/USB re-detect + rebuild live) — handy for hotplugging a card/drive.
Reliability & polish
- Single, consistent progress percentage on the loading overlay (#498).
- Boot-page persistence (open a chosen device at boot) with crash-loop protection.
- Source-audit hardening (Gemini + DeepSeek): bounded/guarded file reads, leak/UB fixes in
luasystem/graphics/luaplayer, with no behavior change — these only affect corrupt-asset, read-only-boot, and device-error paths.
📦 Cumulative since BETA-9
- BETA-11 — HDD game list loads when launched from a non-HDD device (cold-drive spin-up retry); DKWDRV from custom HDD paths; BOOT.ELF exit with
reboot_iop=0; launch arguments (-page/-mode/-game/-debug); MMCE pad re-init after on-demandmmceman; HDD game-list cache (R1 rescans); dead-code removal (3D pipeline, md5, device-lock); documentation pass. - BETA-10-5 — the D-10 fix: HDD POPSTARTER + HDD games reliable (PFS unmount before
ExecPS2); launch from wLaunchELF / non-IOP-resetting parents; BOOT.ELF exit restored; per-device settings sidecar (.pldrsnext to the ELF); NHDDL-style launch args; newer SDK device prefixes (usb:/ata:/apa:). - BETA-10 — HDD D-10 POPSTARTER launch fix; BOOT.ELF / wLaunchELF exit black-screen fixed and restored to the Exit menu; UI polish.
- BETA-9 baseline — speed, reliability, and cover-art update.
Full commit history: BETA-9-0...BETA-12
🙏 Testing & credits
Hardware testers — endless real-PS2 testing across many sessions and diagnostic builds:
- @nuno6573 — relentless multi-session HW testing and troubleshooting
- @oldman63 — detailed, reproducible reports driving #494–#499 (incl. catching that #496 was a 16:9 TV setting)
- @provato, @P4NCHOL1NO, @Vizor, @FifthFox ,and the community
- @CosmicScale
- @israpps
- DanielSant0s (https://www.github.com/DanielSant0s)
Design & code — Berion (GUI design), El_isra / israpps (POPSTARTER & code), krHACKen (POPSTARTER), nuno6573 & Ripto (scripts), Daniel Santos (Enceladus base), AnimMouse (POPS binaries). uyjulian, fjtrujy, HWC and others for always helping.
⏳ Known issues / in validation
- The MX4SIO realignment, the #494 USB settings-load retry, and the cover/frame aspect work are source-correct and boot clean on PCSX2; final confirmation on each hardware configuration is ongoing.
- One specific config previously saw "Failed to load HDD" from a non-HDD boot; under investigation. Most setups are unaffected.
💾 Assets
POPSLOADER.ELF— the freshly-built launcher (drop into yourPS1_POPSLOADER/folder).POPSLOADER-rolling-release.zip— the binary + full source snapshot for this exact build.
This program is free and open source. If you bought it, you have been scammed.
POPSLoader BETA-11 — Cold-HDD listing, device-launch fixes & HDD cache
POPSLoader BETA-11
Successor to BETA-10-5. Headline: the HDD game list now loads when POPSLoader is launched from a non-HDD device (USB / Memory Card), alongside a batch of device-launch fixes, the HDD game-list cache, and a full documentation pass.
Highlights
- HDD listing from a non-HDD boot — the HDD page now waits for a cold drive to spin up before mounting (retry with back-off) instead of failing instantly with "Failed to load HDD." Hardware-confirmed on multiple setups.
- DKWDRV from custom HDD paths — slot-tolerant resolution of any custom
hdd?:/.../DKWDRV.ELFpath (no longer pinned topfs1). - BOOT.ELF exit — launches with
reboot_iop=0for the HDD-boot case on the working route (no IOP-reset hang). - Launch arguments —
-page/-mode/-game/-debug;-page=<device>opens that device's game list directly. - MMCE — controller input no longer dies after the on-demand
mmcemanload (full SIO2 pad re-init);mmcemannow sourced from ps2sdk. - HDD game-list cache — instant repeat / cross-boot opens of the HDD page; press R1 to force a rescan.
- Reliability & cleanup — pad init no longer deadlocks boot on a pad fault; HDD init reports honest failure; safer file copy/rename; removed dead code (3D pipeline, md5, device-lock subsystem).
- Documentation — new
PRESERVATION_CONTRACTS.md(launch-path regression armor), refreshedARCHITECTURE.md/COMPONENTS.md, and a documentation accuracy audit.
Known issues
- One tester still sees "Failed to load HDD" from a non-HDD boot on a specific hardware configuration; under investigation. Most setups are unaffected — if you hit it, boot POPSLoader from the internal HDD, or open the HDD page a few seconds after the menu appears.
Install
Extract POPSLOADER.zip to your device: PS1_POPSLOADER/ is the loader app, and POPS/PATCH_5.BIN is the POPS patch.
EXTENSIVE THANK YOU TO @nuno6573 for ENDLESS TESTING AND ENDURING MY ENDLESS TROUBLESHOOTING FAILURES
POPSLoader BETA-10-5 (v1.0.0 - rev5)
POPSLoader BETA-10-5 (v1.0.0 - rev5)
The D-10 release. HDD POPSTARTER + HDD games is finally reliable, plus supporting infrastructure across the launch pipeline.
🎯 Headline fixes
- HDD POPSTARTER + HDD games (D-10) hardware-confirmed PASS. The long-standing main stabilization blocker is closed. PFS partition unmount before
ExecPS2is the load-bearing fix. - POPSLoader launches from wLaunchELF and similar non-IOP-resetting parent launchers now works reliably (ps2sdk #425 workaround in
_ps2sdk_memory_init). - BOOT.ELF exit from autoboot / OSDSYS / Browser / HOSDMenu-launched POPSLoader is back to working (V2 route restored after an intermediate regression).
✨ New features
- Per-device settings sidecar: settings (
.pldrs) now save next toPOPSLOADER.ELFon USB / MC / MMCE / MX4SIO installs. Settings follow the device. - NHDDL-style launch arguments: pass
-page=hdd(or-mode=ata, NHDDL-compat) to POPSLoader's argv to boot directly to a specific device's game list. Also-game=<selector>(game auto-launch) and-debug(extra diagnostics). - Newer SDK device prefixes recognized:
usb:,usbN:,ata:,apa:— POPSLoader now correctly classifies the boot device regardless of which path convention the parent launcher uses.
🐛 Other improvements
- Unified boot-context resolver (
ResolveBootContext) replaces three near-copies of the same "where are we" logic; settings, IRX decisions, and UI navigation now share one source of truth. - CI Lua syntax validation extended to all bundled
.luafiles (was previously onlyetc/boot.lua). - Pre-
elf_loaderdead code removed fromsystem.cpp.
⚠️ Known broken (workarounds available)
- DKWDRV from a custom HDD path: black-screens. Use the default MC path (
mc0:/PS1_DKWDRV/DKWDRV.ELF). - BOOT.ELF exit when POPSLoader was booted from HDD: long-standing. Use Exit → OSDSYS, or reboot the console manually.
Full details and chronology in STATE.md and QA_REGRESSION_MATRIX.md.
🙏 Thanks
Nuno for relentless hardware testing across multiple sessions a day, including running diagnostic builds. CosmicScale for the wLaunchELF report that unblocked the bootstrap fix. Berion for the GUI mockup work (landing in a future release).
📦 Install
Download POPSLOADER.zip from the assets below. The ZIP root contains:
PS1_POPSLOADER/— the POPSLoader app files (POPSLOADER.ELF, POPSTARTER.ELF, icons, etc.)POPS/—PATCH_5.BIN
Extract to your install location per the README.
@nuno6573 @israpps @NathanNeurotic
POPSLoader BETA 10 — HDD Support Fixes, BOOT.ELF Exit Fix, and UI Improvements
Requirements
POPS Binaries
Place these in <device>:/POPS/ or hdd:/__common/POPS/:
PS1 Game Images
Place .VCD files in <device>:/POPS/ or hdd:/__.POPS/:
- PS1 Preservation Collection — convert bin/cue with POPS-VCD-Manager
Box Art
Place <Title>.png alongside your VCDs (HDD uses __common/POPS/ART/).
All art must be 200×200, 8-bit, non-interlaced, RGB(A) PNG.
POPSLoader
Place PS1_POPSLOADER/ contents on any supported device (APPS/PS1_POPSLOADER/ also works).
POPSLoader BETA-10
A memory card in slot 1 (
mc0) is required for settings and BDMA.
Place POPSTARTER.ELF on any supported device and point POPSLoader to that path:
mc0:/POPSTARTER/POPSTARTER.ELF
mass:/POPS/POPSTARTER.ELF
mx4sio:/POPS/POPSTARTER.ELF
mmce:/POPS/POPSTARTER.ELF
Device Layouts
BDMA is required for all devices except HDD — enable it in Settings.
Only one BDMA mode can be active at a time (e.g., selecting MMCE disables USB and MX4SIO).
HDD (PFS) works regardless of BDMA status.
USB (FAT32 / exFAT) / MX4SIO / MMCE
<device>:/POPS/<Title>.VCD
<device>:/POPS/<Title>.png
HDD (PFS)
hdd:/__.POPS/<Title>.VCD
hdd:/__common/POPS/ART/<Title>.png
POPSLoader BETA 10
This release fixes several important issues with POPSLoader, especially for users launching PS1 games from HDD.
The biggest improvement is that the HDD launch path has been cleaned up and tested on real PS2 hardware. The D-10 issue that caused HDD-based POPSTARTER launching to fail has been fixed, making HDD support much more reliable.
This release also fixes the BOOT.ELF exit option, so users can return to wLaunchELF from POPSLoader again without hitting a black screen.
What's New
HDD Launching Is Fixed
HDD support is now in a much better state.
The issue that caused the D-10 HDD launch test to fail has been fixed. POPSLoader can now hand off to POPSTARTER from HDD correctly, without breaking the existing launch behavior for other devices.
This means HDD users should have a much smoother experience when launching PS1 games through POPSLoader.
BOOT.ELF Exit Works Again
The BOOT.ELF exit option has been restored.
You can now use the Exit menu to launch BOOT.ELF / wLaunchELF again. The Triangle shortcut has also been restored.
This was previously hidden because it caused a black screen on real hardware. That issue has now been fixed and tested.
UI Improvements
This release also includes interface cleanup and polish.
The Exit menu has been updated, BOOT.ELF is visible again, and the current UI improvements from the development branch are included.
Documentation Updates
Some project documentation and QA notes were also updated.
These updates help track what was fixed, what was tested, and what still needs future attention.
Fixed
- Fixed HDD D-10 POPSTARTER launch failure.
- Fixed BOOT.ELF / wLaunchELF exit black screen.
- Restored BOOT.ELF in the Exit menu.
- Restored Triangle shortcut for BOOT.ELF.
- Improved HDD launch reliability.
- Preserved existing USB, MMCE, MX4SIO, SMB, and non-HDD launch behavior.
- Included GUI polish and documentation updates.
Tested
Tested on real PS2 hardware.
Confirmed working:
- HDD POPSTARTER launching.
- BOOT.ELF / wLaunchELF exit.
- Triangle shortcut for BOOT.ELF.
- Existing working launch paths remain intact.
Notes
This is being released as BETA 10.
Even though some of the development work happened on the BETA-12-PLAY branch, this release represents the current tested public build point.
Recommended for users who want the latest HDD fixes, restored BOOT.ELF exit support, and the newest UI improvements.
What's Changed
- Move RESET_IOP reboot into _ps2sdk_memory_init hook by @NathanNeurotic in #404
- Refactor POPSTARTER launch assembly into shared helper for HDD/non-HDD parity by @NathanNeurotic in #405
- Add strict HDD POPSTARTER pre-exec accessibility gate by @NathanNeurotic in #406
- Tighten HDD POPSTARTER launch route contract and explicit fallback by @NathanNeurotic in #407
- elf_loader: move embedded loader control args off POPSTARTER argv by @NathanNeurotic in #408
- Preserve System.loadELF argv contract for HDD reboot paths by @NathanNeurotic in #409
- Harden pfsN→HDD partition recovery for POPSTARTER by @NathanNeurotic in #411
- Add guarded pfs POPSTARTER launch fallback when partition context is unavailable by @NathanNeurotic in #412
- Improve HDD partition context recovery for mounted pfs slot paths by @NathanNeurotic in #413
- Preserve POPSTARTER exec PFS slot during external ELF launch handoff by @NathanNeurotic in #414
- Improve pfsN slot recovery and POPSTARTER HDD partition resolution by @NathanNeurotic in #415
- Ensure POPSTARTER argv selector present and preserve exec PFS slot by @NathanNeurotic in #416
- Deterministic pfsN:/ slot recovery in BuildHddPartitionContext by @NathanNeurotic in #417
- Prefer HDD game partition during POPStarter pfs context recovery by @NathanNeurotic in #418
- Improve pfs slot HDD partition recovery order by @NathanNeurotic in #419
- Preserve original POPSTARTER PFS slot during external ELF launch by @NathanNeurotic in #420
- Preserve source PFS slot metadata during POPSTARTER HDD launch setup by @NathanNeurotic in #421
- elf_loader: enforce POPSTARTER argv[0] contract for HDD-backed embedded loader launches by @NathanNeurotic in #422
- Support mounted-pfs-fallback when POPSTARTER HDD partition context is unavailable by @NathanNeurotic in #424
- Add
STRICT_HDD_PREEXEC_GATEsetting to control HDD pre-exec gate behavior by @NathanNeurotic in #425 - Restrict PLDR.RunPOPStarterGame mounted-pfs fallback to HDD-derived launches by @NathanNeurotic in #426
- Preserve raw HDD partition context across POPStarter path resolution by @NathanNeurotic in #427
- Resolve profile vs persisted POPSTARTER backend mismatch and normalize selection by @NathanNeurotic in #428
- Add launch diagnostics snapshot to POPSTARTER failure UI by @NathanNeurotic in #429
- Enforce explicit POPSTARTER path precedence and persist selection mode by @NathanNeurotic in #430
- Harden POPSTARTER default path handling for absolute custom device paths by @NathanNeurotic in #431
- Show configured/effective/resolved POPSTARTER paths in launch-failure UI by @NathanNeurotic in #432
- Extract IOP reset to _ps2sdk_memory_init and fix loader.c generation in elf_loader Makefile by @NathanNeurotic in #434
- Compact launch-failure diagnostics: show profile, route, configured/effective/exec paths by @NathanNeurotic in #435
- HDD fallback-mounted-pfs: reconstruct POPSTARTER exec mount from selected partition by @NathanNeurotic in #437
- Add explicit launch-failure reason codes for config and partition context by @NathanNeurotic in #438
- docs: resync BETA-12-PLAY source-truth audit by @NathanNeurotic in #439
- Preserve custom POPSTARTER path commits by @NathanNeurotic in #440
- Document potential settings/path integrity risk for POPSTARTER saves by @NathanNeurotic in #441
- Track profile-default POPStarter selection and persist selection mode on save by @NathanNeurotic in https://github.com/NathanNeurotic/POPSLo...
POPSLoader - Beta 9 - Speed, reliability, and art update. (One issue remains)
HOTFIX:
- Binaries replaced and proper source added on 03/20/2026
Should resolve reported issues.
Requirements
POPSTARTER.ELF CAN NOT BE ON HDD - POPSTARTER.ELF CAN NOT BE ON HDD.
POPSLoader can be ANYWHERE. POPSLoader can be ANYWHERE.
POPS Binaries
Place these in <device>:/POPS/ or hdd:/__common/POPS/:
PS1 Game Images
Place .VCD files in <device>:/POPS/ or hdd:/__.POPS/:
- PS1 Preservation Collection — convert bin/cue with POPS-VCD-Manager
Box Art
Place <Title>.png alongside your VCDs (HDD uses __common/POPS/ART/).
All art must be 200×200, 8-bit, non-interlaced, RGB(A) PNG.
POPSLoader
Place PS1_POPSLOADER/ contents on any supported device (APPS/PS1_POPSLOADER/ also works).
POPSLoader BETA-9
A memory card in slot 1 (
mc0) is required for settings and BDMA.
Place POPSTARTER.ELF on any supported device and point POPSLoader to that path:
mc0:/POPSTARTER/POPSTARTER.ELF
mass:/POPS/POPSTARTER.ELF
mx4sio:/POPS/POPSTARTER.ELF
mmce:/POPS/POPSTARTER.ELF
Device Layouts
BDMA is required for all devices except HDD — enable it in Settings.
Only one BDMA mode can be active at a time (e.g., selecting MMCE disables USB and MX4SIO).
HDD (PFS) works regardless of BDMA status.
USB (FAT32 / exFAT) / MX4SIO / MMCE
<device>:/POPS/<Title>.VCD
<device>:/POPS/<Title>.png
HDD (PFS)
hdd:/__.POPS/<Title>.VCD
hdd:/__common/POPS/ART/<Title>.png
Status
POPSLoader for MMCE, MX4SIO, USB, and APAHDD - Stabilization Optimization Updates
Requirements:
- :/POPS/or hdd:/__common/POPS/ IOPRP252.IMG , POPS.ELF, POPS.PAK, POPS_IOX.PAK
- :/POPS/ or hdd:/__.POPS/<Title>.VCD - bin/cue converted for POPStarter
- :/POPS/<Title>.png (8bit PNG non-interlaced non-palletized and must be RGB(A))
- PS1_POPSLOADER/ or APPS/PS1_POPSLOADER/
Thanks to everyone testing edge cases quickly during this push.
What's Changed
- Unify USB pages into a single bounded multi-device USB page by @NathanNeurotic in #243
- Embed UI assets; make BDMA IRX copy optional and non-fatal by @NathanNeurotic in #244
- CI: produce flat APP_POPSLOADER.zip release artifact by @NathanNeurotic in #245
- Fix embedded Lua searcher: Lua-only assets + correct module mapping by @NathanNeurotic in #246
- CI: ship final flat APP_POPSLOADER.zip contents by @NathanNeurotic in #247
- Enforce embedded-only Lua script loading by @NathanNeurotic in #248
- Finalize embedded-only Lua module boot flow by @NathanNeurotic in #249
- Debounce cover art loading to eliminate scroll lag by @NathanNeurotic in #250
- Add embed:/ embedded-asset resolver and unify embedded asset lookup by @NathanNeurotic in #253
- Add libpng interlace handling to embedded PNG decode path by @NathanNeurotic in #254
- Align splash elements and use BG.png for Credits/Settings by @NathanNeurotic in #255
- Premium eased fades for boot and runtime scene transitions by @NathanNeurotic in #256
- Adjust boot pacing: explicit splash/credits holds and premium fade timing by @NathanNeurotic in #258
- Silence Lua logging and remove launch.log writer by @NathanNeurotic in #260
- Remove unused launch.log string from elf loader by @NathanNeurotic in #261
- Add deferred BDMA mode save/apply flow in Profiles by @NathanNeurotic in #262
- Normalize APP_DIR host paths for BDMA source lookup by @NathanNeurotic in #263
- Implement MX4SIO main-menu entry with bounded init retry by @NathanNeurotic in #264
- Fix mass backend refresh, MX4SIO 2-pass init, and BDMA save hang by @NathanNeurotic in #265
- ci: package release as POPSLOADER.zip with split root folders by @NathanNeurotic in #266
- Fix MX4SIO page freeze and embed BDMA assets for USB boot by @NathanNeurotic in #267
- Harden POPSTARTER preflight with bounded backend ensure by @NathanNeurotic in #268
- Make MX4SIO detection init-first and MX4SIO IRX load idempotent by @NathanNeurotic in #272
- Exclude MX4SIO mass index from USB aggregation after MX4SIO init by @NathanNeurotic in #273
- Ensure FAT32 BDMA always removes legacy IRX files by @NathanNeurotic in #275
- Deterministic MX4SIO identity via exact "sdc" backend mapping by @NathanNeurotic in #280
- Unify POPSTARTER UI assets to *.bdma and fix build/embed/CI references by @NathanNeurotic in #286
- Embed boot.adp and load boot audio from embedded assets only by @NathanNeurotic in #287
- ui: add minimal DKWDRV modal and direct BOOT chainload by @NathanNeurotic in #291
- Add BOOT-only IOP-reboot chainload path and simplify BOOT resolver by @NathanNeurotic in #295
- Adjust main menu layout alignment by @NathanNeurotic in #296
- ui: restore deterministic intro hold timing with frame-based holds by @NathanNeurotic in #298
- Scale footer icons (70%) and restore BETA-5 vertical alignment by @NathanNeurotic in #299
- Prevent BOOT.ELF missing crash by aliasing
UI.Notifyto notification queue by @NathanNeurotic in #300 - Fix MX4SIO mass root mapping and scoped second ping by @NathanNeurotic in #301
- Fix MX4SIO detection and prevent USB hotplug leakage by @NathanNeurotic in #305
- Fix getMassMountDriver: pure C mount query, no Lua recursion by @NathanNeurotic in #321
- MX4: auto second attempt on first entry (bounded, no sleeps) by @NathanNeurotic in #324
- FAT32: delete only mc0:/POPSTARTER/usbd.irx and usbhdfsd.irx by @NathanNeurotic in #345
- Remove BDMA square footer action from Profile settings by @NathanNeurotic in #346
- Reduce footer button bar icon scale by 10% globally by @NathanNeurotic in #347
- docs: refresh STATE/ARCHITECTURE/RULES/PROMPTS/DECISIONS from repo truth by @NathanNeurotic in #351
- Reorganize Settings screen and register up/down direction icons by @NathanNeurotic in #348
- Adjust Settings screen vertical block layout and spacing in POPSLDR UI by @NathanNeurotic in #354
- Save settings on Settings exit and reconcile BDMA UI from effective marker by @NathanNeurotic in #353
Full Changelog: BETA-3...BETA-8.5
POPSLoader - Rebased for Speed and Device Compatibility - Major Performance and Stability Update
Requirements:
- :/POPS/or hdd:/__common/POPS/ IOPRP252.IMG , POPS.ELF, POPS.PAK, POPS_IOX.PAK
- :/POPS/ or hdd:/__.POPS/<Title>.VCD - bin/cue converted for POPStarter
- PS1_POPSLOADER/ or APPS/PS1_POPSLOADER/
GOALS STILL IN PROGRESS:
- Save Settings Speed-up
- Map settings to mc0:/POPSTARTER/ instead of mc0:/POPSLOADER - to save on icon space and redundancy
- Fix DKWDRV Launching/Graceful Failure
- Fix Exit to BOOT.ELF/Graceful Failure
- Alignment Graphical Changes
- Settings Page Visual Overhaul
- Button Bar Corrections
- Embed Startup Sound for Reliability
- Unify list.icn. to save space between versions
- smbv1
- ilink bdma support
- udpbd bdma support
- cover art fix (:/POPS/.png)
- Custom POPStarter path entry
- Custom DKWDRV path entry
- Graphical fixes
- Navigation button fixes
- Settings page re-design
POPSLoader
POPSLoader is an open-source launcher for POPStarter that is scripted in Lua and built on top of the Enceladus runtime. This repository packages the launcher (POPSLOADER.ELF), runtime Lua scripts, textures, and required modules into a single, portable bundle intended for PlayStation 2 environments such as MMCE and USB mass storage.
POPSLoader was created by El_isra, and this repository is a fork of his work. Endless thanks to Isra for his contributions and open-source projects gifted to the community.
Project lineage: This project is derived from the Enceladus Lua environment and retains its GPLv3 licensing.
What's Changed
- Unify USB pages into a single bounded multi-device USB page by @NathanNeurotic in #243
- Embed UI assets; make BDMA IRX copy optional and non-fatal by @NathanNeurotic in #244
- CI: produce flat APP_POPSLOADER.zip release artifact by @NathanNeurotic in #245
- Fix embedded Lua searcher: Lua-only assets + correct module mapping by @NathanNeurotic in #246
- CI: ship final flat APP_POPSLOADER.zip contents by @NathanNeurotic in #247
- Enforce embedded-only Lua script loading by @NathanNeurotic in #248
- Finalize embedded-only Lua module boot flow by @NathanNeurotic in #249
- Debounce cover art loading to eliminate scroll lag by @NathanNeurotic in #250
- Add embed:/ embedded-asset resolver and unify embedded asset lookup by @NathanNeurotic in #253
- Add libpng interlace handling to embedded PNG decode path by @NathanNeurotic in #254
- Align splash elements and use BG.png for Credits/Settings by @NathanNeurotic in #255
- Premium eased fades for boot and runtime scene transitions by @NathanNeurotic in #256
- Adjust boot pacing: explicit splash/credits holds and premium fade timing by @NathanNeurotic in #258
- Silence Lua logging and remove launch.log writer by @NathanNeurotic in #260
- Remove unused launch.log string from elf loader by @NathanNeurotic in #261
- Add deferred BDMA mode save/apply flow in Profiles by @NathanNeurotic in #262
- Normalize APP_DIR host paths for BDMA source lookup by @NathanNeurotic in #263
- Implement MX4SIO main-menu entry with bounded init retry by @NathanNeurotic in #264
- Fix mass backend refresh, MX4SIO 2-pass init, and BDMA save hang by @NathanNeurotic in #265
- ci: package release as POPSLOADER.zip with split root folders by @NathanNeurotic in #266
- Fix MX4SIO page freeze and embed BDMA assets for USB boot by @NathanNeurotic in #267
- Harden POPSTARTER preflight with bounded backend ensure by @NathanNeurotic in #268
- Make MX4SIO detection init-first and MX4SIO IRX load idempotent by @NathanNeurotic in #272
- Exclude MX4SIO mass index from USB aggregation after MX4SIO init by @NathanNeurotic in #273
- Ensure FAT32 BDMA always removes legacy IRX files by @NathanNeurotic in #275
- Deterministic MX4SIO identity via exact "sdc" backend mapping by @NathanNeurotic in #280
Full Changelog: BETA-6...BETA-7
POPSLoader - Speed Improvements, Device Fixes, Broken Art - FEEDBACK REQUESTED
Requirements:
- :/POPS/or hdd:/__common/POPS/ IOPRP252.IMG , POPS.ELF, POPS.PAK, POPS_IOX.PAK
- :/POPS/ or hdd:/__.POPS/<Title>.VCD - bin/cue converted for POPStarter
- PS1_POPSLOADER/ or APPS/PS1_POPSLOADER/
What's Changed
- Reduce global UI lag by cutting transition/input delays and removing active pad debug trace code by @NathanNeurotic in #148
- Remove runtime boot-device UI navigation locks by @NathanNeurotic in #149
- Fix mass enumeration gaps and remove enumerator side effects by @NathanNeurotic in #150
- Codex-generated pull request by @NathanNeurotic in #151
- Unify USB scenes into GUSB and preserve per-entry mass slot metadata by @NathanNeurotic in #152
- Codex-generated pull request by @NathanNeurotic in #153
- Codex-generated pull request by @NathanNeurotic in #154
- Add USB-only boot-script retry (USB patience) by @NathanNeurotic in #163
- Add mx4sio IRX externs and unconditional load in main init by @NathanNeurotic in #172
- Add boot-time probing to resolve
mass:/to concretemassN:/device paths by @NathanNeurotic in #173 - Normalize argv0 and verify boot_path before chdir/runScript by @NathanNeurotic in #175
- Derive readiness device root from computed boot path by @NathanNeurotic in #174
- Fix MX4SIO page freeze by making MX4 init idempotent on page entry by @NathanNeurotic in #176
Full Changelog: BETA-5...BETA-6
POPSLoader - USB fat32/exfat, MMCE, MX4SIO, and PFS/APA HDD - Beta 5
01/31/2026
- Theme updates
- Stability and Speed Improvements
- MX4SIO full support added
Requirements:
- :/POPS/or hdd:/__common/POPS/ IOPRP252.IMG , POPS.ELF, POPS.PAK, POPS_IOX.PAK
- :/POPS/ or hdd:/__.POPS/<Title>.VCD - bin/cue converted for POPStarter
- PS1_POPSLOADER/ or APPS/PS1_POPSLOADER/
POPSLoader
POPSLoader is an open-source launcher for POPStarter that is scripted in Lua and built on top of the Enceladus runtime. This repository packages the launcher (POPSLOADER.ELF), runtime Lua scripts, textures, and required modules into a single, portable bundle intended for PlayStation 2 environments such as MMCE and USB mass storage.
POPSLoader was created by El_isra, and this repository is a fork of his work. Endless thanks to Isra for his contributions and open-source projects gifted to the community.
Project lineage: This project is derived from the Enceladus Lua environment and retains its GPLv3 licensing.
