dmb@TIS.COM (David M. Baggett) (07/26/88)
The description of Degas Elite compressed was wrong in the list I posted on
Friday. Oops. Turns out that the later Degas Elite manuals were "edited"
to the point that the descriptions of the compression schemes were made
thoroughly misleading.
Thanks to David Brooks for pointing out the error (and the correction).
Here's the corrected version:
(assuming I didn't screw something up again!)
---------------------------->8 Cut Here >8 ----------------------------------
ST Picture Formats
------------------
Compiled by:
Dave Baggett
(arpanet: dmb@TIS.COM)
(Please report errors or additions)
CONTRIBUTORS
David Brooks Ken MacLeod Darek Mihocka George Seto
Joe Smith Greg Wageman Gerry Wheeler
Introductory information
------------------------
word = 2 bytes
long = 4 bytes
palette = Hardware color palette, stored as 16 words. First word is
color register zero (background), last word is color register
15. Each word has the form:
Bit: (MSB) 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (LSB)
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
0 0 0 0 0 R2 R1 R0 0 G2 G1 G0 0 B2 B1 B0
R2 = MSB of red intensity
R0 = LSB of red intensity
G2 = MSB of green intensity
G0 = LSB of green intensity
B2 = MSB of blue intensity
B0 = LSB of blue intensity
Intensity ranges from 0 (color not present) to 7 (highest
intensity).
Example: { red = 7, green = 3, blue = 5 } -> 0735 (hex)
The Formats
-----------
<NEOChrome>
1 long resolution (0 = low res, 1 = medium res, 2 = high res)
16 words palette
12 bytes filename (" . ")
1 byte Left color animation limit (starting color number)
1 byte Right color animation limit (ending color number)
1 byte color rotation speed
1 byte color rotation direction
1 word color rotation duration (number of iterations)
18 longs reserved for expansion
16000 words picture data (screen memory)
-----------
32128 bytes total
<DEGAS>
1 word resolution (0 = low res, 1 = medium res, 2 = high res)
Other bits may be used in the future; use a simple bit
test rather than checking for specific word values.
16 words palette
16000 words picture data (screen memory)
-----------
32034 bytes total
<DEGAS Elite (Uncompressed)>
1 word resolution (0 = low res, 1 = medium res, 2 = high res)
Other bits may be used in the future; use a simple bit
test rather than checking for specific word values.
16 words palette
16000 words picture data (screen memory)
4 words left color animtion limit table (starting color numbers)
4 words right color animation limit table (ending color numbers)
4 words animation channel direction flag (0 = left, 1 = off, 2 = right)
4 words animation channel delay in 1/60's of a second. [0 - 128]
-----------
32066 bytes total
<DEGAS Elite (Compressed)>
1 word resolution (same as Degas, but high order bit is set;
i.e., hex 8000 = low res, hex 8001 = medium res,
hex 8002 = high res). Other bits may be used in the
future; use a simple bit test rather than checking
for specific word values.
16 words palette
< 32000 bytes control bytes
4 words left color animtion limit table (starting color numbers)
4 words right color animation limit table (ending color numbers)
4 words animation channel direction flag (0 = left, 1 = off, 2 = right)
4 words animation channel delay in 1/60's of a second. [0 - 128]
-----------
< 32066 bytes total
Control byte meanings:
For a given control byte, x:
0 <= x <= 127 Use the next x + 1 bytes literally (no repetition)
-127 <= x <= -1 Use the next byte -x + 1 times
-128 No operation (ignore)
Compression Scheme:
Each scan line is compressed separately; i.e., all data for a given
scan line appears before any data for the next scan line. The scan lines
are specified from top to bottom (i.e., 0 is first). For each scan line,
all the data for a given bit plane appears before any data for the next
higher order bit plane.
To clarify: The first data in the file will be the data for the lowest
order bit plane of scan line zero, followed by the data for the next higher
order bit plane of scan line zero, etc., until all bit planes have been
specified for scan line zero. The next data in the file will be the data
for the lowest order bit plane of scan line one, followed by the data for
the next higher order bit plane of scan line one, etc., until all bit planes
have been specified for all scan lines.
<C.O.L.R. Object Editor Mural>
16000 words picture data (screen memory)
(palettes are stored in separate files)
-----------
32000 bytes total
<Tiny>
1 byte resolution (same as NEO, but +3 indicates rotation
information also follows)
If resolution > 2 {
1 byte left and right color animation limits. High 4 bits
hold left (start) limit; low 4 bits hold right (end)
limit
1 byte direction and speed of color animation (negative value
indicates left, positive indicates right, absolute value
is delay in 1/60's of a second.
1 word color rotation duration (number of iterations)
}
1 word number of control bytes
1 word number of data bytes
16 words palette
3-10667 bytes control bytes
2-32000 bytes data bytes
-------------
42-32044 bytes total
Control byte meanings:
For a given control byte, x:
x < 0 Absolute value specifies the number of unique words to
take from the data section (from 1 to 127)
x = 0 1 long is taken from the control section which specifies
the number of times to repeat the next data word (from
128 to 32767)
x = 1 1 word is taken from the control section which specifies
the number of unique words to be taken from the data
section (from 128 - 32767)
x > 1 Specifies the number of times to repeat the next word
taken from the data section (from 2 to 127)
<Spectrum 512 (Uncompressed)>
80 words First scan line of picture (unused) -- should be zeroes
15920 words picture data (screen memory) for scan lines 1 through 199
9552 words 3 palettes for each scan line (the top scan line is
not included because Spectrum 512 can't display it)
-----------
51104 bytes total
<Spectrum 512 (Compressed)>
1 word 5350 (hex) ("SP")
1 word 0 (reserved for future use)
1 long length of data bit map
1 long length of color bit map
<= 32092 bytes compressed data bit map
<= 17910 bytes compressed color bit map
--------------
< 50014 bytes total
Data compression:
Compression is via a modified run length encoding (RLE) scheme. The
data map is stored as a sequence of records. Each record consists of a
header byte followed by one or more data bytes. The meaning of the header
byte is as follows:
For a given header byte, x:
0 <= x < 127 Use the next x + 1 bytes literally (no repetition)
-128 <= x < 0 Use the next byte -x + 2 times
The data appears in the following order:
1. Picture data, bit plane 0, scan lines 1 - 199
2. Picture data, bit plane 1, scan lines 1 - 199
3. Picture data, bit plane 2, scan lines 1 - 199
4. Picture data, bit plane 3, scan lines 1 - 199
Decompression of data ends when 31840 data bytes have been used.
Color map compression:
Each 16-word palette is compressed separately. There are three
palettes for each scan line (597 total). The color map is stored as a
sequence of records. Each record starts with a 1-word bit vector which
specifies which of the 16 palette entries are included in the data
following the bit vector (1 = included, 0 = not included; i.e., stays
the same). The least significant bit of the bit vector refers to
palette entry zero, while the most significant bit refers to palette
entry 15. Bit 15 must be zero, since Spectrum 512 does not use palette
entry 15. Bit 0 should also be zero, since Spectrum 512 always makes the
background color black.
The words specifying the values for the palette entries indicated in
the bit vector follow the bit vector itself, in order (0 - 15).
(Version of Tue Jul 26)
---------------------------->8 Cut Here >8 ----------------------------------