Bu sayfadaki yazılar
Sayfanın metni
Sayfa 46
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 47
TUNA ERTEMALP
Bugüne kadar, altı bölüm boyunca, Commodore 64'ün grafiksel yeteneklerinin başmimarı, görüntü sorumlusu VIC'in içini dışını, neler yapabildiğini gördük. Tüm yazmaçlar, bellek kontrolü, grafik, sprite derken, sıra onun en son yeteneğine geldi. Bu kez, karakter seti kullanımını, onu renklendirmeyi ve yeni karakterler tanımlamayı öğreneceğiz. Her zamanki gibi, dergimizin 10. ve 12. sayılarında yayınladığımız, grafik dizimizin 2. ve 4. bölümlerini elinizin altında bulundurun.
Bilgisayarınız, sizin her tuşa basışınızda, bastığınız tuşun kodunu, daha önce de gördüğümüz, normalde $0400-$07FF (1024-2047) adresleri arasındaki videoram'a kaydeder. VIC de, ekrandaki görüntüyü yaratırken bu hafıza bölgesindeki bilgiden yararlanır ve sizin devamlı olarak ekranda gördüğünüz görüntüyü oluşturur; hem de saniyede 20 kere. Böylece, görüntünün devamlılığı sağlanır. Videoram aynı zamanda, eğer noktasal grafik kullanıyorsak, ekrandaki noktaların rengini belirler. Bunu daha önce görmüştük. Bu ayki konumuzla pek fazla ilgisi yok. Videoram'da saklanan, karakterlerin ASCII kodları değildir. Commodore 64'ün el kitabında da bulabileceğiniz ekran POKE komutlarıdır. Örneğin ekranın sol üst köşesinde A harfi varsa, PEEK (1024) işlemi sonucunda elde edeceğiniz değer 1 olacaktır. Bu noktada, ekran POKE kodlarını biraz inceleyelim. 0-255 arası kodlamaya bakarsak, karakterlerin yanısıra, birtakım kontrol karakterleri de görürüz. Bunlar ekranda hiçbir karakter oluşturmazlar ancak, renk değiştirme, negatif yazıma başlama gibi işlemleri gerçekleştirirler. Ekran POKE kodları ise daha farklıdır. 0-255 arası kodların tamamı karakterlerle doldurulmuştur. Bunun başlıca sebebi, normal karakterlerin yanısıra negatif gösterimdeki karakterlerin de birer koda ihtiyaç duymaları. Böyle bir ayrımın yapılmadığını farzedelim. Bu durumda, VIC, ekrandaki görüntüyü oluştururken videoram'ı okuduğunda elde ettiği bir değerin normal mi, yoksa negatif bir karaktere mi ait olduğunu nasıl anlayacaktı? Bu nedenle 0-255 arası kodların ilk yarısı (0-127) normal karakterlere, ikinci yarısı da (128-255) negatif karakterlere ayrılmıştır. Bu size bir de kolaylık sağlamaktadır. Eğer ekrandaki herhangi bir bölgeyi negatif hale getirmek istersek, videoram'daki o bölgeye ait değerleri PEEK ile okuyup, 128 toplayıp, yeniden yerine POKE etmemiz yeterli olacaktır. PRINT komutunu kullanarak negatif yazmak istediğimizde, RVSON (karakter kodu 18) ve RVSOFF (karakter kodu 146) tuşlarını kullandığınızı hatırlarsınız. Sıra karakterlerin rengine geldi. Birazdan bahsedeceğimiz renk kodlarının hepsinin 0-15 arası rakamlar olduğunu ve her birinin Commodore 64'ün 16 renginden birine karşılık geldiğini gözönüne alın. Şimdi devam edelim. Renk RAM'ı olarak isimlendirdiğimiz, daha önce de noktasal grafikte çok renklilik kullandığımızda işimize yarayan bu bellek bölümü $D800-$DFFF (55296-56295) adresleri arasında bulunmaktadır. Bu bölgeyi, BANK adreslemeleriyle oynayarak değiştiremeyeceğimizi geçmiş bölümlerden biliyor olmalısınız. Bu bellek kısmında, ekrandaki her pozisyona bir byte ayrılmıştır (tıpkı videoram gibi). Örneğin 55296'nın içindeki değer ekranın sol üst köşesinin renk kodunu içerirken, 55297 onun hemen sağındaki karakterin, 56295 de ekranın sağ alt köşesinin rengini belirler. Bu noktada, belki de bugüne kadar dikkatinizi hiç çekmemiş bir konuyu açıklamak istiyoruz. CLR tuşuyla ekranı sildiğiniz zaman Commodore 64, renk RAM'ını baştan aşağı belli bir renk koduyla doldurur. Önemli olan bu renk kodunu nereden aldığıdır. Commodore 64'ün belli bir modeline kadar bu renk kodu, 53281 adresinde bulunan, yazı ekranının rengi olmaktadır. Daha sonra üretilen Commodore 64'lerde ise bu kod, o anda geçerli olan karakter kodunu saklayan 646'dan alınmaya başlandı. Bu değişikliğin ne gibi sonuçları oldu? Eski Commodore 64'te ekranı sildikten sonra 1024-2047 arasına bir değer POKE edildiği zaman bu görünmemekteydi. Çünkü o ekran pozisyonunun karakter rengi, ekran rengiyle aynı olmaktaydı. Tıpkı siyah kalemle siyah kâğıda yazı yazmak gibi. Daha sonra çıkan modellerdeki değişiklik ise şuna yolaçtı: Diyelim ki CLR yapmadan önce kırmızı renkle yazı yazıyordunuz, CLR yaptıktan sonra da ekrana bir şey POKE ettiğinizde, ekranda kırmızı renkle görünecektir. Eski modellerde bu olmayacağı için, CLR'den sonra 55296-56295 arasının da bir renk ile dolması gerekmektedir. Tabii bunun da kolay bir yolu var. Diyelim ki ekranı POKE yaptığınızda karakterlerin sarı olmasını istiyorsunuz. Bu durumda önce POKE 53281,7 ile ekran rengini sarı yapın, sonra ekranı silin.