Skip to content

Unifrog v0.4.4

Choose a tag to compare

@axgdev axgdev released this 12 May 04:14
· 144 commits to main since this release
5121dfa

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.md with the third-party source, binary, SDK, asset, and core-module inventory.
  • frontend-package now treats LICENSE and THIRD_PARTY.md as inputs and installs them as /unifrog/LICENSE.txt and /unifrog/THIRD_PARTY.md.
  • check and fastboot-check assert 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_SHA before building release artifacts.

Fastboot and Firmware Selection

  • Added firmware/boot_asd.cfg handling 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, including rom_roots, auto_index=0, and fast_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_multicore checkout 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-prosty and 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_MEDIA is firmware-linked again; module mode remains for loader diagnostics because hcplayer_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 detailed hcplayer_* 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 verify

Full Changelog: v0.4.3...v0.4.4