From: Bert.Greevenbosch@mmm.xs4all.nl (Bert Greevenbosch)
Date: 27 Feb 95 18:45:00 
Newsgroups: comp.os.msdos.programmer
Subject: DVM movie file format
Organization: Multi Media Master, +31-(0)10-4204461

DESCRIPTION DVM FORMAT (v1.0, v2.0, v3.0 and v3.1)
==================================================

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.

Any questions or suggestions? Write me!
E-mail: bert.greevenbosch@mmm.xs4all.nl
-------------------------------------------------------------------------------
    -> Internet: Bert.Greevenbosch@mmm.xs4all.nl
                 ..\|/ Multi Media Master +31-10-4204461 \|/..
    -> Standard disclaimer: The views of this user are strictly his own <-
-------------------------------------------------------------------------------

