Commodore sayı 74, sayfa 15

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 15

formülünü kullanarak belleğe yazılacak değeri elde etmelisiniz. Bu karışık işlemler arasında bizi ilgilendiren (neyse ki) yalnızca 5. bit. Bu biti 1 yaparak ekranı karakter modundan grafik moduna çevirebileceğiz. VIC kontrol registeri 2 ise şu işleri yüklenir: 7-6 kullanılmaz, 5 BU BİTİ HEP 0 YAPIN!, 4 Çok renk modu (Multi color), 1 = Çok renkli

3 38/40 kolon gösterim modu, 2-0 Ekranın sağa kayma miktarı 0-7 piksellik yumuşak kaymalar bu adresle yapılır. Bu bitlerin içinde de sadece bir tanesi işimize yarıyor. Ekranı çok renkli moda geçirmek için 4. biti 1 yapmanız gerekiyor. Şimdi de hesaplaması en zor olan registere geldi sıra. Yani VIC bellek kontrol registeri: 7-4 Video matrisinin adresi, 3-1 Karakter datasının adresi, 0 Kullanılmaz. Şimdi de yukarıdaki açıklamaların tercümesine gelelim. Video matrisi dediğimiz şey, karakter ekranının kendisine verilen addır. Ekranın en tepesine yazacağınız bir A harfi, video matrisinin 0. satır 0. sütununda yer alır. Düşük çözünürlüklü moddayken (karakter ekranı kullanırken) ekranda görülen karakterlerin bellekte saklandığı yeri 7, 6, 5 ve 4. bitler belirler.

Biliyorsunuz 64K'lık bellek VIC'in kullanabileceği 16K'lık dört bölgeye ayrılmıştır. Bu 16K'lık bölgelerin her birine bir BANK adı verilir. $D018 adresindeki bitler de adresleri bir BANK için relatif (bağıl) olarak belirler. Yani $0000-$3FFF arasını kullanırken matrisin yerini $0400 olarak belirlerseniz, $C000-$FFFF arasını kullanmaya başladığınızda ekran matrisi $C400'dan başlar. Her matris 4 blokluk, yani 1K'lık yer kapladığından, sadece dört bit kullanarak 16K'lık alandaki matris yerini belirleyebilirsiniz. Eğer bu dört biti 1 yaparsanız $0400'deki matrisi seçersiniz (ki bu normalde kullanılan kombinasyondur). Bitleri 15 yaptığınızda ise $3C00'daki matrisi seçersiniz. Yalnız bitler kontrol baytının en başında olmadığı için (7-4. bitler, 3-0 değil!!) bulduğunuz sayıyı bayta koymak için 16 ile çarpmalısınız ilk önce. Bu dört bitin değerini bulmak için şu formülü kullanabilirsiniz: Yukarıda da bir “karakter datası” diye bir şeyler saçmalamışım. Konumuzun dışında ama, biraz da bunun ne anlama geldiğini açıklamak istiyorum: Demin matrisin ne olduğunu anlatmıştım. Bu matrisin her karesinde 0-255 arası bir değer bulunur. Bu değere karşılık ekrana hangi grafik bloğunun basılacağını da bir şekilde bilgisayara bildirmemiz gerekli. Yani matriste bulunan $01 baytının ekrana çıkaracağı A harfinin dataları bir yerlerde saklanıyor olmalı. İşte bu grafik bilgisinin bank içinde bulunduğu yer 3, 2 ve 1. bitler tarafından belirlenir. Her karakter datası sekiz bayt tutar. Toplam 256 karakter bulunduğuna göre bu karakter datası için 8 blok (2K) gereklidir. Bu iki kilobaytlık alanlardan sekiz tanesi bir banka sığar. Sekiz ayrı bilgiyi de sadece üç bit kullanarak kodlayabiliriz. Bu üç bitin değerini 2048 ile çarparak adresi rahatça bulabilirsiniz. Adresten bu üç biti bulmak için ise şu formülü kullanmalısınız: INT(ADRES/2048). Bu bitler de kontrol baytının tam başında yer almıyorlar. Bu yüzden baytın içinde gerekli yere getirilmeleri gerekli. Bu iş için de bulduğunuz üç bitlik sayıyı iki ile çarpmalısınız. Sonuç olarak, istediğiniz matriste yer alan karakterleri istediğiniz grafik datalarını kullanarak göstermek için şu yolu izlemelisiniz: 1. Matris adresini belirleyin (1024'ün tam katı olmasına dikkat edin). 2. Grafik datası adresini belirleyin (2048'in tam katı olmasına dikkat edin). 2.5. İlk iki adresinizin $0000-$3FFF arasında olmasına dikkat edin. 3. Matris adresini 1024'e bölün ve 16 ile çarpın. 4. Grafik adresini 2048'e bölün ve 2 ile çarpın. 5. Bu iki sayıyı toplayın ve $D018'e yazın. Bu arada VIC'in $1000 ile $2000 arasında sizin datalarınızı değil de standart karakter setini göreceğini de eklemeliyim. Bu yüzden bu alana koyduğunuz datalar grafik ekranında bile görünmez. Bu kadar bilgi içinde bize gerekeniyse sadece aşağıda anlatacağım kısmı: Grafik ekranı kullandığınız zaman $D018'in 3. biti grafik ekranının $0000-$1FFF arasında mı, yoksa $2000-$3FFF arasında mı yer alacağını belirler. Demin VIC'in belleği dört ayrı bank olarak gördüğünden bahsetmiştim. Bu banklardan hangisinin kullanılacağını (size garip gelebilir ama doğru) VIC değil, CIA 2 belirler. Yani bank seçimini bu çipe ait olan $DD00 - 56576 adresinden yaparsınız. Bu adresin 1-0 bitleri bank yerini belirler. Şimdi bitlerin değerine göre seçilen 16K'lık böl-

gelerin bir listesini veriyorum:

Ye 00 9 Ol

$C000-$FFFF $8000-$BFFF

910 $4000-$7FFF $0000-$3FFF Yukarıdaki listeden de anlayacağınız gibi normal zamanlarda bu bitlerde 11-3 değeri bulunur. Bilgisayarınızı 64K RAM konumuna geçirmek sandığınızdan daha kolay (detaylarına girmediğiniz zaman tabii ki). $01 nolu adrese değerini verirseniz tüm giriş/çıkış alanları, KERNAL ROM'lar, BASIC ROM'lar ortadan kalkar. Geriye 64K büyüklüğünde bomboş bir bellek kalır. Ama bu bellekte sadece data saklayabilirsiniz. Bu bomboş bellekte yapılacak olan ilk interrupt girişiminde de bilgisayarınız boş bir alana sıçrayacak ve kilitlenecektir. Bu yüzden RAM moduna geçmeden önce SEI komutuyla interruptları kapatmalısınız. 64K'lık RAM moduna giderken dikkat etmeniz gereken bir nokta daha var: Tüm giriş-çıkış alanlarını ortadan kaldırdığınız için VIC, SID gibi özel alanlara erişim yapmanız mümkün olmayacaktır. Bu yüzden bu bölgelerle olan işlerinizi ortalığı boşaltmadan önce halletmelisiniz. Tüm RAM ortaya çıktığında bütün yardımcı çipler son ayarlandıkları şekilde işlemlerini yapmaya devam ederler. ROM'ları ve giriş çıkış bölgelerini yerine koymak için $01'e tekrar $37 vermeniz yeterli. Bundan sonra CLI kullanarak interrupt'ları açmayı unutmazsınız sanırım.

Klavyeyle gezinmek için ← ve → tuşları.