The 8-bit Guy on Youtube has an excellent series of videos covering how early computer graphics were implemented with the limitations of the hardware in mind.
Previously graphics chips didn’t have their own memory (e.g VRAM) so they had to share Ram with he CPU.
If you look at common screen resolutions you can calculate the amount of memory used just to store the pixel data in RAM:
If each of those pixels was represented by a single bit (black and white) then you would need 8KB of RAM to store the screen. But most games want at least a little colour:
|Bits per pixel (BPP)||RAM Required|
|1 (black and white)||8KB|
|4 (16 colours)||32K|
|8 (256 colours)||64K|
Note that this is a huge amount of RAM for early computers, 64K could be larger than the total RAM available for the system 1.
As it was not feasible to use the entire ram just to store pixel data for the screen a few optimisations were developed to save RAM.
Colour cells was an optimisation that instead of storing colour values for each pixel it would store it for a square group of pixels known as a “cell”.
Each individual pixel would still be represented by 1 bit, for either background or foreground colour, and each colour cell would be 1 byte including RGB data for both the background and foreground colour of a cell.
But the limitation of this mode is that each cell can only have 2 colours.
To get around this limitation the Commodore64 had a mode called “Multi-color Mode” which made the pixels in a cell twice as wide. Lowering the resolution and hence saving RAM, but it uses that saved RAM to allow 4 colours per cell instead of 2.
So it was a trade off in terms of resolution to get more colours.
Colour Cells were Used in:
Another tool to get around the limitations of Colour Cells was the Hardwire Sprite Generator.
Basically if you wanted a character or enemy to use more colours and resolution that the colour cells allowed you could make them a “Sprite” which act completely independently to the background colours 1.
NTSC Artifact colour was Used in:
The Apple II has a notoriously complicated graphics system. It also came in two modes which were completely separate:
The screen is separated into 7 pixel blocks, where each pixel is 1bit and the 8th bit of the byte defines which Pallete should be used.
CPU driven graphics are used when there is no dedicated Video chip so the CPU had to spend most of its time sending pixel data to the screen.