Hold-and-Modify (more commonly known as HAM) is a screenmode of the Amiga micro computer. It works by either using one of 16 colors in the palette or by holding the color of the last displayed pixel and then modifying its red, green, or blue component. This allowed the computer to display up to 4096 colors with only 6 bits available to indicate the color.
A disadvantage was that some color changes take 3 pixels to occur, so if one chose the 16 palette colors poorly the artifacting could become frequent and glaringly obvious, vaguely similar to the compression artifacts seen in the JPEG graphics format. The pseudo-12-bit HAM mode was upgraded on AGA based systems to provide a pseudo-18-bit display mode called HAM-8 (and giving reason to call the older mode HAM-6).
In the early days of multimedia, HAM mode gave the Amiga a graphical advantage over competing systems, because it allowed the system to display digitized photographs and some rendered 3D images at a level claimed to be "photorealistic" at the time.
On OCS/ECS Amiga systems, only 6 bits could be used to indicate colors. Most screenmodes worked with indexed colors, and only 5 bits for the color index, meaning that 25 (=32) colors could be displayed at most. Some screenmodes allowed the sixth bit to be used as a half-color (the pixels with this bit set would display with half the luminosity.)
The HAM mode used 6 bits, two being used to indicate whether the remaining 4 bits were an index in the color palette (16 colours) or a change in one of the RGB components of the color (e.g. hold the red and green components from previous pixel, and modify the blue component). The remaining four bits were then used as the absolulte value for the modified RGB component.
The possible values were :
- 00 xxxx : use color from palette index xxxx;
- 01 gggg : keep red and blue components from previous pixel, use gggg as green component;
- 10 rrrr : keep green and blue components from previous pixel, use rrrr as red component;
- 11 bbbb : keep red and green components from previous pixel, use bbbb as blue component.
A row of pixels would always start with one of the 16 indexed colors.
HAM allowed for a maximum of 4096 colors to be used, because the system used 12-bit color, 4 bits for each of Red, Green and Blue (212 = 4096).
Beginning with AGA-based Amiga systems (the A1200 and A4000), a pixel could have 8 bits to encode its color, which allowed for a HAM mode with 6 bits of index or color component. HAM-8 as it was called, therefore allowed 64 base colors, with a maximum of 262,144 colours on-screen from a palette of 16,777,216.