*** Welcome to piglix ***

Attribute clash


Attribute clash (also known as colour clash or bleeding) is a display artefact caused by limits in the graphics circuitry of a some colour 8-bit home computers, most notably the Sinclair ZX Spectrum, where it meant that only two colours could be used in any 8×8 tile of pixels. The effect was also noticeable on MSX software and in some Commodore 64 titles. Workarounds to prevent this limit from becoming apparent have since been considered an element of Spectrum programmer culture.

This problem also happens with the "semigraphic modes" (text modes with graphics features) of the Color Computer and Dragon, but those computers also have non-attributed graphics and with better resolution. Several video game consoles of the era had such video modes that caused such limitations, but usually allowed more than two colours per tile: the NES (Famicom) had only one mode, which was also "semigraphic", and allowed four colours per 16×16 "block" (group of four 8×8 tile) but 16 per screen. The Super NES allowed 16 colours per tile but 256 per screen (among other improvements), and this made the artefact much harder to notice, if at all (except for those who had to program the device).

Attribute clash on the ZX Spectrum was caused by its idiosyncratic display memory layout, designed in such a way as to minimise memory use of the frame buffer, and optimise for text display instead of graphics. Rather than limit 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. Trying to add a third colour in an 8x8 pixel area would result in the three colours being reduced to two by the ZX Spectrum.


...
Wikipedia

...