Home  Articles  Programs 

Simon's BASIC: 14 Yaşında Bir Çocuğun Dili

Artık BASIC programlarınız da hızlı çalışabilir.

Uzun süredir Commodore 64 ile ilgilenen herkesin bildiği, ilgilenmeye yeni başlayanların da kısa sürede duyduğu bir program vardır: SIMON'S BASIC

Neden bu program bu kadar biliniyor? David Simon isimli bir Amerikalı'nın daha 14(!) yaşında iken yazdığı bu programı bu kadar önemli kılan nedir?

Simon's BASICSIMON'S BASIC, standart BASIC'e sahip olması nedeniyle C64'ü C64 yapan kısıtlamaları ortadan kaldırır. SIMON'S BASIC ile bilgisayarınız artık 100'den fazla yeni komut kazanacaktır. Bu komutların kimisi gerçekten de çok gereklidir. Ancak kimileri de çok ender kullanılırlar. Gene de her durumda SIMON'S BASIC, Commodore 64 ile program isteyenler için çok değerli bir yardımcı olma özelliği taşır. Bu komutların arasında PL/I veya Pascal bilenlerin yakından tanıdıkları, programların yapısallığını sağlayan komutların yanı sıra, harf dizilerini kolaylıkla kullanmayı ve değiştirmeyi sağlayanlar da vardır. Programlardaki hataların kontrolünü sağlayan komutlar da cabası. Ancak hemen her C64 kullanıcısının sıkıntı çektiği grafik, ses ve sprite komutlarının da SIMON'S BASIC'de bulunması, tüm bu özellikler arasında en sevindirici olanı. Kısaca, SIMON'S BASIC hemen hiçbir isteği açıkta bırakmayan bir BASIC geliştirme programı.

Dilerseniz, SIMON'S BASIC tarafından sağlanan kolaylıkları ve kimi durumlarda karşılaşılabilen olumsuz yanlarını birlikte görelim.


Programlama Yardımları

Sık sık program yazan meraklıların da bildiği gibi bazı komutlar program yazımını oldukça kolaylaştırırlar. Örneğin satır numaralarının kendiliğinde yazılması, program listesinin ayarlanabilir bir hıza sahip olması, değişken değerlerini bir komutta görebilmek, tek düğmeye basarak bir komutu harekete geçirebilmek, programda belli bir kelimeyi aramak, satır numaralarını otomatik olarak değiştirmek gibi. Şimdi bu komutları kısaca görelim:

AUTO: Bu komutta, satır numaralarının bilgisayar tarafından otomatik olarak verilmesi sağlanır. Başlangıç satır numarası ile birbirini izleyen iki satır numarası arası belirtilebilir.

COLD: SIMON'S BASIC'i ilk açılış durumuna getirir. Bilgisayarı kapayıp açma gerekliliği ortadan kalkar.

DELAY: LIST komutu verildiğinde listenin hangi hızla verileceği bu komutla saptanabilir. Listenin kontrolü de SIMON'S BASIC ile geliştirilmiştir. Program LIST edilirken CTRL tuşuna basmak listeyi yavaşlatır; C= tuşuna basmak durdurur ve SHIFT tuşuna basmak da harf harf bir liste geçişini sağlar. İşte DELAY komutu ile bu sıradaki hız ayarlanabilmektedir. Böylece program listesi programcının okuma hızına uygun biçimde gösterilmektedir.

DISAPA, SECURE: Bu iki komut sayesinde programdaki istenen satırların görünmez hale gelmesi sağlanır. Böylece bazı önemli satırlar, istenmeyen gözlerden saklanabilir.

DISPLAY, KEY: Klavyenin sağ tarafında bulunan fonksiyon tuşlarının her birine iki değişik kelime veya komut yüklenebilir, daha sonra da bir tek bu tuşa basmakla komutu harekete geçirebilirsiniz. Örneğin sadece F1'e basarak programınızı RUN edebilirsiniz.

DUMP: Programı durdurup o ana kadar kullanılmış olan tüm sayısal ve karakter değişkenlerinin en son içeriklerini görebilirsiniz. Ancak ne yazık ki bu emir sadece tek değişkenler için işlemektedir, bir matris değişkenin her bir elemanının gösterilmesi mümkün olmamaktadır.

FIND: Bu komut ile programınızı içindeki herhangi bir sayının veya yazının hangi satırlarda bulunduğunun bir listesini alabilirsiniz. Böylece örneğin bir değişkenin hangi satırlarda olduğunu bulmak kolaylaşmış olur.

MERGE: Artık elinizdeki birkaç programı, bu komut ile birleştirerek tek bir büyük program haline getirebilirsiniz.

OLD: Daha önce NEW ile sildiğiniz programınızı geri çağırmanızı sağlar.

PAGE: Program listesinin sayfa sayfa verilmesini sağlar. Saptayabileceğiniz sayfa uzunluğuna gelindiğinde bilgisayar sizin bir tuşa basarak devam ettirmenizi bekler. Böylece programlarınızı tıpkı bir kitabın sayfaları gibi sayfa sayfa inceleyebilirsiniz.

RENUMBER: programınızız tamamının yeni ve düzenli satır numaralarına sahip olmasını sağlar. Ancak ne yazık ki bu komut GOTO, GOSUB, THEN gibi komutların arkasından gelen satır numaralarını değiştirmemektedir. Bu da bu komutun işlerliğini oldukça azaltmakta.


Yapısal Komutlar ve Error Komutları

SIMON'S BASIC ile artık tek satırlı IF .... THEN komutlarından kurtulmuş oluyorsunuz. RCOMP ve ELSE komutları yardımı ile birden fazla satıra yayılabilen IF .... THEN komutları kullanılabileceği gibi IF .... THEN arasındaki koşul gerçekleşmediği zaman ne yapılması gerektiği de verilebilmektedir.

Döngüleri sağlayan FOR .... NEXT komutlarının yanına artık iki yeni yapısal komut daha gelmekte: REPEAT .... UNTIL ve LOOP .... EXIT IF .... END LOOP

İlk emirde, REPEAT ve UNTIL arasındaki satırlar, UNTIL'den sonra gelen koşul gerçekleşinceye kadar tekrar edilirler. İkinci emirde ise, LOOP ve END LOOP arası sonsuz kere tekrar edilebilir. Bu döngüden çıkmayı sağlayan koşul EXIT IF ile verilmektedir.

İki örnek görelim:

10 I = 0
20 REPEAT
30 PRINT I
40 PRINT "COMMODORE 64"
50 I = I + 1
60 UNTIL I = 11
70 REM I'NIN DEGERI 11 OLDUGU ANDA 70. SATIRDAN
80 REM DEVAM EDILIR; YOKSA 30. SATIRA GERI DONULUR.

10 LOOP 20 INPUX X 30 EXIT IF X = 0 40 X1 = INT (X/2)*2 50 IF X1 = X THEN PRINT "CIFT SAYI":ELSE: PRINT "TEK SAYI" 60 END LOOP 70 REM 20-50 NUMARALI SATIRLARIN ARASI VERiLEN X 80 REM 0 OLUNCAYA KADAR TEKRAR EDiLiR VE VERiLEN 90 REM SAYININ CIFT VEYA TEK OLDUGU SAPTANIR. 99 REM IF .... THEN .... ELSE KULLANIMINA DIKKAT!!

Bir diğer yeni emir de PROC .... END PROC ikilisidir. Böylece, belli program kısımları CALL veya EXEC ile satır numarası kullanılmadan, sadece isimleri ile çağrılabilirler. Burada kullanılan değişkenlerin programın diğer kısımlarının etkilenmemesi için de LOCAL ve GLOBAL emirleri kullanılabilir.

ON ERROR: GOTO ve NO ERROR emirleri ile bir hata çıktığında programın durması önlenerek, o hataya uygun bir program parçasına atlaması sağlanır. ERRLN ve ERRN ile hatanın hangi satırda oluştuğu ve hangi tür hatanın ortaya çıktığı öğrenilebilir.


Grafik Komutları

Normal BASIC ile grafik çizilmeye kalkışıldığında, basit bir sinüs grafiği bile yaklaşık 15 dakika sürer. Ancak SIMON'S BASIC'in grafik emirleri kullanıldığında bu süre 10 saniyeye düşer.

Grafik ekranını açmak için ekran ve çizgi rengini de belirterek HIRES komutunu kullanabilirsiniz. Eğer multi-color grafik ekranını istiyorsanız, MULTI komutu ile diğer 3 rengi de belirterek bu grafik sayfasına geçersiniz. Gerektiğinde LOW COL komutu ile çizim yaptığınız renkleri geçici bir süre değiştirebilirsiniz.

PLOT emri ile istediğiniz koordinatlara nokta koyup, LINE komutu ile istediğiniz yere bir çizgi çizebilirsiniz. REC, CIRCLE, ARC, ANGL, ve BLOCK gibi emirler ile çerçeveler, daireler veya içi dolu dörtgenler çizebilirsiniz. PAINT komutunu kullanarak ekrandaki düzensiz ancak etrafı kapalı bir alanın içini doldurabilirsiniz. DRAW ve ROT emirleri ile ufak figürler saptayıp, bunları değişik açılarda döndürerek ve büyüklüklerini değiştirerek ekrana yerleştirebilirsiniz. CHAR ve TEXT emirleri ile grafik ekranının üzerinde istediğiniz büyüklük, genişlik ve renkte yazılar yazabilirsiniz.

Üstelik tüm grafik emirleri sadece çizgi çizmekle kalmaz. İstendiğinde aynı emirlerle istenen yerler silinebilir. Hatta çizim yapılan yerin negatif hale gelmesi de sağlanabilir.


Sprite Komutları

Eskiden, çeşitli hesaplamalardan sonra bulunan sayıların, çeşitli iç bellek kısımlarına POKE edilmesi ile gerçekleştirilen sprite oluşturma ve kontrol etme, SIMON'S BASIC ile artık birkaç emirle kendiliğinden yapılabilmektedir..

Örneğin bir DESIGN komutu ile, normal veya multi-color bir Sprite'ın şeklinin saptanması çok kolay boyutlara indirilmiştir.

İşte bir örnek:

10 DESIGN 0,13*64: REM 13. BLOK. NORMAL SPRITE
20 @BBBBBBBBBBBBBBBBBBBBBBBB
21 @BBBB................BBBB
22 @BB.BB..............BB.BB
23 @BB..BB............BB..BB
24 @BB...BB..........BB...BB
25 @BB....BB........BB....BB
26 @BB.....BB......BB.....BB
27 @BB......BB....BB......BB
28 @BB.......BB..BB.......BB
29 @BB........BBBB........BB
30 @BB.........BB.........BB
31 @BB........BBBB........BB
32 @BB.......BB..BB.......BB
33 @BB......BB....BB......BB
34 @BB.....BB......BB.....BB
35 @BB....BB........BB....BB
36 @BB...BB..........BB...BB
37 @BB..BB............BB..BB
38 @BB.BB..............BB.BB
39 @BBBB................BBBB
40 @BBBBBBBBBBBBBBBBBBBBBBBB

Daha sonra da, CMOB ile Sprite'ın rengi, MOB SET ile büyüklük; cins, öncelik gibi özellikleri, MMOB ve RLOCMOB gibi emirlerle de ekran üzerindeki hareketin sınırları ve hızı saptanabilmektedir. MOB OFF ile de sprite görünmez yapılabilir. Ekrandaki sprite-sprite çarpışmaları ile sprite-karakter çarpışmaları ise DETECT ve CHECK komutları ile kolayca öğrenebilmektedir.

Tüm bu sprite emirleri arasında eksiklik olarak nitelenebilecek bir şey gene de var, tabii... Bu, sprite'ların hareketini sağlayan MMOB ve RLOCMOB komutları ile ilgili bir ayrıntı. Bu emirler ile, hareketin başlangıç ve varış koordinatları ile hızı verilebilmekte. Ne var ki hareket sırasında program, hareketin bitmesini, yani sprite'ın varış koordinatlarına gelmesini beklemekte. Böylece de aynı anda birkaç sprite'ı birden hareket ettirmek imkânsız hale gelmekte.

Yukarıda kullandığımız DESIGN komutu ile karakter setini de değiştirmek mümkün olmaktadır. Bu MEM komutu ile DESIGN komutunun birlikte kullanılması ile gerçekleşmektedir. Örneğin C= ile C tuşlarına basıldığında Ç harfinin çıkması için şöyle bir program yeterli olacaktır:

10 MEM:DEGISN2,$E000+124*8
20 @..BBBB..
21 @.BB..BB.
22 @.BB.....
23 @.BB.....
24 @.BB..BB.
25 @..BBBB..
26 @...BB...
27 @..BB....
29 DEGISN2,$E400+124*8
30 @BB....BB
31 @B..BB..B
32 @B..BBBBB
33 @B..BBBBB
34 @B..BB..B
35 @BB....BB
36 @BBB..BBB
37 @BB..BBBB

Böylece hem normal, hem de negatif gösterimde Ç harfi yaratılmış olur.


Karakter Dizisi Komutları

Normal BASIC'da bulunan LEFT$, RIGHT$, MID$, STR$ vb. gibi fonksiyonların yanısıra daha birçok komut eklenmiştir.

Örneğin, PRINT AT ile ekranın istenilen yerine yazı yazmak mümkün olmaktadır. Öte yandan CENTRE ile de istenilen yazıyı o satırın tam ortasına yerleştirmek bilgisayara bırakılmış olur. DUP ile herhangi bir karakter dizisi istenildiği kadar çoğaltılabilirken (örneğin: DUP ("A",5) ile AAAAA elde edilir...), INST ve INSERT ile bir karakter dizisini bir başka karakter dizisinin istenilen yerine yerleştirebilirsiniz. Veya PLACE komutu ile bir karakterin veya karakter dizisinin, bir başka karakter dizisinin kaçıncı karakterinde başladığını bulabilirsiniz.

Ancak tüm bu emirler içinde değeri küçümsenemeyecek en önemlisi, hiç kuşkusuz USE komutu. Diğer bilgisayarların PRINT USING ile yaptığı işlemi artı C64 ile de yapabilirsiniz. Örnek vermek gerekirse:

USE "$###.##",123.567 ===> $123.57
USE "###+##",198765.237 === 987+65


Müzik Komutları

Daha önce, tıpkı grafik çiziminde olduğu gibi birçok POKE ile kullanılabilen C64'ün üstün ses özellikleri, artık SIMON'S BASIC ile büyük bir zevke dönüşüyor.

VOL ile ses yüksekliğini ayarlarken, WAVE ile her bir ses üretecinin karakteristiklerini de saptayabilirsiniz. Daha sonra da, MUSIC komutu ile karakter dizisi içine yerleştirdiğiniz notaları, PLAY komutu ile ve daha önce ENVELOPE komutu ile belirttiğiniz ses dalgasına göre çalabilirsiniz. Üstelik isterseniz, müzik çalınırken, programınızın devam etmesini de sağlayabilirsiniz.

Bu emirler arasında tek rahatsız edici nokta, notaların bizim alıştığımız do, re, mi ... türünde değil de, batılı sistemde kullanılan A, B, C, D, E, F ve G harfleri ile verilmesinin gerekliliği. Ne yazık ki bu, bugüne kadar yazılmış olan tüm müzik programlarının biz Türkler için pek de rahatlık sağlamayan bir özelliği.


Matematiksel Komutlar

SIMON'S BASIC ile matematiksel işlemlerde de birkaç kolaylık sağlanmıştır. Örneğin, DIV komutu ile iki sayıyı birbirine bölerek, tam sayı kısmını öğrenebilirsiniz. MOD işlemi ile de aynı bölme işleminin kalanını bulabilirsiniz. Normalde INT ile herhangi bir işlemin tamsayı kısmını öğrenmek mümkünken, artık FRAC fonksiyonu ile sadece virgülden sonrasını da öğrenmek mümkün olmaktadır. Tüm bunların yanında, daha önceden varolan AND, OR ve NOT gibi mantıksal işlemlere bir yenisi ekleniyor EXOR.

Bir başka önemli özellik de bugüne kadar sadece onluk sistemi kullanmak mümkünken, SIMON'S BASIC ile hem ikilik, hem de onaltılık sistemin kullanılması mümkün hale gelmekte. Onaltılık sayılar başlarına konan bir $ işareti ile ayırt ediliyorlar, örneğin $C000, $AB7F gibi. İkilik sistemdeki sayılar ise başlarına konan % işareti ile belli oluyorlar. %11000110, %00111101 gibi. Her iki durumda da ortaya çıkabilen tek zorluk, onaltılık sayıların tam dört karakterden, ikilik sayıların da tam sekiz karakterden oluşması gerekliliği. Bu durumda iki basamakla gösterilebilecek bir onaltılık sayı için gene de dört basamak yazmak zorunluluğu ortaya çıkıyor. $FF yerine $00FF yazmak gibi.


Ekran Komutları

FLASH, OFF, BFLASH, BFLAASH 0 gibi emirler ile ekrandaki belli bir renge sahip karakterlerin veya ekran çerçevesinin belli bir hızla ve programdan bağımsız olarak yanıp sönmesi sağlanıyor.

FCCHR, FCOL, FILL komutları ile yazı ekranının istenen bir bölgesi istenen karakter ve renk ile doldurulabilirken, INV komutu ile de aynı bölge negatif hale getirilebilmekte.

MOVE ile gene yazı ekranının istenen bir bölgesi bir başka bölgeye taşınabiliyor. LEFT, RIGHT, UP ve DOWN gibi komutlar ile de belli bir ekran bölgesi belirtilen yöne doğru kaydırılabiliyor.

Eğer ekranınızı kaydetmek veya yüklemek isterseniz, SCRSV ve SCRLD komutlarını kullanabilirsiniz. Ancak bu iki emir sadece yazı ekranı için geçerli; grafik ekranını kaydetmek için herhangi bir komut maalesef yok.

Ancak COPY komutu ile grafik ekranını grafik baskısı yapabilen bir yazıcıda bastırabilirsiniz. HRDCPY ile de aynı işlemi yazı ekranı için gerçekleştirebilirsiniz.


Diğer Komutlar

Tüm bunlardan başka, disketle işlemleri sağlayan DIR ve DISK emirleri, veri kabulünü rahatlaştıran FETCH ve INKEY komutları, programın belli bir süre beklemesini sağlayan PAUSE komutunu, belli bir DATA satırına RESTORE yapmayı sağlayan RESET'i, bir hesaplama sonucu ortaya çıkaran bir satır numarasına GOTO yapmayı sağlayan CGOTO'yu, joystick, lightpen ve peddle ile ilgili JOY, FENX, PENY ve POT komutlarını saymak mümkün. Daha da burada açıklamasını yapmaya yerimizin yetmeyeceği birçok komut olduğunu da belirtelim isterseniz, SIMON'S BASIC'in 111 komutunun hepsinin alfabetik sıraya göre bir listesini görelim:

$, %, @, ANGL, ARC, AT, AUTO, BCKGNDS, BFLASH, BLOCK, CALL, CENTRE, CHAR CHECK, CIRCLE, CMOB, COLD, COLOUR, COPY CSET, DELAY, DESIGN, DETECT, DIR, DISAPA, DISK, DISPLAY, DIV, DOWNB, DOWNW, DRAW, DUMP, DUP, ELSE, ENVELOPE, ERRLN, ERRN, EXEC, EXOR, FCHR, FCOL, FETCH, FILL, FIND, FLASH, FRAC, GLOBAL, GRAPHICS, HI COL, HIRES, HRDCPY, INKEY, INSERT, INST, INV, JOY, KEY, LEFTB, LEFTW, LIN, LINE, LOCAL, LOOP...END LOOOP, LOW COL, MEM, MERGE, MMOB, MOB OFF, MOB SET, MOD, MOVE, MULTI, MUSOC, NO ERROR, NRM, OFF, OLD, ON ERROR, OPTION, OUT, PAGE, PAINT, PAUSE, PENX, PENY, PLACE, PLAY, PLOT, POT, PROC...END PROC, RLOCMOB, ROT, SCRLD, SCRSV, SECURE, SOUND, TEST, TEXT, TRACE, UPB, UPW, USE, VOL, WAVE.


Sonuç

Sonuç olarak, SIMON'S BASIC'in C64 için gerekli, yararlı ve mantıklı bir BASIC geliştirme programı olduğunu söyleyebiliriz.

Emirlerin biçimleri, sık sık program yazan kişilerin zorluk çekmeyeceği biçimde hazırlanmış. Ancak gene de bir parça egzersiz gerekli.

Programlamaya yardımcı olan komutlar ile yapısal komutlar programların hızlı, doğru ve daha kolay kontrol edilebilir olmasını sağlıyor. Bunun bir yan ürünü de, programın daha ileriki bir tarihte daha kolay bir biçimde geliştirilebilmesine olanak tanıması.

Grafik, ses, sprite, karakter seti ve ekran ile ilgili emirlerin sağladığı kolaylıkların yanı sıra, değişik sayı sistemlerini kullanmak veya bilgisayardaki programı bozmadan disketin içindeki programların listesini görebilmek gibi emirler de dikkat çekiyor. Özellikle yanlışlıkla verilen bir NEW sonucu silinen program OLD komutu ile geri çağrılabilmesi, dikkat çeken bir nokta.

Son olarak belirtilebilecek tek zorluk, normal Commodore BASIC'inde olduğu gibi emirleri SHIFT tuşu ile kısalarak yazmak imkanının SIMON'S BASIC emirleri için ortadan kalktığı. Ancak KEY komutu ile, emirlerin tek bir tuşa basılarak yazıldığı gözönüne alındığında, bu da çok büyük bir zorluk yaratmıyor.


Simon's BASIC ile grafik çizimi

kaynak: Teleteknik Commodore Dergisi, Sayı 1, Mart 1986, Sayfa 18-22

Tuna Ertemalp
01.03.1986

Keywords: Commodore, Commodore Dergisi, BASIC, yazılım


C64 Projects Twitter Page

İlker Fıçıcılar's CBM Page