Repository navigation
260822 bugfix - #12
Merged
Merged
Conversation
The SF2000 branch of the port generated driverlist.h from burn/drv/pre90s only while the build already compiled and linked every driver directory. BurnDrvGetIndexByName therefore failed for anything newer than 1990 and retro_load_game answered 'Cannot load this game' for capcom, neogeo, konami, sega and taito sets reported by v0.6.1 testers. Generate the SF2000 driverlist from all eighteen drv directories like other platforms. The same tester log captured an AdES reset at epc=palette_write+0x88, badv=0x82977dd1 when loading tokib: MemIndex placed Palette right after the one-byte soundlatch member, leaving the UINT32 pointer at an odd address that MIPS32r1 cannot store through. Pad Next to four-byte alignment before each affected UINT16/UINT32 array; a layout sweep found 23 misaligned pointers across 17 drivers, including drivers in dataeast, konami, taito and pst90s that only become reachable with the full driverlist. Verified with make quick-check, make verify, and a frog2k-qemu end-to-end launch of tokib through fbalpha2012: 300 frames rendered including a ROM variant that writes palette entries through tokib_write_word, session returned ret=0 with no exception. Rollback: revert this commit and regenerate cores/patches/fbalpha2012.
unifrog_libretro_input_poll_cb OR'd the physical controls into every
libretro port, so mame2000 and fbalpha2012 saw four identical
controllers: player two mirrored player one exactly as the v0.6.1
tester described ('as if two players are playing at the same time').
Ports above zero now carry only their wireless state.
Add a settings-driven launch hook for end-to-end tests: test_launch_path,
test_launch_core, and test_launch_frames boot straight into a core with a
bounded frame count (reusing the existing max_frames run-loop exit) so
frog2k-qemu can exercise full sessions without UI navigation or manual
input. Keys are read from /unifrog_data/unifrog.ini and never written
back by save_settings.
Verified with make quick-check, host-frontend checks, and the new
qemu-launch-test flow against fbalpha2012 and mame2000.
Rollback: revert this commit.
deutsch, espanol, francais and italiano catalogs were pure ASCII with all diacritics stripped (Anadir, Bateria vacia, Ano, Reglages, Velocita), which is exactly the 'not the correct text' reported for languages with special characters. Restore proper Spanish, French, German and Italian orthography while keeping the 159-key schema identical; tools/language- check.sh still passes. The subsetted Noto-derived UI font had no glyphs for Latin Extended-A Polish characters, so polski strings such as 'wyłączenie' or 'Język' rendered as question marks. Transplant the fourteen missing glyphs as decomposed outlines rescaled from DejaVu Sans and add them to the Unicode cmap; note the source and licensing in THIRD_PARTY.md. Host rendering of Portuguese, Spanish, Vietnamese and Polish through the real TTF path was verified with a raster dump before and after. Rollback: revert 8000 this commit to restore the previous font and catalogs.
make qemu-launch-test TEST_CORE=<id> TEST_ROM=<zip> [TEST_FRAMES=n] builds a 40 MiB FAT32 SD image with mtools, boots bisrv.asd under frog2k-qemu, auto-launches the ROM through the requested core using the test_launch settings, and fails when the core module does not load, the driver rejects the ROM, the session raises an exception, or the dispatch does not return zero. tools/qemu_drive.py drives QMP for screenshots and key injection; tools/qemu_run.sh owns boot/teardown and kills stale emulators by exact process name so pkill cannot match caller command lines that embed the emulator path. The device log only reaches the SD card on flush boundaries (30 s periodic, session end), so the harness waits past the first flush before extracting. This is what validated the FB Alpha 2012 driverlist and alignment fixes end to end. Rollback: revert this commit.
Musashi assumed 32-bit 68K accesses land on even addresses only, but FBalpha2012 MemIndex layouts put some arrays at odd offsets, so ReadLong/FetchLong/WriteLong faulted on the SF2000 (cause=0x80008014, e.g. FBA/dino.zip). Compose longs from word pairs when a&3!=0. Patch 0003 added; 0001/0002 refreshed for offset drift. Handoff: core rebuilt to output/sdcard/unifrog/cores/fbalpha2012.bin; verified via tools/qemu_launch_test.sh (tokib 240 frames ret=0, no exceptions).
Launcher tiles and footer hints were static English strings, so non-English builds showed untranslated UI. Add a label-translator hook to the LVGL layer (unifrog_frontend_lvgl_set_label_translator), wire the frontend state catalog into it from unifrog_frontend_app_init, and wrap launch tiles, footer hints and status strings in tr(). Raise FRONTEND_I18N_MAX 192->256 and i18n_key depth 40->64 (longest key is 46 chars) and match the limit in tools/language-check.sh. Extend all 8 catalogs with ~91 shared keys so every language ships an identical 250-key set. Handoff: BUILD/LANGUAGE_FILES passes; QEMU boot with language_name=polski logs entries=250 and a clean 180-frame fceumm session.
12px grayscale glyphs read fuzzy on the SF2000 panel. Bake at 13px and boost coverage alpha by 1.5x (saturating) in both the baked-ASCII and unicode draw paths so strokes render crisp without hard aliasing. Layout is font_height-driven, so the 1px bump needs no call-site changes. Handoff: host render harness shows crisper Polish/Portuguese text; make verify 106 OK.
Two-column rows (label 126px + value 142px) truncated labels to ~12 characters at the current font on the 320px panel. Merge the value into the row text ('Label: value') and give the text the full row width, with marquee on the focused row. Also drop the launcher tile grid so the home menu is always a single-column list regardless of theme [grid] schemes; theme wallpaper and icons still apply. Handoff: verified under frog2k-qemu - launcher, Explore and Config render one column; artwork pane unaffected.
Box art was hidden by default (UNIFROG_DEFAULT_BOXART_HIDDEN=1), so game thumbnails appeared missing; default to shown. muOS artwork packs file art under catalogue folders named after full system names (Nintendo SNES-SFC), while ROM folders use short names, so add a short-name to catalogue alias table and try both spellings when expanding {system} templates (verified SNES/GBA against MUOS/info/catalogue on-device). Handoff: QEMU run loads box+preview from MUOS/info/catalogue/Nintendo SNES-SFC; docs/game-artwork.md documents the convention for end users.
End-user guide for game thumbnails: muOS catalogue convention (antiKk/muOS-Artwork compatible), UniFrog-native unifrog_data/artwork layout, skraper/beside layouts, naming rules, hiding box art, and supported image limits.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR addresses several issues reported during SF2000 v0.6.1 testing, primarily around FB Alpha 2012 compatibility, controller input, localization, UI readability, artwork discovery, and end-to-end test coverage.
The main changes are:
FB Alpha 2012 compatibility
Register the complete driver set
The SF2000 FB Alpha 2012 port generated
driverlist.husing onlyburn/drv/pre90s, despite the build compiling and linking drivers from all 18 driver directories.As a result,
BurnDrvGetIndexByNamecould not resolve newer sets andretro_load_gamereturnedCannot load this gamefor reported Capcom, Neo Geo, Konami, Sega, Taito, and other titles.The SF2000 driver list is now generated from all FB Alpha 2012 driver directories, matching the behavior of the other platforms.
Fix misaligned driver arrays
Tester logs also exposed an AdES reset while loading
tokib:epc=palette_write+0x88, badv=0x82977dd1Some
MemIndexlayouts placedUINT16/UINT32arrays immediately after byte-sized members, producing addresses that the SF2000's MIPS32r1 CPU cannot safely access.Affected layouts are now padded to the required alignment. A layout sweep found 23 misaligned pointers across 17 drivers, including Data East, Konami, Taito, and post-90s drivers that become reachable once the complete driver list is enabled.
Support even-aligned 68000 long accesses
Musashi's interface assumed 32-bit 68000 accesses were 4-byte aligned. FB Alpha 2012 can place data at addresses that are even but not 4-byte aligned, resulting in SF2000 exceptions such as those seen with
dino.zip.ReadLong,FetchLong, andWriteLongnow compose long accesses from word pairs whena & 3 != 0.The FB Alpha 2012 patch series has been refreshed accordingly.
Controller input
Physical SF2000 controls were previously OR'd into every libretro controller port.
This made cores such as MAME2000 and FB Alpha 2012 see multiple identical controllers, causing player two to mirror player one.
Local controls are now restricted to libretro port 0. Higher ports contain only their wireless controller state.
End-to-end QEMU launch testing
A new bounded launch path makes it possible to test complete core sessions under
frog2k-qemuwithout navigating the UI manually.The frontend recognizes three test-only settings:
test_launch_pathtest_launch_coretest_launch_framesThese are loaded from
/unifrog_data/unifrog.iniand are deliberately not persisted bysave_settings.A new harness can run a complete ROM/core session with:
make qemu-launch-test TEST_CORE=<id> TEST_ROM=<zip> [TEST_FRAMES=n]The harness:
bisrv.asdunder frog2k-qemu.This provides repeatable end-to-end coverage for failures that host-only tests cannot reproduce.
Localization and font rendering
The German, Spanish, French, and Italian catalogs had previously had their diacritics stripped. Proper localized spelling and accents have been restored while retaining the catalog schema.
The UI font also lacked several Latin Extended-A glyphs required by Polish. Fourteen missing glyphs have been added as decomposed/rescaled outlines from DejaVu Sans, with source and licensing information recorded in
THIRD_PARTY.md.Previously static English launcher labels, footer hints, loading/status strings, and related UI text are now routed through the translation catalog. All eight catalogs have been expanded to the same 250-key schema.
Supporting i18n limits were increased to accommodate the expanded keys:
FRONTEND_I18N_MAX: 192 → 256tools/language-check.shhas been updated to match.UI readability
TTF rendering has been adjusted for the SF2000's 320px display:
This produces larger, crisper text without requiring layout-specific font-size changes.
Menus have also moved away from the previous two-column label/value layout. Values are now rendered inline as:
Label: valueThis gives menu text the full row width, with marquee behavior on the focused row.
The launcher likewise uses a single-column list regardless of theme grid settings. Theme wallpapers and icons remain supported, and the artwork pane is unaffected.
Game artwork
Box art is now visible by default.
Artwork lookup also understands the full system names used by muOS catalogue packs. ROM directories commonly use short system names while muOS artwork packs use names such as
Nintendo SNES-SFC, so artwork expansion now tries both the ROM system name and its catalogue alias.This was verified with SNES and GBA artwork using the on-device
MUOS/info/cataloguestructure.A new artwork guide documents:
unifrog_data/artworklayouts.Verification
The changes were exercised through a combination of host checks and real SF2000-target QEMU sessions, including:
make quick-checkmake verify— 106 checks passingBUILD/LANGUAGE_FILEStools/language-check.shfceummsessiontokibsessions, including 240/300-frame runs withret=0and no exceptionstokibROM variant exercising palette writes throughtokib_write_wordRollback
The changes are separated by concern and can be reverted individually if necessary. FB Alpha 2012 generated patches/core artifacts should be regenerated after reverting changes to its driver list, alignment handling, or Musashi interface.