Bu sayfadaki yazılar
Sayfanın metni
Sayfa 46
TABLO-2
LDA —$DO19
BMI $C038 JMP $EASI .,C038 LDX # $06 »CO3A DEX BNE $Co3Ü LDY # $00 .,C0O3F LDA $C028,Y STA $DO20 STA $DO21 STA $DO21 :,C048 LDX H $08 DEX BNE $CO4A NOP
CPY # $05 BNE — $CO3F LDA — #$00 STA STA
INC JMP
bekleniyor, sayaç artırılıyor ve son renk konmamışsa renk koyma işlemine devam ediliyor. Tüm renkler koyulduktan sonra ekran rengi sıfırlanıyor. $D019 adresi daha önceleri de yaptığımız gibi artırılıyor ve interrupt'ın bittiği haber veriliyor. Son olarak da $EA31 adresine sıçranıyor. Burada da intro tekniklerinden biraz saptık gördüğünüz gibi. $EA31 değil $EA31'e sıçrıyoruz ki zavallı bilgisayar istediği gibi işlem yapabilsin. Buraya kadar tüm işlemler makine dilini ilgilendiriyor. Oysa bizim size olan sözümüz, tamamen BASIC kontrollü bir renk şeridi yapmaktı. Ama rutin ne yazık ki sabit bir koordinata renk şeridi koymaktan öteye gidemiyor. Ya da alışık olmadığınız için size öyle geliyor. Bu program, üzerine hiçbir makine dili ek yapılmadan BASIC tarafından kontrol edilebilir. İsterseniz şimdi de BASIC kullanarak bu programın nelerini kontrol edebileceğimizi bir inceleyelim: İlk olarak değiştirilebilecek şey renk şeritleri dışındaki tüm ekranın rengi. Rutinden de görebileceğiniz gibi, beş renklik şerit verildikten sonra ekran ve çerçeve rengi siyah yapılıyor. Bu işi yapan komutlar ise adresinden başlıyorlar. Eğer biz $C055 adresinde bulunan değere bazı POKE'lar verirsek, ekranın rengi artık bu değerin renginde olacaktır. Yani:
SYS 49152
komutundan sonra:
POKE 49237,1
komutunu verirsek renkli şeritlerden başka her yer beyaz olur. Bundan başka renk şeritlerinin bulunduğu tabloyla oynayarak beş rengi değiştirebiliriz. Ekranda şeritler varken 49192-49196 adreslerine şu değerleri verin mesela: 6-14-3-14- 6. Ekran rengi de siyaha ayarlayın. Bu sayede mavi tonlarından oluşmuş bir renk çubuğunuz olur. İsterseniz bu renkleri sürekli değiştirerek parıldayan bir çubuğa sahip olabilirsiniz. Tüm ekranı REVERSE (negatif) boşlukla doldurur, daha sonra da harfleri de REVERSE yazarsanız, renkli şeritler ekranda değil harflerin içinde görünür, bu sayede menü elemanlarınızın harflerinin şeritli şeritli olmasını sağlayabilirsiniz. Ama bu sefer çerçevede yer alan renkler kötü bir görüntü oluşturacağından, rutinde bulunan tüm
$D020'leri $D021 gibi bir adrese çevirin. Mesela $D027 yaparsanız, bu bölgedeki birinci sprite'ın içinden renk şeritleri geçer. Bu kadar şey anlatmama rağmen, bu rutin hâlâ menü elemanların seçmekte kullanılamaz. Çünkü ekranın tepesinde sabit bir şekilde duruyor. Ne yapmalıyız ki bu garip şerit yerinden oynasın? Bu sorunun cevabını RASTER interrupt yapan herkes biliyor aslında. RASTER interrupt'ı yaparken interrupt'ın bizim istediğimiz satıra gelindiğinde yapılmasını $D012 adresine yazarak sağlamıyor muyduk? Bu işi interrupt adreslerini ayarlarken, ya da interrupt'ın içinde ya da herhangi bir programdan yapabiliriz. Bu konuda bizi kısıtlayabilecek herhangi bir kural yok. Öyleyse serbest serbest dolaşırken:
POKE 53266,66
komutunu verirsek ne olur? Tabii ki interrupt rutini verdiğimiz RASTER satırına gelindiğinde devreye girer. Kısacası renkli şeridimiz 66 RASTER satırına kayar. Ama burada bir büyük problemle karşı karşıyayız: renk şeritleri ancak belli bir konumda başlarsa DMA satırlarını atlatabiliyor (bu rutin DMA satırında RASTER interrupt yapmalıdır mesela). Eğer bu konumdan farklı bir yerde başlarsa mutlaka renkler sağa sola oynar, sabitlik bozulur ve çok kötü görüntüler oluşur. Bu kötü görüntüleri engellemek için RASTER satırını belli bir kurala göre ayarlamalıyız. Bu kuralı rutinin başlangıç RASTER satırından çıkarabiliriz. Genel olarak, n. RASTER satırında çalışan her rutin n+8. RASTER satırda da hatasız olarak çalışır (çok harika zamanlamalarla uğraşmıyorsa ve üzerinde sprite yoksa). Bu kural en azından buradaki program için geçerli. Rutin orijinal olarak $32—50 RASTER satırından başlıyor ve 0. satırda yer alıyor. O zaman bu şeridi n. satıra koymak için:
POKE 53266,504 9*8
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 47
komutunu vermelisiniz. Bu sistemle şeritleri ekranın tüm satırlarında dolaştırabilirsiniz. Eğer BASIC'de basit menüler yapabiliyorsanız, artık bu menülerde kontrollü renk şeritleri dolaştırmamanız için hiçbir neden kalmadı. Belki çoğunuz buraya kadar olan bilgilerin işinizi yapmak için yeterli olduğunu düşünüyorsunuz, ama bir açık nokta kaldı ki, ancak menülerinizi düzenlerken farkedebilirsiniz. Diyelim ki kullanıcı şeridi seçilecek satıra getirdi ve RETURN'e bastı (ya da siz ne istediyseniz onu yaptı). Kullanıcının seçtiği işlemler yapılırken bu şeridi ne yapacağınızı hiç düşündünüz mü? Belki ekranın üstüne ya da altına yerleştirerek ortada görülmemesini sağlarsınız, ama şeridi tamamen ortadan kaldırmak için ne yapmalıyız? Bu sorunun cevabını bu sayıda vermeyeceğim. Bu konudaki cevaplarınızı bekliyorum. Ne yazık ki bu soruyu bilirseniz bir ödül kazanamayacaksınız, ama adınız gelecek ay dergide yayınlandığında kız arkadaşlarınızı (ya da erkek arkadaşlarınıza) hava atabilirsiniz. Hem de ilerde olabilecek yarışmalar için iyi bir antrenman olur. Düşünün bakalım. Cevaplarınızı bekliyorum. Tablo 3'de basit bir BASIC menü seçicisi var. Ama pratik olarak pek de iyi bir ekran düzeni yok. Yalnızca size şeridi kontrol eden
BASIC programın neye benzeyeceğini göstermek amacıyla yazdım. Makine dili programın MDE çıktısını da Tablo 4'de görebilirsiniz. Bu kadarcık bir programı yazmak onbeş dakikadan fazla almaz sanırım.
Bu arada, eğer bu programları geliştirirseniz veya hoş programlarda kullanırsanız, arkadaşlarınızla paylaşmak için dergimiz adresine kaset veya diskette yollayabilirsiniz. Gelecek ay daha ilginç bir tezgahta buluşalım...
ÖZÜR: Geçen ayki Makine dili- şıklıklar sebebiyle yayımlanmamışnin püf noktaları yazısının ondalık tır. Bu programı aşağıda bulabilirsayıya çeviren programı, bazı karı- siniz.
PROGRAM
te
he be ve ve
ONDALIK
CO0O0O COBC