Bu sayfadaki yazılar
Sayfanın metni
Sayfa 19
Tabii ki ekranın sol-üst köşesinin koordinatının 0,0 olduğunu kabul etmelisiniz bu formülü kullanmak için. $07E8-$07F7 arasında geçerli bir veri yoktur. İsterseniz üç-dört baytlık bir data alanı olarak burayı kullanabilirsiniz. $07F8-$07FF arasında, 0. Sprite'tan başlamak üzere 8 SPrite'ın grafik datalarının adresini belirleyen bayt yer alır. Bu baytı 64'le çarparsanız Sprite'ın grafik datalarının bellekteki adresini hesaplayabilirsiniz. Şu anda sprite konusunun detaylarına girmeyeceğim. Kursumuzun ilerleyen bölümlerinde bu konular da yer alacak. $0800-$9FFF arasında BASIC programı ve değişkenler yer alır. bu bölgenin ayrıntılı bir açıklamasını “ROM'unuzu kullanın” yazı dizisinde yapmıştım. İhtiyacı olanlar o yazıya bakabilirler. $A000-$BFFF arasında BASIC yorumlayıcısının ihtiyacı olan makine dili rutinler yer alır. Bu bölgeye kısaca BASIC ROM adı verilir. Burada yer alan rutinlerden kullanılabilecek olanlarını da kursumuzun ilerleyen bölümlerinde vereceğim. $C000-$CFFF arası tamamen kullanıcıya ayrılmış boş alandır. Ama VIC'in özel (ve garip) tasarımından dolayı bu bölgeyi grafik için kullanmak oldukça zordur. Bu yüzden genelde program kodu ve datası için ideal bölge olarak görülür. Biz de hemen hemen tüm programlarımızı bu bölgeye yazacağız. BASIC, POKE komutu dışında hiçbir yolla bu bölgeye erişmez. Yani buradaki datalarınızın yanlışlıkla silinmesi diye bir şey söz konusu bile değildir. Şu anda bu alan size küçük görünebilir. Ama hiç tasalanmayın, bu bölgeyi dolduracak kadar büyük bir program tasarlamak için kursumuz bittikten sonra bile oldukça çok çalışmanız gerekecek.
adresleri VIC yardımcı çipine ayrılmıştır. Ama VIC'in sadece 46 re: gister'ı olduğu için $DO40 adresine eriştiğinizde (bu adrese yazdığınızda ya da bu adresi okuduğunuzda) doğrudan doğruya $2D000'a erişmişsiniz gibi işlem yapılır. Aynı şekilde $DO80, $DOCO, $D100, ... adresleri de aynıdır. Kısca VİC kullanılırken IK gibi görünen bellek alanı aslında 64 baytlık 16 bölge olarak çalışır (Uuups. Kafanızı karıştırdım galiba). En iyisi $DI160 gibi adreslere değerler yazın ve çerçeve renginin değiştiğini gözleyin. Bu sayede $DO00-$DO3F bölgesinin kopyalarının $DO40-$D3FF arasını nasıl doldurduğunu gözünüzle görebilirsiniz.
$D400-$D7FF adresleri de SID çipine aittir. SID'in de sadece 28 registeri olması (ve 28 adrese ihtiyacı olması) sebebiyle renk RAM'i bulunur. Bu adreslerin en başında yer alan $D800, yani 55296, sol üst köşede yer alan harfin (karakterin) rengini belirler. Bu bölge de aynı karakter ekranı gibi düzenlenmiştir. İstediğiniz X, Y koordinatlarında yer alan karakterin rengini belirlemek için kullanacağınız adresi de deminki formüle benzer bir formülle hesaplayabilirsiniz:
ADRES=
$DC00-$DCFF arasındaki bölge de CIA çiplerinin ilkine ayrılmıştır. Bu alanda yer alan adresler yardımıyla klavyeyi ve joystick portlarını okuyabilirsiniz. Bu çip register yönünden en fakir olanıdır. Sadece 16 registere sahip olduğu için bol bol adres tekrarı yapar.
$DD00-$DDFF adresleri de CIA çipinin ikincisine aittir. Bu çip de 16 registerlidir ve kaset ile disk iletişimi konusunda uzmandır.
$DE00-$DFFF arası ne size ayrılmıştır, ne de bilgisayar tarafından kullanılır. Eğer bir tasarımcının kendi çipleri için adres alanına ihtiyacı olursa burayı kullansın diye ayrılmış bellek alanıdır burası. Bazı kartuşlar programlarını burada saklar. Şu anda hiçbir işinize yaramaz.
$E000-$FFFF adresleri de BASIC ROM'a sığmayan yorumlayıcı rutinlerinin birazının ve giriş çıkış rutinlerinin tamamının saklandığı bellek alanıdır. KERNAL ROM olarak bilinir. Kullanıcıdan bilgi girmek istediğiniz zaman, ya da program yüklemeniz gerektiğinde bu adreslerde yer alan rutinlerin kapısını aşındırmanız gerekecek. Yeri geldikçe KERNAL ROM'dan bilgiler de vermek niyetindeyim. Tablo 2'yi kullanarak adreslerin tam olarak belleği nasıl parçalara ayırdığını görebilirsiniz. Bu yazıda verdiğim bu bellek haritasının tek amacı sizin programlarınız için kullanılabilecek seviyeye geldikçe detaylı bellek haritaları da yazımızda yer alacak. Gelecek ay makine dili komutlarının en basitleriyle kursumuzun en eğlenceli kısmına girişeceğiz. Umarım sizin de hoşunuza gider. Bu aylık hoşçakalın.
Hatasız Kul Olmaz:
Bu dergide yazı yazdığım iki sene boyunca hatasız yayınlanan bir yazım neredeyse hiç olmadığı için, bu yazının sonuna bir hata köşesi açmaya karar verdim. Bulduğunuz her türlü hatayı bana bildirmeniz sizin ve arkadaşlarınızın yararına olacaktır. Gelelim geçen sayının (77) hatalarına: 1) 17. sayfada yer alan tabloda yazılmış. Bu “53901” olacaktı. 2) 18. sayfadaki tabloda yer alan “250 — $FA”'nın ne olduğunu anlamak için çok uğraşmayın. Doğrusu “$FA” olacaktı. 3) 19. sayfanın başındaki formüle fazladan bir “2” girmiş. Siz onun üstünü karalarsınız. 4) Aynı kolonun en altındaki formülde de “B” ile “2” arasına “4” girmiş. Doğrusu olacaktı. 5) Geçen sayının yıldızı burada işte: Makine dili yazısında tablo unutulmuş. BASIC ile Makine dilinin hızlarını karşılaştıran tablo bu sayfalarda yer alacak (inşallah). 6) 26. sayfada yer alan resimlerin ilkinin ELECTRIC'e ait olduğu söylenmiş. Aslında bu grafiği ben çizmiştim... Şaka, şaka! 7) Program Döküm Eki'nin 23. sayfasında bulunan INVERT/H/K programının benle ve yazılarımla hiçbir alakası yoktur. Sanırım bir arkadaşın programı benimkiler arasına karışmış. Kendisinden dergimiz adına özür diliyorum. Geçen sayıda bulabildiğim hatalar sadece bu kadar. Umarım hata sayısı gelecek dergilerde daha az olur.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 18
Bilgisayarın Hızını Ne Belirler? Sık sık “Commodore 64 1MHZ'dir. AMI-
GA 7.14 Mhz'de çalışır” gibi cümlelere her zaman karşılaşırsınız. MHz (MegaHertz)'in
$0000-$03FF: Sistem değişkenleri. Sakın buraları ellemeyin. Sistem gidıklanıyor.
$0400-$07E7: Karakter ekranı bilgileri. Ekranda görünecek harfler burada saklanır (siz değiştirmezseniz).
$07E8-$07F7: Kullanılmaz. Sekiz baytlık data alnı olarak kullanabilirsiniz.
$07F8-$07FF: Spriteların grafik datalarının bellekteki yerini belirleyen baytlar. Sonra sık sık kullanacaksınız.
uçabilir.
$0800-$9FFF: BASIC program, değişken ve dizi belleği. Eğer üst sınırı aşağı çekmezseniz programlarınızı buralara yazmayın,
$A000-$BFFF: BASIC yorumlayıcısı rutinlerini içeren ROM. Altındaki RAM'i daha sonra kullanacağız.
$C000-$CFFF: Bellekte tehlikesizce kullanılabilen (neredeyse) tek bölge. Programların çoğu burada çalışacak şekilde yazılır.
$D0O00-$D3FF: VIC registerlerinin yuvası.
$D400-$D7FF: SID registerlerinin adesleri.
leri.
$D800-$DBFF: Renk RAM'ini oluşturan dört bitlik bellek adresokumakta kullanılır.
$DC00-$DCFF: CIA#I registerleri. Klavye ve joystick portlarını
CLAH2 registerleri. Kaset ve disketten sorumludur.
alan.
$DE00-$DFFF: Gelecekte eklenebilecek çipler için giriş/çıkış alanı. Yani çipin registerları için ayrılmış kullanılamayacak durumda bir rutinlerinin yer aldığı — yer.
$E000-$FFFF: KERNAL ROM. Tüm klavye, kaset, okuma
Bilgisayarın hayati — organı.
Tablo-2: Commodorc'unuzun bellek haritası. Tabii ki bulabileceğiniz en basit haliyle. Makine dilinde ustalaştıkça, dahâ karmaşık bellek haritalarına bu satırlarda rastlayabileceksiniz.
bilgisayarın hızını belirten bir birim olduğunu artık öğrenmişsinizdir. Ama MHZ'in gerçekte ne olduğunu hiç merak ettiniz mi? Merak etmiyorsanız da kurtuluşunuz yok, çünkü bu garip yazıda bu konuya da değinmeden edemeyeceğim. Umarım kafanızı fazla karıştırmam(!). Yazının başlarında CPU'nun PC yardımıyla bellekten veri alıp durduğunu söylemiştim. Ama orada bahsetmediğim bir nokta vardı. Sanırım bu sizin de kafanızı kurcalamıştır. CPU'nun PC'yi neye göre artırdığını ya da belleği ne zamanlar okuduğundan hiç bahsetmedim. Aslında CPU bu zamanlama konusunda bile pek serbest değildir. Sistem saati adı verilen sinyali bacaklarından biriyle inceleyen CPU, bu saatin belli anlarında belli işleri yapmak üzere hazırlanmıştır. CPU hızını belirleyen MHz'de aslında bu saatin frekansından başka bir şey değildir. Tabii ki CPU'nun uyduğu bu saat ne kadar hızlı çalışırsa, bilgisayarınız işlemleri o kadar hızlı yapar. Hemen ““O zaman saat frekansını artıralım!” diye atlamayın. Bilgisayarınız daha hızlı bir şekilde güvenlik içinde çalışabilseydi, Commodore firması bu işi sizden önce yapardı. Saat frekansını sınırlayan en önemli faktör, belleğin hızıdır. Eğer bellek verilen saat frekansına ayak uyduramayacak kadar yavaşsa, CPU”nuza durmadan hatalı veri iletir. Sonuç olarak bilgisayarınız en kısa zamanda kilitlenir.
Sonunda Bellek Haritası:
Son olarak kısa bir bölümde belleği $0000'dan başlayarak sonuna kada bölge belge inceleyelim isterseniz. İlk olarak göz önüne almamız gereken bölge olan $0000-$03FF sistem tarafından değişken bölgesi olarak kullanılır. Burada ufak tefek boş alanlar bulabilirsiniz, ama ben sizin yerinizde olsam bu bölgeyi rahat bırakırdım. Çünkü en ufak hatalı kullanımınızda ya programınız çalışmaz ya da sistemi kız- Sırada ekrandaki düşük çözünürlükü görüntüyü saklayan $0400-$07E8 var. Bu bölgedeki her bayt, ekrandaki harflerden (daha doğrusu karakterlerden) birini aklında tutar. Mesela POKE 1024,1 yazıp RETURN'e bastığınız zaman ekranın sol üst köşesinde “A” harfi belirir. 1'i 1024 ($0400) yerine 1025 ($0401) adresine yazmış olsaydınız bir yandan “A” harfi belirecekti. 1064 adresi ise bir satır altta en sola harfi basacaktır. X ve Y koordinatına basılacak harfin hangi adrese geleceğini şu formülle hesaplayabilirsiniz: