home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 05 / grdlagen / bios2.pas next >
Encoding:
Pascal/Delphi Source File  |  1991-08-15  |  5.7 KB  |  147 lines

  1. (* ====================================================== *)
  2. (*                       BIOS2.PAS                        *)
  3. (*                  Das EGA/VGA-BIOS:                     *)
  4. (*    Die Programmierung der Paletten- und Farbregister   *)
  5. (*        Konstanten, Typen und Beispielprozeduren        *)
  6. (*           (c) 1990 Matthias Uphoff & TOOLBOX           *)
  7. (* ====================================================== *)
  8.  
  9. UNIT Bios2;
  10.  
  11. INTERFACE
  12.  
  13. CONST PBlue = 1;      (* Palettenwert für primäres Blau   *)
  14.       PGreen = 2;     (* Palettenwert für primäres Grün   *)
  15.       PRed = 4;       (* Palettenwert für primäres Rot    *)
  16.       SBlue = 8;      (* Palettenwert für sekundäres Blau *)
  17.       SGreen = 16;    (* Palettenwert für sekundäres Grün *)
  18.       SRed = 32;      (* Palettenwert für sekundäres Rot  *)
  19.  
  20. TYPE (* ===================== EGA/VGA =================== *)
  21.         (* Tabelle mit Paletten- und Overscan-Werte: *)
  22.      PaletteType = ARRAY[0..16] OF Byte;
  23.      (* ===================== VGA only ================== *)
  24.         (* Die drei Grundfarben als Aufzähltyp: *)
  25.      PrimaryColors = (Red, Green, Blue);
  26.         (* Die zulässigen Intensitätsstufen: *)
  27.      Intensity = 0..63;
  28.         (* Der Farbwert zusammengesetzt aus 3 Grundfarben *)
  29.      ColorValue = ARRAY[PrimaryColors] OF Intensity;
  30.  
  31. CONST (* ==================== EGA/VGA =================== *)
  32.         (* Die Standardpalette in den 16-Farben-Modi *)
  33.      DefaultPal: PaletteType = ($0,$1,$2,$3,$4,$5,$14,$7,
  34.                                 $38,$39,$3A,$3B,$3C,$3D,$3E,
  35.                                 $3F,$0);
  36.  
  37. PROCEDURE SetPalReg(RegNr, Color: Byte);
  38. PROCEDURE SetAllPal(Pal: PaletteType);
  39.      (* ===================== VGA only ================== *)
  40. FUNCTION ReadPalReg(RegNr: Byte): Byte;
  41. PROCEDURE SetColorReg(RegNr: Word; Color: ColorValue);
  42. PROCEDURE SetColorBlock(FirstReg, NrOfRegs: Word;
  43.                         VAR Colors);
  44. PROCEDURE ReadColorBlock(FirstReg, NrOfRegs: Word;
  45.                          VAR Colors);
  46. PROCEDURE GrayScale(FirstReg, NrOfRegs: Word);
  47.  
  48. (* ====================================================== *)
  49.  
  50. IMPLEMENTATION
  51.  
  52. USES Dos;         (* Einbindung der Prozedur Intr und des *)
  53.                   (* Datentyps Registers für BIOS-Aufrufe *)
  54. VAR R: Registers;
  55.  
  56. PROCEDURE SetPalReg(RegNr, Color: Byte);
  57.    (* Schreibt den Wert Color in das Palettenreg. RegNr *)
  58. BEGIN
  59.   R.AH := $10;   (* Funktionsnummer *)
  60.   R.AL := 0;     (* Unterfunktionsnummer *)
  61.   R.BH := Color; (* Der Farbwert nach BH *)
  62.   R.BL := RegNr; (* Die Registernummer nach BL *)
  63.   Intr($10,R);   (* BIOS-Call *)
  64. END;
  65.  
  66. PROCEDURE SetAllPal(Pal: PaletteType);
  67.    (* Setzt alle Paletten- und das Overscan-Register *)
  68.    (* gemäß den Angaben in der Tabelle Pal           *)
  69. BEGIN
  70.   R.AH := $10;       (* Funktionsnummer *)
  71.   R.AL := $2;        (* Unterfunktionsnummer *)
  72.   R.ES := Seg(Pal);  (* Die Segmentadresse der Tabelle *)
  73.   R.DX := Ofs(Pal);  (* Die Offsetadresse der Tabelle *)
  74.   Intr($10,R);       (* Friß oder stirb! *)
  75. END;
  76.  
  77. FUNCTION ReadPalReg(RegNr: Byte): Byte;
  78.    (* Gibt den Inhalt des Palettenregisters RegNr zurück *)
  79. BEGIN
  80.    R.AH := $10;           (* Funktionsnummer *)
  81.    R.AL := $7;            (* Unterfunktionsnummer *)
  82.    R.BL := RegNr;         (* Registernummer nach BL *)
  83.    Intr($10,R);
  84.    ReadPalReg := R.BH;    (* Inhalt wird in BH verraten *)
  85. END;
  86.  
  87. PROCEDURE SetColorReg(RegNr: Word; Color: ColorValue);
  88.    (* Schreibt den Farbwert Color in Das Farbreg. RegNr *)
  89. BEGIN
  90.   R.AH := $10;            (* Funktionsnummer *)
  91.   R.AL := $10;            (* Unterfunktionsnummer *)
  92.   R.BX := RegNr;          (* Registernummer nach BX *)
  93.   R.CH := Color[Green];   (* Grünanteil nach CH *)
  94.   R.CL := Color[Blue];    (* Blauanteil nach CL *)
  95.   R.DH := Color[Red];     (* Rotanteil nach DH *)
  96.   Intr($10,R);            (* BIOS-Call *)
  97. END;
  98.  
  99. PROCEDURE SetColorBlock(FirstReg, NrOfRegs: Word;
  100.                         VAR Colors);
  101.    (* Schreibt die in der Tabelle Colors enthaltenen *)
  102.    (* Farbwerte in die Farbregister ab FirstReg.     *)
  103.    (* NrOfRegs gibt die Länge der Tabelle an.        *)
  104. BEGIN
  105.   R.AH := $10;          (* Funktionsnummer *)
  106.   R.AL := $12;          (* Unterfunktionsnummer *)
  107.   R.BX := FirstReg;     (* Erstes Farbregister *)
  108.   R.CX := NrOfRegs;     (* Anzahl Farbregister *)
  109.   R.ES := Seg(Colors);  (* Segmentadresse der Tabelle *)
  110.   R.DX := Ofs(Colors);  (* Offsetadresse der Tabelle *)
  111.   Intr($10,R);          (* BIOS-Call *)
  112. END;
  113.  
  114. PROCEDURE ReadColorBlock(FirstReg, NrOfRegs: Word;
  115.                          VAR Colors);
  116.    (* Schreibt die Farbwerte ab Farbregister FirstReg  *)
  117.    (* in die Tabelle Colors.                           *)
  118.    (* NrOfRegs gibt die Länge der Tabelle an.          *)
  119. BEGIN
  120.   R.AH := $10;          (* Funktionsnummer *)
  121.   R.AL := $17;          (* Unterfunktionsnummer *)
  122.   R.BX := FirstReg;     (* Erstes Farbregister *)
  123.   R.CX := NrOfRegs;     (* Anzahl Farbregister *)
  124.   R.ES := Seg(Colors);  (* Segmentadresse der Tabelle *)
  125.   R.DX := Ofs(Colors);  (* Offsetadresse der Tabelle *)
  126.   Intr($10,R);          (* BIOS-Call *)
  127. END;
  128.  
  129. PROCEDURE GrayScale(FirstReg, NrOfRegs: Word);
  130.    (* Wandelt die Farbwerte ab Farbregister Firstreg *)
  131.    (* in Graustufen um.                              *)
  132. BEGIN
  133.   R.AH := $10;         (* Funktionsnummer *)
  134.   R.AL := $1B;         (* Unterfunktionsnummer *)
  135.   R.BX := FirstReg;    (* erstes Registers *)
  136.   R.CX := NrOfRegs;    (* Anzahl der Register *)
  137.   Intr($10,R);         (* BIOS-Call *)
  138. END;
  139.  
  140. (* ====================================================== *)
  141.  
  142. BEGIN  (* Initialisierungsteil: Nix los *)
  143. END.
  144.  
  145. (* ====================================================== *)
  146. (*                    Ende BIOS2.PAS                      *)
  147.