Files
libretro/emulators/higan_sfc.yml
T
Abdessamad Derraz e7aa9e870b fix: state libretro core versions from their code
Each libretro profile records version_basis and core_version is read
there at its pin. snes9x states 1.63 in snes9x.h, nestopia 2.0.0, mgba
0.11.0, vice 3.10, atari800's libretro tree 7.0.0. Cores whose build
takes its version from git carry the nearest tag in describe form
(flycast v2.7-90-ge88b0ce, ppsspp, duckstation, gearcoleco), placeholders
copied from .info files (Git, SVN) are replaced by the code's statement,
and a code that states none is null with kind none.
2026-10-27 19:21:27 +01:00

231 lines
10 KiB
YAML

emulator: "higan (SFC Accuracy)"
type: libretro
core_classification: frozen_snapshot
source: "https://gitlab.com/higan/higan"
source_branch: libretro
upstream: "https://gitlab.com/higan/higan"
profiled_date: "2026-09-17"
source_commit: "d3f592013a27cb78f17d84f90a6be6cf6f6af1d1"
core_version: "106"
version_basis:
kind: file
path: "higan/emulator/emulator.hpp"
pattern: 'static\s+const\s+string\s+Version\s*=\s*"([^"]+)"'
display_name: "Nintendo - SNES / Famicom (higan Accuracy)"
cores:
- higan_sfc
systems:
- nintendo-snes
- nintendo-sgb
notes: |
The libretro target lives on the libretro branch of higan's own repository,
merged with the v106 release: Emulator::Version is "106"
(higan/emulator/emulator.hpp:15) and retro_get_system_info announces it as
library_version under the name "higan (Super Famicom Accuracy)"
(higan/target-libretro/libretro.cpp:405-412,
higan/target-libretro/libretro-sfc.cpp:513). The buildbot recipe builds
higan_sfc from that branch (libretro-super
recipes/linux/cores-linux-x64-generic:71), whose last commit dates from
2017-11-19. The library is named higan_$(corename)_libretro with corename
sfc (higan/target-libretro/GNUmakefile:1-11,
higan/target-libretro/GNUmakefile:13-19). nSide, from which
nside_sfc_balanced is built, refuses core=sfc at build time
(nSide nSide/target-libretro/GNUmakefile:1-2).
The system manifest and the 64-byte SPC700 IPL ROM are compiled into the
binary and served from memory (higan/target-libretro/libretro-sfc.cpp:364-396,
higan/sfc/smp/smp.cpp:25-33).
Coprocessor firmware. A ROM is imported through icarus, whose heuristics
detect the coprocessor from the cartridge header
(icarus/heuristics/super-famicom.cpp:707-759) and write a manifest naming
each firmware file with its size
(icarus/heuristics/super-famicom.cpp:482-545). DSP1 games are given the
DSP1B names, while dsp1.program.rom and dsp1.data.rom are named for the Campus
Challenge '92 and Powerfest '94 cartridges
(icarus/heuristics/super-famicom.cpp:623-640,
icarus/heuristics/super-famicom.cpp:416-417,
icarus/heuristics/super-famicom.cpp:437-438). When the image does not carry
the firmware appended (icarus/heuristics/super-famicom.cpp:106-190), the
importer reports the file as missing (icarus/core/super-famicom.cpp:64-71)
and the target reads it through locate_libretro, appends it to the image
and imports again (higan/target-libretro/libretro.cpp:105-141).
locate_libretro tries the system directory, then higan/ under the user's
config and data directories (higan/target-libretro/libretro.cpp:15-35). No
hash is checked. The sizes below are those the manifest declares, and a
shorter file leaves the second import short and the load fails.
The icarus database is read from Database/ next to the frontend
executable or under the icarus config and data directories, and takes
precedence over the heuristics when the image's SHA-256 is listed
(icarus/core/core.cpp:1-16, icarus/icarus.cpp:7-15,
icarus/core/super-famicom.cpp:17-24). It names dsp1.program.rom and
dsp1.data.rom for several DSP1 titles and sgb.boot.rom for the Super Game
Boy cartridge.
Super Game Boy. Loading a .gb or .gbc file selects the folder named by the
higan_sfc_sgb_bios option, SGB1.sfc/ by default or SGB2.sfc/
(higan/target-libretro/libretro-sfc.cpp:154-156,
higan/target-libretro/libretro-sfc.cpp:354). program.rom is looked up in
that folder, then in SGB.sfc/ and Super GameBoy.sfc/, and the folder's
manifest is generated from its program.rom and *.boot.rom files
(higan/target-libretro/libretro-sfc.cpp:202-243,
icarus/core/super-famicom.cpp:1-11). The heuristics recognise the cartridge
by its header and name the boot ROM sgb1.boot.rom or sgb2.boot.rom
(icarus/heuristics/super-famicom.cpp:612-621,
icarus/heuristics/super-famicom.cpp:225-245). The Game Boy system opens
that name from the folder first and from the system directory root as a
fallback (higan/gb/system/system.cpp:54-65,
higan/sfc/coprocessor/icd2/icd2.cpp:34-38,
higan/target-libretro/libretro.cpp:200-278). Once a Game Boy image is
loaded both files are mandatory: a missing program.rom fails
load_special_bios, a missing boot ROM sets the failure flag, and
retro_load_game returns false (higan/target-libretro/libretro-sfc.cpp:223-227,
higan/target-libretro/libretro.cpp:635-642). The source tree ships no copy
of the boot ROMs or of the coprocessor firmware.
files:
# NEC uPD7725 (DSP1, DSP1B, DSP2, DSP3, DSP4): 2048 x 24-bit program words,
# 1024 x 16-bit data words
- name: "dsp1.program.rom"
system: nintendo-snes
size: 6144
required: false
note: "Named for the Campus Challenge '92 and Powerfest '94 cartridges and by the icarus database. Other DSP1 games use dsp1b.program.rom."
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:416, icarus/heuristics/super-famicom.cpp:437"
- name: "dsp1.data.rom"
system: nintendo-snes
size: 2048
required: false
note: "Named for the Campus Challenge '92 and Powerfest '94 cartridges and by the icarus database. Other DSP1 games use dsp1b.data.rom."
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:417, icarus/heuristics/super-famicom.cpp:438"
- name: "dsp1b.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:482, icarus/heuristics/super-famicom.cpp:712-720"
- name: "dsp1b.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:483, icarus/heuristics/super-famicom.cpp:712-720"
- name: "dsp2.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:492, icarus/heuristics/super-famicom.cpp:734"
- name: "dsp2.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:493, icarus/heuristics/super-famicom.cpp:734"
- name: "dsp3.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:502, icarus/heuristics/super-famicom.cpp:738"
- name: "dsp3.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:503, icarus/heuristics/super-famicom.cpp:738"
- name: "dsp4.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:512, icarus/heuristics/super-famicom.cpp:742"
- name: "dsp4.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:513, icarus/heuristics/super-famicom.cpp:742"
# Hitachi HG51B169 (Cx4): 1024 x 24-bit data words
- name: "cx4.data.rom"
system: nintendo-snes
size: 3072
required: false
source_ref: "higan/sfc/cartridge/load.cpp:201-225, icarus/heuristics/super-famicom.cpp:255, icarus/heuristics/super-famicom.cpp:708"
# NEC uPD96050 (ST010, ST011): 16384 x 24-bit program words,
# 2048 x 16-bit data words
- name: "st010.program.rom"
system: nintendo-snes
size: 49152
required: false
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:522, icarus/heuristics/super-famicom.cpp:750"
- name: "st010.data.rom"
system: nintendo-snes
size: 4096
required: false
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:523, icarus/heuristics/super-famicom.cpp:750"
- name: "st011.program.rom"
system: nintendo-snes
size: 49152
required: false
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:533, icarus/heuristics/super-famicom.cpp:754"
- name: "st011.data.rom"
system: nintendo-snes
size: 4096
required: false
source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:534, icarus/heuristics/super-famicom.cpp:754"
# SETA ARM6 (ST018): 128 KiB program, 32 KiB data
- name: "st018.program.rom"
system: nintendo-snes
size: 131072
required: false
source_ref: "higan/sfc/cartridge/load.cpp:185-199, icarus/heuristics/super-famicom.cpp:544, icarus/heuristics/super-famicom.cpp:758"
- name: "st018.data.rom"
system: nintendo-snes
size: 32768
required: false
source_ref: "higan/sfc/cartridge/load.cpp:185-199, icarus/heuristics/super-famicom.cpp:545, icarus/heuristics/super-famicom.cpp:758"
# Super Game Boy: cartridge ROM and boot ROM per folder
- name: "program.rom"
path: "SGB1.sfc/program.rom"
system: nintendo-sgb
required: false
note: "Also looked up as SGB.sfc/program.rom and Super GameBoy.sfc/program.rom."
source_ref: "higan/target-libretro/libretro-sfc.cpp:202-243, higan/sfc/cartridge/load.cpp:77-80"
- name: "sgb1.boot.rom"
path: "SGB1.sfc/sgb1.boot.rom"
system: nintendo-sgb
aliases:
- "sgb.boot.rom"
size: 256
required: false
note: "Falls back to sgb1.boot.rom at the system directory root. Named sgb.boot.rom by the icarus database entry for the cartridge."
source_ref: "higan/gb/system/system.cpp:54-65, icarus/heuristics/super-famicom.cpp:232, icarus/heuristics/super-famicom.cpp:619, icarus/core/super-famicom.cpp:17-24"
- name: "program.rom"
path: "SGB2.sfc/program.rom"
system: nintendo-sgb
required: false
note: "Selected by the higan_sfc_sgb_bios option."
source_ref: "higan/target-libretro/libretro-sfc.cpp:202-243, higan/sfc/cartridge/load.cpp:77-80"
- name: "sgb2.boot.rom"
path: "SGB2.sfc/sgb2.boot.rom"
system: nintendo-sgb
size: 256
required: false
note: "Falls back to sgb2.boot.rom at the system directory root."
source_ref: "higan/gb/system/system.cpp:54-65, icarus/heuristics/super-famicom.cpp:243, icarus/heuristics/super-famicom.cpp:614"