{
  "count": 1,
  "generated_at": "2026-10-20T02:57:31Z",
  "items": [
    {
      "id": "higan_sfc_balanced",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "106.25",
        "cores": [
          "nside_sfc_balanced",
          "higan_sfc_balanced"
        ],
        "display_name": "Nintendo - SNES / SFC (nSide Balanced)",
        "emulator": "nSide (SFC Balanced)",
        "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).\n",
        "files": [
          {
            "name": "dsp1.data.rom",
            "required": false,
            "size": 2048,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:534",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp1.program.rom",
            "required": false,
            "size": 6144,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:534",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp1b.data.rom",
            "required": false,
            "size": 2048,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:539",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp1b.program.rom",
            "required": false,
            "size": 6144,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:539",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp2.data.rom",
            "required": false,
            "size": 2048,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:535",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp2.program.rom",
            "required": false,
            "size": 6144,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:535",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp3.data.rom",
            "required": false,
            "size": 2048,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:536",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp3.program.rom",
            "required": false,
            "size": 6144,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:536",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp4.data.rom",
            "required": false,
            "size": 2048,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:537-538",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp4.program.rom",
            "required": false,
            "size": 6144,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:537-538",
            "system": "nintendo-snes"
          },
          {
            "name": "cx4.data.rom",
            "required": false,
            "sha1": "a002f4efba42775a31185d443f3ed1790b0e949a",
            "size": 3072,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:405-454, icarus/heuristics/super-famicom.cpp:110, icarus/heuristics/super-famicom.cpp:529-531",
            "system": "nintendo-snes"
          },
          {
            "name": "st010.data.rom",
            "required": false,
            "size": 4096,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:99, icarus/heuristics/super-famicom.cpp:516-521",
            "system": "nintendo-snes"
          },
          {
            "name": "st010.program.rom",
            "required": false,
            "size": 49152,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:98, icarus/heuristics/super-famicom.cpp:516-521",
            "system": "nintendo-snes"
          },
          {
            "name": "st011.data.rom",
            "required": false,
            "size": 4096,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:99, icarus/heuristics/super-famicom.cpp:519",
            "system": "nintendo-snes"
          },
          {
            "name": "st011.program.rom",
            "required": false,
            "size": 49152,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:98, icarus/heuristics/super-famicom.cpp:519",
            "system": "nintendo-snes"
          },
          {
            "name": "st018.data.rom",
            "required": false,
            "size": 32768,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:362-402, icarus/heuristics/super-famicom.cpp:92, icarus/heuristics/super-famicom.cpp:512-514",
            "system": "nintendo-snes"
          },
          {
            "name": "st018.program.rom",
            "required": false,
            "size": 131072,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:362-402, icarus/heuristics/super-famicom.cpp:91, icarus/heuristics/super-famicom.cpp:512-514",
            "system": "nintendo-snes"
          },
          {
            "name": "program.rom",
            "note": "Also looked up as SGB.sfc/program.rom and Super GameBoy.sfc/program.rom.",
            "path": "SGB1.sfc/program.rom",
            "required": false,
            "source_ref": "nSide/target-libretro/libretro-sfc.cpp:179-215, nSide/sfc-balanced/cartridge/load.cpp:159-162",
            "system": "nintendo-sgb"
          },
          {
            "name": "lr35902.boot.rom",
            "note": "Falls back to lr35902.boot.rom at the system directory root.",
            "path": "SGB1.sfc/lr35902.boot.rom",
            "required": false,
            "sha1": "aa2f50a77dfb4823da96ba99309085a3c6278515",
            "size": 256,
            "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",
            "system": "nintendo-sgb"
          },
          {
            "name": "program.rom",
            "note": "Selected by the higan_sfc_sgb_bios option.",
            "path": "SGB2.sfc/program.rom",
            "required": false,
            "source_ref": "nSide/target-libretro/libretro-sfc.cpp:179-215, nSide/sfc-balanced/cartridge/load.cpp:159-162",
            "system": "nintendo-sgb"
          },
          {
            "name": "lr35902.boot.rom",
            "note": "Falls back to lr35902.boot.rom at the system directory root.",
            "path": "SGB2.sfc/lr35902.boot.rom",
            "required": false,
            "sha1": "93407ea10d2f30ab96a314d8eca44fe160aea734",
            "size": 256,
            "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",
            "system": "nintendo-sgb"
          }
        ],
        "notes": "Fork of higan by hex_usr (nSide v009r16, README.txt:1-4), synchronised with\nhigan v106r25: Emulator::Version is \"106.25\" (nSide/emulator/emulator.hpp:16)\nand retro_get_system_info announces it as library_version under the name\n\"higan (Super Famicom Balanced)\" (nSide/target-libretro/libretro.cpp:87-93,\nnSide/target-libretro/libretro-sfc.cpp:486). The balanced profile keeps a\nscanline-based PPU, and the accuracy profile is refused at build time\n(nSide/target-libretro/GNUmakefile:1-2, nSide/target-libretro/libretro.cpp:38-39).\nThe library is named nside_$(corename)_libretro with corename sfc_balanced\n(nSide/target-libretro/GNUmakefile:4-13, nSide/target-libretro/GNUmakefile:18-23),\nwhich the GitLab CI publishes as nside_sfc_balanced (.gitlab-ci.yml:15,\n.gitlab-ci.yml:53-54). The core options keep the higan_sfc_ prefix so the\nsettings are shared with higan's core (nSide/target-libretro/libretro-sfc.cpp:321-329).\n\nSystem files manifest.bml, boards.bml and ipl.rom are compiled into the\nbinary and served from memory (nSide/target-libretro/libretro-sfc.cpp:335-341,\nnSide/target-libretro/resource/sfc.bml:1-4, nSide/sfc-balanced/smp/smp.cpp:25-33).\n\nCoprocessor firmware. A ROM is imported through icarus, whose manifest names\neach firmware memory by architecture and identifier\n(icarus/heuristics/super-famicom.cpp:90-115). When the image does not carry\nthe firmware appended (icarus/heuristics/super-famicom.cpp:406-414), the\nimporter reports {identifier}.{content}.rom as missing\n(icarus/core/super-famicom.cpp:46-57) and the libretro target reads that\nname through locate_libretro, appends it to the image and imports again\n(nSide/target-libretro/icarus.cpp:111-142). locate_libretro tries the system\ndirectory, then higan/ and nSide/ under the user's config and data\ndirectories (nSide/target-libretro/libretro.cpp:3-31). Identifiers come from\nthe cartridge label: DSP1 for PILOTWINGS, DSP2 for DUNGEON MASTER, DSP3 for\nSD Gundam GX, DSP4 for TOP GEAR 3000 and PLANETS CHAMP TG3000, DSP1B\notherwise. ST011 is used for 2DAN MORITA SHOUGI, ST010 otherwise, and ST018\nand Cx4 have a single revision (icarus/heuristics/super-famicom.cpp:512-541).\nNo hash is checked, and a file shorter than the size the manifest declares leaves the\nsecond import short and the load fails. The sizes below are those declared\nby the heuristics.\n\nSuper Game Boy. Loading a .gb or .gbc file selects the folder named by the\nhigan_sfc_sgb_bios option, SGB1.sfc/ by default or SGB2.sfc/\n(nSide/target-libretro/libretro-sfc.cpp:142-145,\nnSide/target-libretro/libretro-sfc.cpp:326). program.rom is looked up in\nthat folder, then in SGB.sfc/ and Super GameBoy.sfc/, and the folder's\nmanifest is generated from its program.rom and *.boot.rom files\n(nSide/target-libretro/libretro-sfc.cpp:179-215,\nicarus/core/super-famicom.cpp:1-11). The Game Boy system then opens the boot\nROM the manifest names, lr35902.boot.rom, from the folder first and from the\nsystem directory root as a fallback (nSide/gb/system/system.cpp:54-65,\nnSide/target-libretro/program.cpp:19-81). Once a Game Boy image is loaded\nboth files are mandatory: a missing one sets the failure flag and\nretro_load_game returns false\n(nSide/target-libretro/program.cpp:75-78, nSide/target-libretro/libretro.cpp:286).\nThe SHA-1 values on the boot ROMs and on cx4.data.rom are those of the copies\nthe source tree ships in icarus/firmware/.\n",
        "profiled_date": "2026-09-17",
        "source": "https://github.com/libretro/nSide",
        "source_commit": "5b2b5da3a9654d88b2e51fb7a1637808ac601a18",
        "systems": [
          "nintendo-snes",
          "nintendo-sgb"
        ],
        "type": "libretro",
        "upstream": "https://gitlab.com/higan/higan",
        "upstream_commit": "3353efd3a1087f4d16d9b9fd2a8e465087ab8ec0"
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
