Commodore sayı 13, sayfa 52

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 52

Tablomuzun X satırının ve Y kolonunun yardımıyla o noktayı bulun. 8192 + 328 = 8520 adresinin 0 numaralı bit'i olduğunu göreceksiniz. Hemen yanındaki (16,15) koordinatı ise, 8192 + 336 = 8528 adresinin 7 numaralı bit'i oluyor. Kâğıt üzerinde bulunması pek de zor olmayan bu adres ve bit'lerin, hesap yoluyla bulunması oldukça karmaşık. Birazdan grafik rutinlerini geliştirirken bu konuya geleceğiz. Çokrenkli mod (multicolor) kullanıldığında byte'ların düzeni değişmiyor. Tek değişen, yanyana iki noktanın bir noktaymış gibi davranması. Örneğin (0,0) multicolor koordinatı 8192'nin 7. bit'i iken, (1,0) koordinatı 8192'nin 5. bit'i olacaktır. Çünkü 7. ve 6. bit'lerin ikisi de (0,0) koordinatları için kullanılacaktır. Bu iki bit'in içeriği 00, 01, 10 veya 11 olabileceğinden, o nokta dört değişik renkte olabilecektir. Böylelikle renk konusuna girdik. Her iki modda da renk kullanımının nasıl olduğunu görelim... 320*200'ü kullanıyorsak, grafik ekranındaki her 8*8'lik bölgede iki değişik renk olabilir. Biri çizgi rengi, diğeri arka plan rengi. Her bir 8*8'lik bölgenin bu iki rengi farklı farklı olabilir. Bu renklerle ilgili bilgi, VIDEORAM dediğimiz bölgede saklanır. Normalde yazı yazdığımız ekranı saklayan bu hafıza bölgesi, grafik ekranına geçtiğimizde bir renk deposu haline gelir. Bu hafızanın her byte'ındaki sayısal değer, karşılık geldiği 8*8'lik alanın rengini belirler. Bir alandaki çizgi rengini RC ile, arkaplan rengini de RE ile gösterirsek, VIDEORAM'da karşılık gelen byte'ın içeriğinin RC*16 + RE olması gerekir. Bir başka deyişle, o byte'ın üst 4 bit'i çizgi rengini, alt 4 bit'i de ekran rengini belirler. VIDEORAM'ın organizasyonu daha basittir:

kolaylıkla hesaplanabilir. Örneğin VIDEORAM'ın başlangıç adresi $0400 (1024) ise (7,18) koordinatının renk byte'ı 1024 + 80 = 1104 adresinde olacaktır.

Multicolor'da ise, demin de değindiğimiz gibi her iki bit'in oluşturduğu çift, o noktanın rengini belirleyecektir:

00 = VIC'ın 33 numaralı yazmacı 01 = Renk 1 = VIDEORAM'ın alt dört bit'i 10 = Renk 2 = VIDEORAM'ın üst dört bit'i 11 = Renk 3 = Renk RAM'ı

A-7 aa alı 02 !.... 8-15 41 2 !....

Gördüğünüz gibi her 8*8'lik grafik noktası grubuna karşılık gelen byte

Renk RAM'ı 55296-56295 adresleri arasında yer alır ve yeri değiştirilemez. Organizasyonu VIDEORAM ile aynıdır. VIC'in 33 numaralı yazmacı ise normalde yazı ekranının rengini belirler. Şimdi ise 0 numaralı renk yerine geçiyor. Artık bu bilgileri değerlendirerek programlar yazmanın zamanı geldi. Nasıl grafik ekranı açılır / kapanır, renklendirilir, nokta çizilir / silinir, çizgi çizilir / silinir, elips çizilir / silinir? Tüm bu temel rutinleri birer alt-

program halinde yazarsak, artık grafik konusunda oldukça büyük bir adım atmış oluruz. Çünkü, tüm cisimlerin temelinde yatan şekiller bunlardır ve bunları kullanarak diğer tüm geometrik çizimleri yapabilen altprogramlar yazabiliriz.

Önce bir iki noktada anlaşalım. Kullanacağımız grafik sayfası, BANK0'ın ikinci yarısı, yani $2000'den (8192) başlıyor. Burayı seçmemizin nedeni, bilgisayarın açıldığı sırada BANK0'a ayarlı olması. Eğer CIA2'nin bit'leri ile oynayarak diğer BANK'lardan birini kullanırsak bir sürü kaydırma işlemi yapmamız gerekecek. İsteyenler, daha önceki bölümlerde gördüğümüz POKE komutlarını kullanarak başka bir grafik sayfası kullanabilirler. Ancak dikkat etmeniz gereken bir nokta var. BANK2 ve BANK3'ü BASIC ile kullanamazsınız. Makina dili programlaması gerekir. BANK0'ı kullanmamıza bağlı olarak, VIDEORAM da $400'den (1024) başlıyor.

Programlama dili olarak, herkesin anlayabilmesi için, BASIC kullanacağız. Bunun yaratacağı en büyük sorun programların yavaşlığı olacak. Ancak makina dili kullanmak isteyenler ve programlamasını bilenler, bizim verdiğimiz rutinleri kolayca makina diline çevirebileceklerdir. Ayhan Kalaylıoğlu'nun makina dili dizisini okumaya devam edin. İlerde, grafik rutinleri de vermeye başlayabilir. Grafik rutinlerimizi geliştirdikçe onları birleştirip bir program haline getireceğiz. Vereceğimiz satır numaraları 50000'den büyük olacak ve her bir parçası GOSUB ile çağrılabilecek. Gerekli olduğu zaman, bazı değişkenler parametre gibi kullanılacak. Örneğin XN=100:YN=20 verip nokta koyma rutinini GOSUB ile çağırdığımızda, 320*200 ekranının (100,20) koordinatına bir nokta konacak. Bir başka gereklilik de, grafik işlemlerine geçmeden önce POKE 56,32 vererek BASIC kullanım alanının tavanını $2000 olarak belirlemeniz. Yoksa, BASIC programınız ile değişkenleriniz grafik sayfasının bilgileri ile silinebilir. Artık başlayalım. İlk işimiz grafik sayfasını açmak.

320*200'lük ekrana geçmek için üç işlem yapmamız gerekiyor:

1) Yüksek çözünürlü grafiği aktif yapmak. 2) Multicolor'ı kapatmak.

3) Grafik sayfasının $2000'den başladığını belirtmek.

İlk işlemi yapmak için, VIC'in 17 numaralı yazmaçının 5. bit'ini yakmak gerekiyor. Multicolor'u kapatmak içinse 22. yazmaçın 4. bit'ini sıfırlamak lazım. Bir numaralı grafik sayfasını kullanmak için vereceğimiz POKE komutunu da evvelki sayımızda görmüştük. 160*200'lük ekrana geçmek içinse, birinci ve üçüncü işlemlerin yanında ikinci işlemin tam tersini yapmak, yani 22. yazmaçın 4. bit'ini yakmak gerekiyor.

Programımızın 50000-50060 arası satırları, 320*200'e geçmek için kullanılan komutları kapsar. 52000-52060 arası ise multicolor'a geçer. Sadece

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