Bu sayfadaki yazılar
Sayfanın metni
Sayfa 12
C-64'ünüzde bazı BASIC komutlarının olmayışı bu işlemleri yapamayacağı anlamına gelmez. Böylesi komutların yokluğu da bir eksiklik değil, bir kazançtır. Programcılığı kendi kendine öğrenmeye çalışan biri için en ideal yöntem bol bol alıştırma yapmaktır. Bahsettiğim türden komutların fonksiyonları C-64'fe kısa programlarla yaptırılabilir. Bu çeşit programlar da ancak bilgisayarın bellek haritasının incelenmesi ve uygun çözümlerin aranması ile mümkün olur. Bundan iyi bir eğitim ve alıştırma yöntemi olacağını da sanmıyorum.
Burada C-64'te çalışmayan DELETE (sil) komutunu ele almak istiyorum. Pek çoğunuzun bildiği gibi DELETE komutu bu komuta sahip bilgisayarlarda şu kolaylıkları sağlar (kullanım biçimi markaya göre farklılık gösterse de esaslar aynıdır):
DELETE satır no: Yazdığınız numaraya sahip program satırını siler.
DELETE satır no-:Yazdığınız numaraya sahip program satırını ve onu takip eden bütün satırları siler.
DELETE-satır no: Baştan itibaren yazdığınız numaraya kadar (dahil) bütün satırları siler.
DELETE satır no.-satır no: Birincisi ikincisinden küçük olmak kaydıyla yazdığınız iki numaraya sahip komutları (satırları) ve arasında kalan bütün satırları siler.
Dökümünü verdiğim program, DELETE komutunun işlevini yerine getirmektedir.
C-64'te program satırlarını silmenin bilinen en yaygın yöntemi her satır numarasını tek tek yazıp 'RETURN' tuşuna basmaktır. Eğer birkaç satır değil de uzun satır bloklarını programınızdan çıkartacaksanız bu yöntem oldukça uzun ve yorucu olacaktır.
SİLME PROGRAMI oldukça kısa ve kullanışlıdır.dökümde uzun görünmesi açıklama maksadıyla kullandığım 'REM'lerden dolayıdır. Siz bunları yazmak zorunda değilsiniz.
Kullanılması:
Programı dökümdeki gibi yazarak disk ya da kasete kaydedin. Kullanma ihtiyacı duyduğunuzda şu işlemleri yapın:
Bilgisayarınızın belleğinde başka program olmamalıdır. Eğer bu programı kullanmak istediğinizde bilgisayarınız açıkçası ve bellekte başka program varsa 'NEW' yazarak silin. En
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 13
iyisi bilgisayarı kapatıp açmak ya da SYS 64738 yazarak bilgisayarı 'COLD START' durumuna getirmektir.
Şimdi içinden satırları silmeyi istediğiniz programınızı yükleyin. Bu programınızın satır numaraları SİLME PROGRAMI'ninkinden büyük olmamalıdır (Bildiğiniz gibi C-64'te kullanabileceğiniz en büyük satır numarası 63999'dur. SİLME PROGRAMI'nın satır numaraları 63000'den başlar. Büyük bir ihtimalle programınızda daha küçük numaralar kullanmışsınızdır. Eğer durum böyle değilse programınızdaki satırlardan SİLME PROGRAMI'ndaki satır numaralarından büyük numaraya sahip olanları uygun numaralar vererek değiştirin.) Programınızı yükleyince derginin birinci sayısında anlatılan iki Programı Birleştirme yöntemiyle SİLME PROGRAMI'nı programınıza ekleyin. Derginin birinci sayısına sahip olmayanlar ve baskı hatalarını düzeltmemiş olanlar için bu yöntemi tekrar açıklamak uygun olacak.
Yöntemin burada biraz farklı olarak açıklayacağım biçimde kullanılması daha garantili olacaktır:
Satırlarını sileceğiniz programınızı yükledikten sonra PRINT PEEK (43), PEEK (44) yazarak 'RETURN'e basın ve ekrana çıkan iki rakamı bir kenara not edin. (Genelde bu iki rakam 1 ve 8 olacaktır.) Bu işlemi yaptıktan sonra aşağıdaki 1 ve 2 numaralı satırları programınıza girin. (umarım programınızda bu iki numaraya sahip komut yoktur. Varsa programınızdaki satırlara uygun biçimde yeni numara verin ya da fazla uzun değillerse bütün işlemleri bitirdikten sonra o iki satırı yeniden yazmayı tercih edebilirsiniz.):
Bu satırları girdikten sonra 'RUN' yapın. READY yazısı çıkınca başka bir işlem yapmadan 'SİLME PROGRAMI'nı yükleyin. Yükleme bitince daha önce bir kenara not ettiğiniz rakamlardan birincisini 43'e ikincisini de 44'e 'POKE'layın. (POKE 43,1:POKE 44,8 gibi). İki program birbirine eklenmiştir.
Artık silme işlemlerini yapabilirsiniz.
RUN 63000 yazıp 'RETURN'e basın. Ekran silinecek ve kullanma talimatı ekrana çıkacak, ardından başlama ve bitim değerlerini isteyen input ifadesi çıkacaktır. Sileceğiniz blokun başlangıç (ilk) satır numarasını ve son satır numarasını aralarına virgül koyarak yazıp 'RETURN'e basın. Blok silinince silmeye devam edip etmeyeceğiniz sorulacaktır. E ile cevap verirseniz aynı işlemleri tekrarlayarak başka blokları da silebilirsiniz. H ile cevap verirseniz SİLME PROGRAMI kendi kendisini de silerek programınızın geriye kalan bölümünü LIST'leyecektir.
Dikkat etmeniz gereken konular:
- Başlama ve bitim değeri olarak programınızda mevcut olmayan satır numaralarını vermeyin.
- SİLME PROGRAMI'nı kendi seçtiğiniz satır numaraları ile yazdıysanız GOTO ve IF......THEN ifadelerinden sonraki numaraları da değiştirmeyi unutmayın.
Açıklama:
C-64'ün belleğinde sekizer bitten oluşan baytlar vardır. Bunlar YER (Location) olarak adlandırılırlar. YER'ler 0 - 65535 arası değerlerle ifade edilirler. (onaltılı sayı sisteminde 0 - FFFF) 2048 - 40959 arasında kalan YER'lerde yazdığımız BASIC programları depolanır. 2049 ve 2050 programın başlangıcını belirtir. 2051'den itibaren program satırları sıralanır.
Her program satırı şunları içerir:
- Bir sonra gelen satırı işaret eden iki baytlık link adresi.
- Satırın kendi numarasını belirten iki baytlık değer.
- Program satırı içindeki komutların rakam karşılıkları ile diğer karakterlerin ASCII karşılıkları bulunan baytlar.
- Satır sonunu belirten ve 0 değerini içeren bayt.
Şimdi bir satırı programdan silinince neler oluyor bir göz atalım:
Satır numarasını yalnız başınıza yazıp 'RETURN'e basınca, bilgisayar yazdığınız numaraya sahip satırın bellekteki ilk dört baytını ele almakta ve bu baytlardan bir sonraki komut satırının başlangıç adresini öğrenmektedir. Sonra da silinecek komut satırının başlangıcı ile bu adresin gösterdiği YER arasında kalan bütün baytları temizlemektedir. Böylece satır silinmiş olmaktadır.
SİLME PROGRAMI'mız ise bu işi benzer biçimde ve geniş çaplı olarak yapmak suretiyle birden fazla satırı silmektedir. Bunu yapmak için de silinecek blokun ilk satırını bellekte bulmak-ta, sonra da blokun son satırından bir sonraki satırın adresini tespit etmektedir. Bu tespitleri yapınca blokun ikinci satırını gösteren iki baytı bulduğu bu adresi 'POKE'lamaktadır. Daha sonra ilk satır numarasını yazıp END ile direkt (klavye) moduna geçip bu numaraya 'RETURN' tatbik etmektedir. Yukarıda da belirttiğimiz gibi bir satır numarasını yazıp 'RETURN'e basmak o satır ile bir sonraki satır arasındaki her şeyi silmektedir. Program, blokun ilk satırındaki iki bayta (bir sonraki satırı gösteren baytlar) bloğun son satırından sonraki satırın başlangıç adresini POKE'ladığı için blok komple silinir.
Dökümdeki REM ifadeleri bu işlemleri yerine getiren komut satırlarını açıklamaktadır. Anlaşılmasını kolaylaştırmak açısından bazılarını biraz daha detaylı açıklayacağım.
63095 no.lu satır:
63235 ile müşterek olarak bir kontrol değişkeni (AL) kullanarak programın kendi kendisini ne zaman sileceğini belirtir.
63130 no.lu satır:
BE değişkenine program başlangıç link adresinin 'Low bayt değerini içeren YER'in numarasını vermektedir.
63135 no.lu satır:
PEEK (BE+2) ile 2050'de bulunan program ilk satır link adresinin Low bayt değerini bulmakta, PEEK (BE+3) ile de 2051'de bulunan High bayt değerini bulmaktadır. High bayt değerini 256 ile çarpıp neticeyi Low bayt değeriyle toplamak sureti ile programın ilk satırının numarasını bulmaktadır. İleride BA ve BI değerleriyle mukayese yapabilmek için de bu numarayı SN değişkenine vermektedir.
63145 no.lu satır:
Bulunan SN değerinin silinecek bloğun ilk satırının numarasına eşit olup olmadığını mukayese etmektedir. Eşitse YER değişkenine BE değişkeninin o anki değeri vermektedir.
63155 no.lu satır:
SN değerinin silinecek bloğun son satırının numarasına eşit olup olmadığını kontrol etmekte ve eşitse 63200 no.lu satıra geçmektedir.
63160 no.lu satır:
63135'teki yöntemi kullanarak BE değerini bir sonraya kaydırmaktadır.
63170 no.lu satır:
63135'e gelerek yeni BE değerini aynı işlemlere sokmaktadır. SN=BI olana kadar bu döngü devam etmektedir.
63200 no.lu satır:
63145'te belirlenen YER değişkenine (yani blokun ilk satırının bulunan Bir Sonraki Satır adresinin bulunduğu yere) BE değişkeninin en son bulunan değerini (yani bloğun son satırından bir sonraki satırın başlangıç yerinin adresini) POKE'lamaktadır.
63210 no.lu satır:
63200 satırının yaptığı POKE adresin Low baytıdır. Bu satır ise YER ve BE değişkenlerini birer artırarak adresin High baytını POKE'lamaktadır.
Bu işlemlerden sonra sıra direkt (klavye) modunun programın tarafından taklid edilmesine gelir. Bunu nasıl yapabileceğimize bakalım:
biz klavyeden bir tuşa bastığımızda bu klavye Buffer'ı denen bir bellek bölgesinden geçer. Bilgisayar başka bir