Bu sayfadaki yazılar
Sayfanın metni
Sayfa 48
Bu arada renk de sarı rengin koduyla dolacaktır. Sonra da ekranı tekrar eski rengine döndürün. FOR...NEXT döngüsü içinde renk RAM'ının 1000 elemanına POKE yapmaktan çok daha hızlı bir yöntem bu. Eğer elinizdeki model eski ise ve bazı programlar arkadaşınızda görüntü verirken sizde vermiyorsa, programın gerekli yerlerine bu tip bir satır ekleyin. Faydasını göreceksiniz... Bu minicik (!) ayrıntıdan sonra konumuza devam edelim. Herhalde yazı ekranının renginden VIC'in 33 numaralı yazmaçının (53281) ve çerçeve renginden de 32 numaralı yazmaçın (53280) sorumlu olduğunu belirtmeye gerek yok. Biz daha ciddi konularla ilgilenelim. Commodore 64'ün içinde iki karakter seti vardır. Birisi büyük harfleri ve grafik karakterlerini kapsar. Diğeri de küçük ve büyük harfleri kapsar ve grafik karakterlerinin bir kısmının yerini harfler alır. Bu iki karakter seti arasında, SHIFT ve COMMODORE tuşlarına aynı anda basarak gidip gelebilirsiniz. Her bir set 256 karakter içerir. Yani hafızada toplam 512 değişik karakter tanımlaması bulunmaktadır. Her bir set de kendi içinde ikiye ayrılır. İlk yarısı karakterlerin normal görünüşlerini, ikinci yarısı da negatif görünüşlerini taşır. Bu size bir şey hatırlattı mı? Yukarıda bahsettiğimiz ekran kodlarını mesela? Öyleyse, bu setleri biraz daha derinlemesine inceleyelim... Her bir karakter, 8*8 noktadan oluşur. Commodore 64'ün 320*200 noktalık bir ekran kapasitesi olduğuna göre, yazı ekranının neden 40'ar karakterlik 25 satırdan oluştuğu ortaya çıkıyor. Peki bu karakterlerin nasıl görüneceklerini VIC nereden biliyor? Tabii ki, bilgisayarımızın belleğindeki karakter tanımlamalarından. Her karakterimiz 8*8'lik bir matris oluşturduğuna göre, karakterin görüntüsüyle ilgili bilgiyi 8 byte içinde saklayabiliriz. Toplam 512 karakter olduğuna göre 512*8 = 4096 byte, yani 4K hafıza bize yeterli olacaktır. Bilgisayarımızda bu hafıza normal durumda $D000-$DFFF (53248-57343) arasıdır. Karakter tanımlamaları, ekran kodlarına göre sıralanmıştır. Örneğin ilk 8 byte karakteri, bir sonraki 8 byte ile de “A” harfi tanımlanır. Bu böylece sürer gider. İlk 256 karakter (karakter kodu 0-255) ile büyük harf ve grafik karakterlerinden oluşan set tanımlanır. Bunun da ilk yarısı normal gösterim, ikinci yarısı negatif gösterime ayrılmıştır. Sonra gelen 256 karakter ise küçük/büyük harf gösteriminin normal ve negatif tanımlamalarından oluşur. VIC ekrandaki görüntüyü yaratırken, videoram'daki ekran kodlarının yardımıyla karakter tanımlamalarındaki doğru yeri bulur ve oradaki karakter tanımını ekrana getirir. Gördüğünüz gibi ekran kodları ile karakter tanımlamalarının düzeni arasındaki benzerlik sadece tesadüf değil. Ancak, karakter tanımlamalarının bulunduğu bu bölge ROM olduğu için üstüne bir şey yazılamaz. ROM'u okuyabilmek için de normal PEEK komutu yeterli olmamaktadır. Birazdan, verdiğiniz programları incelerken bu bölgeyle ilgili zorlukları nasıl çözeceğimizi de göreceğiz. Bilgisayarı açtığınızda, karşınıza çıkan yazı ekranı normal renk modundadır. Ancak, grafik ekranı gibi, yazı ekranını da çok renkli (multicolor) hale sokabiliriz. Bunun için VIC'in 17 ve 22 numaralı yazmaçlarının bit'leri ile oynamamız gerekiyor. Şu iki POKE komutu ile önce grafik ekranını ve birazdan açıklamasına başlayacağımız extended color (geliştirilmiş renk) modunu kapatıp, multicolor'u aktif hale getiriyoruz. POKE 53265, PEEK (53265) AND 159 POKE 53270, PEEK (53270) OR 16 Yazı ekranını multicolor'a geçirmenin sağladığı en önemli olanak, özellikle oyun türü programlarda, renkli grafikleri sadece yazı ekranını kullanarak yapabilmek. Grafik ekranının 8K, yazı ekranının 1K olduğunu ve grafik ekranının gerek renk, gerekse nokta organizasyonunun ne kadar karmaşık olduğunu düşünürseniz, multicolor karakterlerin programlamada ne kadar kolaylık yaratacağını kolayca tahmin edebilirsiniz. Şimdi bu özelliğin derinliklerine inelim. Diyelim ki multicolor'a geçtiniz. Bu durumda bilgisayarınızın kullanabileceğiniz renk sayısı 16'dan 8'e inecektir. Hemen meraklanmayın. Tabii ki, bunun bize sağlayacağı bir fayda var. Eğer ekrandaki bir karakterin rengi, daha doğrusu onun rengini temsil eden renk RAM'ındaki byte'ın değeri 0-7 arasında ise, sözkonusu karakter normal modda gösterilecektir. Dolayısıyla, multicolor moda geçtiğimiz halde normal karakter biçimlerini kullanma olanağımızı sürdürebiliyoruz. Düşünün, bu olmasaydı, çok renkli yazı ekranında oynanan bir oyunun skorlarını ekrana nasıl yazardık. Sakın multicolor harflerle demeyin! Neden mi? O zaman multicolor karakterlerin açıklamasına girişelim... Eğer ekrandaki karakterimizin rengi olarak 8-15 arası bir renk belirlemişsek, artık karakterimiz multicolor'dadır. Yazı dizimizde defalarca belirttiğimiz gibi, multicolor moduna karşılık feda ettiğimiz şey, yatay noktasal çözünürlüktür. Bu durumda karakterimizin çözünürlüğü 4*8'e düşecektir ama, dört değişik renk kullanabilecektir. Her zaman olduğu gibi, yanyana duran iki noktanın aldığı değere göre, oluşturdukları renk noktasının renginin nereden geleceği belli olacaktır. Bir tablo halinde bu ilişkiyi belirleyelim: 000: VIC'in 33. yazmaçı (0 numaralı arkaplan rengi) 001: VIC'in 34. yazmaçı (1 numaralı arkaplan rengi) 010: VIC'in 35. yazmaçı (2 numaralı arkaplan rengi) 8-15 arası tanımlanan, o karaktere ait renkten 8 çıkartıldığında elde edilen 0-7 arası renk kodu (Renk RAM'ının alt 3 bit'i). Bu konuyu böylece kapatalım ve oldukça ilginç bir başka özelliğe değinelim: Extended Color. Bilindiği üzere, ekran renginiz ne ise, ekrandaki karakterlerin arkasında görünen renk de hep odur. Karakteri negatif yapsanız bile, ortaya çıkan şey sadece karakter rengi ile ekran renginin o karakterin kapladığı alan içinde birbirleriyle değiştirilmiş olmalıdır. Peki, her karakterimizin arkasında kalan rengin ayrı olmasını becerebilir miyiz? Tabii ki... Şüpheniz mi vardı?.. Şu iki POKE komutunu verin:
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 49
kendi içinde ikiye ayrılır. İlk yarısı karakterlerin normal görünüşlerini, ikinci yarısı da negatif görünüşlerini taşır. Bu size bir şey hatırlattı mı? Yukarıda bahsettiğimiz ekran kodla- rını mesela? Öyleyse, bu setleri biraz daha derinlemesine inceleyelim... Her bir karakter, 8*8 noktadan oluşur. Commodore 64'ün 320*2000 noktalık bir ekran kapasitesi olduğu- na göre, yazı ekranının neden 40'ar karakterlik 25 satırdan oluştuğu or- taya çıkıyor. Peki bu karakterlerinin nasıl görüneceklerini VİIC nereden bi- liyor? Tabif ki, bilgisayarımızın bel- leğindeki karakter tanımlamaların- dan. Her karakterimiz 8*8'lik bir matris oluşturduğuna göre, karakte- rin görüntüsüyle ilgili bilgiyi 8 byte içinde saklayabiliriz. Toplam 512 ka- rakterinin — olduğuna — göre 512*8 — 4096 byte, yani 4K hafıza bi- ze yeterli olacaktır. Bilgisayarımızda bu hafıza normal durumda $DFFF (53248-57343) arasıdır. Ka- rakter tanımlamaları, ekran kodları- na göre sıralanmıştır. Örneğin ilk 8 byte karakteri, bir sonraki 8 byte ile de “A” harfi tanımlanır. Bu böylece sürer gider. İlk 256 karak- ter (karakter kodu 0-265) ile büyük harf ve grafik karakterlerinden olu- şan set tanımlanır. Bunun da ilk ya- rısı normal gösterim, ikinci yarısı ne- gatif gösterime ayrılmıştır. Sonra ge- len 256 karakter ise küçük/büyük harf gösteriminin normal ve negatif tanımlamalarından oluşur. VIC ek- randaki görüntüyü yaratırken, vide- oram'daki ekran kodlarının yardı- mıyla karakter tanımlamalarındaki doğru yeri bulur ve oradaki karakter tanımını ekrana getirir. Gördüğünüz gibi ekran kodları ile karakter tanım- lamalarının düzeni arasındaki benzer- lik sadece tesadüf değil. Ancak, ka- rakter tanımlamalarının bulunduğu bu bölge ROM olduğu için üstüne bir şey yazılamaz. ROM'u okuyabilmek için de normal PEEK komutu yeter- li olmamaktadır. Birazdan, verdiği- niz programları incelerken bu bölgey- le ilgili zorlukları hazır çözeceğimizi de göreceğiz. Bilgisayarı açtığınızda, karşınıza çıkan yazı ekranı normal renk mo- dundadır. Ancak, grafik ekranı gibi, yazı ekranını da çok renkli (multico- hale sokabiliriz. Bunun için VIC'in 17 ve 22 numaralı yazmaçla- rının bit'leri ile oynamamız gereki- yor. Şu iki POKE komutu ile önce
grafik ekranını ve birazdan açıklama- sına başlayacağımız extended color (geliştirilmiş renk) modunu kapatıp, multicolor'u aktif hale getiriyoruz. POKE 53265, PEEK (53265) AND 159 POKE 53270, PEEK (53270) OR 16 Yazı ekranını multicolor'a geçir- menin sağladığı en önemli olanak, özellikle oyun türü programlarda, renkli grafikleri sadece yazı ekranını kullanarak yapabilmek. Grafik ekra- nının 8K, yazı ekranının IK olduğu- nu ve grafik ekranının gerek renk, ge- rekse nokta organizasyonunun ne ka- dar karmaşık olduğunu düşünürse- niz, multicolor karakterlerin prog- ramlamada ne kadar kolaylık yara- tacağını kolayca tahmin edebilirsiniz. Şimdi bu özelliğin derinliklerine ine- lim. Diyelim ki multicolor'a geçtiniz. Bu durumda bilgisayarınızın kullana- bileceğiniz renk sayısı 16'dan 8'e ine- cektir. Hemen meraklanmayın. Ta- bit ki, bunun bize sağlayacağı bir fay- da var. Eğer ekrandaki bir karakte- rin rengi, daha doğrusu onun rengi- ni temsil eden renk RAM'ındaki byte'ın değeri 0-7 arasında ise, söz- konusu karakter normal modda gös-
terilecektir. Dolayısıyla, multicolor moda geçtiğimiz halde normal karak- ter biçimlerini kullanma olanağımızı sürdürebiliyoruz. Düşünün, bu olma- saydı, çok renkli yazı ekranında oy- nanan bir oyunun skorlarını ekrana nasıl yazardık. Sakın multicolor harf- lerle demeyin! Neden mi? O zaman multicolor karakterlerin açıklaması- na girişelim... Eğer ekrandaki karakterimizin ren- gi olarak 8-15 arası bir renk belirle- mişsek, artık karakterimiz multico- lor'dadır. Yazı dizimizde defalarca belirttiğimiz gibi, multicolor modu- na karşılık feda ettiğimiz şey, yatay noktasal çözünürlüktür. Bu durum- da karakterimizin çözünürlüğü 4*8'e düşecektir ama, dört değişik renk kullanabilecektir. Her zaman olduğu gibi, yanyana duran iki noktanın al- dığı değere göre, oluşturdukları renk noktasının renginin nereden geleceği belli olacaktır. Bir tablo halinde bu ilişkiyi belirleyelim: 000: VIC'in 33. yazmaçı (0 numa- ralı arkaplan rengi) ©4901: VIC'in 34. yazmaçı (1 numa- ralı arkaplan rengi) 010: VIC'in 35. yazmaçı (2 numa- ralı arkaplan rengi) 8-15 arası tanımlanan, o ka-