Jump to content

Hold-And-Modify

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by 64.81.58.56 (talk) at 09:09, 24 October 2005 (Swaped subjuctive quality statements for technical ones, eliminating the newest runon sentence.). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Hold-and-Modify (more commonly known as HAM) is a screenmode of the Amiga micro computer. It works by either using one of 16 colours in the palette or by holding the colour 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 colour.

A disadvantage was that some colour changes take 3 pixels to occur, so if you chose the 16 palette colours poorly the artifacting could become frequent and glaringly obvious, vaguely similar to the compression artifacts you sometimes get with the JPEG graphics format. The psudo 12-bit HAM mode was upgraded on AGA based systems to provide a psudo 18-bit display mode called HAM8 (and giving reason to call the older mode HAM6).

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 colours. Most screenmodes worked with indexed colours, and only 5 bits for the colour index, meaning that 25 (=32) colours 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 colours.

HAM allowed for a maximum of 4096 colours to be used, because the system used 12-bit colour, 4 bits for each of Red, Green and Blue (212 = 4096).

Starting with AGA-based Amiga systems (the A1200 and A4000), a pixel could have 8 bits to encode its colour, which allowed for a HAM mode with 6 bits of index or color component. HAM-8 as it was called, therefore allowed 64 base colours, with a maximum of 262,144 colours on-screen from a palette of 16,777,216.

HAM was only originally put into the Amigas custom chipset as an experiment. To quote Jay Miner (known as "the father of the Amiga") himself:

"Hold and Modify came from a trip to see flight simulators in action and I had a kind of idea about a primitive type of virtual reality. NTSC on the chip meant you could hold the Hue and change the luminance by only altering four bits. When we changed to RGB I said that wasn't needed any more as it wasn't useful and I asked the chip layout guy to take it off. He came back and said that this would either leave a big hole in the middle of the chip or take a three-month redesign and we couldn't do that. I didn't think anyone would use it. I was wrong again as that has really given the Amiga its edge in terms of the colour palette."