1 Mart 1987 Tarihli Commodore Gazetesi Sayfa 53

1 Mart 1987 tarihli Commodore Gazetesi Sayfa 53
Metin içeriği (otomatik olarak oluşturulmuştur)

GOSUB ile çağrılmaları yeterlidir. Pa- rametreye gere Sıra geldi grafik sayfamızı silmeye. Grafik sayfasını açar açmaz fark ede- ceksiniz, daha önceden hafızada ka- lan bir sürü garip byte değeri, ekranı bir nokta karmaşasına döndürecek. Bunları silmek için 8192'den başlayan bölgeye 8000 byte boyunca sıfır PO- KE etmemiz gerekiyor. Bu işlemi de, 50100-50140 arasmdakı altprogram yapıyor. Parametresi y Çizim yaptığımız renklerı belirle- mek, kullandığımız çizim moduna gö- re değişiyor. Bu nedenle iki rutinimiz var. 320*200'de renklendirme işlemi bir tek FOR... NEXT içinde bitiyor. 1024'ten başlayıp 1000 byte boyunca devam eden VIDEORAM'a, çizgi ve ekran renginden hesaplayacağımız sa- yıyı POKE edince işimiz bitiyor. Bu- nu 50200-50240 arası satırlarda görü- yorsunuz. Parametre olarak, RC için- de çizgi rengi, RE içinde de ekran ren- gi olması gerekiyor. Ekran, bu iki de- ğişkene göre renklendiriliyor. 160*200'de ise, hem VIİDEORAM doldurulacak, hem de 55296-56295 arasındaki renk RAM'ı. Bir de VIC'- in 33. yazmaçı. Bu rutini de 52200- 52250 arasında görüyorsunuz. Para- metre olarak, RO, RI, R2 ve R3 için- de kullanılacak renkleri gönderiyorsu- Grafik ekranıyla ilgili son işlem, işi- miz bittiğinde yazı ekranına geri dön- mek. Grafik sayfasını kapatmak için yapılacak işlem, açmak için yaptığı- mız işlemin tam tersi. Önce VIC”'in 17. yazmaçının 5. bit'ini söndüreceğiz. Sonra 22. yazmaçta multicolor kapa- tılacak. Ve nihayet, ekranı $2000'e yerleştirirken değişen karakter ürete- ci adresini düzeltip $1000'e getiriyo- ruz. Grafik ekranı ile karakter ürete- ci adresi arasındaki bu ilişkiye geçen sayımızda dikkatinizi çekmiştik. Tüm bu işlemler, 50300-50360 arası satır- larda yapılmaktadır. Parametre ge- rekmiyor. Hem multicolor hem de normal ekran için bu altprogram kul- lanılabilir. Bu altprogram GOSUB ile çağrıldıktan sonra yazı ekranının si- linmesinde fayda var. Tüm ekran, kullanılan çizim renklerine göre baş- tan aşağı karakterlerle dolmuş olacak- tır. Şimdi nokta, çizgi ve elips gibi te- mel şekilleri çizmeye başlıyoruz. Ön- ce nokta.. Grafik sayfamız soldan sağa 320, yukarıdan aşağı 200 noktadan oluşu- yor. Multicolor da kullansak, soldan sağa 320 tane bit'i kontrol etmemiz gerekiyor. Tek fark, bu sefer onları ıkışer ikişer kontrol etmemiz gerekti- Sagdan sola noktalar, 0-319 olarak, yukarıdan aşağıya da 0-199 olarak nu- maralandırılırlar. Bizim yazacağımız rutin, bu koordinatiar verildiğinde, hangi byte'ın hangi bit'inin yakılma- sı gerektiğini bulmalı. Peki, bu iş na- sıl olacak? 50400-50460 arasındaki ru- tin, (XN, YN) değişkenleri ile gönde- rilen noktayı basmakta. Şimdi bu işi nasıl yaptığını görelim. Öncelikle basılmak istenen koordi- natın ekranda olup olmadığını kont- rol ediyoruz. Eğer değilse, ana prog- rama doğrudan geri dönülüyor. Aksi durumda byte ve bit hesabı yapılıyor. Y-koordinatından başlayalım. Her ekran satırında 8 grafiksatırı olduğu- na göre (grafik ekranının organizas- yonunu hatırlayın), INT (YN/8) ile hangi ekran satırında olduğumuzu bu- labiliriz. Her ekran satırı 320 byte'dan oluştuğuna göre, 320*1NT (YN/8) ile noktamızın yer aldığı ekran satırının ilk byte'nin grafik ekranının başlan- gıç adresinden uzaklığını buluruz. Sıra geldi, noktayı bulunduran grafik sa- tırının ilk byte'nın adresini bulmaya. Demin bulduğumuz sayıya (YN AND 7) ile bulacağımız YN/8 işleminin ka- lanını eklersek, grafik satırının başı- nı buluruz. Şimdi de XN koordinatını kullana- rak, noktanın sol taraftan kaç byte ve kaç bit uzakta olduğunu bulalım. INT (XN/8) ile sola olan uzaklığı byte cin- sinden buluruz. Adres olarak hesabi yapmak için, bu sayıyı 8 ile çarparız. Hatırlarsanız, yatay bir çizgi üstünde byte'ların adresleri sekizer sekizer ar- tıyordu. Daha önce YN değerini kul- lanarak bulduğumuz byte değerine son bulduğumuz değeri de eklersek, noktamızın kaç numaralı byte içinde olduğunu saptamış oluruz. Sıra geldi bit numarasına. YN ile yaptığımız gi- bi (XN AND 7) yaparak XN'in byte içindeki yerini soldan itibaren bulu- ruz. Bunu 7'den çıkarırsak, bit'in sağ- dan itibaren olan numarasını hesap- lamış oluruz. İki üssü bit numarası ile, bulduğumuz adresin eski içeriğini OR'larsak, hedeflediğimiz nokta ya- nık duruma geçer. Tüm bu işlem 320*200 için geçerli. Yanan noktanın Commodore rengi de, daha önce ekranı renklendi- rirken verdiğiniz çizgi rengi olacaktır. Multicolor ekranda da buna benzer bir işlem yapılır. 52400-52460 arası sa- tırlarda görmektesiniz. Parametreler gene XN ve YN'dir. Bir de hangi renk ile çizim yapılacağını belirleyen RR değişkenini göndermelisiniz. İçeriği 0- 3 arası bir sayı olmalıdır. Böylece, ek- ranı renklendirirken belirlediğiniz 4 renkten hangisinin nokta konurken kullanılacağı belirlenir. Bu kez,tüm hesaplamalarda XN ye- rine XN*2 kullanıyoruz. Diyelim ki XN — 20. Multicolor'da bu X değeri, soldan 40 ve 41 numaralı bit'lere hi- tap eder. Biz de hesaplamalarımızda bunu gözönüne alıyoruz. Tüm işlem- ler sonucunda byte'ın adresini bul- duktan sonra, o noktamızı oluşturan iki bit'in hangileri olduğunu hesaplı- yor, sonra bunları AND ile sıfırlayıp, RR'nin gösterdiği değer ile OR'luyo- ruz. Tabii bunu yapmak için de bazı ufak hesaplamalar gerekiyor. Bir de nokta silme işlemi var. Bu iş- lemi sadece 320*200 içindüşünebiliriz. Multicolor'da nokta silmek anlamsız- dır. Dört renkten herhangi biriyle çi- zim yapılınca eski nokta ortadan kal- kar, yerine yeni bir nokta gelir. Nokta silmenin nokta koymaktan pek bir farkı yok. Tek farkı, OR işle- mi için kullandığımız sayının tam ter- sini (yani 255'ten çıkarılmış halini) byte'ın eski içeriği ile AND'liyoruz. Böylece hedeflediğimiz nokta sönü- yor. Bu işlemi de, 50500-50560 arası yapıyor ve (XN, YN) parametrelerini kullanılıyor. Geriye çizgi ve elips kaldı. Çizgi ile devam edelim. Programımızın 50800-51040 arası, 320*200'lük ekrana, başlangıç ve bi- tiş koordinatları X1, YI, X2, Y2 ile belirlenmiş bir çizgi çizer. Bu koordi- natlar ekranın dışında da yer alabilir. O zaman çizginin ekranda kalan kıs- mı çizilecektir. Ortaokulda geometri dersini gören- lerin hatırlayacağı meşhur bir düz çiz- gi formülü vardır Y-MX*4T M ve T harfleri değişik de olsa, for- mül budur. Şimdi bu formülü nasıl kullanacağımız görelim. X1 ve YI değerlerini yerlerine ko- yar ve denklemi T”'ye göre ayarlarsak şu formülü elde ederiz: T-YI-M*X1 aynı işlemi X2 ve Y2 ile de yapalım: 53

Bu sayıdan diğer sayfalar: