feat: profile six libretro cores from source

anybor, anygm, sm2, tgpulse_next_m1, zcdi and zesarpcw had a core-info file and no profile. parallel_psp and parallel_xbox are left out: no source is published for them.
This commit is contained in:
Abdessamad Derraz committed 2026-11-09 07:36:36 +01:00
1 parent 47593c58d7
commit b690a03864
8 files changed
+389

No files matched your search

+39
View File
@@ -0,0 +1,39 @@
emulator: "AnyBOR"
type: libretro
core_classification: game_engine
source: "https://github.com/retrodiv/AnyBOR-libretro"
upstream: "https://github.com/DCurrent/openbor"
profiled_date: "2026-11-09"
source_commit: "6ffe33bc980046e9c8422a54a3554479501f6e50"
core_version: "0.1.83"
version_basis:
kind: file
path: "src/glue/obor_engines.h"
pattern: '#define OBOR_CORE_VERSION "([^"]+)"'
display_name: "OpenBOR (AnyBOR)"
cores:
- "anybor"
systems:
- openbor
notes: |
A libretro core for OpenBOR games with 233 build profiles, from 3020 to
8023, run on nine engines compiled from DCurrent/openbor revisions that
src/pin.json names. A profile is picked per game from build tags and
content clues, or set in a core option.
ref: src/pin.json:1-20, src/glue/obor_engines.h:6-7, src/glue/libretro.cpp:1278-1287
The content is a .pak or .spk archive, a .zip holding one game, or the
data/models.txt of an unpacked mod. A save directory is required, and the
core refuses to load without one.
ref: src/glue/libretro.cpp:2673-2685, src/glue/libretro.cpp:2700-2719,
src/glue/libretro.cpp:2724-2765
The only file read from the system directory is AnyBOR.ini, an optional
configuration written by the user that selects a transform for packed
content with a custom header. Absent, no transform runs. The engines are
built into the core and no BIOS or data file is read.
ref: src/glue/obor_transform.h:83-104, src/glue/obor_packed_prepare.h:22-37,
src/glue/libretro.cpp:2766-2776
files: []
+32
View File
@@ -0,0 +1,32 @@
emulator: "AnyGM"
type: libretro
core_classification: game_engine
source: "https://github.com/retrodiv/AnyGM-libretro"
profiled_date: "2026-11-09"
source_commit: "12c024740e2982db65e2dbe304dbb66744513572"
core_version: "0.1.667"
version_basis:
kind: file
path: "src/api/anygm.h"
pattern: '#define ANYGM_VERSION "([^"]+)"'
display_name: "GameMaker (AnyGM)"
cores:
- "anygm"
systems:
- gamemaker
notes: |
A runtime for GameMaker games written for libretro, with one engine for the
classic editor projects (Game Maker 5.3 to 8.1) and the Studio 1.x and 2.x
data containers. The content is the game itself, and no GameMaker runner
is read.
ref: src/adapters/libretro/libretro_entry.c:226-233
The only file read from the system directory is AnyGM.ini, an optional
configuration written by the user with content transforms and per-game
overrides. Absent, the defaults apply. When the frontend names no save
directory, the core writes its saves under <system>/AnyGM.
ref: src/adapters/libretro/libretro_entry.c:330-345, src/adapters/libretro/libretro_entry.c:418-421,
src/api/anygm.h:318-326, src/content/container/content_router.c:2027-2050
files: []
+81
View File
@@ -0,0 +1,81 @@
emulator: "SM2-Emu"
type: libretro
core_classification: community_fork
source: "https://github.com/Zer0one/sm2-emu-libretro"
upstream: "https://github.com/dmanlfc/sm2-emu"
profiled_date: "2026-11-09"
source_commit: "6b282b94e781e20b2b6d522d0dcef5974b7a5d84"
upstream_commit: "8bb80c157b294c1229bd8c1054d13f87daab52c0"
core_version: "0.9.56.1"
version_basis:
kind: file
path: "src/libretro/core.cpp"
pattern: '\{"SM2-Emu", "([^"]+)"'
display_name: "Sega - Model 2 (SM2-Emu Libretro)"
cores:
- "sm2"
systems:
- sega-model2
notes: |
A libretro port of dmanlfc's SM2-Emu, a Sega Model 2 emulator. The port
shares dmanlfc's history up to 8b3a468 (2026-09-09) and has taken later
upstream releases by hand, up to 0.9.56.
ref: src/libretro/core.cpp:956-959
The game list is games.xml, read from <system>/sm2-emu/. The core refuses
to load any game without it. It names every set, its parent and device
sets, the chips of each region and their CRC32. The content is a MAME set
in .zip or .7z. Its chips are matched by CRC32, or by name when the ROM CRC
Verification core option is off. A clone also reads its parent beside the
content.
ref: src/libretro/core.cpp:634-641, src/libretro/core.cpp:977-1001,
src/rom/rom_loader.cpp:195-206, src/rom/rom_loader.cpp:765-781,
src/libretro/core_options.h:196-202
Daytona USA, its clones and Desert Tank name the model1io device set, Virtua
Cop and its clone model1io2. The device archive is looked for in
<system>/sm2-emu/ and then beside the content, and its chips win over the
copies a game set carries. A game set that holds the I/O board ROM runs
without the device archive.
ref: data/games.xml:1004-1010, data/games.xml:1442-1448, data/games.xml:5846-5852,
src/rom/game_db.cpp:463-475, src/rom/game_db.cpp:813, src/rom/rom_loader.cpp:784-812
Gun games read custom crosshair images from <system>/sm2-emu/crosshairs/,
named after the set, its parent or default, with -p1 or -p2 or without.
They are artwork the user adds, and a built-in crosshair is drawn without
them.
ref: src/libretro/core.cpp:1009, src/libretro/crosshair.cpp:137-146
files:
- name: "games.xml"
path: "sm2-emu/games.xml"
system: sega-model2
required: true
description: "SM2-Emu game database"
note: "The data/games.xml of the core's own tree, at the revision of the build. Without it no game loads."
source_ref: "src/libretro/core.cpp:987-998"
- name: "model1io.zip"
path: "sm2-emu/model1io.zip"
category: bios_zip
system: sega-model2
required: true
description: "Sega Model 1 I/O board device set"
note: "Named by daytona and desert, and by the daytona clones through their parent. Also read as model1io.7z or beside the content. Those games do not start without the chip, unless their own set carries it."
source_ref: "data/games.xml:1004-1010, data/games.xml:1027-1029, src/rom/rom_loader.cpp:784-799"
contents:
- name: "epr-14869c.25"
crc32: "24b68e64"
- name: "model1io2.zip"
path: "sm2-emu/model1io2.zip"
category: bios_zip
system: sega-model2
required: true
description: "Sega Model 1 advanced I/O board device set"
note: "Named by vcop, and by vcopa through its parent. Also read as model1io2.7z or beside the content. Those games do not start without the chip, unless their own set carries it."
source_ref: "data/games.xml:5846-5852, data/games.xml:5897-5899, src/rom/rom_loader.cpp:784-799"
contents:
- name: "epr-17181.6"
crc32: "1add2b82"
+129
View File
@@ -0,0 +1,129 @@
emulator: "TGPulse-Next"
type: libretro
core_classification: community_fork
source: "https://github.com/Zer0one/tgpulse-next-libretro"
upstream: "https://github.com/Zer0one/TGPulse-Next"
profiled_date: "2026-11-09"
source_commit: "ef21af3921f3f3914ed698ff8962c88b5b1322cd"
upstream_commit: "3c75f9b2b155e8bb50a225c69520948ef72ecd48"
upstream_frozen: "The port's tree was imported as a snapshot of TGPulse-Next main at this commit, as NOTICE records, with a fresh history."
core_version: "0.1.0.13"
version_basis:
kind: file
path: "crates/tgpulse-libretro/src/lib.rs"
pattern: 'library_version: c"([^"]+)"'
display_name: "Sega - Model 1 (TGPulse-Next)"
cores:
- "tgpulse_next_m1"
systems:
- sega-model1
notes: |
A Sega Model 1 libretro core in Rust, built from TGPulse-Next, itself based
on deepblueworks/TGPulse. This build compiles the Model 1 machine only. The
content is a MAME set in a .zip, recognised by its file names against the
game list built into the core, and a Model 2 set is refused.
ref: NOTICE:1-3, crates/tgpulse-libretro/src/lib.rs:2490-2500,
crates/tgpulse-libretro/src/lib.rs:2040-2054
Every Model 1 game runs the firmware of its I/O board, which the set does
not need to carry. It is read from model1io.zip or model1io2.zip, in
<system>/tgpulse-next/, then beside the game, then from the game's own
archive. A member counts only at 65536 bytes and the SHA-1 the core
hardcodes, and a bad copy passes on to the next place. Without a valid
copy the game does not start.
ref: crates/tgpulse-libretro/src/lib.rs:720-728, crates/tgpulse-libretro/src/lib.rs:2058-2059,
crates/tgpulse-core/src/loader.rs:403-417, crates/tgpulse-core/src/roms_db.rs:324-346,
crates/tgpulse-core/src/loader/model1_bios.rs:8-29, crates/tgpulse-core/src/loader/model1_bios.rs:36-48
The NetMerc diagnostic display draws the cabinet's HD44780 LCD with the
character ROM of hd44780.zip, read in the same three places. It is off by
default, and without the ROM no LCD is drawn.
ref: crates/tgpulse-core/src/loader/model1_bios.rs:6, crates/tgpulse-core/src/loader/model1_bios.rs:31-34,
crates/tgpulse-libretro/src/diagnostic_overlay.rs:28-35
NetMerc's sample ROMs are bad dumps. The Audio Donor option takes the PCM
banks of vf, vr, swa or wingwar from that game's set beside the content,
vf by default, and a procedural fallback plays without one.
ref: crates/tgpulse-libretro/src/lib.rs:475-504, crates/tgpulse-core/src/loader/audio_donor.rs:34-71,
crates/tgpulse-core/src/config.rs:6-26
archive_prefix: "tgpulse-next"
files:
- name: "model1io.zip"
path: "tgpulse-next/model1io.zip"
system: sega-model1
required: true
category: bios_zip
description: "Sega Model 1 I/O board device set"
note: "I/O firmware of Virtua Racing, Virtua Formula, Virtua Fighter and Star Wars Arcade. Also read beside the game, then from the game's own archive."
source_ref: "crates/tgpulse-core/src/loader/model1_bios.rs:36-48, crates/tgpulse-core/src/loader/model1_bios.rs:8-12"
- name: "epr-14869.25"
archive: model1io.zip
system: sega-model1
required: true
size: 65536
sha1: "b65fdd0ad31794a565a0ca4dc67a3f16b329fd71"
validation: [size, sha1]
note: "Read for vr and vformula."
source_ref: "crates/tgpulse-core/src/loader/model1_bios.rs:40, crates/tgpulse-core/src/roms_db.dat:3605, crates/tgpulse-core/src/roms_db.dat:3788"
- name: "epr-14869b.25"
archive: model1io.zip
system: sega-model1
required: true
size: 65536
sha1: "af0fe245eb9fa3c3c60e4b685f1e779f83d894f9"
validation: [size, sha1]
note: "Read for vf, swa and swaj."
source_ref: "crates/tgpulse-core/src/loader/model1_bios.rs:41, crates/tgpulse-core/src/roms_db.dat:3009, crates/tgpulse-core/src/roms_db.dat:3061, crates/tgpulse-core/src/roms_db.dat:3358"
- name: "model1io2.zip"
path: "tgpulse-next/model1io2.zip"
system: sega-model1
required: true
category: bios_zip
description: "Sega Model 1 advanced I/O board device set"
note: "I/O firmware of Wing War and NetMerc. Also read beside the game, then from the game's own archive."
source_ref: "crates/tgpulse-core/src/loader/model1_bios.rs:36-48, crates/tgpulse-core/src/loader/model1_bios.rs:8-12"
- name: "epr-16891.6"
archive: model1io2.zip
system: sega-model1
required: true
size: 65536
sha1: "3079397c7241c1a6f494fa310faff0989dfa04a0"
validation: [size, sha1]
note: "Read for wingwar, wingwar360, wingwarj and wingwaru."
source_ref: "crates/tgpulse-core/src/loader/model1_bios.rs:42, crates/tgpulse-core/src/roms_db.dat:3971"
- name: "epr-18021.6"
archive: model1io2.zip
system: sega-model1
required: true
size: 65536
sha1: "bf5b9aad99c0f8f5e262e0855796f39119d11a97"
validation: [size, sha1]
note: "Read for netmerc."
source_ref: "crates/tgpulse-core/src/loader/model1_bios.rs:43, crates/tgpulse-core/src/roms_db.dat:1958"
- name: "hd44780.zip"
path: "tgpulse-next/hd44780.zip"
system: sega-model1
required: false
category: bios_zip
description: "HD44780 LCD controller character ROM set"
note: "Read only when the NetMerc diagnostic display is switched on. Also read beside the game, then from the game's own archive."
source_ref: "crates/tgpulse-core/src/loader/model1_bios.rs:31-34, crates/tgpulse-libretro/src/diagnostic_overlay.rs:28-35"
- name: "hd44780_a00.bin"
archive: hd44780.zip
system: sega-model1
required: false
size: 4096
sha1: "65cf075a988cdcbb316b9afdd0529b374a1a65ec"
validation: [size, sha1]
note: "HD44780 A00 character ROM, the font of the diagnostic LCD."
source_ref: "crates/tgpulse-core/src/loader/model1_bios.rs:6, crates/tgpulse-core/src/loader/model1_bios.rs:31-34"
+67
View File
@@ -0,0 +1,67 @@
emulator: "zcdi"
type: libretro
core_classification: pure_libretro
source: "https://github.com/pastisme/zcdi"
profiled_date: "2026-11-09"
source_commit: "b7481411e6939b2c1745067a646bfd43479e2a3c"
core_version: "0.1.0"
version_basis:
kind: file
path: "CMakeLists.txt"
pattern: 'project\(zcdi VERSION ([0-9.]+)'
display_name: "Philips - CD-i (zcdi)"
cores:
- "zcdi"
systems:
- philips-cdi
notes: |
A Philips CD-i Mono-I emulator written for libretro: SCC68070 CPU, MCD212
video, CDIC disc controller and the 22ER9141 Digital Video Cartridge, with
device code from MAME's cdi driver and CDi_MiSTer. It runs the original BIOS.
ref: src/libretro/libretro_core.cpp:113-120
The Video Standard core option (zcdi_preferred_bios, ntsc by default)
picks the BIOS: cdi200.rom for NTSC, cdi220b.rom for PAL. The file is read
from the system directory root, and retro_load_game fails when it is
absent, also when no disc is loaded. The dump is mapped as it is, with no
size or hash check.
ref: src/libretro/libretro_core.cpp:55-58, src/libretro/libretro_core.cpp:166-173,
src/libretro/core_options.cpp:110-112, src/libretro/helpers.cpp:70-83,
src/core/bus.cpp:72-77
With DVC Enabled on auto (the default), vmpega.rom is read from the system
directory, and at most 256 KB of it are mapped. Without it the player has
no Digital Video Cartridge.
ref: src/libretro/libretro_core.cpp:60, src/libretro/libretro_core.cpp:175-180,
src/core/bus.cpp:79-83
NVRAM is saved per disc by default. The global mode keeps one file,
zcdi_<bios stem>.nvram, in the save directory, which the core writes
itself.
ref: src/libretro/libretro_core.cpp:182-190, src/libretro/helpers.cpp:90-97
files:
- name: "cdi200.rom"
path: "cdi200.rom"
system: philips-cdi
required: true
description: "CD-i Mono-I BIOS 2.00, NTSC"
note: "Read when Video Standard is NTSC, the default. The core does not start without it."
source_ref: "src/libretro/libretro_core.cpp:55-58, src/libretro/libretro_core.cpp:166-173, src/libretro/helpers.cpp:70-83"
- name: "cdi220b.rom"
path: "cdi220b.rom"
system: philips-cdi
required: false
description: "CD-i Mono-I BIOS 2.20b, PAL"
note: "Read in place of cdi200.rom when Video Standard is PAL, and the core does not start without it then."
source_ref: "src/libretro/libretro_core.cpp:55-58, src/libretro/libretro_core.cpp:166-173, src/libretro/core_options.cpp:110-112"
- name: "vmpega.rom"
path: "vmpega.rom"
system: philips-cdi
required: false
description: "Digital Video Cartridge ROM"
note: "Read when DVC Enabled is auto, the default. Bytes past 256 KB are dropped. Without it there is no Digital Video Cartridge and the Digital Video titles do not play."
source_ref: "src/libretro/libretro_core.cpp:60, src/libretro/libretro_core.cpp:175-180, src/core/bus.cpp:79-83"
+38
View File
@@ -0,0 +1,38 @@
emulator: "ZEsarPCW"
type: libretro
core_classification: community_fork
source: "https://github.com/retrodiv/ZEsarPCW-libretro"
upstream: "https://github.com/chernandezba/zesarux"
profiled_date: "2026-11-09"
source_commit: "23af8913c0ff22b9d89646ca9f98660db17f0057"
upstream_commit: "0bb4277d714128311d78bc0625fb12ae8308899a"
upstream_frozen: "The port is built from the ZEsarUX-13.0 release tarball that src/pin.json names, this tag's commit. Later ZEsarUX commits are not in it."
core_version: "13.0.4"
version_basis:
kind: file
path: "src/libretro/pcw_version.h"
pattern: '#define PCW_CORE_VERSION "([^"]+)"'
display_name: "Amstrad - PCW (ZEsarPCW)"
cores:
- "zesarpcw"
systems:
- pcw
notes: |
An Amstrad PCW 8256 and 8512 core cut out of ZEsarUX 13.0, with every
other machine removed. The major and minor numbers of library_version are
the ZEsarUX release, the last one the port's own.
ref: src/pin.json:1-8, src/libretro/libretro.c:246-255
The PCW boot ROM sequence is replaced by a bootstrap written in C, which
loads the boot sector of the inserted disc. When the disc is not bootable,
the OpenPCW-OS helper disc embedded in the core is mounted instead and
starts CP/M. Neither reads a file.
ref: src/cpu.c:487, src/libretro/pcw_boot.c:26-30, src/machines/pcw.c:1322-1358,
src/dsk.c:161-166, src/dsk.c:382-385
The core never asks the frontend for its system directory. The only files
it opens are the content discs.
ref: src/dsk.c:169-180
files: []
+2
View File
@@ -969,6 +969,7 @@ SYSTEM_NAMES: dict[str, str] = {
"galaksija": "Galaksija computer",
"game": "Picross puzzle (libretro sample)",
"gamecom": "Tiger Game.com",
"gamemaker": "GameMaker games",
"gameplan-mpu1": "Game Plan MPU-1",
"gamepock": "Epoch Game Pocket Computer",
"gametank": "GameTank console",
@@ -1131,6 +1132,7 @@ SYSTEM_NAMES: dict[str, str] = {
"sega-isgsm": "Sega ISG Selection Master",
"sega-megaplay": "Sega Mega Play",
"sega-megatech": "Sega Mega-Tech",
"sega-model1": "Sega Model 1",
"sega-model2": "Sega Model 2",
"sega-naomi": "Sega NAOMI",
"sega-naomi2": "Sega NAOMI 2",
+1
View File
@@ -69,6 +69,7 @@ STEM_NAMED = {
"simple64": "window title simple64",
"sixtyforce": "site title sixtyforce",
"veesem": "README title veesem",
"zcdi": "README title zcdi",
}