[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]
{
STEPHEN CHEOK
> Could you post the fade out source?
}
PROCEDURE DimDisplay(delayfactor : INTEGER); ASSEMBLER;
{ Total time to fade out in seconds = ((DelayFactor+1)*MaxIntensity) / 1000 }
CONST
MaxIntensity = 45;
{MaxIntensity = 63;}
VAR
DACTable : Array [0..255] OF RECORD
R, G, B : BYTE;
END;
ASM
PUSH DS
MOV AX, SS
MOV ES, AX
MOV DS, AX
{ Store colour information into DACTable }
LEA DX, DACTable
MOV CX, 256
XOR BX, BX
MOV AX, 1017h
INT 10h
MOV BX, MaxIntensity
{ VGA port 3C8h: PEL address register, (colour index,
increments automatically after every third write)
VGA port 3C9h: PEL write register (R, G, B) }
CLD
@1:
LEA SI, DACTable
MOV DI, SI
MOV CX, 3*256
XOR AX, AX
MOV DX, 3C8h
OUT DX, AL
INC DX
{ Get colour value, decrement it and update the table }
@2:
LODSB
OR AX, AX
JZ @3
DEC AX
@3:
STOSB
OUT DX, AL
LOOP @2
{ Delay before next decrement of R, G, B values }
PUSH ES
PUSH BX
MOV AX, DelayFactor
PUSH AX
CALL Delay
POP BX
POP ES
DEC BX
OR BX, BX
JNZ @1
POP DS
END; { DimDisplay }
[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]