Bu sayfadaki yazılar
Sayfanın metni
Sayfa 24
MOD'lar aracılığıyla BASIC'in bellekte nasıl durduğunu incelemekle başlayalım. Bir BASIC programı, 43-44 adreslerinde low-high (alçak-yüksek; $0801 için $01 $08 şeklinde) formatında bulunan adresten başlar. Bu adresten bir önceki adreste bulunan (genelde $0800) değer 0 değilse ne programınız çalışır, ne de NEW komutu işler. (Buradan sonra normalde olduğu gibi 43-44 adreslerinde $0801 olduğunu düşünerek adresleri buna göre ayarlayacağım. Diğer durumlar için biraz kafa yormanız yeterlidir.) $0801-$0802 adreslerinde ikinci satırın başladığı adres alçak-yüksek bayt formatında tutulur. Yani ilk satır $0801-$0812 arasını kaplıyorsa bu iki adres $0813 adresini gösterir. $0803-$0804 adreslerinde satır numarası alçak-yüksek bayt formatında tutulur. Bu sebeple satır numaralarınız 63000'lere kadar çıkabilir. $0805 adresinden sonra BASIC programınızın baytlarına rastlayabilirsiniz. Ama komutlar özel olarak kodlanarak saklanır burada. Yani PRINT komutunu yazıp $0805'ten sonrasını incelerseniz, PRINT'in ASCII kodu olan $50, $52, $49, ...'ya rastlamazsınız. Bunların yerine $99 kodlu tek bir bayt PRINT'i temsil eder. Satır sonunu belirtmek için bir adet $00 kullanılır. İkinci satır bu $00'dan sonra başlar ve aynı yapıya sahiptir. Bu zincirleme liste $00 $00 $00'a rastlanana kadar devam eder. Bu üç sıfır, BASIC programının sonunun geldiğini bilgisayara bildirir. Yani bir satırın yapısını özetlersek: 1. ve 2. bayt: Sıradaki satırın bellekteki yeri. 3. ve 4. bayt: Satır numarası. 5. bayt ve sonrası: BASIC programı ve kodlar. Son olarak da bir adet (son satıra üç) $00. İsterseniz her şeyi bir de örnek üzerinden inceleyelim. Örneğimiz iki satırdan oluşuyor: 10 REM PROGRAM-I 20 PRINT “PROGRAM-I” Programın bellekte nasıl durduğunu görmek için bir göz atın isterseniz. Gördüğünüz gibi ilk iki bayt $0811 adresini gösteriyor ($11 $08). Yani ilk satır $0810'da bitiyor. Ve ilk satır numarası 10 ($0A $00: $000A — 10). Daha sonra REM'in kodu olan $8F geliyor. Bir boşluktan ($20) sonra PROGRAM-I'in ASCII kodları ($50 $52 $4F $47 $52 ...) yer alıyor. Ve $0810'da yer alan $00 ile satır sona eriyor. Aynı yapıyı ikinci satırda da gözlüyoruz. Üçüncü satır adresi olarak $0822 gösteriliyor, satır numarası 20. $0815-$0821 arasında gerekli BASIC kodları yer alıyor. $0821 adresinde yer alan $00 satırın sonunu belirtiyor. $0822 adresinde bulunan $0000 adresi ($00 $00) BASIC programının bittiğini gösteriyor.
Teknik bilgi yeter!
Yapacağımız koruma işlemi aslında daha önceleri de kullanılıyordu. Özellikle SIMONS' BASIC'de istediğiniz satırların başına DISAPA (argo DISAPPEAR — yok ol) yazdıktan sonra, direk modda SECURE 10 yazarak bu satırların satır numarası dışında yok olmasını sağlayabilirsiniz. Ama bu satırları geri almanın yolu yoktur. Gizlenmiş bir satıra bakarsanız (demin anlattığım sistemle) ilk baytının $00 olduğunu görürsünüz. Yani bilgisayar
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 25
ÖĞÜT 0809
08 AF A7 06 AR AT 0821 00 00
SET PROGRAM PROGRAM || PROGRAM PROGRAM:PROGRAM SONU
AN O
SHOPPING yarınızı bariz bir biçimde dolandırıyorsunuz. Programı listelemeye çalışan rutin, buradaki $00'ı görür görmez bu satırın o noktada bittiğini sanıyor ve listelemeye satırın ilk iki baytının gösterdiği adresten devam ediyor. Oysa programı çalıştıran rutin için (RUN) bu bayt, satırın bittiğini ve gelecek dört baytı atlamasını söyleyen bir işaret yalnızca. Yani RUN komutu satır bitince ilk iki baytta gösterilen adresten değil, biten yerin dört bayt ilerisinden devam ediyor programı çalıştırmaya. İşte biz bu noktada olaya el koyacağız. LIST rutininin gösteremediği fakat RUN rutininin çalıştırabildiği satırlar yaratacağız. Bunu yapmak için, gereken satırın başına bir sıfır ve dört gereksiz bayt koyacağız. Bu sıfırı gören LIST rutini doğrudan doğruya diğer satıra atlayacaktır. Oysa RUN rutini sıfırı görünce dört gereksiz baytı atlayacak ve satırı çalıştıracaktır. Bu sayede programımızı meraklı gözlerden gizleyebiliriz. Ama bu işi elle yapmanın (hele uzun programlarda) canınızı çıkartabileceğini düşünerek, size bir de program hazırladım. Program bu gereksiz dört baytı bir şifre olarak kullanıyor ve satırları bu şifreye göre gizliyor. Daha sonra kullanıcı kilitli satırları açması için diğer programı çağırıyor (şifre vererek tabii ki). Eğer bu şifre gizli bir satırdaki şifreyle tutuyorsa bu satır görülebilir hale geliyor. Gerekli incelemeleri yaptıktan sonra tekrar şifre vererek gizleyebilirsiniz bu satırları. Programı kullanabilmek için ilk olarak PROGRAM-?'yi MDE kullanarak yazın ve kaydedin. Daha sonra bilgisayarınızı kapatıp açın ve bu programı yükleyin. NEW dedikten sonra gizlenecek kısımları olan BASIC programınızı yükleyin ve gizlenecek satırların başına yana ok (klavyede sol-üst köşede bulunur) işaretini ve dört adet “iki nokta üstüste” işaretini ekleyin. Bu işlemden sonra programınız çalışmaz, çünkü bu satırlarda SYNTAX ERROR verir. Bu yüzden RUN komutunu kullanmayın. Gerekli satırların hepsinin başı-
na bu beş işareti ekledikten sonra:
SYS49152, “ŞİFRE” komutunu girin. Dikkat: şifre kelimesi dört harften büyük olmasın, problem yaratabilir. Dört harften küçük şifreler kullanabilirsiniz. Artık istediğiniz satırlarınız gizlenmiş olacaktır. İsterseniz bir grup satırı bir şif-