ZX Spectrum graphic modes
The ZX Spectrum is generally considered to have limited graphical capabilities in comparison to some other home computers of the same era such as the Commodore 64, largely due to its lack of a dedicated graphics chip. Nevertheless, throughout its commercial life and later activity on the demoscene, various techniques have been developed to provide improvements to the Spectrum's graphical output.
Colour palette
The ZX Spectrum computers uses a variation of the 4-bit RGBI palette philosophy. This results in each of the colours of the 3-bit palette having a basic and bright variant, with the exception of black. The bright half of the palette is generated using the video display's maximum voltage levels for each of the three R/G/B colour components that a colour uses. The basic half of the palette is displayed by simply reducing these voltages.In the ZX Spectrum encoding the colour components are in GRB order rather than the more common RGB order. The GRB order has the advantage that the colour numbers become ordered by increasing luminance, so if viewed on black-and-white display the ordered sequence 0 to 7 would form a gradient from black to white. Specifically, blue has a binary weight of 1, red has a weight of 2, and green has a weight of 4. As with any binary number, these weights add up to produce a single decimal number that matches the displayed colour, the effect of which can be seen in the table below.
For any value of n from 0 to 7, the following commands can be used to set or alter the screen's colours:
- BORDER n, the colour for surrounding area outside the main bitmap.
- PAPER n, the background colour for the colour cell to be altered.
- INK n, the foreground colour for the colour cell to be altered.
Counting from least to most significant bit, an attribute byte dedicates three bits for the foreground colour, three bits for the background colour, one bit for the bright flag, and one bit for the flashing effect.
BRIGHT BLACK colour was not in all models of ZX Spectrum and ZX Spectrum Emulators.
0,00,00 | 0,00,01 | 0,00,02 | 0,00,03 | 0,00,04 | 0,00,05 | 0,00,06 | 0,00,07 |
0,01,00 | 0,01,01 | 0,01,02 | 0,01,03 | 0,01,04 | 0,01,05 | 0,01,06 | 0,01,07 |
0,02,00 | 0,02,01 | 0,02,02 | 0,02,03 | 0,02,04 | 0,02,05 | 0,02,06 | 0,02,07 |
0,03,00 | 0,03,01 | 0,03,02 | 0,03,03 | 0,03,04 | 0,03,05 | 0,03,06 | 0,03,07 |
0,04,00 | 0,04,01 | 0,04,02 | 0,04,03 | 0,04,04 | 0,04,05 | 0,04,06 | 0,04,07 |
0,05,00 | 0,05,01 | 0,05,02 | 0,05,03 | 0,05,04 | 0,05,05 | 0,05,06 | 0,05,07 |
0,06,00 | 0,06,01 | 0,06,02 | 0,06,03 | 0,06,04 | 0,06,05 | 0,06,06 | 0,06,07 |
0,07,00 | 0,07,01 | 0,07,02 | 0,07,03 | 0,07,04 | 0,07,05 | 0,07,06 | 0,07,07 |
1,00,00 | 1,00,01 | 1,00,02 | 1,00,03 | 1,00,04 | 1,00,05 | 1,00,06 | 1,00,07 |
1,01,00 | 1,01,01 | 1,01,02 | 1,01,03 | 1,01,04 | 1,01,05 | 1,01,06 | 1,01,07 |
1,02,00 | 1,02,01 | 1,02,02 | 1,02,03 | 1,02,04 | 1,02,05 | 1,02,06 | 1,02,07 |
1,03,00 | 1,03,01 | 1,03,02 | 1,03,03 | 1,03,04 | 1,03,05 | 1,03,06 | 1,03,07 |
1,04,00 | 1,04,01 | 1,04,02 | 1,04,03 | 1,04,04 | 1,04,05 | 1,04,06 | 1,04,07 |
1,05,00 | 1,05,01 | 1,05,02 | 1,05,03 | 1,05,04 | 1,05,05 | 1,05,06 | 1,05,07 |
1,06,00 | 1,06,01 | 1,06,02 | 1,06,03 | 1,06,04 | 1,06,05 | 1,06,06 | 1,06,07 |
1,07,00 | 1,07,01 | 1,07,02 | 1,07,03 | 1,07,04 | 1,07,05 | 1,07,06 | 1,07,07 |
Dithering
This quite short colour palette has urged the graphic artists to resort to various dithering techniques; the simplest of which employs ordered patterns, as shown exhaustively in the opposite chart. Dithering also works very well with the original Composite video connection to an analog PAL TV, generating colour mixing along horizontal pixel lines.Standard mode
Hardware implementation
The original ZX Spectrum has a screen resolution of 256×192 pixels. Colour information is overlaid onto this as a grid of 8×8 pixel regions known as attribute blocks; within each attribute block, only two colours may be used out of a palette of 8. Additionally, the entire attribute block may be designated as 'bright', resulting in a total of 15 possible colours. In many programs this limitation was evident as attribute clash.Actual resolution over composite video connections
Due to the limitations of the original Composite video connection to an analogue PAL TV, adjacent pixels were in fact blurred out horizontally. The resulting resolution depended on the quality of the TV set and on the colour combinations used by each particular image, but on most cases was similar to ~128x192.This effect was used to increase the number of displayed colours on screen by almost all of the graphic designers, using dithering techniques. Close to a total of 64 colours become possible this way. Some emulators provide some sort of "blur" image processing trying to simulate this effect.
Monochrome TVs and monitors
By using a monochrome monitor or black and white TV, it is possible to take advantage of the differences in intensity over the Spectrum's colour range to generate a 15-shade grayscale image at 256×192 resolution.Hicolour (8x1 attributes)
Hardware implementation
Several third-party Spectrum clones, including the Timex Sinclair machines and the Pentagon, support a screen mode in which attribute blocks are 8×1 pixels in size rather than the usual 8×8. A screen in this mode takes 12 KB RAM. In the case of the Timex, this mode is activated through the command OUT 255,2. In addition, this screen mode can be generated through the use of the MB03+ Ultimate interface, the MB-02 disk system's DMA hardware, and is also available as Mode 2 on the SAM Coupé.Software implementation
"8x1" attributes
On other Spectrum models, this effect can be replicated by exploiting the fact that the ULA re-reads the attribute information on every pixel row when generating the video output; it is possible to write a new value to the relevant memory location in between successive lines, and thus cause a different pair of colours to be shown. However, the Spectrum's processor is not fast enough to write to an entire row of attribute bytes in one scanline, so 8×1 attributes can only be achieved over 20 columns. This technique is variously known as Hicolour, Multicolour, FLI or Rainbow Processor mode."8x2" attributes
A variation on this method is to change the complete row of attributes over the course of two scanlines, resulting in 8×2 pixel attribute blocks over the full width of the screen."4x1" attributes
A special case involves alternating between the two available colours per attribute cell for 4 pixels each, allowing each 4×1 region to be treated as an independently colourable 'pixel'.ULAPlus
ULAPlus is compatible with the standard ZX Spectrum display, if used only to modify the 16 basic colours.Yet any software that uses the full 64 colours will trigger the "flash" attributes of the original Spectrum.
Interlace/Switched modes
By alternating between two screens on every frame interrupt, it is theoretically possible to simulate a doubling of the vertical display resolution from 192 to 384 lines.The Timex clones and ZX Spectrum 128K implement a 'shadow' screen area which can be switched into place through the use of a single OUT command, and this is often utilised to rapidly switch between two images for this purpose.
When viewed on a CRT television screen, the flicker is less noticeable than on a modern monitor.
The image is linked to : Image:Parrot interlace.gif|here.
The technique does not in fact achieve a true interlaced display, as the Spectrum lacks the ability to synchronise with the display hardware at such a low level. Rather, the effect is more akin to anti-aliasing, with certain pixels appearing at half intensity.
GigaScreen
The attributes of an image are alternated at 50 Hz on the screen, taking advantage of the PAL colour system encoding for mixing. This way, the palette is increased to approximately 36 colours.For Pentagon machines, a hardware modification is available which directly combines the two alternate screen areas into the video signal, thus eliminating the flicker associated with this method. Furthermore, the gigascreen and hicolour techniques may be employed together to produce even richer-coloured images; this format has been named DithVIDE and BZither, both names referring to the dithering methods employed when converting true-colour images to the format.
3colour / Multichrome / RGB-3 / Interchrome
Three separate images, comprising a red, green and blue layer, are displayed on the screen rapidly, one after the other, relying on persistence of vision effects to merge the three layers into a single coloured image. The result is an 8-colour image where each pixel may be coloured independently.This effect is simulated in another image linked to :Image:Parrot rgb3.gif|here ; the flashing is less noticeable when viewed on a television screen.
Emulated
256×192, 256 colours, "256 colour mode", no attributes
The SPEC256 and EmuZWin emulators have a screen mode 256×192 pixels where each pixel can be in one of 256 colours. This is achieved by extending the word size of the emulated Z80 from 8 bits to 64, making eight bits of data available for each pixel; the screen thus takes 48 KB of memory. This mode only exists on the emulator and software graphics must be modified to use it.Compatible machines and interfaces
Later ZX Spectrum compatible machines offered extra video modes. These are based on the standard 256x192 mode but incompatible with the original Spectrum.Also interfaces, the Spectra interface and the MB03+ Ultimate interface extend the Spectrum’s display to support more colours or/and extra video modes.