Commodore 64 ile Tuna ERTEMALP Grafik (4) Ş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 ko- nuyu göreceğiz: Grafik bilgilerimizi 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ıs- mı üst üste, yani aynı adreslerde bu- lunmaktadır. 1 numaralı yazmaçın ilk iki bit'i ile bu konfigurasyonları seçe- biliyorduk. Ancak buralara bir şeyler yazabilmenin daha kolay bir yolu ol- malı, değil mi? İşte bu nedenle, C64'ün dizaynını yapanlar şöyle bir yol bulmuşlar: Ha- fızanın herhangi bir yerine bir sayı ya- zıldığında (örneğin BASIC'de POKE veya makina dilinde STA komutları ile), bu sayı, doğrudan doğruya veri- len adresteki RAM'a yazılır. Bu ara- da | numaralı yazmaçın değeri önem taşımaz. Zaten ROM'a (yalnız okuna- bilir bellek ünitesi) bir değer yazma- nın anlamsız olduğu gözönüne alınır- sa, yukarıdaki yöntem oldukça man- tıklı geliyor. Bir örnek olarak aşağı- daki programa gözatalım: Normalde, 40960-49151 (SA000- $BFFF) adresleri arasında, BASIC yo- rumlayıcısı ROM'u durmaktadır. Ancak aynı adreslerde bir de baş RAM vardır. İşte biz yukarıdaki prog- 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ı yazmaçın alt iki bit'ini değiştirerek kopyaladığımız ad- reslerdeki ROM'u kapatıp, RAM'ı aktif hale getiriyoruz. Bu işlem, her BASIC ilerletme programında kulla- nılan bir numaradır. Örneğin yukarı- daki programı çalıştırdıktan sonra şöyle bir komut verin: POKE 41220,ASC(“T”) 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öl- gesine ulaşmak için | numaralı yazma- çın Ü-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 ha- fıza bölgelerine grafik açısından ver- diğimiz isimleri, bunların hafızanın nerelerinde bulunduğunu ve nasıl yer- lerinin değiştirilebileceğini görelim. Grafik işlemlerinde toplam beş de- Bişik hafıza bölümüne gerek vardır: 10 FOR 1—40960 TO 49151 20 POKE IPEEK(1) 30 NEXT I 40 POKE 1,PEEK(1) AND 254 Artık, PRINT komutu çalışmaya- cak, ama aynı işlemi TRINT görecek- tir. Çünkü, 41220 numaralı hafıza bi- riminde, PRİNT komutunu oluşturan harflerin tanımı başlamaktadır ve biz eskiden P olan harfi T haline getirdik. Neyse, bunun grafikle pek bir alaka- sı 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 okuna- cağını belirlemesi açısından önemli, Ancak tabil ki, bu kuralın da bir is- tisnası var. $DO0O0O-SDFFF arasında bir ROM, 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'nin görüntüsünü oluştu- ran 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 ($D&dü- $DBFF) adresleri arasındadır. Ancak buradaki her byte'ın sadece alt 4 bit'i —€ İ(1l:1(elefel e —— 58