Suat's Basic

Program dökümü: Suat's Basic, SUAT*

COMMODORE-64 İÇİN ÇOK YARARLI DOKUZ YENİ KOMUTTAN OLUŞAN BİR PAKET PROGRAM

Commodore-64'ün pek çok yönü ile ev bilgisayarları arasında en mükümmeli olduğunu artık kabul etmeyen kalmadı.

Onu, bilgisayarların renkli dünyasına ilk adımını atanlardan küçük bir işletmenin hesaplarını tutanlara kadar milyonlarca insanın sevgilisi haline getiren özellikleri arasında gerçek bir klavye, 64K'lık bir bellek, mükemmel bir grafik olanakları, sekiz adet sprayt, üç kanal ses ve bir kanal beyaz gürültüden oluşan bir synthesizer'a yaklaşan ses gücü ve nihayet hiçbir bilgisayarda bulunmayan zenginlikte oyun programları var.

Fakat iş, ne yazık ki bu grafik ve ses olanaklarını kullanmaya gelince, PEEK ve POKE'lar arasında insan boğulmaya başlamaktadır. Bu yüzdendir ki Commodore-64'ün bu zayıf yönünü gidermek için Simons' Basic, Ultrabasic-64, BC Basic gibi birçok "Basic Extension" programı kimi kaset kimi diskette, bazıları ise kartuşta olmak üzere piyasaya çıkmış bulunmaktadır. Ben bunlardan ilk ikisini kullanmaktayım. Commodore-64'ün yetersiz kaldığı sahalar için pek çok komut içeren bu programlar ayrıca bilgisayar kullanıcısına çeşitli ilave komutlar da sunmakta ve pratikte gerçekten çok faydalı olmaktadırlar. Fakat aralarında önemli farklar vardır ve kasette olanları kullanmak çok sıkıntılı olmaktadır.

Beri yanda kimi 50, kimi 100 yeni komut içeren bu programlar yakından incelendiğinde bu komutların önemli bir kısmının kırk yılda bir kullanılabileceği göze çarpmaktadır.

Halbuki programcı için bazı komutlar fevkalade önem taşımaktadır.

Şöyle ki:

OLD: Yanlışlıkla bellekte bulunan programı NEW ile silmişseniz (ki aslında silinmiş olmamaktadır) OLD komutu ile tekrar belleğe alabilirsiniz.

DELETE: Uzun bir programın belli bir bölümünü silmek istiyorsunuz. Sileceğiniz bölüm birkaç satırsa sorun değil, ama ya 40-50 satır sileceksenz bunun kısa bir yolu olmalı, işte DELETE komutu bu işe yaramaktadır.

SPACE-KILL: Programınızdaki REM'lerden ve bir sürü aralık [SPACE]'den kurtulup programı kısaltmak ve bellek sarfını azaltmak isteyebilirsiniz. Buna da bir komut gerek.

HARDCOPY: Printere bir programı listelettirmek kolay. Fakat ekranda o anda bulunanlar hesap sonuçları, yazılar veya herhangi bir nedenle OPEN 4,4: CMD4 diyerek printere alamayacağınız bilgiler olabilir. İşte ekranın kopyesini printere veren HARDCOPY komutu.

DIRECTORY: Disketteki programların listesini görmek istiyorsunuz, fakat bellekte bir program var. LOAD "S", 8 ve sonra LIST ile görebilirsiniz, fakat bu arada bellekteki program da silinir gider. DIRECTORY komutu ise bu işi belleği silmeden yapar.

APPEND: bir programın sonuna başka bir programı eklemede kullanılır. Daha sonra RENUMBER edilmelidir.

RENUMBER: Yapılan eklemeler ve çıkarmalarla programların satır no.ları çok düzensiz bir hale gelebilir. RENUMBER komutu bu sorunu çözer.

MEM-SAVE: Monitor kullanmadığımız bir anda bir makine kodu programını nasıl SAVE edeceksiniz. Ya da DATA listeleri halinde olan SUAT'S BASIC 30 blok tutuyor. Halbuki doğruda makine kodu olsaydı 5 blok olacaktı. Yükleyip RUN ettikten sonra makine kodunda bir kopyesini çıkarıp kullansak daha pratik olmaz mıydı? Cevap MEM-SAVE komutu.

Bu komutlardan DELETE ve SPACE-KILL, SİMONS' BASIC'te bile bulunmamaktadır. İşte kendi çalışmalarım sırasında çok sık ihtiyaç duyduğum bu komutları kısa BASIC programları halinde ardarda sıralayarak bir paket program hazırladım. SİMONS' BASIC olduğuna göre SUAT'S BASIC de olabilir (!) deyip bu adı koydum ve şimdi de sizlere sunuyorum.

Programımız

Yukarıda sözünü ettiğimiz komutlardan oluşan SUAT'S BASIC programı bölümler halinde ve BASIC dilinde hazırlanmış olup istenirse herhangi bir veya birkaç bölüm ayrı olarak da yazılıp kullanılabilir.

Ticari programlardan farkı ise, komutların kelime olarak değil, SYS komutu ile verilişidir. Dolayısıyla hangi adreste olduklarını hemen belli olmaktadır.

Programımız, BASIC bölgesinde (2048-40959) olmadığından BASIC belleği harcamamaktadır. Bu nedenle ne NEW ne SYS 64738 komutu, ne de RESET anahtarı ile silmek mümkün değildir. 49152'den başlayan 4K Serbest RAM bölgesinde ve makinekodunda yerleşmiş olduğundan silmek için bilgisayarı açıp kapamak gerekir. Dolayısıyla "emniyette"dir.

Yazım sırasında yapılacak hatalara karşı bazı önlemler de alınmıştır. Örneğin SPACEKILL bölümünü yazarken DATA'lardan birini yazmadınız veya iki kere yazdınız. Artık C 136 olacağından, RUN ettiğinizde DATA ADEDİ HATASI (SPACE-KILL) diyecektir.

Ya da HARDCOPY bölümünde bir DATA'yı yanlış yazdınız. RUN edildiğinde DATA YAZIM HATASI (HARDCOPY) yazacaktır.

Program RUN edildiğinde önce ekran siyaha dönüp sizi lütfen bekletecektir. READY dediğinde LIST ederseniz artık bir şey bulamazsınız, çünkü kendi kendini NEW edip BASIC bölgesini temizlemiştir, kendisi (eğer bir hata mesajı çıkmamışsa) çalışır durumda 4K FREE RAM'dadır.

Hata durumunda NEW komutu yüzünden program BASIC bölgeden silindiğinden, RUN edilmeden önce kaset veya diskete çekilmesi önemli tavsiye olunur.

Program 30 blok tutmaktadır. LOAD ve RUN edilmesi toplam 34-35 saniye almaktadır. İsteyenler NEW-SAVE komutu ile programı makine kodu halinde SAVE edip kullanabilirler. Bu durumda toplam süre 5-6 saniyeye iner. Tabii LOAD ederken bu durumda komutu LOAD "SUAT'S BASIC-MC",8,1 olarak yazmanız ve yüklendikten sonra NEW etmeniz gerekeceğini hatırlatalım.

Ayrıca SUAT'S BASIC ile çalışırken 49200'den 50462'ye kadar olan bölgeye kısmen de olsa başka bir program yüklemeye kalkarsanız program bozulacaktır.

Programın Kullanılması

Daha önce de belirttiğimiz gibi, komutlar SYS olarak kullanılacaktır. Şöyle ki:

1- OLD ya da RENEW

Komut: SYS 49200

NEW veya SYS 64738 komutları gerçekte bir BASIC programı silmezler. Sadece START-OF BASIC pointerlarını RESET ederler. Program hâlâ bellektedir. Eğer başka bir program (tek bir satır bile olsa) yazmaya başlamadıysanız SYS 49200 ile pointerleri eski haline koyabilirsiniz. LIST komutu ile programı görebilirsiniz.

2- DELETE

Komut: SYS 49240, L1-L2

L1, silinecek bölgenin ilk satırının no.sunu. L2 ise son satırını göstermektedir. Örnek olarak,

SYS 49240, 300-385 komutu: 300 ila 385 no.lu satırları,

SYS 49240, 300- komutu: 300'den itibaren kalan tüm satırları,

SYS 49240, -400 komutu: Baştan itibaren 420 no.lu satırın sonuna kadar siler.

Dikkat edilecek nokta, L1 ve L2 no.lu satırların silme işlemine dahil olduğudur.

3- SPACE-KILL

Komut: SYS 49500

Programlardaki aralar yani SPACE'ler, REM ibareleri önemli ölçüde bellek sarfetmektedir. Bu komutlar,

- Bütün aralar yok olur ve kelimeler birleşir (bunun bir sakıncası yoktur)

- REM satırlarında sadece REM ibaresi kalır, gerisi silinir, REM'in kendi silinmemektedir. Çünkü, birçok programda GOTO ve GOSUB'lar REM ile başlayan satırlara atlamaktadır. Eğer programınızda böyle bir durum yoksa kalan REM ibarelerini de siz silebilirsiniz.

- " " işareti arasında bulunan yazı ve rakamlara ise komutumuz bir zarar vermemektedir.

SYS 49500 komutundan sonra programın uzunluğuna göre biraz beklemeniz gerekecektir.

5- MEM-SAVE

Komut: SYS 49800, "PROGRAM ADI", 8, 1, Başlama Adresi, Bitiş Adr + 1

Belleğin herhangi bir bölgesini SAVE etmekte kullanılır. Bunun makine kodu programlarının bulundukları adresle SAVE etmekte faydalı olacağı açıklır. Eğer sözkonusu programın Başlama Adresi ve Bitiş Adresi biliniyorsa mesela 51000 ve 5112 ise ve programın adı da "ALFA" olacaksa, SYS 49800,"ALFA", 8, 1, 51000, 51121 komutu ile programı makine kodunda olarak diskete SAVE edilebilir.

Benzer şekilde SUAT'S BASIC programını LOAD ve RUN ettikten sonra, SYS 49800,"SUAT'S BASIC-MC", 8, 1, 49200, 50462 komutu ile diskete makine kodu alabilirsiniz.

6- DIRECTORY

Komut: SYS 50000,0

Bellekteki programı silmeden DIRECTORY listelemektedir. Ayrıca LIST komutuna gerek yoktur. İki disk sürücü ile çalışıldığı hallerde ikinci disk sürücü için SYS 50 000,1 komutu kullanılmaktadır.

7- APPEND

Komut: SYS 50200 "PROGRAM ADI",8

Eğer birbirine eklemek istediğiniz iki veya daha fazla programınız varsa, önce ilk programı normal şekilde LOAD ediniz. Sonra bu komutu verdiğinizde disketteki program otomatik olarak bulunur ve ilk programı sonuna kendiliğinden eklenir. Gene benzer şekilde SYS komutu ile yeni ilaveler yapılabilir.

Fakat bu komutla iki program satır no.larına göre birbirinin içine geçmez. Sadece arka arkaya eklenir. Eğer ikinci program satır no.ları ilk programı takip etmiyorsa, yani meselâ her iki program da 10 no.lu satırla başlıyorsa, RENUMBER edilmesi gerekir.

8- RENUMBER-1

Komut: POKE 253, LOW BYTE: POKE 254, HIGH BYTE: POKE 255, SATIR ARASI: SYS 50300

Satır no.larını tekrar düzenlemekte kullanılır. Diyelim ki ilk satır no.su 500 olsun ve 10'ar ara ile devam etsin istiyoruz.

Önce 500 desimal sayısının LOW ve HIGH BYTE'larını bulacağız. HIGH BYTE: INT(500/256) LOW BYTE: 500-HIGH BYTE×256 olarak hesaplanabilir. Hatta aşağıdaki kısa programla da bunu Commodore'a yaptırabilirsiniz:

500 için LOW BYTE=244, HIGH BYTE=1 bulunur.

O halde komut, POKE 253, 244: POKE 254,1: POKE 255,10: SYS 50300 olacaktır.

Bu arada önemli bir noktayı belirtelim. RENUMBER edilen programda GOTO ve GOSUB'ların da düzeltilmesi gerekir. (SİMONS' BASIC dahil bu tür programların çoğunda RENUMBER komutu bu şekilde ikinci bir iş olarak GOTO ve GOSUB'ların düzeltilmesini gerektirmektedir.)

9- RENUMBER-2

Komut: SYS 50400

Önceki RENUMBER komutunun kısaltılmış şeklidir. SYS 50400 komutu ile 10'dan başlayarak ve 10'ar ara ile satır no.larını düzene sokmaktadır.

SONUÇ:

Sonuç olarak, görüldüğü gibi SUAT'S BASIC'in kullanışlı komutları bir araya getiren bir program olarak hazırlandığı açıktır. Commodore 64'ü programcılıkta kullanan arkadaşlarıma önemle tavsiye ediyorum. Kullanırken tasarruf edilecek zaman, programın kendisini yazmak için harcayacağınız zamandan çok daha fazla olacaktır.

Not: Disk sürücü yerine kasetle çalışılıyorsa komutlardaki 8 rakamı yerine 1 yazılması gerektiğini hatırlatalım.

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.