Commodore sayı 36, sayfa 27

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 27

2000 LDA # $5 ;5 saniye bekle 2002 STA $40 ;parametreyi yerleştir 2004 JSR $5000 ;$5000 adresindeki alt programa git e . 5000 DEC $40 ;$40 adresini bir azalt 5002 BE© $500C ;Eğer $40 adresinin değeri sıfıra ulaşırsa ana programa geri dön 5004 SO 5006 DEY ;Y yazmacını bir azalt 5007 BNE $5006 ;Eğer değer sıfıra eşit değilse $5006'ya git 5009 JMP $5000 ;$5000 adresine git 500C RTS ;Ana programa dön

Eğer programın başka bir yerinde on saniyelik bir beklemeye ihtiyaç duysaydık bütün yapmamız gereken

LDA # SOA

komutunu vermek olurdu. Bu programı BASIC ile yazsaydık:

2000 A — 5 2010 POKE 40, A 2020 GOSUB 5000

.

© 5000 POKE 40, PEEK(40)-41 5010 IF THEN 5060 5020 5030 Yz 5040 İF Y<>O THEN 5030 5050 GOTO 5000 5060 RETURN

GoTO

Makine dilinde GOTO komutunun karşılığı JMP komutudur. Kontrol bu komuttan sonra verdiğiniz adrese geçer. Bu komut JSR komutuna benzer, ama program akışı RTS ile eski yerine dönemez. Program akışını değiştirmek için genel olarak iki yol vardır. İlk yola şartlı dallanma adını verebiliriz. Bu yol için örnek olarak

CMP #0 BE© 5000

BEQ örnek verebiliriz. BEQ: Branch if Equal (eğer eşitse dallan) anlamına gelir. Eşitlik veya eşitsizlik bir evvelki CMP (CoMPare, karşılaştır) komutu ile araştırılır. BNE: Branch if Not Equal (eğer eşit değilse dallan) anlamına gelir. BCC: Branch if Carry is Clear (eğer carry (elde var) biti sönükse dallan) anlamına gelir. Bu komutların hepsi bir şart sağlanırsa dallanma yapar. Bir şarta bağlı olmadan dallanma, program akışını değiştirmenin ikinci yoludur. JMP veya JMP komutları hiç bir şarta bağlı olmadan program akışını değiştirirler, JMP veya GOTO komutunu kullanırken dikkatli olmanızı öneririm. Çünkü çok fazla JMP komutunu kullanmak, programı anlaşılmaz hale getirecektir. Buna karşın, çoğu zaman programdaki bir sorunu çözmenin en iyi yolu bu komutu kullanmak olacaktır. JMP komutu programınızı taşınamaz hale getirir. Programın taşınması ne demek diyebilirsiniz. Mesela ufak bir program yazdınız ve bununla başka programları inceliyorsunuz. Ancak inceleyeceğiniz programlardan birisi sizin programınızın bulunduğu adreslerde yer alıyor. Bu durumda yapmanız gereken tek şey programınızı hafızanın başka bir yerine kaydırmak olacaktır. Ancak programınızda JMP komutları varsa, program yeni yerine taşındıktan sonra da JMP komutları eski adresleri taşımaya devam edeceklerdir. Mesela;

2000 JMP $2005 2003 LDY 2005 LDA # $5

Eğer bu programı 5000 adresine taşırsanız her şey doğru çalışacak, fakat JMP komutu hâlâ aynı yere akışı yönlendirecektir. Sizin JMP komutunu JMP $5005 şeklinde değiştirmeniz gerekir. Bunun gibi, programınızdaki tüm JMP adreslerini tekrar hesaplayıp değiştirmek gerekir. Programı taşımak için monitörünüze şu komutu vermeniz yeterli olur:

T 2000 2006 5000

T $C000 $C0FF $5000 T'den sonraki ilk rakam taşınacak adresin başlangıcını, ikincisi bitimini, üçüncüsü de yeni yerin adresini belirtir. Eğer programınızı ilerde başka bir yere taşımanız gerekirse, yapacağınız en iyi şey LABEL (etiket) kullanmanıza izin verecek bir assembler ile çalışmak olacaktır. Böyle bir assembler ile çalışırken kontrolün geçeceği adresleri bilmek zorunda değilsiniz. Adres yerine label kullanırsınız. Assembler, sizin yerinize gerekli hesaplamaları yapar. Programın yerini değiştirmek istediğinizde bütün yapmanız gereken * = ile başlangıç adresini değiştirmek olur. Buna bir örnek verelim:

JMP ikinci bölüm LDY#3 ikinci bölüm LDA 5

AMIGA

Genellikle AMIGABASIC ile 640 * 200'den büyük pencere açamazsınız. Bu durumda ekranın alt kısmında 56 piksellik boş yer kalır. Başka bir deyişle ekranın sadece %78'ini kullanabilirsiniz. Eğer ekranın tamamını kullanarak 640 * 256'lık bir çözünürlük elde etmek isterseniz aşağıdaki ufak programı deneyin:

SCREEN 1,640, 256,2,2 27

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