Bu sayfadaki yazılar
Sayfanın metni
Sayfa 51
2000LDA 2002 STA SAYAC ; bu değişken yavaş değişken olarak kullanacağız.
2005 LDX SO X yazmacı hızlı dönen değişken 2007 DEX 2008 DEX 2009 BNE 2007
200B DEC SAYAC 200E£ BNE $2007
Sıfırdan yukarı saymak için CMP komutunu kullanırız, mesela,
FOR |— 1 TO 50 STEP 3
komutunun karşılığı:
2000 LDX SO 2002 INX 2003 INX 2004 INX 2005 50
2007 BCS $2002 STEP'te kullanılan sayı büyürse ne yaparız? FOR TO 50 STEP 10 komutunun karşılığı:
2000LDX SO SO 2004 INY
2005 SOA 2007 BNE $2004 2009 CPX 832 200B BCS $2002
AMIGA
BASIC ile yazdığınız programın uzunluğu bir kaç ekranı geçtikten sonra bazı zorluklar başlar. Özellikle bu zorluklar karşımıza programı hatalardan arındırmak için yapılan çalışmalar sırasında çıkıyor. Bu sırada devamlı olarak programda çeşitli yerlere gitmeniz gerekebilir. Mesela 100. satıra ulaşmanız gerekiyorsa yaklaşık 5 defa SHIFT CRSR tuşuna basmak gerekecek. Ancak aradığınız yerin hangi satırda olduğunu bilmiyorsanız ne yapabilirsiniz? Eğer programınız modüller olarak hazırlanmışsa her alt rutinin başına bir etiket koyabilirsiniz. Mesela
PUAN: FOR 1-1 TO 10 PRİNT “Punlar—”; A(I) NEXT |
Programın bu kısmına ulaşmak için program kontrol penceresine geçin ve
LIST PUAN komutunu verin. Bu yöntemle sizin için önemli noktalara kolaylıkla ulaşabilirsiniz. Özellikle CLI ile çalışırken kullanmak için kendinize nasıl boş bir Workbench disketi hazırlayabilirsiniz? Orijinal Workbench disketinde hemen hemen hiç yer yoktur. Kopyalama işlemi ile hazırladığınız Workbench disketinde fonts/directory'sindeki topaz hariç diğer fontları silin. Bu size 185 blok veya 9 10'luk bir boşluk sağlayacaktır. Bundan başka C directory'sindeki komutların bir çoğunu da silebilirsiniz. CLI ile çalışırken bir işlemi yapmak için bazen birkaç komut kullanmanız gerekir. Eğer bu işlemi çok sık tekrarlıyorsanız aynı komutları devamlı yazmak oldukça yorucu olacaktır. Bunun yerine bu komutları bir dosyaya sıra ile yazabilirsiniz. Ve daha sonra EXECUTE komutu yardımı ile komutları çalıştırabilirsiniz. Ancak komutlardan birisi her defasında değişen parametreler istiyorsa ne yapacağız? Bunun çözümü KEY komutudur. Bir örnek verelim: Yazıcı isimli bir dosyaya aşağıdaki komutları yazıp dosyayı saklayın.
KEY Dosya RUN TYPE (dosya) TO PAR: Bu komut grubunu EXECUTE YAZICI isimler
ile çalıştırın. Bu komutun sonucunda İSİMLER adlı dosyadaki yazılar printer'a aktarılacaktır. Ancak .KEY komutu işe yaramayacaktır. .KEY komutu ile birden fazla parametre de gönderebilirsiniz. Mesela, KEY dosya1, dosya2, dosya3, dosya4 BASIC ile çalışırken hiç OUT OF HEAP SPACE hata mesajını aldınız mı? HEAP, BASIC veya başka bir program tarafından kullanım için ayrılmamış serbest hafıza miktarıdır. Bazı fonksiyonlar, özellikle ses fonksiyonları sistemdeki bu boş hafıza bölgesinden yararlanır. Eğer bu hata ile karşılaşırsanız, bilgisayarınızda çalışmakta olan başka program varsa bunları durdurun. Eğer bu mümkün değilse CLEAR komutunu kullanarak stack veya veri bölümlerini azaltın. Bu azaltmayı yaparken FRE komutu son derece işinize yarayacaktır. FRE komutu ile kullanacağınız sayı alacağınız bilgiyi belirler. Mesela,
PRINT FRE(-1) Heap alanındaki boş hafıza miktarını verir. PRINT FRE(-2) Stack tarafından şimdiye kadar hiç kullanılmamış hafıza miktarını verir.
-1 veya -2 dışında kullanacağınız her rakam BASIC programınız için ne kadar yer kaldığını gösterir.
Şimdilik hoşçakalın..
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 50
Bulduğunuz oyun kolaylıklarını diğer Commodore'cu arkadaşlarla paylaşmak isterseniz bize göndermeyi unutmayın. AMIGA'cı arkadaşlar da oyunlar hakkındaki sorunlarını, bilgilerini veya AMIGA ile ilgili diğer sorunlarını bana gönderebilirler.
MAKİNE DİLİ
FOR-NEXT: Bu komutu bazen programda bekleme meydana getirmek için kullanırız. Mesela,
FOR 1-1 TO 1000 : NEXT |
Bu komut hiç bir şey yapılmadan beklenmesini sağlar. Ve i değişkenin değeri 1000 olduğunda kontrol bir alttaki komuta geçer. Yazdığımız makine dili programlarda boş döngüleri özellikle programı yavaşlatmak için kullanacağız. Mesela ekranda zıplayan bir top yapsak, bu top boş döngü olmadan belki de görünemeyecek kadar hızlı hareket edecektir. Ama gerekli yere döngü koyarak programın yavaşlamasını sağlarsak, hareket eden topun görünmesini sağlayabiliriz. Ne yazık ki makine dilinde BASIC'te olduğu gibi döngünün ne zaman biteceğini belirten bir komut yok. Bu yüzden kendi sayaç değişkenimizi oluşturmalı ve bu değişkenin istenen değere gelip gelmediğini kontrol etmeliyiz. Eğer istediğiniz döngü 255 çevrimden az olacaksa X yazmacını sayaç olarak kullanabilirsiniz. Çünkü Y yazmacı çok kullanışlı olan dolaylı indeksleme adres modu için ayrılmıştır. Mesela X yazmacını kullanarak 200'den 0'a doğru sayacak bir program yazalım:
200 ; (veya SC8) 2002 DEX 2003 BNE $2002
255 çevrimden fazla döngüler için iki sayaç kullanmak gerekir. Bu sayaçlardan birisi 255'ten 0'a doğru giderken diğer sayacın değerinin artırılmasını sağlar. (Hatırlatalım, makine dilinde 255'ten sonra tekrar 0 gelir.) 512 sayacak bir program yazalım:
2000LDA $2 2002 STA $6000 6000 numaralı adrese 2 değerini koyun Bu sayaç diğer sayacın her 255 saymasında bir azalacak
2005 LDX #$00 X yazmacını sıfıra eşitle, Böylece ilk DEX komutu X yazmacının değerini 255 yapsın. 2007 DEX
2008 BNE $2007
200A DEC $6000 ; 6000 numaralı adresin değerini bir azalt,
200D BNE $2007
Bu örnekte X yazmacını hızlı dönen sayaç olarak kullandık, $6000 numaralı adresi ile yavaş değişen sayaç olarak kullandık. Bu adresi kullanmamızın sebebi, RAM'de değeri değişmeyecek emin bir yer olmasıdır. Buralarda bulunan istediğiniz başka bir adresi de kullanabilirsiniz. Bunlardan başka sıfırıncı sayfada yer alan, $FA ve $FB adreslerini de sayaç olarak kullanmanız mümkündü. Bu durumda
LDA ($FA),Y şeklinde bir kullanım yapılabilirdi
FOR-NEXT-STEP
Bu komut yardımı ile döngüde kullanılan değişkenin değerini birden daha büyük aralıklarla değiştirebilirsiniz. Mesela,
FOR 1-100 TO 1 STEP -2 komutunun makine dilinde karşılığı şöyle olabilir: 2000 LDX 100 2002 DEX 2004 DEX 1004 BNE $2002
Daha büyük sayılar için iki değişken kullanabiliriz. Mesela,
FOR 1-512 TO O STEP -2
komutunun karşılığı