Skip to content

Releases: axgdev/UniFrog

v0.5.2

Choose a tag to compare

@axgdev axgdev released this 27 May 20:21
7a4935b

What's Changed

Performance has been restored:

  • Restore cheap framebuffer pan for cores
  • Trim libretro frontend hot paths
  • Prefer RGB565 core framebuffers

Full Changelog: v0.5.1...v0.5.2

v0.5.1

Choose a tag to compare

@axgdev axgdev released this 27 May 19:50
49dae62

What's Changed

Fix heavy auto-save feature
Fix media sometimes not having progress bar
Fix media seeking algorithm
Playing audio displays current play time and total audio time
Remove PMP player, native player plays many formats including MP4, and many audio formats
Remove stale JS frontend code
Quick menu is native, remove js implementation
Add new option for media player as the top app

There are many improvements that need to be done for file navigation.

Full Changelog: v0.5.0...v0.5.1

v0.5.0

Choose a tag to compare

@axgdev axgdev released this 25 May 22:46
96a3eeb

Unifrog v0.5.0

Release notes for changes since v0.4.4.

Highlights

  • More reliable media playback and seeking, especially when skipping through videos.
  • Major GB300 audio routing repairs with fewer playback stalls and fallback failures.
  • Better frontend, theme, and media-browsing behavior across the native UI.

User Notes

  • Install common MuOS .muxthm theme archives through the frontend theme menu; UniFrog includes fallback launcher icons when a theme omits them.
  • For simple color tweaks, place /unifrog/theme.ini on the SD card with the same keys as the default theme.
  • To play a video, browse to the file in Explore and open it. Supported video types include avi, mp4, mov, mkv, ts, m2ts, mpg, mpeg, h264, and 264.
  • The same media browser also opens audio and image files, including mp3, wav, flac, ogg, opus, aac, adts, m4a, jpg, jpeg, png, gif, and bmp.
  • Video seeking is now much steadier and less likely to lose the current frame.
  • Audio playback on GB300 is significantly more dependable.
  • The native frontend loads, navigates, and recovers more cleanly.
  • Media browsing and theme handling are smoother and more consistent.

Technical Notes

  • Updated the unifrog-hcrtos-sdk submodule on main.
  • Media playback and seek handling were reworked across the stack:
    • gated seeks on keyframes,
    • preserved the current frame during fast seeks,
    • stabilized repeated seek recovery and catch-up timing,
    • restored the legacy SF2000 hardware seek path,
    • recovered SF2000 video after auddec conflicts,
    • tuned feed lead, pacing, buffering, and cache behavior,
    • suspended disk logging during media reads,
    • routed software video through vidsink,
    • avoided hcplayer video paths where needed,
    • restored media routing and handoff stability,
    • hardened H264 hardware decode, parser, init, and packet timing paths,
    • aligned HCRTOS FFmpeg ABI and allocation assumptions with the native media code.
  • GB300 audio routing was repaired and instrumented:
    • restored direct SND, I2SO, audsink, and release audio paths,
    • restored hardware auddec playback and AAC clock handling,
    • stabilized fallback behavior when auddec stalls,
    • gated audio handling on real PCM,
    • fixed frame routing and mono output behavior,
    • kept fastboot off speaker pins,
    • coalesced PCM writes,
    • added stronger diagnostics and build-identity tracking for audio control flow.
  • Frontend and theme handling were tightened:
    • recovered the native frontend baseline and launch settings,
    • restored open-with flow, loading feedback, refresh behavior, and pause menu sections,
    • improved launcher and theme layout handling,
    • fixed fullscreen themes, audio fallbacks, row rendering, and value contrast,
    • improved theme extraction, install pressure, font spacing, and navigation diagnostics,
    • refined ROM root and system mapping logic,
    • improved media fallback, ROM core selection, and media diagnostics.
  • Native media startup and diagnostics were made more predictable:
    • stabilized startup and handoff ordering,
    • fixed FFmpeg header and ABI integration,
    • improved media object ordering,
    • reduced warning noise in FFmpeg dependency integration,
    • expanded decode diagnostics and storage-suspend handling,
    • restored KSHM viddec init and extradata paths,
    • fixed native video decoder startup ordering and frame progression.

This release is focused on making playback, seeking, and audio routing dependable for daily use while keeping the native frontend and theme stack usable across SF2000 and GB300 targets

Full Changelog: v0.4.4...v0.5.0

Unifrog v0.4.4

Choose a tag to compare

@axgdev axgdev released this 12 May 04:14
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

Unifrog v0.4.3-fixes-defaultboot

Choose a tag to compare

@axgdev axgdev released this 10 May 03:44
2648150

Same as v0.4.3-fixes plus:
Added a default firmware boot option: UniFrog now uses firmware/boot_asd.cfg to boot a selected .asd firmware by default. Hold any button during power-on to skip that default and boot UniFrog instead.

In UniFrog’s Firmware menu, press SELECT on a firmware to make it the default, or choose the UniFrog default row to clear it.

Full Changelog: v0.4.3-fixes...v0.4.3-fixes-defaultboot

Unifrog v0.4.3-fixes

Choose a tag to compare

@axgdev axgdev released this 10 May 03:41
07f32d1

Same as v0.4.3 plus:

  • Add fast forward menu item to pause quick menu
  • Safe 1-bit mode for loading frontend. Quick SD mode for loading ROMs and Media.

Full Changelog: v0.4.3...v0.4.3-fixes

Unifrog v0.4.3

Choose a tag to compare

@axgdev axgdev released this 08 May 18:01
275a627

Highlights

  • Reworked the frontend into a JavaScript-first app with split modules for navigation, catalog handling, actions, settings, text, views, and theme data.
  • Added the JavaScript quick menu and moved gameplay return flow into the JS frontend.
  • Added native JS2300 frontend support, bytecode warmup/cache paths, and faster ZIP/catalog loading for quicker startup and relaunch.
  • Added a full-screen UniFrog boot logo path, fast early display handoff, and stamped boot logo generation using the current tag or revision.
  • Kept the boot logo visible until the first frontend frame to reduce blank screen time during startup.
  • Added fastboot and early boot tracing for display, payload loading, and handoff diagnostics.
  • Added guarded SD read windows, UHS profile testing, runtime SD diagnostics, full storage sweeps, and safer recovery for experimental SD modes.
  • Moved HCRTOS media support to a native module by default and updated SD-card packaging to include the complete release layout.
  • Improved libretro/core build handling with direct manifests, slimmer sparse checkouts, self-contained patches, dependency pin status/upgrade workflows, and a core smoke check in make quick-check.
  • Tightened CI and local build entry points, including fresh dependency setup, toolchain caching, Alpine/tcc host checks, repository hygiene, and release zip packaging.
  • Removed the normal build dependency on ImageMagick by teaching the boot logo tool to consume the committed PNG directly.

Build And Packaging

  • make quick-check now includes repository hygiene, doctor, core smoke, JS2300, frontend, and boot logo checks.
  • make verify and release SD-card zip generation now exercise the complete firmware, module, frontend, layout, and packaging flow.
  • Dependency pins and upgrade policy are documented and exposed through Makefile targets.
  • The SD-card package now installs firmware, modules, frontend assets, cores, and support files into the release layout.

Notes

  • Default SDK media packaging keeps HCRTOS media as /unifrog/modules/hcrtos-media.bin; use HCRTOS_MEDIA=firmware only for
    fully linked diagnostics.
  • Default SD behavior keeps safe boot settings while allowing guarded faster read windows for frontend startup and runtime ROM reads.
  • The boot logo is generated from assets/boot/unifrog-logo.png and stamped at build time, without requiring magick in CI or local doctor checks.

Full Changelog: https://github.com/axgdev/UniFrog/commits/v0.4.3

v0.4.2

Choose a tag to compare

@axgdev axgdev released this 07 May 04:26
d0c5be2

Users

Faster game library browsing

  • Indexing large SD cards is much faster. The frontend now scans the card from native code and writes the game and media indexes directly, instead of doing the recursive scan in JavaScript.
  • Opening a system with many games should be almost instant after the library has been indexed.
  • The file browser is faster in large folders because directory listings avoid extra filesystem lookups when the device already reports whether an entry is a file or folder.
  • The file browser can return more items per folder before hitting the frontend list cap.

More predictable large-library behavior

  • Very large indexes are now capped deliberately and reported as truncated instead of silently producing index files the frontend cannot fully load.
  • PlayStation track .bin files and legacy stub names continue to be hidden from the game list.

Build quality fixes

  • The bundled libretro core build is quieter and cleaner, with warning fixes applied through local patches where needed.

Developers

Build workflow

  • The main workflow is now:
    • make setup
    • make
    • make quick-check
    • make verify
  • make help and make print-config are available at the root and in major components, so new developers can discover commands and resolved paths without reading the Makefiles.
  • make quick-check is the fast local gate. It runs repository hygiene checks, doctor, JS2300 checks, and frontend checks before the slower full firmware/core verification.
  • make verify remains the handoff gate.
  • make ci-commit-check now goes through the same early checks so CI fails quickly on cheap mistakes.

Repository and docs

  • Stale planning and split-repository docs were removed.
  • Root and component READMEs now focus on the current SDK, JS2300, frontend, and core layout.
  • AGENTS.md now matches the actual build contract and avoids obsolete instructions.
  • docs/README.md and cores/README.md provide lean maps for retained architecture notes and core workflow details.

Runtime and frontend internals

  • JS2300 API version moved from 0.5.0 to 0.6.0.
  • Added JS2300.fs.index(root, gameIndexPath, mediaIndexPath).
  • Native indexing streams directly to temporary index files and atomically renames them on success.
  • Index scan limits are explicit:
    • max depth: 12
    • max files: 65535
    • max dirs: 4096
    • per-index text cap: just under 2 MiB
  • The native scanner mirrors the frontend catalog order and keeps the JS fallback scanner in place.
  • JS2300.fs.list() now allocates its entry buffer on the heap, allowing the list cap to increase from 256 to 1024 without growing runtime stack usage.
  • Directory listing now uses dirent.d_type when available and falls back to stat() only when needed.
  • The frontend builds per-system item arrays while parsing indexes, avoiding a full index walk every time a system is opened.
  • Browser sorting now caches lowercase names and uses a shell sort instead of repeatedly lowercasing inside a quadratic compare loop.

Core warning cleanup

  • External core warning suppressions were narrowed to the cores that need them.
  • Added local patch coverage for Snes9x 2005, FCEUmm, and PMP video warning fixes.
  • Added a zlib deflate compatibility include to avoid the HCRTOS/newlib MIN macro collision without editing fetched dependency sources.

Verification

These checks passed for this release-note scope:

make quick-check
make verify

Full Changelog: v0.4.1...v0.4.2

Unifrog v0.4.1

Choose a tag to compare

@axgdev axgdev released this 06 May 18:55
bff7a3c

UniFrog

UniFrog is a custom frontend/firmware environment for SF2000-family handhelds, with support for SF2000 and GB300 from the same SD card.

This release is still early. Expect bugs, crashes, and rough edges. Do not rely on it for long playthroughs or important saves yet. It is already useful, fast,

Thanks to all of the developers that made this possible: @bnister, @kobilutil, @feuerball11, @madcock, @Trademarked69, @tzubertowski, @angree, and many others that have pushed the limits of what's possible in the SF2000/GB300 devices family.

Installation

  1. Download the UniFrog SD card zip from this release.

  2. Extract the contents directly to the root of your SD card.

  3. If you already have another bisrv.asd on your card, back it up first.

  4. To make another firmware bootable from UniFrog, place its bisrv.asd inside:

    /firmware/
    
  5. Boot the device.

On first boot, open Index Library. UniFrog will scan the SD card, find supported games/media, and classify them by system.

Supported Devices

Tested:

  • SF2000
  • GB300

Possibly compatible but untested:

  • DY19
  • DY12
  • Other SF2000-family devices

If you test one of these devices, please report whether it boots and whether display, audio, controls, and backlight work correctly.

Emulation Cores

UniFrog loads emulator cores from the SD card instead of baking them all into the main firmware binary.

Included cores:

  • gpSP: Game Boy Advance
  • Gambatte: Game Boy / Game Boy Color
  • Gearboy: Game Boy / Game Boy Color
  • Snes9x 2002: Super Nintendo
  • Snes9x 2005: Super Nintendo
  • QPSX: PlayStation
  • FCEUmm: NES / Famicom
  • QuickNES: NES / Famicom
  • Beetle PCE Fast: PC Engine / TurboGrafx-16
  • PicoDrive: Sega Genesis / Mega Drive / Master System / Game Gear

When opening a ROM, UniFrog can ask which compatible core to use. This is useful for systems with multiple emulator options, such as Game Boy or NES.

Game Library

UniFrog includes an indexed game library.

Use Index Library to scan the SD card. The indexer will classify games by system so you can browse them more easily instead of manually navigating folders

The scan is manual by default so the SD card is not stressed on every boot.

File Browser

A traditional file browser is still included.

You can open supported files directly, and UniFrog will suggest compatible cores or players.

Save Support

UniFrog supports:

  • Save states
  • Multiple save slots
  • In-game saves, such as normal .sav-style saves used by games like Pokemon
  • Pause menu actions for saving and loading

This is still experimental. Back up your saves.

Pause Menu

Press the configured pause combo during gameplay to open the quick menu.

From there you can:

  • Resume the game
  • Save state
  • Load state
  • Change save slot
  • Return to the frontend
  • Adjust display mode
  • Toggle fast-forward
  • Change performance/audio options
  • Adjust backlight and other runtime settings

Display Options

Available display modes:

  • Fit
  • Original
  • Stretch

These can be changed from the core options menu.

Performance Options

UniFrog exposes several runtime performance settings.

You can adjust:

  • CPU frequency
  • Graphical Engine frequency
  • Audio on/off
  • Frame skip mode
  • Fast-forward
  • Backlight brightness

Notes:

  • Auto frameskip is available for all cores.
  • Manual frameskip can be set to 0, 1, or 2.
  • Turning audio off can improve performance in heavier games.
  • CPU speed can be adjusted at runtime.
  • The Graphical Engine clock can also be changed, but higher is not always better. In testing, 198 MHz or even 148 MHz can perform better than higher setti
  • gpSP with auto frameskip can run games like Pokemon FireRed reasonably well even at lower CPU frequencies such as 198 MHz.

Backlight Control

Backlight adjustment is supported.

You can lower brightness all the way down to level 1, which makes the device much more comfortable to use at night.

Audio Options

Audio can be disabled for better performance.

Audio gain can also be adjusted, though most users should leave it low or at the default value.

Media Playback

UniFrog can play MP4 videos.

Video playback options include audio control, so videos without audio or videos played silently should avoid unnecessary speaker noise.

Firmware Booting

UniFrog can boot other compatible firmware releases.

Place another firmware file here:

/firmware/bisrv.asd

You can then launch it from the firmware menu.

This is useful if you want to keep stock firmware, multicore, or another setup available on the same SD card.

JavaScript Frontend

The frontend is written in JavaScript.

That means users can modify the interface, create themes, and experiment without rebuilding the whole firmware.

UniFrog also supports running JavaScript scripts from the developer/script menu, though this feature has not been heavily tested yet.

Themeability

The UI is designed to be hackable and themeable.

The goal is to make it possible for users to customize the frontend without needing to understand the lower-level firmware or emulator code.

Compressed ROMs

UniFrog includes support for loading compressed ROMs.

Supported compression/container formats include:

  • .zip
  • .lz4
  • .zstd

Performance varies depending on the core, ROM size, SD card, and compression format.

Known Issues

This is an early release and will have bugs.

Known rough areas:

  • Some cores are still experimental.
  • Some games may crash or hang.
  • PlayStation support is early and may be unstable.
  • JavaScript script support needs more testing.
  • The UI is functional but still evolving.
  • Save states and in-game saves should be backed up regularly.
  • Some performance settings may help one core but hurt another.

Full Changelog: https://github.com/axgdev/UniFrog/commits/v0.4.1