Commodore sayı 12, sayfa 58

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 58

Tuna ERTEMALP

Şu ana kadar gördüklerimiz bize, bilgisayarımızın grafik işlemleriyle uğraşan yapı taşlarının her birinin ne işe yaradığını gösterdi. Onları byte byte, bit bit tanıdık. Artık sıra geldi onları amaçlarımız doğrultusunda kullanmaya.

Bu bölümde, grafik kullanımlarımızın temel taşlarından biri olan bir konuyu göreceğiz: Grafik bilgilerimi hafızanın neresine nasıl yerleştireceğiz? Gelecek bölümden itibaren de, noktasal grafiğin programlamasına başlayacağız, gözünüz aydın. Geçen bölümde gördüğünüz gibi, bilgisayarımızın hafızası değişik bölümlere ayrılmıştır ve bunların bir kısmı üst üste, yani aynı adreslerde bulunmaktadır. 1 numaralı yazmacın ilk iki bit'i ile bu konfigürasyonları seçebiliyorduk. Ancak buralara bir şeyler yazabilmenin daha kolay bir yolu olmalı, değil mi? İşte bu nedenle, C64'ün dizaynını yapanlar şöyle bir yol bulmuşlar: Hafızanın herhangi bir yerine bir sayı yazıldığında (örneğin BASIC'de POKE veya makina dilinde STA komutları ile), bu sayı, doğrudan doğruya verilen adresteki RAM'a yazılır. Bu arada 1 numaralı yazmacın değeri önem taşımaz. Zaten ROM'a (yalnız okunabilir bellek ünitesi) bir değer yazmanın anlamsız olduğu göz önüne alınırsa, yukarıdaki yöntem oldukça mantıklı geliyor. Bir örnek olarak aşağıdaki programa göz atalım:

10 FOR 1-40960 TO 49151 20 POKE IPEEK(1)

30 NEXT I 40 POKE 1,PEEK(1) AND 254

Normalde, 40960-49151 ($A000-$BFFF) adresleri arasında, BASIC yorumlayıcısı ROM'u durmaktadır. Ancak aynı adreslerde bir de boş RAM vardır. İşte biz yukarıdaki RAM ile aynı adreslere sahip ROM'un değerini RAM'a kopyalıyoruz. En son satırda da, geçen bölümde gördüğümüz gibi, 1 numaralı yazmacın alt bit'ini değiştirerek kopyaladığımız adreslerdeki ROM'u kapatıp, RAM'ı aktif hale getiriyoruz. Bu işlem, her BASIC ilerletme programında kullanılan bir numaradır. Örneğin yukarıdaki programı çalıştırdıktan sonra şöyle bir komut verin:

POKE

Artık, PRINT komutu çalışmayacak, ama aynı işlemi TRINT görecektir. Çünkü, 41220 numaralı hafıza bölgesinde PRINT komutunu oluşturan harflerin tanımı başlamaktadır ve biz 1 eskiden P olan harfi T haline getirdik. Neyse, bunun grafikle pek bir alakası yok ama, bir bilgi olması açısından çok önemli. Özetle, 1 numaralı yazmaç, POKE işlemleri için önemsiz ama, PEEK işlemlerinde nerenin içeriğinin okunacağını belirlemesi açısından önemli. Ancak tabii ki, bu kuralın da bir istisnası var. 0-1 arasında bir ROM, iki RAM bulunmaktadır. Buraya bir sayı yazıldığında, Giriş/Çıkış bölgesi olarak adlandırılan RAM'a yazılır. Okuma sırasında da, gene bu RAM okunur. Diğer RAM veya ROM bölgesine ulaşmak için 1 numaralı yazmacın 0-2 numaralı bit'leri ile oynamak gerekir. Bunları daha sonra göreceğiz. Okuma yazma işlemlerine böylece açıklık getirdikten sonra, şimdi de hafıza bölgelerine grafik açısından verdiğimiz isimleri, bunların hafızanın nerelerinde bulunduğunu ve nasıl yerlerinin değiştirilebileceğini görelim. Grafik işlemlerinde toplam beş değişik hafıza bölümüne gerek vardır:

1) Sprite tanımlamaları 2) Renk RAM'ı 3) Video RAM'ı 4) Grafik hafızası 5) Karakter üreteci

Bunları sırasıyla tanıyalım: 1) Sprite tanımlamaları Her sprite'ın görüntüsünü oluşturan noktaların tanımladığı 63 byte'lık bölgedir. 2) Renk RAM'ı Bu bölge yaklaşık 1 Kbyte'lık (tam olarak 1000 byte'lık) bir alan kaplar ve daima 55296-56319 ($D800-$DBFF) adresleri arasındadır. Ancak buradaki her byte'ın sadece alt 4 bit'i

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