PhotoChrome file format

From AtariForumWiki
Jump to: navigation, search
PhotoChrome     *.PCS (low resolution only)

1 word          0x0140 (hex) x-resolution (always 320)
1 word          0x00C8 (hex) y-resolution (always 200)
1 byte          00 = single screen mode
                nonzero value's = alternating screen mode,
                bit 0 (0x01) not set: second screen data is xor'ed with first screen
                bit 1 (0x02) not set: second color palette is xor'ed with first
1 byte          bit 0 (0x01) set: 50 Hz mode, when not set 60 Hz mode
?? bytes        compressed screen data
?? bytes        compressed palette
?? bytes        compressed second screen data (in case of alternating screens)
?? bytes        compressed second palette
-------------
 > 18 bytes      total

Screen compression scheme:
1 word          total number of control bytes that follow
1 control byte  x
                x < 0 : copy -x literal bytes (1 - 128)
                x = 0 : next word specifies the number of times the following byte 
                        has to be copied (0-65535)
                x = 1 : next word specifies the number of bytes to be copied (0-65535)
                x > 1 : repeat the next byte x times (2-127)

The 4 bitplanes are separated, first 8000 bytes of the first bitplane, then 8000 bytes 
for the second, 8000 bytes for the third and 8000 bytes for the fourth; a total of 32000 bytes.

Palette compression scheme:
the palette compression scheme is the same as the screen compression but it works with 
16 bit words
1 word          total number of control bytes that follow
1 control byte  x
                x < 0 : copy -x literal words (1 - 128)
                x = 0 : next word specifies the number of times the following word 
                        has to be copied (0-65535)
                x = 1 : next word specifies the number of words to be copied (0-65535)
                x > 1 : repeat the next word x times (2-127)

In total 9616 palette entries are stored. 200 scanlines with 3 palettes
(48 colors) each, plus one final palette (16 colors). PhotoChrome files
with a few extra entries have been found. The first scanline usually
contains no data.

/*
 *  Given an x-coordinate and a color index, returns the corresponding
 *  Photochrome palette index.
 *
 *  by Hans Wessels; placed in the public domain January, 2008.
 */
int find_pcs_index(int x, int c)
{
	int x1=4*c;
	int index = c;
	if(x>=x1)
	{
		index+=16;
	}
	if((x>=(x1+64+12)) && (c<14))
	{
		index+=16;
	}
	if((x>=(132+16)) && (c==14))
	{
		index+=16;
	}
	if((x>=(132+20)) && (c==15))
	{
		index+=16;
	}
	x1=10*c;
	if((c&1)==1)
	{
	  x1-=6;
	}
	if((x>=(176+x1)) && (c<14))
	{
		index+=16;
	}
	return index;
}

Back to ST Picture Formats