Jump to content

Attribute clash

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by 69.11.4.75 (talk) at 04:50, 16 September 2008 (→‎Causes: Grammar). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Attribute clash (or colour clash) was a display artefact caused by limitations in the graphics circuitry of a number of early colour 8-bit home computers — most notably the Sinclair ZX Spectrum. It has since been considered an element of Spectrum user culture.

Causes

Attribute clash on the ZX Spectrum was caused by its idiosyncratic display memory layout, designed in such a way as to keep the memory consumption of the frame buffer to a minimum, and optimised for text display rather than graphics. Rather than restricting the colour palette to conserve memory, Sinclair's design stored pixel bitmap and colour information in separate areas of memory. While the bitmap specified the state of individual pixels (either on or off), the colour information (or "attributes") corresponded to the text character matrix — 24 rows of 32 columns — with one byte per 8x8 pixel character cell. This byte encoded two 3-bit values, known as INK (foreground colour) and PAPER (background colour) after the BASIC instructions used to define the colour values. Two other binary values were included in an attribute; a BRIGHT bit indicating one of two brightness levels for the two colours, and a FLASH bit, which, when set, caused the two colours to be swapped at regular intervals. This scheme provided 15 different colours: the eight combinations of red, green and blue at two brightness levels (except for black, which appeared the same at both brightness). Thus each 8x8 pixel block could only contain 2 colours from the 15 available, which must both be from either the BRIGHT or non-BRIGHT halves of the palette.

The ZX Spectrum used 6144 bytes for pixel information, with one byte representing a row of eight pixels, and 768 bytes used for the colour attributes, thus giving a total of 6912 bytes for the entire graphics display, a relatively small total for a computer of the Spectrum's era with "colour" capabilities. This graphics architecture was retained right through to Sinclair and Amstrad's later redesigns of the Spectrum, up until Amstrad's final model, the ZX Spectrum +3, despite subsequent models having contained 128 kB of RAM, reducing the need to save memory in this manner. The architecture was retained to prevent loss of backwards compatibility.

The Thomson MO5 and TO7 microcomputers display a very similar constraint: for each group of eight pixels horizontally, only 2 colours out of 16 are available, thus the screenshots look very similar to spectrum ones. Attributes were used by a variety of other computers and consoles, including the Commodore 64, the MSX and NES, although the size of the attribute blocks and the number of colours per block varied. However, with the use of hardware sprites and scrolling, attribute clash could be avoided.

The effect of attribute clash on MSX 1 systems when using the 256x192 Highres mode of MSX 1

For the MSX 1 system (and other systems based on the Texas Instruments TMS-9918 Video Display Controller) attribute clash was also a problem, although in theory it was much less severe. The MSX 1 did not have just one single color attribute byte available for a whole 8x8 pixel area, as was the case with the Sinclair Spectrum, but one attribute byte for each 8x1 pixel area. Thus, while the Spectrum was limited to one color pair for a square area of 8x8 pixels, the MSX 1 was only limited to one color pair for a "line" of eight adjacent pixels.

The problem for the MSX 1 was that many European software companies who converted Spectrum games to MSX ignored all the improvements the MSX 1 had over the Spectrum, and the resulting MSX versions had the same amount of attribute clash as the original Spectrum games. To ease conversion, the software developers simply copied the single attribute byte value of the Spectrum to all eight corresponding attribute bytes of the MSX. For the same reason, the software companies also ignored the sprite capabilities of the MSX 1, and because the video display capabilities were otherwise quite similar (256x192 resolution, 16 colors), both systems produced virtually identical screenshots for the same game. In contrast, Japanese MSX 1 games did use all the capabilities of MSX 1, often resulting in better looking games.

Effects

Static graphic displays therefore had to be constructed with care. Finely-detailed colour graphics were impossible, as colour could only be applied in 8×8 pixel blocks. Careful design could achieve impressive results, as could synchronizing colour changes to the refresh rate of the display — usually a television set.

However, animated displays were more difficult — a distinct drawback in a machine whose primary use was playing video games. If just one pixel in an 8×8 block was recoloured because a moving part of the display touched it, the entire block would change colour. Thus detailed moving graphics caused large ugly fringes of rapidly-changing colours to follow them around.

Workarounds

Early software simply ignored the problem. Later, the standard workaround was to use colour for static display elements — such as a decorative border around the edges of the screen, which might include score displays and so on, or some form of instrumentation — with a smaller central monochrome area containing all the animated graphics. This also made graphics faster, as less of the screen had to be updated — both a smaller region, plus only changing pixel information and leaving the colour area untouched.

Some late Spectrum software, such as FTL's Lightforce, used extremely careful graphics design to achieve full-colour moving graphics, essentially by restricting both the design of the onscreen elements and their paths of motion to 8×8 colour resolution boundaries. The moving elements were thus relatively large and rather blocky or squarish, and their movement was constrained, but this was not visually obvious and the sight of moving full-colour graphics was hugely impressive to Spectrum owners.

No mainstream developers were able to find a suitable all-round fix for the attribute clash problem, instead preferring to use the monochrome graphics method when fast, clear graphics were needed, and full-colour graphics when the situation permitted.

It was possible by paying careful attention to timing to modify the attribute area of RAM at certain specific times as the display was drawn - let the display hardware draw one line of the display, then change the attribute RAM before the next line is drawn to give the effect of different attributes for each individual line. This had to be done in software and was time consuming, thus it was usually limited to special effects. This technique was also very popular in the demoscene.

Screenshots demonstrating the problem and solutions

Most demonstrative of the problem were games pre-1987, such as shown here by the game Knight Tyme. Note how the central character (the small figure with a knight's helmet just to the right of the green plant) is almost hidden by the attribute clash that has occurred. It should be noted that Knight Tyme was one of the few games that allowed the player to select between two modes of attribute clash — one whereby the main character's attributes would be ignored (producing the shown effect) and one whereby the main character's attributes would be emphasised, turning any graphics surrounding the character white.
File:Knight tyme attribute clash.png
One workaround was to simply render the graphics in two colours — otherwise known as monochrome — as shown here with the Spectrum version of Knight Lore in 1984.
A number of games used full-colour backgrounds and "character scrolling" (where the environment would be scrolled eight pixels at a time), but monochrome sprites that were effectively transparent, as displayed here in Double Dragon. The sprites in this case have been drawn in such a way so that they stand out, avoiding a dependence on the colour. A number of games used this method with smooth pixel-by-pixel scrolling, but the attribute clash as elements of one character block were "passed" to the next were clearly noticeable. File:Spectrum Double Dragon.png
A prominent (and less successful) example of the use of full-colour graphics was the Spectrum conversion of Altered Beast. Note that the game suffers from considerable attribute clash. File:Spectrum Altered Beast.png
Programmer Don Priestley developed a distinctive style for several of his games by using large, colourful, cartoon-like sprites. Due to their size, and some careful design, the need to have more than two colours in any attribute block was almost entirely eliminated. A disadvantage of this technique was that the gameplay had to be designed around the graphics, and so it was not useful for ports from other platforms. Games that used this technique included Popeye, The Trap Door (shown right), Through the Trapdoor, and Flunky

References