Bu sayfadaki yazılar
Sayfanın metni
Sayfa 52
Ş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
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 53
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.