Commodore sayı 44, sayfa 56

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 56

Fonksiyon C-64 Basic-Başlangıcı 43,44 Değişken-Başlangıcı 45,46 Program-Sonu Basic-Tavanı Sıra-Başlangıcı 47,48 Sıra-Sonu 49,50 Dizi-Tabanı Bellek-Sonu 55,56

Adres İçerik C-128 C-64 C-128 45,46 1,8 1,28 47,48 3,8 0,4 4624,4625 3,28 4626,4627 0,255 49,50 3,8 0,44 51,52 3,8 0,4 57,54 0,160 0,255 57,58 0,160 0,255 işlemci tarafından direkt olarak ulaşılabilen 65536 baytlık bellekten çok daha fazlasına sahiptirler. C-64 Basic yorumcu ve kernal'ın depolandığı ROM biçiminde ilave belleğe sahiptir. C-128'e gelince, iki 65536 baytlık RAM deposuna ve C-64'den daha fazla ROM'a sahiptir. İki bilgisayarda da mikroişlemcinin ekstra belleğe ulaşmasına yardımcı olan bellek-idare çipleri biçiminde ilave donanım vardır. C-64'te, bir Basic programının yorumu, mikroişlemcinin direktiflerini bir bank'te ROM'dan alırken, diğer bank'in RAM'indeki Basiği manipüle ettiği karmaşık bir süreçtir. C-128 sonsuz bir üçgen içerir: Bir köşeyi Basic ROM, RAM'da depolanan Basic programı ikinci bir köşe ve RAM'da depolanmış, Basic tarafından kullanılan sayısal ve dizi dataları da üçüncü köşeyi oluştururlar. Bu donanım ve yazılım manipülasyonudur ki C-64 ve C-128'i tüm zamanların en gelişmiş 8-bitlik bilgisayarları arasına sokmuştur. İncelediğimiz adresler, bir bellekteki Basic program depolama bölgesinin başlangıcını temsil eder, Basic programının sonunda da, bilgisayarın bildiği bir adreste olduğunu tahmin edebilirsiniz. Böylece programınız için ne kadar alan kalmış olduğunu anlayabilirsiniz. Bu doğru ama bir Basic programı direktiflerin çok ötesinde bir şeydir. Çalışan bir program sayısal ve özel dataları işlediğinden, bunlar da kendileri için depo alanı gerektirir. Bu nedenle Basic yorumcusu bunun için de alan ayırmalıdır. Tablo 1'de Basic'in her şeyi izlemek için kullandığı pointer'ların bir listesi vardır. Bu pointer'ların sıralanmış içerikleri bilgisayarın açılışından ya da resetlemeden sonraki değerleridir. Aynı zamanda herhangi bir program girilmeden ya da yüklenmeden ya da değişkenler belirlenmeden önceki değerlerdir. C-128 için bu pointer'larda depolanmış adresler özel yorum gerektirir. Basiğin Başlangıcı, Programın Sonu ve Basic tavanı pointer'ları Bank 0 RAM'inde adresler içerirler. Kalan pointer'lar bank 1 RAM'de yerleştirilmiş adreslere sahiptir. Bazı Basic komutları bu pointer'ların içeriklerini direkt olarak etkileyebilir. Bunu tam tersine de içerikleri amaçlarınıza uygun olarak manipüle edebilirsiniz. Örneğin RAM'in bazı kısımlarını sprite, bit-mapped grafik ve makine dili programları için ayırmak isteyebilirsiniz.

Tablo 1. Commodore Basic'te Kullanılan Pointer'lar.

BELLEK İDARESİ

Şimdi Basiğin bellek kaynaklarını nasıl manipüle ettiğini inceleyeceğiz. C-128 ve C-64 ayrı ayrı ele alınacak, çünkü bellek kullanımları oldukça farklıdır. Tablo ikide C-64'den başlayarak Basic'te adres yerlerinin dağılımını gösteriyor. Basic program depolama alanının dört kısmı olduğuna dikkat edin. Her bölümün başı ve sonu yukarıda sözünü ettiğim pointer'larda depolanmıştır. FRE fonksiyonuyla başlayalım. Basic programı ya da data depolanması için kalanı temsil eden bi-

0-1023 Sistem RAM 1024-2047 — Ekran RAM 2048-40959 Basic program deposu: Dizi Data Sıra Data

Değişken Data Program Kodu 40960-49151 Basic ROM 49152-53247 Serbest RAM 53248-57343 Girdi/Çıktı donanım Renk Belleği Karakter Oluşturucu 57344-65535 Kernal Rom

Tablo 2. C-64 Belleğinin Basic Yerleşimi

ter değer verir. Onu şöyle deneyin: FRE(0) Bu sıfır yerine her şeyin konulabileceği temsili bir değişken. Elinizde negatif bir sayı bulunması büyük olasılıktır, bu da basitçe 32767 bayttan daha fazla serbest bayta sahipsiniz demektir. FRE tarafından verilen değer iki baytlık bir tam sayıdır ve Basic yalnızca signed (işaretlenmiş) iki baytlık tam sayıları tanıdığı için sonucu negatif olarak yorumlar. Bunu düzeltmek için şunu girin: PRINT FRE(0) + 65536 Ya da PRINT FRE(0) + 2116 Burada FRE'nin yaptığı Sıra Sonu 49,50'deki pointer'ın değerini Dizi tabanı pointer'ının değerinden çıkarmaktır. FRE'nin verdiği değeri bu iki pointer'in içerikleriyle oynayarak değiştirebilirsiniz. RAM'in bir kısmını başka bir amaç, örneğin bir makine dili subrutini ya da bit-map grafik ekranı için ayırmak daha da yararlı olabilirdi. Örneğin Bellek-Sonu pointer'ını şununla değiştirin: POKE 56,128 Bu POKE işlemine alternatif olarak bir CLR komutu kullanabilirsiniz. Dizi-Tabanı pointer'ını Bellek-Tavanı ile eşitlemenin yanı sıra, CLR Sıra-Sonu 49,50 pointer'ını ve Sıra-Başlangıcı pointer'ını Değişkenlerin-Başlangıcı pointer'ıyla da eşitler. Sonuçta tüm program değişkenleri kaybolur ama program bellekte kalır. Eğer CLR çalışan bir programdan uygulanırsa, tüm değişkenler resetlenir. For-Next ve Go-Sub referansları kaybolur ve girdi/çıktı etkinliği engellenir, dosyalar engellenir (ama kapatılmaz) ve klavye ve ekran etkin girdi/çıktı araçları haline gelirler. Bir Basic programının sonunda yer ayırmak da mümkündür. Program yüklendikten sonra, Değişkenleri-Başlangıcı'nın içeriğini kontrol edin, onu ihtiyaç duyduğunuz alan kadar arttırın ve CLR komutunu kullanarak diğer pointer'ları da buna uygun bir şekilde ayarlayın. Ayrılan alanı istediğiniz data ile doldurabilirsiniz. Sonraki SAVE komutu yalnızca programı save etmekle kalmayacak program sonunda rezerve ettiğiniz bellek içeriklerini de save edecektir. Son olarak Basic-Başlangıcı bir miktar yukarı çıkarılarak program başlamadan önce bir miktar yer ayrılabilir. Örneğin 1K'yi yerleştirebilmek için, şunu girin:

Klavyeyle gezinmek için ← ve → tuşları.