From daae431dd3d6f0f390236ef11ef22e14331c1d07 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Mon, 9 Nov 2026 07:38:43 +0100 Subject: [PATCH] feat: document the jgenesis libretro build --- emulators/jgenesis.yml | 95 ++++++++++++++++++++++++++++++++---------- 1 file changed, 74 insertions(+), 21 deletions(-) diff --git a/emulators/jgenesis.yml b/emulators/jgenesis.yml index 20fe6fdad..89e6fe29a 100644 --- a/emulators/jgenesis.yml +++ b/emulators/jgenesis.yml @@ -1,15 +1,26 @@ emulator: jgenesis -type: standalone +type: standalone + libretro core_classification: other -source: "https://github.com/jsgroth/jgenesis" +source: + standalone: "https://github.com/jsgroth/jgenesis" + libretro: "https://github.com/RobLoach/libretro-jgenesis" upstream: "https://github.com/jsgroth/jgenesis" -profiled_date: "2026-08-08" -source_commit: "0a00c47ba7a16bd6e77ef7e0b6c8fab2fc603cba" -core_version: "0.14.1" +profiled_date: "2026-11-09" +source_commit: + standalone: "0a00c47ba7a16bd6e77ef7e0b6c8fab2fc603cba" + libretro: "c92ff9269594b44e2f9ecfca5ff943e5bea49fb7" +core_version: + standalone: "0.14.1" + libretro: "0.14.1" version_basis: - kind: file - path: "Cargo.toml" - pattern: 'version\s+=\s+"([^"]+)' + standalone: + kind: file + path: "Cargo.toml" + pattern: 'version\s+=\s+"([^"]+)' + libretro: + kind: file + path: "Cargo.toml" + pattern: 'version\s+=\s+"([^"]+)' display_name: "Multi-System (jgenesis)" cores: - jgenesis @@ -27,7 +38,6 @@ systems: - nintendo-gba - nec-pc-engine - nec-pc-engine-cd -mode: standalone notes: | Multi-system emulator written in Rust by James Groth. One binary covers @@ -81,6 +91,20 @@ notes: | tested for existence only, to keep the settings beside the executable (frontend/jgenesis-native-config/src/paths.rs:57-64). + The libretro build is a separate frontend, libretro-jgenesis, that + builds the jgenesis backend crates at the same revision 0a00c47, the + rev its Cargo.toml pins for each of them. It opens fixed names in the + system directory, or beside the content when the frontend gives none: + bios_CD_U.bin, bios_CD_E.bin or bios_CD_J.bin by region, gba_bios.bin, + syscard3.pce and the seven SNES coprocessor ROMs. The Sega CD region is + the core option, else the disc header, else Americas. A missing BIOS + fails the load, except for a Mode 1 cartridge loaded alone, which + runs without the Sega CD. It never passes a Master System, Game Gear or Game Boy boot + ROM to the backend, and reads no palette file. + ref: src/load.rs:30-34, src/load.rs:48-56, src/load.rs:140-144, + src/load.rs:329-336, src/load.rs:386-400, src/load.rs:413, + src/load.rs:445 + files: # ------------------------------------------------------- # Sega CD @@ -92,7 +116,9 @@ files: required: true size: 131072 validation: [size] - source_ref: "frontend/jgenesis-native-driver/src/mainloop/genesis.rs:43-53 (read), frontend/jgenesis-native-driver/src/mainloop/genesis.rs:234-240 (bios_path_for_region), backend/segacd-core/src/api.rs:77-79 (BIOS_LEN check)" + source_ref: + standalone: "frontend/jgenesis-native-driver/src/mainloop/genesis.rs:43-53 (read), frontend/jgenesis-native-driver/src/mainloop/genesis.rs:234-240 (bios_path_for_region), backend/segacd-core/src/api.rs:77-79 (BIOS_LEN check)" + libretro: "src/load.rs:30, src/load.rs:48-56, src/load.rs:329-349" note: "Selected when the disc region is Americas, and for every region when per_region_bios is off." - name: "bios_CD_E.bin" @@ -102,7 +128,9 @@ files: required: true size: 131072 validation: [size] - source_ref: "frontend/jgenesis-native-driver/src/mainloop/genesis.rs:234-240 (eu_bios_path), backend/segacd-core/src/api.rs:77-79" + source_ref: + standalone: "frontend/jgenesis-native-driver/src/mainloop/genesis.rs:234-240 (eu_bios_path), backend/segacd-core/src/api.rs:77-79" + libretro: "src/load.rs:31, src/load.rs:48-56, src/load.rs:329-349" note: "Selected when the header area at 0x1F0 holds E and not U or J, as Australian discs do (backend/genesis-components/src/cartridge.rs:362-377, backend/segacd-core/src/api.rs:339-369)." - name: "bios_CD_J.bin" @@ -112,7 +140,9 @@ files: required: true size: 131072 validation: [size] - source_ref: "frontend/jgenesis-native-driver/src/mainloop/genesis.rs:234-240 (jp_bios_path), backend/segacd-core/src/api.rs:77-79" + source_ref: + standalone: "frontend/jgenesis-native-driver/src/mainloop/genesis.rs:234-240 (jp_bios_path), backend/segacd-core/src/api.rs:77-79" + libretro: "src/load.rs:32, src/load.rs:48-56, src/load.rs:329-349" # ------------------------------------------------------- # Game Boy Advance @@ -123,7 +153,9 @@ files: required: true size: 16384 validation: [size] - source_ref: "frontend/jgenesis-native-driver/src/mainloop/gba.rs:32-36 (GbaNoBios), backend/gba-core/src/memory.rs:10, 102-107 (BIOS_ROM_LEN check)" + source_ref: + standalone: "frontend/jgenesis-native-driver/src/mainloop/gba.rs:32-36 (GbaNoBios), backend/gba-core/src/memory.rs:10, 102-107 (BIOS_ROM_LEN check)" + libretro: "src/load.rs:33, src/load.rs:48-56, src/load.rs:450" note: "Every GBA load fails without it. skip_bios_animation only skips the intro, the BIOS is still mapped and read for SWI calls." # ------------------------------------------------------- @@ -135,7 +167,9 @@ files: description: "NEC uPD77C25 firmware for DSP-1" required: true size: 8192 - source_ref: "backend/snes-core/src/memory/cartridge.rs:336-353 (MissingDsp1Rom), backend/snes-coprocessors/src/upd77c25.rs:28-31,35-38,382-390" + source_ref: + standalone: "backend/snes-core/src/memory/cartridge.rs:336-353 (MissingDsp1Rom), backend/snes-coprocessors/src/upd77c25.rs:28-31,35-38,382-390" + libretro: "src/load.rs:477-491" note: "0x1800 program plus 0x800 data. Also used by DSP-1B titles, which have no separate slot. Layout is sliced at a fixed offset, size is not checked." - name: "dsp2.rom" @@ -144,7 +178,9 @@ files: description: "NEC uPD77C25 firmware for DSP-2" required: true size: 8192 - source_ref: "backend/snes-core/src/memory/cartridge.rs:340-342 (MissingDsp2Rom), :929 (Dungeon Master CRC32 match), backend/snes-coprocessors/src/upd77c25.rs:382-390" + source_ref: + standalone: "backend/snes-core/src/memory/cartridge.rs:340-342 (MissingDsp2Rom), :929 (Dungeon Master CRC32 match), backend/snes-coprocessors/src/upd77c25.rs:382-390" + libretro: "src/load.rs:477-491" - name: "dsp3.rom" aliases: ["SNES_dsp3.rom"] @@ -152,7 +188,9 @@ files: description: "NEC uPD77C25 firmware for DSP-3" required: true size: 8192 - source_ref: "backend/snes-core/src/memory/cartridge.rs:343-345 (MissingDsp3Rom), :931 (SD Gundam GX CRC32 match), backend/snes-coprocessors/src/upd77c25.rs:382-390" + source_ref: + standalone: "backend/snes-core/src/memory/cartridge.rs:343-345 (MissingDsp3Rom), :931 (SD Gundam GX CRC32 match), backend/snes-coprocessors/src/upd77c25.rs:382-390" + libretro: "src/load.rs:477-491" - name: "dsp4.rom" aliases: ["SNES_dsp4.rom"] @@ -160,7 +198,9 @@ files: description: "NEC uPD77C25 firmware for DSP-4" required: true size: 8192 - source_ref: "backend/snes-core/src/memory/cartridge.rs:346-348 (MissingDsp4Rom), :933 (Top Gear 3000 CRC32 match), backend/snes-coprocessors/src/upd77c25.rs:382-390" + source_ref: + standalone: "backend/snes-core/src/memory/cartridge.rs:346-348 (MissingDsp4Rom), :933 (Top Gear 3000 CRC32 match), backend/snes-coprocessors/src/upd77c25.rs:382-390" + libretro: "src/load.rs:477-491" - name: "st010.rom" aliases: ["SNES_st010.rom"] @@ -168,7 +208,9 @@ files: description: "NEC uPD96050 firmware for ST010" required: true size: 53248 - source_ref: "backend/snes-core/src/memory/cartridge.rs:294-305 (MissingSt010Rom), :938-943 (variant detection), backend/snes-coprocessors/src/upd77c25.rs:28-31,35-38" + source_ref: + standalone: "backend/snes-core/src/memory/cartridge.rs:294-305 (MissingSt010Rom), :938-943 (variant detection), backend/snes-coprocessors/src/upd77c25.rs:28-31,35-38" + libretro: "src/load.rs:477-491" note: "0xC000 program plus 0x1000 data. Used by F1 ROC II." - name: "st011.rom" @@ -177,7 +219,9 @@ files: description: "NEC uPD96050 firmware for ST011" required: true size: 53248 - source_ref: "backend/snes-core/src/memory/cartridge.rs:298-300 (MissingSt011Rom), :938-943 (Hayazashi Nidan Morita Shougi CRC32 match)" + source_ref: + standalone: "backend/snes-core/src/memory/cartridge.rs:298-300 (MissingSt011Rom), :938-943 (Hayazashi Nidan Morita Shougi CRC32 match)" + libretro: "src/load.rs:477-491" - name: "st018.rom" aliases: ["SNES_st018.rom"] @@ -186,7 +230,9 @@ files: required: true min_size: 163840 validation: [size] - source_ref: "backend/snes-core/src/memory/cartridge.rs:310-320 (MissingSt018Rom), backend/snes-coprocessors/src/st018.rs:18-22,346-352 (TOTAL_ROM_LEN check)" + source_ref: + standalone: "backend/snes-core/src/memory/cartridge.rs:310-320 (MissingSt018Rom), backend/snes-coprocessors/src/st018.rs:18-22,346-352 (TOTAL_ROM_LEN check)" + libretro: "src/load.rs:477-491" note: "0x20000 program plus 0x8000 data. Used by Hayazashi Nidan Morita Shougi 2. Files larger than the expected length are accepted, shorter ones are rejected." # ------------------------------------------------------- @@ -196,13 +242,16 @@ files: system: nec-pc-engine-cd description: "Super CD-ROM² System Card 3.0" required: true - source_ref: "frontend/jgenesis-native-driver/src/mainloop/pce.rs:29-50 (PceCdNoBios), frontend/jgenesis-native-config/src/pce.rs:15, 44, backend/pce-core/src/cartridge.rs:84-101, config/pce-config/src/lib.rs:60-65" + source_ref: + standalone: "frontend/jgenesis-native-driver/src/mainloop/pce.rs:29-50 (PceCdNoBios), frontend/jgenesis-native-config/src/pce.rs:15, 44, backend/pce-core/src/cartridge.rs:84-101, config/pce-config/src/lib.rs:60-65" + libretro: "src/load.rs:34, src/load.rs:48-56, src/load.rs:317" note: "Every disc fails to load without it. One slot accepts any System Card dump, no size or content check, but the default Arcade Card and the Super System Card need a v3.0 ROM. A file over 512 KiB is mapped as a plain HuCard." # ------------------------------------------------------- # Master System / Game Gear # ------------------------------------------------------- - name: "bios.sms" + mode: standalone system: sega-mastersystem description: "Master System BIOS" required: false @@ -210,6 +259,7 @@ files: note: "Read only when sms_boot_from_bios is enabled or the emulator runs without a cartridge, both off by default. One slot accepts any regional dump, no size or content check." - name: "bios.gg" + mode: standalone system: sega-gamegear description: "Game Gear BIOS" required: false @@ -220,6 +270,7 @@ files: # Game Boy / Game Boy Color # ------------------------------------------------------- - name: "dmg_boot.bin" + mode: standalone system: nintendo-gb description: "Game Boy boot ROM" required: false @@ -229,6 +280,7 @@ files: note: "Loaded only when dmg_boot_rom is enabled, off by default. Without it the CPU starts post-boot." - name: "cgb_boot.bin" + mode: standalone system: nintendo-gbc description: "Game Boy Color boot ROM" required: false @@ -242,6 +294,7 @@ files: # NES # ------------------------------------------------------- - name: "nes.pal" + mode: standalone aliases: ["nespalette.pal"] system: nintendo-nes description: "External NES color palette"