SIMON'S BASIC.

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

Uzun süredir Commodore 64 ile ilgilenen herkesin bildiği, ilgilenmeye 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 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ır. Gene de her durumda SIMON'S BASIC, Commodore 64 ile program yazmak isteyenler için çok değerli bir yardımcı olma özelliğini taşır. Bu komutlarının arasında C 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ısını ç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 zaman karşılaşılabilen olumsuz yanlarını birlikte görelim.

PROGRAMLAMA YARDIMLARI

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ğinden 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 komutla, 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ü da 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 ile 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ükleyebilir, 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 matriks değişkenin her bir elemanının gösterilmesi mümkün olmamaktadır. FIND: Bu komut ile programınızın 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ın 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 azaltmaktadır.

YAPISAL KOMUTLAR VE ERROR KOMUTLARI

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 komutları kullanılabileceği gibi, IF...THEN arasındaki koşul sağlanmadığında 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 verilmelidir. İki örnek görelim:

10150
20 REPEAT
30 PRİNT |
40 PRİNT “COMMODORE 64“
60 UNTİL
70 DEĞERİ 44 OLDUĞU ANDA
70. SATIRDAN,
80 REM DEVAM EDİLİR; YOKSA 30.
SATIRA GERİ DÖNÜLÜR.
10 LOOP
20 İNPUT X
30 EXİT İF
40 0X/2)*2
SO İF X4—X THEN PRİNT “ÇİFT SAYI” : EL-
SE: PRİNT “TEK SAYI”
60 END LOOP
70 REM 20-50 NUMARALI SATIRLARIN
ARASI VERİLEN X
80 REM O OLUNCAYA KADAR TEKRAR
EDİLİR VE VERİLEN
90 REM SAYININ ÇİFT VEYA TEK OLDUĞU
SAPTANIR.
99 REM IF...THEN...ELSE KULLANIMINA

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ı etkilememesi 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. ERRIN ve ERRI ile hatanın hangi satırda oluştuğu ve hangi tür hatanın ortaya çıktığı öğrenilebilir.

GRAFİK KOMUTLARI

Normal BASIC ile grafik çizilmeye kalkışıldığında, basit bir sinüs grafiği bile yaklaşık 45 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, daire parçaları, elipsler, çokgenler 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 KOMUTLARI

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, 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 DESİGN 0,13*64 : REM 13. BLOK,
NORMAL SPRITE

Sö b

20
21 CBBBB..
22 .BB.BB
23 ©BB..BB... BB..BB
24 CBB...BB.. ..BB...BB
25 CBB....BB. .BB....BB
26 CBB.....BB BB.....BB
27 BB....BB .BB
28 eBB. BB..BB. .BB
29 ..BBBB.. .BB
30 ..BB... .BB
31 ..BBBB.. .BB
32 BB..BB. BB
33 CBB......BB....BB......BB
34 CBE.....BB BB.....BB
35 CBB....BB. .BB....BB
36 ..BB...BB
37 BB..BB
38 CBB.BB. .BB.BB
39 CBBRB..
40

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 DETECI ve CHECK komutları ile kolayca öğrenilebilmektedir. 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:

18
za
21
Ba
e3
24
es
26
e7
ea
sa
31
se
33
34
25
36
37
€..BBBB..
.BB..BB.
.BB.
BB..BB.
..BBBB..
BB
DESİGN2,$E400412448
©BB....BB
©B ..B
©B..BBBBEB
©B..BBBBB
©B..BB..B
©BB....BE,
©BBB..BBB
©BB..BBBB

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

KARAKTER DİZİSİ KOMUTLARI

Normal BASIC'da bulunan LEFT$, MID$, STR$ vb. gibi komutların yanısıra daha birçok komut eklenmiştir. 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 istenen 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 dillerin PRINT USING ile yaptığı işlemi artık C64 ile de yapabilirsiniz. Örnek vermek gerekirse:

USE 123.507 — $123.57 USE ”,198765.237 — — 987465

MÜZİK KOMUTLARI

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 bir karakter dizisi içine yerleştirdiğiniz notaları, PLAY komutu ile ve daha önce ENVELOPE komutu ile belirttiğiniz ses sınırı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 ortak bir özelliği.

MATEMATİKSEL 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 $AB7F gibi. İkilik sistemdeki sayılar ise başlarına konan % işareti ile belli oluyorlar, %11000410, %0011101 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 KOMUTLARI

FLASH, OFF, BFLASH, BFLASH OFF 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. FCHR, FCOL, FILL komutları ile yazı ekranının istenen bir bölgesi istenen karakter ve renkle 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.

di

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

DİĞ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 çıkan bir satır numarasına GOTO yapmayı sağlayan CGOTO'yu, joystick, lightpen ve paddle ile ilgili JOY, PENX, 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. İsterseniz, SIMON'S BASIC'in 111 komutunun hepsinin alfabetik sıraya göre bir listesini görelim:

$$, @, ANGL, ARC, AT, AUTO, BCKGNDS, CENTRE, CHAR, CHECK, CIRCLE, CMOB, COLO, DELAY, DESIGN, DETECT, DIR, DISAPA, DISK, DRAW, DUMP, DUP, ELSE, ENVELOPE, FCHR, FCOL, FETCH, FILL, FIND, FLASH, HI COL, HIRES, HRDCPY, INKEY, INSERT, LEFTB, LEFTW, LIN, LOCAL, LOOP, MERGE, MMOB, MOB OFF, MOB SET, MOD, NO ERROR, NRM, OFF, OLD, ON ERROR, OPTION, PENX, PENY, PLACE, PLAY, PLOT, RCOMP, REC, RENUMBER, REPEAT...UNTIL,

RLÜCMOB, SCRLO, SECURE, SOUND,
USE,

UPB, UPU, 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ın

BFLASH,
COLOUR,
DISPLAY,
ERRLN, ERRN,
FRAC,
INST,
END LOOP,
MOVE ,
POT,
RESET,
TEST,
CALL,
CSET,

BLOCK, COPY, DIV, EXEC, EXOR, GLOBAL, GRAPHICS, INV, JOY, KEY, LOW COL, MEM, MULTI, MUSIC, OUT, PAGE, PROC...END PROC, RIGHTB, RIGHTW, TEXT, TRACE, OLD komutu ile geri çağrılabilmesi, dikkati çeken bir nokta. Son olarak belirtilebilecek tek zorluk, Commodore BASIC'inde olduğu gibi emirleri SHIFT tuşu ile kısaltarak 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.

Seyfettin ÇANKAYA

Merhaba,

İlk sayımızdan başlayarak bu sayfada sizlerle beraber olacağız. Bu köşenin nasıl olması gerektiğini tartıştık ve sonunda belirli kalıplar içine sıkışmış ders yazılarından kaçınmaya karar verdik. Amacımız, fikirlerini bilgisayarı başında özgürce uygulayabilen, bilgisayarını koluna takıp Galata'da çay içmeye gidecek cüreti gösteren hafif uçucu kesime hitap etmek. Yine de bu uçucu kesime hitap edebilmek için iki farklı düzey tutturmamız gerektiğine karar verdik. Çünkü bir yandan C-64 kullanıcıları ailesi her gün yeni kullanıcılarla biraz daha büyüyen bir aile. Okurlarımız arasında C-64'ünü yeni almış, datasette'ler, kasetler, disketler, yükleme vb. konularda temel bilgilere ihtiyacı olan kalabalık bir kesim olduğunu düşünüyoruz. Diğer yandan Türkiye'de assembler bilen bir kesim kanımızca oluştu. Bu kesim artık ilginç programlar yazmakta ve çeşitli yayınlar, okul kulüpleri gibi yollarla kendilerini tanıtmakta. Yine de, bu sayfalarda “temel bilgiler” bağlamında yayınlayacağımız yazıların uzman okurlarımızı da ilgilendirebilecek “püf noktaları” içereceğini umuyoruz. C-64 incelendiğinde Basic program yazılan herhangi bir ev bilgisayarı olmadığı anlaşılır. C-64 sahibi olan kişi eninde sonunda makina kodunun sağladığı geniş olanaklardan yararlanmak isteyecektir. C-64 dünyada en çok programa sahip olan bilgisayardır. Buna C-64 hakkında yayınlanmış sayfalar dolusu yazıyı da eklediğimizde dünyadaki C-64 amatörlerinin çokluğu hakkında fikir sahibi olabiliriz. Tasarımı sırasında kullanıcıya çok büyük esneklik sağlayan 64K RAM sistemi, kullanıcının kontrolüne bırakılan vektörler, programlanabilen ses tümdevresi, programlanabilen video tümdevresi, kolay erişilebilen işletim sistemi (kernal) C-64'ü en yaratıcı, en çok kullanılan kişisel bilgisayar yapmıştır. Bu köşeyi izlemede rahatlıkla kullanabileceğimiz bir monitör programı size yardımcı olacaktır. Baytan Bitirmez sizin için böyle bir monitör programı hazırlıyor; gelecek sayımızda yayınlayacağız. Bu sayıda ise yayınladığımız TURBO programına girmenizi sağlayacak basit bir Basic programı veriyoruz. Konuların sizin en azından orta düzeyde assembler bilginiz olduğu varsayımı ile ele alınacağını da belirtelim.

İlk konumuz TURBO...