Releases: dotkoval/xpeccy-plus
Release list
Nightly build
Automated build from the latest commit on main (7a96d8d, 2026-09-28). May be unstable - see Releases for the latest stable version.
Xpeccy+ 2026.5.1
Xpeccy+ 2026.5.1
A fork of Xpeccy by SAM style. All the emulation code comes from that project. On top of 2026.5:
-
Tapes load faster and more of them load. Fast loading takes about half the time and shows the loading screen as it comes in, and Flash loading now also works for games that carry their own copy of the ROM loader.
-
Every TZX block type is played. The reader follows the spec in full, so tapes that lost blocks or reset after loading - Dark Fusion and 48 Irons among them - now start.
-
Tape automatics you can leave on. Auto play and stop follow the loader, known or not, a keyboard scan no longer starts the tape, and the tape stops once the game has taken over.
-
48K and 128K timings match the hardware. Richard Butler's timing tests pass in full, the 128K with late timings: INT is now a level as on a real ULA, and contention, ports and the floating bus land a tick later.
-
No Kempston joystick on the stock 48K, 128K and +2, as they shipped. Switch it on in the machine's settings for a game that wants one.
Also in this release: emulation is about 15% faster in fast mode, the PSG clock follows the chip type when switching between AY, TurboSound and TurboSound FM, SAA1099 is back among the Sound devices, a .z80 snapshot loads onto a reset machine as a .sna does, and the debugger's stack panel has arrow buttons to step it a word at a time.
Full list of changes in CHANGELOG.md.
Xpeccy+ 2026.5
Xpeccy+ 2026.5
A fork of Xpeccy by SAM style. All the emulation code comes from that project. On top of 2026.4.1:
Highlights
- TurboSound FM, rebuilt from scratch. The old YM2203 emulation is gone; the FM half now runs on Aaron Giles' ymfm core, clocked the way the chip is, sitting at the level it has against the AY on a real board, and a track that speaks through the chip's CSM mode says its words. The rest of the sound came along with it: every AY and YM plays in tune, the beeper has its proper share of the mix, and two output filters — anti-alias and DC — are on by default.
- Fast loading that copes with capricious loaders. One switch in the tape player: while a loader reads the tape the machine runs flat out and silent, the loading screen still comes in, and the game starts at normal speed from its first frame — R-Type takes about four seconds. Loaders that time the tape themselves load too, DeciLoader and O.T.L.A. among them, along with ATF, Deflektor and Technician Ted.
- An interface reorganized around how it is used. The machine's devices sit on the Machine page of Options, one row each; what is in the drives is in the right-click menu, where the Disk manager lists a TR-DOS disk and copies files out; the tape player is laid out like a deck and holds the whole tape, WAV in and out included; the Reset menu names the starts the machine really has. Some of it will feel unfamiliar at first — it pays off quickly.
- Two new debugger panels, both able to leave the debugger. The sound panel has a tab per chip, every AY register, every FM operator, a meter per channel and an oscillogram fine enough to count a beeper's edges. The screen panel previews the main and shadow screens in the machine's own colors, heads each with its page, and reads out any dot you point at. Each moves into a window of its own that keeps following the machine after the debugger is closed.
- Z80 and hardware emulation at a very high level. The undocumented flags are right down to
SCF/CCFandBIT n,r, and every variant of Rak's Z80 test suite passes. The floating bus, ULA snow, issue 2 and issue 3 boards and a Pentagon's power-on memory are all there. - Three times faster, with nothing emulated differently. Every frame, sample and byte comes out as before. Fast forward reaches x18 to x30 on most machines, one slider goes from slow motion to an overclocked CPU, and Alt+T switches the turbo the board really has.
Also in this release: the ALF TV Game console is back with its ROM bundled; snapshots save as .z80, and .sna, .z80 and RZX all come back whole; a breakpoint can write what it caught to the log; ZX Evolution and TSConf keep their NVRAM settings; a program that drives the SD card itself works; what you change on a machine stays with it; the mouse behaves in a virtual machine and over a remote desktop; and the machines that are not ZX Spectrum are gone from the tree.
A huge thank you to Volutar for his constant, constructive feedback throughout this release. The sound quality in particular is very much his doing — the filters, the mix and the new sound panel all came out of his testing and his ideas.
Full list of changes in CHANGELOG.md.
Xpeccy+ 2026.4.1
Xpeccy+ 2026.4.1
A fork of Xpeccy by SAM style. All the emulation code comes from that project. On top of 2026.4:
-
ZX Evolution is one machine again, and it works. The two BaseConf entries split by firmware generation are gone — the one that remains runs either, and ships with EVO Reset Service 0.61 FE and NEO-DOS 0.60. F10 opens the Magic Service over a running program and goes back to it. The text mode is drawn in the right place, and at all. A drive the firmware marks virtual is served the way a real BaseConf serves it, while a drive with a disk in it is left alone. A held key repeats at the rate its own keyboard runs at. It boots NedoOS from an SD image end to end.
-
The machines got back the settings they lost in 2026.4. Replacing profiles with machine definitions quietly dropped them: every clone lost its YM sound chip, its Covox, its mouse and Kempston buttons, and the hard disk interface it comes with — SMUC on a Scorpion, Nemo on a ZX Evo — and ZX Evo lost its two-chip TurboSound. The AY clock and the stereo channel order follow the machine again as well, instead of being one setting shared by every machine.
-
The SD card and the hard disks were lost whenever the machine was switched, so booting from them failed while the settings still named the image. That was every machine, not only ZX Evo.
Also in this release: the 320x200 modes of the ATM family are centered on every machine that has them, applying settings no longer wipes the text mode font, ZX Evo starts with a pattern in its memory the way real hardware does and reports itself as Xpeccy+ rather than a 2012 FPGA build, and an NMI no longer leaves the Z80 stuck in HALT.
Full list of changes in CHANGELOG.md.
Xpeccy+ 2026.4
Xpeccy+ 2026.4
A fork of Xpeccy by SAM style. All the emulation code comes from that project. On top of 2026.3.2:
Highlights
- Profiles are gone: a machine is a machine again. The emulator knows what a 48K, a 128K, a Pentagon or a Scorpion is, and what you change on one is kept for that one — so an update can fix a machine without touching your settings. ROM sets went the same way: a machine carries its ROMs, one row per slot, and another TR-DOS is another file rather than another set. Set a machine up the way you like it, Save machine, and it stands in the list beside the ones that ship. Your old profiles come across on first start.
- Xpeccy+ is a ZX Spectrum emulator only now. MSX, Game Boy, NES, Commodore 64, BK0010, IBM PC, PC-9801, Specialist and ALF are not built any more, and neither is anything only they used — in the machine, CPU, disk and hard disk lists and in the debugger. The code is still in the tree for anyone who wants it, behind
-DZXONLY=0. - Opening a file can switch to the machine that runs it. A
.spggoes to the TSConf, a 128K snapshot off the 48K, a TR-DOS disk to a Pentagon, a.dskto the +3. Options → Media → File types sets it per format — switch only when needed, ask, keep the machine, or always use one. The window title names the tape, disk or snapshot actually in use, and that image can go straight into Favorites from the menu or a hotkey. - The sound stopped clicking. Part of the sound was never being made at all on some machines, which no latency setting could paper over; the buffer keeps a reserve now and holds it against the drift between the sound card's clock and the computer's. Sound also follows the card's own sample rate instead of asking for a fixed one, and the latency looks after itself — 30 ms to start with, up when the buffer runs thin, back down after a clean spell.
- The picture is a fixed size again, with the screen in the middle of it. The border is a choice of five sizes plus overscan instead of a percentage, and it starts on the whole PAL frame, which is what a TV of the day showed. Every machine shows the same size picture, so switching machines no longer moves it around; in a window it is always drawn at a whole number of pixels per dot, and fullscreen fills the sides of a wide screen with the machine's own border instead of black bars.
- Run ahead, experimental, makes the machine feel about 20 ms quicker per frame — the emulator works a frame or two beyond what is on screen. Options → Xpeccy+ → Emulation, off by default. And a log, for when something goes wrong and a screenshot is not enough:
--log, or Options → Xpeccy+ → General, and every event lands inlogs/beside the emulator with the frame and T-state it happened on.
Also in this release: disks with loaders of their own work again (CHORDOUT, Battle Command, the Profi's service ROM), the Profi's keyboard takes the layout of its own PC keyboard with Grab keyboard on, the tape player's block list says what is on the tape, the virtual keyboard can be resized and docked under the window, a gamepad keeps its setting while it is unplugged and responds to a press right away, the interleave list shows the sector order TR-DOS formats with, .z80 snapshots from a +2, +2A or +3 load, and Options says what every setting does when the mouse rests on it.
Full list of changes in CHANGELOG.md.
Xpeccy+ 2026.3.2
Xpeccy+ 2026.3.2
A fork of Xpeccy by SAM style. All the emulation code comes from that project. On top of 2026.3.1:
-
The demo cpir runs. Two things were in its way:
- It fell apart and started itself over about twenty seconds in. Switching an interrupt off left it still waiting, so the demo took one it had just turned off and jumped into an empty vector.
- A 20-pixel strip of the previous line's color ran down the left edge. The line interrupt came 19 dots too late for the program's own border write.
-
TSConf starts with a palette, and with a black border. A snapshot carries neither, so a machine that had not booted drew on 256 black entries and showed nothing at all - with a white border where the hardware leaves black. Both had been wrong from the start, and are now what the machine itself would leave.
-
The window opens sooner, and with a picture in it. macOS suffered most: a tape opened from Finder could be heard playing before anything was seen. Putting that right meant a better startup order on every platform, and the emulator now starts in about a third less time. Finder also knows which files Xpeccy+ opens, so they show up under "Open With".
Full list of changes in CHANGELOG.md.
Xpeccy+ 2026.3.1
Xpeccy+ 2026.3.1
A fork of Xpeccy by SAM style. All the emulation code comes from that project. One fix on top of 2026.3:
- TSConf: programs that set the TS registers by writing to memory now run. The FMAPS window maps three blocks into the address space - the palette, the sprite file and the TS registers - and the register block was the one Xpeccy ignored. A program that points the window at its registers once and then writes to them as memory, instead of using
out, got nothing at all and drew garbage. Reported by Sergei Smirnov, whose sample game is what turned it up.
Full list of changes in CHANGELOG.md.
Xpeccy+ 2026.3
Xpeccy+ 2026.3
A fork of Xpeccy by SAM style. All the emulation code comes from that project. On top of 2026.2:
Highlights
- Memory contention is accurate on the 48K, 128K, +2 and +2A/+3. The ULA now also holds the CPU during an instruction's idle ticks and during
IN, and the screen is read ahead of the beam the way the real one does —LDIRacross the screen used to run about a fifth too fast. Timing tests, beam-racing demos and multicolor match a real machine now. With it: the +2A/+3 raster and interrupt position match the documented figures and those machines no longer contend port access, Pentagon, 128K, +2A/+3 and Scorpion hold the frame interrupt for the 36 T-states the real machines do, and Scorpion ZS 256 draws its borders at the documented widths. - Emulation time is exact. It used to run every machine up to ~1% fast, which shifted audio pitch and frame rate; time is carried in fixed point nanoseconds now, so the CPU tick and the video dot no longer drift apart. The FPS indicator reads a real frames-per-second rate, including right after unpausing.
- A tape or a disk opened in the emulator starts by itself — from the Open menu, a bookmark or a file dropped on the window, the same as one named on the command line. Turn it off with "Auto-run opened media" in Setup → Storage, or hold Shift while dropping a file to pick Run or Mount just for that one.
- A folder on the host can stand in for an SD card or a hard disk image. Pick a folder instead of an image file in Setup → Storage (or pass one to
--sdcard) and it shows up in the emulator as a read-only FAT32 card or disk: drop files in from the desktop and they are there, no image to build or resize. Long and Russian names are kept. - The macOS build runs on older Macs again, and the keys behave. Homebrew tags its arm64 bottles to the OS they were built on, so the dmg had been quietly demanding whatever the newest macOS was; it is built on macOS 14 (Sonoma) now and runs on that and later. On the key side: Cmd+Q quits the app, Options opens with the native Cmd+
,, a shortcut set on Ctrl matches the physical Ctrl key instead of Cmd, and the hotkey editor names that modifier Cmd rather than Qt's generic Meta. - The memory heat map has a panel of its own in the debugger. It draws the address space as its four 16K slots side by side, each headed with the range it covers, one square per four bytes; a single RAM/ROM page is drawn byte by byte instead. A cell takes the color of whatever the cpu did there most — read, written or executed — and the legend under the picture doubles as the readout for the cell under the cursor. A double click jumps the disassembler there.
- The register panel picks its shape from a menu on its header (right click), and has a third one: a wide layout with four columns of registers and the flags standing beside them. A register that changed lights only the byte that changed, so
IRshows thatImoved even thoughRmoves on nearly every instruction.
Also in this release: the memory map controls moved into the MEMMAP block of the debugger's side panel, the stack panel fills its whole height and marks the row at SP, the Leds page of Setup became Indicators, the Storage options and the tape player say what they do instead of "Turbo" and "Autoplay", a tape played to its end starts over on Play, the bundled profiles were gone over machine by machine, window titlebars follow the interface style on Windows 11, and files dropped on the window open again when their path has spaces in it. nihirash added the --sdcard option and a Nix flake. From upstream, build 20260824.
Full list of changes in CHANGELOG.md.
Xpeccy+ 2026.2
Xpeccy+ 2026.2
A fork of Xpeccy by SAM style. All the emulation code comes from that project. On top of 2026.1:
Highlights
- Conditional breakpoints, the way Unreal's debugger does it — a breakpoint can carry a C-like condition and only stops when it is true:
bc == 0x1234,(in & 0xff) == 0x1f && val == 4. A condition with no address of its own is a breakpoint in itself, checked after every instruction. Expressions read registers, labels, memory, the last memory/IO access, the beam position and the breakpoint's own hit counter, soFRAMES > 300lets the first 300 frames pass andRAY(128, 96)stops on the instruction the beam passed a dot in. Conditions are saved with the breakpoint list, and--brk FILEloads one at startup — including Unreal'sbpx.ini, the format sjasmplus writes. - The debugger's side panel tells you more — the frame number since reset, and the watched ports are a list of your own now: the ones a machine keeps by itself are in it from the start, any port on the bus can join them, and each block of the panel can be switched off. Edited in Setup → Xpeccy+ → Debugger, or by a right click on the PORTS block.
- The disassembly reads like a listing — the address and opcode columns can be dimmed, constants are coloured, labels go bold, and an empty line follows every
RET/JP/JR. The disassembler and the memory dump also have new keys of their own — have a look at the bottom of the list in Setup → Xpeccy+ → Keys. - A tape or a disk passed as a CLI argument autoloads, the way a snapshot always did. The loading method is the standard one for the machine;
--no-autostartonly mounts the file. - One set of AY/TurboSound settings instead of three — how many chips, then the type, clock and stereo mode for all of them, with an adjustable stereo separation (the mixing itself is Volutar's). Profiles ship closer to the real machines: a single AY at the machine's own clock, and the Sinclair models play it in mono, the way a television of the day took it.
Also in this release: two more visual artifacts gone from ZX Evo (TSConf) demos, the debugger and the watcher going by their names instead of deBUGa and WUTcha, and upstream builds 20260814 to 20260816 — among them a palette panel showing all 256 colours at once.
Full list of changes in CHANGELOG.md.
Xpeccy+ 2026.1
Xpeccy+ 2026.1
A fork of Xpeccy by SAM style. All the emulation code comes from that project. On top of 2026.0:
Highlights
- macOS builds again — arm64, Qt 6, built, started and packed into a dmg by CI on every change. No developer signature, so a downloaded dmg has to be allowed through Gatekeeper by hand.
- Eight interface styles —
Light,Dark,ZX Spectrum,Sublime,Gruvbox,Solarized Dark,Solarized Light,Dracula. Pick one in Setup → Xpeccy+ → deBUGa → Style Sheet. Each style also brings the debugger colours a style sheet cannot reach, and they stay editable in the palette next to it. - The debugger's panels can be arranged freely — registers, disassembler, memory map and stack are dock panels now: drag, split or tab them to taste, and the arrangement is remembered. Experimental, so glitches are possible;
Reset panel layoutin the disassembler options puts everything back. - The dumps read better — cells keep a fixed width and leave a gap every four bytes, and a bytes-per-row selector (
Auto,8,12,16) sits next to the code page in the memory and track dumps. - ZX Evo (TSConf) fixes — text mode addressing, its own screen geometry, and the frame and line interrupts where the raster counters say. Demos that drive the picture from the raster no longer lose lines or ripple. Not perfect, but a working machine.
- An update brings the new files with it — on macOS and Linux the shipped configuration was copied only into an empty config directory, so styles, roms or palettes added by a later version never showed up. Whatever is missing is filled in on every start; files already there, edited or not, are left alone.
Also in this release, by Volutar: Kempston joystick on ATM Turbo 2+, ZXM-Phoenix, +2 and +3, disk images with more than 80 tracks, a denser debugger, and DejaVu Sans Mono shipped with the emulator.
Full list of changes in CHANGELOG.md.
Builds
Every archive here was built, started and checked. If the emulator does not start for you, try the x86 / Qt 5 build. Development moves on, though: configurations without OpenGL, and builds against old libraries, will not be supported.
Bundled ROMs and shaders keep their own licenses: