  Ŀ
  Ŀ
                                                                          
        ASSEMBLY  C  PASCLA  BASIC Programclar in Trke Font      
                                                                          
  ٳ
                                                  Recep Tezkol              
  




> Bir programc, kullanma sunduu rnnn her ortamda sorunsuz i grmesini
  salamak zorundadr. Trkiye'de yayorsak ve hedeflediimiz kullanc
  kitlesi Trkler ise, rnmzde Trke karakterler kullanmamz gerekecektir.
  Yoksa karmza hi ho olmayan sonular kabilir. "ne" yerine "Igne",
  "Sktr" yerine "Sikistir", "u" yerine "Su" gibi..

  Programlama yaptmz bu PC'ler yle deiik konfigrasyonlara sahip
  oluyorlar ki, her bilgisayarn Trke karakterlere destek vermesi
  beklenemez. Kullancdan program altrmadan nce bir TSR yklemesini
  istemek ise "bu program kullanmasanz iyi olur" anlamna gelebilir.

 Yakn bir zaman nce Trke bir programn kurulumunda bulunmutum. Program
  CONFIG.SYS dosyasna baz eklemeler yaparak DOS'un salad Trke fontlar
  kullanmak istiyordu. Evet bu da bir zm ama ya kullanc bu dosyalar
  kahpe bir DEL'e kurban etmediyse. Bu olmasa bile DOS'u gelitirenlerin Trk
  programclar kutu karakterlerini kullanmaz gibi bir aaacayip dnce ile
  bunlarn bazlarnn yerine garip ekiller yerletirmeleri ii iyice
  kartryor.

  Gelin bu probleme bir zm bulalm!..

  Birok EGA/VGA ekran kartnn karakter setlerinde  ve  dnda
  ,,,,,,, karakterleri bulunmuyor. Ekran kartmzda bulunmayan bu
  karakterleri tanmlamak mmkn olduuna gre kk bir rutin hazrlayarak
  tm bu dertlerden kurtulabiliriz. Karakter llerini deitirmez isek EGA
  ekran kartna sahip bir bilgisayarda karakterler 8x14 bit'ten oluur.
  VGA'da bu 8x16 (hatta 9x16) olmaktadr.

              Ŀ
                   EGA            VGA      
              Ĵ
              Ĵ-12345678-     -12345678-9-
               1 00000000       00000000 0 
               2 00011000       00000000 0 
               3 00111100       00011000 0 
               4 01100110       00111100 0 
               5 11000110       01100110 0 
               6 11000110       11000110 0 
               7 11000110       11000110 0 
               8 11111110       11000110 0 
               9 11000110       11111110 0 
              10 11000110       11000110 0 
              11 11000110       11000110 0 
              12 00000000       11000110 0 
              13 00000000       11000110 0 
              14 00000000       00000000 0 
              15 --------       00000000 0 
              16 --------       00000000 0 
              



  Ekran Kartnn Tipi Ne?

  Trke karakterlerimizi font tablosuna yerletirmeden nce kullanlan ekran
  kartnn tipini ve karakter boyunu bilmemiz gerekecektir. Buna dikkat
  edilmezse Trke karakter yerine japon karakterleri ile karlaabiliriz.
  (Biraz fazla attm galiba?!..)

  VGA ekran kartnn tespiti iin interrupt 10h'un 1Ah fonksiyonundan
  yararlanacaz. VGA ekran kart bulunan bir sistemde Interrupt 10h, 1Ah
  fonksiyonu ile arldnda AL yazmacna, AH yazmacnda bulunan fonksiyon
  numarasn aktarr. Dier ekran kartlar iin 1Ah fonksiyonu anlamsz
  olacandan fonksiyon numarasn AL yazmacna aktarmayacaktr.

                 Mov    ax,1A00h
                 int    10h
                 cmp    al,1Ah
                 jz     VgaKartiVar

  Bu fonksiyon ars sonucu olumsuz ise kartn EGA olup olmadna bakarz.
  Bunun iin interrupt 10h'nun 12h fonksiyon, 10h alt fonksiyonunu
  kullanacaz. 12h fonksiyon arldnda ekran kart EGA ise BL yazmacnn
  ieriine video belleini belirten bir deer aktarr. Eer ekran kart bir
  EGA/VGA kart deilse, BL yazmacnn ieriinde bir deiiklik olmayacaktr.

        0   64 Kbyte
        1  128 Kbyte
        2  192 Kbyte
        3  256 Kbyte

  Fonksiyonun bu zelliinden yararlanarak ekran kartnn EGA olup, olmad
  renilebilir.

                Mov     ah,12h
                mov     bl,10h
                cmp     bl,10
                jnz     EgaKartiVar

 Ekran kartn test edebildiimize gre artk bunlar bir fonksiyon haline
  getirebiliriz. Ben bu fonksiyonu, Assembly, C, Pascal programlarda
  EGA_VGA_MI; BASIC programnda EgaVgaMi olarak adlandrdm. EGA_VGA_MI
  fonksiyonu, baka programlarda da kullanlabilir. Fonksiyonumuz BASIC'te ve
  Assembly'de integer, C ve Pascal'da byte tipinde deer dndrr.
  Fonksiyondan dnen deerler;

                 0 = EGA veya VGA kart bulunamad.
                16 = VGA kart bulundu.
                14 = EGA kart bulundu.

 Ekran kart tipini tespit ettikten sonra Trke karakterlerimizi
  ykleyebiliriz. nce VGA ve EGA ekran kartlar iin ayr ayr fontlar
  hazrlamamz gereklidir.


                           VGA Karakter Bit Map
  Ŀ
  0000000000000000011001100000000000000000000000000000000000000000
  0000000000000000001111000000000000000000000000000000000000000000
  0011110000000000000000000110011000000000000000000000000000000000
  0110011000000000001111000011110000011000000000000111110000000000
  1100001000000000011001100000000000011000000000001100011000000000
  1100000001111100110000000011101100000000001110001100011001111100
  1100000011000110110000000110011000111100000110000110000011000110
  1100000011000000110000000110011000011000000110000011100001100000
  1100000011000000110111100110011000011000000110000000110000111000
  1100001011000000110001100110011000011000000110001100011000001100
  0110011011000110011001100011111000011000000110001100011011000110
  0011110001111100001110100000011000111100001111000111111001111100
  0001100000011000000000000110011000000000000000000001100000011000
  0011100000111000000000000011110000000000000000000011000000111000
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000000000000000000000000000000000000000000000000000
  

                          EGA Karakter Bit Map
  Ŀ
  0000000000000000000000000000000000000000000000000000000000000000
  0000000000000000001111000000000000000000000000000000000000000000
  0011110000000000000000000000000000000000000000000000000000000000
  0110011000000000001111000011110000011000000000000111110000000000
  1100001000000000011001100000000000011000000000001100011000000000
  1100000001111100110000000011101100000000001110001100011001111100
  1100000011000110110000000110011000111100000110000110000011000110
  1100000011000000110111100110011000011000000110000011100001100000
  1100001011000000110001100110011000011000000110000000110000011000
  0110011011000110011001100011111000011000000110001100011000001100
  0011110001111100001111000000011000111100001111001100011011000110
  0001100000011000000000000110011000000000000000000111111001111100
  0011100000111000000000000011110000000000000000000001100000011000
  0000000000000000000000000000000000000000000000000000000000000000
  


 Trke karakterler iin bit haritalarn hazrladktan sonra bunlar
  yklemek iin font tablosunu A000:0000 adresine aralm.

           out 3c4h,100h   Ega sequencer index - reset sequencer
           out 3c4h,402h       map mask register
           out 3c4h,704h       memory mode select
           out 3c4h,300h       reset sequencer
           out 3ceh,204h   Ega graphic index - read map select
           out 3ceh,5          mode
           out 3ceh,406h       mode/chain/mem map

 Deitirilecek karakterin tablodaki yerini, karakterin ASCII kodunu
  32 ile arparak elde ederiz ve bu karakter iin hazrladmz bit
  haritasn buraya kopyalarz. Trke katakterler ykleyeceimiz ASCII
  kodlar;

                        ascii 158  -> 
                        ascii 159  -> 
                        ascii 128  -> 
                        ascii 135  -> 
                        ascii 166  -> 
                        ascii 167  -> 
                        ascii 152  -> 
                        ascii 141  ->  'dir.


 Daha sonra deitirilen font tablosunu aktifletirmek gerekir.

           out 3c4h,100h    EGA sequencer index - reset sequencer
           out 3c4h,302h        map mask register
           out 3c4h,304h        memory mode select
           out 3c4h,300h        reset sequencer
           out 3ceh,4       EGA graphic index - read map select
           out 3ceh,1005h       mode
           out 3ceh,e06h        mode/chain/mem map

  Trke font Assembly, C, Pascal ve Basic dilleri iin hazrlanmtr. Basic
  iin hazrlanan rutinler Assembly'de yazld iin programn kolay
  kullanlabilmesi asndan library ve quicklibrary haline getirilmelidir.

  Library iin;

           TASM  Turk.asm
           LIB.EXE  Turk.lib + Turk.obj

  QuickLibrary iin;

           LINK.EXE /Q Turk.obj,Turk.qlb,,BQLB45.LIB;

  daha sonra BASIC QB /L Turk.qlb eklinde yklenerek program kullanlabilir.
 