Fuse - the Free Unix Spectrum Emulator
What is it?
Fuse (the Free Unix Spectrum Emulator) was originally, and somewhat unsurprisingly, a ZX Spectrum emulator for Unix. However, it has now also been ported to Mac OS X, which may or may not count as a Unix variant depending on your advocacy position. It has also been ported to Windows, the Wii, AmigaOS and MorphOS, which are definitely not Unix variants.
What features does it have?
- Accurate 16K, 48K (including the NTSC variant), 128K, +2, +2A and +3 emulation.
- Working +3e, SE, TC2048, TC2068, TS2068, Pentagon 128, Pentagon "512" (Pentagon 128 modified for extra memory), Pentagon 1024 and Scorpion ZS 256 emulation.
- Runs at true Speccy speed on any computer you're likely to try it on.
- Support for loading from .tzx files, including accelerated loading.
- Sound (on Windows and Mac OS X, and on systems supporting ALSA, the Open Sound System, SDL, PulseAudio or OpenBSD/Solaris's /dev/audio).
- Kempston joystick emulation.
- Emulation of the various printers you could attach to the Spectrum.
- Support for the RZX input recording file format, including 'competition mode'.
- Emulation of the Currah μSource, DivIDE, DivMMC, Interface 1, Kempston mouse, Multiface One/128/3, Spectrum +3e, ZXATASP, ZXCF and ZXMMC interfaces.
- Emulation of the Covox, Fuller audio box, Melodik and SpecDrum audio interfaces.
- Emulation of the Beta 128, +D, Didaktik 80/40, DISCiPLE and Opus Discovery disk interfaces.
- Emulation of the Spectranet and SpeccyBoot network interfaces.
- Emulation of the TTX2000S teletext interface.
- Support for the Recreated ZX Spectrum Bluetooth keyboard.
What is it lacking?
- Quite a lot! However, it's a lot better than it used to be...
Downloads
Fuse is licensed under the GNU General Public License, version 2 or later. Please read this before downloading Fuse if you're not already familiar with it.
Unix
Packages are available for some Unix distributions; in general, any problems which are specific to the packages should be sent to the package maintainer.
Packages of older versions of Fuse are also available for some other distributions:
- Nokia's Maemo platform has a port of 1.0.0 available by Alberto Garcia.
macOS
A native port to macOS by Fredrick Meunier is available on its own SourceForge project here, as well as a Spotlight importer for Mac OS X 10.4 Tiger users. Alternatively, the original version of Fuse will compile on OS X 10.3 (Panther) or later.
Windows
A port to Windows of 1.6.0 by Sergio Baldoví is available here, and the utilities are available here.
Android
BogDan Vatra has ported Fuse 1.3.2 to Android OS, which could run on smartphones, tablets and TVs. Sources are available from GitHub and binaries from Google Play.
Haiku
Adrien Destugues has ported Fuse 1.5.6 to Haiku, available from haikuports as app-emulation/fuse and app-emulation/fuse-utils.
AmigaOS 4
Chris Young has ported Fuse 1.0.0.1 to AmigaOS 4, with binaries available from Aminet as misc/emu/fuse.lha.
MorphOS
Q-Master has ported Fuse 0.10.0.1 to MorphOS, with binaries available from AmiRUS.
PSP
Akop Karapetyan has ported Fuse to the PSP. Binaries and source, based on Fuse 0.10.0.1, are available from the Fuse PSP page.
Wii
A Wii port, based on work by Björn Giesler, is available from WiiBrew. This is based on what is essentially 0.10.0.2.
Gizmondo
A port of 0.9.0 to the Gizmondo tablet is available. The source was available via csie.org.
GP2X
Ben O'Steen has made a GP2X port, based on Fuse 0.6. Binaries and source are available from his homepage.
XBox
Crabfists's has made an Xbox port, based on Fuse 0.6. Binaries and source are available from the FuseX project at SourceForge.
OpenDingux
Pedro Luis Rodríguez González has made an OpenDingux port, based on Fuse 1.5.7. Binaries and source are available from GitHub.
PocketPC
Anders Holmberg's ported Fuse 0.4 to the PocketPC as PocketClive.
RetroFW
Pedro Luis Rodríguez González has made a RetroFW port, based on Fuse 1.5.7. Binaries and source are available from GitHub.
Windows Mobile Smartphone
Keith Orbell's then ported PocketClive to the Smartphone as FuseSP.
Source
Installing Fuse
- First, check the requirements below and ensure all the libraries you want/need are installed.
- Secondly, install libspectrum.
- Get the source code
(PGP signature)
.
- The utilities which were previously packaged with Fuse are now available in their own package (PGP signature). Note that
you'll still need libspectrum installed to run these.
- The source code releases above are signed with the Fuse Release Key, ID D0767AB9, which has fingerprint 064E 0BA9 688F 2699 3267 B1E5 1043 EEEB D076 7AB9. This is different from the key used to sign the 0.6.0(.1) releases as I forgot the passphrase for that key :-(.
Requirements
- Required:
-
- X, SDL, svgalib or framebuffer support. If you have GTK installed, you'll get a (much) nicer user interface under X.
- libspectrum: the Spectrum emulator file format and information library.
- Optional:
-
- libgcrypt: the ability to digitally sign RZX files (note that Fuse requires version 1.1.42 or later).
- libpng: the ability to save screenshots.
- libxml2: the ability to load and save Fuse's current configuration and capture BASIC video functions to SVG.
- SDL or libjsw: allow joystick input to be used (not required for joystick emulation).
- zlib: support for compressed RZX files and zipped files.
- libbzip2: support for certain compressed files.
- libaudiofile: support for loading from .wav files.
- Versions previous to 0.10.0 used John Elliott's lib765 and libdsk for the +3 support. 0.10.0 and newer include this support natively, so these libraries are no longer necessary (or used).
What's new?
1.6.0
- Add TTX2000S emulation
- Experimental PulseAudio sound driver
- Fix activation of joystick and IF2 peripherals when loading a snapshot
- GTK/Win32: New higher resolution keyboard picture on GTK and win32 UIs
- GTK: Add Fuse icon to the about dialog and the main window
- GTK: Load/save binary dialog remembers last values
- GTK 3: Improve moving and sizing Fuse's window under Wayland
- GTK 3: Fix kempston mouse values on Wayland
- GTK 3: Fix bug when resizing from 2x to 3x
- SDL: Fix crash when using dispmanx backend on the Raspberry Pi
- SDL: Allow forcing fullscreen mode when SDL doesn't report available screen modes
- WidgetUI: New dialog to load/save binary data
- WidgetUI: Enable HOME and END keys in menus
- WidgetUI: Use monospaced characters on memory browser
- WidgetUI: Fix crash when trying to overwrite read-only files
- Xlib: Try to keep graphic filter when the user resize the window
- Fix display corruption with HQ 3x scaler
- Fix antialiasing effect of AdvMAME3x scaler
- Add 4x, TV 4x, Pal TV 4x and HQ 4x scalers on GTK, SDL, win32 and Xlib UIs
- Allow screenshots with TV 3x, PAL TV and Timex 1.5x scalers
- Various minor bugfixes
1.5.7
- GTK+ 3: Make the offset entry wider in memory browser
- GTK+: Remove duplicated surface creation code
- GTK+: Remove use of deprecated gtk_device_(un)grab functions
- GTK+/Win32: Add *.bin as an allowed filetype to file selectors and amend .fmf filetype
- Improve Fuse's Kempston mouse handling under GTK+ 3.x
- "Save binary" command can now save 65536 bytes again (regression introduced in 1.5.6)
- Various minor bugfixes
1.5.6
- Z80 flags register is now correct after SCF and CCF
- "Variant" Alkatraz loaders (e.g. Gauntlet 3 and Shadow Dancer), "Variant" Search Loader programs (e.g. Lotus Esprit Turbo Challenge and Space Crusade) and Dinaload loaders (e.g. Astro Marine Corps) are now accelerated
- More improvements disabling phantom typist after finishing loading TAP or standard ROM TZX files
- Saving and loading binary data no longer increments tstate count or triggers breakpoints
- Stop RZX playback/recording on machine reset/change
- Various minor bugfixes
1.5.5
- Improve sound accuracy on Unix 64 bit systems
- Allow the use of real joystick hats/dpads in the SDL joystick code
- Various minor bugfixes
1.5.4
- Add *.FMF as an allowed filetype to file selectors
- Save SCR from current display file
- Use 44.1KHz as default sound frequency
- Upgrade to libspectrum 1.4.3 to fix TC2048 and TC2068 timings regression
- Various minor bugfixes
1.5.3
- Disable inactive peripherals after loading a snapshot
- Re-enable sound after phantom typist finishes loading TAP, standard ROM TZX or +3 DSK images
- Upgrade to libspectrum 1.4.2 to fix writing RZX files containing a snapshot which cannot be compressed
1.5.2
- Emulate ROM bug loading zero length blocks when using tape traps
- Fix the format of double-sided +3 disks
- Spectrum reset is accelerated when phantom typist is enabled and a file is loaded from the menu
- Add options UI for phantom typist
- GTK+ 3 UI: Memory browser dialog allows to go to specific offset
1.5.1
- Prevent crash when we try to disassemble an instruction with many DD or FD prefixes
- Fix crash when setting debugger variables
- Prevent crash when we try to profile an instruction with many DD or FD prefixes
- GTK+ UI: Improve behaviour of default button on dialogs
- GTK+ and win32 UIs: Support hex numbers in load/save binary and pokefinder dialogs
- SDL UI: Allow to select the video mode used in full-screen
1.5.0
- Autoload snapshots replaced by a "phantom typist" which types LOAD "" or similar
- Alkatraz loaders (e.g. Cobra and Fairlight) are now accelerated
- Debugger: Ensure conditional timed breakpoints work correctly
Development
If you just want news of new versions and the like, the (low volume) fuse-emulator-announce list is available. If you're interested in the development of Fuse, this is coordinated via the fuse-emulator-devel list and the project page on SourceForge.
The latest version of Fuse is always available by checking out the 'master' branch from the git repository on SourceForge. Note that this isn't guaranteed to compile, let alone work properly. Also, don't expect any support for this version! (You'll also need libspectrum from git; this is from the libspectrum repository). Similarly, the utilities are available in the fuse-utils repository.
One thing which isn't in the SourceForge tracking system (and is now very outdated):
- David Gardner has produced a patch to give XVideo support for the Xlib UI, allowing arbitrary sized windows.
Are there any related projects?
- libspectrum is the library used by Fuse to handle various file formats.
- Mike Wynne's ZX81 emulator, EightyOne is also using Fuse's Z80 core.
- Matthew Westcott's JSSpeccy uses a Z80 core based on translating Fuse's core to Javascript.
- Alexander Shabarshin's SPRINT, an emulator of the Peters Plus super-Speccy, the Sprinter. SPRINT is using Fuse's Z80 core for its CPU emulation.
- z80ex, a Z80 emulation library based on Fuse's Z80 core, used by zemu and PocketSpeccy.