<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.temlib.org/AtariForumWiki/index.php?action=history&amp;feed=atom&amp;title=Cyber_Paint_Sequence_file_format</id>
	<title>Cyber Paint Sequence file format - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.temlib.org/AtariForumWiki/index.php?action=history&amp;feed=atom&amp;title=Cyber_Paint_Sequence_file_format"/>
	<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Cyber_Paint_Sequence_file_format&amp;action=history"/>
	<updated>2026-05-06T18:16:56Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://www.temlib.org/AtariForumWiki/index.php?title=Cyber_Paint_Sequence_file_format&amp;diff=12292&amp;oldid=prev</id>
		<title>&gt;Lp: New page</title>
		<link rel="alternate" type="text/html" href="https://www.temlib.org/AtariForumWiki/index.php?title=Cyber_Paint_Sequence_file_format&amp;diff=12292&amp;oldid=prev"/>
		<updated>2017-01-03T00:08:38Z</updated>

		<summary type="html">&lt;p&gt;New page&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
Cyber Paint Sequence    *.SEQ (low resolution only)&lt;br /&gt;
&lt;br /&gt;
   This format, while fairly complex, yields excellent compression of animated&lt;br /&gt;
images while offering reasonably fast decompression times.&lt;br /&gt;
 &lt;br /&gt;
1 word          magic number [$FEDB or $FEDC]&lt;br /&gt;
1 word          version number&lt;br /&gt;
1 long          number of frames&lt;br /&gt;
1 word          speed (high byte is vblanks per frame)&lt;br /&gt;
118 bytes       reserved&lt;br /&gt;
---------&lt;br /&gt;
128 bytes       total for .SEQ header&lt;br /&gt;
&lt;br /&gt;
for each frame {&lt;br /&gt;
1 word          type (ignored?)&lt;br /&gt;
1 word          resolution [always 0]&lt;br /&gt;
16 words        palette&lt;br /&gt;
12 bytes        filename [usually &amp;quot;        .   &amp;quot;]&lt;br /&gt;
1 word          color animation limits [not used]&lt;br /&gt;
1 word          color animation speed and direction [not used]&lt;br /&gt;
1 word          number of color steps [not used]&lt;br /&gt;
1 word          x offset for this frame [0 - 319]&lt;br /&gt;
1 word          y offset for this frame [0 - 199]&lt;br /&gt;
1 word          width of this frame, in pixels (may be 0, see below)&lt;br /&gt;
1 word          height of this frame, in pixels (may be 0, see below)&lt;br /&gt;
1 byte          operation [0 = copy, 1 = exclusive or]&lt;br /&gt;
1 byte          storage method [0 = uncompressed, 1 = compressed]&lt;br /&gt;
1 long          length of data in bytes (if the data is compressed, this&lt;br /&gt;
                will be the size of the compressed data BEFORE decompression)&lt;br /&gt;
60 bytes        reserved                &lt;br /&gt;
--------&lt;br /&gt;
128 bytes       total for frame header&lt;br /&gt;
&lt;br /&gt;
? bytes         data&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
   Frames are &amp;quot;delta-compressed,&amp;quot; meaning that only the changes from one&lt;br /&gt;
frame to the next are stored.  On the ST, .SEQ files are always full-screen&lt;br /&gt;
low resolution animations, so the sequence resulting from expanding all the&lt;br /&gt;
data will be n 320 by 200 pixel low resolution screens, where n is given in&lt;br /&gt;
the .SEQ header.&lt;br /&gt;
  &lt;br /&gt;
   Since only the changes from frame to frame are stored, image data for a&lt;br /&gt;
frame will rarely be 320x200 (except for the very first frame, which will &lt;br /&gt;
always be a full screen).  Instead what is stored is the smallest rectangular&lt;br /&gt;
region on the screen that contains all the changes from the previous frame to&lt;br /&gt;
the current frame.  The x offset and y offset in the frame header determine&lt;br /&gt;
where the upper left corner of the &amp;quot;change box&amp;quot; lies, and the width and height&lt;br /&gt;
specify the box's size.&lt;br /&gt;
&lt;br /&gt;
   Additionally, each &amp;quot;change box&amp;quot; is stored in one of five ways.  For each&lt;br /&gt;
   of these, the screen is assumed to have the full-screen image from the last&lt;br /&gt;
   frame on it.&lt;br /&gt;
   &lt;br /&gt;
   o uncompressed copy:  The data for this frame is uncompressed image data,&lt;br /&gt;
     and is simply copied onto the screen at position (x, y) specified&lt;br /&gt;
     in the frame header.&lt;br /&gt;
&lt;br /&gt;
   o uncompressed eor:  The data for this frame is exclusive or'ed with the&lt;br /&gt;
     screen at position (x, y).&lt;br /&gt;
&lt;br /&gt;
   o compressed copy:  The data for this frame must be decompressed (see &lt;br /&gt;
     below), and then copied onto the screen at position (x, y) specified&lt;br /&gt;
     in the frame header.&lt;br /&gt;
 &lt;br /&gt;
   o compressed eor:  The data for this frame must be decompressed (see &lt;br /&gt;
     below), and then exclusive or'ed with the screen RAM at position (x, y).&lt;br /&gt;
 &lt;br /&gt;
   o null frame:  The width and/or height of this frame is 0, so this&lt;br /&gt;
     frame is the same as the previous frame.&lt;br /&gt;
   &lt;br /&gt;
   Of the 5 methods above, the one that results in the smallest amount&lt;br /&gt;
   of data being stored for a particular is used for that frame.&lt;br /&gt;
  &lt;br /&gt;
Compression Scheme:&lt;br /&gt;
&lt;br /&gt;
   Compression is similar to that employed by Tiny, but is not quite as&lt;br /&gt;
space-efficient.&lt;br /&gt;
&lt;br /&gt;
Control word meanings:&lt;br /&gt;
&lt;br /&gt;
        For a given control word, x:&lt;br /&gt;
&lt;br /&gt;
        x &amp;lt; 0   Absolute value specifies the number of unique words to&lt;br /&gt;
                take from the data section (from 1 to 32767).&lt;br /&gt;
        x &amp;gt; 0   Specifies the number of times to repeat the next word&lt;br /&gt;
                taken from the data section (from 1 to 32767).&lt;br /&gt;
&lt;br /&gt;
        Note that a control word of 0 is possible but meaningless.&lt;br /&gt;
&lt;br /&gt;
Format of expanded data:&lt;br /&gt;
&lt;br /&gt;
   The expanded data is not simply screen memory bitmap data; instead the four&lt;br /&gt;
bitplanes are separated, and the data within each bitplane is presented&lt;br /&gt;
vertically instead of horizontally.  (This results in better compression.)&lt;br /&gt;
&lt;br /&gt;
   To clarify, data for a full screen would appear in the following order:&lt;br /&gt;
   &lt;br /&gt;
   bitplane 0, word 0, scanline 0&lt;br /&gt;
   bitplane 0, word 0, scanline 1&lt;br /&gt;
   ...&lt;br /&gt;
   bitplane 0, word 0, scanline 199&lt;br /&gt;
   bitplane 0, word 1, scanline 0&lt;br /&gt;
   bitplane 0, word 1, scanline 1&lt;br /&gt;
   ...&lt;br /&gt;
   bitplane 0, word 1, scanline 199&lt;br /&gt;
   ... &lt;br /&gt;
   bitplane 0, word 79, scanline 199&lt;br /&gt;
   bitplane 1, word 0, scanline 0&lt;br /&gt;
   ... &lt;br /&gt;
   bitplane 3, word 79, scanline 199&lt;br /&gt;
&lt;br /&gt;
Note however, that the data does not usually refer to an entire screen, but&lt;br /&gt;
rather to the smaller &amp;quot;change box,&amp;quot; whose size is given in the frame header.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Back to [[ST Picture Formats]]&lt;/div&gt;</summary>
		<author><name>&gt;Lp</name></author>
	</entry>
</feed>