Commodore sayı 72, sayfa 21

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 21

Karakter Pozisyonunu hesapla nucu okun o anda bulunduğu yerin karakter pozisyonunu yazabiliriz. 7) Sprite pozisyonuna ayarla:

TABLO 8

Sprite Pozisyonunuayarla

TABLO 9

Demin de söylediğim gibi, X ve Y koordinatları ekrana göre relatif. Bir sprite için ekranın en tepesinin Y koordinatı 50'dir. Oysa biz bu değeri 0 olarak saklıyorduk. Öyleyse ilk olarak Y koordinatı değerimize 50 eklemeliyiz. Sonucu da sprite 1'in Y pozisyonuna yazabiliriz. Tabii ki X koordinatı işleri gene karıştıracak. Çünkü iki bayt. Ekranın en solunun koordinatı 24 olduğuna göre X koordinatı işleri gene karıştıracak. Çünkü iki bayt. Ekranın en solunun koordinatı 24 olduğuna göre X'e de 24 eklemeliyiz. Ama orijinal değerleri bozmamak için geçici bir değişken üzerinden toplamayı yapıyoruz. İlk olarak geçici değişkenin yüksek baytına X'in yüksek baytının değerini yazıyoruz. Daha sonra X'in alçak baytına 24 ekliyoruz. Bu değeri geçici değişkenin alçak baytına yazdıktan sonra CARRY'nin durumundan yüksek bayta ne yapacağımıza karar veriyoruz. Eğer Carry 1'se, yüksek baytın da bir olmasını sağlıyoruz. Daha sonra alçak baytı X koordinatına yazıyoruz ve yüksek baytın durumuna göre MSB'nin ilk bitinin değerini ayarlıyoruz.

Her şeyi ayarladığımıza göre artık BASIC'e de çalışmak için bir şans tanıyabiliriz. Yani $EA31'e sıçrama zamanı geldi. Tabii ki önce $D019'a kendisinden haberdar olduğumuzu söylemeliyiz. Artık yapacak tek şey kaldı: Joystick'i okumak. En başta iki portu da okumak istiyorduk, fakat bunu yaptığımızda 1 ve 2 tuşlarına her basıldığında okun hareket ettiğini gördük ve hareketi yalnızca Port 2'nin kontrol etmesini sağladık. Aslında uzun uzun kontrollerle gelen sinyalin klavyeden mi yoksa Joystick'ten mi geldiğini anlayabiliriz, ama amacımız olabildiğince kısa programlar yapmak olduğu için bunu yapmayacağız. Port 2'nin değerini kontrol etmek düşündüğümüzden de kolay oldu: İlk olarak yukarı, aşağı, sol, sağ ve ateş değişkenlerini sıfırlamalıyız. Böylece hiçbir değişiklik yapmadan geri dönmemiz joystick'de hareket olmadığı anlamına gelir. Joystick'in pozisyonunu okumak için PORT 2'nin durumunu gösteren $DC00'ı okumalıyız. Bu baytın ilk dört bitinde Joystick'in o anda bulunduğu konum gösteriliyor. Ama ters olarak. Yani yukarı itildiyse sıfırıncı bitin değeri 0 oluyor. 5. bit de ters olarak ateşin durumunu gösteriyor. Joystick'de hareket olup olmadığını anlamak amacıyla ilk olarak $DC00'ı okuyoruz ve & $1F ile AND'liyoruz. Eğer sonuç #$1F'se joystick kıpırdatılmamıştır ve geri dönebiliriz. Ama bitlerden biri bile sıfırsa hangi bitin sıfır olduğunu bulmamız gerekir. Bit tarama kısmında bol bol AND kullanacağımızdan ve bu komut A'nın diğer bitlerini yok edeceğinden, en iyisi PHA'yı kullanıp baytı yığına atmak olacaktır. Daha sonra sırasıyla gerekli biti AND'leyerek, o yöne bir hareket olup olmadığını anlayabi-

Bütün bitler için bu işlem aynen uygulandığı için sadece biri için nasıl yapıldığını anlamamız yeterli olacaktır sanırım. Mesela ateş tuşunu kontrol edelim: Her işlemden önce bir kez PLA ve hemen arkasından PHA kullanışımız dikkatinizi çekmiş olabilir. Biliyorsunuz yığından değeri aldığımızdan bu değeri kaybederiz. Oysa, bir sonraki kontrol için aynı değere ihtiyacımız vardır. Bu yüzden kullandığımız PHA komutuyla değeri yığına geri atarız. Daha sonra baytı $10 (ateş tuşunun 5. bit olduğunu unutmayın) ile AND'leriz. Eğer sonuçta akümülatörde yani A'da 00 olursa ateşe basılmış demektir. Değer sıfırdan farklıysa ateşe basılmamıştır, öyleyse yolumuza devam edebiliriz. Bu kontrol için CMP kullanmaya gerek yoktur. BNE'yi doğrudan kullanırsanız, değer sıfırdan farklı olduğunda sıçrama yapılacaktır. Tüm yönler için gerekli kontrol yapıldığında ana rutine dönerek döngüyü tamamlarız. Programın makine dili çıktısını PROGRAM 1 tablosunda görebilirsiniz. Eğer makine diliyle ilgileniyorsanız programı incelemenizi öneririm. Hatta programı incelerken ara sıra yazıya da göz atarsanız oldukça yararlı olacağına inanıyorum. Tüm BASIC kullanıcılarından özür dilerim, bu ay makine dilini biraz fazla kaçırdım. Bu yüzden gelecek sayının ATÖLYE'sinde sadece bu okun BASIC'ten kullanımı konusundan bahsedeceğim. Şimdilik incelemeniz için basit bir BASIC programını PROGRAM 2 tablosunda yayınlıyorum. Hatırlarsanız geçen ayın atölyesinde, ekranda duran renkli şeritleri açıp kapatmak için ne yapmamız gerektiğini sormuştum. Sorunun doğru cevabını yollayan iki arka-

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