Commodore sayı 30, sayfa 53

Bu sayfadaki yazılar

Sayfanın metni

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.

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