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'dan sonra 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 DIR “$0:*” ile sadece sequential dosyaların adları (aynı şekilde PRG, REL veya SEQ'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.

Zf ha

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"
CENTRE CEZH)
GET A$:IF
THEN 148
THEN 208

Eğer 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.

Cinderella II Ee

Geçen ayki yazımı okudunuz mu?.. Ben okudum. Ve oturup ne diyor bu adam yahu dedim kendi kendime. Ama iş işten geçmiş, yazı dergiye yollanmıştı. İstanbul'a uğradığımda da artık geri dönüşü olmayan bir yolda idi.

imdi diyorum ki sizler beni anlaşılmMazlıkla suçlamadan önce, şu işi baştan bir ele alalım. Bazıları! “Hımmm, bu yazı da Baytan Bi mez'in pehlivan tefrikalarının havasını almaya başladı” diyeceksiniz. Ama bu dergiyi okuyan herkesin bu işi iyi bilmediğini, aramıza her gün yenilerin katıldığını da düşünmemiz gerek (hele yeni 64'ler çıkınca...) Özetleyerek anlatmaya başlarsak. SID (derella), belki de cinderella, ses üreten bir entegre (yonga, chip, kirmik); hangisi hoşunuza giderse (çok ani oldu galiba). Peki ses ne?.. Ses bir cismin titreşmesi (salınması) sonucu oluşan ve kulağımızın algıladığı bir olgu. Sesin insanlar için duyulabilir olabilmesi için saniyede en az 20, en çok 20000 kez salınması gerekir (bu rakamlar çok genel ortalamadır, kişiden kişiye farklılıklar gösterir). Aslında evrendeki birçok olgu salınımlarla oluşur. Bu salınımlardan kulağımızın algılayabildiği kesimine ses diyoruz. Bir cetveli masanın kenaucu dışarı gelecek şekilde koyup ucunu bastırıp çekerek bir salınım elde edebiliriz. Bu bir ses üretecektir. Teknikte salınımlara osilasyon (oscillation), bu salınımların bir saniye içindeki tekrar sayısına da frekans (birimi Hert kısaca Hz. “hazret değil'), salınım yapan cihazlara da osilator diyoruz.

(yükseklik, volume). Hemen hiçbirimiz bir pirenin ayak seslerini duyamayız. Ama alt kattaki komşularımız gece yarısı saat ikibuçukta Commodore'u açmış, televizyonu köklemiş heyecanlı heyecanlı Green Beret oynuyorlarsa, mutlaka duyarız. O sırada bir program yazıyor ve en civcivli yerinde mantık oluşturmaya çalışıyorsanız hele (!)... İşte pirenin ayak seslerinin duyulmazlığı, buna karşın diğerinin duyulabilirliği bu hacim faktöründen öte geliyor. Teknikte buna amplitude diyoruz. Eğer sadece bu iki etken evrende, sesi tam olarak tanımlamaya yetseydi, bütün hikâye burada biter. Ben de bu saatte uyuyor olurdum. Ama ne yazık ki ilgilendiğim diğer bir dal olan fizik bilimi buna izin vermiyor ve üçüncü bir faktör daha getiriyor. Sesin yayılım şekli: Bunu anlatmak çok kolay. Sesin yayılmasını yürümeye benzetirsek, gözünüzün önüne zil zurna sarhoş bir adamla zıplaya zıplaya koşan bir çocuk getirin, ikisi de sonuçta bir yere varıyor; ama gidiş şekilleri ve vardıkları yerde karşılanış şekilleri çok farklı. SID içerisinde dört çeşit yayılım şekli üretebiliyor, bunlar üçgen, kare, testere dişi, darbe, gürültü tipi dalgalar (bak. Commodore sayı 2). Bu üç faktör birleşerek başınıza öy-

L1-54272:L2-54279:L3-54286

120

130 Vi-L144:V2-L244:
140 POKE 54296.15
150
POKE V141.9:POKE V242.0
160 POKE V2 36:POKE V242,36
170 POKE V342,170
180 T-TI
200 POKE Vigl6:POKE V2.32:POKE V3.16
210
220 READ.
READ 'ÖERRE 5-0 GOTO 290

Sesin duyulabilir olması için gereken ikinci bir faktör ise hacimdir

230
240
1F POKE Hi.Xl1:POKE Li1.Yi:POKE V1,17
IF X2 TERN POKE H2.X2:POKE L2.Y2:POKE V2.33

le işler açabiliyor ki şaşırırsınız. Bir enstrüman kendi karakteristik sesini oluştururken, bu üç faktörün her birinin değişik değerlerini kullanır. Bu değerleri computere vererek aynı enstrümanı taklit edebiliriz. Bu tür değişimleri SID içerisinde ATTACK, DE-CAY, SUSTAIN, RELEASE kaydedicileri (register) gerçekleştiriyor. Bu ay yeterince kafa ütüledim sa-

DATA 10.38.,126.0,
DATA 10.4. 25
DATA 10.45,198.Ü0,
DATA:
DATA 20.51
DATA «Si
DATA
DATA A
DATA
DATA
DATA
DATA 10.51.
DATA 20.57
DATA 10,0.0,
DATA 10.51
DATA 5
DATA 10.6
DATA 10.
DATA 20.
68.149,34,75,9.159
DATA 10,76.252,0.0.
5.105,21.154,8.,147

nırım, ama bundan sonraki ütü işlerini 64'ünüz yapacak. Şimdi bir arkadaşınızı kandırın ve şu geçen ay söz verdiğim üç sesli müzik çalan programı yazın; belki şu anda basit görünecek ama daha çok başlardayız 64'e program yazanlar hep bu evrenlerden geçtiler. Bu programı aramızda JIM amca diye andığımız, Commodore için yaptıkları unutulmayacak Jim

0.0,0
610 DATA
0,0;0 620 DATA
154.,8,147 630 DATA
640 DATA
»37.9.159 650 DATA
77.10,205 660 DATA
| 670 DATA
«75.0,0 680 DATA
14.8.147 690 DATA
700 DATA
0,0 710 DATA
| 720 DAT:
730
0.0: 740
14,10,205 | 750
0.0 760
770
0 7BÜ
790

Butterfield yazmış ve işte DI- 1986) O

100 POKE53280,1:POKE53281.1:
PRİNT “£DIXIE”

NOT: Soruları olanlar Mahmut C. Genceli Akustik Elektronik Büklüm Sok. 6-A ANKARA adersine yazabilirler. Onlarla tartışma imkânını bu sütunlarda bulabiliriz.

0.0