Commodore sayı 67, sayfa 24

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 24

PÜF NOKTASI tabii ki. (Burada okuduklarınız, ne yapacağına karar veremeyen programcıların genelde düşündüğü şeylerin bir özetidir. Kendi kendilerine yaptıkları bu tartışma genelde bir-iki güne kadar uzayabilir.) Ama biz hem ekranı aşağı kaldırmayı, hem de renk dizmeyi bilmiyoruz ki. Şimdiye kadar anlattığım rutinler, bir raster satırında en fazla bir işlem yapabiliyordu. Aslında çok da zor değil hem ekranı aşağı kaydırıp hem de renk dizmek. Hatta DMA satırları ortadan kalktığı için tek zamanlamayla tüm satırların en başında işlem yapmanız garanti edilmiş durumdadır. Yani yapacağımız tek iş, ekranı bir satır aşağı kaydırmak, hemen sonra ekran rengini değiştirmek ve ekran kaydırabileceğimiz noktaya gelmeyi beklemek. Pek de zor gibi görünmüyor değil mi? Deneyin de görün ne kadar kolay olduğunu. Denemek gibi bir niyetiniz yoksa, Tablo-2'ye bir göz atarak ekranı istediğiniz kadar aşağı renkli olarak kaydıran rutinin kısalığını görün. Kısaca rutinin yaptığı işi anlatayım: İlk iki NOP komutunu kullanarak, tam ekranı kaydıracak noktada elektronu kontrol altına alıyoruz. Sonra ilk üç bitinde bulunan Y pozisyonunu bir aşağı alıyoruz. Tüm baytı değil, yalnızca ilk üç biti değiştirmeye çalıştığımız için sonucun ilk üç bitinden başka tüm bitlerini izole ediyoruz, ve bu bitleri, 25 satırlık karakter ekranını tanımlayacak bitlere ORA'lıyoruz. Bu sonucu $D011'e yazdığımızda, ekranın bir nokta aşağıda olduğunu sanıyor bilgisayarımız. Sonra ilk rengi alıp $D020 ve $D021 adreslerine (çerçeve ve ekran rengine) yazıyoruz. Y'yi 4'den geri saydırıp üç de NOP bekletince, elektron için gerekli zamanlamayı yapmış oluyoruz. Y'yi 4'den geri sayacağımızı ve üç NOP koyacağımızı nasıl mı buldum? Kolay. Önce Y'yi 0-8 arası bir değerden geri saydırdım ve hiç NOP kullanmadım. Olmadı tabii ki. Kafadan attığım (Tabii ki destekli attım. İlk değerin az, çok veya aşırı çok gelmiş olduğunu renklerden ve ekranın yamulmasından anlayabiliriz) ikinci bir değeri denedim, ve bu şekilde dört değerini buldum. Tabii ki tek başına dört işe yaramadı. Beş veya üç kullanınca da olmadığına göre, işimiz NOP'lara kaldı diye iki NOP attım. Neyse ki ilk denemede tuttu. Yoksa duruma göre iki NOP yerine bir BIT $EA kullanmam gerekecekti. Niye mi $EA? BIT komutunun kodunu $BA yaptığım zaman ikinci baytın da direkt olarak NOP olması için. BIT $00 kullanarak da zamanlama tutturulurdu, ama ilk baytı NOP yapıp bırakırsanız artan $00 baytını da NOP yapmanız gerekecekti.

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