OKUR MEKTUPLARI

6. Program Döküm Eki'ndeki birçok “Program Yardım” programlarını yazdım. Bazıları SYS komutu ve iki hatta üç programı birden çalıştırmam gerektiği oluyor. Aynı anda hafızada kaç SYS'li program bulunabilir? Yoksa programların birbirleri ile kesişip kesişmemesi mi söz konusu?

Okan Varol SAYIN Okan Varol, Ekrana çıkacak yazılarda hem küçük hem de büyük harflerin çıkmasını istiyorsanız, programınıza şu satırı ekleyin:

İstanbul

PRİNT CAR$(14)

Eğer programınızın başka bir noktasında eski duruma dönmek isterseniz, şu satırı programınıza ekleyin:

PRINT CHR$(142)

Hem reset switch, hem de SYS 64738 komutu bilgisayarı açılış durumuna döndürüyor. Ancak, söylediğiniz gibi hafızadaki makine dili program kaybolmuyor. Ancak bu durumun çalışmanıza hiçbir zararı olmayacaktır. Buna rağmen hafızayı temizlemek isterseniz, yazacağınız ufak bir makine dili programla size gerekli hafıza adreslerini 0 değeri ile doldurabilirsiniz. Veya bu işlemi BASIC yardımı ile de yapmanız mümkün: Mesela 4000 - 8000 numaralı adresleri silelim:

10 FOR 1-4000 TO 8000
20 POKE 1,0
30 NEXT |

ST değişkeni (veya tam adı ile STATUS) değişkeni özellikle teyple uğraşırken çok işinize yarar. STATUS kelimesinin dilimizdeki anlamı DURUM'dur. Bu değişkenin içeriği yükleme saklama işlemleri ile ilgili bilgiyi yansıtır. Mesela bu değişkenin içeriği sıfır olduğu sürece teypten bilgi alımına devam edilir. Aşağıdaki program teypten sequential bir dosyayı okuyor. Okuma işlemi ST değişkeni sıfır değeri dışında bir değer elde edene kadar devam ediyor.

10 DIM (100,3)
100 OPEN 1,1,0, “ISIMLER”
110 FOR I-1 TO 100
120 FOR
125 IF ST 0 THEN 200
1301NPUT 1,
140 1F “ THEN 200
160 NEXT J
170 NEXT 1
200 REM PROGRAM DEVAM EDİ-
YOR

Assembler listing ile verilen program MDE'den farklıdır. Çünkü MDE heksadesimal sayıları kabul eder. Böyle bir satıra örnek verelim:

0801 AA BA CC 12 DA 54 72 8D SA

olacaktır. Buna karşın Assembler listing ile verilen programa bir örnek verelim:

0801 DEX
0802 LDA
0804 INX
$BA

Bu tür bir programı assembler yardımı ile girmeniz gerekir. Dergimizin program döküm eklerinde son derece kullanışlı bir assembler programı yayınlanmıştı. Aynı anda birden fazla sayıda istediğiniz kadar çok sayıda makine dili programı hafızada bulundurabilirsiniz. Ancak bir şart var. Her program diğerlerinin bulunduğu adres bölgelerinden farklı bir hafıza bölgesinde yer almalı. İkinci olarak her programın kullandığı veriler hafızanın başka bir bölümünde yer almalı. Her programı hafızadaki başlangıç adresini SYS komutunda kullanarak çalıştırabilirsiniz. Bu tür kullanımda sizi sınırlayacak tek şey hafıza miktarı olacaktır.

OYUNLAR İÇİN KOLAYLIKLAR

Burada sözü oyunlar için çeşitli kolaylıklar gönderen arkadaşlarımıza bırakıyoruz. İstanbul'dan Emre Tuncer arkadaşımız bize aşağıdaki ipuçlarını göndermiş. Kendisine teşekkür ediyoruz.

Tuz..

Driller

Oyuna başladığınızda karşınızdaki yapıya girip içindeki piramitleri vurursanız bir süre için ölümsüz olursunuz.

SUNUZ.

Mask II 1, 2, 3 tuşlarıyla değişik araçlara geçebilirsiniz.

Game Over Oyuna başlamadan önce 'C' tuşuna basarsanız sonsuz hak kazanırsınız.

Star Wars Dark Star'ın içinde hep soldan gidin.

Dan Dare II Oyunu trainer olanlar iki defa RUN/STOP tuşuna basarak zamanın ilerlemesini durdurabilirler. Zamanın yeniden işlemesi için yeniden iki defa RUN/STOP tuşuna basın.

Predator El bombasını boşluk tuşu ile atarsınız, ayrıca SHIFT tuşu ile değişik açılara atabilirsiniz. Emre arkadaşımız STEALTH FIGHTER adlı oyunda hangi tuşların kullanılacağını soruyor. İstanbul'dan Oğuz Erginer arkadaşımız bize aşağıdaki ipucunu göndermiş. Kendisine teşekkür ediyoruz.

Combat School Oyunun ilk iki kısmını tamamladığınızda üçüncü bölüm olan IRON MAN RACE'e geliyorsunuz. Burada eğer Joystick'inizin otomatik ateş tuşunu açarsanız (tabii varsa!) engelleri bu kısmı rahatlıkla geçebilirsiniz. Eğer oyunu teypten yüklüyorsanız, teyp'in Combat School'u yüklediği yerde bilgisayarı kapatıp açtıktan sonra kaldığı yerden tekrar yüklerseniz oyunun yedinci safhası olan dövüş hocası ile dövüşebilirsiniz. Eğer bunu da geçebilirseniz, Amerikalıları elçiliklerine girmiş olan teröristlerden kurtarabilirsiniz. İzmir'den Korhan Barbaros arkadaşımız bize aşağıdaki ipuçlarını göndermiş. Kendisine teşekkür ediyoruz.

Out World oyununu yükleyin ve bilgisayarınızı resetleyin.

100 FOR TO 49200:READA:POKER,A
NEXT:SYS49152
110 DATA 32, 86.245,76,226,252,1,14,4,25,32
115 DATA 7,18,9,6,15
120 DATA 32,9,19,32,1,32,12,9,20,20,12,32,16
130 DATA 18,1,20

Living Daylights oyununu yükleyin ve bilgisayarınızı resetleyin.

POKE 4390,173
SYS 4352

Arcade Classics oyununu yükleyin ve bilgisayarınızı resetleyin.

20 FOR A—53242 TO 53263:READB:POKEA,B:NEXT
30 SYS 53242
40 DATA
50 DATA 169,173,141,70,16,169,165,141
60 DATA 245,76,108,61,3

Korhan arkadaşımızın PIRATES oyunu ile ilgili bazı soruları var.

Silver Train veya Treasure Fleet'in ne zaman nerede olacağını bilemiyorum. Ne yazık ki bunu ben de bilemiyorum. Ancak bu ikisinden birini yakalamak size bir servet kazandıracak olmasına rağmen, oyunda başarılı olmak ve çok fazla para kazanmak için önemli bir faktör değil. Bir oyunda hiç rehine kurtarmadan ve bu ikisine rastlamadan sadece şehir baskını ve gemi yağmalamadan yaklaşık 750.000 altınlık bir servet elde ettim. En büyük para kalabalık ve zengin şehirlerin yağmalanmasından kazanılıyor.

12) Oyuna en fazla 18 veya 20 adamla başlayabiliyorum ve doğal olarak sonuç hiç de hayırlı olmuyor.

Oyun ilk başladığında eğer famous expedition (ünlü seferler)'ları seçmezseniz oyuna 24 adamla başlarsınız. Adam sayısını artırmak için kasabanın barına gidin. Buradan tayfa bulabilirsiniz. Ancak ilk yıllarda 90 ile 100 arası tayfa yeterlidir. Eğer bu sayıyı arttıracak olursanız adamlarınız daha kısa sürede hallerinden memnun olmamaya başlayacaklardır. Az sayıda tayfaya sahip olmanın bazı dezavantajları da var: Yağmalamak için gittiğiniz şehirlerde adamlarınızdan daha fazla sayıda asker olduğunda moral durumu daha düşük olacaktır. Saldırıda başarılı olabilmek bu durumda tamamen kılıç kullanmadaki becerinize kalıyor. Karadan yaptığınız saldırıların tümünde kale teslim olmak yerine saldırıya geçiyor. Eğer az adamla mücadele etmek istemezseniz ünlü seferlerden birini seçin. Bu durumda oyun daha kolaylaşacak, çünkü oyuna başlarken birden fazla gemi ve çok sayıda (yaklaşık 1000 tane) adama sahip olacaksınız. Bu kadar fazla adama sahip olmanın avantajı saldırdığınız her şehrin hiç direnmeden teslim olacak olmasıdır. Ancak bu adamlarınız çok kısa bir süre sonra durumlarından memnun olmadıklarından sizi terk etmeye başlayacaklardır. İstanbul'dan Cengiz Önal arkadaşımız bize THE TRAIN adlı oyun hakkında ipuçları göndermiş. Kendisine teşekkür ediyoruz. 1) Bilindiği gibi başlangıçta, ilk olarak METZ istasyonunu ele geçirmek gerekiyor. Partizan olarak Alman askerlerini öldürüyoruz. Eğer vurulmak üzereyseniz boşluk tuşuna basın. Görüntü kaybolacaktır. Şimdi tekrar boşluk tuşuna basın, oyun devam edecektir. Bu yolla hiç ölmeden her istasyonu ele geçirebiliriz. Zorluk derecesini seçerken EASY yerine INTERMEDIATE seçin. Trene bindikten sonra freni açın ve gaz verin. 12) INTERMEDIATE düzeyini seçme sebebi: Eğer köprüde savaşmak istemiyorsanız bunu yapın. Eğer EASY derecesini seçseydiniz kuzey rayına sapacaktık ve tren hemen bir köprüye gelecekti. Buradaki gemilerden atılan her kurşun trene ağır yara verir. 14) Bir önemli sorun da, SWITCH, nasıl ray değiştirebiliriz? Makinist dairesinde SWITCH 9 km yazarken, hızı düşürün, tam SWITCH 0 km yazarken fren yapın, ancak yüksek hızda yapmayın. Fren yaptıktan sonra birkaç saniye bekleyin ve gaz verin. Haritaya bakarsanız başka bir raya saptığınızı görürsünüz.

5) Saat 8:30'a kadar treni Normandiya'ya götürün. Aksi takdirde oyun sona erecektir. Cengiz arkadaşımızın iki de sorusu var:

1) Ghostbusters oyunu nasıl bitirebilirim? Püf noktalarına bir çok arkadaşımız bu oyunla ilgili ipucu gönderdiler. Bunlardan yararlanarak oyuna çok iyi bir şekilde başlayabilirsiniz. Elde edeceğiniz yüksek miktardaki parayı en iyi alet ve arabaları almada kullanın. Oyunun kolaylaştığını göreceksiniz. 12) Football Manager II oyununda SAVE diskete yapılıyor. Ancak bu işlemi nasıl gerçekleştirebiliriz? Bu sorunun cevabı hem AMIGA'cı hem de C64'cü arkadaşlarımızı ilgilendiriyor. Her iki bilgisayarda da oyun kontrolü aynı, ancak AMIGA'da Joystick'in yerini Mouse alıyor. Oyunun başlangıcında karşınıza SAVE/LOAD seçeneği gelecek. Buradan Joystick veya mouse yardımı ile seçin. Hangi numara ile kaydın yapılmasını istediğiniz sorulacak. Unutmayın seçtiğiniz bu numarayı LOAD sırasında da kullanacaksınız. Ankara'dan Özgür Üstündağ arkadaşımız Kasım ayında bazı arkadaşlarımızın sorduğu sorulara cevap göndermiş. Kendisine teşekkür ediyoruz. MI Empire: Merdivenden çıkmak için yapılması gereken: merdiven yönünde Joystick'i çapraz yönde itin. 2) Knightmare: İlk zindanda ilk önce eti yerden GET FOOD ile alın. Daha sonra suyu (su zaten sizde var) ve eti yaşlı adama GIVE WATER, GIVE FOOD ile verin. Bundan sonra ASK OLD MAN deyin. Adamın verdiği küreği GET SPADE ile alın ve daha sonra DIG FLOOR deyin. İkinci zindanda kapı açıktır. OPEN DOOR diyebilirsiniz. 3) Bride of Frankenstein: Oyun ilk yüklendiğinde çıktıysa, bazen sonraki yüklemelerde çıkmayabilir. Bu da ya oyunun bozuk olduğunu ya da teybin kafa ayarının düzgün olmadığını gösterir.

Özgür arkadaşımızın bir de sorusu var: İtalik karakter setini nasıl hazırlayabiliriz? Bu tür yazının en güzel örneği Pirates oyunudur. Bilgisayardaki karakter setini istediğiniz gibi değiştirmek mümkün. Sadece italik karakter seti değil, istediğiniz her türlü karakter setini hazırlayabilirsiniz. Hatta Arapça veya Rusça karakter setleri bile yapabilirsiniz. Ekranda gördüğünüz karakterler 8 x 8 = 64 pikselden yani 64 noktadan oluşur. Bu noktaların yanık olanları ekranda görünürken sönük olanları görünmez. İstediğiniz bir karakteri bu noktaları kullanarak 8 x 8'lik (satranç tahtası gibi) bir yer hazırlayın. İstediğiniz karakterin şekline uygun olarak çizdiğiniz yerdeki kareleri işaretleyin. Hazırladığınız tablonun her satırı bir byte'ı temsil ediyor. İşaretlediğiniz bitlerin değeri 1, boş bıraktığınız karelere karşılık gelen bitlerin değeri sıfırdır. Buna bir örnek verelim:

00000000 - — O
00000000 - 8
01100110 - 98
01100110 - 98
01111110 — 127
01100110 - 98
01400110 98
00000000 - O

Eğer dikkatli bakarsanız yukarıdaki 0 ve 1'lerin H harfini oluşturduğunu görebilirsiniz. Her karakter sekiz byte'dan oluşur. Örneğimizdeki H harfini oluşturan sekiz byte'ın desimal değerleri: 0,0,98,98,127,98,98,0'dır. Bu değerler hazırladığınız karakteri oluşturmada kullanacağınız POKE değerleridir. Karakter seti ROM'da bulunmakta. ROM'u değiştiremeyeceğimize göre ROM'da bulunan karakter setini RAM'e taşıyıp bilgisayarın karakterleri buradan kullanmasını isteyeceğiz. Yeni verdiğimiz yerlere de yukarıdaki yöntemle bulduğumuz değerleri POKE edeceğiz. Bu işlemleri yapan çeşitli programlar dergimizin daha evvelki sayılarında çıkmıştı. Herhalde bu bilgi ve dergimizin geçmiş sayılarında yayınlanan programlardan yararlanarak istediğinizi gerçekleştirebilirsiniz. İstanbul'dan Oğuz Öztürk arkadaşımız bazı oyunlar hakkında aşağıdaki soruları soruyor:

1) RAID OVER MOSCOW: Moskova'ya girdikten sonra, büyük binayı yıkmak için ne yapmak gerekir? Bu iş için kullanabileceğiniz son derece güçlü bir tüfek var. Tüfekle hem binanın çeşitli yerlerinde duran askerleri vurabilir hem de doğru yere nişan almak şartı ile binayı yıkabilirsiniz. Doğru yerleri de deneme yanılma yolu ile bulabilirsiniz. Ancak tavsiyem, binayı yıkmadan evvel askerleri yok edip seyrek çıkar hale getirin.

2) He-man movie: Oyundaki notalar ne işe yarıyor? Oyunun sonuna gelmek için ne gibi bir yol izlemek ve ne yapmak gerekir?

3) GHOSTS'N GOBLINS: Karşımıza çıkan ilk gorili nasıl geçebiliriz?

4) POPEYE II: Karşımıza çıkan timsah en az dört hakkımızı alıyor. Bunu nasıl engelleyebiliriz? Elimize aldığımız palyaço resmi olan para ne işe yarıyor? Bir süre sonra elimizde yalnızca bu para kalıyor ve kalpleri de toplayamadığımız için bir süre sonra zaman bitiyor ve ölüyoruz. Bu nasıl önlenebilir?

Arkadaşımıza yardım edebilecek arkadaşların cevaplarını bekliyoruz.

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ığı

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..