Bu sayfadaki yazılar
Sayfanın metni
Sayfa 62
Disket dosyaları her zaman bir dosya ismi isterler. Teyp dosyaları için dosya ismi verilmesi gerekli değildir. Bu yüzden adresin içeriği bazen $00 olabilir. SEARCHING FOR, SAVING ve FOUND mesajlarında teyp dosya ismi 16 karakterden daha uzun olsa bile sadece ilk 16 karakter ekranda gösterilir. Teyp dosya isimlerinin 187 karaktere kadar kullanılabilmesi, makine dilinde yazılmış ufak programların dosya adıymış gibi teyp HEADER'ına yazılma imkanı verir. $00C5: Bu adreste bir kod saklanır. Saklanan kod basılan tuşun kodudur. Ancak bu kod ASCII kod değildir. Mesela O tuşuna basarsanız bu adresin içeriği $23 olur. Adresin içeriği $40'sa hiçbir tuşa basılmamış demektir.
$00C6: Bu adresin içeriği klavye tamponunda (buffer) kaç karakter olduğunu gösterir. Olabilecek en yüksek değer $0A'dır, yani 10 tanedir. $028D: Eğer SHIFT tuşuna basılmışsa adresin değeri $01'dir. COMMODORE tuşuna basıldığında adresin değeri $02, CTRL tuşuna basıldığında $04 olur. $0400: $0400-$07E7 arasında ekran hafızası yer alır. Bu adresler arasında ekranda görülen karakterlerin kodları saklanır. İstediğiniz bir karakterin kodunu bu adresler arasında bir yere POKE ederek o karakterin ekrana çıkmasını sağlayabilirsiniz. Ekran hafızasını, 2Kb'lık bir dilim halinde belleğin istediğiniz bir yerine kaydırabilirsiniz. Bunun için $D018 ve $DD00 adreslerinin içeriklerinde değişiklikler yapmanız gerekir. $07E8: $07E8-$07FF arasındaki adreslerde SPRITE'lar için saklanan bilgilerin başlangıç adresleri bulunur. $0801: $0801-$9FFF arasındaki adreslerde BASIC program yer alır. Eğer bir monitor (Makine dilinde yazılmış programları incelemek veya makine dilinde çalışmak için kullanılan bir program) vasıtası ile bu adreslere bakarsanız BASIC programınızı göremezsiniz. Bu sizi şaşırtmasın, hafızadan en iyi şekilde yararlanmak için BASIC programlar yazıldıkları gibi saklanmazlar. Her BASIC komutunu temsil eden bir kod vardır. Komutlar yerine bu kodlar saklanır. BASIC bir program satırını şu şekilde saklar: 1) İki byte (LO/HI) link adresi. Bu adres bir sonraki BASIC satırının başlangıcıdır. Programın en son satırında link adresi olarak $0000 kullanılır.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 63
2) İki byte (LO/HI) program satır numarası. Satır numarası kullanıcı tarafından verilir. Bu sayı 0 ile 63999 arasında olmalıdır. 3) BASIC komut kodları ve veriler. Bu bölüm en fazla 250 byte uzunluğunda olabilir ancak bunun sadece 80 byte'ı klavyeden girilebilir. 4) Satır sonunu belirleyen karakter: $00. Bu sayı BASIC'e satırın sonuna gelindiğini söyler. $A004-$A00C arasındaki adresler BASIC ROM'una aittir. Bu adreslere bakarsanız CMBBASIC yazısının ASCII kodlarını görürsünüz. $D800: $D800-$D80C arasındaki adresler Renk RAM'inin bir bölümüdürler. Bu adreslerde yer alan değerlerin LOW dört biti önemlidir. Çünkü renk hafızası için sadece dört bit kullanılmaktadır. Dört bit kullanarak toplam 16 ayrı renk elde etmek mümkün. Bu sayıda C64'ün bize verdiği renk sayısıdır. Bu adreslerdeki değerlerin dört biti normal olarak $0'dır. Bu değerler siyah rengin kodu olan sıfırdır.
BASIC PROGRAMLAR
BASIC dilinin en şikayet edilen özelliklerinden birisi de çok yavaş olmasıdır. Ancak iyi bir programlama tekniği kullanarak yazdığımız programların normale göre çok daha hızlı çalışmasını sağlayabiliriz. Programların daha hızlı çalışmasını değişkenler üzerinde yapacağımız uygulamalarla sağlayacağız. Ancak ilk olarak BASIC'in değişkenleri nasıl sakladığını görelim: Sayısal değişkenler programda tanımlandıkça isimleri ve değerleri BASIC programın arkasından itibaren saklanır. BASIC o ana kadar tanımlanmış değişkenlerin ismini bir tabloda tutar. Yeni bir değişken tanımlandığında değişkenin değeri ve ismi tablonun en sonuna eklenir. Programın çalışması sırasında ne zaman bir değişken kullanılsa bu tablodan değişkenin bulunması gerekir. İstenilen değişken için gerekli olan bilgi tablonun başından başlanarak sonuna doğru değişken bulunana kadar aranır. Değişkenler için tutulan bu tablo programın çalışması sırasında oluşturulduğundan ilk tanımlanan değişken tablonun en başında yer alır. Bu yüzden tablonun en başında yer alan değişkenler programın içinde en hızlı işlem gören değişkenlerdir. Eğer bir değişkeni programın başında tanımlarsanız tablonun başlarında yer alacağından BASIC tarafından kolay bulunur. Anlattıklarımızın uygulamasını görmek için iki programı yazıp çalıştırın: 10 20 30 40 50 TI$ = “000000” 60 FOR X = 1 TO 1000 80 NEXT X 90 A1 = TI: PRINT A1; “VURUŞ”, A1/60; “SANİYE”
50 numaralı satırda TI$ değişkeni ile geçen süreyi sıfırlıyoruz. 90 numaralı satırda istenilen döngünün yapılması için geçen süre veriliyor. İki sayının toplanması için geçecek zaman çok az olacağından bu işlemi 1000 kere yaptırdık. Bu programın çalışma süresi yaklaşık olarak yedi saniye alıyor. Şimdi 60-80 arasındaki satırları şu şekilde değiştirelim:
60 FOR 1 TO 1000 70B->B4C 80 NEXT A
Program bu hali ile çalışmasını yaklaşık olarak dört saniyede tamamlar. İki program hemen hemen aynı olmasına rağmen niçin ikincisi daha hızlı çalışıyor? İkinci programda tanımlanmış olan üç değişken tabloda ilk üç sırada yer alıyorlar. Buna karşın ilk programda tanımlanmış olanlar ise değişken tablosunda 24 ile 26'ncı sıralar arasındaydılar. Bu farklılık elbette alfabetik sıralamadan değil değişkenleri tanımlama sıralamasından kaynaklanıyor. BASIC'in değişkenleri ne şekilde kullandığını gördük. Programlarımızın hızlı çalışmasını sağlamak için sık sık kullanılan değişkenleri ilk önce tanımlamak programın hızlı çalışması açısından önemlidir. Örnekte programları biraz daha hızlandırmak için NEXT komutundan sonra gelen değişkeni kaldırın yani 80 numaralı satır.
80 NEXT
olsun. Bu uygulama sayesinde programın çalışma süresi biraz daha kısalır. Matematik işlemler yapan programlarda da zaman kazanmamızı sağlayacak yollar var. Mesela 53 sayısının karesini alacak bir program yazalım:
10 TI$ — “000000* 20 FOR J- 1 TO 1000 30 40 NEXT 50 AL-TI.FRİNT A1; 1/60; “SANİYE”
Programımız 1000 kere 53 sayısının karesini alacak, programın bu işlemi yapması yaklaşık olarak yedi ile sekiz saniye sürer. Şimdi 30 numaralı satırı değiştirerek programı yeniden yazalım:
10 TI$ - “000000” 20 FOR J— 1 TO 1000 30 A—b32 40 NEXT
Bu programda 53 sayısının karesini 1000 kere hesaplıyor ama bu sefer programın çalışma süresi yaklaşık olarak 55 saniyeye çıkıyor. Kare işleminde çarpma işlemini kullanarak hesaplama süresini kısaltabilirsiniz. ^ işlemini sayının karesini almanın dışında yapılacak üs işlemlerinde kullanmak daha iyidir. Örnek programı daha da hızlandırmak için 5 numaralı satıra B=0 ekleyin ve 30 numaralı satırı 30 A=B*B şeklinde değiştirin. Gerekli değişkenler tanımlanmış olduğundan program daha hızlı çalışacaktır. Şimdilik hoşça kalın...