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