Commodore sayı 76, sayfa 18

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 18

JSR $0073

komutu yer almaktadır. $0073'te yer alan rutin, bilgisayarınızda yer alan tek RAM rutinidir. Bu rutinin RAM'de yer almasının sebebi de kendini değiştiren bir rutin olmasıdır. $0073'e her sıçradığınızda ilk olarak $007A-$007B birleşik adresinde yer alan değer bir artırılır, sonra da bu iki adresin gösterdiği bellek alanında yer alan karakter alınır. Bu alınan bayt (ya da karakter) $20 değilse, baytın sayı ya da karakter olmasına göre bazı flag'lerin durumları ayarlanır. rutinden dönüldüğü anda A registerinde (Akümülatörde) alınan bayt bulunur. Bu rutinden dönüşte A'da hiçbir zaman $20 bulunmaz. Eğer bu rutin ROM'da yer alsaydı, kendi kendini değiştiremeyecek, dolayısıyla çalışmayacaktı. Madem ROM rutini bu komutla başlıyor, biz de programımızı bu komutla başlatalım. Daha sonra A'da istediğimiz karakterin olup olmadığını kontrol edelim. Tabii ki önce ekleyeceğimiz komutun ne olacağına karar vermeliyiz. Bildiğiniz gibi Commodore'a eklenen komutların sayısı iki-üç gibiyse genelde yana ok tuşu arkasına konan bir harf şeklinde komutlarımız olur (“e-A” gibi). Belki de ilk teyp turbolarından olan pinky turbo'- nun LOAD, SAVE ve VERİFY yerine * ve “ kullanması yana ok standardını başlatmıştır. Sebebi ne olursa olsun, çoğu kullanıcı gi-

LDA STA LDA STA RTS LDA STA

#S16 S0308 #SCO

#SE4

#SAT

JSR 80073

$COSO $CO53 $CO56 $CO59 $Co5C

JSR $0073 $CIE4 JSR

Tablo-1: Grafik işlemlerini komut haline getirmek için eklenmesi gereken komutların hepsi.

$C100 $C12D $C146 $C19B $CIE4

bi ben de yana ok tuşunun büyüsüne kapılanlardanım ve komutların “ “ B”, RI,R2,R3” ve X,Y,RENK” olmasına karar verdim. İtirazı olan varsa beri gelsin. Komutların beşi de yana ok ( klavyenin sol üst köşesinde yer alan tuş) ile başladığından, programımız JSR $0073'den hemen sonra bu karakterin olup olmadığına bakmalı. Bu karakterin kodu $5F olduğuna göre CMP 5F gibi basit bir komutla BASIC eklemesinin ilk adımı atılmış oldu. Bu satırdan sonra gelen BEO Komut-Olabilir yardımıyla, eğer yana ok karakteri varsa A, B, C, D ve E harflerinin kontrol edileceği yere sıçrıyoruz. Tabii ki karakter beklediğimiz yana ok değilse, komutun BASIC'e ait olduğuna karar vererek kontrolü BA-SIC'e bırakıyoruz. Tabi ki not aldığımız $ATE4 adresine sıçrayarak değil. Gizli bir iş yaparken arkanızda iz bırakmamayı öğrenmelisiniz. Casus rutinimiz en başta yer alan JSR $0073'ü gerçekleştirdiği için (ve A'da yer alan baytı hâlâ kaybetmediğimiz için) $A7ET'ye sıçramalıyız. Bu işlemi yaptığımızda, eğer komut bize ait değilse BASIC için hiçbir şey farketmeyecektir. SA7E7T'de yer alan rutin (bütün aptallığıyla) $0073'e sıçradığını ve A'da yer alan baytın buradan geldiğini sanacaktır (“Bak, kuş!” numarasının bundan daha etkili olduğu bir alan daha yoktur sanırım). Bundan sonra olacaklar bizim rutinimizi kesinlikle ilgilendirmez. Eğer normal bir kömut verildiyse bu komut işletilecek, hatalı bir şeyler girildiyse de ?SYNTAX ERROR'la karşılaşılacaktır (Girilen “hatalı bizim komutumuz olmadığı “zamanlar). Bizim komutumuz girilmediği zaman işlerin yolunda gitmesini kolayca sağladık. Peki girilenler bizim komutlarımızsa ne yapacağız? Eğer sıfırdan rutinler yazıyor olsaydık işimiz kolaydı: Komutla ilgili tüm işlemi bitirin, $007A-$007B'yi komutumuzun sonrasında bırakıp SA7E4'e sıçrardık, olurdu. Oysa şu anda hazır bir rutin var (beş ko-

"mutluk grafik paketi) ve bu rutinde gerekli komutun işlemini yaptıktan sonra ROM'a geri dönmeliyiz. Bunu nasıl yapabiliriz? Bu işi yapmanın en kolay yolu, ilgili rutini JSR ile çağırdıktan sonra ROM'a JMP ile sıçramaktır. Bunu yapmak yeni yeni teorik bilgi yüklenmekten kolay olabilir. Ama ben birbirinin aynı beş ayrı komutu ard arda vermenizi engellemek için (ve kafanızı biraz meşgul etmek için) yeni bir komut anlatmak istiyorum. JSR Komutu ve Yığıt (Stack)

Bilgisayarınızın alt programlardan geri dönerken nasıl olup da yerini unutmadığını hiç düşündünüz mü? Ya da bir interrupt oluştuğunda kısa interrupt servis rutinini çalıştırıp sonra hiçbir şey olmamış gibi aynı yere dönebildiğini? Bir yerlerde sizin hafızanıza karışmadan bekleyen ve bu işleri düzenleyen bir hafızaya ihtiyaç vardır Commodore'unuzun. Bu ek hafızaya STACK adı verilir. Sadece C-64'ün değil, tüm bilgisayarların temelde aynı mantığı kullanan yığıtları bulunur. Kimi bilgisayarın tüm RAM'i yığıt olarak kullanabilirken, kiminin onlarca ayrı yığıtı bulunabilir. Fakat bunlar içinde anlaşılması en basit olanı ve en sabit olanı C-64'ün yığıtıdır sanırım. $0100-$01FF arasında yer

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