[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]
Unit FadeUnit; { called FadeUnit.Pas }
{ This unit does fading for text/graph modes }
interface
procedure InitCol; { gets the current palette and saves it }
procedure FadeOut(Duration : byte); { lowers/increases the brightness, }
procedure FadeIn(Duration : byte); { duration determines the time it takes}
procedure SetBrightness(Brightness : byte); { sets the brightness to brightnes}
implementation
uses Crt; { use Delay procedure from there }
const
PelIdxR = $3C7; { Port to read from }
PelIdxW = $3C8; { Port to write to }
PelData = $3C9; { Dataport }
Maxreg = 63; { Set to 255 for graphmode }
MaxInten = 63;
type
TRGB = record R, G, B : byte end;
var
Col : array[0..MaxReg] of TRGB;
I : byte;
Procedure GetCol(ColNr : byte; var R, G, B : byte); assembler;
Asm
MOV DX,PelIdxR
MOV AL,ColNr
OUT DX,AL
MOV DX,PelData
LES SI,R
IN AL,DX
MOV BYTE PTR [ES:SI],AL
LES SI,G
IN AL,DX
MOV BYTE PTR [ES:SI],AL
LES SI,B
IN AL,DX
MOV BYTE PTR [ES:SI],AL
End; { GetCol }
Procedure SetCol(ColNr, R, G, B : byte); assembler; { Change just one color }
Asm
MOV DX,PelIdxW
MOV AL,ColNr
OUT DX,AL
MOV DX,PelData
MOV AL,R
OUT DX,AL
MOV AL,G
OUT DX,AL
MOV AL,B
OUT DX,AL
End; { SetCol }
Procedure InitCol; { Save initial palette }
Begin
for I := 0 to MaxReg do GetCol(I, Col[I].R, Col[I].G, Col[I].B)
End; { InitCol }
Procedure SetBrightness;
Begin
for I := 0 to MaxReg do
SetCol(I,
Col[I].R * Brightness div MaxInten,
Col[I].G * Brightness div MaxInten,
Col[I].B * Brightness div MaxInten)
End; { SetBrightness }
Procedure FadeOut;
var I : byte;
Begin
for I := MaxInten downto 0 do
begin
SetBrightness(I);
Delay(Duration)
end
End; { FadeOut }
Procedure FadeIn;
var I : byte;
Begin
for I := 0 to MaxInten do
begin
SetBrightness(I);
Delay(Duration)
end
End; { FadeIn }
End. { FADEUNIT.PAS }
[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]