diff --git a/emulators/00_example.yml b/emulators/00_example.yml index 06f3886a..f199c9dc 100644 --- a/emulators/00_example.yml +++ b/emulators/00_example.yml @@ -1,18 +1,16 @@ emulator: "00_example" type: test -source: "https://github.com/libretro/libretro-samples" -profiled_date: "2026-03-18" -core_version: "1.0" -display_name: "Example Core" +core_classification: pure_libretro +source: "https://github.com/libretro/libretro-core-info" +profiled_date: "2026-03-22" +core_version: ~ +display_name: "Example Core (.info template)" cores: - 00_example systems: [] notes: | - Test/example core from libretro-samples. Minimal "hello world" libretro - implementation demonstrating the core API contract (retro_init, retro_run, - retro_load_game, etc.). Renders a simple color pattern to the framebuffer. - - No system files, BIOS, or firmware required. Not an emulator. + Format specification template from libretro-core-info. Documents the .info + file format for core authors. No loadable binary, no emulated system. files: [] diff --git a/emulators/2048.yml b/emulators/2048.yml index 462c6295..87abd32d 100644 --- a/emulators/2048.yml +++ b/emulators/2048.yml @@ -1,13 +1,14 @@ emulator: "2048" type: game +core_classification: pure_libretro source: "https://github.com/libretro/libretro-2048" -profiled_date: "2026-03-18" +upstream: "https://github.com/gabrielecirulli/2048" +profiled_date: "2026-03-22" core_version: "1.0" display_name: "2048" cores: [2048] systems: [] files: [] notes: > - Libretro port of the 2048 sliding puzzle game by Gabriele Cirulli. - Self-contained core with all assets compiled into the binary. - No content file, BIOS, or system directory files required. + Ground-up C reimplementation of the 2048 puzzle game for libretro. + All assets compiled into the binary. No system directory files required. diff --git a/emulators/3dengine.yml b/emulators/3dengine.yml index aa968c53..8efd38bd 100644 --- a/emulators/3dengine.yml +++ b/emulators/3dengine.yml @@ -1,14 +1,14 @@ emulator: 3DEngine type: utility +core_classification: pure_libretro source: "https://github.com/libretro/libretro-3dengine" -profiled_date: "2026-03-18" +upstream: "https://github.com/libretro/libretro-3dengine" +profiled_date: "2026-03-22" core_version: "v1" display_name: "Test Core - 3D Engine" cores: [3dengine] systems: [] files: [] notes: > - Tech demo rendering a 3D scene using software rasterization. - Demonstrates libretro hardware-accelerated rendering capabilities. - Self-contained core with all geometry and textures built in. - No content file, BIOS, or system directory files required. + Tech demo for libretro hardware-accelerated rendering (OpenGL/ES). + Loads .obj 3D models as content. No system directory files required. diff --git a/emulators/81.yml b/emulators/81.yml index a304703a..240daec3 100644 --- a/emulators/81.yml +++ b/emulators/81.yml @@ -1,16 +1,19 @@ emulator: EightyOne type: standalone + libretro +core_classification: community_fork source: "https://github.com/libretro/81-libretro" upstream: "https://github.com/charlierobson/EightyOne" -profiled_date: "2026-03-18" +profiled_date: "2026-03-22" core_version: "1.0a" display_name: "Sinclair - ZX 81 (EightyOne)" cores: [81] systems: - sinclair-zx81 - sinclair-zx80 + - sinclair-zx-spectrum - jupiter-ace - timex-ts1500 + - timex-tc2048 - timex-ts2068 - lambda-8300 - ringo-r470 @@ -19,54 +22,42 @@ systems: notes: | Libretro port embeds zx81.rom and dkchr.rom as C arrays (xxd -i). Core never accesses filesystem for ROMs. Hardcodes MACHINEZX81. - ref: 81-libretro/81/zx81/snap.c:37-38, 487-508 + ref: 81-libretro/81/zx81/snap.c:487-508, src/libretro.cpp:393 Original EightyOne supports 15+ machines, loads ROMs from ROM/ directory. - ref: EightyOne/Source/zx81/snap.cpp:1219-1279 — open(cwd/ROM/filename) - ref: EightyOne/Source/HW_.cpp:2734 — LoadRomBox() per-machine ROM list + ref: EightyOne/Source/zx81/zx81.cpp:309, EightyOne/Source/HW_.cpp:2734 - No platform currently requires these files (libretro core embeds them). - Archived for museum preservation and future standalone platform use. + .info has no firmware declarations (firmware_count absent). files: - # --- libretro core: embedded, no external files needed --- - # mode: standalone = needed only for standalone emulator - # mode: libretro = needed only for libretro core - # mode: both = needed in both modes (default if absent) + # --- Machine ROMs --- + # All mode: standalone — libretro core embeds what it needs - # ZX81 (default machine for libretro port) - - name: zx81.rom + # ZX81 (default machine for both libretro and standalone) + - name: zx81.edition3.rom + aliases: [zx81.rom] system: sinclair-zx81 required: true mode: standalone size: 8192 md5: db398d4e4e93a6d4dee3bfe146918219 - note: "ZX81 8K BASIC ROM (edition 3). Embedded in libretro core." - source_ref: "81-libretro/81/zx81/snap.c:489, EightyOne/Source/HW_.cpp:2744" + validation: [crc32] + note: "ZX81 8K BASIC ROM (edition 3, default). Embedded in libretro core as zx81.rom." + source_ref: "EightyOne/Source/zx81config.cpp:260, 81-libretro/81/zx81/snap.c:489" - name: zx81.edition1.rom system: sinclair-zx81 required: false mode: standalone size: 8192 md5: 56efa70bbaf311915c56cfdc70584e96 - note: "ZX81 ROM edition 1" - source_ref: "EightyOne/Source/HW_.cpp:2742" + source_ref: "EightyOne/Source/HW_.cpp:2747" - name: zx81.edition2.rom system: sinclair-zx81 required: false mode: standalone size: 8192 md5: b9fd58d324b6297f2a696d40722f95dc - note: "ZX81 ROM edition 2" - source_ref: "EightyOne/Source/HW_.cpp:2743" - - name: dkchr.rom - system: sinclair-zx81 - required: false - mode: standalone - size: 4096 - md5: "" - note: "dK'tronics character ROM. Embedded in libretro core." - source_ref: "81-libretro/81/zx81/snap.c:499" + source_ref: "EightyOne/Source/HW_.cpp:2748" # ZX80 - name: zx80.rom @@ -75,8 +66,8 @@ files: mode: standalone size: 4096 md5: e03bd725f98be45aac39c85f7fd41ce4 - note: "ZX80 4K ROM" - source_ref: "EightyOne/Source/HW_.cpp:2737" + validation: [crc32] + source_ref: "EightyOne/Source/zx81config.cpp:259, EightyOne/Source/HW_.cpp:2741" # ZX97LE - name: zx97.rom @@ -85,8 +76,7 @@ files: mode: standalone size: 32768 md5: cc69fdd6195acdfd1e533b2eb4c2a632 - note: "ZX97LE 32K ROM" - source_ref: "EightyOne/Source/HW_.cpp:2789" + source_ref: "EightyOne/Source/zx81config.cpp:281, EightyOne/Source/HW_.cpp:2792" # Jupiter ACE - name: jupiterace.rom @@ -95,8 +85,8 @@ files: mode: standalone size: 8192 md5: db6efdfd82cebdfbb493d85b1a5efc3c - note: "Jupiter ACE Forth ROM" - source_ref: "EightyOne/Source/HW_.cpp:2753" + validation: [crc32] + source_ref: "EightyOne/Source/zx81config.cpp:279, EightyOne/Source/HW_.cpp:2787" # Timex TS1500 - name: ts1500.rom @@ -105,7 +95,7 @@ files: mode: standalone size: 8192 md5: dea07eb23c5768ddf3ed90740eab85cb - source_ref: "EightyOne/Source/HW_.cpp:2757" + source_ref: "EightyOne/Source/zx81config.cpp:271, EightyOne/Source/HW_.cpp:2764" # Timex TS2068 - name: ts2068.rom @@ -114,23 +104,33 @@ files: mode: standalone size: 24576 md5: 9194283503a105f3f3dfba13e61e993f - source_ref: "EightyOne/Source/ROMs/ts2068.rom" + source_ref: "EightyOne/Source/zx81config.cpp:274-275, EightyOne/Source/HW_.cpp:2884-2886" # Lambda 8300 - - name: lambda8300.rom + - name: lambda8300colour.rom system: lambda-8300 required: true mode: standalone size: 8192 - md5: e232dfce1dcae65953583f66af146232 - source_ref: "EightyOne/Source/HW_.cpp:2773" - - name: lambda8300colour.rom + md5: 03aeea3abc7b1ca5f241935477ce71be + note: "Lambda 8300 colour version (default ROM for Lambda machine)." + source_ref: "EightyOne/Source/zx81config.cpp:276, EightyOne/Source/HW_.cpp:2771" + - name: lambda8300.rom system: lambda-8300 required: false mode: standalone size: 8192 - md5: 03aeea3abc7b1ca5f241935477ce71be - source_ref: "EightyOne/Source/ROMs/lambda8300colour.rom" + md5: e232dfce1dcae65953583f66af146232 + note: "Lambda 8300 non-colour version (alternative)." + source_ref: "EightyOne/Source/HW_.cpp:2770" + - name: lambda8300characterset.bin + system: lambda-8300 + required: false + mode: standalone + size: 512 + md5: be906890c4bf42dd99f1a3bcb6003647 + note: "Lambda 8300 external font. Loaded when extfont is enabled." + source_ref: "EightyOne/Source/zx81/zx81.cpp:312" # Ringo R470 - name: ringo470.rom @@ -139,7 +139,7 @@ files: mode: standalone size: 8192 md5: a70bbb0dfe4bb8556e74258062766f5d - source_ref: "EightyOne/Source/HW_.cpp:2769" + source_ref: "EightyOne/Source/zx81config.cpp:277, EightyOne/Source/HW_.cpp:2777" # Microdigital TK85 - name: tk85.rom @@ -148,130 +148,404 @@ files: mode: standalone size: 10240 md5: b301cdad72448d92598197b45bead8fe - source_ref: "EightyOne/Source/HW_.cpp:2777" + source_ref: "EightyOne/Source/zx81config.cpp:278, EightyOne/Source/HW_.cpp:2782" # Timex TC2048 - name: tc2048.rom + system: timex-tc2048 + required: true + mode: standalone + size: 16384 + md5: 9dd7ecf784a6c04265c073c236f5fadb + source_ref: "EightyOne/Source/zx81config.cpp:272, EightyOne/Source/HW_.cpp:2874-2876" + + # --- Graphics board ROMs --- + # Loaded by zx81_initialise() when corresponding hardware is selected + + - name: dktronicsgraphics.rom + aliases: [dkchr.rom] + system: sinclair-zx81 + required: false + mode: standalone + size: 4096 + md5: 5cba3a306fbb94454811ba262b27c958 + note: "dK'tronics character ROM. Embedded in libretro core as dkchr.rom." + source_ref: "EightyOne/Source/zx81/zx81.cpp:316, EightyOne/Source/zx81config.cpp:195-196" + - name: kaydegraphics.rom + system: sinclair-zx81 + required: false + mode: standalone + size: 4096 + md5: 4944facea84bea43f4495eaca19006d0 + note: "Kayde character ROM." + source_ref: "EightyOne/Source/zx81/zx81.cpp:320, EightyOne/Source/zx81config.cpp:197-198" + - name: memotechhrg.rom + system: sinclair-zx81 + required: false + mode: standalone + size: 2048 + md5: 70320cad0ab528e62dcc2ca847870995 + note: "Memotech HRG ROM." + source_ref: "EightyOne/Source/zx81/zx81.cpp:334, EightyOne/Source/zx81config.cpp:201-202" + - name: quicksilvahires.rom + system: sinclair-zx81 + required: false + mode: standalone + size: 2048 + md5: 1e7408a9a6d329751acc9d0810fd633d + note: "Quicksilva Hi-Res ROM." + source_ref: "EightyOne/Source/zx81/zx81.cpp:338, EightyOne/Source/zx81config.cpp:203-204" + - name: g007hrg.rom + system: sinclair-zx81 + required: false + mode: standalone + size: 2048 + md5: 7f59a979b1332a168d2efbc971ce1df0 + note: "G007 HRG ROM." + source_ref: "EightyOne/Source/zx81/zx81.cpp:343, EightyOne/Source/zx81config.cpp:199-200" + + # --- Interface ROMs --- + # Loaded by zx81_initialise() when corresponding hardware is selected + + - name: z80assembler.rom + system: sinclair-zx81 + required: false + mode: standalone + size: 4096 + md5: b1581a2fcf4e5083d5fd92a1da373efa + source_ref: "EightyOne/Source/zx81/zx81.cpp:348, EightyOne/Source/zx81config.cpp:206" + - name: memocalc.rom + system: sinclair-zx81 + required: false + mode: standalone + size: 4096 + md5: fae8c8cd2cef2ca6b72be5b1cd8509d8 + source_ref: "EightyOne/Source/zx81/zx81.cpp:352, EightyOne/Source/zx81config.cpp:207-208" + + # --- FDC ROMs --- + # Loaded by zx81_initialise() (larken81) or spec48_initialise() (others) + + - name: larken81.rom + system: sinclair-zx81 + required: false + mode: standalone + size: 2048 + md5: dec8c7f864c209db4defcfbe0774e220 + note: "Larken 81 floppy controller ROM." + source_ref: "EightyOne/Source/zx81/zx81.cpp:361, EightyOne/Source/zx81config.cpp:171-172" + - name: interface1.edition2.rom + system: sinclair-zx-spectrum + required: false + mode: standalone + size: 8192 + md5: 31b704ae925305e74f50699271fddd9a + note: "ZX Interface 1 ROM (default edition 2)." + source_ref: "EightyOne/Source/zx81config.cpp:174-175" + - name: interface1.edition1.rom + system: sinclair-zx-spectrum + required: false + mode: standalone + size: 8192 + md5: 5c11c61a2dd2ca4bf39328d9ff42d289 + source_ref: "EightyOne/Source/ROMs/FDCs/interface1.edition1.rom" + - name: "+d.g+dos.v1-a.rom" + system: sinclair-zx-spectrum + required: false + mode: standalone + size: 8192 + md5: 42e5de16fb5e50082bb954ec7ce45851 + note: "Plus D G+DOS ROM (default v1-a)." + source_ref: "EightyOne/Source/zx81config.cpp:163-164" + - name: disciple.gdos.v3.rom + system: sinclair-zx-spectrum + required: false + mode: standalone + size: 16384 + md5: 2b0c5e2fa87e0b641bdb26634faea234 + note: "DISCiPLE GDOS ROM v3." + source_ref: "EightyOne/Source/zx81config.cpp:165-166" + - name: discovery.v2-22.rom + system: sinclair-zx-spectrum + required: false + mode: standalone + size: 8192 + md5: 3beeddbf0aa716b7aba7deec2bfb3028 + note: "Opus Discovery DOS ROM (default v2-22)." + source_ref: "EightyOne/Source/zx81config.cpp:167-168" + - name: beta128.trdos.v5-03.rom + system: sinclair-zx-spectrum + required: false + mode: standalone + size: 16384 + md5: 0da70a5d2a0e733398e005b96b7e4ba6 + note: "Beta 128 TR-DOS ROM (default v5-03)." + source_ref: "EightyOne/Source/zx81config.cpp:169-170" + + # --- IDE ROMs --- + # Loaded by zx81_initialise() (mwcfide) or spec48 peripherals (others) + + - name: mwcfide.rom + system: sinclair-zx81 + required: false + mode: standalone + size: 14648 + md5: d02ed1b39669c9b163f1fa2b1ffb41ee + note: "MWCF IDE ROM." + source_ref: "EightyOne/Source/zx81/zx81.cpp:381, EightyOne/Source/zx81config.cpp:183-184" + - name: zxcflba.rom system: sinclair-zx81 required: false mode: standalone size: 16384 - md5: 9dd7ecf784a6c04265c073c236f5fadb - source_ref: "EightyOne/Source/ROMs/tc2048.rom" - - # ZX Spectrum variants (standalone mode, multiple localizations) - - name: spectrum48.rom + md5: e518c0736cb4ce0484ac8091f5ea3e01 + note: "ZXCF CompactFlash IDE ROM." + source_ref: "EightyOne/Source/zx81config.cpp:181-182" + - name: zx8blbs.rom system: sinclair-zx81 required: false mode: standalone size: 16384 + md5: d8f203d2bebfe57d725b0d1067f3b92d + note: "Simple 8-bit IDE ROM." + source_ref: "EightyOne/Source/zx81config.cpp:177-178" + - name: zxidelbs.rom + system: sinclair-zx81 + required: false + mode: standalone + size: 16384 + md5: 6cfbf044b8f435b7f70eae37d9ee5c28 + note: "Simple 16-bit IDE ROM." + source_ref: "EightyOne/Source/zx81config.cpp:179-180" + + # --- Spectrum peripheral ROMs --- + # Loaded by spec48_initialise() or Spectrum peripheral code + + - name: uspeech.rom + system: sinclair-zx81 + required: false + mode: standalone + size: 2048 + md5: 052f6af718337e35e76693723e1d73e3 + note: "Currah uSpeech ROM." + source_ref: "EightyOne/Source/Spectrum/spec48.cpp:344, EightyOne/Source/zx81config.cpp:186-187" + - name: usource.rom + system: sinclair-zx81 + required: false + mode: standalone + size: 8192 + md5: ebe1490920cbb62bde7282ae24928d95 + note: "Currah uSource ROM." + source_ref: "EightyOne/Source/Spectrum/spec48.cpp:350, EightyOne/Source/zx81config.cpp:188-189" + - name: multiface128.rom + system: sinclair-zx-spectrum + required: false + mode: standalone + size: 8192 + md5: c420ef03f6e0c477d9474efe3441a556 + note: "Multiface 128 ROM." + source_ref: "EightyOne/Source/zx81config.cpp:190-191" + - name: multiface3.rom + system: sinclair-zx-spectrum + required: false + mode: standalone + size: 8192 + md5: afe2218c3a6a43f1854fe824424d4167 + note: "Multiface 3 ROM." + source_ref: "EightyOne/Source/zx81config.cpp:192-193" + + # --- Digitalker speech ROMs --- + # Loaded by Digitalk::Init() when Digitalker speech is selected + + - name: SSR1.bin + system: sinclair-zx81 + required: false + mode: standalone + size: 8192 + md5: 864beefecf0021fa6b0f5a5aff55c167 + note: "Digitalker speech ROM bank 1a." + source_ref: "EightyOne/Source/Digitalker/Digitalkdrv.cpp:40-45" + - name: SSR2.bin + system: sinclair-zx81 + required: false + mode: standalone + size: 8192 + md5: d3924ecc0efda0a58c4bda43044061e4 + note: "Digitalker speech ROM bank 1b." + source_ref: "EightyOne/Source/Digitalker/Digitalkdrv.cpp:49-54" + - name: SSR5.bin + system: sinclair-zx81 + required: false + mode: standalone + size: 8192 + md5: dd2793938c50217c0e5e8aef75b98856 + note: "Digitalker speech ROM bank 2a." + source_ref: "EightyOne/Source/Digitalker/Digitalkdrv.cpp:58-63" + - name: SSR6.bin + system: sinclair-zx81 + required: false + mode: standalone + size: 8192 + md5: 5d6ee8cdf1b12816c4f152b5a1e13977 + note: "Digitalker speech ROM bank 2b." + source_ref: "EightyOne/Source/Digitalker/Digitalkdrv.cpp:67-72" + + # --- ZXpand overlay ROMs (standalone only) --- + # Loaded when ZXpand SD card interface is enabled + + - name: zx81.zxpand.ovl + system: sinclair-zx81 + required: false + mode: standalone + size: 8192 + md5: 49b1bd3485d080bb242e94fd698f028d + source_ref: "EightyOne/Source/zx81/zx81.cpp:298-303" + - name: zx80.zxpand.ovl + system: sinclair-zx80 + required: false + mode: standalone + size: 8192 + md5: 37cea5c1e7144de898a7dc4b102fb7fd + source_ref: "EightyOne/Source/zx81/zx81.cpp:304-305" + - name: ts1500.zxpand.ovl + system: timex-ts1500 + required: false + mode: standalone + size: 8192 + md5: 49b1bd3485d080bb242e94fd698f028d + source_ref: "EightyOne/Source/zx81/zx81.cpp:298-303" + + # --- ZX Spectrum machine ROMs (standalone mode) --- + + - name: spectrum48.rom + system: sinclair-zx-spectrum + required: false + mode: standalone + size: 16384 md5: 4c42a2f075212361c3117015b107ff68 - note: "Spectrum 48K" - source_ref: "EightyOne/Source/HW_.cpp:2802" + note: "Spectrum 48K." + source_ref: "EightyOne/Source/zx81config.cpp:261-263, EightyOne/Source/HW_.cpp:2800-2807" - name: spectrum48.spanish.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 16384 md5: 60e1bd8b4d59b55e5b2175126239517f + source_ref: "EightyOne/Source/HW_.cpp:2812" - name: spectrum48.arabic.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 16384 md5: 9f6f56003307b9d55be96f406fdbf2b1 + source_ref: "EightyOne/Source/ROMs/spectrum48.arabic.rom" - name: spectrum48.arabic.version1.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 16384 md5: a6a1e3a68bb5523997103c3925a46fe4 + source_ref: "EightyOne/Source/HW_.cpp:2813,2820" - name: spectrum48.arabic.version2.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 16384 md5: fac3d08455328c34f0d06344d89cec0e + source_ref: "EightyOne/Source/HW_.cpp:2828,2837" - name: spectrum48.nordic.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 16384 md5: f058f27ae61af225fe5baacc1d89adfc + source_ref: "EightyOne/Source/HW_.cpp:2806" - name: spectrum128.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 32768 md5: 85fede415f4294cc777517d7eada482e - note: "Spectrum 128K" + note: "Spectrum 128K." + source_ref: "EightyOne/Source/zx81config.cpp:264, EightyOne/Source/HW_.cpp:2817-2821" - name: spectrum128.spanish.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 32768 md5: 84aef735da122d55e41a33455c7c3506 + source_ref: "EightyOne/Source/HW_.cpp:2819" - name: spectrum+2.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 32768 md5: 238f77692156a5c49d20c0aa2862e8bb - note: "Spectrum +2" + note: "Spectrum +2." + source_ref: "EightyOne/Source/zx81config.cpp:266, EightyOne/Source/HW_.cpp:2824-2829" - name: spectrum+2.french.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 32768 md5: 1fff14aeca8e1dd3670142982cc6bb36 + source_ref: "EightyOne/Source/HW_.cpp:2826" - name: spectrum+2.spanish.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 32768 md5: 43cf648e27efc9be8186bb7049505d79 + source_ref: "EightyOne/Source/HW_.cpp:2827" - name: spectrum+3.version4-0.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 65536 md5: 05de80a055b5e7866f55769db0584d6e - note: "Spectrum +3" + note: "Spectrum +3." + source_ref: "EightyOne/Source/HW_.cpp:2833,2854" - name: spectrum+3.version4-0.spanish.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 65536 md5: 990dfe9d37b48595f5befe0e4ff4b7c6 + source_ref: "EightyOne/Source/HW_.cpp:2835,2856" - name: spectrum+3.version4-1.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 65536 md5: 7e00ed3562abfd188d0d4da03e80bc0a + note: "Spectrum +3 (default for +2A and +3)." + source_ref: "EightyOne/Source/zx81config.cpp:267-268, EightyOne/Source/HW_.cpp:2834,2855" - name: spectrum+3.version4-1.spanish.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 65536 md5: 52d130178c1106fef765b5f119fb43bc + source_ref: "EightyOne/Source/HW_.cpp:2836,2857" - name: spectrum+3.arabic3-a.english4-0.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 131072 md5: 30316fa0ed7ee6682933960e11b48d60 + source_ref: "EightyOne/Source/HW_.cpp:2858" - name: tk90.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 16384 md5: b7893ad25728fbf6410f08eddd4a1cad - note: "Microdigital TK90X" + note: "Microdigital TK90X (Spectrum clone)." + source_ref: "EightyOne/Source/ROMs/tk90.rom" - name: tk95.rom - system: sinclair-zx81 + system: sinclair-zx-spectrum required: false mode: standalone size: 16384 md5: b7893ad25728fbf6410f08eddd4a1cad - note: "Microdigital TK95" + note: "Microdigital TK95 (Spectrum clone)." + source_ref: "EightyOne/Source/ROMs/tk95.rom" diff --git a/emulators/a5200.yml b/emulators/a5200.yml index 9d1823a9..5162e88b 100644 --- a/emulators/a5200.yml +++ b/emulators/a5200.yml @@ -1,7 +1,9 @@ emulator: a5200 type: libretro +core_classification: community_fork source: "https://github.com/libretro/a5200" -profiled_date: "2026-03-18" +upstream: "https://github.com/alekmaul/a5200" +profiled_date: "2026-03-22" core_version: "2.0.2" display_name: "Atari - 5200 (a5200)" cores: @@ -9,23 +11,25 @@ cores: systems: - atari-5200 -# a5200 is a dedicated Atari 5200 emulator forked from Atari800/Atari++ codebase. -# It loads the official 5200 OS ROM from /5200.rom (2048 bytes, mapped -# to memory at 0xF800-0xFFFF via MEMORY_InitialiseMachine). +# Dedicated Atari 5200 emulator forked from Atari800 2.0.2 codebase by Alekmaul +# for GCW Zero. Libretro port later enhanced by wavemotion-dave with Altirra OS +# fallback, Super Cart support, frame blending and analog input. # -# If 5200.rom is missing or the user selects "internal" via core option "a5200_bios", -# the core falls back to Altirra 5200 OS, an open-source replacement compiled from -# Altirra-3.20-test4 (altirra_5200_os.c). The fallback has reduced compatibility -# compared to the original Atari OS ROM. +# Loads 5200 OS ROM from /5200.rom (2048 bytes, mapped to 0xF800-0xFFFF +# via MEMORY_InitialiseMachine). If missing or user selects "internal" via core +# option "a5200_bios", falls back to built-in Altirra 5200 OS (altirra_5200_os.c, +# compiled from Altirra-3.20-test4). # -# BIOS loading (libretro.c:409-500): +# BIOS loading (libretro.c:408-499): # 1. check_bios_variable() reads core option "a5200_bios" (official/internal) -# 2. load_bios() attempts to read /5200.rom (0x800 bytes) -# 3. On failure or "internal" selected: memcpy from ROM_altirra_5200_os fallback +# 2. load_bios() reads /5200.rom, validates size == 0x800 +# 3. On failure or "internal" selected: memcpy from ROM_altirra_5200_os # -# Cartridge detection (atari.c:169-236): -# Auto-detects cart type from header bytes and size. ROM database in cartridge.c -# maps MD5 hashes to cart types (standard 8K/16K/32K/40K, bounty bob, super cart). +# Upstream divergence: alekmaul's standalone requires 5200.rom (exits on missing). +# Libretro port makes it optional via Altirra fallback. +# +# Cart type detection via MD5 database in cartridge.c (standard 4K-512K, bounty bob, +# super cart, EE banked). Unknown ROMs detected by size heuristic. files: - name: "5200.rom" @@ -33,19 +37,8 @@ files: size: 2048 required: false hle_fallback: true + validation: [size] note: > - Atari 5200 OS ROM. Provides the built-in OS routines used by all 5200 - cartridges. Without it, the core uses the Altirra open-source replacement - which has lower compatibility with some games. Core option "a5200_bios" - controls whether to use this file or the internal fallback. - source_ref: "libretro/libretro.c:58-59, libretro/libretro.c:409-500, emu/memory.c:46" - -notes: - altirra_fallback: > - The built-in Altirra 5200 OS (from altirra_5200_os.c, 0x800 bytes) is a free - replacement that works for most games but some titles require the original ROM - for full compatibility. The core displays a notification when falling back. - cart_db: > - cartridge.c contains an MD5-based ROM database for automatic cart type detection - (standard, EE banked, bounty bob, super cart variants). Unknown ROMs are detected - by size heuristic. + Atari 5200 OS ROM. Core option "a5200_bios" controls official vs internal. + Altirra replacement has lower compatibility with some titles. + source_ref: "libretro/libretro.c:58-59, libretro/libretro.c:408-499, emu/memory.c:46" diff --git a/emulators/advanced_tests.yml b/emulators/advanced_tests.yml index 60493995..225f1293 100644 --- a/emulators/advanced_tests.yml +++ b/emulators/advanced_tests.yml @@ -1,7 +1,9 @@ emulator: advanced_tests type: test +core_classification: pure_libretro source: "https://github.com/libretro/libretro-samples" -profiled_date: "2026-03-18" +upstream: "https://github.com/libretro/libretro-samples" +profiled_date: "2026-03-22" core_version: "v1" display_name: "Test Core - Advanced Test" cores: @@ -9,11 +11,9 @@ cores: systems: [] notes: | - Advanced test core from libretro-samples. Exercises extended libretro API - features: subsystems, memory descriptors, serialization, multi-disk control, - and other optional environment callbacks. Used by frontend developers to - validate their implementations. - - No system files, BIOS, or firmware required. Not an emulator. + Test core for frontend developers. Exercises video output, audio sync, + input polling, and serialization. All data (font, CRC32 table) is embedded + in the binary. No external files needed. + source_ref: tests/test_advanced/libretro-test.c files: [] diff --git a/emulators/amiarcadia.yml b/emulators/amiarcadia.yml index c09585c5..67218fee 100644 --- a/emulators/amiarcadia.yml +++ b/emulators/amiarcadia.yml @@ -1,7 +1,9 @@ emulator: amiarcadia type: libretro -source: "https://amigan.yatho.com/" -profiled_date: "2026-03-18" +core_classification: official_port +source: "https://github.com/warmenhoven/amiarcadia" +upstream: "https://amigan.1emu.net/releases/" +profiled_date: "2026-03-22" core_version: "4.42" display_name: "Arcadia 2001 / Interton VC 4000 (AmiArcadia)" cores: @@ -11,32 +13,21 @@ systems: - interton-vc4000 - elektor-tv-games-computer -# AmiArcadia is a libretro port of James Jacobs' emulator for Signetics -# 2636 PVI / 2637 UVI + 2650 CPU-based systems: Emerson Arcadia 2001 and -# clones (Bandai, Grandstand, Schmid, Hanimex, Leisurevision, etc.), -# Interton VC 4000 family (Voltmace, Rowtron, Fountain, etc.), Elektor -# TV Games Computer, and Zaccaria/Malzak coin-op arcade machines. +# Libretro port of AmiArcadia/WinArcadia/DroidArcadia by James Jacobs. +# Emulates Signetics 2636 PVI / 2637 UVI + 2650 CPU systems: +# Emerson Arcadia 2001 and clones, Interton VC 4000 family, +# Elektor TV Games Computer, Zaccaria and Malzak coin-ops. # -# The core does NOT require any BIOS or system ROM files. -# firmware_count = 0 in amiarcadia_libretro.info confirms this. +# No external files required. These systems have no separate system ROM; +# all code runs from the game cartridge. The core auto-identifies known +# ROMs by CRC32 via games.h lookup table. # -# ROM identification: -# The core auto-identifies known game ROMs by CRC32 and configures the -# correct machine type, memory map, and game-specific settings. For -# unknown ROMs, the user selects machine type via the "Machine" core -# option (Arcadia / Interton). -# -# Supported extensions: .bin, .tvc -# -# Source ref: libretro-core-info/amiarcadia_libretro.info (firmware_count = 0) -# Docs: https://docs.libretro.com/library/amiarcadia/ +# source_ref: src/libretro.c:497-624 (retro_load_game — no file I/O) +# source_ref: DroidArcadia/app/src/main/cpp/android.c:893-1052 (parse_bytes — ROM-only) +# source_ref: DroidArcadia/app/src/main/cpp/da.h:3-5 (version 4.42) +# source_ref: amiarcadia_libretro.info (firmware_count=0) notes: | - No BIOS files required. The emulator has no external firmware dependencies. - Game ROMs are identified by CRC32 for automatic machine configuration. + No BIOS or firmware files required. firmware_count=0 confirmed by source. files: [] - -# closed-source core — cannot verify via source code scan. -# firmware_count=0 in .info and docs confirm no BIOS needed. -# signetics 2636/2637 systems have no separate system ROM. diff --git a/emulators/anarch.yml b/emulators/anarch.yml index 74748752..1b7745bd 100644 --- a/emulators/anarch.yml +++ b/emulators/anarch.yml @@ -1,14 +1,15 @@ emulator: Anarch type: game -source: "https://github.com/libretro/anern" -profiled_date: "2026-03-18" +core_classification: community_fork +source: "https://codeberg.org/iyzsong/anarch-libretro" +upstream: "https://gitlab.com/drummyfish/anarch" +profiled_date: "2026-03-22" core_version: "1.1d" display_name: "Anarch" cores: [anarch] systems: [] files: [] notes: > - Libretro port of Anarch, a public domain suckless FPS game by Miloslav Ciz. - Entirely self-contained with all levels, textures, and sounds compiled - into the binary using procedural generation and hardcoded data tables. - No content file, BIOS, or system directory files required. + Public domain suckless FPS game by Miloslav Ciz (drummyfish). + Libretro port by iyzsong. All game data (levels, textures, sounds) + compiled into the binary via header files. No external files required. diff --git a/emulators/applewin.yml b/emulators/applewin.yml index 6ec10b1d..ce3fad59 100644 --- a/emulators/applewin.yml +++ b/emulators/applewin.yml @@ -1,8 +1,10 @@ emulator: AppleWin type: libretro +core_classification: community_fork source: "https://github.com/audetto/AppleWin" -profiled_date: "2026-03-18" -core_version: "1.30.21.0" +upstream: "https://github.com/AppleWin/AppleWin" +profiled_date: "2026-03-23" +core_version: "1.31.0.1" display_name: "Apple II (AppleWin)" cores: - applewin diff --git a/emulators/ardens.yml b/emulators/ardens.yml index 15ebcec5..c2524c69 100644 --- a/emulators/ardens.yml +++ b/emulators/ardens.yml @@ -1,7 +1,9 @@ emulator: Ardens type: libretro +core_classification: official_port source: "https://github.com/tiberiusbrown/ardens" -profiled_date: "2026-03-18" +upstream: "https://github.com/tiberiusbrown/ardens" +profiled_date: "2026-03-23" core_version: "Git" display_name: "Arduboy (Ardens)" cores: @@ -10,33 +12,11 @@ systems: - arduboy notes: | - Ardens is an Arduboy FX simulator designed for profiling and debugging, - ported to libretro. It emulates the ATmega32U4 MCU, SSD1306 OLED display, - and W25Q128 external flash used by the Arduboy hardware. - - No BIOS or bootloader files are required. The core has all boot code - compiled directly into the binary: - - - Caterina/Arduboy3K bootloaders for multiple hardware revisions (D1, D2, - E2) are embedded as C arrays generated from .hex files via bin2c.py. - Located in src/boot/boot_game_*.c and src/boot/boot_menu_*.c. - The appropriate variant is selected at reset based on the configured - device type (absim_arduboy.cpp:115-161). - - - Flashcart header (1536 bytes) is embedded in src/boot/boot_flashcart.c - and written to the start of the W25Q128 flash image at init - (absim_w25q128.hpp:14). - - - EEPROM (1024 bytes) and external flash (W25Q128, 16 MB) state are - handled as save RAM through the libretro RETRO_MEMORY_SAVE_RAM - interface, not as system files. - - The libretro port does not call RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY - and never attempts to load any file from the system directory. - The .info file declares firmware_count = 0. - - Supported ROM formats: Intel HEX (.hex) and Arduboy package (.arduboy). - block_extract is set to true (the core reads archives directly). + Arduboy FX simulator (ATmega32U4 + SSD1306 + W25Q128). All boot code + embedded as C arrays: Caterina/Arduboy3K bootloaders for D1/D2/E2 + hardware revisions and flashcart header. EEPROM and flash state handled + via RETRO_MEMORY_SAVE_RAM. The libretro port never accesses the system + directory. firmware_count = 0. files: [] diff --git a/emulators/arduous.yml b/emulators/arduous.yml index 73505c5b..b832f71b 100644 --- a/emulators/arduous.yml +++ b/emulators/arduous.yml @@ -1,7 +1,9 @@ emulator: Arduous type: libretro +core_classification: pure_libretro source: "https://github.com/libretro/arduous" -profiled_date: "2026-03-18" +upstream: "https://github.com/jmaroeder/arduous" +profiled_date: "2026-03-23" core_version: "0.1.0" display_name: "Arduboy (Arduous)" cores: @@ -10,37 +12,9 @@ systems: - arduboy notes: | - Arduous is an Arduboy emulator built on simavr (ATmega32U4 AVR simulator) - with SSD1306 OLED display emulation, ported to libretro. It is distinct - from the Ardens core, which is a separate Arduboy emulator. - - No BIOS, bootloader, or system files are required. The core operates as a - pure AVR simulator: - - - The game content (.hex Intel HEX format) is parsed at load time via an - in-tree ihex reader (arduous.cpp:60-166) and written directly into the - simavr flash memory at the address specified in the hex file - (arduous.cpp:189). No separate bootloader is loaded. - - - The MCU is hardcoded to atmega32u4 at 16 MHz (arduous.h:70-71). - simavr handles CPU initialization internally via avr_make_mcu_by_name(). - - - A commented-out loadFirmware() function (arduous.cpp:22-29) suggests - ELF firmware loading was considered but never implemented. - - - EEPROM (1024 bytes), system RAM, and VRAM are exposed via the libretro - memory interface (RETRO_MEMORY_SAVE_RAM, RETRO_MEMORY_SYSTEM_RAM, - RETRO_MEMORY_VIDEO_RAM) but are not loaded from external files. - - - The core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. The - retro_load_game() function only reads the content data buffer passed - by the frontend (libretro.cpp:108-110). - - - RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME is set to false (libretro.cpp:123), - meaning a game ROM is always required. - - Supported ROM format: Intel HEX (.hex) only. The valid_extensions field - lists "hex". A TODO comment mentions .arduboy ZIP support but it is not - implemented. + ATmega32U4 AVR simulator built on simavr with SSD1306 OLED display + emulation. MCU hardcoded at 16 MHz (arduous.h:70-71). Game content + (.hex) parsed via in-tree ihex reader and written directly into + simavr flash (arduous.cpp:169-179). No system directory access. files: [] diff --git a/emulators/atari800.yml b/emulators/atari800.yml index 5d40d2dc..506a7e51 100644 --- a/emulators/atari800.yml +++ b/emulators/atari800.yml @@ -1,10 +1,12 @@ emulator: Atari800 type: standalone + libretro +core_classification: official_port source: "https://github.com/libretro/libretro-atari800" upstream: "https://github.com/atari800/atari800" -profiled_date: "2026-03-18" +profiled_date: "2026-03-23" core_version: "3.1.0" display_name: "Atari - 400/800/600XL/800XL/130XE/5200 (Atari800)" +cores: [atari800] systems: [atari-400, atari-800, atari-800xl, atari-130xe, atari-5200, atari-xegs] # Atari800 emulates the Atari 8-bit family (400/800/XL/XE) and the 5200 console. @@ -36,10 +38,12 @@ files: hle_fallback: true size: 2048 md5: 281f20ea4320404ec820fb7ec0693b38 + aliases: [atari5200.rom, atar5200.rom, 5200.bin, atari_5200.rom] + validation: [crc32] note: > Atari 5200 BIOS (original). Mapped at $F800-$FFFF. Altirra 5200 OS is used when this file is absent. - source_ref: "atari800/src/sysrom.c:101, libretro info firmware0" + source_ref: "atari800/src/sysrom.c:101-102,254-255" # -- Atari BASIC ROM -- # Atari BASIC interpreter (8 KB). Three known revisions: @@ -54,10 +58,12 @@ files: hle_fallback: true size: 8192 md5: 0bac0c6a50104045d902df4503a4c30b + aliases: [ataribasic.rom, basic.rom, atari_basic.rom] + validation: [crc32] note: > Atari BASIC Rev C. Required for 400/800 software that needs BASIC. Altirra BASIC is used as fallback. Enable via core option atari800_opt2. - source_ref: "atari800/src/sysrom.c:103-105, libretro info firmware1" + source_ref: "atari800/src/sysrom.c:103-105,256" # -- Atari 400/800 OS A -- # Original Atari 400/800 OS (10 KB). Two known CRC32 values: @@ -70,10 +76,12 @@ files: hle_fallback: true size: 10240 md5: eb1f32f5d9f382db1bbfb8d7f9cb343a + aliases: [atari_osa.rom, atari_os_a.rom] + validation: [crc32] note: > Atari 400/800 OS Rev A. Altirra OS 800 is used as fallback. Auto-select order: OS B NTSC, OS A NTSC, OS A PAL, custom, Altirra. - source_ref: "atari800/src/sysrom.c:87-89, libretro info firmware2" + source_ref: "atari800/src/sysrom.c:87-88,250" # -- Atari 400/800 OS B -- # OS revision B (10 KB), NTSC: CRC32 0x0e86d61d @@ -86,13 +94,15 @@ files: size: 10240 md5: 4177f386a3bac989a981d3fe3388cb6c crc32: 0e86d61d + aliases: [atari_osb.rom, atari_os_b.rom] + validation: [crc32] note: > Atari 400/800 OS Rev B (NTSC). CRC32 0x0e86d61d matches sysrom.c SYSROM_B_NTSC. Preferred over Rev A for 400/800 mode. Note: .info lists md5 a3e8d617c95d08031fe1b20d541434b2 which is a - different dump (crc32 3e28a1fe) — both in repo, the CRC32-matched + different dump (crc32 3e28a1fe) -- both in repo, the CRC32-matched version is the one sysrom.c auto-detects. - source_ref: "atari800/src/sysrom.c:89, libretro info firmware3" + source_ref: "atari800/src/sysrom.c:89,251" # -- Atari XL/XE OS -- # XL/XE OS (16 KB). Many revisions known by CRC32 in sysrom.c: @@ -108,10 +118,12 @@ files: hle_fallback: true size: 16384 md5: 06daac977823773a3eea3422fd26a703 + aliases: [atarixlxe.rom, atari_xlxe.rom, atari_xl_xe.rom] + validation: [crc32] note: > Atari XL/XE OS. Used for 800XL, 130XE, and XEGS modes. Altirra XL OS is used as fallback. - source_ref: "atari800/src/sysrom.c:90-99, libretro info firmware4" + source_ref: "atari800/src/sysrom.c:90-99,253" # -- Atari XL/XE/XEGS OS v4 (BB01R4) -- # XEGS-specific OS revision BB01R4 (16 KB), CRC32: 0x1eaf4002 @@ -123,9 +135,10 @@ files: hle_fallback: true size: 16384 md5: b7a2a04677d34f069eeb643d5238bf86 + validation: [crc32] note: > Atari XEGS OS Rev 4 (BB01R4). Preferred OS for XEGS machine mode. - source_ref: "atari800/src/sysrom.c:98, libretro info firmware5" + source_ref: "atari800/src/sysrom.c:98" # -- XEGS Missile Command built-in game -- # The XEGS had Missile Command in ROM (8 KB), CRC32: 0xbdca01fb @@ -136,10 +149,11 @@ files: required: false size: 8192 md5: d7eb37aec6960cba36bc500e0e5d00bc + validation: [crc32] note: > XEGS built-in Missile Command ROM. Only used in XEGS machine mode. No built-in replacement exists for this ROM. - source_ref: "atari800/src/sysrom.c:106, libretro info firmware6" + source_ref: "atari800/src/sysrom.c:106" # Known ROM revisions from sysrom.c (CRC32 identifiers): # diff --git a/emulators/azahar.yml b/emulators/azahar.yml index 2009ccb0..9b41722f 100644 --- a/emulators/azahar.yml +++ b/emulators/azahar.yml @@ -1,8 +1,9 @@ emulator: Azahar type: standalone + libretro -source: "https://github.com/azahar-emu/azahar" +core_classification: community_fork +source: "https://github.com/johndoe6345789/azahar_libretro" upstream: "https://github.com/azahar-emu/azahar" -profiled_date: "2026-03-18" +profiled_date: "2026-03-23" core_version: "Git" display_name: "Nintendo - 3DS (Azahar)" cores: [azahar] @@ -10,47 +11,42 @@ systems: - nintendo-3ds notes: | - Azahar is the successor to Citra (via Lime3DS). Different codebase - from libretro/citra — has additional files not in the old Citra. + Successor to Citra (via Lime3DS). Libretro port by johndoe6345789. Data dir: azahar-emu (legacy: citra-emu, lime3ds-emu). - ref: src/common/common_paths.h:41-47 + ref: src/common/common_paths.h:41-43 - Key file: keys.txt (NOT aes_keys.txt like libretro/citra). - ref: src/common/common_paths.h:83 + Key file named keys.txt (not aes_keys.txt like old Citra). + Embedded encrypted key fallback if keys.txt absent. + ref: src/core/hw/aes/key.cpp:282-297 Uses RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. - ref: src/citra_libretro/environment.cpp:194 + ref: src/citra_libretro/environment.cpp:179 - .info has firmware_count=0 but core uses system_dir for files. + .info has firmware_count=0 but core loads files from system_dir. + + boot9.bin and sector0x96.bin are defined in common_paths.h:84-85 + but never loaded by any code path. Dead defines from Citra heritage. + + System archives (shared font, Mii data, country list, bad word list) + have open-source replacements embedded in the binary. + ref: src/core/file_sys/archive_ncch.cpp:146-176 files: - # --- sysdata/ --- - name: keys.txt path: sysdata/keys.txt system: nintendo-3ds required: false - note: "AES keys (named keys.txt in Azahar, aes_keys.txt in old Citra)" - source_ref: "src/common/common_paths.h:83, src/core/hw/aes/key.cpp:291" - - - name: boot9.bin - path: sysdata/boot9.bin - system: nintendo-3ds - required: false - source_ref: "src/common/common_paths.h:84" - - - name: sector0x96.bin - path: sysdata/sector0x96.bin - system: nintendo-3ds - required: false - source_ref: "src/common/common_paths.h:85" + hle_fallback: true + note: "embedded encrypted fallback if missing" + source_ref: "src/core/hw/aes/key.cpp:283, src/common/common_paths.h:83" - name: shared_font.bin path: sysdata/shared_font.bin system: nintendo-3ds required: false hle_fallback: true - note: "HLE fallback if missing" - source_ref: "src/common/common_paths.h:82" + note: "legacy load path; embedded open-source font used if missing" + source_ref: "src/core/hle/service/apt/apt.cpp:263-278" - name: seeddb.bin path: sysdata/seeddb.bin @@ -59,33 +55,34 @@ files: note: "game seed database for 9.6+ titles" source_ref: "src/core/file_sys/seed_db.cpp:15" - # --- Azahar-only (not in libretro/citra) --- - # These require src/core/hw/unique_data.cpp which only exists in Azahar - - name: otp.bin path: sysdata/otp.bin system: nintendo-3ds required: false - note: "OTP data for key derivation. Azahar-only." - source_ref: "src/core/hw/unique_data.cpp:214" + validation: [size, crypto] + note: "OTP data for console key derivation" + source_ref: "src/core/hw/unique_data.cpp:126-167, src/core/hw/unique_data.cpp:213" - name: movable.sed path: nand/private/movable.sed system: nintendo-3ds required: false - note: "console-unique key seed. Azahar-only." - source_ref: "src/core/hw/unique_data.cpp:218" + validation: [size, signature] + note: "console-unique key seed" + source_ref: "src/core/hw/unique_data.cpp:170-200, src/core/hw/unique_data.cpp:217" - name: SecureInfo_A path: nand/rw/sys/SecureInfo_A system: nintendo-3ds required: false - note: "console serial/region. Azahar-only." - source_ref: "src/core/hw/unique_data.cpp:206" + validation: [size, signature] + note: "console serial and region data" + source_ref: "src/core/hw/unique_data.cpp:43-92, src/core/hw/unique_data.cpp:205" - name: LocalFriendCodeSeed_B path: nand/rw/sys/LocalFriendCodeSeed_B system: nintendo-3ds required: false - note: "friend code generation. Azahar-only." - source_ref: "src/core/hw/unique_data.cpp:210" + validation: [size, signature] + note: "friend code generation seed" + source_ref: "src/core/hw/unique_data.cpp:94-123, src/core/hw/unique_data.cpp:209" diff --git a/emulators/b2.yml b/emulators/b2.yml index 1dc929b0..47c02ba7 100644 --- a/emulators/b2.yml +++ b/emulators/b2.yml @@ -1,45 +1,38 @@ emulator: b2 type: standalone + libretro +core_classification: community_fork source: "https://github.com/zoltanvb/b2-libretro" upstream: "https://github.com/tom-seddon/b2" -profiled_date: "2026-03-18" -core_version: "v0.1" +profiled_date: "2026-03-23" +core_version: "v0.4" display_name: "Acorn - BBC Micro (b2)" cores: [b2] systems: - bbc-micro-b - bbc-micro-bplus - bbc-master-128 - - bbc-master-compact notes: | - b2 is a BBC Micro emulator by Tom Seddon. Libretro port by Zoltan Balogh. + Libretro port by Zoltan Balogh of Tom Seddon's b2 BBC Micro emulator. + is_experimental=true in .info. ref: zoltanvb/b2-libretro, tom-seddon/b2 - Standalone: loads ROMs from etc/roms/ via GetAssetPath(). + Standalone loads ROMs from etc/roms/ via GetAssetPath() + LoadFile(). ref: tom-seddon/b2/src/b2/roms.cpp:9-10 - Libretro port (experimental): GetAssetPath stubbed in - src/libretro/adapters.cpp to return relative paths. LoadFile also - stubbed (returns false). ROM loading mechanism unclear — the 256 ROM - files are in the repo but the stub suggests they may not load at runtime. - is_experimental=true in .info. - ref: zoltanvb/b2-libretro/src/libretro/adapters.cpp + Libretro port embeds all ROMs as hex arrays in src/libretro/roms.hpp. + create_core() loads OS and sideways ROMs from static machine_types[] arrays. + GetAssetPath() and LoadFile() are stubbed — no file I/O at runtime. + ref: zoltanvb/b2-libretro/src/libretro/roms.hpp + ref: zoltanvb/b2-libretro/src/libretro/core.cpp:274-304 + ref: zoltanvb/b2-libretro/src/libretro/adapters.cpp:74-78 - 256 ROM files in etc/roms/ cover: BBC Model B (OS 1.20, BASIC II), - Model B+ (B+MOS), Master 128 (MOS 3.20, 3.50), Master Compact - (MOS 5.00, 5.10, I5.10C/Olivetti), parasite processors (65C102 TUBE, - 6502 TUBE), disc interfaces (Acorn 1770, Watford, Opus). - - All ROMs ship with both standalone and libretro repos. - No external BIOS files needed by the user for either mode. + 9 machine types: B/Acorn 1770, B/Watford DDB2, B/Watford DDB3, + B/Opus 1770, B/Opus Challenger 256K, B/Opus Challenger 512K, + B+, B+128, Master 128 (MOS 3.20). + Master 3.50, Master Turbo, Master Compact not yet implemented. + ref: zoltanvb/b2-libretro/src/libretro/core.h:117 files: [] -# 256 ROMs bundled in repo etc/roms/ — not loaded from system dir -# standalone loads via GetAssetPath("roms", path) -> etc/roms/ -# libretro port has LoadFile stubbed — ROM loading mechanism TBD -# is_experimental=true, core may not fully function - -# closed-source analysis note: core binary on buildbot contains -# "Retro ROM DIRECTORY" and "system_dir" strings but LoadFile stub -# returns false. needs further investigation when port matures. +# all ROMs embedded in binary via roms.hpp — no external files needed +# .info firmware_count=0 matches code reality diff --git a/emulators/bennugd.yml b/emulators/bennugd.yml index 103563ee..4c60aaa6 100644 --- a/emulators/bennugd.yml +++ b/emulators/bennugd.yml @@ -1,7 +1,9 @@ emulator: BennuGD type: libretro +core_classification: community_fork source: "https://github.com/diekleinekuh/BennuGD_libretro" -profiled_date: "2026-03-18" +upstream: "https://github.com/SplinterGU/BennuGD" +profiled_date: "2026-03-23" core_version: "git" display_name: "Bennu Game Development" cores: @@ -9,26 +11,13 @@ cores: systems: - bennugd -# BennuGD is an open-source interpreter for BennuGD (.dcb/.dat) game files, -# running as a libretro core. It is a successor to DIV Games Studio / Fenix. -# Notable game: Streets of Rage Remake. -# -# The official libretro .info file (bennugd_libretro.info) declares zero -# firmware entries. The core loads content directly via bgdi_main() and does -# not reference any files from the system directory. -# -# retro_load_game() in libretro.c:888-911 only reads the content path and -# the save directory. RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY is called once -# (libretro.c:899) solely as a fallback for the save directory, never to -# load BIOS or firmware. -# -# Supported extensions: dcb, dat, exe (Windows BennuGD executables) -# Valid extensions in libretro.c: dat, dcb -# Valid extensions in .info: dcb, dat, exe +# .info firmware_count: 0. Code verified: retro_load_game() (libretro.c:887-910) +# uses RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY only as save directory fallback. +# bgdi_main() (core/bgdi/src/main.c:80-371) loads .dcb/.dat bytecode content +# directly. No files read from system directory. notes: | - No BIOS or firmware required. BennuGD is a self-contained game interpreter. - Games are loaded as .dcb or .dat bytecode files compiled by the BennuGD - toolchain. All game assets are bundled with the content. + Self-contained interpreter for BennuGD bytecode (.dcb/.dat). Successor to + DIV Games Studio / Fenix. Games bundle all assets with the content file. files: [] diff --git a/emulators/bk.yml b/emulators/bk.yml index c6a827e8..3487e6ca 100644 --- a/emulators/bk.yml +++ b/emulators/bk.yml @@ -1,7 +1,9 @@ emulator: bk-emulator type: libretro +core_classification: community_fork source: "https://github.com/libretro/bk-emulator" -profiled_date: "2026-03-18" +upstream: "https://github.com/emestee/bk-emulator" +profiled_date: "2026-03-23" core_version: "1.00" display_name: "Elektronika - BK-0010/BK-0011(M)" cores: @@ -19,16 +21,17 @@ systems: # Slow BK-0011M (model 4) - same ROMs as model 3 # Terak 8510/a (model 9) # -# ROM loading (boot.c:84-117): +# ROM loading (boot.c:83-116): # BK-0010 models use load_rom() which maps ROM into emulated memory at # specific addresses: monitor at 0100000 (8 KB), BASIC/FOCAL at 0120000 # (24448-24576 bytes), disk controller at 0160000 (4 KB). # BK-0011M uses load_rom11() which loads into separate ROM buffer arrays. # -# ROM file resolution (libretro.c:1051-1094): +# ROM file resolution (libretro.c:1050-1107): # Files are loaded from {system_dir}/bk/{filename} (libretro.c:720-728). # If not found with original casing, the loader retries with lowercase # filename (libretro.c:1071-1081). +# Size is validated (min/max bounds); no hash validation. # # All ROM files are required for their respective model. The core calls # environ_cb(RETRO_ENVIRONMENT_SHUTDOWN) if any ROM file is missing. @@ -49,6 +52,7 @@ files: path: "bk/MONIT10.ROM" size: 8192 required: true + validation: [size] note: "BK-0010 monitor ROM (8 KB). Loaded at address 0100000. Required for all BK-0010 models (0, 1, 2)." source_ref: "main.c:53, boot.c:107" aliases: ["monit10.rom"] @@ -59,6 +63,7 @@ files: path: "bk/FOCAL10.ROM" size: 24576 required: false + validation: [size] note: "FOCAL interpreter ROM (24448-24576 bytes). Loaded at 0120000. Used by BK-0010 (model 0, default)." source_ref: "libretro.c:15, boot.c:110" aliases: ["focal10.rom"] @@ -67,6 +72,7 @@ files: path: "bk/BASIC10.ROM" size: 24576 required: false + validation: [size] note: "BASIC interpreter ROM (24448-24576 bytes). Loaded at 0120000. Used by BK-0010.01 (model 1)." source_ref: "libretro.c:16, boot.c:110" aliases: ["basic10.rom"] @@ -77,6 +83,7 @@ files: path: "bk/DISK_327.ROM" size: 4096 required: false + validation: [size] note: "Floppy disk controller ROM (4 KB). Loaded at 0160000 for BK-0010.01+FDD (model 2), or into system_rom for BK-0011M (model 3/4)." source_ref: "main.c:54, boot.c:99,113" aliases: ["disk_327.rom"] @@ -87,6 +94,7 @@ files: path: "bk/B11M_BOS.ROM" size: 8192 required: false + validation: [size] note: "BK-0011M system ROM / BOS (8 KB). Loaded into system_rom at offset 0. Required for BK-0011M (model 3/4)." source_ref: "main.c:55, boot.c:98" aliases: ["b11m_bos.rom"] @@ -95,6 +103,7 @@ files: path: "bk/B11M_EXT.ROM" size: 8192 required: false + validation: [size] note: "BK-0011M extended BOS ROM (8 KB). Loaded into rom[1] at offset 8192. Required for BK-0011M (model 3/4)." source_ref: "main.c:56, boot.c:102" aliases: ["b11m_ext.rom"] @@ -103,6 +112,7 @@ files: path: "bk/BAS11M_0.ROM" size: 16384 required: false + validation: [size] note: "BK-0011M BASIC ROM part 0 (16 KB). Loaded into rom[0]. Required for BK-0011M (model 3/4)." source_ref: "main.c:57, boot.c:100" aliases: ["bas11m_0.rom"] @@ -111,6 +121,7 @@ files: path: "bk/BAS11M_1.ROM" size: 8192 required: false + validation: [size] note: "BK-0011M BASIC ROM part 1 (8 KB). Loaded into rom[1] at offset 0. Required for BK-0011M (model 3/4)." source_ref: "main.c:58, boot.c:101" aliases: ["bas11m_1.rom"] @@ -121,7 +132,8 @@ files: path: "bk/TERAK.ROM" size: 128 required: false - note: "Terak 8510/a boot ROM (128 bytes). Only used when model is set to Terak 8510/a (model 9)." + validation: [size] + note: "Terak 8510/a boot ROM (128 bytes). Used when model is set to Terak 8510/a (model 9)." source_ref: "boot.c:94" aliases: ["terak.rom"] @@ -145,7 +157,7 @@ platform_details: Terak 8510/a: TERAK.ROM rom_loading: - source_ref: "libretro.c:1051-1108" + source_ref: "libretro.c:1050-1107" notes: | load_rom_file() first tries {romdir}/{filename} with original casing. If not found, retries with the filename converted to lowercase. diff --git a/emulators/blastem.yml b/emulators/blastem.yml index b2779b07..87618113 100644 --- a/emulators/blastem.yml +++ b/emulators/blastem.yml @@ -1,8 +1,9 @@ emulator: BlastEm type: standalone + libretro +core_classification: official_port source: "https://github.com/libretro/blastem" upstream: "https://www.retrodev.com/blastem/" -profiled_date: "2026-03-18" +profiled_date: "2026-03-23" core_version: "v0.6.3-pre" display_name: "Sega - Mega Drive - Genesis (BlastEm)" cores: @@ -30,7 +31,7 @@ notes: | No BIOS files are required or loaded by the libretro core. files: - # rom.db is embedded in the libretro binary (libblastem.c:532-540, + # rom.db is embedded in the libretro binary (libblastem.c:532-542, # extern const char rom_db_data[]). The external file is an optional # override — .info lists it as firmware0_opt=true. # .info sha1 E5414FB1C4CC7D7F5101C07E4547316779BA3D97 does not match @@ -41,7 +42,7 @@ files: required: false hle_fallback: true note: "ROM feature database (game-specific mapper/save config). Embedded in core, external is optional override." - source_ref: "libblastem.c:532-540 read_bundled_file()" + source_ref: "libblastem.c:532-542 read_bundled_file()" # TMSS ROM — only used in standalone mode with tmss-enabled model # libretro build returns NULL for tmss.md (libblastem.c:541) diff --git a/emulators/bluemsx.yml b/emulators/bluemsx.yml index 1a369102..c87d3872 100644 --- a/emulators/bluemsx.yml +++ b/emulators/bluemsx.yml @@ -1,8 +1,9 @@ emulator: blueMSX type: standalone + libretro +core_classification: community_fork source: "https://github.com/libretro/blueMSX-libretro" upstream: "http://bluemsx.msxblue.com/" -profiled_date: "2026-03-18" +profiled_date: "2026-03-23" core_version: "SVN" display_name: "MSX/SVI/ColecoVision/SG-1000 (blueMSX)" cores: @@ -393,8 +394,9 @@ files: path: "Machines/Shared Roms/FMPAC.rom" size: 65536 required: false - note: "FM-PAC cartridge ROM (YM2413 FM synthesis). Loaded as expansion cartridge by MegaromCartridge.c." - source_ref: "Src/Memory/MegaromCartridge.c:290" + hle_fallback: true + note: "FM-PAC cartridge ROM (YM2413 FM synthesis). If missing, core uses built-in minimal ROM stub." + source_ref: "Src/Memory/MegaromCartridge.c:289-305" - name: XBASIC2.rom path: "Machines/Shared Roms/XBASIC2.rom" @@ -648,6 +650,30 @@ files: bundled: true note: "MSX system ROM database. Bundled with core." + - name: colecodb.xml + path: "Databases/colecodb.xml" + required: false + bundled: true + note: "ColecoVision ROM database. Bundled with core." + + - name: msxcaswavdb.xml + path: "Databases/msxcaswavdb.xml" + required: false + bundled: true + note: "MSX cassette/WAV media database. Bundled with core." + + - name: segadb.xml + path: "Databases/segadb.xml" + required: false + bundled: true + note: "Sega SG-1000/SC-3000/SF-7000 ROM database. Bundled with core." + + - name: svidb.xml + path: "Databases/svidb.xml" + required: false + bundled: true + note: "Spectravideo SVI ROM database. Bundled with core." + # Machine count: 170+ machine configurations covering dozens of regional MSX # variants from manufacturers like Panasonic, Sony, Philips, Yamaha, Sanyo, # National, Toshiba, Daewoo, Sharp, Gradiente, Spectravideo, and others. diff --git a/emulators/bnes.yml b/emulators/bnes.yml index ba23f670..472d917e 100644 --- a/emulators/bnes.yml +++ b/emulators/bnes.yml @@ -1,7 +1,9 @@ emulator: bnes type: libretro +core_classification: frozen_snapshot source: "https://github.com/libretro/bnes-libretro" -profiled_date: "2026-03-18" +upstream: "https://github.com/Alcaro/bsnes-gc" +profiled_date: "2026-03-23" core_version: "v083" display_name: "Nintendo - NES / Famicom (bnes)" cores: @@ -10,27 +12,13 @@ systems: - nes notes: | - bnes is a NES emulator based on byuu's bNES/higan v083 NES module, ported - to libretro by Ryphecha. It is a lightweight, accuracy-focused NES core. - - The core loads cartridge data entirely through retro_load_game with - need_fullpath=false (libretro/libretro.cpp:129). ROM data is passed as a - memory buffer and parsed by Cartridge::load (nes/cartridge/cartridge.cpp:18-31), - which detects iNES headers (16-byte offset) and delegates to Board::load. - - The PPU generates its palette from a hardcoded color table in - libretro/libretro.cpp:20-37 with emphasis factor tables. No external - palette file is loaded. - - System::init (nes/system/system.cpp:62-66) only sets up the interface - pointer and default input devices. No system ROM, BIOS, or firmware is - loaded at any stage of initialization or cartridge loading. - - The core does not call RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY and has no - file I/O for BIOS or firmware. FDS (Famicom Disk System) is not supported, - so disksys.rom is not needed. - - No external BIOS or firmware files are needed. + Frozen libretro port of byuu's higan v083 NES module by Ryphecha. Experimental, + not maintained. ROM data passed via retro_load_game memory buffer + (libretro/libretro.cpp:181-184). Cartridge::load parses iNES headers and + delegates to Board::load (nes/cartridge/cartridge.cpp:18-31). System::init sets + up the interface pointer and default input devices (nes/system/system.cpp:62-66). + No system directory access. No FDS support. Palette hardcoded + (libretro/libretro.cpp:20-37). .info declares no firmware (firmware_count absent). files: [] @@ -40,24 +28,7 @@ analysis: cartridge_load: "nes/cartridge/cartridge.cpp:18-31 - parses iNES header + ROM data" system_init: "nes/system/system.cpp:62-66 - sets interface pointer, no ROM loading" system_power: "nes/system/system.cpp:43-50 - powers subsystems, no file I/O" - interface_init: "nes/interface/interface.cpp - stores derived pointer, calls system.init" - supported_mappers: - - NROM - - SxROM (MMC1) - - UxROM - - CNROM - - TxROM (MMC3) - - ExROM (MMC5) - - AxROM - - BnROM - - GxROM - - PxROM (MMC4) - - FxROM (MMC4) - - Bandai FCG - - Konami VRC4 - - Konami VRC6 - - Konami VRC7 - - Sunsoft 5B + interface_init: "nes/interface/interface.cpp:17-20 - stores derived pointer, calls system.init" fds_support: false filesystem_access: false system_directory_used: false diff --git a/emulators/boom3.yml b/emulators/boom3.yml index 2467d1b5..285c0c7e 100644 --- a/emulators/boom3.yml +++ b/emulators/boom3.yml @@ -1,7 +1,9 @@ emulator: boom3 type: libretro +core_classification: game_engine source: "https://github.com/libretro/boom3" -profiled_date: "2026-03-18" +upstream: "https://github.com/dhewm/dhewm3" +profiled_date: "2026-03-23" core_version: "git" display_name: "Doom 3 (boom3)" cores: [boom3, boom3_xp] diff --git a/emulators/boytacean.yml b/emulators/boytacean.yml index eb3328a8..83289c1f 100644 --- a/emulators/boytacean.yml +++ b/emulators/boytacean.yml @@ -1,9 +1,10 @@ emulator: Boytacean type: standalone + libretro +core_classification: official_port source: "https://github.com/joamag/boytacean" upstream: "https://github.com/joamag/boytacean" -profiled_date: "2026-03-18" -core_version: "0.10.13" +profiled_date: "2026-03-23" +core_version: "0.11.5" display_name: "Nintendo - Game Boy / Color (Boytacean)" cores: - boytacean @@ -12,23 +13,21 @@ systems: - nintendo-gbc notes: | - Boytacean is a Game Boy / Game Boy Color emulator written in Rust. + Game Boy / Game Boy Color emulator written in Rust by Joao Magalhaes. - Libretro: boot ROMs compiled into binary as static byte arrays in + Libretro: all boot ROMs compiled into binary as static byte arrays in src/data.rs. load_boot_static() copies from arrays. No filesystem access, no RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. No external files. - ref: frontends/libretro/src/core.rs:402 instance.load(true) + ref: core.rs:402 instance.load(true) -> gb.rs:1311 -> load_boot_static - Standalone (SDL): loads boot ROMs from ./res/boot/*.bin via - load_boot_path() at gb.rs:1363-1368. 8 boot ROM files shipped in repo. - ref: frontends/sdl/src/main.rs, src/gb.rs:1341 + Standalone (SDL): also defaults to embedded boot ROMs via load(true). + User can override via --boot-rom-path CLI argument with any boot ROM + file. load_boot_file() with hardcoded ./res/boot/*.bin paths exists in + gb.rs:1361 but is not called from any frontend. - Boot ROM defaults: - - DMG: BootRom::DmgBootix (gb.rs:1352) - open-source, 256 bytes - - CGB: BootRom::CgbBoytacean (gb.rs:1355) - open-source, 2304 bytes + Boot ROM defaults: DmgBootix (DMG), CgbBoytacean (CGB) — open-source. files: - # Standalone mode loads from res/boot/ — libretro embeds all as arrays - name: dmg_boot.bin system: nintendo-gb required: false @@ -36,7 +35,7 @@ files: mode: standalone size: 256 note: "Original Nintendo DMG boot ROM" - source_ref: "gb.rs:1363, data.rs:14 (embedded as DMG_BOOT)" + source_ref: "gb.rs:1350 load_boot_static, data.rs:14 DMG_BOOT" - name: sgb_boot.bin system: nintendo-gb @@ -45,7 +44,7 @@ files: mode: standalone size: 256 note: "Super Game Boy boot ROM" - source_ref: "gb.rs:1364, data.rs:29 (embedded as SGB_BOOT)" + source_ref: "gb.rs:1351 load_boot_static, data.rs:29 SGB_BOOT" - name: dmg_bootix.bin system: nintendo-gb @@ -53,8 +52,8 @@ files: hle_fallback: true mode: standalone size: 256 - note: "Open-source DMG boot ROM from Bootix (default)" - source_ref: "gb.rs:1365, data.rs:44 (embedded as DMG_BOOTIX)" + note: "Open-source DMG boot ROM from Bootix (default DMG)" + source_ref: "gb.rs:1352 load_boot_static, data.rs:44 DMG_BOOTIX" - name: mgb_bootix.bin system: nintendo-gb @@ -63,7 +62,7 @@ files: mode: standalone size: 256 note: "Open-source MGB (Pocket) boot ROM from Bootix" - source_ref: "gb.rs:1366, data.rs:59 (embedded as MGB_BOOTIX)" + source_ref: "gb.rs:1353 load_boot_static, data.rs:59 MGB_BOOTIX" - name: cgb_boot.bin system: nintendo-gbc @@ -72,7 +71,7 @@ files: mode: standalone size: 2304 note: "Original Nintendo CGB boot ROM" - source_ref: "gb.rs:1367, data.rs:74 (embedded as CGB_BOOT)" + source_ref: "gb.rs:1354 load_boot_static, data.rs:74 CGB_BOOT" - name: cgb_boytacean.bin system: nintendo-gbc @@ -80,21 +79,5 @@ files: hle_fallback: true mode: standalone size: 2304 - note: "Custom open-source CGB boot ROM (default)" - source_ref: "gb.rs:1368, data.rs:177 (embedded as CGB_BOYTACEAN)" - - - name: dmg_pyboy.bin - system: nintendo-gb - required: false - hle_fallback: true - mode: standalone - note: "PyBoy DMG boot ROM variant (in res/boot/, not embedded in data.rs)" - source_ref: "res/boot/dmg_pyboy.bin" - - - name: cgb_pyboy.bin - system: nintendo-gbc - required: false - hle_fallback: true - mode: standalone - note: "PyBoy CGB boot ROM variant (in res/boot/, not embedded in data.rs)" - source_ref: "res/boot/cgb_pyboy.bin" + note: "Custom open-source CGB boot ROM (default CGB)" + source_ref: "gb.rs:1355 load_boot_static, data.rs:177 CGB_BOYTACEAN" diff --git a/emulators/bsnes-jg.yml b/emulators/bsnes-jg.yml index 1e19d5c0..c50f082a 100644 --- a/emulators/bsnes-jg.yml +++ b/emulators/bsnes-jg.yml @@ -1,9 +1,10 @@ emulator: bsnes-jg type: libretro +core_classification: community_fork source: "https://github.com/libretro/bsnes-jg" -upstream: "https://github.com/libretro/bsnes-jg" -profiled_date: "2026-03-18" -core_version: "2.0.0" +upstream: "https://gitlab.com/jgemu/bsnes" +profiled_date: "2026-03-23" +core_version: "2.1.0" display_name: "Nintendo - SNES / SFC (bsnes-jg)" cores: [bsnes-jg] systems: @@ -13,107 +14,130 @@ systems: - nintendo-sufami-turbo notes: | - bsnes-jg is a fork of bsnes v115 by Rupert Carmichael, rewritten for - C++ standard library. Coprocessor firmware loaded from system_dir via - openFileCallback. SGB boot ROMs and CX4/HitachiDSP data ROM embedded. + Fork of bsnes v115 by Rupert Carmichael, rewritten for C++ standard library. + Coprocessor firmware loaded from system_dir via openFileCallback. + HLE available for DSP1/1B/2/4 and ST010 (core option bsnes_jg_coproc_preferhle). + DSP3, ST011, ST018 require LLE firmware in all cases (no HLE path). + CX4/HitachiDSP uses embedded static data ROM (3072 bytes), no external file. + SGB1/SGB2 boot ROMs embedded (256 bytes each). BML game databases embedded as C++ string literals. - ref: libretro/libretro.cpp:722 RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY - ref: libretro/libretro.cpp:428-470 firmware path construction (sysdir + filename) - ref: src/cartridge.cpp:774-786 openFileCallback for DSP/ST .program.rom/.data.rom + ref: libretro/libretro.cpp:420-502 fileOpenV firmware loading callback + ref: src/cartridge.cpp:754-829 uPD7725 (DSP1-4) LLE/HLE dispatch + ref: src/cartridge.cpp:831-901 uPD96050 (ST010/ST011) LLE/HLE dispatch + ref: src/cartridge.cpp:615-670 ARM6 (ST018) firmware loading + ref: src/cartridge.cpp:672-752 HG51BS169 (HitachiDSP/CX4) embedded ROM + HLE ref: src/coprocessor/icd.cpp:249,260 SGB1/SGB2 boot ROMs embedded - ref: src/cartridge.cpp:62 HitachiDSP static data ROM embedded (3072 bytes) - ref: libretro/libretro.cpp:30-33,410-416 BML databases embedded + ref: src/cartridge.cpp:62 hitachidspStaticDataROM embedded + ref: libretro/libretro.cpp:30-33 BML databases embedded files: - # SNES coprocessor firmware — loaded from system_dir, all optional - # Games using these coprocessors won't work without the firmware - # but most SNES games don't use coprocessors + # uPD7725 coprocessor firmware (DSP1, DSP1B, DSP2, DSP3, DSP4) + # HLE fallback available for DSP1/1B/2/4, not for DSP3 - name: dsp1.program.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp:428-429" + hle_fallback: true + source_ref: "libretro/libretro.cpp:429, src/cartridge.cpp:774,798-804" - name: dsp1.data.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp:431-432" + hle_fallback: true + source_ref: "libretro/libretro.cpp:432, src/cartridge.cpp:786,798-804" - name: dsp1b.program.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp:434-435" + hle_fallback: true + source_ref: "libretro/libretro.cpp:435, src/cartridge.cpp:774,798-804" - name: dsp1b.data.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp:437-438" + hle_fallback: true + source_ref: "libretro/libretro.cpp:438, src/cartridge.cpp:786,798-804" - name: dsp2.program.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp:440-441" + hle_fallback: true + source_ref: "libretro/libretro.cpp:441, src/cartridge.cpp:774,806-811" - name: dsp2.data.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp:443-444" + hle_fallback: true + source_ref: "libretro/libretro.cpp:444, src/cartridge.cpp:786,806-811" - name: dsp3.program.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp:446-447" + source_ref: "libretro/libretro.cpp:447-448, src/cartridge.cpp:774,822-828" - name: dsp3.data.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp:450-451" + source_ref: "libretro/libretro.cpp:451-452, src/cartridge.cpp:786,822-828" - name: dsp4.program.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp:455" + hle_fallback: true + source_ref: "libretro/libretro.cpp:455, src/cartridge.cpp:774,813-818" - name: dsp4.data.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp" + hle_fallback: true + source_ref: "libretro/libretro.cpp:458, src/cartridge.cpp:786,813-818" + + # uPD96050 coprocessor firmware (ST010, ST011) + # HLE fallback available for ST010, not for ST011 - name: st010.program.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp" + hle_fallback: true + source_ref: "libretro/libretro.cpp:461, src/cartridge.cpp:851,872-882" - name: st010.data.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp" + hle_fallback: true + source_ref: "libretro/libretro.cpp:464, src/cartridge.cpp:863,872-882" - name: st011.program.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp" + source_ref: "libretro/libretro.cpp:467-468, src/cartridge.cpp:851,884-901" - name: st011.data.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp" + source_ref: "libretro/libretro.cpp:471-472, src/cartridge.cpp:863,884-901" + + # ARM6 coprocessor firmware (ST018) + # Internal name arm6, mapped to st018 by libretro wrapper. No HLE. - name: st018.program.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp" + source_ref: "libretro/libretro.cpp:475-476, src/cartridge.cpp:640" + aliases: [arm6.program.rom] - name: st018.data.rom system: nintendo-snes required: false - source_ref: "libretro/libretro.cpp" + source_ref: "libretro/libretro.cpp:479-480, src/cartridge.cpp:650" + aliases: [arm6.data.rom] # Embedded (no external file needed): # SGB1BootROM[256] — src/coprocessor/icd.cpp:249 # SGB2BootROM[256] — src/coprocessor/icd.cpp:260 # hitachidspStaticDataROM[3072] — src/cartridge.cpp:62 +# CX4 HLE — src/cartridge.cpp:705-720 (preferHLE path for HG51BS169) # boards_bml — libretro/boards_bml.hpp # SuperFamicom_bml — libretro/SuperFamicom_bml.hpp # BSMemory_bml — libretro/BSMemory_bml.hpp diff --git a/emulators/bsnes.yml b/emulators/bsnes.yml index 302ec546..1cfda932 100644 --- a/emulators/bsnes.yml +++ b/emulators/bsnes.yml @@ -1,10 +1,13 @@ emulator: bsnes type: libretro +core_classification: official_port source: "https://github.com/libretro/bsnes-libretro" +upstream: "https://github.com/bsnes-emu/bsnes" logo: "https://raw.githubusercontent.com/bsnes-emu/bsnes/master/bsnes/target-bsnes/resource/bsnes.svg" -profiled_date: "2026-03-18" +profiled_date: "2026-03-23" core_version: "115" display_name: "Nintendo - SNES / SFC (bsnes)" +cores: [bsnes] systems: [nintendo-snes, nintendo-super-game-boy, nintendo-satellaview] # bsnes supports HLE for DSP1/DSP1B/DSP2/DSP4, ST010, and Cx4. @@ -172,8 +175,7 @@ files: - name: "BS-X.bin" required: true - md5: fed4d8242cfbed61343d53d48432aced - note: "BS-X Satellaview BIOS ROM. Required for .bs games. .info md5=fed4d824, repo has 96cf17bf (Rev 1 vs original)" + note: "BS-X Satellaview BIOS ROM. Required for .bs games" source_ref: "target-libretro/libretro.cpp:948" notes: diff --git a/emulators/bsnes2014.yml b/emulators/bsnes2014.yml index 408be048..b45e3e3b 100644 --- a/emulators/bsnes2014.yml +++ b/emulators/bsnes2014.yml @@ -1,8 +1,9 @@ emulator: bsnes 2014 type: libretro +core_classification: frozen_snapshot source: "https://github.com/libretro/bsnes2014" upstream: "https://github.com/bsnes-emu/bsnes" -profiled_date: "2026-03-18" +profiled_date: "2026-03-23" core_version: "v094" display_name: "Nintendo - SNES / SFC (bsnes 2014)" cores: [bsnes2014_accuracy, bsnes2014_balanced, bsnes2014_performance] @@ -13,110 +14,123 @@ systems: - nintendo-sufami-turbo notes: | - bsnes 2014 is based on bsnes v094. Three build profiles: - accuracy (dot-based PPU), balanced, performance (scanline PPU). - All 3 profiles use the same 18 firmware files. Profiles differ only - in PPU implementation (sfc/profile-*.hpp: CPU/SMP/DSP/PPU alternates), - not in coprocessor support. CX4/Hitachi compiled in all profiles. - .info says performance has 17 (no cx4) — this is wrong, verified in - sfc/profile-performance.hpp which only changes CPU/SMP/DSP/PPU. - - Unlike modern bsnes (v115+), v094 does NOT have HLE fallback for - coprocessors. CX4 is NOT embedded — cx4.data.rom is required - externally. SGB boot ROM is NOT embedded — sgb.boot.rom required. - + Frozen at bsnes v094. Three build profiles: accuracy (dot-based PPU), + balanced, performance (scanline PPU). All 3 share the same 18 firmware + files. Profiles only differ in PPU (sfc/profile-*.hpp), not coprocessors. + Performance .info is wrong (firmware_count=17, missing cx4.data.rom). + SPC700 IPL ROM (64 bytes) embedded in target-libretro/libretro.cpp:31. + No HLE fallback for any coprocessor in v094. Firmware loaded from system_dir via file::exists() + mmapstream. - ref: target-libretro/libretro.cpp — penviron(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY) - ref: ananke/heuristics/super-famicom.hpp — firmware name definitions - ref: ananke/super-famicom.cpp:120 — sgb.boot.rom copy + DSP1 (non-b) names used via embedded database for specific SHA256-matched + games; DSP1B names used via heuristic fallback for all DSP1/DSP1B games. + Upstream v094 source is contained within the libretro repo (sfc/, ananke/). + bsnes-emu/bsnes is the modern rewrite (v115+). files: - # DSP coprocessor split ROMs (program + data) - name: dsp1.program.rom system: nintendo-snes required: false - source_ref: "ananke/heuristics/super-famicom.hpp:381" + size: 6144 + source_ref: "ananke/database/super-famicom.hpp:5658" - name: dsp1.data.rom system: nintendo-snes required: false - source_ref: "ananke/heuristics/super-famicom.hpp:382" + size: 2048 + source_ref: "ananke/database/super-famicom.hpp:5659" - name: dsp1b.program.rom system: nintendo-snes required: false + size: 6144 source_ref: "ananke/heuristics/super-famicom.hpp:381" - name: dsp1b.data.rom system: nintendo-snes required: false + size: 2048 source_ref: "ananke/heuristics/super-famicom.hpp:382" - name: dsp2.program.rom system: nintendo-snes required: false + size: 6144 + source_ref: "ananke/heuristics/super-famicom.hpp:403" - name: dsp2.data.rom system: nintendo-snes required: false + size: 2048 + source_ref: "ananke/heuristics/super-famicom.hpp:404" - name: dsp3.program.rom system: nintendo-snes required: false - note: "no HLE fallback in v094 — required for SD Gundam GX" + size: 6144 + source_ref: "ananke/heuristics/super-famicom.hpp:417" - name: dsp3.data.rom system: nintendo-snes required: false + size: 2048 + source_ref: "ananke/heuristics/super-famicom.hpp:418" - name: dsp4.program.rom system: nintendo-snes required: false + size: 6144 + source_ref: "ananke/heuristics/super-famicom.hpp:431" - name: dsp4.data.rom system: nintendo-snes required: false + size: 2048 + source_ref: "ananke/heuristics/super-famicom.hpp:432" - # CX4 (Hitachi) — NOT embedded in v094 unlike bsnes v115+ - name: cx4.data.rom system: nintendo-snes required: false size: 3072 - note: "Capcom CX4 coprocessor data. Required for Mega Man X2/X3. Used in all 3 profiles (.info performance is wrong). NOT embedded in v094." source_ref: "ananke/heuristics/super-famicom.hpp:146" - # Seta coprocessors - name: st010.program.rom system: nintendo-snes required: false + size: 49152 + source_ref: "ananke/heuristics/super-famicom.hpp:445" - name: st010.data.rom system: nintendo-snes required: false + size: 4096 + source_ref: "ananke/heuristics/super-famicom.hpp:446" - name: st011.program.rom system: nintendo-snes required: false - note: "no HLE fallback — required for Hayazashi Nidan Morita Shougi" + size: 49152 + source_ref: "ananke/heuristics/super-famicom.hpp:460" - name: st011.data.rom system: nintendo-snes required: false + size: 4096 + source_ref: "ananke/heuristics/super-famicom.hpp:461" - name: st018.program.rom system: nintendo-snes required: false - note: "ARM coprocessor. Required for Hayazashi Nidan Morita Shougi 2" - source_ref: "ananke/heuristics/super-famicom.hpp:475-476" + size: 131072 + source_ref: "ananke/heuristics/super-famicom.hpp:475" - name: st018.data.rom system: nintendo-snes required: false + size: 32768 + source_ref: "ananke/heuristics/super-famicom.hpp:476" - # SGB boot ROM — NOT embedded in v094 unlike bsnes-jg/v115+ - name: sgb.boot.rom system: nintendo-sgb required: false size: 256 - note: "SGB boot ROM (256 bytes). NOT embedded in v094. Present in all 3 profiles." - source_ref: "ananke/heuristics/super-famicom.hpp:133, ananke/super-famicom.cpp:120" + source_ref: "ananke/heuristics/super-famicom.hpp:133" diff --git a/emulators/bsnes_cplusplus98.yml b/emulators/bsnes_cplusplus98.yml index 1cf36c1c..93ea6d45 100644 --- a/emulators/bsnes_cplusplus98.yml +++ b/emulators/bsnes_cplusplus98.yml @@ -1,36 +1,36 @@ emulator: bsnes C++98 type: libretro +core_classification: frozen_snapshot source: "https://github.com/libretro/bsnes-libretro-cplusplus98" -upstream: "https://github.com/bsnes-emu/bsnes" -profiled_date: "2026-03-18" +upstream: "https://byuu.org/" +profiled_date: "2026-03-23" core_version: "v085 (Performance)" display_name: "Nintendo - SNES / SFC (bsnes C++98 (v085))" cores: [bsnes_cplusplus98] systems: - nintendo-snes + - nintendo-sufami-turbo + - nintendo-satellaview notes: | - bsnes C++98 is bsnes v085 downgraded to C++98 for old compilers. + Frozen snapshot of bsnes v085 downgraded to C++98 for old compilers (PS3). Performance profile only. is_experimental=true. - Firmware loading differs from newer bsnes versions: - - NEC DSP (dsp1/2/3/4) and Hitachi DSP (cx4) firmware loaded from - the SAME DIRECTORY as the ROM, not from system_dir. - - Path: dir(interface->path(Slot::Base, ".dsp")) + firmware_name - ref: snes/cartridge/markup.cpp:231 - - interface->path() returns basename + hint - ref: snes/libretro/libretro.cpp path() method - - Firmware name comes from the game's XML/BML markup (root["firmware"]) - NOT fixed names like dsp1.program.rom - - Files are COMBINED (program+data in one file), not split - ref: snes/cartridge/markup.cpp:243-244 reads promsize*3 + dromsize*2 + NEC DSP and Hitachi DSP firmware loaded from the ROM directory, not + system_dir. Path: dir(interface->path(Slot::Base, ".dsp")) + firmware_name + from game XML markup. interface->path() returns ROM basename + hint. + ref: snes/cartridge/markup.cpp parse_markup_necdsp, parse_markup_hitachidsp + ref: snes/libretro/libretro.cpp Interface::path() - .info has firmware_count=0 because firmware is loaded from ROM dir, - not from system_dir — RetroArch can't pre-populate them. + RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY is never called. + No file I/O targets system_dir anywhere in the codebase. - The core warns "NEC DSP firmware X is missing" if not found but - continues without the coprocessor (games using it won't work). + Core continues without DSP firmware but coprocessor games won't function. + +exclusion_note: > + firmware_count=0 in .info is correct. DSP firmware (NEC uPD7725/uPD96050, + Hitachi CX4) is loaded from the ROM directory via game XML markup, not from + system_dir. RetroArch cannot pre-populate firmware in the ROM directory. + Upstream byuu.org is defunct; this libretro port is the preserved v085 code. files: [] -# firmware loaded from ROM directory, not system directory -# no files to declare for system_dir placement diff --git a/emulators/bsnes_hd_beta.yml b/emulators/bsnes_hd_beta.yml index c182f74a..dca7c56a 100644 --- a/emulators/bsnes_hd_beta.yml +++ b/emulators/bsnes_hd_beta.yml @@ -1,10 +1,10 @@ emulator: bsnes-hd beta type: libretro +core_classification: enhanced_fork source: "https://github.com/DerKoun/bsnes-hd" upstream: "https://github.com/bsnes-emu/bsnes" -profiled_date: "2026-03-18" +profiled_date: "2026-03-23" core_version: "v10.6" -# .info says v112.v12 but repo shows Version = "10.6", SerializerVersion = "114.2" display_name: "Nintendo - SNES / SFC (bsnes-hd beta)" cores: [bsnes_hd_beta] systems: @@ -14,112 +14,139 @@ systems: - nintendo-sufami-turbo notes: | - bsnes-hd beta is bsnes ~v114 by DerKoun with widescreen and - increased color depth. Same firmware as bsnes v115. + bsnes-hd beta is a fork of bsnes ~v114 by DerKoun with widescreen + and true color rendering. Firmware handling identical to bsnes v115. repo Version="10.6", SerializerVersion="114.2" - ref: bsnes/emulator/emulator.hpp:34,40 + ref: bsnes/emulator/emulator.hpp:33-34,40 SGB boot ROMs embedded in binary (icd/boot-roms.cpp:1,12). SGB1.sfc/SGB2.sfc are SGB cartridge ROMs (not boot ROMs). - HLE available for DSP1/2/4, ST010, CX4 — LLE firmware optional. - DSP3, ST011, ST018 have no HLE — LLE firmware required for those. - - ref: bsnes/sfc/coprocessor/icd/boot-roms.cpp:1,12 - ref: bsnes/sfc/coprocessor/icd/icd.cpp:87,90 - ref: bsnes/heuristics/super-famicom.cpp:115 + HLE available for DSP1/1B/2/4, ST010, CX4 (default ON in libretro). + DSP3, ST011, ST018 have no HLE. + Coprocessor firmware not loaded from system_dir in libretro wrapper; + HLE used by default, LLE requires firmware embedded in ROM. + ref: sfc/cartridge/load.cpp:431,506,586 + ref: sfc/coprocessor/icd/icd.cpp:87,90 + ref: target-libretro/libretro_core_options.h:462-470 files: - # Split DSP coprocessor firmware + # NEC uPD7725 coprocessor firmware (DSP1/1B/2/3/4) + # code requests upd7725.program.rom / upd7725.data.rom internally + # .info conventional names used here - name: dsp1.program.rom system: nintendo-snes required: false hle_fallback: true + source_ref: "sfc/cartridge/load.cpp:490-494,506-513" - name: dsp1.data.rom system: nintendo-snes required: false hle_fallback: true + source_ref: "sfc/cartridge/load.cpp:498-503,506-513" - name: dsp1b.program.rom system: nintendo-snes required: false hle_fallback: true + source_ref: "sfc/cartridge/load.cpp:490-494,506-513" - name: dsp1b.data.rom system: nintendo-snes required: false hle_fallback: true + source_ref: "sfc/cartridge/load.cpp:498-503,506-513" - name: dsp2.program.rom system: nintendo-snes required: false hle_fallback: true + source_ref: "sfc/cartridge/load.cpp:490-494,515-520" - name: dsp2.data.rom system: nintendo-snes required: false hle_fallback: true + source_ref: "sfc/cartridge/load.cpp:498-503,515-520" - name: dsp3.program.rom system: nintendo-snes required: false note: "no HLE — required for SD Gundam GX" + source_ref: "sfc/cartridge/load.cpp:490-494,531-534" - name: dsp3.data.rom system: nintendo-snes required: false + note: "no HLE — required for SD Gundam GX" + source_ref: "sfc/cartridge/load.cpp:498-503,531-534" - name: dsp4.program.rom system: nintendo-snes required: false hle_fallback: true + source_ref: "sfc/cartridge/load.cpp:490-494,522-528" - name: dsp4.data.rom system: nintendo-snes required: false hle_fallback: true + source_ref: "sfc/cartridge/load.cpp:498-503,522-528" - # CX4 (Hitachi) + # Hitachi HG51BS169 coprocessor (CX4) + # code requests hg51bs169.data.rom internally - name: cx4.data.rom system: nintendo-snes required: false hle_fallback: true size: 3072 - note: "HLE available — LLE optional for Mega Man X2/X3" + source_ref: "sfc/cartridge/load.cpp:431-454" - # Seta coprocessors + # NEC uPD96050 coprocessor (ST010/ST011) + # code requests upd96050.program.rom / upd96050.data.rom internally - name: st010.program.rom system: nintendo-snes required: false hle_fallback: true + source_ref: "sfc/cartridge/load.cpp:570-574,586-596" - name: st010.data.rom system: nintendo-snes required: false hle_fallback: true + source_ref: "sfc/cartridge/load.cpp:578-583,586-596" - name: st011.program.rom system: nintendo-snes required: false note: "no HLE — required for Hayazashi Nidan Morita Shougi" + source_ref: "sfc/cartridge/load.cpp:570-574,599-602" - name: st011.data.rom system: nintendo-snes required: false + note: "no HLE — required for Hayazashi Nidan Morita Shougi" + source_ref: "sfc/cartridge/load.cpp:578-583,599-602" + + # ARM6 coprocessor (ST018) + # code requests arm6.program.rom / arm6.data.rom internally - name: st018.program.rom system: nintendo-snes required: false note: "no HLE — required for Hayazashi Nidan Morita Shougi 2" + source_ref: "sfc/cartridge/load.cpp:379-384" - name: st018.data.rom system: nintendo-snes required: false + note: "no HLE — required for Hayazashi Nidan Morita Shougi 2" + source_ref: "sfc/cartridge/load.cpp:387-393" - # SGB cartridge ROMs (NOT boot ROMs — boot ROMs are embedded) - # sgb_bios variable set by core option bsnes_sgb_bios (libretro.cpp:280-285) + # SGB cartridge ROMs (boot ROMs embedded in icd/boot-roms.cpp) + # sgb_bios core option selects SGB1.sfc or SGB2.sfc (default: SGB1.sfc) - name: SGB1.sfc system: nintendo-sgb required: false md5: b15ddb15721c657d82c5bab6db982ee9 note: "SGB1 cartridge ROM. Boot ROM embedded in icd/boot-roms.cpp:1" - source_ref: "libretro.cpp:1022,1040" + source_ref: "target-libretro/libretro.cpp:1022,1040" - name: SGB2.sfc system: nintendo-sgb required: false md5: 8ecd73eb4edf7ed7e81aef1be80031d5 note: "SGB2 cartridge ROM. Boot ROM embedded in icd/boot-roms.cpp:12" - source_ref: "libretro.cpp:1022,1040" + source_ref: "target-libretro/libretro.cpp:1022,1040" - # Satellaview BIOS — required for .bs files + # Satellaview BIOS - name: BS-X.bin system: nintendo-satellaview required: false - note: "Satellaview BIOS. Required when loading .bs files. Core returns false if missing." - source_ref: "libretro.cpp:1054-1060" + note: "required when loading .bs files, core returns false if missing" + source_ref: "target-libretro/libretro.cpp:1054-1060" diff --git a/emulators/bsnes_mercury.yml b/emulators/bsnes_mercury.yml index fd4cc169..5b715152 100644 --- a/emulators/bsnes_mercury.yml +++ b/emulators/bsnes_mercury.yml @@ -1,8 +1,9 @@ emulator: bsnes-mercury type: libretro +core_classification: enhanced_fork source: "https://github.com/libretro/bsnes-mercury" -upstream: "https://github.com/bsnes-emu/bsnes" -profiled_date: "2026-03-18" +upstream: "https://byuu.org/higan" +profiled_date: "2026-03-23" core_version: "v094 (Mercury)" display_name: "Nintendo - SNES / SFC (bsnes-mercury)" cores: [bsnes_mercury_accuracy, bsnes_mercury_balanced, bsnes_mercury_performance] @@ -13,100 +14,156 @@ systems: - nintendo-sufami-turbo notes: | - bsnes-mercury is bsnes v094 with Mercury optimizations: HLE for DSP - and Hitachi coprocessors, firmware_appended support, overclocking. + Fork of higan v094 by Alcaro. Restores HLE for coprocessor chips removed + in v094, adds firmware_appended support and SuperFX overclocking. Three profiles: accuracy, balanced, performance (PPU differs, not firmware). - .info says performance has 17 fw (no cx4) but the code compiles CX4 LLE - in all profiles — cx4.data.rom works in performance too. The .info is wrong. - Core option bsnes_chip_hle (default LLE) controls HLE/LLE at runtime. - ref: target-libretro/libretro.cpp altImplementation(), "bsnes_chip_hle" + Core option bsnes_chip_hle (default LLE, requires bsnes_violate_accuracy) + controls HLE/LLE at runtime. ref: target-libretro/libretro.cpp:428-442 - Same firmware loading as bsnes2014: system_dir via file::exists + - mmapstream. No BS-X auto-load from system_dir (subsystem only). - ref: target-libretro/libretro.cpp:245-254 - - HLE fallback for DSP1/1B/2/4, Hitachi/CX4, ST010. - ref: sfc/cartridge/markup.cpp:351,404,618 + Firmware loaded from system_dir via file::exists + mmapstream. + No hash or size validation on any firmware file. + ref: target-libretro/libretro.cpp:241-263 firmware_appended: firmware can be appended to end of ROM file. ref: ananke/heuristics/super-famicom.hpp:83 - SGB boot ROM NOT embedded (sgb.boot.rom from system_dir). - CX4 NOT embedded (cx4.data.rom from system_dir). + SPC700 IPL ROM (64 bytes) is embedded in the binary. + ref: target-libretro/libretro.cpp:39 + + Upstream higan v094 by byuu (2014, site defunct). Mercury preserves v094 + code with HLE additions documented in changes.diff at repo root. files: - # Same 18 files as bsnes2014 accuracy — see bsnes2014.yml for details - # DSP1-4 split (program+data), CX4, ST010-018, sgb.boot.rom + # --- NEC uPD7725 DSP chips (DSP1/1B/2/3/4) --- + # ananke always generates dsp1b filenames for DSP-1 games (backward-compatible) + - name: dsp1.program.rom system: nintendo-snes required: false + size: 6144 hle_fallback: true + note: "only loaded via custom BML manifest, ananke uses dsp1b" + source_ref: "sfc/cartridge/markup.cpp:422-432" + - name: dsp1.data.rom system: nintendo-snes required: false + size: 2048 hle_fallback: true + note: "only loaded via custom BML manifest, ananke uses dsp1b" + source_ref: "sfc/cartridge/markup.cpp:422-432" + - name: dsp1b.program.rom system: nintendo-snes required: false + size: 6144 hle_fallback: true + source_ref: "ananke/heuristics/super-famicom.hpp:381" + - name: dsp1b.data.rom system: nintendo-snes required: false + size: 2048 hle_fallback: true + source_ref: "ananke/heuristics/super-famicom.hpp:382" + - name: dsp2.program.rom system: nintendo-snes required: false + size: 6144 hle_fallback: true + source_ref: "ananke/heuristics/super-famicom.hpp:403" + - name: dsp2.data.rom system: nintendo-snes required: false + size: 2048 hle_fallback: true + source_ref: "ananke/heuristics/super-famicom.hpp:404" + - name: dsp3.program.rom system: nintendo-snes required: false - note: "no HLE — required for SD Gundam GX" + size: 6144 + hle_fallback: true + source_ref: "ananke/heuristics/super-famicom.hpp:417" + - name: dsp3.data.rom system: nintendo-snes required: false + size: 2048 + hle_fallback: true + source_ref: "ananke/heuristics/super-famicom.hpp:418" + - name: dsp4.program.rom system: nintendo-snes required: false + size: 6144 hle_fallback: true + source_ref: "ananke/heuristics/super-famicom.hpp:431" + - name: dsp4.data.rom system: nintendo-snes required: false + size: 2048 hle_fallback: true + source_ref: "ananke/heuristics/super-famicom.hpp:432" + + # --- Hitachi HG51B (CX4) --- + - name: cx4.data.rom system: nintendo-snes required: false - hle_fallback: true size: 3072 - note: "HLE available via Mercury — LLE optional" + hle_fallback: true source_ref: "ananke/heuristics/super-famicom.hpp:146" + + # --- NEC uPD96050 (ST010, ST011) --- + - name: st010.program.rom system: nintendo-snes required: false + size: 49152 hle_fallback: true + source_ref: "ananke/heuristics/super-famicom.hpp:445" + - name: st010.data.rom system: nintendo-snes required: false + size: 4096 hle_fallback: true + source_ref: "ananke/heuristics/super-famicom.hpp:446" + - name: st011.program.rom system: nintendo-snes required: false - note: "no HLE — required for Hayazashi Nidan Morita Shougi" + size: 49152 + source_ref: "ananke/heuristics/super-famicom.hpp:460" + - name: st011.data.rom system: nintendo-snes required: false + size: 4096 + source_ref: "ananke/heuristics/super-famicom.hpp:461" + + # --- ARM DSP (ST018) --- + - name: st018.program.rom system: nintendo-snes required: false + size: 131072 + source_ref: "ananke/heuristics/super-famicom.hpp:475" + - name: st018.data.rom system: nintendo-snes required: false + size: 32768 + source_ref: "ananke/heuristics/super-famicom.hpp:476" + + # --- Super Game Boy --- + - name: sgb.boot.rom system: nintendo-sgb required: false size: 256 - note: "SGB boot ROM. NOT embedded in v094." source_ref: "ananke/heuristics/super-famicom.hpp:133" diff --git a/emulators/cannonball.yml b/emulators/cannonball.yml index afea2780..c7208158 100644 --- a/emulators/cannonball.yml +++ b/emulators/cannonball.yml @@ -1,10 +1,13 @@ emulator: Cannonball -type: standalone + libretro +type: game +core_classification: game_engine source: "https://github.com/libretro/cannonball" upstream: "https://github.com/djyt/cannonball" -profiled_date: "2026-03-18" +profiled_date: "2026-03-23" core_version: "1.0" display_name: "Cannonball" +cores: + - cannonball systems: - sega-outrun @@ -26,8 +29,8 @@ notes: | demand when the "Japanese Tracks" core option is enabled. Two optional widescreen tilemap patches are loaded from a res/ subdirectory - (src/main/engine/omusic.cpp:42-51). These are Cannonball-specific data files - shipped with the core, not original arcade ROMs. + (src/main/engine/omusic.cpp:42-51). These are Cannonball-specific data files, + not original arcade ROMs. The fixed PCM sample variant (opr-10188.71f) replaces opr-10188.71 when the "Fix Broken Samples" core option is enabled. @@ -38,33 +41,42 @@ files: # ------------------------------------------------------- - name: "epr-10381a.132" system: sega-outrun + category: game_data required: true - size: 65536 # 0x10000 + size: 65536 crc32: "be8c412b" - note: "Master 68K, high byte, upper bank (Rev A alternate)" + validation: [crc32] + aliases: [epr-10381b.132] + note: "Master 68K, high byte, upper bank" source_ref: "src/main/roms.cpp:29" - name: "epr-10383b.117" system: sega-outrun + category: game_data required: true size: 65536 crc32: "10a2014a" + validation: [crc32] note: "Master 68K, low byte, upper bank" source_ref: "src/main/roms.cpp:38" - name: "epr-10380b.133" system: sega-outrun + category: game_data required: true size: 65536 crc32: "1f6cadad" + validation: [crc32] note: "Master 68K, high byte, lower bank" source_ref: "src/main/roms.cpp:39" - name: "epr-10382b.118" system: sega-outrun + category: game_data required: true size: 65536 crc32: "c4c3fa1a" + validation: [crc32] note: "Master 68K, low byte, lower bank" source_ref: "src/main/roms.cpp:40" @@ -73,33 +85,41 @@ files: # ------------------------------------------------------- - name: "epr-10327a.76" system: sega-outrun + category: game_data required: true size: 65536 crc32: "e28a5baf" + validation: [crc32] note: "Slave 68K, high byte, lower bank" source_ref: "src/main/roms.cpp:44" - name: "epr-10329a.58" system: sega-outrun + category: game_data required: true size: 65536 crc32: "da131c81" + validation: [crc32] note: "Slave 68K, low byte, lower bank" source_ref: "src/main/roms.cpp:45" - name: "epr-10328a.75" system: sega-outrun + category: game_data required: true size: 65536 crc32: "d5ec5e5d" + validation: [crc32] note: "Slave 68K, high byte, upper bank" source_ref: "src/main/roms.cpp:46" - name: "epr-10330a.57" system: sega-outrun + category: game_data required: true size: 65536 crc32: "ba9ec82a" + validation: [crc32] note: "Slave 68K, low byte, upper bank" source_ref: "src/main/roms.cpp:47" @@ -108,49 +128,61 @@ files: # ------------------------------------------------------- - name: "opr-10268.99" system: sega-outrun + category: game_data required: true - size: 32768 # 0x8000 + size: 32768 crc32: "95344b04" + validation: [crc32] note: "Tile ROM bank 0" source_ref: "src/main/roms.cpp:51" - name: "opr-10232.102" system: sega-outrun + category: game_data required: true size: 32768 crc32: "776ba1eb" + validation: [crc32] note: "Tile ROM bank 1" source_ref: "src/main/roms.cpp:52" - name: "opr-10267.100" system: sega-outrun + category: game_data required: true size: 32768 crc32: "a85bb823" + validation: [crc32] note: "Tile ROM bank 2" source_ref: "src/main/roms.cpp:53" - name: "opr-10231.103" system: sega-outrun + category: game_data required: true size: 32768 crc32: "8908bcbf" + validation: [crc32] note: "Tile ROM bank 3" source_ref: "src/main/roms.cpp:54" - name: "opr-10266.101" system: sega-outrun + category: game_data required: true size: 32768 crc32: "9f6f1a74" + validation: [crc32] note: "Tile ROM bank 4" source_ref: "src/main/roms.cpp:55" - name: "opr-10230.104" system: sega-outrun + category: game_data required: true size: 32768 crc32: "686f5e50" + validation: [crc32] note: "Tile ROM bank 5" source_ref: "src/main/roms.cpp:56" @@ -159,17 +191,21 @@ files: # ------------------------------------------------------- - name: "opr-10185.11" system: sega-outrun + category: game_data required: true size: 32768 crc32: "22794426" + validation: [crc32] note: "Road ROM, layer 1" source_ref: "src/main/roms.cpp:60" - name: "opr-10186.47" system: sega-outrun + category: game_data required: true size: 32768 crc32: "22794426" + validation: [crc32] note: "Road ROM, layer 2 (identical to opr-10185.11)" source_ref: "src/main/roms.cpp:61" @@ -178,65 +214,81 @@ files: # ------------------------------------------------------- - name: "mpr-10371.9" system: sega-outrun + category: game_data required: true - size: 131072 # 0x20000 + size: 131072 crc32: "7cc86208" + validation: [crc32] note: "Sprite ROM, bank 0 byte 0" source_ref: "src/main/roms.cpp:65" - name: "mpr-10373.10" system: sega-outrun + category: game_data required: true size: 131072 crc32: "b0d26ac9" + validation: [crc32] note: "Sprite ROM, bank 0 byte 1" source_ref: "src/main/roms.cpp:66" - name: "mpr-10375.11" system: sega-outrun + category: game_data required: true size: 131072 crc32: "59b60bd7" + validation: [crc32] note: "Sprite ROM, bank 0 byte 2" source_ref: "src/main/roms.cpp:67" - name: "mpr-10377.12" system: sega-outrun + category: game_data required: true size: 131072 crc32: "17a1b04a" + validation: [crc32] note: "Sprite ROM, bank 0 byte 3" source_ref: "src/main/roms.cpp:68" - name: "mpr-10372.13" system: sega-outrun + category: game_data required: true size: 131072 crc32: "b557078c" + validation: [crc32] note: "Sprite ROM, bank 1 byte 0" source_ref: "src/main/roms.cpp:69" - name: "mpr-10374.14" system: sega-outrun + category: game_data required: true size: 131072 crc32: "8051e517" + validation: [crc32] note: "Sprite ROM, bank 1 byte 1" source_ref: "src/main/roms.cpp:70" - name: "mpr-10376.15" system: sega-outrun + category: game_data required: true size: 131072 crc32: "f3b8f318" + validation: [crc32] note: "Sprite ROM, bank 1 byte 2" source_ref: "src/main/roms.cpp:71" - name: "mpr-10378.16" system: sega-outrun + category: game_data required: true size: 131072 crc32: "a1062984" + validation: [crc32] note: "Sprite ROM, bank 1 byte 3" source_ref: "src/main/roms.cpp:72" @@ -245,9 +297,11 @@ files: # ------------------------------------------------------- - name: "epr-10187.88" system: sega-outrun + category: game_data required: true - size: 65536 # 0x10000 + size: 32768 crc32: "a10abaa9" + validation: [crc32] note: "Z80 sound program" source_ref: "src/main/roms.cpp:76" @@ -256,134 +310,173 @@ files: # ------------------------------------------------------- - name: "opr-10193.66" system: sega-outrun + category: game_data required: true size: 32768 crc32: "bcd10dde" + validation: [crc32] note: "PCM sample bank 0" source_ref: "src/main/roms.cpp:80" - name: "opr-10192.67" system: sega-outrun + category: game_data required: true size: 32768 crc32: "770f1270" + validation: [crc32] note: "PCM sample bank 1" source_ref: "src/main/roms.cpp:81" - name: "opr-10191.68" system: sega-outrun + category: game_data required: true size: 32768 crc32: "20a284ab" + validation: [crc32] note: "PCM sample bank 2" source_ref: "src/main/roms.cpp:82" - name: "opr-10190.69" system: sega-outrun + category: game_data required: true size: 32768 crc32: "7cab70e2" + validation: [crc32] note: "PCM sample bank 3" source_ref: "src/main/roms.cpp:83" - name: "opr-10189.70" system: sega-outrun + category: game_data required: true size: 32768 crc32: "01366b54" + validation: [crc32] note: "PCM sample bank 4" source_ref: "src/main/roms.cpp:84" - name: "opr-10188.71" system: sega-outrun + category: game_data required: true size: 32768 crc32: "bad30ad9" + validation: [crc32] note: "PCM sample bank 5" source_ref: "src/main/roms.cpp:85" # ------------------------------------------------------- - # Alternate / optional ROMs + # Optional: fixed PCM sample # ------------------------------------------------------- - - name: "epr-10381b.132" - system: sega-outrun - required: false - size: 65536 - crc32: "be8c412b" - note: "Master 68K, Rev B alternate filename for epr-10381a.132" - source_ref: "src/main/roms.cpp:34" - - name: "opr-10188.71f" system: sega-outrun + category: game_data required: false size: 32768 crc32: "37598616" + validation: [crc32] note: "PCM sample bank 5, fixed version (replaces opr-10188.71)" source_ref: "src/main/roms.cpp:123" + # ------------------------------------------------------- + # Optional: widescreen tilemap patches + # ------------------------------------------------------- + - name: "res/tilemap.bin" + system: sega-outrun + category: game_data + required: false + note: "Widescreen tilemap patch, Cannonball-specific" + source_ref: "src/main/engine/omusic.cpp:42-44" + + - name: "res/tilepatch.bin" + system: sega-outrun + category: game_data + required: false + note: "Widescreen tile patch, Cannonball-specific" + source_ref: "src/main/engine/omusic.cpp:49-51" + # ------------------------------------------------------- # Japanese ROM variants (loaded when jap option enabled) # ------------------------------------------------------- - name: "epr-10380.133" system: sega-outrun + category: game_data required: false size: 65536 crc32: "e339e87a" + validation: [crc32] note: "Master 68K Japan, high byte, lower bank" source_ref: "src/main/roms.cpp:104" - name: "epr-10382.118" system: sega-outrun + category: game_data required: false size: 65536 crc32: "65248dd5" + validation: [crc32] note: "Master 68K Japan, low byte, lower bank" source_ref: "src/main/roms.cpp:105" - name: "epr-10381.132" system: sega-outrun + category: game_data required: false size: 65536 crc32: "be8c412b" + validation: [crc32] note: "Master 68K Japan, high byte, upper bank" source_ref: "src/main/roms.cpp:106" - name: "epr-10383.117" system: sega-outrun + category: game_data required: false size: 65536 crc32: "dcc586e7" + validation: [crc32] note: "Master 68K Japan, low byte, upper bank" source_ref: "src/main/roms.cpp:107" - name: "epr-10327.76" system: sega-outrun + category: game_data required: false size: 65536 crc32: "da99d855" + validation: [crc32] note: "Slave 68K Japan, high byte, lower bank" source_ref: "src/main/roms.cpp:110" - name: "epr-10329.58" system: sega-outrun + category: game_data required: false size: 65536 crc32: "fe0fa5e2" + validation: [crc32] note: "Slave 68K Japan, low byte, lower bank" source_ref: "src/main/roms.cpp:111" - name: "epr-10328.75" system: sega-outrun + category: game_data required: false size: 65536 crc32: "3c0e9a7f" + validation: [crc32] note: "Slave 68K Japan, high byte, upper bank" source_ref: "src/main/roms.cpp:112" - name: "epr-10330.57" system: sega-outrun + category: game_data required: false size: 65536 crc32: "59786e99" + validation: [crc32] note: "Slave 68K Japan, low byte, upper bank" source_ref: "src/main/roms.cpp:113" diff --git a/emulators/cap32.yml b/emulators/cap32.yml index 1a097655..f800f15c 100644 --- a/emulators/cap32.yml +++ b/emulators/cap32.yml @@ -1,8 +1,9 @@ emulator: Caprice32 type: standalone + libretro +core_classification: community_fork source: "https://github.com/libretro/libretro-cap32" upstream: "https://github.com/ColinPitrat/caprice32" -profiled_date: "2026-03-18" +profiled_date: "2026-03-23" core_version: "v4.2.0" display_name: "Amstrad - CPC/GX4000 (Caprice32)" cores: @@ -78,14 +79,16 @@ files: system: amstrad-cpc required: false mode: standalone + size: 131156 note: "CPC+ system cartridge" source_ref: "caprice32/rom/system.cpr" - name: MF2.rom system: amstrad-cpc required: false mode: standalone + size: 8192 note: "Multiface 2 ROM" - source_ref: "caprice32/rom/MF2.rom" + source_ref: "caprice32/rom/MF2.rom, caprice32/src/cap32.cpp:1244-1263" platform_details: bios_mapping: diff --git a/emulators/cdi2015.yml b/emulators/cdi2015.yml index 7e1fcca5..34b6bbad 100644 --- a/emulators/cdi2015.yml +++ b/emulators/cdi2015.yml @@ -1,8 +1,9 @@ emulator: CDi 2015 type: libretro +core_classification: frozen_snapshot source: "https://github.com/libretro/mame2015-libretro" -upstream: "https://github.com/mamedev/mame" -profiled_date: "2026-03-18" +upstream: "https://github.com/mamedev/mame/tree/mame0160" +profiled_date: "2026-03-23" core_version: "0.160" display_name: "Philips CDi (CDi 2015)" cores: [cdi2015] @@ -10,26 +11,23 @@ systems: - philips-cdi notes: | - MAME 0.160 compiled with SUBTARGET=cdi (CDi driver only). - ref: libretro-super/rules.d/core-rules.sh — SUBTARGET=cdi - source: libretro/mame2015-libretro - - Loads cdimono1.zip from system_dir. - ref: src/osd/retro/retromain.c:1989 — - sprintf(tmp_dir, "%s%ccdimono1.zip", retro_system_directory, slash) - If not found as ZIP, falls back to system_dir as rompath. - ref: src/osd/retro/retromain.c:1991 - - ROM_START(cdimono1) in src/mame/drivers/cdi.c:421 defines: - cdi200.rom (0x80000, CRC 279683ca, SHA1 53360a1f21ddac952e95306ced64186a3fc0b93e) - cdic.bin (MCU, undumped) - slave.bin (MCU, undumped) - - The ZIP contains the MAME romset for cdimono1 — user provides it. + MAME 0.160 compiled with SUBTARGET=cdi, only cdimono1 driver. + Checks cdimono1.zip existence in system_dir, then game dir. Returns -2 if missing. + cdic.bin and slave.bin are undumped 68HC05 MCUs (NO_DUMP), not in the ZIP. files: - name: cdimono1.zip system: philips-cdi required: true - note: "MAME cdimono1 romset ZIP. Contains cdi200.rom + MCU dumps." + category: bios_zip source_ref: "src/osd/retro/retromain.c:1989, src/mame/drivers/cdi.c:421" + validation: [crc32, sha1] + contents: + - name: cdi200.rom + description: Magnavox CD-i 200 BIOS (default) + size: 524288 + crc32: 40c4e6b9 + - name: cdi220b.rom + description: Philips CD-i 220 F2 BIOS (alternate) + size: 524288 + crc32: 279683ca diff --git a/emulators/chailove.yml b/emulators/chailove.yml index f1d834c1..48071d2f 100644 --- a/emulators/chailove.yml +++ b/emulators/chailove.yml @@ -1,14 +1,16 @@ emulator: ChaiLove type: game +core_classification: game_engine source: "https://github.com/libretro/libretro-chailove" -profiled_date: "2026-03-18" +upstream: "https://github.com/libretro/libretro-chailove" +profiled_date: "2026-03-23" core_version: "2.0.0" display_name: "ChaiLove" cores: [chailove] systems: [] files: [] notes: > - 2D game framework for libretro inspired by LOVE2D, using ChaiScript. - Loads .chai or .chailove game files as content. The core itself is a - game engine runtime with no system directory dependencies. - No BIOS, firmware, or system directory files required. + 2D game framework for libretro using ChaiScript, inspired by LOVE2D. + Game engine runtime that loads .chai/.chailove game files as content. + Mounts system_dir at /libretro/system via PhysFS for game scripts, + but the core itself requires no external files. diff --git a/emulators/chimerasnes.yml b/emulators/chimerasnes.yml index 09d395dc..8009e3ce 100644 --- a/emulators/chimerasnes.yml +++ b/emulators/chimerasnes.yml @@ -1,29 +1,47 @@ emulator: ChimeraSNES type: libretro +core_classification: community_fork source: "https://github.com/jamsilva/chimerasnes" upstream: "https://github.com/snes9xgit/snes9x" -profiled_date: "2026-03-18" +profiled_date: "2026-03-23" core_version: "" display_name: "Nintendo - SNES / SFC (ChimeraSNES)" cores: [chimerasnes] systems: - nintendo-snes + - nintendo-satellaview + - nintendo-sufami-turbo notes: | - Fork of Snes9x ~2005, optimized for slow hardware. - NOT identical to snes9x — different firmware behavior. + Based on multiple snes9x forks (uosnes, snes9x2005), optimized for slow hardware. + All coprocessor data (DSP1-4, CX4, SuperFX, SA-1, SPC7110, OBC1) is HLE with + embedded ROM tables. No external coprocessor firmware needed. + BS-X BIOS loading controlled by core option chimerasnes_bsx_bios (default: skip). + retro_load_game_special() returns false (no subsystem support). + .info firmware_count absent (= 0), under-declares: code loads 2 files. - All coprocessor data is HLE with static ROM tables embedded: - DSP1: DSP1ROM[1024] in source/dsp1.c:6 - DSP3: DSP3_DataROM[1024] in source/dsp3.c:7 - No external DSP/ST/CX4 firmware files needed. +files: + - name: "BS-X.bin" + system: nintendo-satellaview + description: "Satellaview BS-X BIOS" + required: false + size: 1048576 + source_ref: "source/bsx.c:857-882" + aliases: ["BS-X.bios"] + validation: [size] + notes: | + Loaded by BSX_LoadBIOS() from system_dir when core option + chimerasnes_bsx_bios is set to 'load' (default: skip). + Tries BS-X.bin first, then BS-X.bios as fallback. + Size must be BIOS_SIZE (0x100000). Many BS-X games run without it. - BS-X: path constructed in source/bsx.c:873 as romdir/BS-X.bios - (relative to ROM directory, NOT system_dir). No - RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY for firmware loading. - - firmware_count absent in .info (= 0). Confirmed in source. - -files: [] -# all coprocessors HLE with embedded data -# BS-X.bios loaded from ROM directory, not system_dir + - name: "STBIOS.bin" + system: nintendo-sufami-turbo + description: "Sufami Turbo BIOS" + required: true + size: 262144 + source_ref: "source/memmap.c:275-289" + notes: | + Loaded by LoadSFTBIOS() from system_dir when Sufami Turbo game + detected (BANDAI SFC-ADX header at ROM offset 0, memmap.c:833). + Reads 0x40000 bytes into Memory.ROM. No validation performed. diff --git a/emulators/citra2018.yml b/emulators/citra2018.yml index f19e6431..721814f3 100644 --- a/emulators/citra2018.yml +++ b/emulators/citra2018.yml @@ -1,8 +1,9 @@ emulator: Citra 2018 type: libretro +core_classification: frozen_snapshot source: "https://github.com/libretro/citra2018" upstream: "https://github.com/citra-emu/citra" -profiled_date: "2026-03-18" +profiled_date: "2026-03-23" core_version: "Git" display_name: "Nintendo - 3DS (Citra 2018)" cores: [citra2018] @@ -10,35 +11,25 @@ systems: - nintendo-3ds notes: | - Citra 2018 is a 2018 snapshot of the Citra 3DS emulator. - Older than current Azahar/Citra — fewer firmware files. - Data dir: citra-emu (not azahar-emu). - ref: src/common/common_paths.h:24 + Frozen 2018 snapshot of the Citra 3DS emulator. + Loads files from {system_dir}/Citra/sysdata/. + ref: src/citra_libretro/citra_libretro.cpp:317, src/common/common_paths.h:24 - Uses RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. - ref: src/citra_libretro/environment.cpp:107 + Embedded open-source replacement font in archive_ncch.cpp. + ref: src/core/file_sys/archive_ncch.cpp:134-146 - Loads from sysdata/: - aes_keys.txt (not keys.txt like current Citra) - shared_font.bin - ref: src/core/hw/aes/key.cpp:72-73, src/core/hle/service/apt/apt.cpp:174 - - Does NOT load (added in later versions): - boot9.bin, sector0x96.bin, seeddb.bin, otp.bin, - movable.sed, SecureInfo_A, LocalFriendCodeSeed_B - - firmware_count absent in .info (= 0). Files are optional (HLE). + firmware_count absent in .info (= 0). Both files are optional. files: - name: aes_keys.txt system: nintendo-3ds required: false - note: "AES encryption keys (named aes_keys.txt, not keys.txt like current Citra)" - source_ref: "src/core/hw/aes/key.cpp:72-73" + note: "AES encryption keys for decrypting 3DS content" + source_ref: "src/core/hw/aes/key.cpp:72-76" - name: shared_font.bin system: nintendo-3ds required: false hle_fallback: true - note: "system shared font, HLE fallback if missing" - source_ref: "src/core/hle/service/apt/apt.cpp:174" + note: "system shared font, falls back to embedded open-source replacement" + source_ref: "src/core/hle/service/apt/apt.cpp:168-183" diff --git a/emulators/citra_canary.yml b/emulators/citra_canary.yml index 9ed49d7b..9860c373 100644 --- a/emulators/citra_canary.yml +++ b/emulators/citra_canary.yml @@ -1,8 +1,9 @@ emulator: Citra Canary type: libretro +core_classification: community_fork source: "https://github.com/libretro/citra" upstream: "https://github.com/citra-emu/citra" -profiled_date: "2026-03-18" +profiled_date: "2026-03-23" core_version: "Git" display_name: "Nintendo - 3DS (Citra Canary/Experimental)" cores: [citra_canary] @@ -10,54 +11,30 @@ systems: - nintendo-3ds notes: | - Same repo as citra (libretro/citra master branch). Canary = experimental. - Data dir: citra-emu (not azahar-emu — this is pre-Azahar Citra). - ref: src/common/common_paths.h + Canary branch of libretro/citra. Older codebase than master branch (citra core). + Missing boot9.bin, sector0x96.bin, seeddb.bin support present in master. + Seed crypto unimplemented (src/core/file_sys/ncch_container.cpp:169). + Upstream citra-emu/citra taken down March 2024 (Nintendo lawsuit). + Mirror: https://github.com/citra-mirror/citra - Key file: aes_keys.txt (NOT keys.txt like Azahar). - ref: src/common/common_paths.h:68 + Data dir: {system_dir}/Citra/sysdata/ + ref: src/citra_libretro/citra_libretro.cpp:305-314 - Uses RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. - ref: src/citra_libretro/environment.cpp:149 + Embedded open-source replacements for shared font, country list, bad word list. + ref: src/core/file_sys/archive_ncch.cpp:142-147 - Files in sysdata/: - aes_keys.txt — AES encryption keys (common_paths.h:68) - boot9.bin — ARM9 bootrom (common_paths.h:69) - sector0x96.bin — secret NAND sector (common_paths.h:70) - shared_font.bin — system shared font, HLE fallback (common_paths.h:67) - seeddb.bin — game seed database (file_sys/seed_db.cpp:15) - - NOTE: citra.yml profiles Azahar which uses keys.txt (not aes_keys.txt). - This core uses the pre-Azahar naming convention. + firmware_count absent in .info (= 0). files: - name: aes_keys.txt system: nintendo-3ds required: false - note: "AES keys (named aes_keys.txt in pre-Azahar Citra)" - source_ref: "src/common/common_paths.h:68, src/core/hw/aes/key.cpp" - - - name: boot9.bin - system: nintendo-3ds - required: false - note: "ARM9 bootrom for key derivation" - source_ref: "src/common/common_paths.h:69" - - - name: sector0x96.bin - system: nintendo-3ds - required: false - note: "OTP-encrypted NAND sector for key derivation" - source_ref: "src/common/common_paths.h:70" + note: "AES encryption keys for decrypting 3DS content" + source_ref: "src/core/hw/aes/key.cpp:71-131" - name: shared_font.bin system: nintendo-3ds required: false hle_fallback: true - note: "system shared font, HLE fallback if missing" - source_ref: "src/common/common_paths.h:67" - - - name: seeddb.bin - system: nintendo-3ds - required: false - note: "game seed database for seed-encrypted games (9.6+ titles)" - source_ref: "src/core/file_sys/seed_db.cpp:15" + note: "system shared font, falls back to embedded open-source replacement" + source_ref: "src/core/hle/service/apt/apt.cpp:168-200" diff --git a/emulators/doublecherrygb.yml b/emulators/doublecherrygb.yml index d5fddbca..4982c81e 100644 --- a/emulators/doublecherrygb.yml +++ b/emulators/doublecherrygb.yml @@ -1,8 +1,10 @@ emulator: DoubleCherryGB type: libretro +core_classification: enhanced_fork source: "https://github.com/TimOelrichs/doublecherryGB-libretro" -profiled_date: "2026-03-18" -core_version: "v0.17.0" +upstream: "https://github.com/libertyernie/tgbdual" +profiled_date: "2026-03-22" +core_version: "v0.18.1" display_name: "Nintendo - Game Boy / Color (DoubleCherryGB)" cores: - DoubleCherryGB @@ -11,23 +13,13 @@ systems: - nintendo-gbc notes: | - DoubleCherryGB is a Game Boy / Game Boy Color emulator forked from TGB Dual - by GIGO and Hii. It adds multi-Game Boy emulation with virtual link cable - support for up to 16 players, DMG-07 4-Player Adapter emulation, and - built-in Pokemon distribution events. + Game Boy / Game Boy Color emulator forked from TGB Dual (Hii, 2000-2004) + via the libretro port tgbdual. Adds multi-Game Boy emulation with link + cable support for up to 16 players, DMG-07 4-Player Adapter emulation, + infrared peripherals, and built-in Pokemon distribution events. - No BIOS or boot ROM files are required or supported. The core does not - call RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY for firmware loading and does - not attempt to open any files from the system directory. - - In cpu.cpp:82, the program counter is initialized to 0x100 (post-boot ROM - entry point), and cpu::reset() sets all registers to their post-boot - values directly (AF=0x01B0 for DMG, 0x11B0 for CGB). This means the - core completely bypasses the boot ROM sequence via HLE register setup. - - The .info file at libretro-core-info confirms no firmware entries. - - Supported extensions: gb, dmg, gbc, cgb, sgb. - Library version: v0.18.0. + No boot ROM support. cpu::reset() sets PC=0x100 and post-boot register + values directly (AF=0x01B0 DMG, 0x11B0 CGB). The core does not access + the system directory and loads no external firmware files. files: [] diff --git a/emulators/fbneo_cps12.yml b/emulators/fbneo_cps12.yml index 04375a76..70a11932 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-21" +profiled_date: "2026-03-22" core_version: "v1.0.0.03" display_name: "Arcade (FinalBurn Neo) (CPS-1 / CPS-2)" cores: @@ -25,8 +25,7 @@ notes: | Board PLDs (buf1, ioa1, prg1/prg2, rom1, sou1) are BRF_OPT — GAL/PAL dumps for hardware preservation, never loaded by the emulator. - CPS-1/CPS-2 have no system BIOS. hiscore.dat enables persistent high - scores across all arcade games. + hiscore.dat enables persistent high scores across all arcade games. ROM path: game ZIPs loaded from content directory. system/fbneo/ used for hiscore.dat, samples, cheats, blend files, IPS patches. diff --git a/emulators/freeintv_ts_overlay.yml b/emulators/freeintv_ts_overlay.yml index d2be9b1c..2fb47a75 100644 --- a/emulators/freeintv_ts_overlay.yml +++ b/emulators/freeintv_ts_overlay.yml @@ -1,39 +1,28 @@ emulator: "FreeIntv (Touchscreen Overlay)" -type: libretro -source: "https://github.com/libretro/FreeIntv" -profiled_date: "2026-03-18" -core_version: "v2025.11.1" -display_name: "Mattel Intellivision (FreeIntvTSOverlay)" +type: alias +core_classification: alias +source: "https://github.com/jcarr71/FreeIntvTSOverlay" +upstream: "https://github.com/libretro/FreeIntv" +profiled_date: "2026-03-22" +core_version: "1.2" +display_name: "Mattel - Intellivision (FreeIntvTSOverlay)" cores: - freeintv systems: - intellivision notes: | - Same repo and core as FreeIntv. The touchscreen overlay feature is a - compile-time option within the same codebase, not a separate core. The - library_name is "freeintv" (src/libretro.c:1413), identical to the - non-overlay build. + Alias of FreeIntv. The jcarr71/FreeIntvTSOverlay fork is 100% identical + to libretro/FreeIntv (zero diff). Jason Carr's overlay work was merged + upstream. The Makefile produces freeintv_libretro (TARGET_NAME = freeintv), + and library_name is "freeintv" (src/libretro.c:1413). - The overlay system adds an onscreen interactive keypad for touchscreen - and mouse input. It is toggled via core option freeintv_multiscreen_overlay - (src/libretro_core_options.h:82-85). When enabled, the display splits into - game + keypad side-by-side (multi-screen mode). - - Visual assets (controller base frame, banner, default keypad image) are - compiled into the binary from C headers: banner.h, keypad_frame_graphic.h, - default_keypad_image.h. These are NOT files the user needs to provide. - - ROM-specific overlays are optional 370x600 PNG files placed by the user in - system/freeintv_overlays/.png. These are cosmetic per-game keypad - images loaded via stbi_load() (src/libretro.c:273). Core falls back to - embedded default_keypad_image.h if no per-game overlay found. - 90 overlays available in Assets/Overlays.zip in the core repo. - Not on RetroArch buildbot — sourced from core repo via _data_dirs.yml. - - BIOS loading is unchanged from the base FreeIntv core. retro_load_game() - (src/libretro.c:1169-1174) loads exec.bin and grom.bin from the system - directory with no variation based on overlay mode. + The FreeIntvTSOverlay_libretro.info in libretro-core-info has errors: + wrong overlay directory (claims FreeIntvTS_Overlays, code uses + freeintv_overlays), wrong dimensions (claims 300x670, code uses 370x600), + phantom external PNG files (controller_base.png, default.png, + button_swapscreen.png are either embedded in C headers or nonexistent), + and firmware1 key typos (uses firmware0_path/firmware0_opt). bios_identical_to: freeintv @@ -47,7 +36,7 @@ files: required: true size: 8192 md5: 62e761035cb657903761800f4437b8af - note: "Executive ROM. Same file as base FreeIntv." + note: "Executive ROM." source_ref: "src/intv.c:47-71, src/libretro.c:1169" - name: "grom.bin" @@ -55,5 +44,5 @@ files: required: true size: 2048 md5: 0cd5946c6473e42e8e4c2137785e427f - note: "Graphics ROM. Same file as base FreeIntv." + note: "Graphics ROM." source_ref: "src/intv.c:73-98, src/libretro.c:1173"