SIMONS' BASIC [3]

İşte gene beraberiz. Bu sefer de matematikçilere ve programcılara, daha doğrusu rahatına düşkün programcılara sesleneceğiz. Konumuz, SIMONS' BASIC'deki yeni matematik komutları ile program yazımı sırasında kolaylık sağlayan yardımcı (utility) komutlar...

Bir bilgisayarın en önemli özelliği, sayılarla uğraşıp gereken hesaplamaları insandan daha hızlı yapıp sonuçları ortaya çıkarmasıdır. Bu da matematik komutları ile yapılır. Zaten normal COMMODORE 64 BASIC'inde bol miktarda bulunan bu tür komutlar, SIMONS' BASIC ile takviye edilmiştir. Artık ikilik ve onaltılık sistemde de hesaplamalar yapabileceksiniz. “Şimdi bunlar da ne?” diyenleriniz için biraz açıklayalım. Normalde kullandığımız sayı sistemi, 0-9 arası rakamları kullanan onluk sistemdir. Ancak bilgisayarlar için bir şey ya var ya da yok olduğuna göre (elektrik ya akar ya da akmaz), sadece iki rakam bize yeterli olacaktır: 0 ve 1. Sadece iki rakamın kullanıldığı sayı sistemine de ikilik sayı sistemi adı verilir. Bilgisayarlarda sadece 0 veya 1 değerini alabilen hafıza birimlerine bit denir ve 8 bit yanyana gelince bir byte oluştururlar. Nasıl üç basamakla ondalık sistemi kullanarak 0-999 arası sayılar yerleştirebiliriz. Bilgisayar programları, özellikle makine dili programlamasında, bu 8 bit'i dörder dörder ayırırlar. Dört bit ile de 0000-1111 (0-15) arası sayılar gösterilebilir. Tabii ki bu sayıların her birini tek rakamla gösterebilmek birçok kolaylık sağlayacaktır. Öncelikle her byte'ın değeri iki basamaklı bir sayı ile gösterilebilecektir ve bu rakamların her biri de o byte'ın sağ ve sol yarısındaki dörder bit'in oluşturduğu değere karşılık gelecektir. Ancak 0-15 arasını gösterirken, elimizde yeterli rakam olmadığı açık. Bu nedenle 10-15 arası sayılar A-

F harfleri ile gösterilir. Bu sisteme de onaltılık sistem denir. Böylece bir byte'ın içeriği 00-FF (0-255) arasında değişir. İşte bu sayıları da artık BASIC programlarınızın içinde kullanabilirsiniz. Bu sırada ikilik sayıların başına % işaretini, onaltılık sayıların başına da $ işaretini getirmeniz gerekli. Ayrıca, ikilik sayılar mutlaka 8 basamaklı, onaltılık sayılar da 4 basamaklı olmalı. Örneğin:

9001110001
$ABCD
$12EB0
$000F
9000110011

Bu arada ufak bir istisna var. Eğer $9DEF gibi içinde DEF sözcüğü geçen bir sayı kullanıyorsanız, D ile E'nin ya da E ile F'nin arasına boşluk koymalısınız. Yoksa bilgisayar bu karakterleri BASIC komutu DEF olarak kabul edecek ve hata verecektir. Bir diğer komut ikilisi de bölme işlemi için kullanılıyor. A=DIV(sayı1,sayı2) ile sayı1'in sayı2'ye bölümünün tam sayı kısmını elde edersiniz. Eğer A=MOD(sayı1,sayı2) yaparsanız, bu sefer de aynı işlemin kalanının ne olduğunu öğrenirsiniz. A=FRAC(işlem) sonucunda, belirtilen işlemin virgülden sonra kalan kısmının ne olduğunu anlarsınız. Hatırlarsanız, normaldeki INT komutu da bir işlemin virgülden öncesini veriyordu. Ve son matematiksel komutumuz EXOR. Normalde varolan AND, OR ve NOT gibi EXOR da bit düzeyinde mantıksal işlem yapar. EXOR'un mantık tabelası şu şekildedir:

A B EXOR(A,B)

Az da, iki sayının ikilik sistemdeki gösterimindeki bitleri sırasıyla yukarıdaki tabelaya göre işleme sokulur ve sonuç A'ya veya belirtilen başka bir değişkene depolanır.

Yardımcı Komutlar

SIMONS' BASIC, programın yazma aşamasını daha kolay hale getirebilmek için bazı yeni emirler katmış BASIC'e. Örneğin COLD komutu ile, SIMONS' BASIC'i ilk açılış durumuna getirebilirsiniz. Bilgisayar her şeyi normale döndürecektir ve SIMONS' BASIC ile doldurulduğunda durum neyse o olacaktır. Peki bu sırada veya yanlışlıkla NEW ile silinen programa ne olacak?.. Hiç korkmayın. OLD komutu ne güne duruyor? Programcının baş belası satır numaralarına gelince. Bir kere AUTO komutu var. Örneğin AUTO 100,10 dediğinizde bilgisayar otomatik olarak size 100'den başlayıp satır numaralarını yazacaktır. Eğer RETURN tuşuna dokunduğunuzda bulunduğunuz satırda yeni bir şey yazmamışsanız, AUTO çalışmayı durduracaktır. Satır numaraları da RENUMBER komutu ile değiştirilebilmekte. Örneğin RENUMBER 10,2 dediğinizde, programınızın ilk satırı 10 numaralı olacak ve geriye kalanlar ikişer ikişer artacak. Ancak ufak bir sorun var. Bu komut, GOTO, GOSUB, THEN gibi komutlardan sonra gelen satır numaralarını yeni numaralara göre değiştirmiyor. Yani çalışan program, RENUMBER sonrası birazcık çalışmaz hale geliyor. Tabii buna karşı bir önlem var. Örneğin GOTO 100 yerine şunu kullanabiliriz:

10 CALL SATIR 100
10 PROC SATIR 100

Burada daha önce öğrendiğimiz PROC komutunu altprogram yazmak için değil de, bir satıra isim vermek için kullanıyoruz. Ancak dikkat edin de, bu satırdan sonra ENDPROC olmasın, yoksa biliyorsunuz hata çıkacaktır. GOSUB..RETURN çiftinin yerine de PROC...ENDPROC kullanabilirsiniz. Sonuçta RENUMBER'dan sonra satır numaraları değişecek, ancak PROC isimleri aynı kalacak ve program işlerliğini sürdürecek. Yepyeni bir olanak. Satırlarınızın bazılarını görünmez kılabilirsiniz. Örneğin şunları yazın:

100 INPUT“PAROLA”;A$
200 DISAPA IF A$< )“NA'BER”
THEN END:
300 PRINT “BILDINIZ, BRAVO !!”

Şimdi de SECURE 10 komutunu verip LIST yapın. 200 numaralı satırın görünmediğini göreceksiniz. Bunun gibi istediğiniz satırların başına DISAPA koyarak, sonra da SECURE 10 yaparak o satırları görünmez yapabilirsiniz. İşin en güzel tarafı, bu şekildeki programları SAVE edip tekrar doldurduğunuzda da bu önlem aktifliğini korur. Hatta normal BASIC programlarını bile SIMONS' BASIC'de korumaya alıp SAVE ettiğinizde, SIMONS' BASIC'i kullanmasanız bile LIST ettiğinizde saklanan satırları göremezsiniz. Bir başka olanağınız da, devamlı olarak kullandığınız bazı komutları, 15 karakteri geçmemek şartı ile, fonksiyon tuşlarına yerleştirebilmeniz. Örneğin aşağıdaki gibi:

KEY 1,“LIST”

Artık F1 tuşuna her basışınızda ekrana kendiliğinden LIST yazılacaktır. Hatta şöyle de yapabilirsiniz:

KEY 1,CHRS(147) 4 4 CHRS(13)

Şimdi ise F1'e bastığınızda, önce ekran silinecek, LIST yazılacak ve otomatik olarak RETURN tuşu işleme girip programın listesini verecektir. Hatta gerekirse, CHR$(34)'ü kullanarak konuşma tırnak işaretini bile ekleyebilirsiniz dizinizin içine. Fonksiyon tuşlarına toplam 16 değişik dizi yerleştirebilirsiniz. Bunlara ulaşmak için fonksiyon tuşuna, SHIFT ve fonksiyon tuşuna, C= ile fonksiyon tuşuna veya C= ve SHIFT ile birlikte fonksiyon tuşuna basmanız gerekir. Böylece F1-F8 arası tuşları iki türlü yüklemiş olursunuz; COMMODORE tuşu ile ve o olmadan. O anda tuşların her birinde ne olduğunu öğrenmek içinse DISPLAY komutu kullanılıyor. Her tuşta o anda olan dizi ekranda listelenecektir. DUMP komutu ise bilgisayarın o anda kullandığı değişkenlerin içeriğini listeleyecektir. Böylece, çalışan bir programı herhangi bir anda STOP ile durdurup DUMP ile o anki değişken değerlerini öğrenmeniz ve CONT ile programlamaya devam etmeniz mümkün olmakta. Hazır söz listelemekten açılmışken, LIST komutu ile de ilgili bir sürü yenilik var. Eskiden sadece CTRL tuşu listenin geçişini yavaşlatabiliyordu. Artık C= tuşunun da bir görevi var. Bu tuşa bastığınız sürece listenin geçişi duracaktır. SHIFT tuşuna basarsanız veya SHIFT/LOCK tuşunu basılı bırakırsanız, liste ekrana harf harf basılacaktır. Böylece listeyi kolayca okuma fırsatı doğmakta. Bu harf harf yazılmanın hızını da ayarlayabilirsiniz. DELAY hız komutu ile size özel bir hız sağlayabilirsiniz. “hız” 1-255 arasında olmalı ve 1 en hızlısı. Listelerken kullanacağınız bir de komut da PAGE komutu. Bildiğiniz gibi COMMODORE 64'ün bir ekranı 25 satırdan oluşuyor. İşte siz listenizin hangi satıra geldiğinde durmasını istiyorsanız, o satırın numarasını PAGE satır şeklinde belirtip LIST komutunu veriyorsunuz. Örneğin PAGE 20 demişseniz, liste her 20. satıra geldiğinde durup sizin RETURN tuşuna

PROGRAM ADI : S.DUMP
00010 A$z"TUNA":B$z"UYHH"
0539987.887:PI-9E-5
DUMP
PROGRAM ADI :
KEY
00815 KEY
KEY
00025 KEY
002030 KEY
00035 KEY
00040 KEY
00045 KEY
3BA4)4*CHREC13)
PROGRAM ADI : S.TRACE
©0010 TRACE 10:GOSUB
PRİNT "<CLR>"
00030 FOR Izi TO 100
20040 PRİNT 1;
NEXT
289068 PRİNT
©8070 INPUT
00080 IF
YI":GOTO 188
PRİNT
S.KEY
GET A$
00140
IF
"TEK SAYI"
"TEKRAR İSTİYOR MUSUNUZ? <EZH
#CHRSC13)
20:60T0 Bü
"SAYI
THEN PRİNT "CİFT SA
IF AND THEN 118
THEN
TRACE O:GOSUB 28

basanızı bekler. Bu arada STOP tuşu ile listeyi durdurabilirsiniz (Bu bazı SIMONS' BASIC'lerde olmaz). “satır” parametresine 1-25 arası bir değer verebilirsiniz, daha büyük değerler komutun etkisini ortadan kaldıracaktır. Eğer LIST demeden önce 10 verirseniz, programınızdaki SIMONS' BASIC komutları negatif yazılacaktır. Böylece bu komutları kolaylıkla ayırdedebilirsiniz. O ile bu sona erer. Bir başka güzel komut da, FIND komutu. Bununla programınızın içinde geçen belli bir komutu hemen bulabilirsiniz. Örneğin FIND GOTO 100 dediğinizde, programınızın içindeki tüm GOTO 100'lerin olduğu satırların numaraları ekrana yazılacaktır. Burada FIND ile GOTO arasında boşluk olmadığına dikkat edin. Eğer boşluk koyarsanız, bilgisayar, başında boşluk olan GOTO 100'leri arar. Ayrıca bu komutla, tırnak işaretleri arasında kalan karakter dizilerini bulamazsınız. Profesyonel bir programcı disk sürücüsü kullanır. Ve sık sık disk sürücüsünün directory'sine yani içindeki programların listesine bakmak ister. Normalde ile yapılan bu işlem, o anda bilgisayarda duran bir programı da siler götürür. Ancak SIMONS' BASIC'de bu işi DIR “$” komutu görür ve programa da bir şey olmaz. Ayrıca SEQ ile sadece sequential dosyaların adları (aynı şekilde PRG, REL veya REL'de kullanabilirsiniz) veya DIR “$ SIM*” ile de ilk üç harfi SIM olan tüm dosyaların listesi çağrılabilir. Ayrıca daha önceden yazıp kasete veya diskete kaydettiğiniz bir programı, o anda bilgisayardaki programın sonuna ekleyebilirsiniz. Bu tıpkı LOAD yapar gibi oluyor, ancak LOAD yerine MERGE yazıyorsunuz. MERGE “program” gibi.

SAĞ Sel 5

Son yardımcı komut olarak da, TRACE'i anlatalım. Programınız çalışırken, o anda işleyen satır numarası ekranın bir köşesinde görünse nasıl olur? İyi olur, di mi? Böylece program sonsuz bir döngüye girdiğinde veya istenmeyen satırlara gittiğinde, hatanın nereden kaynaklandığı hemen belli olur. Eğer programın içinde bir

PROGRAM ADI : S.MATEMATIK
FRİNT
00030 PRİNT OLİN > EFEFE
00040 PRİNT "$#DEFA-"$D EFA
90045 PRİNT
ER "INTC(34.27) 5!
7)
FRİNT
PRİNT a
16.93)
©0075 FFİINT
PRİL
FPir 4810101
i
PRİNT
»84
00110 PRİNT
TUSA BASINIZ
08138 GET A$:IF A$z"" THEN 130
00146 INPUT SAYI Sİ
>65535 OR THEN 148
20150 INPUT "İKİNCİ SAYI Sa>65535
OR Se<ö THEN 150
002168 "Sİ":
©0170 CENTRE "VEYA":PRINT :PRİNT
00180 PRİNT 51":"S2"z"IİNT(5S1/52)"VE KALAN
60190
RINT
IF A$<L>"H"
IF A#<> H RI="E" THEN 140
THEN 148
THEN 208

yerde TRACE 10 komutu varsa, bundan sonra işlenecek program satırlarının numarası ekranın sağ üst köşesinde yazılacaktır. Eğer yazılmıyorsa, ekran rengini değiştirin. Bu işlemi TRACE 0 ile durdurabilirsiniz. Bu aylık da bu kadar... Kalın sağlıcakla... •

Bu yazıdaki programlar

Dergideki dökümlerden çıkarıldı; satırlar derginin kontrol toplamlarıyla doğrulandı ve programlar VICE emülatöründe denendi. Tarayıcıdaki C64'te çalıştırabilir, indirip bir emülatöre sürükleyip bırakabilir ya da gerçek bir C64'te LOAD "AD",8,1 ile yükleyebilirsiniz. "Sorun bulundu" yazanlarda bazı satırlar okunamadı ya da tutmadı; düzeltilmiş bir sürümünüz varsa contact@coze.org adresine gönderin.