emulator: SUPER ZSNES type: standalone core_classification: other source: "https://www.zsnes.com" upstream: "https://www.zsnes.com" version_source: url: "https://www.zsnes.com/" pattern: 'Latest Release Notes \((v[0-9.]+[a-z]?)\)' profiled_date: "2026-10-20" core_version: "v0.320" display_name: "Nintendo - SNES / SFC (SUPER ZSNES)" cores: - superzsnes - SUPERZSNES systems: - nintendo-snes mode: standalone notes: | Super Famicom emulator by zsKnight and _Demo_, written from scratch with a GPU-rendered PPU and unrelated to the ZSNES codebase. Shipped as binaries only, for Windows, macOS, Linux, Android and iOS. Since v0.320 the desktop builds are Unity IL2CPP: the emulator is compiled into GameAssembly with its names in il2cpp_data/Metadata/global-metadata.dat, and the per-game tables are serialized into the level0 scene. The build calls itself v0.320b. The Windows and Linux archives (SuperZSNES_v0.320.zip, sha1 c934d6b74a050ef8857595a0529ee0e0006e2d93, and SuperZSNES_v0.320.tar.gz, sha1 7630f6bbcda789a329ee4198ec11934feaf56e32, from zsnes.com/files) carry the same VersionNo object in level0. One NEC uPD7725 interpreter serves every cartridge whose header declares a DSP. RomLoader.GetROMType reads the cartridge type byte at $FFD6 and returns COProcessorType.DSP when the low nibble is 3 to 8 and the high nibble is 0, or when the high nibble is F and the subtype byte at $FFBF is 1 or 2. MainMemoryMap.InitSpecialChips builds the DSP1 object for that type. The DSP1 constructor picks the filename from VersionNo.dspDetections, where each name carries a list of CRC32 values of the 21 raw header title bytes, taken as Latin-1 and re-encoded UTF-8, falling back to dsp1b.rom when no entry matches. Words are assembled little endian, 2048 24-bit program words from offset 0 then 1024 16-bit data words from offset 6144, and a shorter file leaves the remaining words at zero. Three locations are tried in order: the folder holding the loaded ROM, the Unity persistent data folder (ZEMU Software Inc./SUPERZSNES), then the folder holding the executable. None of them goes through the srm and bps path overrides. When all three miss, a "Need DSP ROM" dialog names the file and the chip runs on a zero-filled 8192-byte buffer. The image is kept across resets and reloaded only when another name is selected. No other file is read. SA-1, S-DD1, Super FX, OBC-1 and Cx4 are emulated from code alone, the Cx4 data ROM coming from CX4DataRom.GenerateDataRom. SPC7110, S-RTC, Super Game Boy and the ST01x and ST018 enum entries build no chip. The SPC700 IPL is a 64-byte array in CPUSPC700, and the built-in enhancement data, the audio replacement data and testgame.smc are Unity resources inside the build. Save RAM, save states, cheats, bps patches, MSU-1 packs and the .zsmod, .zsaudiomod and .zlua enhancement files are all named after the loaded ROM. files: # NEC uPD7725 microcode, program and data ROM in one file. # The name is chosen by CRC32 of the 21-byte header title, and dsp1b.rom is the # default when no entry in the table matches. - name: "dsp1b.rom" aliases: ["SNES_dsp1b.rom"] system: nintendo-snes description: "NEC uPD7725 DSP-1B microcode" required: true size: 8192 crc32: 465c4e1c validation: [crc32] source_ref: "GameAssembly DSP1..ctor (name and expected CRC32 0x465C4E1C, compare, warn on mismatch), DSP1Core.LoadROM (8192-byte layout)" note: "Default for every DSP cartridge with no table entry, so it covers DSP-1 and DSP-1A titles as well. A mismatched CRC32 warns and the data is used anyway." - name: "dsp2.rom" aliases: ["SNES_dsp2.rom"] system: nintendo-snes description: "NEC uPD7725 DSP-2 microcode" required: true size: 8192 source_ref: "GameAssembly DSP1..ctor (table lookup, no CRC32 check), SUPERZSNES_Data/level0 (VersionNo.dspDetections entry 0, title CRC32 0x84690f8b)" note: "Selected for header title 'DUNGEON MASTER' (Dungeon Master)." - name: "dsp3.rom" aliases: ["SNES_dsp3.rom"] system: nintendo-snes description: "NEC uPD7725 DSP-3 microcode" required: true size: 8192 source_ref: "GameAssembly DSP1..ctor (table lookup, no CRC32 check), SUPERZSNES_Data/level0 (VersionNo.dspDetections entry 1, title CRC32 0xfa7f8076)" note: "Selected for the half-width katakana header title of SD Gundam GX, 'SD' then $B6 $DE $DD $C0 $DE $D1 then 'GX'." - name: "dsp4.rom" aliases: ["SNES_dsp4.rom"] system: nintendo-snes description: "NEC uPD7725 DSP-4 microcode" required: true size: 8192 source_ref: "GameAssembly DSP1..ctor (table lookup, no CRC32 check), SUPERZSNES_Data/level0 (VersionNo.dspDetections entry 2, title CRC32 0x42578645)" note: "Selected for header title 'TOP GEAR 3000' (Top Gear 3000)." # Seta parts. The table routes their cartridges to the same uPD7725 # interpreter, which reads the first 8192 bytes and checks neither size nor # hash. - name: "st010.rom" aliases: ["SNES_st010.rom"] system: nintendo-snes description: "Seta ST010 microcode" required: true source_ref: "GameAssembly DSP1..ctor (table lookup, no CRC32 check), SUPERZSNES_Data/level0 (VersionNo.dspDetections entry 3, title CRC32 0x04e7aca6)" note: "Selected for header title 'F1 ROC II' with $00 as the 21st byte (F1 ROC II: Race of Champions)." - name: "st011.rom" aliases: ["SNES_st011.rom"] system: nintendo-snes description: "Seta ST011 microcode" required: true source_ref: "GameAssembly DSP1..ctor (table lookup, no CRC32 check), SUPERZSNES_Data/level0 (VersionNo.dspDetections entry 4, title CRC32 0xc96d71c1)" note: "Selected for header title '2DAN MORITA SHOUGI' with $00 as the 21st byte (Hayazashi Nidan Morita Shougi)." - name: "st018.rom" aliases: ["SNES_st018.rom"] system: nintendo-snes description: "Seta ST018 firmware" required: true source_ref: "GameAssembly DSP1..ctor (table lookup, no CRC32 check), SUPERZSNES_Data/level0 (VersionNo.dspDetections entry 5, title CRC32 0x85885c5e)" note: "Selected for header title 'NIDAN MORITASHOGI2' (Hayazashi Nidan Morita Shougi 2)."