HEADER

3 bytes:        "DVM"
1 byte:         version 1.0: "Q": quarter screen, "F": full screen.
                higher versions: "V".
Only by versions 2.0 and higher:
        1 byte version: Left nibble before point, right nibble after point.
        1 byte infobyte: Bits got the folowing information:
                bit 7:  0: quarter screen (160x100)     Version 2.0 and higher
                        1: full screen (320x200)
                bit 6:  0: not compressed
                        1: compressed
                bit 5:  0: standard palette (see next page)
                        1: enhanced palette
                bit 4:  0: 16 colors                    Version 3.0 and higher
                        1: 256 colors
                bit 3:  0: no text                      Version 3.1 and higher
                        1: text exist
1 word: time (ms) to wait after each frame.
If text exist:
        1 word: number of characters:
        x bytes: characters.

N.B. by version 1.0 the shower should define infobyte like this:
        If full screen: a0h = 160d
        If quarter screen: 20h = 32d

FRAMEDATA

If enhanced palette:
        If 16 colors: 48 bytes 6 bits rgb palette (r0, g0, b0, r1, g1, b1,
                                                   ..., r15, g15, b15)
        If 256 colors: 768 bytes rgb palette (0..255)

Framedata:
>From left to right, from top to bottom.
Example (quarter screen uncompressed):

        var
           bt: byte;
           fi: file;
           x, y: word;
        (...)
        for y:=0 to 99 do
           for x:=0 to 159 do
           begin
              blockread(fi,bt,1);
              putpixel(x,y,bt);
           end;

If compressed: Left nibble = byte 1, right nibble = byte 2.
Example (quarter screen compressed):

        var
           bt: byte;
           fi: file;
           x, y: word;
        (...)
        for y:=0 to 99 do
           for x:=0 to 79 do
           begin
              blockread(fi,bt,1);
              putpixel(x*2,y,(bt and $f0) shr 4);
              putpixel(x*2+1,y,bt and $0f);
           end;

STANDARD PALETTE

Does not exist in file, should be included with viewer.
Can be created like this;

        var
           palette: array [0..255] of record red, green, blue: byte; end;
           b, c, g, r: byte;
        (...)
        for c:=0 to 15 do
           with palette[c] do
           begin
              red:=round(c*4.2);
              green:=round(c*4.2);
              blue:=round(c*4.2);
           end;
        for r:=0 to 5 do
           for g:=0 to 5 do
              for b:=0 to 5 do
                 with palette[r*36+g*6+b+16] do
                 begin
                    red:=round(r*12.6);
                    green:=round(g*12.6);
                    blue:=round(b*12.6);
                 end;
        for c:=0 to 7 do
           begin
              with palette[232+c] do
              begin
                 red:=c*9;
                 green:=0;
                 blue:=0;
              end;
              with palette[240+c] do
              begin
                 red:=0;
                 green:=c*9;
                 blue:=0;
              end;
              with palette[248+c] do
              begin
                 red:=0;
                 green:=0;
                 blue:=c*9;
              end;
           end;

The DVM format was created by Magic Software and may only be modified by
members of Magic Software.