[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]
{
here are some routines, with which you can fade the screen in/out.
How to use:
Fade out: Get the original palette with the GetPal(0,255,pal) command.
(Of course you have to allocate 768 Bytes Memory for the pal
pointer first).
Then call FadePal(Pal,true,steps) and the screen will be
faded out.
Fade in: Just pass the target-pal. to the Fade-Routine:
FadePal(Targetpal,false,steps).
Note: Low step-rates mean high fading speed. }
Procedure SetPal(Start: byte; Anz: word; pal: pointer); assembler;
asm
push ds
cld
lds si,pal
mov dx,3c8h
mov al,start
out dx,al
inc dx
mov ax,anz
mov cx,ax
add cx,ax
add cx,ax
rep outsb
pop ds
end;
Procedure GetPal(Start: byte; Anz: word; pal: pointer); assembler;
asm
les di,pal
mov al,start
mov dx,3c7h
out dx,al
inc dx
mov ax,anz
mov cx,ax
add cx,ax
add cx,ax
mov dx,3c9h
cld
rep insb
end;
Procedure FadePal(OrigPal : pPal; FadeOut : Boolean; steps: byte);
Var
r,g,b : byte;
Fade : word;
Pct : real;
I : byte;
begin
For Fade := 0 to Steps do begin
Pct := Fade / Steps;
If FadeOut then Pct := 1 - Pct;
For I := 0 to 255 do begin
r := Round(OrigPal[I].R * Pct);
g := Round(OrigPal[I].G * Pct);
b := Round(OrigPal[I].B * Pct);
asm
mov dx,3c8h
mov al,i
out dx,al
mov dx,3c9h
mov al,r
out dx,al
mov al,g
out dx,al
mov al,b
out dx,al
end;
end;
end;
end;
[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]