the 12-bit data is not *that* good actually
the bottom 2 bits look totally random; in fact the whole bottom 4 bits are not adding much information if you ask me

but maybe playing with the ISO settings and stuff gets you a little further quality-wise.
I'm attaching the new DISKBOOT.BIN for people who want to look at the format; I'm slightly puzzled by it at the moment since the bit-order in the data file is rather strange. I managed to find the correct 4-bit chunks of data to reconstruct an 8bit-per-channel picture which looks pretty good. Problem is, the bottom 4 bits are hard to match so I can't really see which 4bits go with which colour ..
Anyway, this DISKBOOT.BIN should fix various crashes and save the RAW data. Movie capture is totally untested still but bracketing seems to work OK now too.
The 8-bit decoder in C looks something like this (discards bottom 4 bits):
int getpixel(char *data, int x, int y) {
// Offset into the buffer is y*w+x pixels into the buffer @ 12bpp
int offset = (y * WIDTH + x) * BPP / 8;
// Every 4 pixels are grouped into 6 bytes which strange offsets:
int localoffset = offset % 6;
// This is the 'base pointer' for a group of 4 pixels (6 bytes)
char *ptr = data + offset - localoffset;
switch(x % 4) {
case 0:
return ((unsigned int)ptr[3] & 0xf0) << 4 | (ptr[3] & 0x0f) << 4;
case 1:
return ((unsigned int)ptr[1] & 0x0f) << 8 | (ptr[0] & 0xf0) << 0;
case 2:
return ((unsigned int)ptr[4] & 0xf0) << 4 | (ptr[4] & 0x0f) << 4;
case 3:
return ((unsigned int)ptr[2] & 0x0f) << 8 | (ptr[5] & 0xf0) << 0;
}
I have a RAW -> 16-bit, 3-channel RGB without interpolation program to do the testing with, which I have attached. This allows you to load the image in photoshop or somesuch with 16bpp, big-ending (Mac), 3 channels (interleaved), 1860x1386.