From 4c1caea621b030cd977a75f59250d92988f62c09 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 24 Mar 2026 09:33:06 +0100 Subject: [PATCH] feat: re-profile 40 emulators from fbalpha2012 to holani --- database.json | 22 +++- emulators/fbalpha2012.yml | 76 ++++++++++++-- emulators/fbalpha2012_cps2.yml | 33 +++--- emulators/fbalpha2012_cps3.yml | 7 +- emulators/fbalpha2012_neogeo.yml | 4 +- emulators/fbneo.yml | 45 +------- emulators/fbneo_cps12.yml | 2 +- emulators/fbneo_neogeo.yml | 41 +------- emulators/fceumm.yml | 42 +++----- emulators/ffmpeg.yml | 15 ++- emulators/fixgb.yml | 37 +++---- emulators/fixnes.yml | 15 +-- emulators/flycast.yml | 162 +++++++++++------------------ emulators/flycast_gles2.yml | 4 +- emulators/fmsx.yml | 11 +- emulators/freechaf.yml | 12 +-- emulators/freeintv.yml | 59 +++-------- emulators/freej2me.yml | 35 ++----- emulators/frodo.yml | 12 +-- emulators/fsuae.yml | 136 ++++++++++++++++++------ emulators/fuse.yml | 54 +++++++++- emulators/galaksija.yml | 20 +--- emulators/gam4980.yml | 42 +++----- emulators/gambatte.yml | 53 ++++------ emulators/gearboy.yml | 40 ++++--- emulators/gearcoleco.yml | 41 +++----- emulators/geargrafx.yml | 114 +++++++------------- emulators/gearlynx.yml | 8 +- emulators/gearsystem.yml | 17 +-- emulators/genesis_plus_gx.yml | 14 +-- emulators/genesis_plus_gx_wide.yml | 24 +++-- emulators/geolith.yml | 2 +- emulators/gme.yml | 10 +- emulators/gong.yml | 9 +- emulators/gpsp.yml | 46 ++++---- emulators/handy.yml | 44 +++++--- emulators/hatari.yml | 7 +- emulators/hbmame.yml | 36 ++----- emulators/higan_sfc.yml | 61 +++++++---- emulators/higan_sfc_balanced.yml | 58 ++++++----- emulators/holani.yml | 11 +- 41 files changed, 708 insertions(+), 773 deletions(-) diff --git a/database.json b/database.json index 7215e2af..1b765545 100644 --- a/database.json +++ b/database.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-03-23T14:00:42Z", + "generated_at": "2026-03-23T20:32:26Z", "total_files": 6733, "total_size": 5288642642, "files": { @@ -88619,6 +88619,24 @@ "dmg0_rom.bin": [ "1db57a1e8b6e4096f811587f9eab0c6675fd9755" ], + "dc_flash_wb.bin": [ + "72c65f2a11ee7b72b77b9945187b7a332632e14a" + ], + "dc_flash.bin.bin": [ + "72c65f2a11ee7b72b77b9945187b7a332632e14a" + ], + "naomi_bios.bin": [ + "6d27d71aec4dfba98f66316ae74a1426d567698a" + ], + "naomi_boot.bin.bin": [ + "6d27d71aec4dfba98f66316ae74a1426d567698a" + ], + "naomi_bios.bin.bin": [ + "6d27d71aec4dfba98f66316ae74a1426d567698a" + ], + "epr-21576d.bin": [ + "6d27d71aec4dfba98f66316ae74a1426d567698a" + ], "cgb0_boot.bin": [ "1293d68bf9643bc4f36954c1e80e38f39864528d" ], @@ -108934,6 +108952,8 @@ "b4f14e58030ed40fff2dc312b58ea4440bdf8cc5", "c65592330c9dd84011151daed52f9aec926b7e56", "1db57a1e8b6e4096f811587f9eab0c6675fd9755", + "72c65f2a11ee7b72b77b9945187b7a332632e14a", + "6d27d71aec4dfba98f66316ae74a1426d567698a", "1293d68bf9643bc4f36954c1e80e38f39864528d", "369e6eb5e0c975eaa52a4a3f6ee07b2a3c3c16de", "f282b3aaf98f8423dab7d77f1aa0192be630f2fb", diff --git a/emulators/fbalpha2012.yml b/emulators/fbalpha2012.yml index 5e6e6fde..f8e38ad7 100644 --- a/emulators/fbalpha2012.yml +++ b/emulators/fbalpha2012.yml @@ -3,7 +3,7 @@ type: libretro core_classification: frozen_snapshot source: "https://github.com/libretro/fbalpha2012" upstream: "https://www.fbalpha.com" -profiled_date: "2026-03-19" +profiled_date: "2026-03-23" core_version: "v0.2.97.29" display_name: "Arcade (FB Alpha 2012)" cores: @@ -19,7 +19,6 @@ systems: notes: | Frozen snapshot of Final Burn Alpha v0.2.97.29 (circa 2012), full version. Supports CPS-1, CPS-2, CPS-3, Neo Geo, PGM, Sega, Cave, Toaplan, and more. - Exists for RAM-constrained platforms. Most users should use FBNeo. Multiple arcade systems have BIOS ROMs marked BRF_BIOS in source: @@ -46,15 +45,80 @@ notes: | All BIOS files are part of their respective game ROM set ZIPs (arcade standard). None are standalone system directory files. The .info note "BIOS files must be inside the ROM directory" refers to the ROM directory containing the game ZIPs, - which already include their BIOS — no separate action needed by the user. + which already include their BIOS. - ROM path: g_rom_dir from content path. g_system_dir set but unused. - Extensions: iso|zip|7z. need_fullpath=true, block_extract=true. + ROM path: g_rom_dir from content path. + Sample path: g_system_dir/fba2012/samples/ (samples.cpp:248). + Hiscore path: g_save_dir/hiscore.dat (hiscore.cpp:411). files: - name: "hiscore.dat" + description: "High score persistence database" required: false - note: "High score database, loaded from save directory" source_ref: "svn-current/trunk/src/burn/hiscore.cpp:411" + note: "Loaded from save directory (g_save_dir). Gated by EnableHiscores core option and per-game BDF_HISCORE_SUPPORTED flag." + + - name: "dkong.zip" + path: "fba2012/samples/dkong.zip" + description: "Donkey Kong audio samples" + required: false + category: game_data + source_ref: "svn-current/trunk/src/burn/snd/samples.cpp:248,262" + note: "WAV samples for Donkey Kong and clones (dkongo, dkongj, dkongjo, dkongjo1, dkongf, dkongx, dkongx11)" + + - name: "dkongjr.zip" + path: "fba2012/samples/dkongjr.zip" + description: "Donkey Kong Jr audio samples" + required: false + category: game_data + source_ref: "svn-current/trunk/src/burn/snd/samples.cpp:248,262" + note: "WAV samples for Donkey Kong Jr and clones (dkongjrj, dkongjnrj, dkongjrb, jrking, dkingjr, dkongjre)" + + - name: "galaga.zip" + path: "fba2012/samples/galaga.zip" + description: "Galaga audio samples" + required: false + category: game_data + source_ref: "svn-current/trunk/src/burn/snd/samples.cpp:248,262" + note: "WAV samples for Galaga and clones (galagao, galagamw, galagamk, galagamf, gallag)" + + - name: "rallyx.zip" + path: "fba2012/samples/rallyx.zip" + description: "Rally-X audio samples" + required: false + category: game_data + source_ref: "svn-current/trunk/src/burn/snd/samples.cpp:248,262" + note: "WAV samples for Rally-X and clones (rallyxa, rallyxm, rallyxmr, nrallyx)" + + - name: "ghox.zip" + path: "fba2012/samples/ghox.zip" + description: "Ghox audio samples" + required: false + category: game_data + source_ref: "svn-current/trunk/src/burn/snd/samples.cpp:248,262" + note: "WAV samples for Ghox and Ghox (joystick). Substitutes undumped MCU sound." + + - name: "fireshrk.zip" + path: "fba2012/samples/fireshrk.zip" + description: "Fire Shark / Same! Same! Same! audio samples" + required: false + category: game_data + source_ref: "svn-current/trunk/src/burn/snd/samples.cpp:248,262" + note: "WAV samples for Fire Shark and clones (fireshrkd, fireshrkdh, samesame, samesame2)" + + - name: "tekipaki.zip" + path: "fba2012/samples/tekipaki.zip" + description: "Teki Paki audio samples" + required: false + category: game_data + source_ref: "svn-current/trunk/src/burn/snd/samples.cpp:248,262" + + - name: "vimana.zip" + path: "fba2012/samples/vimana.zip" + description: "Vimana audio samples" + required: false + category: game_data + source_ref: "svn-current/trunk/src/burn/snd/samples.cpp:248,262" + note: "WAV samples for Vimana and clones (vimanan, vimanaj)" exclusion_note: "All BIOS ROMs (Neo Geo, PGM, CPS-3, Sega) are inside game ROM set ZIPs, not standalone system files. neogeo.zip is a parent ROM set loaded automatically by the emulator when a Neo Geo game is started." diff --git a/emulators/fbalpha2012_cps2.yml b/emulators/fbalpha2012_cps2.yml index 21cf75fb..76b0e5ee 100644 --- a/emulators/fbalpha2012_cps2.yml +++ b/emulators/fbalpha2012_cps2.yml @@ -3,7 +3,7 @@ type: libretro core_classification: frozen_snapshot source: "https://github.com/libretro/fbalpha2012_cps2" upstream: "https://www.fbalpha.com" -profiled_date: "2026-03-19" +profiled_date: "2026-03-23" core_version: "v0.2.97.28" display_name: "Arcade (FB Alpha 2012 CPS-2)" cores: @@ -13,32 +13,25 @@ systems: notes: | Frozen snapshot of Final Burn Alpha v0.2.97.28 (circa 2012), CPS-2 only. - Exists for RAM-constrained platforms (3DS, embedded). Most users should use FBNeo. + Exists for RAM-constrained platforms (3DS, embedded). CPS-2 has no system BIOS. Each game's ROM set is self-contained: 68000 program ROMs + Z80 sound program + GFX ROMs + QSound samples. + Zero BRF_BIOS entries in entire codebase. No BRF_OPT entries either + (PLD references stripped from this CPS-2-only build). - QSound is emulated in software (qs_c.c:QscInit, panning table + DSP emulation). - No external QSound DSP ROM (dl-1425.bin) needed — unlike MAME, FBA emulates - the QSound chip directly without requiring the DSP program ROM. + QSound emulated in software (qs_c.c). No external QSound DSP ROM needed. + All audio data loaded from game ROM ZIP. - Z80 sound program loaded from game ROM set into CpsZRom buffer (cps.c:451, - BurnLoadRom). QSound samples loaded into CpsQSam. All from the game ZIP. + ROMs loaded from content directory (g_rom_dir, libretro.cpp:969). + g_system_dir used only for hiscore.dat (hiscore.c:228-232). - Board PLDs (buf1, ioa1, prg2, rom1) referenced via A_BOARD_QSOUND_PLDS - macro, all marked BRF_OPT. GAL/PAL dumps for hardware preservation only. - Zero BRF_BIOS entries in entire codebase. - - ROM path: ROMs loaded from content directory (g_rom_dir, libretro.cpp). - g_system_dir is set (line 988) but never used for any file loading. - - The .info note "BIOS files must be inside the ROM directory" is misleading — - there are no BIOS files for CPS-2. Generic note across all FBA cores. - - need_fullpath=true, block_extract=true, extensions=zip. + Hiscore support gated by fba2012cps2_hiscores core option + (libretro.cpp:561-563) and per-game BDF_HISCORE_SUPPORTED flag. files: - name: "hiscore.dat" + description: "High score persistence database" required: false - note: "High score database, loaded from save directory" - source_ref: "src/burn/hiscore.c" + source_ref: "src/burn/hiscore.c:228-232" + note: "Loaded from /fbalpha2012/hiscore.dat" diff --git a/emulators/fbalpha2012_cps3.yml b/emulators/fbalpha2012_cps3.yml index e7128833..6512a8c3 100644 --- a/emulators/fbalpha2012_cps3.yml +++ b/emulators/fbalpha2012_cps3.yml @@ -3,7 +3,7 @@ type: libretro core_classification: frozen_snapshot source: "https://github.com/libretro/fbalpha2012_cps3" upstream: "https://www.fbalpha.com" -profiled_date: "2026-03-19" +profiled_date: "2026-03-23" core_version: "v0.2.97.29" display_name: "Arcade (FB Alpha 2012 CPS-3)" cores: @@ -52,8 +52,9 @@ notes: | files: - name: "hiscore.dat" + description: "High score persistence database" required: false - note: "High score database, loaded from save directory" - source_ref: "svn-current/trunk/src/burn/hiscore.cpp:411" + source_ref: "svn-current/trunk/src/burn/hiscore.cpp:116-118" + note: "Loaded from save directory (g_save_dir)" exclusion_note: "CPS-3 BIOS ROMs (SH-2 flash, 18 variants) are part of each game's ROM set ZIP archive, not standalone system files. Users obtain them as part of the arcade ROM set, not separately." diff --git a/emulators/fbalpha2012_neogeo.yml b/emulators/fbalpha2012_neogeo.yml index d41fa908..4a11cd25 100644 --- a/emulators/fbalpha2012_neogeo.yml +++ b/emulators/fbalpha2012_neogeo.yml @@ -3,7 +3,7 @@ type: libretro core_classification: frozen_snapshot source: "https://github.com/libretro/fbalpha2012_neogeo" upstream: "https://www.fbalpha.com" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "v0.2.97.29" display_name: "Arcade (FB Alpha 2012 Neo Geo)" cores: @@ -34,7 +34,7 @@ notes: | neodebug.bin 0x698ebb7d Development Kit sp-1v1_3db8c.bin 0x162f0ebe Deck ver. 6 (Git Ver 1.3) uni-bios_4_0.rom 0xa7aab458 Universe BIOS 4.0 - (+ Universe BIOS 1.0-3.3, 15 versions) + (+ 14 more Universe BIOS variants, versions 1.0-3.3) neopen.sp1 0xcb915e76 NeoOpen BIOS v0.1 beta System ROMs (always required): diff --git a/emulators/fbneo.yml b/emulators/fbneo.yml index baf7f54f..2ad33fae 100644 --- a/emulators/fbneo.yml +++ b/emulators/fbneo.yml @@ -4,7 +4,7 @@ core_classification: official_port source: "https://github.com/libretro/FBNeo" upstream: "https://github.com/finalburnneo/FBNeo" logo: "https://raw.githubusercontent.com/finalburnneo/FBNeo/master/projectfiles/xcode/Emulator/Assets.xcassets/AppIcon.appiconset/icon_512.png" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "v1.0.0.03" display_name: "Arcade (FinalBurn Neo)" cores: @@ -101,6 +101,7 @@ files: source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1606" - name: "sp-u2.sp1" + aliases: ["usa_2slt.bin"] archive: neogeo.zip system: snk-neogeo-mvs required: false @@ -418,48 +419,6 @@ files: note: "Zoom lookup table" source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1654" - # ------------------------------------------------------- - # Trackball BIOS (for irrmaze) - # ------------------------------------------------------- - - name: "236-bios.sp1" - archive: neogeo.zip - system: snk-neogeo-mvs - required: false - size: 131072 - crc32: "853e6b96" - note: "Trackball BIOS / Asia MV1B 263" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1744" - - - name: "236-bios_japan_hack.sp1" - archive: neogeo.zip - system: snk-neogeo-mvs - required: false - size: 131072 - crc32: "02bf4426" - note: "Trackball BIOS / Japan (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1745" - - # ------------------------------------------------------- - # Neo Geo PCB BIOS (for ms5pcb, svcpcb, kf2k3pcb games) - # ------------------------------------------------------- - - name: "sp-4x.sp1" - archive: neogeo.zip - system: snk-neogeo-mvs - required: false - size: 524288 - crc32: "b4590283" - note: "PCB BIOS for Metal Slug 5 PCB and SVC Chaos PCB" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1791" - - - name: "spj.sp1" - archive: neogeo.zip - system: snk-neogeo-mvs - required: false - size: 524288 - crc32: "148dd727" - note: "PCB BIOS for KOF 2003 PCB" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1879" - # ------------------------------------------------------- # Neo Geo CDZ (neocdz.zip) # ------------------------------------------------------- diff --git a/emulators/fbneo_cps12.yml b/emulators/fbneo_cps12.yml index 70a11932..91e54503 100644 --- a/emulators/fbneo_cps12.yml +++ b/emulators/fbneo_cps12.yml @@ -3,7 +3,7 @@ type: libretro core_classification: official_port source: "https://github.com/libretro/FBNeo" upstream: "https://github.com/finalburnneo/FBNeo" -profiled_date: "2026-03-22" +profiled_date: "2026-03-23" core_version: "v1.0.0.03" display_name: "Arcade (FinalBurn Neo) (CPS-1 / CPS-2)" cores: diff --git a/emulators/fbneo_neogeo.yml b/emulators/fbneo_neogeo.yml index addced59..9c015853 100644 --- a/emulators/fbneo_neogeo.yml +++ b/emulators/fbneo_neogeo.yml @@ -3,7 +3,7 @@ type: libretro core_classification: official_port source: "https://github.com/libretro/FBNeo" upstream: "https://github.com/finalburnneo/FBNeo" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "v1.0.0.03" display_name: "Arcade (FinalBurn Neo) (Neo-Geo)" cores: @@ -70,6 +70,7 @@ files: source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1606" - name: "sp-u2.sp1" + aliases: ["usa_2slt.bin"] archive: neogeo.zip system: snk-neogeo-mvs required: false @@ -358,25 +359,6 @@ files: note: "NeoOpen BIOS v0.1 beta" source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1645" - # Trackball BIOS - - name: "236-bios.sp1" - archive: neogeo.zip - system: snk-neogeo-mvs - required: false - size: 131072 - crc32: "853e6b96" - note: "Trackball BIOS / Asia MV1B 263" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1744" - - - name: "236-bios_japan_hack.sp1" - archive: neogeo.zip - system: snk-neogeo-mvs - required: false - size: 131072 - crc32: "02bf4426" - note: "Trackball BIOS / Japan (hack)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1745" - # Neo Geo shared ROMs (always required) - name: "sm1.sm1" archive: neogeo.zip @@ -405,25 +387,6 @@ files: note: "Zoom lookup table" source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1654" - # PCB BIOS - - name: "sp-4x.sp1" - archive: neogeo.zip - system: snk-neogeo-mvs - required: false - size: 524288 - crc32: "b4590283" - note: "PCB BIOS" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1791" - - - name: "spj.sp1" - archive: neogeo.zip - system: snk-neogeo-mvs - required: false - size: 524288 - crc32: "148dd727" - note: "PCB BIOS (Japan)" - source_ref: "src/burn/drv/neogeo/d_neogeo.cpp:1879" - # ------------------------------------------------------- # Neo Geo CDZ (neocdz.zip) # ------------------------------------------------------- diff --git a/emulators/fceumm.yml b/emulators/fceumm.yml index 14c27095..9259893e 100644 --- a/emulators/fceumm.yml +++ b/emulators/fceumm.yml @@ -1,8 +1,9 @@ emulator: FCEUmm type: libretro -core_classification: pure_libretro +core_classification: community_fork source: "https://github.com/libretro/libretro-fceumm" -profiled_date: "2026-03-21" +upstream: "https://sourceforge.net/projects/fceumm/" +profiled_date: "2026-03-23" core_version: "SVN" display_name: "Nintendo - NES / Famicom (FCEUmm)" cores: @@ -10,18 +11,14 @@ cores: systems: [nintendo-nes, nintendo-fds] notes: | - FCEUmm (FCE Ultra mappers modified) is a NES/Famicom emulator. - NES cartridge games need no BIOS. Famicom Disk System games require - the FDS BIOS ROM (disksys.rom, 8 KB) loaded from the system directory. - Game Genie emulation is an optional core feature (disabled by default) - that requires gamegenie.nes in the system directory. - An optional external palette file (nes.pal, 192 bytes, 64 RGB triplets) - can override the built-in NES palette when the core option is set to Custom. - NstDatabase.xml is NOT used by FCEUmm (that is Nestopia's database). + FCEUmm (FCE Ultra mappers modified) is a NES/Famicom emulator forked from + FCEU Ultra by CaH4e3. FDS games require the FDS BIOS ROM (disksys.rom). + Game Genie emulation requires gamegenie.nes when the core option is enabled. + An external palette file (nes.pal) overrides the built-in palette when the + core option is set to Custom. - File path construction: src/general.c FCEU_MakeFName() joins the - system directory (RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY) with each - filename directly - no subdirectories. + File path construction: src/general.c FCEU_MakeFName() joins the system + directory with each filename directly - no subdirectories. files: # --- Famicom Disk System BIOS (required for FDS games) --- @@ -30,29 +27,22 @@ files: description: "FDS BIOS ROM" required: true size: 8192 - md5: "ca30b50f880eb660a320674ed365ef7a" - sha1: "57fe1bdee955bb48d357e463ccbf129496930b62" + validation: [size] source_ref: "src/fds.c:636-667 (FDSLoad), src/general.c:64-66 (FCEUMKF_FDSROM)" - notes: "Loaded at 0xE000, mapped as 8 KB PRG bank 0. Load fails with error if missing or short read." + notes: "Loaded at 0xE000, mapped as 8 KB PRG bank 0. Load fails if missing or short read." # --- Game Genie ROM (optional, core option fceumm_game_genie) --- - name: "gamegenie.nes" system: nintendo-nes description: "Game Genie add-on cartridge ROM" required: false - size: 24592 - md5: "7f98d77d7a094ad7d069b74bd553ec98" - sha1: "f430a0d752a9fa0c7032db8131f9090d18f71779" - source_ref: "src/cart.c:351-389 (OpenGenie), src/general.c:60-62 (FCEUMKF_GGROM)" - notes: "iNES format ROM (4 KB PRG + 256 bytes CHR). Core option disabled by default. Does not apply to FDS or arcade content." + source_ref: "src/cart.c:344-398 (FCEU_OpenGenie), src/general.c:60-62 (FCEUMKF_GGROM)" + notes: "iNES format ROM (4 KB PRG + 256 bytes CHR). Core option disabled by default. Only applies to cartridge games." # --- Custom palette (optional, core option fceumm_palette) --- - name: "nes.pal" system: nintendo-nes description: "External NES color palette" required: false - size: 192 - md5: "aaf3666e4ed478e2964b46d6a7aa27ad" - sha1: "37027d92e1015b82a7dc5c43e9f1649a961577ab" - source_ref: "src/general.c:68-70 (FCEUMKF_PALETTE), src/drivers/libretro/libretro.c:1791" - notes: "64 RGB triplets (64 x 3 bytes). Only loaded when palette core option is set to Custom. Multiple valid palettes exist." + source_ref: "src/palette.c:170-200 (FCEU_LoadGamePalette), src/general.c:68-70 (FCEUMKF_PALETTE), src/drivers/libretro/libretro.c:1789-1798" + notes: "RGB triplets (64 standard or 512 with de-emphasis). Only loaded when palette core option is set to Custom." diff --git a/emulators/ffmpeg.yml b/emulators/ffmpeg.yml index fbff5924..01acac27 100644 --- a/emulators/ffmpeg.yml +++ b/emulators/ffmpeg.yml @@ -1,7 +1,9 @@ emulator: FFmpeg type: utility -source: "https://github.com/libretro/RetroArch" -profiled_date: "2026-03-18" +core_classification: pure_libretro +source: "https://github.com/libretro/FFmpeg" +upstream: "https://www.ffmpeg.org/" +profiled_date: "2026-03-23" core_version: "Git" display_name: "FFmpeg" cores: @@ -9,11 +11,8 @@ cores: systems: [] notes: | - FFmpeg core is a media player built into RetroArch using libavcodec, - libavformat, and libswscale. Plays video and audio files directly - within the RetroArch interface. - - No BIOS or system files required. Codec support depends on the - FFmpeg libraries linked at build time. + Media player core using libavcodec, libavformat, and libswscale. + Plays video and audio files within RetroArch with an audio visualizer. + No external files required. Codecs are linked at build time. files: [] diff --git a/emulators/fixgb.yml b/emulators/fixgb.yml index c1ad0818..b884e3c2 100644 --- a/emulators/fixgb.yml +++ b/emulators/fixgb.yml @@ -1,8 +1,9 @@ emulator: fixGB type: libretro -core_classification: pure_libretro +core_classification: official_port source: "https://github.com/libretro/fixGB" -profiled_date: "2026-03-21" +upstream: "https://github.com/FIX94/fixGB" +profiled_date: "2026-03-23" core_version: "Alpha v0.8.2" display_name: "Nintendo - Game Boy / Color (fixGB)" cores: @@ -11,37 +12,27 @@ systems: - nintendo-gbc notes: | - fixGB is a Game Boy / Game Boy Color emulator by FIX94, currently at - Alpha v0.8.2. It supports .gb, .gbc, and .gbs (Game Boy Sound) files. + Game Boy / Game Boy Color emulator by FIX94. Supports .gb, .gbc, and + .gbs (Game Boy Sound) files. FIX94 maintains both standalone and + libretro versions in the same upstream repo. - The core optionally loads "gbc_bios.bin" (CGB boot ROM) from the - system directory. In the libretro port, doOpenCGBBootrom() in - libretro.c:246-254 resolves the path via - RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY + "/gbc_bios.bin". + Optionally loads gbc_bios.bin from the system directory. Validates + file size (>= 0x900 bytes), reads the first 0x900 bytes into + memCGBBootrom[], sets cgbBootromEnabled. Enables the GBC startup + animation and palette selection for DMG games. - memInitCGBBootrom() in mem.c:567-586 validates the file: it must be - at least 0x900 (2304) bytes. If present, 0x900 bytes are read into - memCGBBootrom[] and cgbBootromEnabled is set to true. The boot ROM - plays the Game Boy Color startup animation before handing off to the - game. - - If the file is missing or too small, the core skips the boot sequence - and starts games directly. The BIOS is optional -- games run fine - without it. - - Despite the core name suggesting general Game Boy support, the only - BIOS file referenced is the GBC boot ROM. There is no DMG (original - Game Boy) boot ROM support in the source. + Without the boot ROM, the core skips the boot sequence and starts + games directly. No DMG boot ROM support in the source. files: - # --- GBC boot ROM (optional, enables startup animation) --- - name: "gbc_bios.bin" system: nintendo-gbc description: "Game Boy Color (CGB-001) boot ROM" required: false hle_fallback: true size: 2304 + validation: [size] md5: "dbfce9db9deaa2567f6a84fde55f9680" sha1: "1293d68bf9643bc4f36954c1e80e38f39864528d" source_ref: "libretro/libretro.c:246-254 (doOpenCGBBootrom), mem.c:567-586 (memInitCGBBootrom)" - notes: "Must be at least 0x900 (2304) bytes. Only the first 0x900 bytes are read. Enables cgbBootromEnabled flag for boot animation. Disabled via memDisableCGBBootrom() when register write occurs." + notes: "Minimum 0x900 (2304) bytes. Only first 0x900 bytes read. Disabled via memDisableCGBBootrom() on register write." diff --git a/emulators/fixnes.yml b/emulators/fixnes.yml index adf87cfa..3a505032 100644 --- a/emulators/fixnes.yml +++ b/emulators/fixnes.yml @@ -3,7 +3,7 @@ type: libretro core_classification: official_port source: "https://github.com/libretro/fixNES" upstream: "https://github.com/FIX94/fixNES" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "Alpha v1.3.1" display_name: "Nintendo - NES / Famicom (fixNES)" cores: @@ -16,20 +16,21 @@ notes: | fixNES is an NES/Famicom emulator by FIX94 (same author as fixGB). FDS games require disksys.rom (8192 bytes) in the system directory. - mapperInitFDS() in mapper.c:88-112 opens the file, validates exact + mapperInitFDS() in mapper.c:87-110 opens the file, validates exact size 0x2000, reads into fdsBIOS[]. Returns false if missing or wrong - size — FDS game fails to load. + size. No hash validation. - Regular NES cartridge games need no BIOS. + Regular NES/NSF games need no BIOS. No other system files loaded. system_dir accessed only for disksys.rom - (libretro.c:278-286, doOpenFDSBIOS). + (libretro/libretro.c:277-285, doOpenFDSBIOS). files: - name: "disksys.rom" + description: "Family Computer Disk System BIOS" system: nintendo-fds required: true mode: both size: 8192 - md5: "ca30b50f880eb660a320674ed365ef7a" - source_ref: "mapper.c:88-112 (mapperInitFDS), libretro/libretro.c:278-286 (doOpenFDSBIOS)" + validation: [size] + source_ref: "mapper.c:87-110 (mapperInitFDS), libretro/libretro.c:277-285 (doOpenFDSBIOS)" diff --git a/emulators/flycast.yml b/emulators/flycast.yml index 64a09d32..9f400de6 100644 --- a/emulators/flycast.yml +++ b/emulators/flycast.yml @@ -4,8 +4,8 @@ core_classification: official_port source: "https://github.com/libretro/flycast" upstream: "https://github.com/flyinghead/flycast" logo: "https://raw.githubusercontent.com/flyinghead/flycast/master/shell/linux/flycast.png" -profiled_date: "2026-03-21" -core_version: "Git" +profiled_date: "2026-03-23" +core_version: "0.1" display_name: "Sega - Dreamcast/Naomi (Flycast)" cores: - flycast @@ -14,29 +14,34 @@ systems: - sega-naomi - sega-naomi2 - sega-atomiswave - # sega-systemsp: supported by upstream but not by the libretro port notes: | Flycast has a built-in HLE BIOS (reios) for Dreamcast that can boot most - games without real BIOS files. Arcade systems (NAOMI, NAOMI2, Atomiswave, - System SP) require MAME-format BIOS ROM archives. - Hikaru and Triforce are NOT supported by Flycast. + games without real BIOS files. Arcade systems (NAOMI, Atomiswave) require + MAME-format BIOS ROM archives. + + The libretro port (libretro/flycast, last updated 2025-12-12) is significantly + behind upstream (flyinghead/flycast). Key divergences: + - NAOMI 2 has no separate BIOS entry or platform detection; NAOMI 2 games + run as NAOMI using naomi.zip. Upstream has naomi2.zip with dedicated ROMs. + - System SP is not supported. Upstream has segasp.zip support. + - The n2_ prefix for NAOMI 2 flat boot ROMs is dead code (DC_PLATFORM_NAOMI2 + is never assigned to settings.System in the libretro port). + - Flash search includes legacy names (%flash_wb.bin, %flash.bin, %flash.bin.bin) + that upstream has removed. + - NAOMI flat boot ROM search includes epr-21576d.bin fallback not in upstream. BIOS file search uses prefix + name pattern. The libretro port appends "dc/" to the system directory (libretro.cpp:1866). All files below are relative to system_dir/dc/. - File loading logic: core/hw/flashrom/nvmem.cpp loadFiles() and - core/hw/naomi/naomi_cart.cpp loadBios(). - The prefix is determined by platform (sb_mem.cpp:32-49): Dreamcast -> dc_ Dev Unit -> hkt_ NAOMI -> naomi_ - NAOMI 2 -> n2_ (libretro port; upstream uses naomi2_) Atomiswave -> (no prefix, BIOS loaded from awbios.zip) - Boot ROM search pattern (sb_mem.cpp:57): + Boot ROM search pattern (sb_mem.cpp:51-68): {prefix}boot.bin, {prefix}boot.bin.bin, {prefix}bios.bin, {prefix}bios.bin.bin NAOMI also tries: epr-21576d.bin (sb_mem.cpp:59) Flash/NVRAM search pattern (sb_mem.cpp:231): @@ -48,59 +53,42 @@ files: # ------------------------------------------------------- - name: "dc_boot.bin" path: "dc/dc_boot.bin" - system: sega-dreamcast - required: false - hle_fallback: true - size: 2097152 # 2 MB - note: "Dreamcast boot ROM. HLE BIOS (reios) used as fallback." - source_ref: "core/hw/flashrom/nvmem.cpp:287" - - - name: "dc_bios.bin" - path: "dc/dc_bios.bin" + aliases: ["dc_bios.bin", "dc_boot.bin.bin", "dc_bios.bin.bin"] system: sega-dreamcast required: false hle_fallback: true size: 2097152 - note: "Alternate name for Dreamcast boot ROM." - source_ref: "core/hw/flashrom/nvmem.cpp:287" - - - name: "dc_flash.bin" - path: "dc/dc_flash.bin" - system: sega-dreamcast - required: false - hle_fallback: true - size: 131072 # 128 KB - note: "Dreamcast flash memory. One of the nvmem search names." - source_ref: "core/hw/holly/sb_mem.cpp:231" + note: "Dreamcast boot ROM. HLE BIOS (reios) used as fallback. Code searches prefix + boot.bin, boot.bin.bin, bios.bin, bios.bin.bin sequentially." + source_ref: "core/hw/holly/sb_mem.cpp:219,55-57" - name: "dc_nvmem.bin" path: "dc/dc_nvmem.bin" + aliases: ["dc_flash_wb.bin", "dc_flash.bin", "dc_flash.bin.bin"] system: sega-dreamcast required: false hle_fallback: true size: 131072 - note: "Dreamcast NVRAM (primary search name for flash)." - source_ref: "core/hw/holly/sb_mem.cpp:231" + note: "Dreamcast flash memory / NVRAM. Created if not found. Code searches prefix + nvmem.bin, flash_wb.bin, flash.bin, flash.bin.bin sequentially." + source_ref: "core/hw/holly/sb_mem.cpp:231,196-213" - - name: "dc_flash_wb.bin" - path: "dc/dc_flash_wb.bin" + - name: "font.bin" + path: "dc/font.bin" system: sega-dreamcast required: false - hle_fallback: true - size: 131072 - note: "Dreamcast flash writeback." - source_ref: "core/hw/holly/sb_mem.cpp:231" + note: "Dreamcast system font for HLE BIOS text rendering. Built-in font used as fallback." + source_ref: "core/reios/reios.cpp:736-754" # ------------------------------------------------------- # Sega NAOMI # ------------------------------------------------------- - name: "naomi_boot.bin" path: "dc/naomi_boot.bin" + aliases: ["naomi_bios.bin", "naomi_boot.bin.bin", "naomi_bios.bin.bin", "epr-21576d.bin"] system: sega-naomi required: false - size: 2097152 # 2 MB - note: "NAOMI boot ROM (flat binary). Alternative to naomi.zip." - source_ref: "core/hw/flashrom/nvmem.cpp:287" + size: 2097152 + note: "NAOMI boot ROM (flat binary). Alternative to naomi.zip. epr-21576d.bin is searched without prefix." + source_ref: "core/hw/holly/sb_mem.cpp:219,58-59" - name: "naomi.zip" path: "dc/naomi.zip" @@ -110,66 +98,43 @@ files: NAOMI system BIOS archive (MAME format). Contains region-specific BIOS ROMs: epr-21576h.ic27 (Japan), epr-21577h.ic27 (USA), epr-21578h.ic27 (Export), epr-21579d.ic27 (Korea). - source_ref: "core/hw/naomi/naomi_roms.cpp:87-143" + Also used for NAOMI 2 games in the libretro port (no separate naomi2.zip). + source_ref: "core/hw/naomi/naomi_roms.h:133-188" - # NAOMI special BIOS sets (game-specific, loaded from game archive or standalone) - name: "airlbios.zip" path: "dc/airlbios.zip" system: sega-naomi required: false note: "Airline Pilots Deluxe BIOS. epr-21802.ic27 (Export), epr-21801.ic27 (USA)." - source_ref: "core/hw/naomi/naomi_roms.cpp:30-37" + source_ref: "core/hw/naomi/naomi_roms.h:78-85" - name: "f355bios.zip" path: "dc/f355bios.zip" system: sega-naomi required: false note: "Ferrari F355 Challenge BIOS. Japan/USA/Export variants." - source_ref: "core/hw/naomi/naomi_roms.cpp:49-58" + source_ref: "core/hw/naomi/naomi_roms.h:96-103" - name: "f355dlx.zip" path: "dc/f355dlx.zip" system: sega-naomi required: false note: "Ferrari F355 Challenge Deluxe BIOS. Japan/USA/Export variants." - source_ref: "core/hw/naomi/naomi_roms.cpp:60-74" + source_ref: "core/hw/naomi/naomi_roms.h:105-119" - name: "hod2bios.zip" path: "dc/hod2bios.zip" system: sega-naomi required: false note: "House of the Dead 2 BIOS. Japan/USA/Export variants." - source_ref: "core/hw/naomi/naomi_roms.cpp:76-85" + source_ref: "core/hw/naomi/naomi_roms.h:121-131" - name: "naomigd.zip" path: "dc/naomigd.zip" system: sega-naomi required: false - note: "NAOMI GD-ROM BIOS. Used by GD-ROM based NAOMI games." - source_ref: "core/hw/naomi/naomi_roms.cpp:158-181" - - # ------------------------------------------------------- - # Sega NAOMI 2 - # ------------------------------------------------------- - - name: "n2_boot.bin" - path: "dc/n2_boot.bin" - aliases: ["naomi2_boot.bin"] - mode: libretro - system: sega-naomi2 - required: false - size: 2097152 # 2 MB - note: "NAOMI 2 boot ROM. Core uses n2_ prefix to avoid name collision in shared dc/ directory. Upstream standalone uses naomi2_ prefix." - source_ref: "core/hw/holly/sb_mem.cpp:43,57" - - - name: "naomi2.zip" - path: "dc/naomi2.zip" - system: sega-naomi2 - required: true - note: > - NAOMI 2 system BIOS archive (MAME format). Contains region-specific - ROMs: epr-23605c.ic27 (Japan), epr-23607c.ic27 (USA), - epr-23608c.ic27 (Export), epr-23609b.ic27 (Korea). - source_ref: "core/hw/naomi/naomi_roms.cpp:183-201" + note: "NAOMI GD-ROM BIOS. Shares ROMs with naomi.zip (epr-21576h, epr-21578h, epr-21577h)." + source_ref: "core/hw/naomi/naomi_roms.h:190-212" # ------------------------------------------------------- # Sega Atomiswave @@ -178,45 +143,44 @@ files: path: "dc/awbios.zip" system: sega-atomiswave required: true - note: > - Atomiswave system BIOS archive (MAME format). Contains - bios0.ic23 (Sammy, 128 KB). BIOS size is 128 KB. - source_ref: "core/hw/naomi/naomi_roms.cpp:39-48" + note: "Atomiswave system BIOS archive (MAME format). Contains bios0.ic23 (Sammy, 128 KB)." + source_ref: "core/hw/naomi/naomi_roms.h:87-94" # ------------------------------------------------------- - # Sega System SP + # Not supported by libretro port # ------------------------------------------------------- - # segasp.zip: supported by upstream (flyinghead/flycast) but NOT by the - # libretro port (naomi_roms.cpp absent from libretro fork). Lacune du port. + # naomi2.zip: no BIOS[] entry in libretro fork (naomi_roms.h). NAOMI 2 games + # use the "naomi" BIOS. naomi_cart_GetSystemType() never returns + # DC_PLATFORM_NAOMI2. Upstream has full naomi2.zip support. + # + # segasp.zip: no System SP support in libretro fork. Upstream has full support. platform_details: dreamcast: - bios_size: 2097152 # 2 MB - flash_size: 131072 # 128 KB - ram_size: 16777216 # 16 MB (32 MB with mod) + bios_size: 2097152 + flash_size: 131072 + ram_size: 16777216 hle_available: true - source_ref: "core/emulator.cpp:446-452" + source_ref: "core/nullDC.cpp:333-345" naomi: - bios_size: 2097152 # 2 MB - flash_size: 32768 # 32 KB (battery-backed SRAM) - ram_size: 33554432 # 32 MB + bios_size: 2097152 + sram_size: 32768 + ram_size: 33554432 hle_available: false - source_ref: "core/emulator.cpp:453-459" + source_ref: "core/nullDC.cpp:346-354" naomi2: - bios_size: 2097152 # 2 MB - flash_size: 32768 # 32 KB (battery-backed SRAM) - ram_size: 33554432 # 32 MB - eram_size: 33554432 # 32 MB (ELAN) + bios_size: 2097152 + sram_size: 32768 + ram_size: 33554432 hle_available: false - source_ref: "core/emulator.cpp:460-467" + note: "Treated as NAOMI in the libretro port. Separate platform only in upstream." + source_ref: "core/nullDC.cpp:355-363" atomiswave: - bios_size: 131072 # 128 KB - flash_size: 131072 # 128 KB (SRAM) - ram_size: 16777216 # 16 MB + bios_size: 131072 + sram_size: 131072 + ram_size: 16777216 hle_available: false - source_ref: "core/emulator.cpp:468-474" - - # systemsp: supported by upstream but not by the libretro port + source_ref: "core/nullDC.cpp:364-375" diff --git a/emulators/flycast_gles2.yml b/emulators/flycast_gles2.yml index 09481c81..3127f60c 100644 --- a/emulators/flycast_gles2.yml +++ b/emulators/flycast_gles2.yml @@ -1,8 +1,8 @@ emulator: "Flycast GLES2" type: alias alias_of: "flycast" -profiled_date: "2026-03-21" -core_version: "1.0" +profiled_date: "2026-03-23" +core_version: "0.1" display_name: "Sega - Dreamcast/Naomi (Flycast GLES2)" note: "Same codebase as flycast, compiled with -DHAVE_OPENGLES2 for older mobile GPUs. Same BIOS files." files: [] diff --git a/emulators/fmsx.yml b/emulators/fmsx.yml index db6d65f2..698e913a 100644 --- a/emulators/fmsx.yml +++ b/emulators/fmsx.yml @@ -3,7 +3,7 @@ type: libretro core_classification: community_fork source: "https://github.com/libretro/fmsx-libretro" upstream: "https://fms.komkon.org/fMSX/" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "6.0" display_name: "Microsoft - MSX (fMSX)" cores: @@ -149,7 +149,7 @@ files: sha1: c36c9e0f96738a340381e23b4f97245388801a46 required: false bundled: true - note: "MSX-DOS 2 ROM (64 KB). Loaded when 'fmsx_dos2' option enabled and model is MSX2+ (fMSX/MSX.c:545)." + note: "MSX-DOS 2 ROM (64 KB). Loaded when 'fmsx_dos2' option enabled and model is MSX2 or MSX2+ (fMSX/MSX.c:545)." source_ref: "fMSX/ROMs/MSXDOS2.ROM" - name: PAINTER.ROM @@ -235,9 +235,14 @@ files: # -- Cartridge identification database -- + - name: CARTS.CRC + required: false + bundled: false + note: "CRC database for cartridge identification and mapper detection. Tried first, before CARTS.SHA (fMSX/MSX.c:2697)." + - name: CARTS.SHA required: false bundled: true md5: 74b0f217fa0e2b8bb5a2f8e2ecc69da3 - note: "SHA1 database for cartridge identification and mapper detection (fMSX/MSX.c:2712)." + note: "SHA1 database for cartridge identification and mapper detection. Fallback when CARTS.CRC absent (fMSX/MSX.c:2712)." source_ref: "fMSX/ROMs/CARTS.SHA" diff --git a/emulators/freechaf.yml b/emulators/freechaf.yml index 3a518399..be61b2e2 100644 --- a/emulators/freechaf.yml +++ b/emulators/freechaf.yml @@ -2,7 +2,7 @@ emulator: FreeChaF type: libretro core_classification: pure_libretro source: "https://github.com/libretro/FreeChaF" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "GIT" display_name: "Fairchild - ChannelF (FreeChaF)" cores: @@ -11,7 +11,7 @@ systems: - fairchild-channelf notes: | - FreeChaF is a Fairchild Channel F emulator ported to libretro. + FreeChaF is a Fairchild Channel F emulator written for libretro. BIOS loading is in src/libretro.c:186-208. The core first tries to load sl90025.bin (Channel F II PSU1) at address 0x000. If that fails, it falls @@ -37,8 +37,6 @@ files: system: fairchild-channelf required: false hle_fallback: true - md5: ac9804d4c0e9d07e33472e3726ed15c3 - size: 1024 # 1 KB, fills 0x000-0x3FF note: "Channel F PSU1 ROM (original). Fallback if sl90025.bin is missing." source_ref: "src/libretro.c:192" @@ -46,8 +44,6 @@ files: system: fairchild-channelf required: false hle_fallback: true - md5: da98f4bb3242ab80d76629021bb27585 - size: 1024 # 1 KB, fills 0x400-0x7FF note: "Channel F PSU2 ROM. Always loaded at address 0x400." source_ref: "src/libretro.c:202" @@ -55,15 +51,13 @@ files: system: fairchild-channelf required: false hle_fallback: true - md5: 95d339631d867c8f1d15a5f2ec26069d - size: 1024 # 1 KB, fills 0x000-0x3FF note: "Channel F II PSU1 ROM. Tried first, preferred over sl31253.bin." source_ref: "src/libretro.c:186" platform_details: bios_mapping: target: "0x000-0x7FF in 64K memory space" - source_ref: "src/memory.h:27-29, src/memory.c:30-61" + source_ref: "src/memory.h:27-29, src/memory.c:29-61" notes: | MEMORY_loadSysROM_libretro() reads the file and copies it into Memory[] at the given address offset. PSU1 is loaded at 0x000, diff --git a/emulators/freeintv.yml b/emulators/freeintv.yml index 24dcc8e1..619eb255 100644 --- a/emulators/freeintv.yml +++ b/emulators/freeintv.yml @@ -2,7 +2,7 @@ emulator: FreeIntv type: libretro core_classification: pure_libretro source: "https://github.com/libretro/FreeIntv" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "2018.1.5" display_name: "Mattel - Intellivision (FreeIntv)" cores: @@ -11,65 +11,34 @@ systems: - intellivision notes: | - FreeIntv is a Mattel Intellivision emulator for libretro. + Written for libretro by David Richardson. Intellivoice SP0256 emulation + contributed by Joe Zbiciak (jzIntv), mask ROM embedded in source + (src/ivoice.c:337-510, 4097-byte static array). No external ivoice ROM. - BIOS loading happens in retro_init() (src/libretro.c:1166-1174). The core - calls retro_get_system_directory() then joins exec.bin and grom.bin paths - directly. No subdirectory, no core option to disable BIOS loading. + BIOS loading in retro_init() (src/libretro.c:1166-1174). Paths joined + directly to system directory, no subdirectory. - loadExec() in src/intv.c:47-71 reads exec.bin as big-endian 16-bit words - into memory range 0x1000-0x1FFF (Executive ROM, 8 KB file). + loadExec() reads exec.bin as big-endian 16-bit words into 0x1000-0x1FFF. + loadGrom() reads grom.bin as raw bytes into 0x3000-0x37FF. - loadGrom() in src/intv.c:73-98 reads grom.bin as raw bytes into memory - range 0x3000-0x37FF (Graphics ROM, 2 KB file). + Both files required for operation. Without them, the OSD shows + "PUT GROM/EXEC IN SYSTEM DIRECTORY" and games do not run. - Both files are required. Without them the core prints an error and shows - "PUT GROM/EXEC IN SYSTEM DIRECTORY" on the OSD, but does not abort. - Games will not run correctly without both BIOS files. + No hash or size validation on either file. - The .info file declares firmware_count = 2 with both marked opt = false. - - No ECS (Entertainment Computer System) BIOS support exists in this core. - There is no ecs.bin loading code anywhere in the source. + No ECS support. No ecs.bin loading code in the source. files: - name: "exec.bin" system: intellivision required: true - size: 8192 # 8 KB (4096 x 16-bit words, 0x1000-0x1FFF) - md5: 62e761035cb657903761800f4437b8af + size: 8192 note: "Executive ROM. Big-endian 16-bit words loaded at 0x1000-0x1FFF." source_ref: "src/intv.c:47-71, src/libretro.c:1169" - name: "grom.bin" system: intellivision required: true - size: 2048 # 2 KB (bytes, 0x3000-0x37FF) - md5: 0cd5946c6473e42e8e4c2137785e427f + size: 2048 note: "Graphics ROM. Raw bytes loaded at 0x3000-0x37FF." source_ref: "src/intv.c:73-98, src/libretro.c:1173" - -platform_details: - bios_mapping: - exec: - target: "0x1000-0x1FFF (Executive ROM)" - format: "big-endian 16-bit words" - source_ref: "src/intv.c:55-58" - grom: - target: "0x3000-0x37FF (Graphics ROM)" - format: "raw 8-bit bytes" - source_ref: "src/intv.c:81-84" - notes: | - Memory[] is a 64K array of unsigned int (src/memory.c:26). - EXEC region (0x1000-0x1FFF) is write-protected in writeMem() - (src/memory.c:60-61). GROM region (0x3000-0x37FF) is also - write-protected (src/memory.c:62). - - cartridge_loading: - formats: "int, bin, rom" - methods: "Intellicart (magic byte 0xA8), raw ROM with fingerprint DB" - source_ref: "src/cart.c" - notes: | - Raw ROMs use a fingerprint database (sum of first 256 bytes) - to select one of 10 memory map configurations (load0-load9). - Intellicart format is auto-detected by 0xA8 magic byte. diff --git a/emulators/freej2me.yml b/emulators/freej2me.yml index df2fa920..30accf0e 100644 --- a/emulators/freej2me.yml +++ b/emulators/freej2me.yml @@ -2,7 +2,8 @@ emulator: FreeJ2ME type: libretro core_classification: official_port source: "https://github.com/hex007/freej2me" -profiled_date: "2026-03-21" +upstream: "https://github.com/hex007/freej2me" +profiled_date: "2026-03-23" core_version: "GIT" display_name: "Mobile - J2ME (FreeJ2ME)" cores: @@ -11,33 +12,17 @@ systems: - j2me notes: | - FreeJ2ME is a Java ME (J2ME) emulator for libretro. The native .so/.dll - core acts as a bridge that spawns a Java process running freej2me-lr.jar, - which handles all actual J2ME emulation. Communication between the C - frontend and Java backend happens over pipes (Linux) or named pipes - (Windows). - - The jar file is required: without it the core cannot start. It must be - placed directly in the system directory (not a subdirectory). The core - resolves it via RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY joined with - "freej2me-lr.jar" using fill_pathname_join(). - - A working Java runtime (JRE/JDK 8+) must be installed on the host - system. The core invokes "java -jar freej2me-lr.jar" with resolution, - rotation, phone type, FPS, and sound arguments passed via argv. - - freej2me-lr.jar is built from the project source via Apache Ant - (build.xml target "lr"). It is not a traditional BIOS dump but a - software component distributed with the emulator. - - The project also produces freej2me.jar (standalone AWT frontend) and - freej2me-sdl.jar (SDL2 frontend), but only freej2me-lr.jar is needed - for the libretro core. + The native core is a C bridge that spawns a Java process running + freej2me-lr.jar, which handles all J2ME emulation. Communication + happens over pipes (Linux) or named pipes (Windows). A Java runtime + (JRE/JDK 8+) must be installed on the host. The jar is built from + source via Apache Ant (build.xml). Same repo hosts standalone AWT + and SDL2 frontends alongside the libretro frontend. files: - name: "freej2me-lr.jar" system: j2me description: "FreeJ2ME libretro Java application" required: true - source_ref: "src/libretro/freej2me_libretro.c:485 (fill_pathname_join with javapath)" - notes: "Not a BIOS dump. This is the Java emulator itself, loaded by the native core at startup. Built from source via 'ant lr'. Must be in the system directory root." + source_ref: "src/libretro/freej2me_libretro.c:483-486 (GET_SYSTEM_DIRECTORY + fill_pathname_join + java -jar)" + notes: "Not a BIOS dump. Java emulator loaded by the native core at startup via execvp('java', '-jar', path). Built from source via 'ant'. Must be in the system directory root." diff --git a/emulators/frodo.yml b/emulators/frodo.yml index 7f2cb66c..1ffb30fd 100644 --- a/emulators/frodo.yml +++ b/emulators/frodo.yml @@ -4,7 +4,7 @@ core_classification: community_fork cores: [frodo] source: "https://github.com/libretro/frodo-libretro" upstream: "https://github.com/cebix/frodo4" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "v4.2" display_name: "Commodore - C64 (Frodo)" systems: [commodore-c64] @@ -43,14 +43,14 @@ notes: | processor emulation is enabled (multiple addresses in the 0x0D00-0x0E00 range are patched with 0xF2 trap opcodes). - The 1541 drive ROM is also patched at Reset() in C64.cpp: ROM checksum + The 1541 drive ROM is also patched in PatchKernal(): ROM checksum verification is disabled (0x2AE4-0x2AE9 NOPed), DOS idle loop is trapped (0x2C9B), and write sector / format track operations are intercepted (0x3594-0x3598, 0x3B0C-0x3B0D). Source: Src/main.cpp:67-115 (ROM defines, load_rom, load_rom_files), - Src/C64.h:33-37 (ROM size constants), Src/C64.cpp:221-284 (PatchKernal), - Src/C64.cpp:738-746 (Reset ROM patching), + Src/C64.h:33-37 (ROM size constants), Src/C64.cpp:221-285 (PatchKernal), + Src/C64.cpp:734-746 (Run init, saves original kernal bytes, calls PatchKernal), Src/Basic_ROM.h, Src/Kernal_ROM.h, Src/Char_ROM.h, Src/1541_ROM.h (embedded ROM arrays) @@ -60,7 +60,6 @@ files: description: "C64 BASIC V2 ROM" required: false hle_fallback: true - embedded: true size: 8192 note: "Embedded as builtin_basic_rom[] in Basic_ROM.h. External file never loaded in practice (DATADIR is empty, path is bare filename in cwd)." source_ref: "Src/main.cpp:71,77,100-102" @@ -70,7 +69,6 @@ files: description: "C64 Kernal ROM" required: false hle_fallback: true - embedded: true size: 8192 note: "Embedded as builtin_kernal_rom[] in Kernal_ROM.h. Patched at runtime for fast reset and 1541 IEC traps." source_ref: "Src/main.cpp:72,78,104-106" @@ -80,7 +78,6 @@ files: description: "C64 Character Generator ROM" required: false hle_fallback: true - embedded: true size: 4096 note: "Embedded as builtin_char_rom[] in Char_ROM.h. Used by VIC-II for text/bitmap rendering." source_ref: "Src/main.cpp:73,79,108-110" @@ -90,7 +87,6 @@ files: description: "Commodore 1541 floppy drive ROM" required: false hle_fallback: true - embedded: true size: 16384 note: "Embedded as builtin_drive_rom[] in 1541_ROM.h. Patched at runtime to disable checksum and trap disk I/O." source_ref: "Src/main.cpp:74,80,112-114" diff --git a/emulators/fsuae.yml b/emulators/fsuae.yml index 8295c36c..4b7a861c 100644 --- a/emulators/fsuae.yml +++ b/emulators/fsuae.yml @@ -3,7 +3,7 @@ type: libretro core_classification: community_fork source: "https://github.com/libretro/libretro-fsuae" upstream: "https://github.com/FrodeSolheim/fs-uae" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "v2.7.15" display_name: "Commodore - Amiga (FS-UAE)" cores: @@ -12,56 +12,124 @@ systems: - amiga notes: | - FS-UAE is an Amiga emulator by Frode Solheim, based on UAE. + FS-UAE is an Amiga emulator by Frode Solheim, based on UAE/WinUAE. - Kickstart ROMs loaded from save_dir/Kickstarts/ (not system_dir). - base_dir = RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY (paths.c:136). - Kickstarts/ subdirectory created automatically (paths.c:258-264). - Also scans AmigaForever/Amiga Files/Shared/rom/. + ROMs loaded from save_dir/fsuae/Kickstarts/ (not system_dir). + base_dir = RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY/fsuae (paths.c:197). + Also scans base_dir/AmigaForever/Amiga Files/Shared/rom/ (config.c:129-135). + Scans for .rom and .bin files. Identification by SHA-1 checksum, not filename. + AROS kickstart (512 KB) bundled in fs-uae.dat as fallback for all models. + rom.key enables decryption of Cloanto Amiga Forever encrypted ROMs. - ROMs identified by checksum, not by filename. + Supported models: A1000, A500, A500+, A600, A1200, A3000, A4000, CD32, CDTV. + Default model is A500 (config.c:42). Each model auto-selects its kickstart + via quickstart mechanism (cfgfile.c:7111-7154, config.c:140). - Standard Amiga kickstart ROMs (all 512 KB unless noted): - kick13.rom (A500 Kickstart 1.3, 256 KB) - kick20.rom (A500+ Kickstart 2.04) - kick31.rom (A1200 Kickstart 3.1) - kick40068.A1200 (A1200 Kickstart 3.1.4) - kick40068.A4000 (A4000 Kickstart 3.1.4) + The .info declares firmware_count=0. All ROMs are auto-discovered by + directory scan, not by explicit filename lookup. - The core is marked experimental by upstream. Most users should use PUAE. + Libretro port is frozen at v2.7.15. Upstream ROM database is larger (3030 + vs 1980 lines in rommgr). Core functionality equivalent for standard models. files: - - name: "kick13.rom" + - name: "amiga-os-130.rom" system: amiga required: false - size: 262144 # 256 KB - note: "Amiga 500 Kickstart 1.3 (34.5). Loaded from save_dir/Kickstarts/." - source_ref: "sources/src/fs-uae/config.c:128 (fs_uae_load_rom_files)" + hle_fallback: true + sha1: "891e9a547772fe0c6c19b610baf8bc4ea7fcb785" + validation: [sha1] + note: "Amiga 500 Kickstart 1.3 r34.5. Default model ROM." + source_ref: "sources/src/rommgr.c:141-142 (id=6, ROMTYPE_KICK)" - - name: "kick20.rom" + - name: "amiga-os-204.rom" system: amiga required: false - size: 524288 - note: "Amiga 500+ Kickstart 2.04 (37.175)." - source_ref: "sources/src/fs-uae/config.c:128" + hle_fallback: true + sha1: "c5839f5cb98a7a8947065c3ed2f14f5f42e334a1" + validation: [sha1] + note: "Amiga 500+ Kickstart 2.04 r37.175." + source_ref: "sources/src/rommgr.c:149-150 (id=7, ROMTYPE_KICK)" - - name: "kick31.rom" + - name: "amiga-os-205.rom" system: amiga required: false - size: 524288 - note: "Amiga 1200 Kickstart 3.1 (40.68)." - source_ref: "sources/src/fs-uae/config.c:128" + hle_fallback: true + sha1: "02843c4253bbd29aba535b0aa3bd9a85034ecde4" + validation: [sha1] + note: "Amiga 600 Kickstart 2.05 r37.350." + source_ref: "sources/src/rommgr.c:155-156 (id=10, ROMTYPE_KICK)" - - name: "kick40068.A1200" + - name: "amiga-os-120.rom" system: amiga required: false - size: 524288 - note: "Amiga 1200 Kickstart 3.1.4." - source_ref: "sources/src/fs-uae/config.c:128" + hle_fallback: true + sha1: "11f9e62cf299f72184835b7b2a70a16333fc0d88" + validation: [sha1] + note: "Amiga 1000 Kickstart 1.2 r33.180." + source_ref: "sources/src/rommgr.c:139-140 (id=5, ROMTYPE_KICK)" - - name: "kick40068.A4000" + - name: "amiga-os-310-a1200.rom" system: amiga required: false - size: 524288 - note: "Amiga 4000 Kickstart 3.1.4." - source_ref: "sources/src/fs-uae/config.c:128" + hle_fallback: true + sha1: "e21545723fe8374e91342617604f1b3d703094f1" + validation: [sha1] + note: "Amiga 1200 Kickstart 3.1 r40.68." + source_ref: "sources/src/rommgr.c:176-177 (id=15, ROMTYPE_KICK)" + + - name: "amiga-os-310-a3000.rom" + system: amiga + required: false + hle_fallback: true + sha1: "f8e210d72b4c4853e0c9b85d223ba20e3d1b36ee" + validation: [sha1] + note: "Amiga 3000 Kickstart 3.1 r40.68." + source_ref: "sources/src/rommgr.c:180-181 (id=61, ROMTYPE_KICK)" + + - name: "amiga-os-310-a4000.rom" + system: amiga + required: false + hle_fallback: true + sha1: "5fe04842d04a489720f0f4bb0e46948199406f49" + validation: [sha1] + note: "Amiga 4000 Kickstart 3.1 r40.68." + source_ref: "sources/src/rommgr.c:186-187 (id=16, ROMTYPE_KICK)" + + - name: "amiga-os-310-cd32.rom" + system: amiga + required: false + hle_fallback: true + sha1: "3525be8887f79b5929e017b42380a79edfee542d" + validation: [sha1] + note: "Amiga CD32 Kickstart 3.1 r40.60." + source_ref: "sources/src/rommgr.c:197-198 (id=18, ROMTYPE_KICKCD32)" + + - name: "amiga-ext-310-cd32.rom" + system: amiga + required: false + sha1: "5bef3d628ce59cc02a66e6e4ae0da48f60e78f7f" + validation: [sha1] + note: "CD32 extended ROM r40.60. Required for CD32 mode." + source_ref: "sources/src/rommgr.c:199-200 (id=19, ROMTYPE_EXTCD32)" + + - name: "cd32fmv.rom" + system: amiga + required: false + sha1: "03ca81c7a7b259cf64bc9582863eca0f6529f435" + validation: [sha1] + note: "CD32 Full Motion Video cartridge ROM. For CD32/FMV model." + source_ref: "sources/src/rommgr.c:208-209 (id=23, ROMTYPE_CD32CART)" + + - name: "amiga-ext-130-cdtv.rom" + system: amiga + required: false + sha1: "7ba40ffa17e500ed9fed041f3424bd81d9c907be" + validation: [sha1] + note: "CDTV extended ROM v1.0. Required for CDTV mode." + source_ref: "sources/src/rommgr.c:213-214 (id=20, ROMTYPE_EXTCDTV)" + + - name: "rom.key" + system: amiga + required: false + note: "Cloanto Amiga Forever decryption key. Enables encrypted ROM loading." + source_ref: "libretro/libretro.c:206-222 (addkeyfile via amiga_add_key_dir)" diff --git a/emulators/fuse.yml b/emulators/fuse.yml index 95ba7d2d..25d4891f 100644 --- a/emulators/fuse.yml +++ b/emulators/fuse.yml @@ -3,7 +3,7 @@ type: libretro core_classification: community_fork source: "https://github.com/libretro/fuse-libretro" upstream: "https://sourceforge.net/projects/fuse-emulator/" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "1.6.0" display_name: "Sinclair - ZX Spectrum (Fuse)" cores: @@ -27,12 +27,16 @@ notes: | Default ROM filenames are set in fuse/settings.c:209-260. Each machine type loads its ROMs during reset via machine_load_rom() calls in - fuse/machines/*.c files. + fuse/machines/*.c files. All ROMs are size-validated at load time + (fuse/machine.c:289). The +2A reuses the +3 ROMs (plus3-0/1/2/3.rom) per settings.c:234-237. The TS2068 reuses TC2068 ROMs (tc2068-0/1.rom) per settings.c:257-258. Spectrum 16K uses 48.rom per settings.c:211. + Upstream FUSE 1.7.0 has SP0256 speech chip (sp0256-al2.rom) and Currah + uSpeech (uspeech.rom) peripherals not ported to libretro. + files: # -- Embedded ROMs (compiled into the core, not required on disk) -- @@ -43,6 +47,7 @@ files: md5: 4c42a2f075212361c3117015b107ff68 sha1: 5ea7c2b824672e914525d1d5c419d71b84a426a2 size: 16384 + validation: [size] note: "Spectrum 48K ROM. Also used for 16K and 48K NTSC. Embedded in core." source_ref: "fuse/settings.c:211-212, fuse/machines/spec48.c:76" @@ -53,6 +58,7 @@ files: md5: b4d2692115a9f2924df92a3cbfb358fb sha1: 4f4b11ec22326280bdb96e3baf9db4b4cb1d02c5 size: 16384 + validation: [size] note: "Spectrum 128K ROM 0 (editor). Embedded in core." source_ref: "fuse/settings.c:209, fuse/machines/spec128.c:70" @@ -63,6 +69,7 @@ files: md5: 6e09e5d3c4aef166601669feaaadc01c sha1: 80080644289ed93d71a1103992a154cc9802b2fa size: 16384 + validation: [size] note: "Spectrum 128K ROM 1 (48 BASIC). Embedded in core." source_ref: "fuse/settings.c:210, fuse/machines/spec128.c:73" @@ -73,6 +80,7 @@ files: md5: 4ed7af4636308b8a48d7a35e6c5b546b sha1: 72703f9a3e734f3c23ec34c0727aae4ccbef9a91 size: 16384 + validation: [size] note: "Spectrum +2 ROM 0. Embedded in core." source_ref: "fuse/settings.c:232, fuse/machines/specplus2.c:70" @@ -83,6 +91,7 @@ files: md5: b3db95931cc844efaeb82db9c171b9f3 sha1: de8b0d2d0379cfe7c39322a086ca6da68c7f23cb size: 16384 + validation: [size] note: "Spectrum +2 ROM 1. Embedded in core." source_ref: "fuse/settings.c:233, fuse/machines/specplus2.c:73" @@ -93,6 +102,7 @@ files: md5: 9833b8b73384dd5fa3678377ff00a2bb sha1: e319ed08b4d53a5e421a75ea00ea02039ba6555b size: 16384 + validation: [size] note: "Spectrum +3 ROM 0. Also used for +2A. Embedded in core." source_ref: "fuse/settings.c:234,238, fuse/machines/specplus3.c:197" @@ -103,6 +113,7 @@ files: md5: 0f711ceb5ab801b4701989982e0f334c sha1: c9969fc36095a59787554026a9adc3b87678c794 size: 16384 + validation: [size] note: "Spectrum +3 ROM 1. Also used for +2A. Embedded in core." source_ref: "fuse/settings.c:235,239, fuse/machines/specplus3.c:200" @@ -113,6 +124,7 @@ files: md5: 3b6dd659d5e4ec97f0e2f7878152c987 sha1: 22e50c6ba4157a3f6a821bd9937cd26e292775c6 size: 16384 + validation: [size] note: "Spectrum +3 ROM 2. Also used for +2A. Embedded in core." source_ref: "fuse/settings.c:236,240, fuse/machines/specplus3.c:203" @@ -123,6 +135,7 @@ files: md5: a148bcc575e51389e84fdf5d555c3196 sha1: 65f031caa8148a5493afe42c41f4929deab26b4e size: 16384 + validation: [size] note: "Spectrum +3 ROM 3. Also used for +2A. Embedded in core." source_ref: "fuse/settings.c:237,241, fuse/machines/specplus3.c:206" @@ -133,6 +146,7 @@ files: md5: bc123f625e245c225f92ef05933ed134 sha1: 649fbd233490bf58b35350b0123d36caaaa011eb size: 16384 + validation: [size] note: "Spectrum +3e ROM 0. Embedded in core." source_ref: "fuse/settings.c:242, fuse/machines/specplus3e.c:70" @@ -143,6 +157,7 @@ files: md5: 617364264c587d20c9fc4746c29679f2 sha1: f12198108cbb14de4f03c6695bc16d08c85ee214 size: 16384 + validation: [size] note: "Spectrum +3e ROM 1. Embedded in core." source_ref: "fuse/settings.c:243, fuse/machines/specplus3e.c:73" @@ -153,6 +168,7 @@ files: md5: c363e95dcd0a90e6e7f847e6e47e0179 sha1: 773633dce5ba323a9e00d9d0f9e4d8c295df7c87 size: 16384 + validation: [size] note: "Spectrum +3e ROM 2. Embedded in core." source_ref: "fuse/settings.c:244, fuse/machines/specplus3e.c:76" @@ -163,6 +179,7 @@ files: md5: a148bcc575e51389e84fdf5d555c3196 sha1: 65f031caa8148a5493afe42c41f4929deab26b4e size: 16384 + validation: [size] note: "Spectrum +3e ROM 3. Same as plus3-3.rom. Embedded in core." source_ref: "fuse/settings.c:245, fuse/machines/specplus3e.c:79" @@ -173,6 +190,7 @@ files: md5: fb3f86eb1e5a695d9c50c124e7cfb875 sha1: 8608328d7dd66602a4846f046b24fed500f7d828 size: 16384 + validation: [size] note: "Spectrum SE ROM 0. Embedded in core." source_ref: "fuse/settings.c:251, fuse/machines/spec_se.c:89" @@ -183,6 +201,7 @@ files: md5: 88de4a3129086f34bb9ca559acc51e6c sha1: 3be5de57dd3bd0a9d15c57cabe9179afe2906a52 size: 16384 + validation: [size] note: "Spectrum SE ROM 1. Embedded in core." source_ref: "fuse/settings.c:252, fuse/machines/spec_se.c:92" @@ -193,6 +212,7 @@ files: md5: 9dd7ecf784a6c04265c073c236f5fadb sha1: febb2d495b6eda7cdcb4074935d6e9d9f328972d size: 16384 + validation: [size] note: "Timex TC2048 ROM. Embedded in core." source_ref: "fuse/settings.c:254, fuse/machines/tc2048.c:80" @@ -203,6 +223,7 @@ files: md5: 55d462fccc6c536037404ef4ced08bec sha1: 1446cb2780a9dedf640404a639fa3ae518b2d8aa size: 16384 + validation: [size] note: "Timex TC2068 ROM 0. Also used for TS2068. Embedded in core." source_ref: "fuse/settings.c:255,257, fuse/machines/tc2068.c:138" @@ -213,6 +234,7 @@ files: md5: 575d203c6e15e679fba0b73f854ec7a2 sha1: 7e265a2c1f621ed365ea23bdcafdedbc79c1299c size: 8192 + validation: [size] note: "Timex TC2068 ROM 1 (EXROM). Also used for TS2068. Embedded in core." source_ref: "fuse/settings.c:256,258, fuse/machines/tc2068.c:141" @@ -224,6 +246,7 @@ files: required: true md5: "" size: 16384 + validation: [size] note: "Pentagon 128K/512K/1024 ROM 0. Required for Pentagon machines." source_ref: "fuse/settings.c:221,225,229, fuse/machines/pentagon.c:135" @@ -232,6 +255,7 @@ files: required: true md5: "" size: 16384 + validation: [size] note: "Pentagon 128K/512K/1024 ROM 1. Required for Pentagon machines." source_ref: "fuse/settings.c:222,226,230, fuse/machines/pentagon.c:138" @@ -240,6 +264,7 @@ files: required: true md5: "" size: 16384 + validation: [size] note: "TR-DOS ROM (Beta 128 disk interface). Used by Pentagon and Scorpion." source_ref: "fuse/settings.c:223,227,231, fuse/machines/pentagon.c:141" @@ -248,6 +273,7 @@ files: required: true md5: "" size: 16384 + validation: [size] note: "Gluck ROM. Required for Pentagon 512K and 1024." source_ref: "fuse/settings.c:224,228, fuse/machines/pentagon512.c:82" @@ -257,6 +283,7 @@ files: required: true md5: "" size: 16384 + validation: [size] note: "Scorpion 256K ROM 0. Required for Scorpion machine." source_ref: "fuse/settings.c:247, fuse/machines/scorpion.c:76" @@ -265,6 +292,7 @@ files: required: true md5: "" size: 16384 + validation: [size] note: "Scorpion 256K ROM 1. Required for Scorpion machine." source_ref: "fuse/settings.c:248, fuse/machines/scorpion.c:79" @@ -273,6 +301,7 @@ files: required: true md5: "" size: 16384 + validation: [size] note: "Scorpion 256K ROM 2. Required for Scorpion machine." source_ref: "fuse/settings.c:249, fuse/machines/scorpion.c:82" @@ -281,6 +310,7 @@ files: required: true md5: "" size: 16384 + validation: [size] note: "Scorpion 256K ROM 3 (TR-DOS). Required for Scorpion machine." source_ref: "fuse/settings.c:250, fuse/machines/scorpion.c:85" @@ -289,7 +319,8 @@ files: system: sinclair-zxspectrum required: false md5: "" - size: 16384 + size: 8192 + validation: [size] note: "Interface 1 ROM (edition 2). Loaded by peripherals/if1.c:403." source_ref: "fuse/settings.c:216, fuse/peripherals/if1.c:403" @@ -299,6 +330,7 @@ files: md5: 78e61a2a02121873c1756b21fd1398b1 sha1: 9a75ed4b293f968985be4c9aa893cd88276d1ced size: 8192 + validation: [size] note: "DISCiPLE disk interface ROM. Bundled in repo but not in mem_entries[]." source_ref: "fuse/settings.c:215, fuse/peripherals/disk/disciple.c:279" @@ -308,6 +340,7 @@ files: md5: 42e5de16fb5e50082bb954ec7ce45851 sha1: 6b841dc5797ef7eb219ad455cd1e434ca3b9d30d size: 8192 + validation: [size] note: "+D disk interface ROM. Bundled in repo but not in mem_entries[]." source_ref: "fuse/settings.c:246, fuse/peripherals/disk/plusd.c:239" @@ -315,6 +348,8 @@ files: system: sinclair-zxspectrum required: false md5: "" + size: 14336 + validation: [size] note: "Didaktik 80 disk interface ROM. Not embedded." source_ref: "fuse/settings.c:214, fuse/peripherals/disk/didaktik.c:236" @@ -322,6 +357,8 @@ files: system: sinclair-zxspectrum required: false md5: "" + size: 8192 + validation: [size] note: "Opus Discovery disk interface ROM. Not embedded." source_ref: "fuse/settings.c:220, fuse/peripherals/disk/opus.c:210" @@ -329,6 +366,8 @@ files: system: sinclair-zxspectrum required: false md5: "" + size: 8192 + validation: [size] note: "Multiface 1 ROM. Not embedded." source_ref: "fuse/settings.c:217, fuse/peripherals/multiface.c:224" @@ -336,6 +375,8 @@ files: system: sinclair-zxspectrum required: false md5: "" + size: 8192 + validation: [size] note: "Multiface 128 ROM. Not embedded." source_ref: "fuse/settings.c:218, fuse/peripherals/multiface.c:225" @@ -343,6 +384,8 @@ files: system: sinclair-zxspectrum required: false md5: "" + size: 8192 + validation: [size] note: "Multiface 3 ROM. Not embedded." source_ref: "fuse/settings.c:219, fuse/peripherals/multiface.c:226" @@ -352,6 +395,7 @@ files: md5: c54aa8f374b0971f51546c29d5d1eba1 sha1: 16af6f052b38a027dd49ba6e96e3a59d16b62672 size: 8192 + validation: [size] note: "SpeccyBoot ethernet ROM. Bundled in repo but not in mem_entries[]." source_ref: "fuse/settings.c:253, fuse/peripherals/speccyboot.c:148" @@ -359,6 +403,8 @@ files: system: sinclair-zxspectrum required: false md5: "" + size: 8192 + validation: [size] note: "TTX2000S teletext adapter ROM. Not embedded." source_ref: "fuse/settings.c:259, fuse/peripherals/ttx2000s.c:198" @@ -366,6 +412,8 @@ files: system: sinclair-zxspectrum required: false md5: "" + size: 8192 + validation: [size] note: "Currah uSource ROM. Not embedded." source_ref: "fuse/settings.c:260, fuse/peripherals/usource.c:129" diff --git a/emulators/galaksija.yml b/emulators/galaksija.yml index 501974a9..4c63a999 100644 --- a/emulators/galaksija.yml +++ b/emulators/galaksija.yml @@ -3,7 +3,7 @@ type: libretro core_classification: official_port source: "https://github.com/libretro/galaxy-libretro" upstream: "https://github.com/nikp123/Galaksija-Emulator" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "v0.1" display_name: "Elektronika Inženjering - Galaksija (Galaksija)" cores: @@ -24,7 +24,6 @@ systems: # 2. If either is missing: firmware_ignore=true, load embedded compressed ROMs # 3. If both present: galaxy_init() reads files from disk (init.c:46-105) # 4. ROM2.BIN missing is a warning only, not fatal (init.c:84-85) -# 5. GAL_PLUS.BIN: referenced in a TODO comment but not implemented yet # # Memory map: # 0x0000-0x0FFF: ROM1 (4096 bytes) - BASIC interpreter @@ -42,6 +41,7 @@ files: size: 2048 required: false hle_fallback: true + validation: [size] note: > Character generator ROM. Defines the 128-character bitmap font (8x13 pixels each). The core has this embedded compressed in rom.c and only loads the @@ -53,6 +53,7 @@ files: size: 4096 required: false hle_fallback: true + validation: [size] note: > System ROM / BASIC interpreter. Mapped at 0x0000-0x0FFF. Contains the Galaksija BASIC language and boot routines. Embedded in rom.c as fallback. @@ -63,6 +64,7 @@ files: size: 4096 required: false hle_fallback: true + validation: [size] note: > Math extension ROM. Mapped at 0x1000-0x1FFF. Adds floating-point math functions (SIN, COS, TG, SQR, LN, EXP, POW, etc). Optional even when @@ -70,17 +72,6 @@ files: rom.c as fallback. source_ref: "src/rom.h:11, src/libretro.c:107-110, src/external/galaksija-emulator/src/init.c:83-92" - - name: "GAL_PLUS.BIN" - path: "galaksija/GAL_PLUS.BIN" - size: 4096 - required: false - note: > - Galaksija Plus extension ROM. Would map at 0xE000-0xEFFF. Referenced in a - TODO comment in init.c but not yet implemented in the libretro core. The - original standalone emulator loaded it optionally with a Serbian message - on failure ("GAL_PLUS.BIN nije prisutan, idemo dalje bez njega!"). - source_ref: "src/external/galaksija-emulator/src/init.c:94-104" - notes: embedded_firmware: > All three ROMs (CHRGEN.BIN, ROM1.BIN, ROM2.BIN) are embedded as compressed @@ -97,6 +88,3 @@ notes: The emulator code and included firmware are public domain. External dependencies (libz80, libretro-common, tinyfiledialogs) have separate licenses (GPL2, MIT). - no_bios_required_for_pack: > - Since all firmware is embedded, this core does not need any BIOS files in - platform packs. The files listed above are optional overrides only. diff --git a/emulators/gam4980.yml b/emulators/gam4980.yml index a58c2054..15e0d87c 100644 --- a/emulators/gam4980.yml +++ b/emulators/gam4980.yml @@ -3,7 +3,7 @@ type: libretro core_classification: pure_libretro source: "https://github.com/ThisBoringWorld/gam4980" upstream: "https://codeberg.org/iyzsong/gam4980" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "0.2" display_name: "GAM4980" cores: @@ -11,58 +11,44 @@ cores: systems: - bbk-longman-4980 -# GAM4980 is a BBK Longman 4980 electronic dictionary game emulator for -# libretro. Original code from https://codeberg.org/iyzsong/gam4980, based -# on the BA4988 BBK simulator by Wuyun. +# GAM4980 emulates the BBK Longman 4980 (A4980/A4988) electronic dictionary. +# Original code from https://codeberg.org/iyzsong/gam4980, based on the +# BA4988 BBK simulator by Wuyun. Uses a 6502-based CPU with banked ROM access. # -# The device uses a 6502-based CPU with banked ROM access. -# -# ROM loading (src/libretro.c:1171-1177, retro_init): -# The core gets the RetroArch system directory via RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, -# appends "/gam4980" to build the ROM directory path, then calls sys_init(romdir). -# -# sys_init (src/libretro.c:693-723): +# ROM loading (src/libretro.c:692-760, sys_init): # Opens romdir/8.BIN and reads 0x200000 bytes (2 MB) into sys.rom_8 (font ROM). # Opens romdir/E.BIN and reads 0x200000 bytes (2 MB) into sys.rom_e (OS ROM). -# Both files are mandatory -- no fallback, no error handling. The core will -# crash if either file is missing. +# The upstream has error handling (error_msg + RETRO_ENVIRONMENT_SHUTDOWN on +# missing files). The fork (ThisBoringWorld) removed these checks -- crashes +# on missing files. # # Memory map (src/libretro.c:109-110, 300-305): # 0x800000-0x9FFFFF rom_8 (font ROM, 8.BIN) # 0xE00000-0xFFFFFF rom_e (OS ROM, E.BIN) -# These ROMs must be dumped from a physical BBK Longman 4980 dictionary. # -# The .info file does not declare firmware entries. The core is marked -# is_experimental = true. +# No hash validation. No size validation. The .info declares firmware_count=0. notes: | Place 8.BIN and E.BIN in the RetroArch system/gam4980/ subdirectory. Both files must be 2 MB dumps from a BBK Longman 4980 dictionary: 8.BIN - font ROM, dumped from address range 0x800000-0x9FFFFF E.BIN - OS ROM, dumped from address range 0xE00000-0xFFFFFF - The core will crash without these files (no error handling in sys_init). Game files use the .gam extension. files: - name: "gam4980/8.BIN" size: 2097152 - md5: ddfc001a6859d63ed46368ea7fe9f20c - sha1: 062067e6d661c3d3e10d910435be4a59db1bee9f required: true system: bbk-longman-4980 - bundled: false - note: "Font ROM (2 MB). Loaded at 0x800000. Dumped from physical device (src/libretro.c:716-718)." - source_ref: "src/libretro.c:716" + note: "Font ROM (2 MB). Loaded at 0x800000." + source_ref: "src/libretro.c:716-718" - name: "gam4980/E.BIN" size: 2097152 - md5: 72a16fd0d2453108321edc65cd347c77 - sha1: b486b6eda5cd7e79bb5605d1fbe36eb88bfc6724 required: true system: bbk-longman-4980 - bundled: false - note: "OS ROM (2 MB). Loaded at 0xE00000. Dumped from physical device (src/libretro.c:720-722)." - source_ref: "src/libretro.c:720" + note: "OS ROM (2 MB). Loaded at 0xE00000." + source_ref: "src/libretro.c:720-722" platform_details: bios_mapping: @@ -75,7 +61,7 @@ platform_details: the banking system. load_path: - source_ref: "src/libretro.c:1173-1177" + source_ref: "src/libretro.c:1173-1175" notes: | retro_init() builds the path as {system_directory}/gam4980/ and passes it to sys_init(). Files must be named exactly 8.BIN and diff --git a/emulators/gambatte.yml b/emulators/gambatte.yml index e7b4f1b3..433d4a63 100644 --- a/emulators/gambatte.yml +++ b/emulators/gambatte.yml @@ -3,7 +3,7 @@ type: libretro core_classification: community_fork source: "https://github.com/libretro/gambatte-libretro" upstream: "https://github.com/sinamas/gambatte" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "v0.5.0" display_name: "Nintendo - Game Boy / Color (Gambatte)" cores: @@ -11,52 +11,45 @@ cores: systems: [nintendo-gb, nintendo-gbc] notes: | - Gambatte is a Game Boy / Game Boy Color emulator focused on accuracy. - No BIOS is required for normal operation. The core has a built-in - HLE boot sequence that skips the Nintendo logo animation by default. + Accuracy-focused GB/GBC emulator. No BIOS required for normal operation; + built-in HLE boot sequence skips the Nintendo logo animation. - When the core option "gambatte_gb_bootloader" is set to "enabled" - (the default), the core looks for official boot ROMs in the system - directory to play the real startup logo animation. If the files are - missing, emulation still works without them. + Core option gambatte_gb_bootloader (default: enabled) enables loading + official boot ROMs from the system directory for the real startup animation. + If missing, emulation works without them. - The boot ROM loaded depends on the hardware mode: - - DMG (original Game Boy): gb_bios.bin (256 bytes, 0x100) - - CGB (Game Boy Color) or GBA mode: gbc_bios.bin (2304 bytes, 0x900) + Boot ROM selection by hardware mode: + - DMG: gb_bios.bin (256 bytes) + - CGB or GBA: gbc_bios.bin (2304 bytes) - In GBA mode the core patches the CGB boot ROM at 0xF2 to fake - GBA detection (ld b,0x01), enabling GBA-enhanced features in - compatible GBC games (Shantae, Zelda Oracle series, etc.). + In GBA mode the core patches the CGB boot ROM at 0xF2 to fake GBA + detection (ld b,0x01), enabling GBA-enhanced features in compatible + GBC games. - File path construction: libretro.cpp get_bootloader_from_file() - joins RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY with each filename - directly - no subdirectories. + The upstream standalone supports SGB boot ROM loading; the libretro + port does not implement this. - Gambatte does NOT use sgb_bios.bin. The SGB palette references in - the source are color lookup tables for DMG palette colorization, - not actual Super Game Boy boot ROM loading. + Custom palette files (palettes/*.pal) are user-created colorization + configs loaded when GB Colorization is set to "custom". These are + user-generated content, not distributable files. files: - # --- DMG boot ROM (optional, enables startup animation) --- - name: "gb_bios.bin" system: nintendo-gb description: "Original Game Boy (DMG-01) boot ROM" required: false hle_fallback: true size: 256 - md5: "32fbbd84168d3482956eb3c5051637f5" - sha1: "4ed31ec6b0b175bb109c0eb5fd3d193da823339f" - source_ref: "libretro.cpp:1304-1364 (get_bootloader_from_file), bootloader.cpp:20-55 (load)" - notes: "Mapped at 0x0000-0x00FF, swapped out when register 0xFF50 is written. Core option gambatte_gb_bootloader must be enabled." + validation: {core: [size], upstream: [size, crc32]} + source_ref: "libretro.cpp:1303-1363 (get_bootloader_from_file), bootloader.cpp:20-55 (load)" + notes: "Mapped at 0x0000-0x00FF, swapped out when register 0xFF50 is written." - # --- CGB boot ROM (optional, enables startup animation) --- - name: "gbc_bios.bin" system: nintendo-gbc description: "Game Boy Color (CGB-001) boot ROM" required: false hle_fallback: true size: 2304 - md5: "dbfce9db9deaa2567f6a84fde55f9680" - sha1: "1293d68bf9643bc4f36954c1e80e38f39864528d" - source_ref: "libretro.cpp:1304-1364 (get_bootloader_from_file), bootloader.cpp:20-55 (load)" - notes: "Mapped at 0x0000-0x08FF with cartridge data preserved at 0x0100-0x01FF. Also used for GBA-enhanced mode with a patch at 0xF2. Presence required for FORCE_CGB flag when hw mode is set to GBC or GBA." + validation: {core: [size], upstream: [size, crc32]} + source_ref: "libretro.cpp:1303-1363 (get_bootloader_from_file), bootloader.cpp:20-55 (load)" + notes: "Mapped at 0x0000-0x08FF with cartridge data preserved at 0x0100-0x01FF. Also used for GBA mode with a patch at 0xF2. Presence required for FORCE_CGB flag when hw mode is GBC or GBA." diff --git a/emulators/gearboy.yml b/emulators/gearboy.yml index 5b25caec..85ac5d7d 100644 --- a/emulators/gearboy.yml +++ b/emulators/gearboy.yml @@ -1,9 +1,9 @@ emulator: Gearboy type: libretro -core_classification: community_fork -source: "https://github.com/libretro/Gearboy" +core_classification: official_port +source: "https://github.com/drhelius/Gearboy" upstream: "https://github.com/drhelius/Gearboy" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "3.4.1" display_name: "Nintendo - Game Boy / Color (Gearboy)" cores: @@ -13,19 +13,25 @@ systems: - nintendo-gbc notes: | - Gearboy is a Game Boy / Game Boy Color emulator by drhelius (Nacho Sanchez). + Gearboy is a Game Boy / Game Boy Color emulator by drhelius (Ignacio Sanchez). + The buildbot builds from drhelius/Gearboy (upstream), not from libretro/Gearboy + (abandoned fork frozen at v2.6.0 from 2018). + Bootrom loading is gated behind core options (disabled by default). + Without bootroms, the core HLE-skips the boot animation. - The upstream standalone has bootrom support (dmg_boot.bin, cgb_boot.bin) - via emu_load_bootrom_dmg/gbc (platforms/desktop-shared/emu.cpp:407-422). - The libretro port does NOT load any BIOS files — retro_init() only stores - system_dir, retro_load_game() calls LoadROMFromBuffer() with no bootrom - loading code (platforms/libretro/libretro.cpp:94-109, 335-364). +files: + - name: dmg_boot.bin + description: Game Boy DMG bootrom + size: 256 + required: false + hle_fallback: true + validation: [size] + source_ref: "libretro.cpp:208,211 Memory.cpp:601-606,699-738" - The .info declares firmware_count=2 (dmg_boot.bin, cgb_boot.bin) but the - code never references these files. .info is wrong for the libretro port. - - The core HLE-skips the boot animation — games work without BIOS. - -files: [] - -exclusion_note: "The .info declares dmg_boot.bin and cgb_boot.bin but the libretro port never loads them (no bootrom loading code in libretro.cpp). The upstream standalone supports bootroms but this was not ported to libretro." + - name: cgb_boot.bin + description: Game Boy Color bootrom + size: 2304 + required: false + hle_fallback: true + validation: [size] + source_ref: "libretro.cpp:209,212 Memory.cpp:608-611,699-738" diff --git a/emulators/gearcoleco.yml b/emulators/gearcoleco.yml index 1246ac07..96792aea 100644 --- a/emulators/gearcoleco.yml +++ b/emulators/gearcoleco.yml @@ -2,7 +2,8 @@ emulator: Gearcoleco type: libretro core_classification: official_port source: "https://github.com/drhelius/Gearcoleco" -profiled_date: "2026-03-21" +upstream: "https://github.com/drhelius/Gearcoleco" +profiled_date: "2026-03-23" core_version: "1.0.0" display_name: "Coleco - ColecoVision (Gearcoleco)" cores: @@ -11,23 +12,20 @@ systems: - colecovision notes: | - Gearcoleco is a ColecoVision emulator by Ignacio Sanchez (drhelius). - The ColecoVision BIOS ROM is required to run games. Without it, the - core displays a static "no BIOS" placeholder image (kNoBiosImage from - no_bios.h) and games will not execute. + ColecoVision emulator by Ignacio Sanchez (drhelius). Official port + maintained by the upstream author. The ColecoVision BIOS ROM is required. + Without it, the core renders a static placeholder image (kNoBiosImage from + no_bios.h) and games do not execute. - The BIOS is loaded in load_bootroms() (libretro.cpp:293-305) from the - system directory. The core first tries "colecovision.rom", then falls - back to "coleco.rom" if the first file is not found. + The libretro wrapper (libretro.cpp:293-306) tries "colecovision.rom" first, + then falls back to "coleco.rom". Both resolve to the same LoadBios() call + in Memory.cpp:228-259 which validates size == 0x2000 (8192 bytes) only. + No hash check is performed. - Memory.cpp:LoadBios() validates the file size must be exactly 8192 - bytes (0x2000). No hash check is performed by the core itself. - - On reset, the BIOS byte at offset 0x69 is patched to select region: + On reset, BIOS byte at offset 0x69 is patched for region selection: 0x3C for NTSC, 0x32 for PAL (Memory.cpp:184-187). - The core also supports Super Game Module (SGM) expanded RAM but that - requires no additional BIOS files. + SGM (Super Game Module) expanded RAM requires no additional BIOS files. files: - name: "colecovision.rom" @@ -35,16 +33,5 @@ files: system: colecovision required: true size: 8192 - source_ref: "platforms/libretro/libretro.cpp:293-305 (load_bootroms)" - -platform_details: - colecovision: - bios_filename: "colecovision.rom" - bios_fallback: "coleco.rom" - bios_size: 8192 - source_ref: "src/Memory.cpp:228-258" - notes: | - LoadBios() reads the file as raw binary. Size must be exactly 0x2000 - (8192 bytes) or the load is rejected with a log message. The BIOS is - mapped at address 0x0000-0x1FFF in the ColecoVision memory map. On - reset, byte 0x69 is patched for NTSC/PAL region selection. + validation: [size] + source_ref: "platforms/libretro/libretro.cpp:293-306, src/Memory.cpp:228-259" diff --git a/emulators/geargrafx.yml b/emulators/geargrafx.yml index 2e91da49..b6cbf65b 100644 --- a/emulators/geargrafx.yml +++ b/emulators/geargrafx.yml @@ -2,7 +2,8 @@ emulator: Geargrafx type: libretro core_classification: official_port source: "https://github.com/drhelius/Geargrafx" -profiled_date: "2026-03-21" +upstream: "https://github.com/drhelius/Geargrafx" +profiled_date: "2026-03-23" core_version: "1.6.0" display_name: "NEC - PC Engine / SuperGrafx / CD (Geargrafx)" cores: @@ -14,107 +15,68 @@ systems: notes: | Geargrafx is a PC Engine / TurboGrafx-16 / SuperGrafx / CD-ROM emulator by - Ignacio Sanchez (drhelius). HuCard games (pce/sgx/hes) run without BIOS. + Ignacio Sanchez (drhelius). HuCard games run without BIOS. - CD-ROM games require a System Card BIOS loaded from the system directory. - The core option "geargrafx_cdrom_bios" selects which card image to use: - Auto (default, maps to syscard3.pce), System Card 1, System Card 2, - System Card 3, or Game Express. The load_bios() function in libretro.cpp - builds the path as "{system_directory}/{filename}" and calls + CD-ROM games require a System Card BIOS from the system directory. The core + option "geargrafx_cdrom_bios" selects which card: Auto (default, maps to + syscard3.pce), System Card 1, System Card 2, System Card 3, or Game Express. + load_bios() in libretro.cpp builds "{system_directory}/{filename}" and calls core->LoadBios(path, true) for the syscard, then always attempts to load - gexpress.pce as the Game Express BIOS via core->LoadBios(path, false). + gexpress.pce via core->LoadBios(path, false). - BIOS validation uses CRC32 against an internal game_db (game_db.h). - The LoadBios() function in media.cpp reads the file, strips a 512-byte - header if present, computes CRC32, and looks it up in k_game_database - entries flagged with GG_GAMEDB_BIOS_SYSCARD or GG_GAMEDB_BIOS_GAME_EXPRESS. - If the CRC32 is not found, the BIOS is marked as "Unknown" and invalid, - but loading still proceeds (the file is kept in memory). - - Expected BIOS sizes (from defines.h): - - System Card: GG_BIOS_SYSCARD_SIZE = 0x40000 (256 KB) - - Game Express: GG_BIOS_GAME_EXPRESS_SIZE = 0x8000 (32 KB) + LoadBios() in media.cpp reads the file, strips a 512-byte header if present, + computes CRC32, and checks it against k_game_database entries flagged with + GG_GAMEDB_BIOS_SYSCARD or GG_GAMEDB_BIOS_GAME_EXPRESS. If the CRC32 is not + found, the BIOS is marked as "Unknown" and invalid, but loading still proceeds. + Size is checked against expected constants and logged if wrong, but not enforced. Game Express CD-ROM games are auto-detected via CRC32 lookup in game_db.h - (GG_GAMEDB_GAME_EXPRESS flag). When detected, the core uses the Game Express - BIOS instead of the System Card for ROM bank mapping (media.cpp:649). - - Arcade Card games are also detected from game_db.h and enable extra - 0x30000 bytes of Card RAM for Super CD-ROM mode. - - No separate US-specific filenames (syscard3u.pce). US variants must be - named syscard3.pce/syscard2.pce — recognized by CRC32 validation. + (GG_GAMEDB_GAME_EXPRESS flag). Arcade Card games are also detected from + game_db.h and enable extra 0x30000 bytes of Card RAM for Super CD-ROM mode. files: - # -- CD-ROM System Card 3 (Japan) - default -- - - name: "syscard3.pce" - description: "Super CD-ROM System Card 3.0 (Japan)" - region: "NTSC-J" + description: "Super CD-ROM System Card 3.0" + size: 262144 required: true - source_ref: "libretro.cpp:453,471-473, game_db.h:50 CRC32=0x6D9A73EF" + validation: [size, crc32] + source_ref: "libretro.cpp:453,471-473, media.cpp:241-307, defines.h:52, game_db.h:50,52" notes: > - Default BIOS for CD-ROM games (cdrom_bios=0 or 3). Recommended for - most CD-ROM and Super CD-ROM titles. 256 KB expected size. - - # -- CD-ROM System Card 2 (Japan) -- + Default BIOS for CD-ROM games (cdrom_bios Auto or System Card 3). + game_db.h recognizes Japan (CRC32 6D9A73EF) and USA (CRC32 2B5B75FE) + variants under the same filename. - name: "syscard2.pce" - description: "CD-ROM System Card 2.0 (Japan)" - region: "NTSC-J" + description: "CD-ROM System Card 2.0" + size: 262144 required: false - source_ref: "libretro.cpp:452,462-463, game_db.h:48-49" + validation: [size, crc32] + source_ref: "libretro.cpp:452,462-463, media.cpp:241-307, game_db.h:48-49,51" notes: > - cdrom_bios = 'System Card 2'. For older CD-ROM2 titles. game_db.h lists - two variants: v2.0 (CRC32=0x52520BC6) and v2.1 (CRC32=0x283B74E0). - - # -- CD-ROM System Card 1 (Japan) -- + cdrom_bios = 'System Card 2'. For older CD-ROM2 titles. game_db.h + recognizes three variants: v2.0 Japan (CRC32 52520BC6), v2.1 Japan + (CRC32 283B74E0), and USA (CRC32 FF2A5EC3). - name: "syscard1.pce" description: "CD-ROM System Card 1.0 (Japan)" - region: "NTSC-J" + size: 262144 required: false - source_ref: "libretro.cpp:451,459-460, game_db.h:47 CRC32=0x3F9F95A4" + validation: [size, crc32] + source_ref: "libretro.cpp:451,459-460, media.cpp:241-307, game_db.h:47" notes: > cdrom_bios = 'System Card 1'. Very early CD-ROM2 games only. - - # -- TurboGrafx CD System Card 3 (US) -- - # Not directly selectable via core option, but game_db.h recognizes it. - - - name: "syscard3.pce" - sha1_note: "US variant" - description: "TurboGrafx CD Super System Card 3.0 (US)" - region: "NTSC-U" - required: false - source_ref: "game_db.h:52 CRC32=0x2B5B75FE" - notes: > - US variant must be named syscard3.pce. CRC32 validation recognizes it. - - # -- TurboGrafx CD System Card 2 (US) -- - - - name: "syscard2.pce" - sha1_note: "US variant" - description: "TurboGrafx CD System Card 2.0 (US)" - region: "NTSC-U" - required: false - source_ref: "game_db.h:51 CRC32=0xFF2A5EC3" - notes: > - Same constraint as US System Card 3: must be named syscard2.pce. - Recognized by game_db.h CRC32 validation. - - # -- Game Express CD Card -- + CRC32 3F9F95A4. - name: "gexpress.pce" description: "Game Express CD Card" - region: "NTSC-J" + size: 32768 required: false - source_ref: "libretro.cpp:454,468-469,481-482, game_db.h:53-54" + validation: [size, crc32] + source_ref: "libretro.cpp:454,468-469,481-482, media.cpp:241-307, defines.h:53, game_db.h:53-54" notes: > Always loaded alongside the selected System Card BIOS (libretro.cpp:481). - Required for unlicensed Game Express CD-ROM titles (AV Tanjou, - Bishoujo Pachinko, etc). game_db.h lists two variants: - Blue Version (CRC32=0x51A12D90) and Green Version (CRC32=0x16AAF05A). - Expected size: 32 KB (0x8000). + Required for Game Express CD-ROM titles. game_db.h recognizes Blue Version + (CRC32 51A12D90) and Green Version (CRC32 16AAF05A). valid_bios_crc32: syscard: diff --git a/emulators/gearlynx.yml b/emulators/gearlynx.yml index 526b6f47..a18edb82 100644 --- a/emulators/gearlynx.yml +++ b/emulators/gearlynx.yml @@ -2,7 +2,7 @@ emulator: Gearlynx type: libretro core_classification: official_port source: "https://github.com/drhelius/Gearlynx" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "1.0.0" display_name: "Atari - Lynx (GearLynx)" cores: [gearlynx] @@ -12,7 +12,7 @@ verification: existence notes: | Gearlynx is an Atari Lynx emulator by Ignacio Sanchez (drhelius). The libretro core loads lynxboot.img from the system directory at - retro_load_game time (libretro.cpp:106-130, function load_bootroms). + retro_load_game time (libretro.cpp:105-129, function load_bootroms). Path is built as: system_directory + "/lynxboot.img", no subdirectory. LoadBios in media.cpp:274 reads exactly 512 bytes (GLYNX_BIOS_SIZE @@ -32,7 +32,6 @@ notes: | to be loaded for the emulation loop to execute. ROM extensions: .lnx, .lyx, .o - Core options: none documented in the libretro port. files: - name: "lynxboot.img" @@ -43,5 +42,6 @@ files: sha1: "e4ed47fae31693e016b081c6bda48da5b70d7ccb" md5: "fcd403db69f54290b51035d82f835e7b" crc32: "0d973c9d" - source_ref: "libretro.cpp:106-130 (load_bootroms), media.cpp:274-329 (LoadBios), defines.h:52 (GLYNX_BIOS_SIZE=0x200), game_db.h:38 (GLYNX_DB_BIOS_CRC=0x0D973C9D), gearlynx_core_inline.h:33-37 (no-bios guard)" + validation: [size, crc32] + source_ref: "libretro.cpp:105-129 (load_bootroms), media.cpp:274-329 (LoadBios), defines.h:52 (GLYNX_BIOS_SIZE=0x200), game_db.h:38 (GLYNX_DB_BIOS_CRC=0x0D973C9D), gearlynx_core_inline.h:33-37 (no-bios guard)" notes: "512-byte boot ROM validated by CRC32 after load. Invalid CRC logs a warning but still works. Missing or wrong-size file blocks emulation entirely (no HLE fallback)." diff --git a/emulators/gearsystem.yml b/emulators/gearsystem.yml index a05c9b00..21717a7c 100644 --- a/emulators/gearsystem.yml +++ b/emulators/gearsystem.yml @@ -2,7 +2,8 @@ emulator: Gearsystem type: libretro core_classification: official_port source: "https://github.com/drhelius/Gearsystem" -profiled_date: "2026-03-21" +upstream: "https://github.com/drhelius/Gearsystem" +profiled_date: "2026-03-23" core_version: "3.2.0" display_name: "Sega - MS/GG/SG-1000 (Gearsystem)" cores: @@ -21,8 +22,8 @@ notes: | (both disabled by default). Boot ROMs are loaded in load_bootroms() from the system directory with fixed filenames. - SG-1000 has no BIOS support. IsBootromEnabled() in Memory.cpp explicitly - returns false when a SG-1000 cartridge is detected. + SG-1000 and Game Gear in SMS mode have no BIOS support. + IsBootromEnabled() returns false for both cases. When enabled, the boot ROM executes as on original hardware, which may cause invalid ROMs to lock or fail to boot entirely. @@ -32,17 +33,17 @@ files: - name: "bios.sms" system: sega-mastersystem required: false - source_ref: "platforms/libretro/libretro.cpp:413-414 (load_bootroms)" + source_ref: "platforms/libretro/libretro.cpp:414,417 (load_bootroms)" - name: "bios.gg" system: sega-gamegear required: false - source_ref: "platforms/libretro/libretro.cpp:415-416 (load_bootroms)" + source_ref: "platforms/libretro/libretro.cpp:415,418 (load_bootroms)" platform_details: mastersystem: bios_filename: "bios.sms" - source_ref: "src/Memory.cpp:222-228" + source_ref: "src/Memory.cpp:223-228" notes: | Boot ROM loaded via LoadBootromSMS() -> LoadBootroom(path, false). Raw binary read, stored in m_pBootromSMS. Bank count computed as @@ -50,7 +51,7 @@ platform_details: gamegear: bios_filename: "bios.gg" - source_ref: "src/Memory.cpp:230-234" + source_ref: "src/Memory.cpp:230-235" notes: | Boot ROM loaded via LoadBootromGG() -> LoadBootroom(path, true). Raw binary read, stored in m_pBootromGG. Same bank computation. @@ -60,4 +61,4 @@ platform_details: bios_filename: null notes: | No BIOS support. Memory.cpp:291 returns false from IsBootromEnabled() - when IsSG1000() is true. + when IsSG1000() or IsGameGearInSMSMode() is true. diff --git a/emulators/genesis_plus_gx.yml b/emulators/genesis_plus_gx.yml index a1f5e5aa..6fa979d5 100644 --- a/emulators/genesis_plus_gx.yml +++ b/emulators/genesis_plus_gx.yml @@ -3,7 +3,7 @@ type: libretro core_classification: community_fork source: "https://github.com/libretro/Genesis-Plus-GX" upstream: "https://github.com/ekeeke/Genesis-Plus-GX" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "v1.7.4" display_name: "Sega - MS/GG/MD/CD (Genesis Plus GX)" cores: @@ -36,21 +36,18 @@ files: - name: bios_CD_U.bin system: sega-megacd required: true - size: 131072 # 128 KB (0x20000) note: "Sega CD (NTSC-U) boot ROM. Loaded for REGION_USA." source_ref: "core/loadrom.c:409" - name: bios_CD_E.bin system: sega-megacd required: true - size: 131072 note: "Mega CD (PAL) boot ROM. Loaded for REGION_EUROPE." source_ref: "core/loadrom.c:412" - name: bios_CD_J.bin system: sega-megacd required: true - size: 131072 note: "Mega CD (NTSC-J) boot ROM. Loaded for default/Japan region." source_ref: "core/loadrom.c:415" @@ -90,7 +87,6 @@ files: - name: bios_MD.bin system: sega-megadrive required: false - size: 2048 # 2 KB (0x800) note: "Mega Drive TMSS boot ROM. Shows 'Produced by or under license' screen." source_ref: "libretro/libretro.c:3651" @@ -100,28 +96,28 @@ files: - name: ggenie.bin system: sega-megadrive required: false - size: 32768 # 32 KB (0x8000) note: "Game Genie ROM. Loaded when Game Genie lock-on is enabled." source_ref: "core/cart_hw/ggenie.c:64" - name: areplay.bin system: sega-megadrive required: false - size: 65536 # max 64 KB (0x10000) note: "Action Replay (Pro) ROM. Loaded when Action Replay lock-on is enabled." source_ref: "core/cart_hw/areplay.c:64" - name: sk.bin system: sega-megadrive required: false - size: 2097152 # 2 MB (0x200000) + size: 2097152 + validation: [size] note: "Sonic & Knuckles ROM. Required for S&K lock-on feature." source_ref: "core/cart_hw/md_cart.c:867" - name: sk2chip.bin system: sega-megadrive required: false - size: 262144 # 256 KB (0x40000) + size: 262144 + validation: [size] note: "Sonic & Knuckles UPMEM ROM. Used by Sonic 2 & Knuckles lock-on." source_ref: "core/cart_hw/md_cart.c:873" diff --git a/emulators/genesis_plus_gx_wide.yml b/emulators/genesis_plus_gx_wide.yml index 0b7fd4aa..d65c8c5e 100644 --- a/emulators/genesis_plus_gx_wide.yml +++ b/emulators/genesis_plus_gx_wide.yml @@ -3,7 +3,7 @@ type: libretro core_classification: enhanced_fork source: "https://github.com/libretro/Genesis-Plus-GX-Wide" upstream: "https://github.com/ekeeke/Genesis-Plus-GX" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "v1.7.4" display_name: "Sega - MS/GG/MD/CD (Genesis Plus GX Wide)" cores: @@ -26,45 +26,45 @@ files: system: sega-megacd required: true size: 131072 - source_ref: "core/loadrom.c:409" + source_ref: "core/loadrom.c:408" - name: bios_CD_E.bin system: sega-megacd required: true size: 131072 - source_ref: "core/loadrom.c:412" + source_ref: "core/loadrom.c:411" - name: bios_CD_J.bin system: sega-megacd required: true size: 131072 - source_ref: "core/loadrom.c:415" + source_ref: "core/loadrom.c:414" - name: bios_U.sms system: sega-mastersystem required: false - source_ref: "core/loadrom.c:511" + source_ref: "core/loadrom.c:510" - name: bios_E.sms system: sega-mastersystem required: false - source_ref: "core/loadrom.c:514" + source_ref: "core/loadrom.c:513" - name: bios_J.sms system: sega-mastersystem required: false - source_ref: "core/loadrom.c:517" + source_ref: "core/loadrom.c:516" - name: bios.gg system: sega-gamegear required: false - source_ref: "core/loadrom.c:480" + source_ref: "core/loadrom.c:479" - name: bios_MD.bin system: sega-megadrive required: false size: 2048 - source_ref: "libretro/libretro.c:3551" + source_ref: "libretro/libretro.c:3682" - name: ggenie.bin system: sega-megadrive @@ -82,10 +82,12 @@ files: system: sega-megadrive required: false size: 2097152 - source_ref: "core/cart_hw/md_cart.c:867" + validation: [size] + source_ref: "core/cart_hw/md_cart.c:750" - name: sk2chip.bin system: sega-megadrive required: false size: 262144 - source_ref: "core/cart_hw/md_cart.c:873" + validation: [size] + source_ref: "core/cart_hw/md_cart.c:756" diff --git a/emulators/geolith.yml b/emulators/geolith.yml index ae768e34..5c017d4f 100644 --- a/emulators/geolith.yml +++ b/emulators/geolith.yml @@ -69,7 +69,7 @@ files: size: 524288 crc32: "03cc9f6a" note: "NEO-MVH MV1C (Asia) - default for AS region" - source_ref: "src/geo.c:179" + source_ref: "src/geo.c:180" - name: "sp-s2.sp1" archive: neogeo.zip diff --git a/emulators/gme.yml b/emulators/gme.yml index 362e1441..fdc99f17 100644 --- a/emulators/gme.yml +++ b/emulators/gme.yml @@ -1,8 +1,9 @@ emulator: Game Music Emu type: utility +core_classification: pure_libretro source: "https://github.com/libretro/libretro-gme" upstream: "https://github.com/libgme/game-music-emu" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "Git" display_name: "Game Music Emu" cores: [gme] @@ -10,7 +11,6 @@ systems: [] files: [] notes: > Libretro wrapper around Blargg's Game Music Emu library. - Plays chiptune music files from various consoles: NSF (NES), SPC (SNES), - GBS (Game Boy), VGM/VGZ (Sega), HES (PC Engine), AY (ZX Spectrum), - SAP (Atari), KSS (MSX). Loads music files as content. - No BIOS, firmware, or system directory files required. + Plays chiptune music files: NSF/NSFE (NES), SPC (SNES), GBS (Game Boy), + VGM/VGZ (Sega), HES (PC Engine), AY (ZX Spectrum), SAP (Atari), + KSS (MSX), GYM (Genesis). Loads music files as content. diff --git a/emulators/gong.yml b/emulators/gong.yml index 888d189c..77c73f29 100644 --- a/emulators/gong.yml +++ b/emulators/gong.yml @@ -1,13 +1,14 @@ emulator: Gong type: game +core_classification: pure_libretro source: "https://github.com/libretro/gong" -profiled_date: "2026-03-21" +upstream: "https://danzaidan.itch.io/" +profiled_date: "2026-03-23" core_version: "1.0" display_name: "Gong" cores: [gong] systems: [] files: [] notes: > - Simple Pong clone written as a minimal libretro core example. - Self-contained with all rendering done programmatically. - No content file, BIOS, or system directory files required. + Pong clone. Self-contained single-file core, all rendering programmatic. + Original code by Dan Zaidan, ported to libretro by Brad Parker. diff --git a/emulators/gpsp.yml b/emulators/gpsp.yml index aefc5b2f..8a88239e 100644 --- a/emulators/gpsp.yml +++ b/emulators/gpsp.yml @@ -2,8 +2,8 @@ emulator: gpSP type: libretro core_classification: community_fork source: "https://github.com/libretro/gpsp" -upstream: "https://github.com/BASLQC/gPSP" -profiled_date: "2026-03-21" +upstream: "https://github.com/davidgfnet/gpsp" +profiled_date: "2026-03-23" core_version: "Git" display_name: "Nintendo - Game Boy Advance (gpSP)" cores: @@ -12,9 +12,9 @@ systems: - nintendo-gba notes: | - gpSP is a Game Boy Advance emulator originally by Exophase, ported to - libretro. Historically it required the official GBA BIOS to run. Current - versions ship a built-in open-source BIOS (bios/open_gba_bios.bin) compiled + gpSP is a Game Boy Advance emulator originally by Exophase, forked by + notaz for GP2X/Pandora, now maintained by davidgfnet for libretro. + Ships a built-in open-source BIOS (bios/open_gba_bios.bin) compiled from bios/source/ that covers most games. The core option gpsp_bios controls BIOS selection: @@ -22,52 +22,42 @@ notes: | builtin - always use the built-in open-source BIOS official - try gba_bios.bin, warn and fall back to built-in if missing - A second option gpsp_boot_mode selects startup behavior: - game (default) - skip BIOS intro, boot directly into game - bios - run the BIOS boot animation before launching - - BIOS loading path (libretro/libretro.c:1093-1131): + BIOS loading path (libretro/libretro.c:1100-1131): 1. Resolve system directory (RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY) 2. Append "/gba_bios.bin" 3. load_bios() reads 0x4000 (16 KB) into bios_rom[] 4. Sanity check: bios_rom[0] must be 0x18 (ARM branch opcode) 5. On failure, memcpy open_gba_bios_rom[] as fallback - The official BIOS improves compatibility for a few games that rely on - precise SWI behavior or BIOS checksum verification. The built-in BIOS - works for the vast majority of the GBA library. + The official BIOS improves compatibility for games that rely on + precise SWI behavior or BIOS checksum verification. - Upstream (Exophase v0.9) required the official BIOS with no fallback. - The built-in open-source BIOS is a libretro port addition. + Upstream (notaz/Exophase) required the official BIOS with no fallback. + The built-in open-source BIOS is a davidgfnet/libretro addition. files: - # ------------------------------------------------------- - # Game Boy Advance - BIOS (optional, built-in fallback) - # ------------------------------------------------------- - name: gba_bios.bin system: nintendo-gba required: false hle_fallback: true - size: 16384 # 16 KB (0x4000) - validation: [size] - note: "Official GBA BIOS. Built-in open-source BIOS used as fallback. Real BIOS needed for full SWI accuracy and boot logo." - source_ref: "libretro/libretro.c:1111" + size: 16384 + description: "Official GBA BIOS" + note: "Built-in open-source BIOS used as fallback. Real BIOS needed for full SWI accuracy and boot animation." + source_ref: "libretro/libretro.c:1111, gba_memory.c:2568-2579" platform_details: gba: - bios_size: 16384 # 16 KB + bios_size: 16384 hle_bios: true - source_ref: "libretro/libretro.c:1107-1131, bios/source/" + source_ref: "libretro/libretro.c:1100-1131, bios/source/" notes: | The built-in BIOS (open_gba_bios_rom, 16 KB) is an open-source reimplementation compiled from bios/source/. It implements most SWI calls (SoftReset, RegisterRamReset, Halt, VBlankIntrWait, arithmetic, decompression, sound, multiboot). - Validation is minimal: load_bios() in gba_memory.c reads exactly - 0x4000 bytes. The libretro frontend checks bios_rom[0] == 0x18 - (ARM branch instruction at reset vector) to reject garbage files. - No hash or checksum verification is performed. + No hash or checksum verification is performed. The only check + is bios_rom[0] == 0x18 (ARM branch at reset vector). The bios_type enum (main.h:56-61) defines three modes: auto_detect - try official first, fall back to built-in diff --git a/emulators/handy.yml b/emulators/handy.yml index 4e8bdf00..54ad9e89 100644 --- a/emulators/handy.yml +++ b/emulators/handy.yml @@ -2,7 +2,8 @@ emulator: Handy type: libretro core_classification: community_fork source: "https://github.com/libretro/libretro-handy" -profiled_date: "2026-03-21" +upstream: "https://handy.sourceforge.net/" +profiled_date: "2026-03-23" core_version: "0.95" display_name: "Atari - Lynx (Handy)" cores: @@ -10,27 +11,29 @@ cores: systems: [atari-lynx] notes: | - Handy is an Atari Lynx emulator. The core loads lynxboot.img from - the system directory and validates it by CRC32 (0x0D973C9D). If the - file is missing or the CRC does not match, the core falls back to an - internal HLE BIOS that replicates the boot sequence in software - (ram clear, cart loader decrypt, jump to $0200). + Handy is an Atari Lynx emulator by K. Wilkins (Handy 0.95, 2007). + The core loads lynxboot.img from the system directory and validates + it by CRC32 (0x0D973C9D). If the file is missing or the CRC does + not match, the core falls back to an internal HLE BIOS that + replicates the boot sequence in software (ram clear, cart loader + decrypt, jump to $0200). The HLE path intercepts CPU calls to ROM addresses FE00, FE19, FE4A and FF80 via a Mikie register write trap (address 0xFD97). When useEmu is true (no valid BIOS loaded), CRom initialises mRomData with a default fill byte (0x88) plus reset vectors pointing to - the HLE entry points. The cart decryption uses a hardcoded RSA - public key (lynxdec.cpp) identical to the real hardware. + the HLE entry points. - With the real BIOS, the first frame has unusually high cycle counts - because hardware timers start from the boot ROM rather than being - set artificially. Blip_Buffer::end_frame() caps the audio buffer - to handle this overflow. + Upstream Handy 0.95 requires the BIOS (throws CLynxException) and + validates by checking the first 16 bytes against a hardcoded + signature. The libretro port added the HLE fallback and switched + to full CRC32 validation. - File path: libretro.cpp retro_load_game() joins - RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY with "lynxboot.img". - No subdirectory. + For headerless cartridges (no LNX/BS93 header), the core loads + howard.o from the system directory. This is the Epyx development + kit bootloader used to bootstrap raw/headerless ROMs into memory. + Upstream requires howard.o for headerless carts (throws exception); + the libretro port makes it optional (logs error, continues). files: - name: "lynxboot.img" @@ -41,5 +44,12 @@ files: size: 512 crc32: "0d973c9d" validation: [size, crc32] - source_ref: "rom.h:48-49 (ROM_SIZE=0x200, ROM_CRC32=0xD973C9D), rom.cpp:76-128 (CRom constructor), libretro.cpp:1231-1258 (bios path + CSystem init)" - notes: "Validated by CRC32 at load time. If invalid or missing, core uses HLE fallback (system.cpp HLE_BIOS_* functions). Games work without it but the real boot ROM provides accurate startup timing." + source_ref: "rom.h:48-49 (ROM_SIZE=0x200, ROM_CRC32=0x0D973C9D), rom.cpp:76-129 (CRom constructor), libretro.cpp:1231-1258 (bios path + CSystem init)" + notes: "Validated by CRC32 at load time. If invalid or missing, core uses HLE fallback (system.cpp:303-361 HLE_BIOS_* functions, system.cpp:406-428 trap writes)." + + - name: "howard.o" + system: atari-lynx + description: "Epyx Howard bootloader for headerless cartridges" + required: false + source_ref: "system.cpp:197-238 (CartHeaderLess check, howard.o load via fill_pathname_resolve_relative)" + notes: "Loaded only for headerless carts (no LNX/BS93 header). Resolved relative to the BIOS file path (system directory). Passed to CRam for execution. Most commercial games have headers and skip this entirely." diff --git a/emulators/hatari.yml b/emulators/hatari.yml index 921818de..bd63faca 100644 --- a/emulators/hatari.yml +++ b/emulators/hatari.yml @@ -1,10 +1,10 @@ emulator: Hatari type: libretro -core_classification: community_fork +core_classification: frozen_snapshot source: "https://github.com/libretro/hatari" upstream: "https://github.com/hatari/hatari" logo: "https://raw.githubusercontent.com/hatari/hatari/main/share/icons/hicolor/scalable/apps/hatari.svg" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "1.8" display_name: "Atari - ST/STE/TT/Falcon (Hatari)" cores: @@ -41,7 +41,7 @@ files: TOS ROM image. Any valid version (1.00 through 4.04) or EmuTOS works. The core auto-detects version from the ROM header and adjusts machine type. Default location is system/tos.img, additional images go in system/hatari/tos/. - source_ref: "src/tos.c:576-696, libretro/libretro.c:387-410" + source_ref: "src/tos.c:575-696, libretro/libretro.c:387-410" # -- Cartridge ROM (optional) -- # External cartridge image, max 128 KB. Formats: .img, .rom, .stc @@ -51,6 +51,7 @@ files: path: null # user-configured via szCartridgeImageFileName required: false max_size: 131076 # 0x20004 (.stc with 4-byte header) or 0x20000 (raw) + validation: [size] note: > External cartridge image. Loaded to address 0xFA0000. STC format images (0x20004 bytes) have a 4-byte header that is stripped. diff --git a/emulators/hbmame.yml b/emulators/hbmame.yml index d91eefbb..bb8b4faf 100644 --- a/emulators/hbmame.yml +++ b/emulators/hbmame.yml @@ -4,7 +4,7 @@ core_classification: enhanced_fork source: "https://github.com/libretro/hbmame-libretro" upstream: "https://github.com/Robbbert/hbmame" logo: "https://raw.githubusercontent.com/mamedev/mame/master/docs/source/images/MAMElogo.svg" -profiled_date: "2026-03-21" +profiled_date: "2026-03-23" core_version: "Git" display_name: "Arcade (HBMAME)" cores: @@ -16,33 +16,17 @@ author: Robbbert game_count: 8511 notes: | - HBMAME (Home Brew MAME) is a fork of MAME focused on two things: preserving - homebrew games written for arcade hardware, and including worthwhile hacks of - existing arcade games. The libretro port builds as TARGET=hbmame. + Fork of MAME 0.220 preserving homebrew and hacked arcade games. Builds as + TARGET=hbmame with 191 driver files covering 8511 game entries. Drivers are + hack/homebrew variants of CPS1, CPS2, CPS3, Neo Geo, Pac-Man, Galaxian, etc. - Based on MAME 0.220 (src/version.cpp: BARE_BUILD_VERSION "0.220"). The core - carries 191 driver files under src/hbmame/drivers/ covering ~8500 game entries - (hbmame.lst). Most drivers are hack/homebrew variants of well-known arcade - boards: CPS1, CPS2, CPS3, Neo Geo, Pac-Man, Galaxian, etc. + BIOS handling is identical to MAME. Neo Geo drivers reuse the standard + neogeo.zip BIOS set via unmodified NEO_BIOS macros (neogeo.h). No other + HBMAME driver defines ROM_SYSTEM_BIOS entries. BIOS files are expected as + MAME-format ZIP archives in the ROM search path. - BIOS handling is identical to MAME. HBMAME does not define any custom BIOS - ROMs beyond what standard MAME uses. The Neo Geo subsystem (which accounts for - the bulk of hbmame content) reuses the same neogeo.zip BIOS set as MAME: - sp-s2.sp1, sm1.sm1, sfix.sfix, 000-lo.lo, plus regional and Universe BIOS - variants. The NEO_BIOS macros in src/hbmame/includes/neogeo.h are copied - directly from MAME with no modifications to hashes or filenames. - - The neogeo_noslot.cpp driver includes a reduced MV1C-only BIOS set for a few - specific PCB games (sp-45.sp1, sp1-j3.bin). The neogeohb.cpp driver handles - homebrew and unreleased Neo Geo titles (numbered 300-999) using the same - standard BIOS infrastructure. - - No other hbmame-specific drivers (CPS1, CPS2, Pac-Man, Galaxian, etc.) define - ROM_SYSTEM_BIOS entries. Their games are ROM-only hacks that rely on parent - MAME sets for any BIOS needs. - - BIOS files are expected as MAME-format ZIP archives in the ROM search path. - Users with a working MAME 0.220 BIOS collection need nothing extra for HBMAME. + Data directories (artwork, cheat, hash, ini, samples) can be placed in + {system_dir}/mame/ but are optional and game-specific. files: [] diff --git a/emulators/higan_sfc.yml b/emulators/higan_sfc.yml index e81ee4d8..9f184d1e 100644 --- a/emulators/higan_sfc.yml +++ b/emulators/higan_sfc.yml @@ -2,7 +2,8 @@ emulator: "higan (SFC Accuracy)" type: libretro core_classification: community_fork source: "https://github.com/libretro/nSide" -profiled_date: "2026-03-21" +upstream: "https://github.com/byuu/higan" +profiled_date: "2026-03-23" core_version: "v105 (Super Famicom Accuracy)" display_name: "Nintendo - SNES / Famicom (higan Accuracy)" cores: @@ -12,110 +13,124 @@ systems: - nintendo-sgb notes: | - Historically built from libretro/nSide (fork of higan v106 by hex-usr). - Current nSide source prohibits the accuracy profile build - (libretro.cpp:38 #error). Core is orphaned — last built from an older - nSide revision. Coprocessor firmware loaded from system_dir. - SGB emulation from SGB1.sfc/ or SGB2.sfc/ subdirectories. + Fork of higan v106 by hex-usr, renamed at byuu's request. Dot-based + PPU profile (cycle-accurate, most demanding). Current nSide source + blocks accuracy build (#error at libretro.cpp:39, libretro-sfc.cpp:8). + Core is orphaned from an older nSide revision. + Coprocessor firmware loaded via icarus manifest system from system_dir. + File names follow icarus convention: {identifier}.{content}.rom. + SGB emulation loads from SGB1.sfc/ or SGB2.sfc/ subdirectories, + with fallback to SGB.sfc/ and Super GameBoy.sfc/. + SPC700 IPL ROM (ipl.rom, 64 bytes) compiled into binary. + Accuracy and balanced cartridge loading code is identical. files: + # DSP coprocessors - uPD7725 (split data+program format) - name: "dsp1.data.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/necdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:457-502" - name: "dsp1.program.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/necdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:457-502" - name: "dsp1b.data.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/necdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:457-502" - name: "dsp1b.program.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/necdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:457-502" - name: "dsp2.data.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/necdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:457-502" - name: "dsp2.program.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/necdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:457-502" - name: "dsp3.data.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/necdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:457-502" - name: "dsp3.program.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/necdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:457-502" - name: "dsp4.data.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/necdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:457-502" - name: "dsp4.program.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/necdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:457-502" + # CX4 coprocessor - HG51BS169 - name: "cx4.data.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/hitachidsp" + source_ref: "nSide/sfc/cartridge/load.cpp:405-454" + # Seta coprocessors - uPD96050 - name: "st010.data.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/necdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:504-548" - name: "st010.program.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/necdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:504-548" - name: "st011.data.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/necdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:504-548" - name: "st011.program.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/necdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:504-548" + # ST018 coprocessor - ARM6 - name: "st018.data.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/armdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:362-402" - name: "st018.program.rom" system: nintendo-snes required: false - source_ref: "sfc/coprocessor/armdsp" + source_ref: "nSide/sfc/cartridge/load.cpp:362-402" + # Super Game Boy - name: "SGB1.sfc/sgb1.boot.rom" system: nintendo-sgb required: false + source_ref: "nSide/gb/system/system.cpp:54-65" - name: "SGB1.sfc/program.rom" system: nintendo-sgb required: false + source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215" - name: "SGB2.sfc/sgb2.boot.rom" system: nintendo-sgb required: false + source_ref: "nSide/gb/system/system.cpp:54-65" - name: "SGB2.sfc/program.rom" system: nintendo-sgb required: false + source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215" diff --git a/emulators/higan_sfc_balanced.yml b/emulators/higan_sfc_balanced.yml index 657f59b3..ebf5af5c 100644 --- a/emulators/higan_sfc_balanced.yml +++ b/emulators/higan_sfc_balanced.yml @@ -2,7 +2,8 @@ emulator: "nSide (SFC Balanced)" type: libretro core_classification: enhanced_fork source: "https://github.com/libretro/nSide" -profiled_date: "2026-03-21" +upstream: "https://gitlab.com/higan/higan" +profiled_date: "2026-03-23" core_version: "v105 (Super Famicom Balanced)" display_name: "Nintendo - SNES / Famicom (nSide Balanced)" cores: @@ -14,115 +15,118 @@ systems: notes: | Fork of higan v106 by hex-usr, renamed at byuu's request. Balanced PPU profile (scanline-precision, faster than dot-based accuracy). - Loads coprocessor firmware from system_dir via locate_libretro(). - SGB emulation loads from SGB1.sfc/ or SGB2.sfc/ subdirectories. + Coprocessor firmware loaded via icarus manifest system from system_dir. + File names follow icarus convention: {identifier}.{content}.rom. + SGB emulation loads from SGB1.sfc/ or SGB2.sfc/ subdirectories, + with fallback to SGB.sfc/ and Super GameBoy.sfc/. files: - # DSP coprocessors (split data+program format) + # DSP coprocessors - uPD7725 (split data+program format) - name: "dsp1.data.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/necdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" - name: "dsp1.program.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/necdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" - name: "dsp1b.data.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/necdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" - name: "dsp1b.program.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/necdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" - name: "dsp2.data.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/necdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" - name: "dsp2.program.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/necdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" - name: "dsp3.data.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/necdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" - name: "dsp3.program.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/necdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" - name: "dsp4.data.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/necdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" - name: "dsp4.program.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/necdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" - # CX4 coprocessor + # CX4 coprocessor - HG51BS169 - name: "cx4.data.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/hitachidsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:405-454" - # Seta coprocessors + # Seta coprocessors - uPD96050 - name: "st010.data.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/necdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548" - name: "st010.program.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/necdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548" - name: "st011.data.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/necdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548" - name: "st011.program.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/necdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548" + # ST018 coprocessor - ARM6 - name: "st018.data.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/armdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:362-402" - name: "st018.program.rom" system: nintendo-snes required: false - source_ref: "nSide/sfc/coprocessor/armdsp" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:362-402" # Super Game Boy - name: "SGB1.sfc/sgb1.boot.rom" system: nintendo-sgb required: false - source_ref: "nSide/target-libretro/libretro-sfc.cpp:142-184" + source_ref: "nSide/gb/system/system.cpp:54-65" - name: "SGB1.sfc/program.rom" system: nintendo-sgb required: false - source_ref: "nSide/target-libretro/libretro-sfc.cpp:182" + source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215" - name: "SGB2.sfc/sgb2.boot.rom" system: nintendo-sgb required: false - source_ref: "nSide/target-libretro/libretro-sfc.cpp:142-184" + source_ref: "nSide/gb/system/system.cpp:54-65" - name: "SGB2.sfc/program.rom" system: nintendo-sgb required: false - source_ref: "nSide/target-libretro/libretro-sfc.cpp:182" + source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215" diff --git a/emulators/holani.yml b/emulators/holani.yml index fcea2ef5..fa0257d1 100644 --- a/emulators/holani.yml +++ b/emulators/holani.yml @@ -3,8 +3,8 @@ type: libretro core_classification: official_port source: "https://github.com/LLeny/holani-retro" upstream: "https://github.com/LLeny/holani" -profiled_date: "2026-03-21" -core_version: "0.6.0" +profiled_date: "2026-03-23" +core_version: "0.9.9" display_name: "Atari - Lynx (Holani)" cores: [holani] systems: [atari-lynx] @@ -13,7 +13,7 @@ verification: existence notes: | Holani is a cycle-stepped Atari Lynx emulator written in Rust by LLeny. The libretro port (holani-retro) loads lynxboot.img from the system - directory at retro_load_game time (lib.rs:110-121). Path is built as + directory at retro_load_game time (lib.rs:110-124). Path is built as system_directory + "/lynxboot.img", no subdirectory. The core library (holani/src/rom.rs) embeds a free boot ROM from @@ -24,8 +24,6 @@ notes: | has the free boot ROM initialized. No hash validation on the external file; Rom::from_slice() only checks length == 512. - ROM extensions: .lnx, .o - files: - name: "lynxboot.img" description: "Atari Lynx boot ROM" @@ -33,4 +31,5 @@ files: required: false hle_fallback: true size: 512 - source_ref: "src/lib.rs:110-121 (bios load path)" + validation: [size] + source_ref: "src/lib.rs:110-124 (bios load), holani/src/rom.rs:72-79 (size validation)"