[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]

    {
    > I have a program (demo) that was created in turbo
    > pascal assembler, and it has
    > a ascii picture, with 3 colors of vga light bars in
    > the background, does
    > anyone know how this person did it?

       I wrote part of the following program .......
    }

    Uses Crt;

    Type
      PalType = Array [1..3] Of Byte;
      Ground  = (Fore,Back);

    Const
                          {R,G,B}
      LtBlue  : PalType = (0,0,63);
      Purple  : PalType = (20,5,52);     { You can create your own colors   }
      DkBlue  : PalType = (0,0,15);      { by experimenting with the values }
      DkGray  : PalType = (21,21,21);
      LtGreen : PalType = (0,63,0);
      LtRed   : PalType = (63,0,0);
      Pink    : PalType = (40,8,13);
      Orange  : PalType = (55,5,5);

    Procedure VGAColor (ColorName : PalType ; ColorToAlter : Byte ; Grnd : Ground);

      Procedure SetPalColor (PalReg : Word ; T : PalType);
        Var
          R,G,B : Byte;
        Begin
          R := T[1];
          G := T[2];
          B := T[3];
          Asm
            mov ax,1010h
            mov bx,[PalReg]
            mov ch,[G]
            mov cl,[B]
            mov dh,[R]
            int 10h
          End;
        End;

      Procedure GetPalColor (PalReg : Word); Assembler;
        Asm
          mov ax,1015h
          mov bx,[PalReg]
          int 10h
          mov [Green],ch
          mov [Blue],cl
          mov [Red],dh
        End;

      Function RegNo (Cnt : Integer) : Integer;
        Begin
         If (Cnt In [0..5,7]) Then
           RegNo := Cnt
         Else Begin
           If Cnt = 6 Then
             RegNo:= 20
           Else
             RegNo:= Cnt + 48;
         End;
       End;

      Var
        PalReg : Word;

      Begin
        PalReg:= RegNo(ColorToAlter);
        SetPalColor(PalReg,ColorName);
        If Grnd = Fore Then
          TextColor(ColorToAlter)
        Else
          TextBackGround(ColorToAlter);
      End;

    Procedure RestoreColors;
      Begin
        TextMode(Co80);
      End;

    Var
      S : String;
    Begin
      TextBackGround(0);
      ClrScr;
      S := 'THIS IS A TEST OF THE VGA TEXT COLORS';
      VGAColor(DKBlue,1,Back);
      WriteLn(S);
      VGAColor(Pink,2,Fore);
      WriteLn(S);
      VGAColor(Purple,12,Fore);
      WriteLn(S);
      VGAColor(LtRed,9,Fore);
      WriteLn(S);
      ReadKey;
      RestoreColors;      { <- Take this line out and watch what happens! :) }
    End.

[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]