ZX Spectrum Next
The Spectrum Sinclair did not build, forty years late
A community-funded FPGA Spectrum in a Rick Dickinson case: a Z80N at up to 28MHz, 128 hardware sprites, Layer 2 graphics, three AY chips and SD storage — while still running the 1982 machine's software.
The ZX Spectrum Next is a modern Spectrum: an FPGA implementation of the original machine, extended with the hardware the 1980s Spectrum conspicuously lacked, in a wedge case designed by Rick Dickinson — the industrial designer of the original ZX Spectrum.
It matters here for two reasons. It is the machine a good deal of new Spectrum software is now written for, and it is a working answer to a question this Vault keeps raising: what would these games have looked like if the hardware had given programmers sprites, a scrolling layer and enough colour?
It has a Copper, and it is the Amiga’s
The single most telling addition is a coprocessor with four instructions that waits on the raster beam. The Amiga’s Copper has three; the Next’s has four, and the fourth is an admission.
WAIT |
wait for raster line 0–311 and horizontal position h*8 — 1 clock |
MOVE |
write a value to a Next register — 2 clocks |
NOOP |
“special case of value 0 to port 0” — 1 clock |
HALT |
“special case of WAIT 63,511” |
That last line is the interesting one. On the Amiga, a Copper list is terminated
by waiting for a beam position that never arrives — Commodore’s manual notes that
“this final WAIT instruction never finishes”. The Next inherits the same idiom and
gives it a name: HALT is not separate hardware, it is WAIT for line 511, which
does not exist. A convention on one machine has become an instruction on the
other.
The program is 2 KB — “since each instruction is 2 bytes it can store exactly 1024 instructions” — and the program counter is 10 bits, “auto-incrementing it after each instruction, wrapping around after last one back to first one”. So a Copper list that does not halt runs forever by construction, which is why the halt idiom is needed at all.
Three AY chips, and one you can read
The original Spectrum 128 had one AY-3-8910. The Next has three: “there are three AY chips in the zx next whose selection is made through port 0xFFFD”, with the selected chip still using the classic ports for register select and data.
More quietly useful is what the Next adds around them. The
AY-3-8910 is write-only from the programmer’s side —
a register once written cannot be read back, so software must remember what it
set. The Next adds port 0xBFF5, which “when read, returns the value stored in
the selected register on the active AY chip”.
Forty years on, the fix is to make the chip answer.
Speed, and the price of the edge connector
The Z80 can run at 3.5, 7, 14 or 28 MHz — the original clock and multiples of it —
selectable from a register, the NMI menu, or RUN AT in NextBASIC.
There is one condition, and it is the machine’s whole design philosophy in a sentence:
Enabling the expansion bus (edge connector at the back of the board) will limit the speed to 3.5MHz, to keep signals’ timing compatible with classic peripherals.
Plug in a 1982 peripheral and the machine returns to 1982 speed. Not as a limitation of the FPGA but as a deliberate contract: the original edge connector carries timing expectations that eight times the clock would violate, so the Next slows down to keep its promises to hardware older than itself.
Specification
From the community developer wiki at wiki.specnext.dev:
| FPGA | Xilinx Spartan-6 on first-Kickstarter boards; Artix-7 on the second |
| CPU | Z80N — Z80-compatible with additional instructions |
| Clock | 3.5, 7, 14 or 28 MHz, with wait states |
| RAM | 768K unexpanded, 1792K expanded, in 16K banks with 8K MMU paging |
| ROM | 64K for ROMs 0–3, plus a 32K user-programmable Alt ROM |
| Sprites | Up to 128 hardware sprites, 16×16, with 1×–8× scaling, rotation and mirroring |
| Layer 2 | 256×192 or 320×256 in 8-bit colour; 640×256 in 4-bit |
| Tilemap | 80×32 or 40×32, with 8×8 glyphs |
| LoRes | 128×96, 4-bit or 8-bit colour |
| Legacy modes | 48K and 128K ULA, plus Timex hi-colour and 512×192 mono hi-res |
| Sound | Beeper, three AY-3-8910s, four 8-bit DACs, optional Raspberry Pi I2S audio |
| Audio out | HDMI, 3.5mm jack, or an optional internal speaker |
Also documented: DMA, a CTC, a Copper co-processor for per-scanline register changes, hardware expansion for a real-time clock, WiFi and a Raspberry Pi Zero accelerator.
What it fixes
Read that table against the attribute clash the original machine forced on every programmer, and the design intent is plain. The Next keeps the ULA modes so that 1982 software still runs, then adds the things whose absence defined Spectrum programming for a decade: hardware sprites instead of software-drawn ones, a colour layer without the 8×8 attribute grid, a tilemap, and three sound chips where there had been a one-bit beeper.
The 28MHz mode is the same idea applied to the clock. A Spectrum game that ran at 3.5MHz can be given eight times the cycles.
Why it is in this Vault
Most machines here stopped. This one did not start until 2017, and it is the reason several people in these pages are described in the present tense — Jim Bagley writing new software for it, Tim Gilberts bringing the Gilsoft adventure lineage forward, Rick Dickinson designing the case before his death.
It also gives the curriculum a live target. Everything the Spectrum sections of this site teach about Z80, memory layout and timing transfers directly, and the extra hardware is documented rather than reverse-engineered.