Program Döküm Eki sayı 56, sayfa 3

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 3

raster interrupt'ı devreye sokulabilirdi ama bu kadar basit bir iş için gereksiz yere uğraşmaktan başka hiç bir işe yaramazdı bu.

Lda 8 sta sXpos

Artık kayan yazılar kısmı bittiğine göre ekranın sağa sola oynamasını durdurmalıyız. Bunun yanında tabii ki ekranı 40 kolona çıkarmamız da gerekir. Eğer merak ediyorsanız bu iki satırı yazmayın ve görüntü açısından ne kadar önemli olduklarına kendiniz karar verin.

Dec Xpos

(Bu komutu iki veya üç kez yazarak yazının daha hızlı kaymasını sağlayabilirsiniz.)

Yazıları bir piksel sağa al.

Bpl çık

Bu komut, son işlemin 0 veya daha büyük sayıları içerdiği durumlarda belirtilen adrese sıçramasını sağlar. Yani x koordinatımız hala 0-7 arası bir yerlerdeyse, herhangi bir değişikliğe ihtiyaç olmadığından, Kernal interrupt rutinine geri dönülür.

Eğer X kordinatımız 0'ın altına düştüyse (yani 255 ve 128 arasındaysa) şu rutinler devreye girer:

Lda 7 Sta Xpos

İlk olarak X pozisyonu tekrar 7 yapılır ve yazılar bir sola alınır ki hepsi bir piksel daha kaymış gibi görünsün.

Ldy 0 Kaydır Lda $0401,y Sta $0480,y Iny Cpy 39 Bcc Kaydır

Evet. İşte ilk satırı bir sola kaydırma rutinimiz. Görüldüğü gibi ilk olarak $0401, $0400 adresine taşınıyor, ve y'nin değeri bir artırılarak 39'a varana kadar aynı işlem tekrarlanıyor. Burada Bne yerine kullanılan Bcc komutu Bne ile aynı işlemi yapar fakat daha kapsamlıdır. Yani Y'nin değeri 39'dan küçükse Kaydır adresine sıçrama yapılır. (Bcs komutu ise ancak sayı büyük veya eşitse sıçrama yapar.)

Burada en büyük hata şöyle bir rutin yazılarak yapılır:

Ldy 39 Kaydır Lda $ 0401, y

Sta $0400, y Dey Bne Kaydır

Evet belki de çoğunuzun ilk bakışta faredemediği bir hata yapılmıştır bu rutinde. Eğer rutini dikkatlice incelersek ilk olarak satırın en sağındaki harfi bir sola kaydırdığımızı farketmişsinizdir ($0427'yi $0426'ya taşıyorsunuz.) E ne var ki bunda? demeyin hemen ve işlemi incelemeye devam edin. İkinci kaydırma işlemi ise $0427'de bulunan harften başkası değildir. Yani bu rutini kullanırsak yalnızca tüm satırın aynı harfle dolmasını sağlarız.

Lda YAZI Cmp 255 BNE YAZ2

Artık sıra listemizde bulunan yeni harfi okumaya geldi. Fakat burada bir kontrol yaparak yazının bitip bitmediğini anlamamız gerekiyor. Yani yazımızın sonuna geldiğimizi söyleyen 255 kodlu karakteri alıp almadığımıza bakmalıyız burada. Eğer elimizdeki karakterin kodu 255 değilse doğrudan doğruya harfi ekran sonuna yazdırma rutinine atlayabiliriz.

Lda YAZI Sta yaz+1 Lda YAZI Sta yaz+2 Jmp YAZ

Eğer yazının sonuna geldiysek yapmamız gereken bazı işler vardır. Bu rutinle, ilk olarak yazı göstergecini yazımızın datalarının en başına alıyoruz. Daha sonra JMP YAZ ile ilk harfi almak için yazı alma bölümüne sıçrıyoruz. Eğer bu son komutu eklemeseydik bitirme kodu olan 255'in karakter karşılığını ekranda görürdük.

YAZ2 sta $0427

Yazı sonu olmayan karakterleri ekranın son kolonuna -ki bu kolon, ekranımız 38 kolona indirildiği için görülemez -yazdırıyoruz.

Inc Yaz+1 Bne Çık Inc Yaz+2

Tabii ki yazı datamızdada bir sonraki harfi göstermemiz gerekiyor. Bu komutlarla yazı harflerini okuyan Lda YAZI komutunun gösterdiği adres bir artırılıyor ve bir daha harf okunduğu zaman ikinci harfin okunması sağlanıyor. Gördüğünüz gibi burada programın kendi kendisini değiştirme metodunu kullanıyoruz. bu metodu kullanmak istemeseydik iki seçeneğimiz vardı:

1. Lda Yazı, y komutuyla indeksli bir okuma sistemi kullanmak: Bu durumda Y registerinin içeriğini her okumada bir artırmamız ve belirlediğimiz boş bir adreste saklamamız gerekmektedir. Böyle bir metodla da yeterli bir sonuç alabilirdik ama erişebileceğimiz harf sayısı 255'le sınırlı kalırdı. (Bildiğiniz gibi indeks registerleri 0-255 arası değer alabilir.) Bu kısıtlamayı aşabilmek için yapabileceğimiz tek şey, Y registerinin değeri 255'i aştığı zamanlarda, programın kendisini değiştirmek metodunu kullanarak, YAZI adresinin yüksek (high) baytının saklandığı YAZ+2 adresinin değerinin bir artırmamız olabilirdi. Ama bu durumda bizim rutinimizdeki metod daha hızlı ve etkili bir sonuç verdiği için indeksleme sisteminden vazgeçmemiz gerekmektedir.

2. Ldy 0 Lda (zp), y

Zp, 0-ff arasında kullanılmayan bir adrestir ve yazı datalarımızın adresi YAZI'nın alçak baytı Zp'de yüksek baytı da zp+1'de saklanmaktadır. Bu okumadan sonra

Inc zp Bne atla Inc zp+1 atla...

Komutlarıyla bir sonraki harfin gösterilmesi sağlanmalıdır. Bizim kullandığımız kadar etkin bir metottur, bu yüzden kendi rutinlerinizde bunu kullanabilirsiniz.

Ve programın en sonunda JMP IRQÇIK komutuyla Kernal interrupt rutinine geri dönülür.

Yazımızın datları YAZI label'ı tarafından gösterilen adreste, ekran kodları olarak saklanmalıdır. yani A'nın ASCII değeri olan $41 değil bunun $40 eksiği olan $01 değerini kullanmalıyız. Sayılar ve '?' ',' '.' gibi özel işaretlerin ekran kodları ve ASCII değerleri aynıdır.

Evet, bu aylık da bu kadar. Gelecek ay yeni bir yazıda görüşene kadar hoşçakalın.

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