C64 Türkiye sayı 5, sayfa 17

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 17

asl ;sütun değerini 2 ile çarp asl ;sonucu 2 ile çarp asl ;önceki sonucu 2 ile çarp clc ;”carry” bitini sıfırla adc #$18 ;$18 (24) ile topla sta $d000 ;1. sprite’ın X koordinat adresine yaz. Burada biraz bilgi verelim. Yukarıda 3 defa asl komutunu kullandık. Peki neden böyle bir işlem yaptık? Normalde kursörün sütun değerini olduğu gibi sprite’ın x koordinatına veremeyiz. Eğer verirsek sprite’ımız sadece 1 pixel ilerlemiş olur. Bir karakter normalde 8 pixel genişliğindedir. Kursör dediğimiz şekil aslında bir karakterdir ve reverse space karakterinden başka bir şey değildir. Kursörün bir sonraki sütuna gitmesi demek sprite’ımızında 8 pixel ilerlemesi demektir. Kursörün sütun değeri*8 sayısı bize sprite’ın X koordinatını verecektir. Assemblerde bir sayıyı 8 ile çarpmak, o sayıyı 3 defa sola kaydırmak yani 3 defa ASL komutu kullanmak demektir. Buraya kadar tamam. Peki $18 (24) sayısı nereden geliyor. Bir sprite’ın ekranda tamamen görünür halde olması için X koordinatı $18 olmalıdır. Bu sayıyı 3 ASL komutu sonunda elde ettiğimiz sayıyla toplarsak işimiz tamam olacaktır. lda $d6 ;kursörün satır değerini oku asl ; 2 ile çarp asl ; bir daha 2 ile çarp asl ; son kez 2 ile çarp clc ;”carry” bitini sıfırla adc #$32 ;$32 (50) ile topla sta $d001 ;1. sprite’ın Y koordinat adresine yaz. Yukarıdaki açıklamanın bir benzerini satır değeri için yapıp sonucu sprite’ın Y koordinat adresine yazdığımızda kursörün o anki pozisyonunda birde sprite göstermiş oluruz. inc $d027 ;1. sprite’ın rengini değiştir. jsr $ffea ;zamanı ilerlet ve stop tuşunu kontrol et. jmp $ea61 ;Romdaki interrupt rutinine geri dön. .end Geldik son açıklamaya. Kendi yazdığımız bir interrupt rutininin çalışması bitince son komutun normalde JMP $EA31 veya $EA81 olması gerekir. $EA81 deki komutlar $EA31’den başlayan komutların devamıdır. Peki aradaki $50 (80) byte’ta neler olmaktadır? İlk önce Stop tuşu kontrolü ve zaman ilerletme yapılıyor. Sonra kursörün yakılıp söndürülmesi ve kursörle ilgili karakter ve renk işlemleri yapılıyor. Daha sonra ise teyp tuşlarına basılıp basılmadığı ve teyp motor on / off işlemleri yapılıyor. En son olarak ise klavye kontrolü yapılmakta ve $EA81 adresine gelinmektedir. $EA81’den itibaren ise sırayla Y, X ve A registerleri yığından geri alınıp interrupt rutini bitirilmektedir. Bizim rutinimizde ise önce JSR $FFEA ile bir işlem yapılmakta ve JMP $EA61 ile çıkış yapılmaktadır. Eğer JMP $EA31 kullansak kursör işlemleri yapılacak, JMP $EA81 kullansak tuşlar çalışmaz hale gelecek. Bu nedenle önce JSR $FFEA ile stop tuşunun kontrol edilmesini sağlıyoruz, sonrada kursör işlemlerine hiç uğramadan geri kalan işler için JMP $EA61 komutuyla işimizi bitiriyoruz.

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