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

    {
    Note: Original Code by Jort Bloem
          Edited to allow all VESA Modes by Kerry Sokalsky

    > Okay thanks Jort, can you please give me an example of how to use what you
    > gave me in the last message? For instance, let's say I wanted to put a
    > pixel at 5,5 in mode 101h.
    }

    Uses
      Dos;  { For Registers Variable Type }

    Const
      XSize = 800; { Enter the X-Resolution Here }

    Var
      LastPage : Byte;
      Count,
      Count2   : Word;

    {Ok..... here's some code. First, you need a procedure to set VGA mode:}
    Procedure Videomode(VM:Word);
    Var R:Registers;
    Begin
     R.AX:=$4F02;
     R.BX:=VM;
     Intr($10,R);
    End;

    {You need a procedure to set the page. Pages are 64K (65535 bytes) each:}
    Procedure Page(Pge:Byte);
    Var R:Registers;
    Begin
     LastPage:=Pge;
     R.AX:=$4F05;
     R.BX:=$0000;
     R.DX:=Pge;
     Intr($10,R);
    End;

    {Now the plot routine:}
    Procedure Plot(X,Y,Clr:Word);
    Var
     I:LongInt;
    Begin
     I:=LongInt(Y)*XSize+LongInt(X);
     Page(I Div 65536);
     Mem[$A000:I Mod 65536]:=Clr;
    End;

    Begin
     VideoMode($103); { Set the Video Mode that corresponds to the X-Resolution
                        that was set as a constant }

     { Sample Viewing }
     For Count := 1 to 639 do
       For Count2 := 1 to 479 do
         Plot(Count,Count2,(Count + Count2) Mod 256);

     Readln;

     { Return to Text Mode }
     VideoMode($3);
    End.

    {
    Note that you can optimise this slightly by checking if the page is already
    correct before setting it. This is a general VESA routine, and should work
    on all VESA cards (with VESA driver, if appropriate).
    }

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