1 Eylül 1987 Tarihli Commodore Gazetesi Sayfa 61

1 Eylül 1987 tarihli Commodore Gazetesi Sayfa 61
Metin içeriği (otomatik olarak oluşturulmuştur)

Satırı verip RETURN tuşuna bas- tığı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 har- cı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 kasdet- tiğinizi görmeniz gerekiyor. gereki- yor. Çünkü biliyoruz, renk ram'inin aslında silinecek bir durumu yoktur. Yapılacak işlem, bu belleği ilk değer- lemek, yani başlangıç renk değerleri- ne geri getirmek. Tuna Ertemalp'in GRAFİK adlı ya- zı dizisini takip edenleriniz bilirler: Renk ram'ine ait her bir bellek ele- manı 8*8'lik bir grafik alanı için ge- rekli 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ği renk kullanılır. 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'ının içeriğinde saklı. Bu- na göre, biz tüm renk ram'ini $10 de- ğgeriyle 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ğe- riyle çağırırsak, renk ram'i o değerle doldurulacaktır. Başlangıç adresi ola- rak $C440'i seçelim. Programımız şöyle bir şey olacaktır: lÜĞ — .EO AD - $FA 110 — .EO ADI - $FB 120 — .BA $C440 130 — LDY (5C000) 140 — STY ADI 150 — LDY (5C000) 160 — STIY AD 0 LDX 4 STA(AD),Y I 190 — NY 200 — BNE LABELİ 210 — INC ADI 220 — DEX 230 — BNE LABELİ 340 — RTS L H AAA Nİ Gördüğünüz gibi bir önceki prog- ramda yaptığımız önerilere burada uyduk. Yani programlama stilimizi geliştiriyoruz. Şimdi, yazdığımız bu program modülünü deneyebiliriz. Başlangıç adresimiz $C4dü, yani 50240 olacaktır. Fakat, programımiızı SYS 50240 komutuyla başlatmadan önce akümülatöre renk bilgisini koy- mamız gerekiyordu. Bunun için, ön- ceden POKE 780,16 komutunu veri- riz. Böylece, ekranda istediğimiz si- yah ve beyaz kombinasyonlarını ya- ratırız. Yazdığımız tüm modüllerin ortaklaşa çalışmalarını görmek için direkt modda: SYS50176:POKE198,0:WAIT198,1: SYS50208:POKE198,0:WATIT198,1: SYS50240 satırını veririz. Önce grafik moduna geçeriz, ardından ekran silinir, bunun erhangi bir grafik progğramı farklı görevler yerine getiren değişik alt- programlar içerir. arkasından renk ekranı silinir. Nor- mal 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ş- li başına bir görevi vardı ve bu görev- lerini başarıyla yerine getiriyorlar. Fakat, grafik denince esas akla gelen altprogram, herhangi bir yere nokta koyabilen veya silebilen bir altprog- ram 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 teknik- lerini bir an unutarak yapacağımız işin ana hatlarını belirleyelim. Bunun için, başvuracağımız ilk kaynak ge- ne Tuna Ertemalp'in, GRAFİK adlı yazı dizisi olacaktır. Her ne kadar, grafikle ilgili birçok işlemin detayla- rı o yazıda bulunsa da, biz gene de burada uğraştığımız olayın ana hat- Commodore larını belirleyeceğiz. Grafik noktala- rının hafızada nasıl yerleştiklerini in- celemekle işe başlayalım. Grafik nok- taları her ne kadar normal yazı ek- ranından daha sıksa, gene de genel yapı olarak çok büyük benzerlikler vardır. Bunların başında, grafik ek- ranının da, normal yazı ekranı gibi 40 kolon ve 25 satıra bölünmüş olması- dır. Aşağıdaki şemada, grafik ekra- nına ait bellek elemanlarının hangi gruplamalarla biraraya geldiğini gö- receksiniz: O.kolon 1.kolon... 39.kolon B 312 1 9 313 2 1Ü 314 3 il 315 Ü.satır 4 12 316 5 13 317 6 14 318 T 15 319 TEBÜO 7EB8 7992 7681 7689 7993 T6B2 7690 7994 683 7691 7995 24. satır. 7684 7692 7996 685 7693 7997 7686 7694 7998 7687 7695 7999 Yani yazı ekranında bir karakter için ayrılmış olan bölge, 8 byte'lık 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: 176543210 10001100 Byte'imıizin içeriği $8C yani 99410001100 olduğu zaman, sol taraf- tan saydığımızda, birinci, beşinci ve altıncı noktalar yanık olacaktır. Di- ğerleri sönük kalacaktır. Grafik ek- ranımızdaki noktalara erişmek için bunların X- ve Y-koordinatlarını kul- lanacağız. X-koordinatımız 0'dan 319'a, Y-koordinatımız O'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 ge- reken bitin numarasını hesaplasın. Bu işlemleri önce BASIC'te formüle ede- lim. 61

Bu sayıdan diğer sayfalar: