Files
libretro/emulators/fuse.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

474 lines
17 KiB
YAML

emulator: Fuse
type: libretro
core_classification: community_fork
source: "https://github.com/libretro/fuse-libretro"
upstream: "https://sourceforge.net/projects/fuse-emulator/"
profiled_date: "2026-03-23"
source_commit: "e997e2bc32c888348f862f69f2c53babfedf7791"
core_version: "1.6.0"
version_basis:
kind: file
path: "fuse/configure.ac"
pattern: 'm4_define\(\[fuse_version\],\s*\[([^\]]+)\]\)'
display_name: "Sinclair - ZX Spectrum (Fuse)"
cores:
- fuse
- fuse_libretro
systems:
- sinclair-zxspectrum
notes: |
Fuse (Free Unix Spectrum Emulator) ported to libretro. Emulates the ZX
Spectrum family: 16K, 48K, 48K NTSC, 128K, +2, +2A, +3, +3e, SE, Timex
TC2048, TC2068, TS2068, Pentagon 128K/512K/1024, and Scorpion 256K.
ROM loading is in src/compat/file.c:91-118. The core first checks an
internal table of embedded ROMs (mem_entries[]). If the ROM filename is
not found there, it falls back to the filesystem at
{system_dir}/fuse/{rom_filename} (src/compat/file.c:160-175).
Embedded ROMs cover 48K-family, 128K, +2, +3, +3e, SE, TC2048, TC2068.
Pentagon, Scorpion, and peripheral ROMs are NOT embedded and must be
placed in {system_dir}/fuse/ by the user.
Default ROM filenames are set in fuse/settings.c:209-260. Each machine
type loads its ROMs during reset via machine_load_rom() calls in the
fuse/machines directory. All ROMs are size-validated at load time
(fuse/machine.c:287).
The +2A reuses the +3 ROMs (plus3-0/1/2/3.rom) per fuse/settings.c:234-237.
The TS2068 reuses TC2068 ROMs (tc2068-0/1.rom) per fuse/settings.c:257-258.
Spectrum 16K uses 48.rom per fuse/settings.c:211.
Upstream FUSE 1.7.0 has SP0256 speech chip (sp0256-al2.rom) and Currah
uSpeech (uspeech.rom) peripherals not ported to libretro.
files:
# -- Embedded ROMs (compiled into the core, not required on disk) --
- name: "fuse/48.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: 4c42a2f075212361c3117015b107ff68
sha1: 5ea7c2b824672e914525d1d5c419d71b84a426a2
size: 16384
validation: [size]
note: "Spectrum 48K ROM. Also used for 16K and 48K NTSC. Embedded in core."
source_ref: "fuse/settings.c:216-217, fuse/machines/spec48.c:76"
- name: "fuse/128-0.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: b4d2692115a9f2924df92a3cbfb358fb
sha1: 4f4b11ec22326280bdb96e3baf9db4b4cb1d02c5
size: 16384
validation: [size]
note: "Spectrum 128K ROM 0 (editor). Embedded in core."
source_ref: "fuse/settings.c:214, fuse/machines/spec128.c:70"
- name: "fuse/128-1.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: 6e09e5d3c4aef166601669feaaadc01c
sha1: 80080644289ed93d71a1103992a154cc9802b2fa
size: 16384
validation: [size]
note: "Spectrum 128K ROM 1 (48 BASIC). Embedded in core."
source_ref: "fuse/settings.c:215, fuse/machines/spec128.c:73"
- name: "fuse/plus2-0.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: 4ed7af4636308b8a48d7a35e6c5b546b
sha1: 72703f9a3e734f3c23ec34c0727aae4ccbef9a91
size: 16384
validation: [size]
note: "Spectrum +2 ROM 0. Embedded in core."
source_ref: "fuse/settings.c:237, fuse/machines/specplus2.c:70"
- name: "fuse/plus2-1.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: b3db95931cc844efaeb82db9c171b9f3
sha1: de8b0d2d0379cfe7c39322a086ca6da68c7f23cb
size: 16384
validation: [size]
note: "Spectrum +2 ROM 1. Embedded in core."
source_ref: "fuse/settings.c:238, fuse/machines/specplus2.c:73"
- name: "fuse/plus3-0.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: 9833b8b73384dd5fa3678377ff00a2bb
sha1: e319ed08b4d53a5e421a75ea00ea02039ba6555b
size: 16384
validation: [size]
note: "Spectrum +3 ROM 0. Also used for +2A. Embedded in core."
source_ref: "fuse/settings.c:239, fuse/settings.c:243, fuse/machines/specplus3.c:193"
- name: "fuse/plus3-1.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: 0f711ceb5ab801b4701989982e0f334c
sha1: c9969fc36095a59787554026a9adc3b87678c794
size: 16384
validation: [size]
note: "Spectrum +3 ROM 1. Also used for +2A. Embedded in core."
source_ref: "fuse/settings.c:240, fuse/settings.c:244, fuse/machines/specplus3.c:196"
- name: "fuse/plus3-2.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: 3b6dd659d5e4ec97f0e2f7878152c987
sha1: 22e50c6ba4157a3f6a821bd9937cd26e292775c6
size: 16384
validation: [size]
note: "Spectrum +3 ROM 2. Also used for +2A. Embedded in core."
source_ref: "fuse/settings.c:241, fuse/settings.c:245, fuse/machines/specplus3.c:199"
- name: "fuse/plus3-3.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: a148bcc575e51389e84fdf5d555c3196
sha1: 65f031caa8148a5493afe42c41f4929deab26b4e
size: 16384
validation: [size]
note: "Spectrum +3 ROM 3. Also used for +2A. Embedded in core."
source_ref: "fuse/settings.c:242, fuse/settings.c:246, fuse/machines/specplus3.c:202"
- name: "fuse/plus3e-0.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: bc123f625e245c225f92ef05933ed134
sha1: 649fbd233490bf58b35350b0123d36caaaa011eb
size: 16384
validation: [size]
note: "Spectrum +3e ROM 0. Embedded in core."
source_ref: "fuse/settings.c:247, fuse/machines/specplus3e.c:66"
- name: "fuse/plus3e-1.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: 617364264c587d20c9fc4746c29679f2
sha1: f12198108cbb14de4f03c6695bc16d08c85ee214
size: 16384
validation: [size]
note: "Spectrum +3e ROM 1. Embedded in core."
source_ref: "fuse/settings.c:248, fuse/machines/specplus3e.c:69"
- name: "fuse/plus3e-2.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: c363e95dcd0a90e6e7f847e6e47e0179
sha1: 773633dce5ba323a9e00d9d0f9e4d8c295df7c87
size: 16384
validation: [size]
note: "Spectrum +3e ROM 2. Embedded in core."
source_ref: "fuse/settings.c:249, fuse/machines/specplus3e.c:72"
- name: "fuse/plus3e-3.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: a148bcc575e51389e84fdf5d555c3196
sha1: 65f031caa8148a5493afe42c41f4929deab26b4e
size: 16384
validation: [size]
note: "Spectrum +3e ROM 3. Same as plus3-3.rom. Embedded in core."
source_ref: "fuse/settings.c:250, fuse/machines/specplus3e.c:75"
- name: "fuse/se-0.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: fb3f86eb1e5a695d9c50c124e7cfb875
sha1: 8608328d7dd66602a4846f046b24fed500f7d828
size: 16384
validation: [size]
note: "Spectrum SE ROM 0. Embedded in core."
source_ref: "fuse/settings.c:257, fuse/machines/spec_se.c:89"
- name: "fuse/se-1.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: 88de4a3129086f34bb9ca559acc51e6c
sha1: 3be5de57dd3bd0a9d15c57cabe9179afe2906a52
size: 16384
validation: [size]
note: "Spectrum SE ROM 1. Embedded in core."
source_ref: "fuse/settings.c:258, fuse/machines/spec_se.c:92"
- name: "fuse/tc2048.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: 9dd7ecf784a6c04265c073c236f5fadb
sha1: febb2d495b6eda7cdcb4074935d6e9d9f328972d
size: 16384
validation: [size]
note: "Timex TC2048 ROM. Embedded in core."
source_ref: "fuse/settings.c:260, fuse/machines/tc2048.c:80"
- name: "fuse/tc2068-0.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: 55d462fccc6c536037404ef4ced08bec
sha1: 1446cb2780a9dedf640404a639fa3ae518b2d8aa
size: 16384
validation: [size]
note: "Timex TC2068 ROM 0. Also used for TS2068. Embedded in core."
source_ref: "fuse/settings.c:261, fuse/settings.c:263, fuse/machines/tc2068.c:138"
- name: "fuse/tc2068-1.rom"
system: sinclair-zxspectrum
required: false
hle_fallback: true
md5: 575d203c6e15e679fba0b73f854ec7a2
sha1: 7e265a2c1f621ed365ea23bdcafdedbc79c1299c
size: 8192
validation: [size]
note: "Timex TC2068 ROM 1 (EXROM). Also used for TS2068. Embedded in core."
source_ref: "fuse/settings.c:262, fuse/settings.c:264, fuse/machines/tc2068.c:141"
# -- External ROMs (NOT embedded, must be in {system_dir}/fuse/) --
# Pentagon family
- name: "fuse/128p-0.rom"
system: sinclair-zxspectrum
required: false
size: 16384
validation: [size]
note: "Pentagon 128K/512K/1024 ROM 0, loaded by the Pentagon resets (fuse/machines/pentagon.c:131-133). Without it that model cannot be selected and the core falls back to its built-in 48K machine (fuse/machine.c:150-162)."
source_ref: "fuse/settings.c:226, fuse/settings.c:230, fuse/settings.c:234, fuse/machines/pentagon.c:131"
- name: "fuse/128p-1.rom"
system: sinclair-zxspectrum
required: false
size: 16384
validation: [size]
note: "Pentagon 128K/512K/1024 ROM 1, loaded by the Pentagon resets (fuse/machines/pentagon.c:134-136). Without it that model cannot be selected and the core falls back to its built-in 48K machine (fuse/machine.c:150-162)."
source_ref: "fuse/settings.c:227, fuse/settings.c:231, fuse/settings.c:235, fuse/machines/pentagon.c:134"
- name: "fuse/trdos.rom"
system: sinclair-zxspectrum
required: false
size: 16384
validation: [size]
note: "TR-DOS ROM (Beta 128 disk interface), loaded by the Pentagon resets (fuse/machines/pentagon.c:137-139) and by the Beta 128 interface (rom_beta128, fuse/settings.dat:253). Without it that model cannot be selected and the core falls back to its built-in 48K machine (fuse/machine.c:150-162)."
source_ref: "fuse/settings.c:228, fuse/settings.c:232, fuse/settings.c:236, fuse/machines/pentagon.c:137"
- name: "fuse/gluck.rom"
system: sinclair-zxspectrum
required: false
size: 16384
validation: [size]
note: "Gluck ROM, loaded by the Pentagon 512K and 1024 resets (fuse/machines/pentagon512.c:82-84, pentagon1024.c:78-80). Without it that model cannot be selected and the core falls back to its built-in 48K machine (fuse/machine.c:150-162)."
source_ref: "fuse/settings.c:229, fuse/settings.c:233, fuse/machines/pentagon512.c:82"
# Scorpion
- name: "fuse/256s-0.rom"
system: sinclair-zxspectrum
required: false
size: 16384
validation: [size]
note: "Scorpion 256K ROM 0, loaded by the Scorpion reset (fuse/machines/scorpion.c:76-78). Without it that model cannot be selected and the core falls back to its built-in 48K machine (fuse/machine.c:150-162)."
source_ref: "fuse/settings.c:252, fuse/machines/scorpion.c:76"
- name: "fuse/256s-1.rom"
system: sinclair-zxspectrum
required: false
size: 16384
validation: [size]
note: "Scorpion 256K ROM 1, loaded by the Scorpion reset. Without it that model cannot be selected and the core falls back to its built-in 48K machine (fuse/machine.c:150-162)."
source_ref: "fuse/settings.c:253, fuse/machines/scorpion.c:79"
- name: "fuse/256s-2.rom"
system: sinclair-zxspectrum
required: false
size: 16384
validation: [size]
note: "Scorpion 256K ROM 2, loaded by the Scorpion reset. Without it that model cannot be selected and the core falls back to its built-in 48K machine (fuse/machine.c:150-162)."
source_ref: "fuse/settings.c:254, fuse/machines/scorpion.c:82"
- name: "fuse/256s-3.rom"
system: sinclair-zxspectrum
required: false
size: 16384
validation: [size]
note: "Scorpion 256K ROM 3 (TR-DOS), loaded by the Scorpion reset. Without it that model cannot be selected and the core falls back to its built-in 48K machine (fuse/machine.c:150-162)."
source_ref: "fuse/settings.c:255, fuse/machines/scorpion.c:85"
# Peripheral ROMs (optional, only needed if peripheral is enabled)
- name: "fuse/if1-2.rom"
system: sinclair-zxspectrum
required: false
size: 8192
validation: [size]
note: "Interface 1 ROM (edition 2). Loaded by fuse/peripherals/if1.c:403."
source_ref: "fuse/settings.c:221, fuse/peripherals/if1.c:404"
- name: "fuse/disciple.rom"
system: sinclair-zxspectrum
required: false
md5: 78e61a2a02121873c1756b21fd1398b1
sha1: 9a75ed4b293f968985be4c9aa893cd88276d1ced
size: 8192
validation: [size]
note: "DISCiPLE disk interface ROM. Bundled in repo but not in mem_entries[]."
source_ref: "fuse/settings.c:220, fuse/peripherals/disk/disciple.c:279"
- name: "fuse/plusd.rom"
system: sinclair-zxspectrum
required: false
md5: 42e5de16fb5e50082bb954ec7ce45851
sha1: 6b841dc5797ef7eb219ad455cd1e434ca3b9d30d
size: 8192
validation: [size]
note: "+D disk interface ROM. Bundled in repo but not in mem_entries[]."
source_ref: "fuse/settings.c:251, fuse/peripherals/disk/plusd.c:239"
- name: "fuse/didaktik80.rom"
system: sinclair-zxspectrum
required: false
size: 14336
validation: [size]
note: "Didaktik 80 disk interface ROM. Not embedded."
source_ref: "fuse/settings.c:219, fuse/peripherals/disk/didaktik.c:236"
- name: "fuse/opus.rom"
system: sinclair-zxspectrum
required: false
size: 8192
validation: [size]
note: "Opus Discovery disk interface ROM. Not embedded."
source_ref: "fuse/settings.c:225, fuse/peripherals/disk/opus.c:210"
- name: "fuse/mf1.rom"
system: sinclair-zxspectrum
required: false
size: 8192
validation: [size]
note: "Multiface 1 ROM. Not embedded."
source_ref: "fuse/settings.c:222, fuse/peripherals/multiface.c:224"
- name: "fuse/mf128.rom"
system: sinclair-zxspectrum
required: false
size: 8192
validation: [size]
note: "Multiface 128 ROM. Not embedded."
source_ref: "fuse/settings.c:223, fuse/peripherals/multiface.c:225"
- name: "fuse/mf3.rom"
system: sinclair-zxspectrum
required: false
size: 8192
validation: [size]
note: "Multiface 3 ROM. Not embedded."
source_ref: "fuse/settings.c:224, fuse/peripherals/multiface.c:226"
- name: "fuse/speccyboot-1.4.rom"
system: sinclair-zxspectrum
required: false
md5: c54aa8f374b0971f51546c29d5d1eba1
sha1: 16af6f052b38a027dd49ba6e96e3a59d16b62672
size: 8192
validation: [size]
note: "SpeccyBoot ethernet ROM. Bundled in repo but not in mem_entries[]."
source_ref: "fuse/settings.c:259, fuse/peripherals/speccyboot.c:148"
- name: "fuse/ttx2000s.rom"
system: sinclair-zxspectrum
required: false
size: 8192
validation: [size]
note: "TTX2000S teletext adapter ROM. Not embedded."
source_ref: "fuse/settings.c:265, fuse/peripherals/ttx2000s.c:198"
- name: "fuse/usource.rom"
system: sinclair-zxspectrum
required: false
size: 8192
validation: [size]
note: "Currah uSource ROM. Not embedded."
source_ref: "fuse/settings.c:266, fuse/peripherals/usource.c:129"
platform_details:
bios_mapping:
source_ref: "src/compat/file.c:55-89, 129-223"
note: |
ROM resolution order in compat_file_open():
1. Check mem_entries[] (18 embedded ROMs compiled as .h arrays)
2. If not found, try {system_dir}/fuse/{filename} on filesystem
The path is constructed by concatenating system_dir + "/fuse" + path
where path includes the leading slash from fuse's internal path.
embedded_roms:
source_ref: "src/compat/file.c:55-73"
note: |
18 ROMs embedded in the binary via .h headers generated from .rom files:
48.rom, 128-0.rom, 128-1.rom, plus2-0.rom, plus2-1.rom,
plus3-0/1/2/3.rom, plus3e-0/1/2/3.rom, se-0.rom, se-1.rom,
tc2048.rom, tc2068-0.rom, tc2068-1.rom.
disciple.rom, plusd.rom, speccyboot-1.4.rom are present in the repo
fuse/roms/ directory but NOT in mem_entries[], so they are loaded
from the filesystem only.
machine_rom_map:
source_ref: "fuse/settings.c:209-260, fuse/machines/spec48.c, fuse/machines/spec128.c"
note: |
Spectrum 16K: 48.rom (1 ROM)
Spectrum 48K: 48.rom (1 ROM)
Spectrum 48K NTSC: 48.rom (1 ROM)
Spectrum 128K: 128-0.rom, 128-1.rom (2 ROMs)
Spectrum +2: plus2-0.rom, plus2-1.rom (2 ROMs)
Spectrum +2A: plus3-0.rom, plus3-1.rom, plus3-2.rom, plus3-3.rom (4 ROMs)
Spectrum +3: plus3-0.rom, plus3-1.rom, plus3-2.rom, plus3-3.rom (4 ROMs)
Spectrum +3e: plus3e-0/1/2/3.rom (4 ROMs)
Spectrum SE: se-0.rom, se-1.rom (2 ROMs)
Timex TC2048: tc2048.rom (1 ROM)
Timex TC2068: tc2068-0.rom, tc2068-1.rom (2 ROMs)
Timex TS2068: tc2068-0.rom, tc2068-1.rom (2 ROMs, same files)
Pentagon 128K: 128p-0.rom, 128p-1.rom, trdos.rom (3 ROMs)
Pentagon 512K: 128p-0.rom, 128p-1.rom, trdos.rom, gluck.rom (4 ROMs)
Pentagon 1024: 128p-0.rom, 128p-1.rom, trdos.rom, gluck.rom (4 ROMs)
Scorpion 256K: 256s-0.rom, 256s-1.rom, 256s-2.rom, 256s-3.rom (4 ROMs)
rom_copyright:
source_ref: "fuse/roms/README.copyright"
note: |
Most ROMs are copyright Amstrad. Amstrad allows free distribution but
retains copyright. Selling ROMs standalone is not permitted. SE ROMs
are GPLv2+. DISCiPLE/+D ROMs are copyright Datel, distribution allowed.
SpeccyBoot ROM is MIT licensed.