Fonksiyan C-6d Basic-Başlarısıcı 43,44 Değişken-Başlangıcı 4546 Program-Sonu Basic-Tavanı bıra-Başlangıcı 47,48 Sıra-Sonu * İ 409,50 Dizi-Tabanı 51,52 Bellek-Sonu 55,56 Adres İçerik C-128 Cot -128 4546 1,8 1,28 4748 8 0 4 4624,4625 3,28 4626,4627 0,255 49,50 3,8 04 S 1.52 3,8 0 4 57,54 0,160 0,255 57,58B 0,160 0,255 Tablo 1. Commodore Basic'te Kullanıları Pointer'lar. işlemci tarafından dircki olarak ula- şılabilen 65536 baytlık bellekten çok daha fazlasına sahiptirler. C-64 Ba- sic yorumcu ve kernal'ın depolandı- Bi ROM biçiminde ilave belleğe sa- hiptir. C-128'e gelince, iki 65536 baytlık RAM deposuna ve C-â4'den daha fazla ROM'a sahiptir. İki bil- gisayarda da mikroöjşlemcinin ekstra belleğe ulaşmasına yardımcı olan bellek-idare çipleri biçiminde ilave donanım vardır. C-64'te, bir Basie programirnın yo- rumu, mikröişlemcinin direktiflerini bir bank'te ROM'dan alırken, diğet bank'in RAM'indeki Basiği'de mani- püle cttiği karmaşık bir süreçtir. C- 128 sonsuz bir üçgen içerir: Bir kö- şeyi Basiç ROM, RAM'da depolanan Basic programı ikinci bir küşe ve RAM'da depolanmış, Basic tarafın- dan kullanıları sayısal ve dizi datala- rı da üçüncü köşeyi oluştururlar. Bu donanım ve yazılımı manipülasyonu- dur ki C-6d ve C-128'i tüm zatnanla- Tın cn gelişmiş &-bitlik bilgisayarları arasına sokmuştur. İncelediğimiz adresler, bir bellek- tecki Başic program depolama bülge- sinin başlangıcını temsil eder, Basic programının sonunda da, bilgisaya- rıtı bildiği bir adreste olduğunu tah- min cdebilirsiniz. Böylece programı- nız için ne kadar alan kalmış olduğu- nu anlayabilirsiniz. Bu doğru ama bir Basic programı direktiflerin çok öte- sinde bir şeydir. Çalışan bir program sayısal ve özel dataları işlediğinden, bunlar da kendileri için depo alanı ge- rektirir. Bu nedenle Basic yörumçu- su bunun için de alan ayırmalıdır. Tablo 1'de Basit'in her şeyi izle- mek için kullandığı pointer'ların bir listesi vardır. Bu pointer'ların sıralanı- mıiş İçerikleri bilgisayarın açılışından ya da resetlemeden sonraki değerle- ridir. Aymı zamanda herhangi bir program girilmeden ya da yüklenme- den ya da değişkenler belirlenmeden önceki değerlerdir. C-128 için bu po- 36 inter'larda depolanmış adresler özel yorum gcerektirir. Basiğin Başlangıcı, Programın Sönu ve Basic tavanı po- inter'ları Bark Ö RAM'inde adresler içerirler. Kalan pointer'lar bank | RAM'de yerleştirilmiş adreslere sa- hiptir, Bazı Basic kormutları bu pointer'- ların içeriklerini direkt olarak etkile- yebilir. Bunu tam tersine de içerikle- ri amaçlarınıza uygun olarak mani- püle edebilirsiniz. Örneğin RAM'in bazı kısımlarını sprite, bit-mapped grafik vc makinc dili programları için ayırmak isteyebilirsiniz. BELLEK İDARESİ Şimdi Basiğin bellek kaynaklarını nasıl manipüle ettiğini inceleyeceğiz. C-128 ve C-âd ayrı ayrı cle alınacak, çünkü bellek kullanımları oldukça farkediyor. Tablo ikide C-6d'den başlayarak Basic'te adres yerlerinin dağılırmıı gösteriyor. Basic program depölama alanının dört kısını öldü- ğuna dikkat edin. Her bölümün başı ve sonü yukarda sözünü ettiğim po- inter'larda depolanmıştır. FRE fonksiyonuyla başlayalım. Basic programı ya da data depolan- ması için kaları aları temsil cden bi- 0-1023 Sistem RAM 1024-2047 — Ekran RAM 2048-40959 - Basic program cposu: Dizi Data Sıra Data Değişken Data Program Kodu 40960-49151 Basiç ROM 49152-33247 Serbest RAM 53248-57343 Girdi/Çıktı donanım Renk Belleği Karakter Oluşturucu 37344-65835 Kernal Rom Tablo 2.C-64 Belleğinin Basic Yerleşimi rer değer verir. Önu şöyle deneyin: PRIİNT FRE (ü) Bu sılır yerine her şeyin konulabi- lcceği temsili bir değişken, Elinizde negatif bir sayı bulunması büyük ola- sılıktır, bu da basitçe 32767 bayttan daha fazla serbest bayta sahipsiniz demektir. FRE tarafından verilen de- Ber ikt baytlık bir tam sayıdır ve Ba- sic yalnızca signed (işaretlenmiş) iki baytlık tam sayıları danıdığı için sa- nucu negatif olarak yorumlar. Bunu düzelimek için şunu girin: PRİNT FRE(0)4 65536 Ya da PRIİNT FRE(0) 4 2116 Burada FRE'nin yaptığı Sıra Sonu 4 1'deki polnter'ın değerini Dizi tabanı polinter'inin değerinden çıkar- maktır. RE'nin verdiği değeri bu iki polnter'in içerikleriyle oynayarak de- Bişterebilirsiniz. RAM'in bir kısmını başka bir amaç, örneğin bir makine dili subru- tini ya da bit-map grafik ckranı için ayırmak daha da yararlı olabilirdi. Örneğin Bellek-Sonu pointer'ını şu- nunla değiştirin: POKE 56,128 Bu POKE komutlarınınm ikincisine alternatif olarak bir CLR komutu kullanabilirsiniz. Dizi-Tabanı poin- ter'ını Bellek-Tavanı pointer'ı ile eşit- lemenin yanı sıra, CLR Sıra-Sonu * | pointer'ını ve Sıra-Başlangıcı poin- ter'ini Değişkenlerin-Başlarığıcı poin- ter'ıyla da eşitler. Sonuçta tüm prog- ram değişkenleri kaybölür ama prog- ram bellekte kalır. Eğer CLR çalışan bir programdan uygulanırsa, tüm de- gişkenler resetlenir. For-Next ve Go- Sub referansları kaybolur ve gir- di/çıktı etkinliği engellenir, dosyalar engellenir (ama kapatılmaz) ve klav- ye 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 cdin, onu ihtiyaç duyduğunuz alan kadar artlırın ve CLR komutunu kullana- rak diğfer pointer'ları da buna uygun bir şekilde ayarlayın. Ayrılan alanı is- tediğiniz data ile doldurabilirsiniz. Sonraki Savc komutu yalnızca prog- tamı saye etmekle kalmayacak prog- ram sonunda rezervc ettiğiniz bellek içeriklerini de save edecektir. Son ola- rak Basic-Başlarıgıcı bir miktar yuka- riya çıkarılarak program başlamadan önce bir miktar yer ayrılabilir. Örne- ğin 1K'yi yerleştircbilmek için, şunu gitin: