Unifrog v0.4.4
For Users
Faster Startup and Easier Game Browsing
UniFrog no longer scans the whole SD card before the menu appears. The menu should become usable much sooner, especially on cards with large ROM collections.
Games are now discovered when you open a system instead of during boot. The default search roots are /ROMS and the SD-card root, so both layouts work:
/ROMS/gba/Game.gba
/gba/Game.gba
If you want to scan the whole card and build a saved library index, run Developer -> Index Library manually.
Default Firmware Boot Selection
The Firmware screen can now choose which firmware boots by default. Use SELECT on a firmware entry to make it the default boot target. Select the default row again to return the default to UniFrog.
Hold B during power-on to override the configured default and boot UniFrog. This override is filtered more carefully now, so accidental forced-UniFrog boots should be less likely on SF2000 and GB300-style input wiring.
Better In-Game Fast-Forward
The in-game quick menu now has fast-forward speed controls. Open the quick menu with SELECT+START, then use FF speed to cycle:
Off -> 2x -> 4x -> 8x -> 16x
For GBA cores, the quick menu can also adjust frameskip. Fast-forward now keeps the display responsive instead of leaving stale quick-menu pixels on screen.
New GBA Core Option
GBA launches now include gpsp-gbac-prosty, a packaged gpSP multicore fork for Game Boy Advance games. If a GBA game has problems or performance differences with the regular gpSP core, try this alternate core from the launch options.
Audio Improvements
Audio output is quieter and more predictable. UniFrog now uses the confirmed SF2000 mono audio route, hardware mute/volume controls, and fixed 1x software gain. Old saved gain settings are ignored, and the user-facing gain option has been removed.
Video and Media Playback Fixes
MP4 playback has been hardened around loading, display setup, and failure handling. Firmware-linked media playback is the default path. SD-loaded media module builds still package the media module for diagnostics, but they now refuse unsafe MP4 playback instead of entering a known black-screen path.
License Notices Included
The SD-card package now includes:
/unifrog/LICENSE.txt
/unifrog/THIRD_PARTY.md
These files document UniFrog's license and the third-party components included in the distributed package.
For Technical Maintainers
Build and Packaging
- Added
THIRD_PARTY.mdwith the third-party source, binary, SDK, asset, and core-module inventory. frontend-packagenow treatsLICENSEandTHIRD_PARTY.mdas inputs and installs them as/unifrog/LICENSE.txtand/unifrog/THIRD_PARTY.md.checkandfastboot-checkassert that the packaged notice files exist.- Ignored local SD-card package, release zip, and toolchain artifacts.
- The SD-card zip workflow now checks out the triggering ref and verifies
HEAD == GITHUB_SHAbefore building release artifacts.
Fastboot and Firmware Selection
- Added
firmware/boot_asd.cfghandling in fastboot stage-1 for a validated default ASD boot target. - Added frontend firmware-list actions for viewing, setting, and clearing the default firmware.
- Added one-shot handoff priority over button override so menu-launched stock firmware is not cancelled by a still-held input.
- Tightened boot override to B only, with separate SF2000 and GB300 scan paths, saturated-read filtering, stable-poll checks, and trace codes for default config failures.
Frontend Library Discovery
- Removed boot-time and delayed automatic index loading from the normal startup path.
- Added lazy ROM and media folder discovery using configurable
rom_roots. - Added packaged
frontend/defaults/frontend.opt, includingrom_roots,auto_index=0, andfast_sd=uhs25. - System entries avoid stale zero counts when startup indexing is intentionally skipped.
- The visible Auto index setting was removed from the normal settings list.
Libretro Cores and Fast-Forward
- Added the pinned
gpsp_multicorecheckout and build wrapper. - Applied SF2000 gpSP safety hooks to
gpsp_multicore: in-memory content loading, ROM-buffer loading, long-load progress, reset progress, and MIPS dynarec guards. - Renamed the packaged multicore GBA module to
gpsp-gbac-prostyand updated frontend catalog, smoke checks, host option handling, docs, and notices. - Reworked fast-forward host behavior:
- advertises skippable A/V while fast-forward is active,
- bypasses frame pacing,
- suppresses audio status during fast-forward,
- throttles presentation instead of dropping every presented frame,
- exposes speed and frameskip through quick-menu actions,
- maps gpSP fast-forward speed to temporary frameskip intervals.
Audio Runtime
- Added hardware SND volume/mute control before opening the external speaker gate.
- Restored the confirmed one-channel SF2000 mono route and removed user-facing software gain.
- Libretro host now clamps stale launch gain to 1x.
- Media and libretro audio paths refresh the audio platform and I2SO route before enabling output.
- Core-reported sample rates in the safe 8-48 kHz range are used directly instead of forcing all cores through a fixed 32 kHz resampler.
Media Playback
- Default
HCRTOS_MEDIAis firmware-linked again; module mode remains for loader diagnostics becausehcplayer_create()can stall from the SD-loaded module path. - Unsafe media-module playback is blocked with a visible failure path and log entry.
- Media startup now keeps a loading screen visible, closes the frontend framebuffer only at the controlled handoff point, and avoids redrawing the boot logo on return.
- Restored the confirmed SF2000 media geometry: LCD is 320x240, while HCRTOS video output uses the HD plane with a 1920x1080 display rectangle.
- Added on-demand media driver initialization, URI playback fallback, cached read/seek callbacks with
AVSEEK_SIZE, and more detailedhcplayer_*boundary logging.
Diagnostics and Crash Handling
- Added retained exception records in the fastboot handoff memory area for cause, EPC, BADV, and RA.
- Panic paths now log exception details before drawing the panic screen and arm the watchdog before reset.
- Boot logs report and clear retained exception records after log reset.
- JS2300 allocation and runtime alignment diagnostics were added for future MIPS alignment-fault analysis.
Documentation
- Updated README, AGENTS notes, architecture docs, performance notes, hardware findings, frontend docs, libretro core quirks, and cores README for the new boot, discovery, media, audio, fast-forward, and license behaviors.
Verification Noted During Development
The range includes commits verified with combinations of:
make
make quick-check
make verify
make layout-check
make -C cores gpsp_multicore
make -C cores update-core CORE=gpsp_multicore
make HCRTOS_MEDIA=module
make clean && make verifyFull Changelog: v0.4.3...v0.4.4