@lou_dias
You seem to be confusing something here. All HAM does is alter the way the most significant bits of a pixel are interpreted. Whether the pixels are planer or chunky is irrelevant. Nobody ever bothered creating an 8-bit chunky implementation that does it, but chunky pixels are no barrier to entry for the HAM concept. To prove it, you could easily write a software routine that converts 8-bit "HAM" pixels to 24 bit. Straight off the top of my head:
uint32 convertPixelSpan(uint32* dstARGB, const uint8* srcHAM, const uint32* paletteARGB, uint32 lastPixelARGB, size_t num)
{
/* assumes destination and palette are 32-bit ARGB words, A always 0. */
while (num--) {
/* read next HAM pixel and decode to RGB */
uint32 pixel = *srcHAM++;
switch (pixel & 0xC0) {
case 0x40: /* change upper 6-bits red */
lastPixelARGB = ((lastPixelARGB & 0x0003FFFF) | (pixel & 0x3F) << 18);
break;
case 0x80: /* change upper 6-bits green */
lastPixelARGB = ((lastPixelARGB & 0x00FF03FF) | (pixel & 0x3F) << 10);
break;
case 0xC0: /* change upper 6-bits blue */
lastPixelARGB = ((lastPixelARGB & 0x00FFFF03) | (pixel & 0x3F) << 2);
break;
default: /* use palette value */
lastPixelARGB = paletteARGB[pixel];
break;
}
*dstARGB++ = lastPixelARGB;
}
/* return the last calculated pixel for future calls */
return lastPixelARGB;
}
Such an implementation would be trivial in hardware, I would suggest actually using planar graphics makes it more difficult rather than less (except in the case of HAM6 where there's no convenient chunky representation).