ex12bit

Description

This program sets up a 12-bit mode on any 8-bit card, by
setting up a 256-colour palette that will fool the eye into
grouping two 8-bit pixels into one 12-bit pixel. In order
to do this, you make your 256-colour palette with all the
combinations of blue and green, assuming green ranges from 0-15
and blue from 0-14. This takes up 16x15=240 colours. This
leaves 16 colours to use as red (red ranges from 0-15).
Then you put your green/blue in one pixel, and your red in
the pixel next to it. The eye gets fooled into thinking it's
all one pixel.

The example starts setting a normal 256 color mode, and
construct a special palette for it. But then comes the trick:
you need to write to a set of two adjacent pixels to form a
single 12 bit dot. Two eight bit pixels is the same as one 16
bit pixel, so after setting the video mode you need to hack
the screen bitmap about, halving the width and changing it
to use the 16 bit drawing code. Then, once you have packed a
color into the correct format (using the makecol12() function
below), any of the normal Allegro drawing functions can be
used with this 12 bit display!

Things to note:

The horizontal width is halved, so you get resolutions
like 320x480, 400x600, and 512x768.

Because each dot is spread over two actual pixels, the
display will be darker than in a normal video mode.