daha büyük bir bellek hacmi kapla- masını sağlayobiliriz. Belirli bir altprog- rama gereksinim duyulduğunda ana program onu disketten alır ve REM cümleleriyle bellek yerine yükler. Bu arada orada işgalci kuvvet gibi du- ran REM cümleleri de silinmiş olur ve altprogram ana programa dahil edi- lir. Daha sonra başka bir altprograma daha ihtiyaç duyulduğunda program onu da aynı bellek bölgesine yükler ama bu arada da bir önceki alt prog- ramı da siler. Ve bütün bu işler ana program yürürlükteyken olur biter. Bu sihirbazlık için kullanılan komut bir GW-BASIC komutu olan BLOAD'dır ve bir disketteki dosyayı belirtilen bel- lek bölgesine yükler. Yalnız dikkat edilmesi gereken bir nokta var: Disk- teki dosya sözkonusu durumda bir alt program ikili formatta (binary) olma- lıdır. Ve şimdi de bizim artık BASIC prog- ramlamayı terkettiğimizi düşünmeye- siniz diye bu GW-BASİC'in programları nasıl depoladığını ve sizin de BASIC kodunu nasıl ikiliformata çevirebile- ceğinizi inceleyelim. Göreceksiniz sandığınızdan daha basit. BASIC Kodu Nasıl Çevrilir? Microsoft'un GW-BASIC çeviricisi (in- terpreter) oldukça açıksözlü ve basit bir dildir. Siz komutları satır satır bel- leğe girerken çevirici kendi çalışma alanını hemen son program satırının üzerinde tutar. Bir satırda bulunan her BASIC komutu kendisine uygun 1- ya da 2- byte'liık kodlara çevrilir. Bellek adresleri ve satır numaraları standart 2 byTe formcıîındcı sok!cınır gram le bırlılde her Basic satırından önce bir sonraki satırı adresleyen bir işaret bu- lunur. Bu işaretten sonra satır numarası ondan sonra sonuç çözümlenmiş Ba- silc kodu, ondan sonra da harf sayı- sal konumların met vs. ASCII karşılıkları gelir. Haydi şimdi de sırf eğlencelik olsun diye bir BASIC komutunu inceleyelim. İlk önce komutun bilgisayarınızın belleğinin neresinde olduğunu bul- mak zorundasınız. BASIC'i yükledikten sonra NEW komutunu kullanın ki ya- bancı bir kodla uğraşmak zorunda kalmayasınız. Sonra herhangi bir de- ğişkene bir değer verin ve o değişke- nin bellekteki yerini tespıî edin. Örneğin sadece F$“x” yazın. Şimdi de PRİNT VARPTR($) yazın, Ondalık so- nuç sizi BASIC'in kullandığı hafızanın en alt noktasının çok yakınına bir ye- re, programın başlayacağı yere gö- türür. COMMODORE PC'de bu değer 2830'dur. Sonra yeniden NEW girin ve incele- yebileceğimiz basit bir satır yazın: |OFSa'x” Şimdi BASIC interpreterin ne yaptı- ğgını görmek için satır numaraları kul- lanmadan FORİ—41 TO20:PRİNT PE- EK(X -4 ) NEXTA girin. Burada X'in değe- ri demin VARPTR(FS)'dan elde ettiğiniz değerden 10 eksik yani 2820 olmalı. Bilgisayarınızın bu komutun sonucu olarak şu 20 değeri kontrol etmiş ol- ması gerekir. 00021144 100 70 36 32 231 32 34 42 3400073 000 (Basic) kodun birinci satırının altında) 12 11 (Bellekteki bir sonraki satır.adresleyen işaret 15*2564237-4077) 100 (Satır numarası) 70 36 (FS) 3? (Boş aralık) 231 X— (eşit işareti için GW-BASIC kodu) 32 (Boş aralık) 34 42 34 Ü satır sonu) 00 (Bu bölgeler boştur. Demek ki programın gerisi gelmemektedir) 4 73 (BASİC'in çalışma alanında ilk iki byte) Bu yöntemin aynı zamanda diğer BASIC fonksiyonlarının çalışmalarını görmek için de kullanabilirsiniz. Ve is- terseniz POKE fonksiyonu ile deneysel bir çalışmayla bir komuttablosu ve kü- çük ditprogramlar inşa etmeyi de ba- şarabilirsiniz. İki Tabanlı (Binary) Bir Dosya İnşa Etmek Benim ana program ve ditprogram- larımı ayrı ayrı BASIC listeleri halinde hazırlıyorum. commodore Anaprogramın sonunda çeşitli işa- ret satırları vardır. Bunlar altprogramın ikili versiyonunun yükleneceği bellek bölgelerini işgal etmektedirler. Dökü- manftasyon ve yer doldurma amacıy- la kullanılan REM'ler gerektiğinden de fazla boş yer bırakırlar. Pratik olarak gerekli olandan daha fazla daha ge- niş bir alan temizlenmemelidir. BASIC altperogramın çifte değişken- li versiyonunu yaratmak için iki listeyi tek liste haline getirin (Anaprog. Bas. yükleyin ve MERGE “roufine sub” ya- zın). Programı RUN ettiğimizde yeni dosya (routine bin) saklanmış olur. Programın iki tabanlı altprogramın ilk satırında 8 byte öteye bakar. Bu yüzden altprogramın BASIC versiyonu yalnızca satır numarası ve bir REM cümlesinden ibaret olan bir satırla başlamalıdır. Bundan sonra program, “adres işareti 4 8“den, bulunmuş olan adresi çıkartarak artık belleğe alınmış olan altprogramın iki tabanlı versiyo- nu boyunca ayarlanmasını sağlar. Bu ayarlamalar programın sonu gelene kadar (adres göstergesi 0 olana ka- dar) satır satır yapılır. Öyle ki, ikili ver- siyon saklanması bittiğinde altprog- ram ana programın sonunda olmalı- dır. Kodun geri kalanı ise oldukça ba- sitfir. Bir not daha: Eğer altprogramda ve düzeltilmiş ikili versiyonda yapılan de- gişiklikler diskin üzerinde korunmak is- teniyorsa, programı yürürlüğe sokma- dan önce halihazırdaki versiyonu sil- melisiniz, yoksa program varolan çif- te değişkenli altprogramı yüklemeye kalkacaktır. Alterogram yüklemeleri konusunda GW-BASIC'teki basit yaklaşım her BA- SİC programının işine yarayabilir. Tek- nikten yararlanın ve uygulamalarınız- da örnek program birleştirmelerinde tekniğinizi geliştirin. Yazar Mike Carmichael ve Jones kuruluşları Program Planlama Servis- leri Müdürüdür. Editörün notu: Program örnekleri için BASIC kaynak kodu, Anaprog. Bas. ve Program. Yan. (routinesub) downıoa- ding için 617 861-9764'teki listeler uy- gunduür ve aynı zamanda disk üzerin- de de kullanılabilir (Sayfa 469'daki lis- te). D