[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]