Commodore sayı 66, sayfa 44

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 44

PÜF NOKTASI: (raster interrupt kullanıyorsanız) Inc $D019 komutuyla ortalığı düzenleyip, Jmp $EA81 komutuyla asıl programınıza ($800B)'ye geri dönebilirsiniz. Gelelim RASTER'in ne olduğuna... Bilgisayarınız, ekrandaki görüntüyü oluşturmak için televizyona bilgileri bir piksel (nokta) kalınlığında satırlar şeklinde gönderir. Bu tek nokta kalınlığındaki satırların her birine bir RASTER SATIRI adı verilir. Bu raster satırları, normal olarak televizyon ekranınızın en üstünün biraz daha üzerinden başlar ve en altının biraz daha aşağısına kadar devam eder. Bilgisayarınız, herhangi bir anda hangi satırın televizyona gönderilmekte olduğunu bilir, ve bu satırı size bildirebilir. Bu satırların her birinin bir numarası vardır ve bu sayılar $0000-$012F arasında değişir. En üstteki raster satırının değeri $0000, en alttakinin değeri de $012F'dir. Bu değerin son sekiz bitini $D012 adresinden okuyabilirsiniz. Eğer tüm işlemleriniz, yazı yazabileceğiniz ekranda yapılacaksa bu sekiz biti kullanmak size yetecektir. Fakat tüm ekran üzerinde değişik efektler yapmaya kalkarsanız, 9. biti de kullanmanız gerekir. İlk durumda sadece $00-$FF arasında kontrol sahibiyken, ikinci durumda $0000 - $01FF arasında adresleme yapabilirsiniz. Ekranda sadece $012F satır olduğundan bu değerden sonrasını da kullanmanıza gerek yoktur. Bu 9. biti $D011 adresinin son bitinde bulabilirsiniz. Yani dokuzuncu bitin değerini öğrenmek için Lda And komutlarını kullanabilirsiniz. Eğer raster $00-$FF arasında ise yukarıdaki işlemin sonucunda sıfır bayrağı (zero flag) kalkacaktır. Eğer $0100-$012F arasında ise sıfır bayrağı inik kalacaktır. İyi de, raster satırının ne olduğunu bilmek ne işimize yarayacak? Bu soruyu bir örnekle cevaplayabiliriz; Ekranın üst yarısında arkaplan rengi siyah, alt yarısında ise beyaz olsun istiyorsak ne yaparız? Bu problemi çözmek için interrupt'ları hiç kurcalamayalım.

Program 1: Sei Beklel Lda $DO12 Cmp #$A0 Bne Bekle Lda $DOl11 And #$80 Bne Bekle Lda #$01 Sta $DO20 Lda Bpl Bekle2 Lda $DOl11 Bmı Bekle3 -Lda #$00 Sta $DO20 Jmp Beklel

Yalnızca basit karşılaştırmalar kullanarak bu problemi halledebiliriz. Burada yapılan işlem basittir: Önce işimizi engellemesin diye tüm interrupt'ları kapatıyoruz (bir de Sei'yi kaldırıp programı çalıştırın ve tuşlara basmayı deneyin), ve raster'in $00A0 satırına gelmesini bekliyoruz. Buraya gelinir gelinmez çerçeve (arkaplan) rengini beyaza çeviriyoruz ve 9. bitin önce bir, sonra da sıfır değerini almasını bekliyoruz. Burada kullanılan metodu öğrenirseniz, her seferinde And $80 komutu verip sonra sıfır bayrağına bakmanıza gerek kalmaz. Eğer bir baytın 8. biti 1 ise Bmi komutu sıçrama yapar, 0 ise Bpl komutu. Bu işlemi yapınca, raster'i tam $0000 satırında tekrar yakalıyoruz (ki burası görünen ekranınızın üstündedir) ve çerçeve rengini siyaha çeviriyoruz ve aynı işi tekrarlamak üzere rutinin başına sıçrıyoruz. Aslında asıl sorunu burada çözmüş bulunuyoruz. Yani istenen koordinata gelene kadar bekleyip karakter ekranına geçeriz (Lda And #$DF Sta $D011 veya Lda #$1B Sta $D011). Sonra ekranın tepelerinde bir yerde tekrar grafik ekranına gireriz (Lda $D011 Ora #$30 Sta $D011 veya Lda #$3B Sta $D011). Gördüğünüz gibi ekranın herhangi bir özelliğini istediğimiz anda değiştirebiliriz. Bu iş için sadece raster'ın gereken yere gelmesini beklememiz, sonra da değişiklikleri yapmamız yeterlidir. Bu aşamada değişik efektler yaratmayı, ekranı üçe, dörde, onbeşe, vb. bölmeyi denemenizi öneririm. Demin anlattığım işlemi yapması oldukça kolaydır, fakat bekleme sırasında başka işler yapabilecekken, yalnızca iki komutu işlettiğiniz için verimi düşüktür. Oysa asıl anlatacağımı bilirseniz, bilgisayarınız, istediğiniz raster satırına geldiğinde ana işini bırakıp, sizin işlemlerinizi yapabilir. Yani interrupt'ları belli raster satırlarına geldiği zaman yaratabilirsiniz. Bir raster interrupt'ı yaratmak için şöyle bir program kullanabilirsiniz:

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