Files
libretro/emulators/higan_sfc_balanced.yml
T

224 lines
10 KiB
YAML

emulator: "nSide (SFC Balanced)"
type: libretro
core_classification: enhanced_fork
source: "https://github.com/libretro/nSide"
upstream: "https://gitlab.com/higan/higan"
profiled_date: "2026-09-17"
source_commit: "5b2b5da3a9654d88b2e51fb7a1637808ac601a18"
upstream_commit: "3353efd3a1087f4d16d9b9fd2a8e465087ab8ec0"
core_version: "106.25"
display_name: "Nintendo - SNES / SFC (nSide Balanced)"
cores:
- nside_sfc_balanced
- higan_sfc_balanced
systems:
- nintendo-snes
- nintendo-sgb
exclusion_note: >
The .info declares SGB1.sfc/sgb1.boot.rom and SGB2.sfc/sgb2.boot.rom. The
core opens the boot ROM under the name the manifest derives from the
architecture, lr35902.boot.rom, in the selected SGB folder
(nSide/gb/system/system.cpp:60-61, nSide/emulator/game.hpp:101-104). A
sgb1.boot.rom or sgb2.boot.rom is only looked up, at the system directory
root, when the Super Game Boy cartridge is itself imported as an SFC game
(icarus/core/super-famicom.cpp:49-54), a load that ends on the Game Boy
cartridge manifest the libretro target cannot provide
(nSide/target-libretro/libretro.cpp:284-287).
notes: |
Fork of higan by hex_usr (nSide v009r16, README.txt:1-4), synchronised with
higan v106r25: Emulator::Version is "106.25" (nSide/emulator/emulator.hpp:16)
and retro_get_system_info announces it as library_version under the name
"higan (Super Famicom Balanced)" (nSide/target-libretro/libretro.cpp:87-93,
nSide/target-libretro/libretro-sfc.cpp:486). The balanced profile keeps a
scanline-based PPU; the accuracy profile is refused at build time
(nSide/target-libretro/GNUmakefile:1-2, nSide/target-libretro/libretro.cpp:38-39).
The library is named nside_$(corename)_libretro with corename sfc_balanced
(nSide/target-libretro/GNUmakefile:4-13, nSide/target-libretro/GNUmakefile:18-23),
which the GitLab CI publishes as nside_sfc_balanced (.gitlab-ci.yml:15,
.gitlab-ci.yml:53-54). The core options keep the higan_sfc_ prefix so the
settings are shared with higan's core (nSide/target-libretro/libretro-sfc.cpp:321-329).
System files manifest.bml, boards.bml and ipl.rom are compiled into the
binary and served from memory (nSide/target-libretro/libretro-sfc.cpp:335-341,
nSide/target-libretro/resource/sfc.bml:1-4, nSide/sfc-balanced/smp/smp.cpp:25-33).
Coprocessor firmware. A ROM is imported through icarus, whose manifest names
each firmware memory by architecture and identifier
(icarus/heuristics/super-famicom.cpp:90-115). When the image does not carry
the firmware appended (icarus/heuristics/super-famicom.cpp:406-414), the
importer reports {identifier}.{content}.rom as missing
(icarus/core/super-famicom.cpp:46-57) and the libretro target reads that
name through locate_libretro, appends it to the image and imports again
(nSide/target-libretro/icarus.cpp:111-142). locate_libretro tries the system
directory, then higan/ and nSide/ under the user's config and data
directories (nSide/target-libretro/libretro.cpp:3-31). Identifiers come from
the cartridge label: DSP1 for PILOTWINGS, DSP2 for DUNGEON MASTER, DSP3 for
SD Gundam GX, DSP4 for TOP GEAR 3000 and PLANETS CHAMP TG3000, DSP1B
otherwise; ST011 for 2DAN MORITA SHOUGI, ST010 otherwise; ST018 and Cx4 have
a single revision (icarus/heuristics/super-famicom.cpp:512-541). No hash is
checked; a file shorter than the size the manifest declares leaves the
second import short and the load fails. The sizes below are those declared
by the heuristics.
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/
(nSide/target-libretro/libretro-sfc.cpp:142-145,
nSide/target-libretro/libretro-sfc.cpp:326). 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
(nSide/target-libretro/libretro-sfc.cpp:179-215,
icarus/core/super-famicom.cpp:1-11). The Game Boy system then opens the boot
ROM the manifest names, lr35902.boot.rom, from the folder first and from the
system directory root as a fallback (nSide/gb/system/system.cpp:54-65,
nSide/target-libretro/program.cpp:19-81). Once a Game Boy image is loaded
both files are mandatory: a missing one sets the failure flag and
retro_load_game returns false
(nSide/target-libretro/program.cpp:75-78, nSide/target-libretro/libretro.cpp:286).
The SHA-1 values on the boot ROMs and on cx4.data.rom are those of the copies
the source tree ships in icarus/firmware/.
files:
# NEC uPD7725 (DSP1, DSP1B, DSP2, DSP3, DSP4): 2048 x 24-bit program words,
# 1024 x 16-bit data words
- name: "dsp1.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:534"
- name: "dsp1.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:534"
- name: "dsp1b.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:539"
- name: "dsp1b.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:539"
- name: "dsp2.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:535"
- name: "dsp2.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:535"
- name: "dsp3.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:536"
- name: "dsp3.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:536"
- name: "dsp4.data.rom"
system: nintendo-snes
size: 2048
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:537-538"
- name: "dsp4.program.rom"
system: nintendo-snes
size: 6144
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:537-538"
# Hitachi HG51BS169 (Cx4): 1024 x 24-bit data words
- name: "cx4.data.rom"
system: nintendo-snes
size: 3072
sha1: "a002f4efba42775a31185d443f3ed1790b0e949a"
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:405-454, icarus/heuristics/super-famicom.cpp:110, icarus/heuristics/super-famicom.cpp:529-531"
# NEC uPD96050 (ST010, ST011): 16384 x 24-bit program words,
# 2048 x 16-bit data words
- name: "st010.data.rom"
system: nintendo-snes
size: 4096
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:99, icarus/heuristics/super-famicom.cpp:516-521"
- name: "st010.program.rom"
system: nintendo-snes
size: 49152
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:98, icarus/heuristics/super-famicom.cpp:516-521"
- name: "st011.data.rom"
system: nintendo-snes
size: 4096
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:99, icarus/heuristics/super-famicom.cpp:519"
- name: "st011.program.rom"
system: nintendo-snes
size: 49152
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:98, icarus/heuristics/super-famicom.cpp:519"
# SETA ARM6 (ST018): 128 KiB program, 32 KiB data
- name: "st018.data.rom"
system: nintendo-snes
size: 32768
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:362-402, icarus/heuristics/super-famicom.cpp:92, icarus/heuristics/super-famicom.cpp:512-514"
- name: "st018.program.rom"
system: nintendo-snes
size: 131072
required: false
source_ref: "nSide/sfc-balanced/cartridge/load.cpp:362-402, icarus/heuristics/super-famicom.cpp:91, icarus/heuristics/super-famicom.cpp:512-514"
# 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: "nSide/target-libretro/libretro-sfc.cpp:179-215, nSide/sfc-balanced/cartridge/load.cpp:159-162"
- name: "lr35902.boot.rom"
path: "SGB1.sfc/lr35902.boot.rom"
system: nintendo-sgb
size: 256
sha1: "aa2f50a77dfb4823da96ba99309085a3c6278515"
required: false
note: "Falls back to lr35902.boot.rom at the system directory root."
source_ref: "nSide/gb/system/system.cpp:54-65, nSide/emulator/game.hpp:101-104, icarus/heuristics/super-famicom.cpp:103, icarus/heuristics/super-famicom.cpp:523-527"
- name: "program.rom"
path: "SGB2.sfc/program.rom"
system: nintendo-sgb
required: false
note: "Selected by the higan_sfc_sgb_bios option."
source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215, nSide/sfc-balanced/cartridge/load.cpp:159-162"
- name: "lr35902.boot.rom"
path: "SGB2.sfc/lr35902.boot.rom"
system: nintendo-sgb
size: 256
sha1: "93407ea10d2f30ab96a314d8eca44fe160aea734"
required: false
note: "Falls back to lr35902.boot.rom at the system directory root."
source_ref: "nSide/gb/system/system.cpp:54-65, nSide/emulator/game.hpp:101-104, icarus/heuristics/super-famicom.cpp:103, icarus/heuristics/super-famicom.cpp:523-527"