C64 için Püf Noktaları
Retro bilgisayarTPOENOKTASK C64 için Püf Noktaları
Oyunlar için verdiğimiz POKE'ların topladığı ilgi çok sevindirici. Bu sayımızda ise yenilerini sunuyoruz.
C-64 için yazılan BASIC programlarının çoğunda POKE komutlarının sık sık kullanıldığını görmüşsünüzdür. Bu komut sayesinde istenilen herhangi bir adresin içeriğini kolaylıkla değiştirmek mümkün olduğundan BASIC 2.0'da olmayan işlevlerini rahatlıkla POKE komutu yardımıyla gerçekleştirebiliriz. POKE komutunu genellikle grafik ve ses efektlerini kontrol etmede kullanırız. Bundan başka POKE komutunu kullanarak hafızaya makina dilinde yazılmış programlar yerleştirilir. Bu işlemden sonra SYS komutuyla program çalıştırılır. POKE komutu bir kerede sadece bir byte değeri hafızaya yerleştirdiğinden FOR / NEXT döngüsü içinde büyük bir programı hafızaya yerleştirirken fazla miktarda zaman kaybına neden olur. Bu sebeple POKE komutunda ufak bir değişiklik yaparak bir kerede birden fazla byte'ı hafızaya yazmasını sağlayacağız. Her zaman kullanmakta olduğumuz POKE komutunun yapısı şu şekildedir:
POKE adres, byte
Program Döküm Eki'ndeki ilk program çalıştığında POKE komutu yeni haliyle hizmete girmiş olacak. Yeni POKE komutunun yapısı: POKE adres, byte[,byte,byte]
POKE adres,
Yeni POKE komutu devreye girdikten sonra POKE komutunu eski haliyle kullanabilirsiniz. Yeni POKE komutunda ilk yazdığınız değer hafızaya yazılmaya başlanacak ilk adrestir. Yazılan byte'lar bu adresten başlanarak hafızaya sırayla yazılmaya başlanır.
40 FOR X— 4024 TO 1029 : READY Y : POKE X,Y : NEXT
20 DATA 72,69,76,76,79.33
Bu programı yeni POKE komutuyla aşağıdaki gibi yazabiliriz:
410 POKE 1024,72,69.76.76,79.33
FOR / NEXT ve READ komutlarını kullanmayarak programın çalışmasını son derece hızlandırmış olduk. Programı doğru olarak yazdıktan sonra RUN komutuyla çalıştırdığınızda yeni POKE komutu kullanıma hazırdır. Yeni komutu etkisiz hale getirmek için bilgisayarı açıp kapamanız yeterli olur. Eğer yeni POKE komutunu programlarınızda kullanırsanız bu programcığı programınıza eklemeyi unutmayın. Veya ilk olarak bu programı yükleyip çalıştırın.
OYUNLAR İÇİN KOLAYLIKLAR
Burada sözü oyunlar için çeşitli kolaylıklar gönderen arkadaşlarımıza bırakıyoruz. Maraş-Magosa-K.K.T.C.'den Salih Basri arkadaşımız bize aşağıdaki ipuçlarını göndermiş. Kendisine teşekkür ediyoruz.
Hall
Oyunu yükleyip bilgisayarı resetleyin.
POKE 20669,238
SYS 16939
Ball Crazy
Oyunu yükleyip bilgisayarı resetleyin.
SYS 32784 (sonsuz hak)
Krackout
Oyunu yükleyip bilgisayarı resetleyin.
POKE 35223,234
POKE 35224,234
POKE 35225,234
POKE 35202,234
POKE 35263.234
POKE 35264,234
SYS 32837 (sonsuz hak)
Frost Byte
Oyunu yükleyip bilgisayarı resetleyin.
POKE 4388, 465
SYS 2825 (sonsuz hak)
İstanbul'dan Onur Yattı aşağıdaki ipuçlarını göndermiş. Kendisine teşekkür ediyoruz.
International Karate - * tuşuna basarak güneş ışığının denizdeki yansımasını değiştirebilirsiniz. B, O, U, G tuşlarına aynı anda basarak gökyüzünün rengini değiştirebilirsiniz. E ve S tuşlarına aynı anda basarak hareket etmeyen karatecilerin pantolonlarını düşürebilirsiniz.
Balıkesir'den Haydar Oğuz aşağıdaki ipuçlarını göndermiş. Kendisine teşekkür ediyoruz.
Jinks Topunuz bir yere takılıp çıkmıyorsa boşluk tuşuna basarak bir zelzele meydana getirebilirsiniz.
Soldier | Oyunu yükleyip bilgisayarı resetleyin. POKE 2529,50 (50 hakkınız olur.)
Arkanoid 11. düzeyi ışınlamadan sonuna kadar biriktirebilirseniz sonsuz hak elde edebilirsiniz.
1942 RESTORE tuşuna basarak istediğiniz düzeye geçebilirsiniz.
İstanbul'dan Arman Kundakçıoğlu aşağıdaki ipuçlarını göndermiş. Kendisine teşekkür ediyoruz.
Bone Cruncher Oyuna başlamadan E1 tuşuna basın. Kod sorulduğunda 'Golemstench' yazıp RETURN tuşuna basın. Artık oyuna ikinci bölümden başlayabilirsiniz.
Platoon Dinamitle köprüyü havaya uçurduktan sonra köye gelin. 4 numaralı evde harita, 6 numaralı evde el lambası var. 5 numaralı evden tünele girebilirsiniz. Bulduğunuz oyun kolaylıklarını diğer Commodore'cu arkadaşlarla paylaşmak isterseniz bize göndermeyi unutmayın. Adresimiz: Commodore Dergisi Oyunlar İçin Kolaylıklar Köşesi Silahhane Cad. Ralli Apt. 59/3 80200 Teşvikiye-İstanbul
Şimdi bazı arkadaşlarımızın oyunlar hakkında sordukları sorulara cevap verelim: İstanbul'dan Okan Dandir oyunlar için verdiğimiz POKE komutlarını oyunu yüklemeden önce mi, sonra mı vermemiz gerektiğini soruyor. İlk olarak oyunu yükleyin. READY mesajı geldiğinde bilgisayarı resetleyin. Daha sonra verdiğimiz POKE komutlarını yazıp verilen SYS komutuyla programı tekrar çalıştırın. Ancak kasetten yüklenen oyunlar genelde otomatik olarak çalıştıklarından kaset kullanan arkadaşlarımızın reset switch aletine ihtiyaçları olacak. Bazı kolaylıklarda elinizdeki oyunun kaset veya disket versiyonu olmasına göre çalışmayabilir. Okan arkadaşımızın ikinci sorusu Multi-ice aletini kullanarak başka bir C-64 sahibiyle oyun alışverişi veya haberleşme yapıp yapamayacağı hakkında. Multi-ice ve benzeri kartuşlar yardımı ile oyunları kopyalayabilirsiniz. Bu kartuşlarda genelde bir monitör programı bulunur. Bazı kartuşlar yardımı ile oyundaki spriteları etkisiz hale getirip yenilmeden oyunu tamamlayabilir veya oyundaki spriteları değiştirebilirsiniz. Bir arkadaşınızla bilgisayar yardımı ile oyun alışverişi yapıp haberleşmeniz de mümkün. Ancak bu işlem için gereken araç MODEM'dir.
BASIC PROGRAMLAR
Bu ay BASIC 2.0'a biraz matematik öğreteceğiz. Bunun için VAL komutunu biraz geliştirelim. 242-2 olmayacağını herkes bilir ama aşağıdaki komutu bilgisayara verirseniz 242-2 olduğunu göreceksiniz.
PRİNT 4 2“)
VAL komutunun amacı parantez içinde yer alan yazıdaki rakamı bulmaktır. Ancak bu işlemi ilk gördüğü rakam dışındaki karaktere kadar devam ettirir. Örneğimizde 2'den sonra * işareti geliyor. Bu karakter 0 ile 9 arasında bir rakam olmadığından VAL komutu karakter dizisini incelemeyi bırakıp sonucu ekrana yazıyor. Eğer incelenen dizideki ilk karakter bir sayı değilse sonuç 0 olarak verilir. Program Döküm Eki'ndeki programı yazıp çalıştırdığınızda BASIC 2.0'daki VAL komutu yerini matematikten anlayan yeni VAL komutuna bırakacak. Yeni VAL komutumuz parantez içindeki karakter dizisini BASIC'in sayısal ifadeleri incelediği şekilde inceler. Mesela:
X-İNTÜY 4 23) işleminin sonucu, iştemiyle aynı olacaktır.
Yeni haliyle VAL BASIC'in yapabildiği tüm matematik işlemleri yapmayı başarabilir. Kendi kendinize BASIC matematik işlemleri zaten yapıyor, yeni VAL komutuna ne gerek var diye sorabilirsiniz. Ancak yeni VAL komutunun birçok matematik kaynaklı programda çok önemli bir görevi olacak. Mesela kullanıcı tarafından verilen fonksiyonu çizen bir grafik programımız var diyelim. Programın çalışması için kullanıcının her defasında belirli bir satırda yer alan formülü değiştirmesi gerekir. Yeni VAL komutunu kullanarak kullanıcıdan çizilmesini istediği formülü yazmasını istemek yeterli olacaktır. Bundan sonra bütün yapmanız gereken alfanümerik bir değişkenle aldığınız formülü yeni VAL komutuyla kullanmak olacaktır. İlk olarak programı yazıp diskete veya kasete SAVE edin. Bu işlemden sonra yeni VAL komutunu çalıştırmak için RUN komutunu vermek yeterli olacak. Ancak ilk olarak SAVE işlemini yapmayı unutmayın, çünkü program makina dilinde yazıldığından bilgisayar kilitlenebilir. Yeni VAL komutunu kullanmak istediğimiz tüm programlara bu programı eklemeyi unutmayın. Yeni VAL komutunu eskiden olduğu gibi kullanabilirsiniz. Ancak artık bu komut İNT, SIN, AND, OR, *, /, parantezler ve üstlü sayıları kullanabilir. VAL komutunda kullanılan dizide yer alan matematik ifadeler BASIC'in diğer matematik işlemlerde kullandığı öncelik sırasına göre hesaplanır. İsterseniz VAL komutu içindeki matematik ifadeye değişken ekleyebilirsiniz. Buna bir örnek verelim:
Bu programdan elde edeceğimiz sonuç: 1 2 4 8 16 32 64 128 olacaktır. Yeni VAL komutunu kullanırken içiçe VAL komutlarını kullanmayın. Mesela:
PRINT komutu çalışmayacaktır. Daha da kötüsü bilgisayarın kilitlenmesine neden olur. Bunun dışında yeni komutumuz oldukça sağlıklıdır. Hatta RUN/STOP RESTORE tuşlarıyla etkisiz hale gelmez. VAL komutunu kullanarak çalışacak mini bir hesap makinası programı aşağıdaki gibi olabilir:
40 PRİNT : EX$—-” “ ; İNPUT “BİR SAYISAL İFADE
YAZIN.":EX$
20 PRİNT EX$;“ — ";VAL(EX$)
30 GOTO 10
Programı kullanmak için hesaplanmasını istediğiniz sayısal ifadeyi yazın (mesela, 24*2) ve RETURN tuşuna basın. Sonucun ekrana yazıldığını göreceksiniz. Yeni VAL komutunu kullanarak yapmış olduğumuz üç satırlık hesap makinası programını normal BASIC ile yapmak hemen hemen imkânsızdır. Bütün BASIC komutlarında olduğu gibi sayısal ifadeler bazı belirli yapısal kurallara uymak zorundadırlar. VAL komutu bir hata ile karşılaştığında iki şey olur. İlk olarak VAL komutu sonuç olarak sıfır verir, daha sonra 784 numaralı adrese hatanın numarasını yazar. Bu adresin değerini,
PRİN7 PEEK(781)
komutuyla öğrenebilirsiniz. 784 adresinin olabilecek değerleri ve bunların anlamları:
0 : Yok 41 : Yazım hatası 14 : Geçersiz değer hatası 45 : Çok büyük sayı 22 : Farklı tipte hata 23 : Dizi çok büyük 25 : Sayısal ifade çok karmaşık 27 : Belirsiz fonksiyon.
Eğer isterseniz hataları göz önünde bulundurmayabilirsiniz. 23 hatanın özel bir durumu var. BASIC, karakter dizilerinin maksimum 255 karakter olmasına izin verir. Ancak yeni VAL sadece 80 karaktere izin verir. Eğer 88 karakterden fazla bir dizi kullanırsanız 23 numaralı hata ile karşılaşırsınız. Eğer hata mesajlarını programı durdurmadan görmek isterseniz yukarıdaki programa aşağıdaki satırları ekleyin:
22 : İF E-0O THEN 10
24 EA —PEEK(4 1766 4 E) 4 PEEK(41767 4-E)*256 : PRİNT
26 EEK(EA) : PRİNT CHRS(C AND 127): : IF C(4128
THEN 4 : 26
28 PRİNT “HATA
Yeni VAL komutu bütün BASIC programları ile uyumludur. Yani eskiden yazmış olduğunuz bir BASIC programı hiçbir değişiklik yapmadan yeni VAL komutunu kullanabilirsiniz. Yeni VAL komutunu oluşturan makine dili 49152 - 49358 ($C000-$C0CE) adreslerinde yer alıyor. Eğer isterseniz programın 1010 numaralı satırındaki SA değişkenini değiştirerek makine dilini başka adreslere taşıyabilirsiniz. Böylece bu adreslere sahip başka bir makine dili programla birlikte yeni VAL komutu çalışır. Ancak BASIC'in CHRGET kullanan veya 1045-4023 arasındaki adresleri kullanan programlarla birlikte programımız çalışmayabilir. Biraz da programın nasıl çalıştığından bahsedelim. Sayısal ifadeleri kullanmak için program BASIC'in ROM'da bulunan FRMEVL adlı rutinini kullanır. Bu rutinin görevi sayısal ifadeleri çözmektir. ROM'da yer alan rutin 44446 ($AD9E) adresinde başlar. Sayısal ifadelerin ilk olarak ayrılması gerekir. Bunun için ROM'da bulunan başka bir rutin kullanılıyor. Yeni VAL komutu kullanıldığında verilen sayısal ifadenin bulunduğu dizi, 512 numaralı adrese veri giriş bölgesine aktarılır. Bundan sonra 42361 numaralı adreste yer alan CRUNCHK rutini kullanılarak veri giriş bölgesindeki sayısal ifade birimlere ayrılır. Bu işlem tamamlandıktan sonra FRMEVL rutini çağrılarak sayısal ifade çözümlenir ve sonuç VAL'e iletilir. VAL herhangi bir hata ile karşılaştığında program akışını durdurmamak için 768-769 ($0300-$0301)'deki hata vektörünü değiştirip kendisi ile ilgili hata kodunu 784 adresine verip tekrar hata vektörünü eski yerine çeviriyor. Şimdilik hoşça kalın.