ZX Spectrum 16K/48K
|appx. 4M units
|Z80A @ 3.5MHz
|16KB or 48KB
|15 (2 per 8×8 cell)
The industrial design for the original rubber-keyed ZX Spectrum and the plastic-keyed Spectrum+ was by Rick Dickinson, who had previously done the industrial design for the ZX80 and ZX81. One of the iconic elements of the design is the coloured stripes on the right side of its faceplate in the colours Red, Yellow, Green and Cyan. The exact Pantone colour values couldn't yet be retrieved. The angle of the stripes was measured as being at 24-degrees.
Much of the ZX Spectrum's custom logic is contained within an Uncommitted Logic Array ("ULA") and was designed by Richard Altwasser. The ULA was manufactured by Ferranti. The ZX Spectrum ULA by Chris Smith describes this device in detail.
The ULA suffers from a few oversights in its design and implementation. An error in the timings applied by the ULA's I/O contention circuit required a modification, the "dead cockroach", such that all I/O access to the I/O port that the ULA provides is contended as though the access is to the lower 16K of RAM, for which access is shared with the ULA.
The "dead cockroach" was incorporated into later revisions of the ULA, rather than fixing the timing issue. The reason for this is not clear.
It was later noticed that the ULA contended all I/O access, not just that to its own I/O port. This was presumably avoidable, as the ULA uses the Z80's A0 line to determine whether to respond to I/O port requests. This issue was partially resolved by means of the "spider" modification, which gates the ULA's IORQ input with A0.
The 48K Spectrum suffers from severe dot crawl, as the pixel clock is not synchronised with the PAL colour subcarrier. This was known about before release, and was a deliberate compromise in the design. The ULA outputs Y, U and V signals without modulation with a carrier, so this can be avoided entirely, but the pixel clock cannot be adjusted without adversely affecting video timings. This issue was fixed in later models of the Spectrum.
The "flash" attribute of the ZX Spectrum's display, designed to swap ink (foreground) and paper (background) colours in any 8×8 attribute block that enable it, suffers from a timing issue, in that the inversion of the display's bitmap data is not properly synchronised with pixel boundaries. This results in a thin edge in cases where the combination of the flash effect together with swapping of ink and paper in successive attribute bytes (or, alternatively, inversion of the bitmap) ought to cancel out, leaving no visible change between the right of one attribute block and the left of the next.
Setting the Z80's I register to point within the range 0x4000–0x7fff causes the appearance of "snow" on the screen, as the ULA fails to correctly manage the Z80's DRAM refresh accesses.
Unlike many other Z80-based machines, the ZX Spectrum uses a memory contention scheme based on stopping the Z80's clock, rather than using the Z80's WAIT signal. It is the ULA that implements this contention scheme, allowing code running in ROM or in the upper 32K of RAM and only accessing data in these areas to run at the full Spectrum clock speed of 3.5 MHz. The approach taken by other Z80-based machines such as the Amstrad CPC requires that all Z80 M-cycles that access memory is slowed down regardless of the address that is accessed. Others, such as the MSX, use separate video RAM, accessed either using port I/O as in the case of the MSX, or otherwise requiring dual-ported VRAM.
The vast majority of the first batch of ULAs made failed to operate correctly, save for one, in which it was noticed that a speck of dust had happened to land in the necessary position on the die to connect two halves of the ULA's clock circuit, one of which had accidentally been left unconnected.
The initial series of ZX Spectrum ULAs is the 5C. Ferranti later switched to their 6C series ULAs, resulting in a decrease in power consumption (and therefore also temperature) of the ULA.
Sold in Chile. Didn't meet FCC standards, so was not sold in the USA — the Timex TS2068 was produced instead.
Two machines found: one with 5C114E ULA, one with 6C011E-3.
The Sinclair BASIC interpreter for the ZX Spectrum was written by John Grant and Steve Vickers working for Nine Tiles Ltd. It was developed based on code previously written by Nine Tiles for the ZX81.
Rubber Keyboard Model
The ZX Interface 1 and Microdrives were designed to fit neatly with the rubber key model of Spectrum. Part of Sinclair's patent for the ZX Spectrum covered inventions relating to the keyboard design.
Plastic Keyboard Model
The Spectrum+ makes use of same circuit board as the rubber keyboard model of the Spectrum, but with a larger hard plastic keyboard instead. This keyboard features extra keys which map to combinations of keys on the rubber keyboard. These extra keys cannot be scanned individually in software, as the membrane for the new keyboard has the same connections as the membrane for the rubber key model.
Spectrum+ machines sold by Sinclair were assembled with later issues of the Spectrum PCB, although Sinclair sold a conversion kit to owners of the rubber keyboard model to upgrade to the newer keyboard, and these are compatible with older issues of the PCB as well. PCBs can be swapped between rubber keyboard models and the Spectrum+ (a working PCB from a machine with a damaged case could be combined with a case from a machine with a damaged keyboard to produce a usable Spectrum+). It should be noted that the heat dissipation properties of the two cases do differ and that this can cause failures due to overheating.
- This section is a stub. Please expand with more detail.
The "spider" modification performed on Issue 1 and Issue 2 Spectrums was later incorporated into the Spectrum PCB starting with Issue 3.
The ZX Spectrum contains either one or two banks of DRAMs. The lower bank of eight 16Kbit DRAMs is present in all Spectrums, and shared between the ULA and CPU as it contains the machine's video memory. A second bank of eight DRAMs for the upper 32K may be present for a total of 48K of RAM. External 32K RAM packs were sold for those not wanting to upgrade their 16K Spectrums to 48K internally.
For an internally fitted 32K bank eight 32K DRAM chip used (TI TMS4532-20NL3/OKI M3732-L or TI TMS4532-20NL4/OKI M3732-H). These chips are really faulty 64K DRAMs. All eight DRAMs must be faulty within only one half of their storage. A link is present on the Spectrum PCB to specify which half of each of the faulty DRAMs is usable, but as this single link applies to all eight DRAMs, faults must only be present within the same half of each of them.
The upper 32K was attached as a ZX Spectrum 48k ram upgrade daughterboard for Issue 1.
For Issue 2, 16K Spectrums can be upgraded to 48K by adding four logic chips in addition to the eight DRAM chips, but it was typical for these to be sold as 48K machines in the first instance.
The rubber key mat's colouring is a bluish-grey starting with the Issue 2.
The Issue 3 Spectrum included a new, uprated speaker with louder output (Speaker impedance is now 40 ohms instead of 200 ohms for Issue 1/2 boards. This is buffered by a new transistor on the PCB (TR7, ZTX450) instead of being directly driven by the ULA.
Starting with the Issue 3, a low power 6C ULA was used, with changes to the handling of the EAR socket which caused compatibility problems. The "spider" fix was integrated into board.
The Issue 3 was the first issue to be sold in the Spectrum+.
The Issue 4A and 4B Spectrums improve ULA memory signal timing by delaying RAS through two previously unused gates in IC24. It's important that ULA 6C001E-7 is used in these models.
This is described in the service manual, however none are thought to exist in the wild.
The Issue 6 includes changes required if using the Saga ULA. So far, only one such machine has been found. It also includes the ZX8401 IC (also found as the PCF1306P) to consolidate the six 74LS IC's that control all of the memory access logic in previous issues.
- ZX Spectrum 16K/48K versions at Planet Sinclair