
*****************************************************************************
                        The SVGA-VESA Unit V0.72
                           Deutsche Anleitung
*****************************************************************************

In PCX.TXT ist eine englische und deutsche Anleitung fr den PCX-Konverter vorhanden 


1. Was ist neu seit V0.6?


  V0.72 - 02.04.97 (Kein Aprilschertz!)

          jetzt untersttzung fr Colour-Fonts
          15 Stck werden mitgeliefert! (Unit Draw)
          in nchster Version dann Editor!

  V0.7 - 01.03.97
         neue ADGF/LBM Bildladeroutinen  - ber 50% schneller
         neuer 32bit Konverter
         einige Bugs wurden entfernt
         BMP untersttzung
         Erkennung der Bilder
         Einheitliche Unit

  V0.6 - 01.01.97

    erstes Release



Wilkommen zur SVGA-Vesa Unit von Art Design Software.
Wir haben uns bemht ein gutes Produkt auf die Beine zu stellen.
Was dabei rausgekommen ist, knnen sie in dieser Demoversion selber
feststellen.

Diese nicht eingeschrnkte Demoversion drfen sie nur 30 Tage lang
benutzen. Programme, welche diese Unit(s) benutzen drfen NICHT
weitergegeben werden. Sollten sie Interesse haben, Programme die
diese Units benutzen weiterzugeben, so knnen sie sich bei uns registrieren
lassen. Sie erhalten dann die aktuellste Version der SVGA-Vesa Unit
auf ihnen personalisiert. Diese registrierte Version drfen sie dann
NICHT weitergeben. Diese ist speziell auf sie registriert. Auerdem
erhalten sie, wenn sie sich registrieren lassen kostenlose Updates.
Lebenslanger Support per E-mail und 1 Jahr langer Support per Post
sind weitere Vorteile einer Registrierung.
Es gibt zwei Wege sich registrieren zu lassen.

1. --> Registrierung per E-mail:

       Kostenpunkt: 20 DM oder 20.000 Lire oder 15 US-Dollar
       Vorteile:    Billiger - sie erhalten Registrierschlssel per E-mail
       Nachteile:   Sie mssen in Besitz des Registrier-Installationsprogramm
		    sein, welches noch nicht fertiggestellt ist, und deshalb
		    diesem Paket nicht beiliegt. Das heit, da Registrierung
                    per E-mail ist (noch - 01 Apr 97) nicht mglich.
		    In Krze knnen sie dieses Installationsprogramm
		    aber von unserer Homepage downloaden:

		    http://www.netforward.com/comports/?artdesign oder
		    http://www.geocities.com/SiliconValley/Pines/4855 oder
                    http://home.inm.ch/artdesign

       Vorgangsweise: Sie senden uns einen Brief mit ihrer Adresse und
		     dem Geld in Bar oder einen Euro-Scheck (lautend
		     auf Andreas Kostner) und teilen uns ein
		     mind. 2 stelliges Pawort und ihre E-mail Adresse mit.
		     Der Registrier-Schlssel wird ihnen dann per Anhang
		     eines E-mails geschickt. Da der E-mail Datenaustausch
		     aber unsicher ist, mssen sie dieses Pawort bei der
		     Installation eingeben. Sollten sie es nicht mehr
		     wissen, so setzen sie sich mit uns in Verbindung.
		     Auf jeden Fall, schreiben sie es sich gut auf!
		     Sie sollten uns das Pawort NICHT per E-mail schicken,
		     sondern per normaler Post.
		     Mit dem erhaltenen Schlssel und ihrem Pawort, knnen
		     sie sich nun mit Hilfe des Installationsprogramms ihre
		     pershnliche SVGA-VESA Unit erstellen.

2. --> Registrierung per E-mail:

    Kostenpunkt: 25 DM oder 25.000 Lire oder 18 US-Dollar

    Vorteile: Nicht jeder hat Internet! - Momentan (08 Jan 97) einzige
	      Registrierungsmethode, welche untersttzt wird.
    Nachteile: Teurer, da ich Brief, Porto und Disk bezahlen mu!

    Vorgangsweise: Sie schicken uns einen Brief mit ihrer Adresse und dem
		   Betrag in Bar, oder einen Euro-Scheck lautend auf Andreas
		   Kostner. Sie erhalten dann per Post einen Brief mit
		   einer Disk, auf der sie alle Units finden werden.


  Anschlieend noch unsere Adresse:

  Art Design Software
  c/o Andreas Kostner
  Vergilstr. 33

  39012 - MERAN
  Italy (BZ)

  Email: artdesign@comports.com


Soweit zur Registrierung, nun zur Anleitung:


Sie werden nur eine (gut) dokumentierte Version des Interface-Teils
einer jeden Unit finden, da wir der Meinung sind, da das volkommen reicht.
Sollten dennoch Fragen offenbleiben, dann senden sie uns doch ein
E-mail oder auch einen Brief. Wir sind fr Fragen und Verbesserungs-
vorschlge immer offen. Es sind nur zwei Beispielprogramme mitgeliefert,
weil in einem der Beiden sogut wie alle Befehle eingesetzt werden.

Zuerst wollen wir ihnen erklren, was es mit dem ADGF auf sich hat:

Anfangs '96 brauchte ich unbedingt einen Loader fr SVGA-Bilder.
Ich hatte jedoch keinerlei Unterlagen zu irgendwelchen Bildformatten und
VESA-Interrupts. Das einzige was ich hatte, war ein sehr langsamer GIF-Loader
fr die Graph-Unit. Da mir dieser Loader viel zu langsam erschien, schrieb ich
ein Programm, das einfach den gesamten Bildschirminhalt abspeichert. Da die
Bilder jedoch einen horrenden Platzbedarf hatten (307.200 bytes fr 640x480),
mute ich einen Komprimieralgorithmus entwickeln. Ich hatte schon mal etwas
vom RLE-Verfahren (Run Length Encoding) gehrt. Es beruht darin, da es
aufeinander folgende gleiche Bytes nicht einfach abspeichert, sondern ein
sog. Wiederholbyte und dann das eigentliche Datenbyte abspeichert. d.h.
Anstatt 100 mal das Byte AA abzuspeichern, wird einfach die Zahl 100 und
dann AA abgespeichert, was 2 anstatt 100 Bytes Platz aufbraucht. Die Ganze
Sache hat jedoch einen Haken: Da alle 256 mglichen Werte eines Bytes fr
die versch. Farben bentigt werden, mu ein Wiederholugsbyte mit einem Trick
markiert werden. Der Trick basiert darauf, da alle Zahlen ber 127
automatisch ein Wiederholungsbyte darstellen und zwar die Zahl-127 mal.
Sollte jetzt ein einzelner Pixel sein, der die Farbe 200 besitzt, so mssen
2 Byte abgespeichert werden. Als erstes ein Wiederholbyte mit dem Wert 127+1
und dann die Zahl 200. Dies kann unter Umstnden dazu fhren, da ein
komprimiertes Bild sogar mehr Speicher aufbraucht als ein unkomprimiertes.
Um dieses Manko zu beseitigen kam ich auf die Idee mehrere Bilder zu
untersuchen, ob sie denn wirklich alle 256 Farben benutzen. Ich kam zum
Ergebniss, da fast kein Bild alle 256 Farben benutzt. Diese Bilder knnen
mit einem Programm wie Paint Shop Pro auf 255 Farben herunterberechnet werden,
ohne da man sichtbare Vernderungen feststellt. Diese Farbe, welche nie
benutzt wird stellt dann eine Markierung dar. Das hat jetzt Vorteile aber
auch Nachteile. Zudem kam ich auf die Idee Pawortgeschtzte Bilder zu
erstellen. Die entschlsselung geschieht in Echtzeit mit einer winzigen
Verzgerung. Die so verschlsselten Bilder ergeben mit einem falschen
Pawort nur ein totales Wirrwarr.

Eine kurze Gegenberstellung der Vor- und Nachteile:

VORTEILE:

- Datei wird nie grsser als unkomprimierte
- In den meisten Fllen ist die Datei kompakter als PCX,BMP oder
  hnliche Formate, welche das normale RLE-Verfahren bentzen
- Wiederholungen von mehr al 127 mal bentigen nur 3 anstatt 4 Byte
-  Einzelne Pixel mit einem Farbwert ber 127 bentigen nur 1 anstatt 2 Byte
-  Pawortgeschtzte Bilder sind mglich
-  Da das ADGF-Format so gut wie unbekannt ist, kann kein
   Mchtegern-Hacker einfach die Bilddateien eines Spiels o.. verndern


NACHTEILE:

- Wiederholungen von weniger als 128 mal bentigen 3 anstatt 2 Byte
- Kann nicht mit x-beliebigem Konvertierungsprogramm erstellt werden

  Die Anleitung zum PCX nach ADGF Konverter finden sie unter PCXC.doc

  Bitte lesen sie den Text am Ende des Dokuments genau durch!

  Jetzt aber zu den einzelnen Units und deren Befehle:

                        
  Unit SVGAVESA
  ----------------

  a) vordefinierte Typen
  ----------------------

  type TTBlock=Record
               br,h:word;
               buf:Array[1..64000] of byte;
               end;
       TBlock=^TTBlock;

  TBlock ist ein Vordefinierter Typ fr die Get/PutBlock Prozeduren

  b) vordefinierte Variablen
  --------------------------

    palette:Array[0..256*3-1] of Byte; In diesem Array wird die Farbpalette
                                       mit GetPal gespeichert.
    ScreenX,ScreenY:longint;           Breite und Hhe des Screens
    VesaErr:word;                      Fehlervariable


  c) Prozeduren und Funktionen
  ----------------------------

Procedure InitVESA(Mode:word);
Setzt einen Vesa Modus (z.b. $101) - Modi siehe unten

Procedure SetText;
Setzt den normalen Textmodus 80x25 (VGA Modus 3h)

Procedure Colour(ColorNo : Byte; R,G,B : Byte);
Setzt die Farbe mit der Nummer [ColorNo] auf die Werte [R,G,B]

Procedure SetScanWidth(width:word);
Setzt die Breite des Screens auf [width] - Hat keine Auswirkung auf die
Auflsung, aber so wird ein horizontales scrolling ermglicht.
ACHTUNG: Evtl. schon auf den Screen befindlichen Grafiken werden verzerrt!

Procedure Set_VisualPage(which:word);
Setzt die sichtbare Seite auf [wich] - siehe Tabelle [Seitengren u.a.] unten

Procedure Set_ActivePage(which:word);
Setzt die aktive Seite auf [wich] - jegliche Operation erfolgt nun auf dieser
Seite. Auch Bildladeroutinen!                

Function  ImageSize(x,y,x2,y2:integer):word;
Liefert den Speicherverbrauch eines Blockes. Sollte der Auschnitt mehr
als 64kb bentigen, so wird VesaErr auf 1 gesetzt.
VesaErr wird nicht automatisch wieder auf 0 gesetzt, das mu manuell geschehen

Procedure GetBlock(var bl:TBlock;x,y,x2,y2:integer);
Kopiert den Bildschirmbereich von [x,y] bis [x2,y2] in das Array, welches
als [bl] bergeben wird.                           

Procedure PutBlock(bl:TBlock;x,y:integer);
Kopiert den in einem Array befindlichen Block auf den Bildschirm

Procedure PutYFlip(bl:TBlock;x,y:integer);
Bewirkt das gleiche wie PutBlock, jedoch wird der Block y-spiegelverkehrt
auf den Bildschirm kopiert.                           

Procedure FlipX(var bl:TBlock);
Der im Speicher befindliche Block wird auf die X-Achse gespiegelt

Procedure Clear(color:byte);
Lscht eine ganze Seite mit der Farbe [color]

Procedure SetStart(pixel,line:word);
Setzt den Start des sichtbaren Ausschnittes auf [pixel,line]
Dadurch kann ganz leicht ein scrolling verwirklicht werden (siehe Beispiel)

Procedure Fade_in(ZPal:Array of Byte);
Blendet die Farbpalette von der aktuellen Palette nach der Palette in ZPal
Das faden erfolgt dabei streng von einem niedrigen Wert (z.b. 0 - Schwarz)
zu einem hheren sprich helleren. Das Array ZPal kann erstellt werden
mit :
 GetPal;Move(Palette,ZPal,768);

Danach sollte der Screen z.b. Schwarz gemacht werden und dann auf die
gesicherte Palette bergefadet werden:

 FillChar(Palette,768,0);SetPal;
 Fade_in(ZPal);

Procedure Fade_out(ZPal:Array of Byte);
Dieser Befehl ist analog zum Befehl Fade_in, das faden erfolg hier jedoch
streng von einem hohen zu einem niederen Farbwert                

Procedure FadeOut;
Blendet das Bild aus - Fadet also alle Farben nach Schwarz     

Procedure Fade_To(Zielpal:Array of Byte; Schritt:Byte);
Fadet zu einer bestimmten Palette mit der Geschwindigkeit [Schritt]

Procedure Screen_Off;
Schaltet den Bildschirm aus - er wird unsichtbar

Procedure Screen_On;
Schaltet die Anzeige des Bildschirmes wieder ein

Procedure WaitRetrace;
Wartet auf den Vertikalen Strahlenrcklauf (Retrace)                

Procedure SetPal;
Setzt die Palette, welche im vordefinierten Array [Palette] gespeichert ist

Procedure GetPal;
Kopiert die aktuelle Palette in das vordefinierte Array [Palette] 

Procedure PutPixel(x,y:word;color:byte);
Setzt den Pixel auf der Position [x,y] auf den Wert [Color]  

Function  GetPixel(x,y:word):byte;
Liefert die Farbe des Pixels auf [x,y]

Procedure PutLine(y:word;var buf:Array of byte);
Kopiert die im Array [buf] befindliche Linie auf den Bildschirm und
zwar auf Position [0,y] - Die Lnge ist je nach Auflsung verschieden

Procedure PutPLine(x,y,num:word;var buf:Array of byte);
Kopiert die im Array [buf] befindliche Linie mit der Lnge [num] auf
den Bildschirm und zwar auf Position [x,y] 

Function IdealMode(width,height:integer):integer;
Liefert eine Vesa-Mode nummer
 Die fr die Auflsung width * height idealste Auflsung wird zurckgeliefert
 z.B.
   IdealMode(640,480) --> $101  [640*480]
   IdealMode(720,300) --> $103  [800*600]
   IdealMode(600,700) --> $105  [1024*768]     


------------------------------------------------------------------------------

  Unit DRAW
  ------------

vordefinierte variablen:
------------------------

    colwidth,colheight: Breite bzw. Hhe des Fonts!
    Font_Error:
                   1 --> Kann Font-Datei nicht finden (Loadfont)
                   2 --> Kein ADF (Art Design Font) (Loadfont)

Procedure HLine(x,y,x2:word;colour:byte);
Zeichnet eine horizontale Linie von [x,y] nach [x2,y] in der Farbe [colour]

Procedure VLine(x,y,y2:word;colour:byte);
Zeichnet eine vertikale Linie von [x,y] nach [x,y2] in der Farbe [colour]

Procedure Line(x1, y1, x2, y2 : integer; colour : byte);
Zeichnet eine Linie beliebiegen Grades von [x,y] nach [x2,y2] in der Farbe [colour]

Procedure Bar(x,y,x2,y2:word;colour:byte);
Zeichnet ein geflltes Rechteck von [x,y] nach [x2,y2] in der Farbe [colour]

Procedure Box(x,y,x2,y2:word;colour:byte);
Zeichnet ein leeres Rechteck von [x,y] nach [x2,y2] in der Farbe [colour]

Procedure Circle(x,y,radius:word;colour:byte);
Zeichnet einen Kreis mit dem Mittelpunkt [x,y] und dem Radius [radius] in
der Farbe [colour]                                                

Procedure PrintChar(x,y:integer;vg,hg:byte;zeichen:char);
Schreibt den Buchstaben [zeichen] in der ROM-Schrift 8x8 auf
Position [x,y] mit der Vordergrund- und Hintergrundfarbe [vg,hg] 

Procedure Text(x,y:integer;vg,hg:byte;strt:string);
Schreibt einen String [strt] in der ROM-Schrift 8x8 auf
Position [x,y] mit der Vordergrund- und Hintergrundfarbe [vg,hg]


ACHTUNG:
Wie sie vielleicht bemerkt haben, sind nicht alle Zeichen in den
Fonts vorhanden und auerdem nur Grobuchstaben - bein manchen
Schriften fehlen auch die Zahlen, aber keine Angst ein Editor
ist in Vorbereitung!

Procedure LoadFont(name:string;setpa:boolean);
Ldt den Font mit den Filenamen [name] in den Speicher und
setzt wenn setpa=true die Palette des Fonts
Fehler siehe oben!

Procedure DoneFont;
Lscht den geladenen Font aus dem Speicher

Procedure PrintColChar(X,Y: INTEGER; CH: CHAR);
Schreibt ein Zeichen mit dem Colour-Font

Procedure ColText(X,Y: INTEGER; S: STRING);
Schreibt einen Text mit dem colour-Font


------------------------------------------------------------------------------


Unit SVGAPic;


  Untersttzt werden (alle 256 Farben)

    1 --> ADGF-Bilder Format 3 - Konverter beiliegend
    2 --> kompr. PCX - Bilder
    3 --> kompr. LBM/PBM - Bilder
    4 --> unkompr. BMP - Bilder


  a) vordefinierte Typen
  ----------------------

type pic_format=(bmp,pcx,lbm,adgf,none);

  pic_format wird von Get_PicFormat bentzt


  b) vordefinierte Variablen
  --------------------------

var Pic_Error:integer;             

          -1 --> Kann Datei nicht finden/ffnen
           1 --> Kein ADGF-File
           2 --> Altes V2-File 
           3 --> Kein PCX-File
           4 --> Kein BMP-File
           5 --> Kein unkomprimiertes BMP Bild
           6 --> Nicht 8bits per pixel [BMP]
           7 --> Kein LBM/PBM Bild

  Jede Prozedur/Funktion setzt Pic_Error beim starten auf 0
  Sollte innerhalb der Prozedur/Funktion ein Fehler auftreten, dann
  wird Pic_Error dementsprechend gesetzt.



  c) Prozeduren und Funktionen
  ----------------------------

  Procedure Show_PicError;
  Haben sie keine Lust Pic_Error selbst auszuwerten, dann rufen Sie
  einfach Show_PicError auf. Es wird dann eine kurze Nachricht ausgegeben
  und das Programm abgebrochen 

  Function  Get_PicFormat(st:string):pic_format;
   Liefert das Format des Bildes:
	 z.B.   Get_PicFormat('svga.xxx') --> adgf

	 Andwendung If Get_PicFormat(Paramstr(1))<>none then
	 Begin
	  .....
	 end

   siehe auch LoadPics.pas !

  Procedure PicData(s:string;var width,height:integer);
   Sollte das Bild in einem der 4 untersttzten Formate sein,
   so werden die Daten des Bildes in width und height gespeichert
   Wenn nicht, dann enthlt sowohl width als auch height -1  


  Procedure LoadADGF(filename:string;setpa:boolean);
  Procedure LoadBMP (filename:string;setpa:boolean);
  Procedure LoadLBM (filename:string;setpa:boolean);
  Procedure LoadPCX (filename:string;setpa:boolean);
   Ldt ein ADGF/BMP/PCX/LBM Bild auf die aktuelle Bildschirmseite
   Sollte das Bild hher als der Screen sein, so werden die nachfolgenden
   Daten einfach weitergeschrieben, d.h. Man kann ein 640x800 Bild laden
   und dann scrollen
   Ist setpa = true dann wird die Bildeigene Palette gesetzt ansonsten nicht 


  Procedure LoadPADGF(filename,passwort:string;setpa:boolean);
   Ldt ein passwort-geschtztes ADGF-Bild und stellt es dar (s.o.) 

  Procedure LoadXYbmp(filename:string;setpa:boolean;x,y :integer);
  Procedure LoadXYpcx(filename:string;setpa:boolean;x,y:integer);
   Ldt ein PCX/BMP Bild an die Position [x,y] (s.o.) 

  Procedure ADGFData(s:string;var width,height:integer);
  Procedure BMPData (s:string;var width,height:integer);
  Procedure LBMData (s:string;var width,height:integer);
  Procedure PCXData (s:string;var width,height:integer);
   Liefert die Breite und Hhe des Bildes
   Sollte das Bild nicht im entsprechenden Format sein, so
   enthalten width und height -1 


  Function IsADGF(s:string):boolean;
  Function IsBMP(s:string):boolean;
  Function IsLBM(st:string):boolean;
  Function IsPCX(s:string):boolean;
   Liefert true wenn das Bild ein ADGF/BMP/LBM/PCX - Bild ist 



Soweit zu den einzelnen Prozeduren.

------------------------------------------------------------------------------

Liste aller mglichen VESA-Modes, welche von SVGAVESA untersttzt werden:

$100 -  640 x 400  x 256 Colours
$101 -  640 x 480  x 256 Colours
$103 -  800 x 600  x 256 Colours
$105 - 1024 x 768  x 256 Colours
$107 - 1200 x 1024 x 256 Colours

------------------------------------------------------------------------------

Liste des Speicherverbrauchs versch. VESA-Modes:

Auflsung  | Speicherverbrauch 1 Seite | mind. RAM | mind. RAM fr 2 Seiten
--------------------------------------------------------------------------
 640x 400  |   256.000 bytes            | 256kb     | 512kb  - 2 Seiten
 640x 480  |   307.200 bytes            | 512kb     | 1 MB   - 3 Seiten
 800x 600  |   480.000 bytes            | 512kb     | 1 MB   - 2 Seiten
1024x 768  |   786.432 bytes            | 1 MB      | 2 MB   - 2 Seiten
1200x 1024 | 1.228.800 bytes            | 2 MB      | 4 MB   - 3 Seiten

------------------------------------------------------------------------------



Soweit die kurze Einleitung. Ich denke das drfte fr eine Anleitung gengen
Sollten jedoch noch Fragen offen sein, so zgern sie nicht
und senden sie uns unverzglich eine Nachricht:

  artdesign@comports.com

Oder schauen sie doch einmal auf unsere Homepage:

  http://www.netforward.com/comports/?artdesign  oder

  http://home.inm.ch/artdesign




Zum Schlu noch die blichen Zeilen (leider auf Englisch aber trotzdem gltig!):



THE SOFTWARE IN THE DISTRIBUTED FILE HAS NO GUARANTEE OF ANY TYPE WHATSOEVER.

IN NO EVENT WILL THE AUTHOR OF THIS PROGRAM (Andreas Kostner)
BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS,
LOST SAVINGS, OR OTHER INCIDENTIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR THE INABILITY TO USE SUCH PROGRAM, EVEN IF THE AUTHORS HAVE BEEN
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER
PARTY.

DO NOT USE VIDEO MODES THAT YOUR MONITOR CANNOT HANDLE. EXCLUDE THESE MODES
FROM USE.

THIS PRODUCT MAY BE DISTRIBUTED FREELY IN UNMODIFIED FORM AS LONG AS NO
FEES ARE CHARGED. DO NOT DISTRIBUTE THE FILE 'REGISTER.DAT'. IN THIS FILE
YOUR PERSONAL DATA IS SAVED IF YOU ARE REGISTERED! IF YOU DISTRIBUTE THIS
FILE YOU VIOLATE INTERNATIONAL RIGHTS!

IF YOU DO NOT AGREE WITH THESE TERMS, STOP USING THIS PROGRAM.
--------------------------------------------------------------

ALL PRODUCT NAMES MENTIONED IN THIS SOFTWARE AND DOCUMENT ARE TRADEMARKS
OR REGISTERED TRADEMARKS OF THEIR RESPECTIVE OWNERS.

