Bu sayfadaki yazılar
Sayfanın metni
Sayfa 20
mize dönelim. Şimdi tüm bunlar ne demek oluyor? İnsanın aklına ilk önce şu soru gelebilir: Bilgisayar KOMUT sözcüklerini nasıl seçeceğini nereden biliyor? Yanıt son derece basit. Komutlar ya da (keywords) $7F ile $CB onaltılık sistem değerleri arasında değerlere sahiptirler. Return tuşuna bastığınızda, data yorum için klavye buffer'ına yollanılır. Sonra bir tarama tablosu kullanılır ve satırınızda komutlar aranır. Aranızdaki bazı dikkatli kişilerin “Ya PRINT “PRINT” yazarsam ne olacak” diye kendi kendinize sorduğunuzu duyar gibi oluyorum. Bu iki adet print ifadesi olarak yorumlanmaz mıydı? Yanıt hayırdır. Arama tablosunun görevlerinden biri de tırnak işaretlerini kontrol etmektir. Eğer bir komut tırnak işaretleri arasında ise, o zaman bir print ifadesi içinde olması gerekir. Yine örneğimize dönelim. Bellek adresi $0800 $00'ı içerir. BASIC programının doğru işlemesi için, BASIC belleğinin başlangıcından hemen önceki adres bir sıfır baytı içermelidir. Sonraki ilk bayt $17 ve $08'i içerir. Bu baytlar düşük/yüksek adres formatında link adresini temsil ederler ve bilgisayara sonraki BASIC satırının nereden başladığını söylerler. Sonraki iki bayt $0A ve $00'ı gösterir: Bu yüksek/düşük bayt formatında bir kere daha gösterilen satır numarasıdır. Sonraki bayt $97'dir. Komutların içinde bulunduğu spektrumu anımsarsanız bunun bir komut olduğunu anlarsınız. İşin aslında da bu POKE komutu için ikilik sistem karşılığıdır. Sonraki beş bayt 53200 sayısını temsil eder. Sonraki bayt ise, bir virgül olarak yorumlanan $2C'dir. Örneğin geri kalanına bakıp satır satır takip etmeye çalışın.
SATIRLARIN SONU
Bir bilgisayarın, bir BASIC programının sonuna vardığını nasıl anladığını merak ediyor olabilirsiniz. Sözünü önceden ettiğimiz link adresini anımsadınız mı? Eğer link adresinde çift sıfırlı bir bayt varsa programın sonuna geldiniz demektir. Bir BASIC programının başını ve sonunu bulabilmek için şu yerlere her zaman peek edebilirsiniz: $2D/2E ve $2B/2C. Bu sayfa sıfır yerleri VARTAB ve TXTTAB olarak bilinirler. Yeniden örneğimize dönecek olursak, $0862 sayılı yerin küçük demo programımızın sonunu gösterdiğini göreceksiniz. Baytları sayarsanız, bu küçük yedi satırlık programın 97 bayt aldığını göreceksiniz. Gördüğünüz gibi, BASIC belleği çok hızlı tüketiyor. O halde mevcut belleğin tümünü kullanabilmek için ne yapmalı? Birçok durumda bu ikinci harfi yalnızca shift edilmiş modda yazmak demektir. Bazen de ilk iki harfi yazıp, üçüncüyü shift edilmiş olarak yazmanız gerekir. Bu kuralın bir istisnası PRINT emiridir (statement). Bu ? tuşuyla kısaltılabilir. Örneğin, ?“MERHABA” yazmakla PRINT“MERHABA” yazmak arasında bir fark yoktur. P harfini izleyen bir shift edilmiş O da POKE yerine geçer. Peki tüm bunların yararı nedir? Programınızda ne kadar az satır olursa, o kadar az baytlık yer kaplarsınız. Shift edilmiş komutlar kullanmanın nedeni de, C-64 ekran editörünün bulunan en iyi editörlerden birisi olmasına karşın, bizi her program satırı (iki ekran satırı) başına 80 karakterle sınırlandırmasıdır. Yani shift edilmiş komutlar kullanarak, her program satırına daha fazla direktif sığdırabiliriz. Bellekten tasarruf etmenin diğer bir yolu da tek bir program satırına birden fazla direktif yerleştirmektir. Bunu en iyi örneklerle gösterebiliriz. Şekil 3'te yedi satırlık demomuzun yukarıdaki kolaylıklara başvurulduktan sonraki halini görüyorsunuz. Şekil 4'te de onu bellekte depolamanın yeni yöntemi var. Burada aslında tüm komutların kısaltılmış olduğunu, ama açıklık kaygısıyla normal gösterildiğini unutmayın. Şimdi baytları sayacak olursanız, 73'ü bulduğunu göreceksiniz. Kısa bir programda bile 24 baytlık tasarruf sağlayabildik. Uzun bir programda yapabileceğiniz tasarrufu düşünün bir de.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 21
DEĞİŞKEN UZUNLUKLARI
Bellekten tasarruf edebileceğimiz bir başka alan da değişkenlerimiz. Ne cins olduklarını, nasıl oluştuklarını ve bellekte nasıl depolandıklarını bilmek de önemli. BASIC dilinde üç cins değişken bulunur. Dizgi (string), tam sayı (integer) ve gerçek (real). Fonksiyon adlarını da eklerseniz dördü bulurlar. Dizgi değişkenlerinde addan sonra dolar işareti, tam sayılardan sonra yüzde işareti gelir, gerçeklerden sonra hiçbir şey gelmez. Eksik değer gerçek değerdir. Bu noktada bir değişkenin nasıl oluşturulduğunu ve bir anda nelerin dahil edilip edilemeyeceğini bildiğinizi varsayacağım. Esas amacımız bellekte nasıl depolandıklarını görmektir. Tüm değişkenler, bellekte BASIC programından hemen sonra depolanırlar ve oluşum sırasıyla depolanırlar. Ama dizgilerin iki pointer'ı vardır. Biri dizginin adresi, öbürü de uzunluğudur. Dizgiler aynı zamanda BASIC belleğinin üstünde yerleştirilir ve aşağı doğru çalışırlar. Değişkenler ya basit ya da dizinli (subscripted) olurlar. Basit değişkenler yedi bayt-
PROGRAM ADI
RKEŞE MERHABA
KISA PRG.
00010 POKE "HE
Asi TO 1
PRİNT "DEMO SONU" 68828 GOTO 828 <206) PROGRAM 5 ©6800 0850 ©8080 1 80 41 028 BA ©0 87 35 33 #808 32 38 30 20 31 3A 97 35 86 ©0910 « 33 32 38 3i 20 32 3A 99 Gi : £2 de 45 Sa 4B 45 53 45 Bi © 20 4D 45 52 40 41 42 41 8D * 22 3A Si di 31 A4 32 898 ©6838 35 SA S2 3A 99 44 45 Bö 62328 : 4D 4F 20 53 4F 4E 55 22 A0. 0340 1 00 45 14 80 a9 32 30 DF ©8348 < 00 00 90 28 26 20 20 51
lık bir üst kullanır. Bunlar sırasıyla şöyledir:
bayt değişken adını tutar. Dizgiler için, sonraki baytta dizginin uzunluğu, daha sonraki iki bayt da yüksek/düşük formattaki pointer'ı bulunur. Kalan iki tanesi kullanılmaz. Tam sayılar değer için üçüncü ve dördüncü baytları kullanırlar; geriye kalanlar hiç kullanılmaz. Gerçek ifade olarak üçüncü baytı, imi ve ondalık bölümü olarak dörtle yedi arasındaki baytları kullanır. Fonksiyon da yedi bayt kullanır. Üçüncü ve dördüncü tanıma, beşinci ve altıncı değişkene, yedinci de değerine işaret eder. Dizinli değişkenler, basitlerinin aksine, yalnızca depolama için gereken ilişkili değerleri gerektirirler. Örneğin dizgi (string) dizinleri uzunluğun yalnızca üç fazlasına ihtiyaç gösterirler. Tam sayılar da iki. Daha önceleri, bir satıra mümkün olduğu kadar çok direktif sığdırarak ve kısaltılmış komutlar kullanarak bellekten tasarruf etmenin yollarından söz etmiştim. Şimdi de BASIC programını daha hızlı çalıştırabilmeniz için bir iki ipucu. Doğallıkla, satır sayısı azaldıkça program da daha hızlı işleyecektir. Tüm önemli değişkenlerin programın başına mümkün olduğu kadar yakın olmasına gayret gösterin. Bu da arama zamanından tasarruf sağlayacaktır. Üçüncü olarak, çok fazla GOTO ve GOSUB olmamasına çalışın. Tüm bu gidiş gelişler zaman yitimine yol açacaktır. Ayrıca çok fazla DATA'nız varsa, bunları programın başına koymaya çalışın. Bu her READ komutu sırasında size zaman kazandıracaktır.