
                          Ŀ
                         --[ VGA ohjelmointi ]-- 
                         --[ virtuaali ny-  ]-- 
                         --[ tt ja spritet  ]-- 
                          
                                 -- OSA 2 --

Hei taas! Tss se sitten jlleen tulee. VGA ohjelmoinnin oppaan toisessa
osassa otamme esiin virtuaali nytn ja spritet.

------------------------------------------------------------------------------
                          --[ Virtuaali nytt ]--

Ajattele esim. peli, jossa jokin hahmo liikkuu ruudun pst phn.
Normaalissa MCGA nytt tilassa hahmo vrisee niin pahasti, ett
sit ei vlttmtt edes ne. Mutta virtuaali nytss sit ei tapahdu,
koska me emme varsinaisesti ne sit, koska nytt talletetaan muistiin.

Kun nytt on talletettu, niin sen jlkeen virtuaali nytt muutetaan
MCGA nytlle. Siis ei mitn vlkkymist ja kaikkein parasta on se,
ett virtuaali nytt on yht nopea kuin MCGA nytt.

Mutta jos emme ne virtuaali nytt, niin mit hyty siit on?
Ei tietenkn mitn, mutta silloin siit on hyty, kun se muutetaan
MCGA nytlle, joka tapahtuu komennolla Move[Virtuaali_naytto^,Mem[$A000,0],64000).

Tss on tarvittava koodi virtuaali nytn asettamiseen.

POIKKI!POIKKI!POIKKI!POIKKI!

  Program Virtuaal;

  Uses Crt;

  Type Virtuaali_video = Array[1..64000] Of Byte; { Virtuaali nyttn koko       }
       Virtuaali_osoittaja = ^Virtuaali_video;    { Virtuaali nytn osoittaja   }

  Var Virtuaali_naytto : Virtuaali_osoittaja;     { Virtuaali nytt             }
      Virtuaali : Word;                           { Varsinainen virtuaali nyt.  }

  Procedure Video(Tila : Byte); Assembler;        { Meidn nytt proseduuri     }
  Asm
       MOV    AH,00
       MOV    AL,Tila
       INT    10H
  End;

  Begin
    GetMem(Virtuaali_naytto,64000);               { Varaa muistia virtuaali
                                                    nytlle                     }
    Virtuaali := Seg(Virtuaali_naytto^);          { Virtuaali nytn segmentti   }
    FillChar(Mem[Virtuaali:0],64000,0);           { Tyhjent virtuaali nytn   }
      Video($13);                                 { Asettaa nytn MCGA tilaan   }
      Mem[Virtuaali:0]:=1;                        { Piirt sinisen pikselin     }
      Move(Virtuaali_naytto^,Mem[$A000:0],64000); { Muuttaa virtuaali nytn
                                                    MCGA nytksi                }
      Delay(5000);                                { Odottaa 5 sekuntia           }
    Video($3);                                    { Asettaa nytn teksti tilaan }
    FreeMem(Virtuaali_naytto,64000);              { Vapauttaa virtuaali muistin  }
  End.

POIKKI!POIKKI!POIKKI!POIKKI!

------------------------------------------------------------------------------
                             --[ Spritet ]--

Lhes jokaisessa graafisessa peliss kaytetn spritej. Spritet ovat
yksinkertaisesti liikkuvia kohteita.

Niit on aika helppo tehd.

                   Leveys      Korkeus
                         \     
                           \   
   Const Sprite : Array[1..10*10] Of Byte =
                  (0,0,0,0,0,0,0,0,0,0,
                   0,0,0,0,0,0,0,0,0,0,
                   0,0,0,0,0,0,0,0,0,0,
                   0,0,0,0,0,0,0,0,0,0,
                   0,0,0,0,0,0,0,0,0,0,
                   0,0,0,0,0,0,0,0,0,0,   Kuva
                   1,1,1,0,0,0,0,0,0,0,
                   1,0,1,0,0,0,0,0,0,0,
                   1,1,1,0,0,0,0,0,0,0,
                   1,0,1,0,0,0,0,0,0,0);

Yllolevassa esimerkiss on tehty juuri sprite.
Nin saat spriten nkyviin ruutuun.

POIKKI!POIKKI!POIKKI!POIKKI!

  Program Sprit;

  Uses Crt;

  Procedure Video(Tila : Byte); Assembler;        { Meidn nytt proseduuri     }
  Asm
       MOV    AH,00
       MOV    AL,Tila
       INT    10H
  End;

  Var X, Y : Integer;

  Const Sprite : Array[1..10*10] Of Byte =        { Meidn oma sprite            }
                 (0,0,0,0,0,0,0,0,0,0,
                  0,0,0,0,0,0,0,0,0,0,
                  0,0,0,0,0,0,0,0,0,0,
                  0,0,0,0,0,0,0,0,0,0,
                  0,0,0,0,0,0,0,0,0,0,
                  0,0,0,0,0,0,0,0,0,0,
                  1,1,1,0,0,0,0,0,0,0,
                  1,0,1,0,0,0,0,0,0,0,
                  1,1,1,0,0,0,0,0,0,0,
                  1,0,1,0,0,0,0,0,0,0);

  Begin
    Video($13);                                   { Asettaa nytn MCGA tilaan   }
    For X := 1 to 10 do                           { Leveys                       }
      For Y := 0 to 9 do                          { Korkeus                      }
        Mem[$A000:Y*320+X] := Sprite[Y*10+X];     { Piirt spriten              }
        Delay(5000);                              { Odottaa 5 sekuntia           }
    Video($3);                                    { Asettaa nytn teksti tilaan }
End.                                              { Lopettaa ohjelman            }

POIKKI!POIKKI!POIKKI!POIKKI!
------------------------------------------------------------------------------

Tss se nyt sitten jlleen olikin. Seuraavassa osassa ksittelemme
Liikkuvia spritej virtuaali nytss.
Seuraava osa ilmestyy joskus 30.11.1995.

  - Acrobat (Atte)
