Commodore sayı 72, sayfa 18

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 18

TABLO I

Her neyse, konuyu fazla dağıtmayalım. “İlk olarak kağıt üzerinde programı tasarlamalıyız” diyordum en son. Programa giriş kismi, yalnızca sistemi rahatsız etmeyen bir interrupt kurmalı, okun grafik dataları için gerekli yerleri ayarlamalı (o anda kullanılıyor olabilecek yerleri rahatsız etmeden tabii ki) ve BASIC'e dönmeli. Tabii ki bu aşamada ne tür bir interrupt kullanmamız gerektiğine de karar vermemiz gerekiyor. Bize göre, ekranın her taranışından sonra portlar okunup gerekli ayarlamalar yapılırsa yeterince hassas bir hareket elde ede- Tiz. Hem de sprite'ın pozisyonu, elektron ekranın dışındayken değiştirileceği için türeme gibi sorunlarla karşılaşmayız. Bu yüzden $0100 raster satırında oluşturulacak bir RASTER interrupt'ın amaçlarımıza hizmet edebileceğini düşündük. Daha sonra, okun grafik özelliklerine ka- Tar vermemiz gerekiyordu. Tabii ki serbestçe dolaşabilmesi için bir sprite olmalıydı okumuz, Sprite 1'i bu işe ayırmaya karar verdik. Sprite Vin seçilmesi için belli bir şeyi göz önüne almadık. Yani ilk sprite'ın ya da sprite'in kullanılması o kadar da önemli de- Bil. ama tutup da beşinci sprite'ı ok için ayırmanın hiç alemi yok açıkçası. Her neyse, şimdi de sprite'ın özelliklerini tartışmamız gerekiyor: 1) Multi-color (çok renkli) olmamalı, çünkü çok kötü görünür. 2) Ekranda rahatça seçilebilecek, parlak bir renk olmalı. 3) Karakterlerin altından değil, üzerinden geçmeli, 4) X ve Y'de büyütülmemiz olmalı (gene görüntü yüzünden), Sprite'ı tanımlarken tüm bu değerlerin bizâm ayarlamamızda yarar var. Çünkü bizim programdan önce birileri çok renkli, X ve Y'de büyütülmüş ve karakterlerin arkasın-

VE da dolaşan bir sprite kullanmış olabilir (Her zaman en kötüyü düşünün). Bu durumda istediğimiz şartların hemen hemen hiçbiri sağ- Tanmamiş olur. Sprite ayarlamalarını yaparken dikkat etmemiz gereken ön önemli şey, diğer sprite'- lara elimizden geldiğince az dokunmak olmalı. Yani birinci sprite'ı açmak için: LDA e $01 STA $DO15 değil de;

LDA $DO15 ORA e $01 STA $DO15

kullanmalıyız. Bu sayede yalnızca birinci sprite'ın açılacağını garanti ederiz ve diğer sprite'ları ne açarız ne de kaparız. Oldukları gibi kalırlar. Aynı şekilde Sprite'ın çok renkli modda olmamasını sağlamak için:

LDA 1 $00 STA $DOIC

yerine

STA $DO1C

kullanmamız gerekir. Bu komutla sadece sıfırıncı bitin değerini sıfırlarız ve diğerlerine dokunmamış oluruz. Bütün gerekli VIC adreslerini ayarladıktan sonra, okun grafik datalarını boş bir bölgeye taşıyıp, burayı birinci sprite olarak ekrana çıkartmalıyız. Biliyorsunuz ki, BASIC kullanıldığında $0801-$9FEF arasındaki bölgeye güvenemezsiniz. VİC'in birinci sayfasını kullanmak istediğiniz için (ekranın tüm elemanlarını $CO00'dan kontrol etmek istemezsiniz sanırım) $0400'ün altında bir boş yer bulmalısınız. En uygun yerlerden biri $0380 olduğu için bu bölgeyi ok datamız için seçtik ve buraya grafik datalarını taşıdık. $07F8'i de“$0380'i gösterecek şekilde ayarladıktan sonra grafikle ilgili tüm işimiz bitmiş oldu. Artık gönül rahatlığıyla interrupt'- lara izin verip, BASIC'e dönebeliriz. Dikkat ettiyseniz, şimdiye kadar programın diğer kısımları bizi hiç ilgilendirmedi. Bu kısımların kendi görevini kusursuz olarak yaptığını varsayarak programın birinci kısmını tamamladık. Kağıt üstünde çalışmanin en iyi yanı işte. Eğer interrupt'ı açarak işe başlasaydık, sonrasına bir sürü ekleme yapmamız gerekecekti ve programımız gittikçe kontrolden çıkacaktı. Gelelim programın ikinci kısmına, Buradan okun hareketleri kontrol edilecek ve gerekli adreslere okun durumuyla ilgili bilgiler yazılacak. İlk olarak kendimize beş tane değişken tanımlayalım. Bu değişkenler belli adreslerde bulunsun ve daha sonra tasarlayacağımız bir rutin bu adreslerin değerlerini, joystick'in yönüne ve ateşin konumuna göre ayarlansın. Bu beş adresten başta, BA-SIC'ten kontrol edilecek olan değişkenlerimiz de hazır dursun. Bu değişkenler tasarımımıza göre şöyle olmalı: 1. Okun X, Y koordinatı (nokta olarak). 2. Okun X, Y karakter pozisyonu. 3. Ateşe basıldığında okun bulunduğu X, Y karakter pozisyonu. Toplam sekiz adet değişkene ihtiyaç var. Fakat değişkenleri daha dikkati incelerseniz, değişkenlerden ikisinin iki bayttan oluşması gerektiğini anlarsınız. Bunlar X koordinatı 0-320 arasında değerler alabildiği için bu koordinatı saklayan değişkenler ikişer bayt olmalı, Bu 10 baytlık değişken sürüsünün de hazır bulunduğunu varsayalım. Şu anda yalnızca bu adreslerin içeriğine göre yapacağımız işlerle ilgilenmemiz yeter- Hi olur. Onları ayarlamaya da sıra gelecek. İlk olarak yukarı, aşağı, sol ve sağa gidilmesi için emir geldiyse ne yapacağımızı Söyleyen tabloyu hazırlayalım.

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