Tiny Stuff

From MultimediaWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
  • Company: David Mumper
  • Extensions: .tny, .tn1, .tn2, .tn3, .tn4, .tn5, .tn6

Tiny Stuff is an image compression format used on the Atari ST. Here's the m68k assembly decompression routine from the original Tiny Stuff 3.0 package.

16-bit words are stored in big-endian order.

File format

typedef tinystuff_file {
 uint8_t resolution;           /* 0 = low (320x200x16), 1 = medium (640x200x4), 2 = high (640x400x2) */
                               /* 3 = low and color animation is present, 4 = idem for medium, 5 = idem for high */
 struct {
  uint8_t animation_limits;    /* High nibble = start limit, low nibble = end limit */
  uint8_t animation_dirspeed;  /* negative = left, positive = right, timebase 1/60 */
  uint16_t duration;           /* number of iterations */
 } optional_animation_info;    /* if resolution < 3, this is not present */

 uint16_t palette[16];
 uint16_t number_of_control_bytes;
 uint16_t number_of_data_words;

 uint8_t control_bytes[];
 uint16_t data_words[];
} tinystuff_file;

Decompression algorithm

Unlike most other RLE variants, the control bytes and data are stored non-interleaved.

x refers to the current control byte, d and d+1 refer to the current and next data word:

x <  0    -x literal words
x == 0    d times d+1
x == 1    d literal words
x >  1    x times d

Uncompressed data format

The uncompressed data consists of four sets of 20 vertical columns. Each column is 16-bits wide.

for (set=0; set<4; set++)
  for (column=set; column<80; column += 4)
    for (scanline=0; scanline<200; scanline++) { }

Medium and high resolution data are handled as if they were low resolution.