—e Normal durumda bellek dağılımı D, >Karakter seti okunurken bellek dağılımı ı l l I ı RAM E ': Karakter seti E RAM Z aT a RAM-r> —— RAM —e/ | Şantrolern kumanda E İşletim sistemi ? ' 0 40960 49152 53248 57344 65535 Belleğin 1. baytı, C-64'ün karakter setini veya videocontroller'in kumanda adreslerini görmesini sağlar. işlemler kat kat hızlı gerçekleşmekte- dir. Fakat biz buruda kullanılan ma- kine dili rutinleri daha yakından in- celemeyeceğiz. Şu ana kadar ASC TI kadlarının nasıl hesaplandığını gördük fakat asıl karakterler ekrana gelene kadar bir- çok adımla daha karşılaşacağız. Bu adımlardan ilki ise ASC JI kodları- nın ekran kodlarına dönüştürülmesi- dir. Bu dönüşüm sadece ve sadece Commodore bilgisayarında yapılır. Bunun nedenini şöyle açıklayabiliriz: Bilgisayarda maksimum 256 ASCII kodu mevcuttur, fakat bu 256 kodun her biri için ekranda bir işaret göste- rilemez. Örneğin RETURN, fonksi- yon veya cursor kontrol tuşların dü- şünün. Bunların her biri ayrı ayrı iş- levlere sahiptirler fakat ekranda bir karakter ile gösterilmezler. Mümkün olduğu kadar çok karak- terin ekranda gözükebilmesi için (en fazla 256) işlevi olan fakat ekranda gösterilmeyen ASCI I kadları elenip yeni bir tabela düzenlenmelidir. — <© >İşaret ASC JI tabelasında olduğu gibi 64. sırada bulunmaz. Ek- ran gösterim kodlarının bulunduğu tabelada <C> bu sefer en başta ya- ni sıfırıncı sırada yer alır. Aslında ASCI II tabelasının tekrar düzenlen- mesinin başka sebepleri de vardır. Ekran gösterim kodlarının Video- controller (VİC)'ın gösterilecek ka- rakterleri oluşturma şekli ile yakın- dan ilişkisi vardır. Ekranda gösterilen tüm işaretlere ait bilgiler bir ROM (Read Only Memory-Sadece okunabilir bellek)'de kayıtlıdır. Bu ROM'da karakterler bir bütün halinde yer almazlar; her- hangi bir şekilde organiize olmaları la- zımdır. Ekranda gösterilen her işaret 8x8 noktadan oluştuğu için her sa- tırda 8 nokta bulunmaktadır. (Resim 1) Her karakterin bir satırında bulu- nan noktaların konumu Ü ile 255 ara- sı bir sayı ile belirlenir. Bu nedenle bir işaret için gerekli olan 8 satır ROM'- un belleğinde arka arkaya bulunur. Örnek olarak <©€> ROM belleği- nin Ö ile 7 arası baytları, <A> har- fi ile 8 ile 15 arası baytiarı kaplar. Eğer bilgisayar ekranda < A> harfinin gözükmesini isterse video- coöntroller'a “1” sayısını bildirir. Vi- deocontroller bu durumda karakter- lerin şeklinin kayıtlı olduğu ROM'"- dan 1 no'lu karakteri alır ve ekran- da göslerir. Şimdi kontrol tuşları aradan çıkar- tıldıktan sonra ASC 11 tabelasının ne- den yeni baştan organize edildiğini sorabilirsiniz. Eğer eski tabela kulla- nılsa idi çıkarılan kodların yerleri boş kalacaktı ve lüzumsuz yere hafıza “kaybına neden olacaktı. Şu anda C-64'ün tüm karakterleri hafızada sadece 4096 bayt işgal et- mektedir. Daha önce belirtildiği gibi », her bir işaret için 8 bayt kullanılır. Toplam 256 işaret olduğundan 256 x8 — 2048 bayt kullanılır. Küçük ve büyük harfler için ayrı ayrı karak- ter setleri bulunduğu için bu toplam 4096 bayt yapar. Zaten ROM'un ka- pasitesi de daha fazla değildir. Şu ana kadar Videocontroller'in bir işareti ekrana getirirken neler yap- tığını gördük, fakat eğer ekran tama- mıyla dolarsa ne olacak? Bu durum- da bilgisayarın belleğinde tüm ekra- nın kayıtlı olduğu ve videocontroller tarafından sürekli okunan bir alan mevcuttur ve 1024 ile 2023., adresler arasında bulunur. Burada ekran yi- ne ekran gösterim kodları ile kayde- dilir. Denemek için şu satırı yazabi- lirsiniz: PRIİNT “ CLR *: POKE 1024,1 RETURN Tahmin ettiğiniz gibi ekranın sol üst köşesinde A harfi görülecek- tir. Aynı şeyi ekranın sağ alt köşesi- ne de uygulayabilirsiniz: PRİNT “ Cl R : POKE 2033,1 RETUR Şimdi tüm yukarda anlatılanları gösteren bir Basıc-Demo göreceğiz. Fakat programın listesini incelemeye başlamadan bazı ek belgiler verelim. Bir işaretin biçiminin karakter ROM'unda bulunabilmesi için o işa- retin ekran gösterim kodu & ile çarpı- lır. Bu cümle tamamıyla doğrudur fa- kat yeterli değildir. Zira karakterler bilgisayarın belleğinde 53248. adres- ten itibaren yer alır. Bu nedenle da- ha önce elde ettiğimiz çarpımı bu sa- yıya ilave etmeliyiz. : . İnceleyeceğimiz küçük demoda da- ha başka sorunlarla da karşılaşıyo- ruz. Öncelikle Basie'ten karakter ROM'unu doğrudan doğruya okuta- mayız zira bu alanda Videocontrol- ler'in kumanda adresleri ve Sound- controller yer almaktadır. Resim 2'de bunu daha deıaylı olarak görebilirsi- niz Yukarıdd belırtılen sorunun gide- rilmesinde C- 64îde bir.demiryolu ma- kası gibi çalışân' 1. adres kullanılır. Bu adresin aldığı 'değere göre C-64 karakter setini veya videocontroller'- ın kumanda adreslerını algılar. Fakat burada C-ö4 ol_dukça gereksiz bir şe- kilde karakter.setini okurken işletim sistemini ve Bâsic'yorumlayıcıyı oto- matik olarak devreden çıkartır. Bu durumda bilgisayar.klavyeden yazıl- mış hirbir şeyi algılayamaz. Basic'den karakter ROM'unun okunması bu şekilde olanaksız hale geldiği için ufak bir ma_kîi’ış dili program yazıl- malıdır ve demoda bu alt program 32000. satırda yer almaktadır. Şimdi Basic-Demo'muzu inceleme- ye başlayalım. İlk satıf demonun işleyişi ile ilgili değildir. Burada DATA'lar halinde 32000. satırda bulunan makine dili programı hafızaya yerleştirilir. 20. satırda BA değişkenine 5l