Commodore sayı 19, sayfa 61

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 61

Satırı verip RETURN tuşuna bastığımızda ekran grafik moduna geçer ve bekler. Herhangi bir tuşa bastığımızda ise ekran silinir. Tabii, bu işlem gözümüzle takip edemeyeceğimiz bir hızda gerçekleşecektir (tüm silme işlemi 90 ms kadar sürecektir). BA-SIC'te yazdığımız program bu iş için yarım dakika civarında zaman harcıyordu. Bir kere daha herhangi bir tuşa bastığımızda ise grafik modunu terkederiz. Şu seviyede bir de renk bilgisini silecek programı yazmak o kadar zor gelmese gerek. Programı yazmak kolay da, önce renk ram'inin silinmesi ile ne kasdettiğinizi görmeniz gerekiyor. gerekiyor. Çünkü biliyoruz, renk ram'inin aslında silinecek bir durumu yoktur. Yapılacak işlem, bu belleği ilk değerlemek, yani başlangıç renk değerlerine geri getirmek. Tuna Ertemalp'in GRAFİK adlı yazı dizisini takip edenleriniz bilirler: Renk ram'ine ait her bir bellek elemanı 8*8'lik bir grafik alanı için gerekli olan renk bilgisini içerir. Renk bilgisi şöyle oluşturulur: Yanık bitler için üst taraftaki dört bitin belirttiği renk, sönük bitler için alt taraftaki dört bitin belirtti Yani 8*8'lik bir bölge içinde toplam iki renk kullanabiliyoruz. Bu renkler de renk ram'inin o bölgeye karşılık gelen byte'ıinin içeriğinde saklı. Buna göre, biz tüm renk ram'ini $10 değeriyle doldurursak, sönük bitlerde siyah, yanık bitlerde beyaz renginin görünmesini sağlarız. Biz bu bilgiyi programın bir parçası değil de, bir parametre olarak bırakalım. Yani, biz altprogramımızı hangi akü değeriyle çağırırsak, renk ram'i o değerle doldurulacaktır. Başlangıç adresi olarak $C440'i seçelim. Programımız şöyle bir şey olacaktır:

100 — AD - 110 — ADI- 120 — $C440 130 — LDY 140 — STY ADI 150 — (SCO00) 160 — STY AD LDX 4 180 —ETİKETİ STA (AD),Y 190 — INY 200 — BNE LABELİ 210 — INC ADI 220 — DEX 230 — BNE LABELİ 340 — RTS

Gördüğünüz gibi bir önceki programda yaptığımız önerilere burada uyduk. Yani programlama stilimizi geliştiriyoruz. Şimdi, yazdığımız bu program modülünü deneyebiliriz.

Başlangıç adresimiz $C440, yani 50240 olacaktır. Fakat, programımızı SYS 50240 komutuyla başlatmadan önce akümülatöre renk bilgisini koymamız gerekiyordu. Bunun için, önceden POKE 780,16 komutunu veririz. Böylece, ekranda istediğimiz siyah ve beyaz kombinasyonlarını yaratırız. Yazdığımız tüm modüllerin ortaklaşa çalışmalarını görmek için direkt modda:

SYSS0176:POKE198,0:WAIT198,1: SYS50208:POKE198,0:WAIT198,1: SYS50240

satırını veririz. Önce grafik moduna geçeriz, ardından ekran silinir, bunun erhangi bir grafik programı farklı görevler yerine getiren değişik altprogramlar içerir.

arkasından renk ekranı silinir. Normal moda geçmek için (RUN/STOP-RESTORE) tuşlarını kullanın.

Şimdiye kadar dört adet değişik altprogram yaptık. Hepsinin de başh başına bir görevi vardı ve bu görevlerini başarıyla yerine getiriyorlar. Fakat, grafik denince esas akla gelen altprogram, herhangi bir yere nokta koyabilen veya silebilen bir altprogram oluyor. Bu programı yaratırken birçok değişik programlama tekniğini kullanabilmek için de fırsat bulacağız. Örneğin, mantıksal ve aritmetik işlemlerin kullanımı gibi. Her zaman yaptığımız gibi, programlama tekniklerini bir an unutarak yapacağımız işin ana hatlarını belirleyelim. Bunun için, başvuracağımız ilk kaynak gene Tuna Ertemalp'in, GRAFİK adlı yazı dizisi olacaktır. Her ne kadar, grafikle ilgili birçok işlemin detayları o yazıda bulunsa da, biz gene de burada uğraştığımız olayın ana hatlarını belirleyeceğiz. Grafik noktalarının hafızada nasıl yerleştiklerini incelemekle işe başlayalım. Grafik noktaları her ne kadar normal yazı ekranından daha sıksa, gene de genel yapı olarak çok büyük benzerlikler vardır. Bunların başında, grafik ekranının da, normal yazı ekranı gibi 40 kolon ve 25 satıra bölünmüş olmasıdır. Aşağıdaki şemada, grafik ekranına ait bellek elemanlarının hangi gruplamalarla biraraya geldiğini gö-

0.kolon 1.kolon... 39.kolon o 8 312 1 9 313 10 314 3 11 315 0.satır 4 12 316 5 138 317 6 14 318 T 15 319 7680 — 7688 — 7992 7681 7689 7993 7682 — 7690 799â 7683 — 7691 7995 24. satır 7684 7692 7996 7685 — 7693 — 7997 7686 7694 7998 7687 7695 7999

Yani yazı ekranında bir karakter için ayrılmış olan bölge, 8 byte'lik grupları barındırıyor. Her bir byte'- ın sekiz biti ise grafik ekranının tek tek noktalarını oluşturuyor. Yedinci bit en soldaki, sıfırıncı bit ise en sağdaki noktayı oluşturuyor. Şematik bir gösterimle:

76543210

10001100

Byte'ımızın içeriği $8C yani 10001100 olduğu zaman, sol taraftan saydığımızda, birinci, beşinci ve altıncı noktalar yanık olacaktır. Diğerleri sönük kalacaktır. Grafik ekranımızdaki noktalara erişmek için bunların X- ve Y-koordinatlarını kullanacağız. X-koordinatımız 0'dan 319'a, Y-koordinatımız 0'dan 199'a kadar uzanacaktır. Şimdi biz öyle bir algoritma bulmalıyız ki, bizden bu koordinatları aldığında bize gerekli olan bellek elemanının adresini ve bu eleman içinde bizim uğraşmamız gereken bitin numarasını hesaplasın. Bu işlemleri önce BASIC'te formüle edelim.

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