   Ŀ
Ŀ
  
                                                                            
                        VGA Ekranda Grafik                                  
                                                                            
  Recep Tezkol  

   



  zellikle oyun programlar yazanlar, programlarnda kullanacaklar
  grafikleri hazrlamann programn dier kontrol ksmlarndan ok daha zor
  ve zaman alc olduunu bilirler. Halbuki grafikleri bir resim editrnde
  hazrlayp kullanmak veya eldeki resimleri kullanmak, benim gibi "o"
  karmak resim formatlarn bilmeyen programclar iin gzel bir hayal
  olmaktan teye gidemiyor. Byle olunca programlarmzn LINE, CIRCLE, DRAW,
  PSET, PRESET komutlar ile dolup tamas bir yana, o kadar zaman kaybna
  ramen istediimiz gibi grafikler elde edemiyoruz.

  Bu olumsuzluu yenmek iin sizlere ilk bakta karmak grnen ama
  kullanldka seveceiniz bir ka utility program sunmak istiyorum.
  Bu UTILITY'ler yanlz BASIC programclarna hitap ediyor. zerlerinde biraz
  alarak dier dillere de uyarlanabilirler.



  Ŀ
                             VGASAVE                                        
  

  lk utility'miz VGASAVE.COM. Bu program bellekte yerleik kalr ve 320x200
  znrlk, 256 renk ekran modunda iken Print Screen tuu ile ekranda
  bulunan resmi EKRAN.000 dosyasna kopyalar.

  Burada dikkat edilmesi gereken bir husus, o anda aktif dizinde bir EKRAN.000
  dosyas bulunuyorsa alnacak kopya bu dosyann zerine yaplacaktr. Bu
  nedenle alnan her ekran kopyas sonrasnda DOS komutlar yardm ile bir
  baka dizine kopyalamanz gereklidir.

  VGASAVE programnn kts olan EKRAN.000 dosyasn iki ekilde kullanmak
  mmkndr:

     1EKRAN.000 dosyasna kaydedilen grafiin tmn, QBASIC programlarnzda
       BLOAD komutu ile ekrana getirebilirsiniz.

     2Dier bir utility olan KES.COM ile dosyadaki grafiin bir ksmn
       RESIM.000 dosyasna kaydederek, PUT komutu ile kullanlabilecek hale
       getirebiliriz.

        Ŀ
                                                                        
          REM EKRAN.000 dosyasndaki grafiin ekrana getirilmesi..      
          SCREEN 13                                              &      
          DEFSEG = &HA000                                               
          BLOAD "EKRAN.000", 0                                          
                                                                        
        

  Bload komutu dosyay nereye ve ka bayt ykleyeceini dosyann banda
  bulunan header'dan (header-balk) renir. Header'n uzunluu 7 bayttan
  oluur. erii yledir:

        1 byte  Header tantcs ( hex FD ).
        1 word  Bilgilerin yklenecei bellein segmenti.
        1 word  Bilgilerin yklenecei bellein offseti.
        1 word  Yklenecek bilgilerin uzunluu.

  VGASAVE program EKRAN.000 dosyasndan baka bir de PALET.000 adnda bir
  dosya daha yaratr. Bu dosyann kullanmn yaznn ilerleyen blmlerinde
  inceleyeceiz.

  VGASAVE program ile iiniz bittiinde  /U  parametresini kullanarak
  bellekten atabilirsiniz.


  Ŀ
                                  KES                                       
  

  Yukardada bahsettiim gibi KES program ile VGASAVE'in oluturduu grafik
  dosyasnn bir blm RESIM.000 dosyasna kaydedilerek daha sonra bu dosyaya
  alnm grafik paras PUT komutu ile ekrann istenilen noktasnda
  gsterilebilir. KES.COM, aktif dizinde bulunan EKRAN.000 dosyasn
  ykleyerek ekrana getirir. Program ilk olarak bizden kesilecek grafik
  parasn iaretlemek iin kullanlacak noktann (cursor) rengini
  belirlememizi ister.

  Ekrann st ksmnda gsterilen yatay mavi bir izginin rengini yukar veya
  aa ok tularnn kullanarak deitirebiliriz. ESC tuu ile seilen renk
  kabul edilir ve ekrann ortasnda bu renkte bir nokta belirir.

  Bu nokta ok tular ile yukar, aa, sola, saa hareket ettirilerek almak
  istediimiz grafiin sol st kesine getirilir ve enter tuu ile
  iaretlenir.

  Daha sonra noktay almak istediimiz grafiin sa alt kesine getirerek
  enter ile iaretleriz. KES program sol st ve sa alt keleri belirlenmi
  grafik parasn RESIM.000 dosyasna kaydeder. Burada da header benzeri 2
  word uzunluunda balk bulunur.

                 1 word  (sutun says * 8)
                 1 word   satr says

          stn says, Screen 1'de      x 2  ile arplr.
                        Screen 2..12'de  x 1   ile arplr.
                        Screen 13'te     x 8  ile arplr.


  PUT komutu bu 2 word'lk bilgiye gre grafik bilgilerini ekran belleine
  aktarr.

  Bu programda iaretleyici noktann hareketini kolaylatrmak iin kullanlan
  tular ve grevleri aada verilmitir:

        TAB            Noktay 8 pixel saa tar.
        SHIFT + TAB    Noktay 8 pixel sola tar.
        Page Up        Noktay 8 pixel yukar tar.
        Page Down      Noktay 8 pixel aa tar.
        Home           Noktay sol st ke tar.
        End            Noktay sa alt ke tar.


  nemli Bir Uyar:

  Alacamz grafiin ikinci kesi, ilk kesinin solunda kalrsa yaratlan
  dosyann boyu MegaBaytlar seviyesinde olur ve bu dosya hi bir ie yaramaz.
  stenen grafiin ilk kesi sol st, ikinci kesi sa alt olmasna dikkat
  ediniz.


  KES programn kullanarak aldmz grafik parasn programlarmzda
  kullanmak iin QBASIC ile yazlm PUT.BAS rneinden yararlanabilirsiniz.
  PUT.BAS rneinde bir SUB ve bir FUNCTION bulunmaktadr.


  DECLARE FUNCTION TabloMik (dosya$)

  TabloMik fonksiyonu, ismi verilen grafik dosyas iin ayarlanacak tablonun
  boyutunu verir. Screen 13'te (320x200 piksel, 256 remk) her bir piksel iin
  bir bayt kullanlr. Dosyada bulunan grafii oluturan

                piksel says + 4

  bize grafik iin gerekli tablonun boyutunu verir. Pixel saysndan hari
  fazladan eklediimiz 4 bayt, grafii oluturan satr ve sutun bilgilerinin
  saklanmas iin gereklidir.


  DECLARE SUB ResimOku (dosya$, tablo(), boyut)

  ResimOku alt program, grafik dosyasndaki bilgileri tablo() ile tanmlanan
  uygun ekilde boyutlandrlm deikene aktarr. Bundan sonra programn
  herhangi bir yerinden tablonun ierii deitirilmedii srece PUT komutu
  ile grafik ekrana getirilebilir.


  PALET.000 Dosyas

  Birok resim editr mevcut renkler ile yetinmeyip, renk paletini
  deitirir. ok detayl ve renkli bir grafii VGASAVE ile aldnzda
  bunu default palet ile ekrana getirirseniz, renklerin pek istediiniz gibi
  olmadn greceksiniz. VGASAVE program bu nedenle grafii kaydederken
  renk paletinin deerlerinide PALET.000 dosyasna kopyalar. Bu dosyadaki
  bilgiler kullanlarak grafii ekrana getirmeden renk paletinin ierii
  deitirilerek ortaya kabilecek renk karmaas nlenebilir.

  Bu konudaki rneimizi QBASIC 7.0 ile yazlm PALET.BAS programnda
  bulabilirsiniz.