Program Döküm Eki sayı 19, sayfa 6

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 6

Bu garip başlık da neyin nesi demeyin! Hele makina dili programcıları gözlerini dört açsınlar!

Diyelim ki, makina dilinde bir sürü program yazdınız. Hepsini ,8,1 veya ,1,1 ile yükleyip, NEW verip, sonra da SYS komutu ile çalıştırmak zorundasınız. Ya SYS komutlarından birini unutursanız? Ya da yanlış yazarsanız? Zahmetli iş...

Peki, bu programları normal LOAD ile doldurup RUN ile başlatmayı hiç düşündünüz mü? İşte bu minik programımız bu işe yarıyor. Nasıl çalıştığını anlatalım önce. Tabii, öncelikle programımızı MDE ile yazıp bir yerlere kaydedin. Kullanmaya gelince...

Önce üzerinde değişiklik yapacağınız makina dili programını yükleyin. Yalnız dikkat etmeniz gereken bir nokta var. Eğer bu programınız $0800-$09AF, $A000-$BFFF, $D000-$FFFF adreslerinden birinin üzerine düşüyorsa maalesef RUN ile başlayacak hale getiremiyoruz. Çünkü bu bölgeleri minik programımızın kendisi kullanıyor.

Yükleme işlemi bitince, NEW verin. Sonra da minik programımızı yükleyin. RUN ile çalıştırın. Ekranda bazı yazılar çıkacaktır. Burada da yazacağı gibi, şu komut ile esas programınızı RUN ile çalıştırılacak hale getirebilirsiniz:

SYS 2089, başlangıç, bitiş+1,giriş

Bilgisayar READY verdiğinde, normal SAVE komutu ile programınızı bir yerlere kaydedin. Gerektiğinde yükleyip RUN ile çalıştırabilirsiniz.

Bir örnek verelim. Diyelim ki, $C000-$C234 (49152-49716) adresleri arasında bir programınız var ve çalıştırmak için SYS 49200 vermeniz gerekiyor. Yapacağınız işlemler sırasıyla şunlar olacaktır:

1) Esas programlarınızı yükleyin.

2) NEW verin.

3) Minik programımızı yükleyin.

4) RUN ile çalıştırın.

5) SYS 2089,49152, 49717, 49200 verin.

6) Oluşacak programı SAVE ile kaydedin.

Basit, değil mi? Dikkat ederseniz, programımız 49716'da bittiği halde biz 49717 verdik. Bu, her zaman yapılması gerekli birşey.

Vereceğiniz adreslerin 0-65535 arası olması ve bitiş adresinin başlangıç adresinden büyük olması kontrol ediliyor ve tersi durumlarda ILLEGAL QUANTITY hatası veriliyor.

Giriş adresiyle ilgili birşey daha söylenebilir. Eğer, yeni programa RUN dediğinizde çalışmasını değil de, sadece esas makina dili programınızın yerine yerleştirilip tekrar READY yazısına geri dönülmesini istiyorsanız, giriş adresi yerine 64922 verin. Bu adreste makina dili komutlarından biri olan RTS vardır ve bu nedenle minik programımız, sizin programınızı yerine yerleştirdikten sonra onu çalıştıracağına geri döner.

Şimdi gelelim işin teknik ayrıntılarına...

C64'ün sistem rutinleri arasında, belli bir hafıza bölgesini, başka bir bölgeye taşıyan bir rutin vardır. Bizim minik programımız da bundan yararlanıyor. Onun yardımıyla yarattığınız program, RUN komutu verilir verilmez, makina dili programınızı sistemdeki rutini kullanarak gerçek yerine kaydırıyor ve başlatıyor. Tüm bu işlemi yapan kısım genel biçimini aşağıdaki şekilde görebiliriz:

LDA # $?? ; (blok başlangıcı) LDY # $?? ; (blok başlangıcı) STA $5F ; depola STY $60 LDA # $?? ; (blok sonu) LDY # $?? ; (blok sonu) STA $5A ; depola STY $5B LDA # $?? ; (yeni blok sonu) LDY # $?? ; (yeni blok sonu) STA $58 ; depola STY $59 JSR $A3BF ; sistem rutini JMP $???? ; giriş adresi

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