[Back to EGAVGA SWAG index]  [Back to Main SWAG index]  [Original]

{ In Procdures FADEIN & FADEOUT, the (X) is the delay between
  screen darkenings. }

 Unit Fade;
 Interface

   Uses Crt;

   Const
     PelAddrRgR  = $3C7;
     PelAddrRgW  = $3C8; {.$3C8}
     PelDataReg  = $3C9;

   Type
     RGB = Record                   
             R,                     
             G,
             B : Byte;
           End;
   Color = Array [0..63] Of RGB;

   Var
     Col : Color;           


   Procedure GetCol(C : Byte; Var R, G, B : Byte);
   Procedure SetCol(C, R, G, B : Byte);
   Procedure SetInten(B : Byte);
   Procedure FadeIn (X:Integer);
   Procedure FadeOut (X:Integer);

 Implementation



Procedure GetCol(C : Byte; Var R, G, B : Byte);
Begin
  Port[PelAddrRgR] := C;
  R := Port[PelDataReg];
  G := Port[PelDataReg];
  B := Port[PelDataReg];
End;

Procedure SetCol(C, R, G, B : Byte);
Begin
  Port[PelAddrRgW] := C;
  Port[PelDataReg] := R;
  Port[PelDataReg] := G;
  Port[PelDataReg] := B;
End;

Procedure SetInten(b : Byte);
 Var
   I : Integer;
   FR, FG, FB : Byte;
 Begin
   For I:=0 To 63 Do
   Begin
     FR:=Col[I].R*B Div 63;
     FG:=Col[I].G*B Div 63;
     FB:=Col[I].B*B Div 63;
     SetCol(I, FR, FG, FB);
   End;
 End;

Procedure FadeIn (X:Integer);
 Var
   Y:Integer;           (* Y is the LCV *)
 Begin
   For Y:=0 To 63 Do
     Begin
       SetInten(Y);
       Delay(X);
     End;
 End;

Procedure FadeOut (X:Integer);
 Var
   Y:Integer;    (* Y is the LCV *)
 Begin
   For Y:=0 To 63 Do
     GetCol(Y, Col[Y].R, Col[Y].G, Col[Y].B);
   For Y:=63 DownTo 0 Do
     Begin
       SetInten(Y);
       Delay(X);
     End;
 End;
End.


[Back to EGAVGA SWAG index]  [Back to Main SWAG index]  [Original]