Files
libretro/emulators/higan_sfc.yml
T

227 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"
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; 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"