C-64 İÇİN GRAFİK DONANIMI-4

Video kontrolünün bellek idaresindeki en pratik yönlerinden birisi ekran belleğini hareket ettirebilme yeteneğidir. Karakter setini de başka alanlara taşıyıp kendi kişisel karakterlerinizi yaratabilirsiniz.

Vic kendisine verilen değişik görevleri yapabilmek için, (metin, grafik, sprite ve renk gibi) değişik fanksiyonları olan yeni bir bellek alanina gereksinme duyar. (Karakter jeneratörü, video RAM, renk RAM, grafik deposu ve sprite tanımları gibi). Aşağıda bunların her birinin önemini ve işlevlerini anlatacağız. İleride her birine daha ayrıntılı olarak ayrı ayrı dea) Karakter Jeneratörü:

Bununla, tek bir tuşa basılarak ek randa sergilenebilen her bir ka rin şeklini muhafaza eden bel tederiz. Toplam 2x2K bayı alanı dır ve 512 karakter için informasyona sahiptir ama ekranda bir seferinde bunların hepsini göstermesi olanaksızdır. b) Video RAM: Video Ram IK bellek işgal eder ve çeşitli görevleri vardır. Normalde bilayar açıldığında ekran kodunun depolama alanı olarak hareket eder Bu karakter seti depolaması ile karıştırılmamalıdır. Ekran kodu karakter jeneratöründe bir şekilde pointer olarak hareket eden bir değerdir. Sonra VİC bu şekli seçilen karakter ekranda göstermek için kullanır. Grafik modundayken, Video RAM renk bel leği fonksiyonunu taşır Buna ek olarak sekiz sprite tanımının pointer'ları Video RAM'ın son sekiz baytında depolanmıştır ©) RENK RAM'i IK alanı vardır ve $D800-$DEFE arasındadır. (55296-56319). Okunup yazılabilir ama yalnızca alt dört bit aktiftir. Üst dört bit © tirilemez ve her zaman ayarlıdır. Normal modda, ekrandaki metin karakterlerinin rengi için depo olarak hizmet eder. Grafik modundayken, yalnızca çok renk olduğu zaman işlevseldir. O zaman çok renk 3'ü grafik ekranda 4-8 noktalık bir alanda temsil eder. d) BİT-MAPPED GRAFİK BELLEĞİ: Grafik ekranının bir görüntüsünü taşır. Ekrandaki her noktanın durumu bireysel olarak belirlenir. 320x200'lük bir çözünürlükte, nerdeyse 8K'lık bir depolama gerektiren 64.000 nokta vardır. e) SPRİTE TANIMLARI: Her sprite tanımı için 63 bayi uzunluğunda bir bellek alam ayrılma lıdır. Bu 63 bayt normal bir sprite'n 21x24 noktasını içerir.

VIC BELLEK KONTROLÜ

Değişik bellek alanlarının video kontrolü tarafından yapılması CPU tarafından sunulan diğer seçenekle re göre çok daha kolay ve basittir. Programcı yalnızca ROM'a ulaşabildiği zamanlar bile, RAM video RAM menzilindedir. Bu çok önemli çünkü grafik belleği ROM'a yerleştirilebilir. Bunu yaparken BASIC depo alanı kullanılmaz. Daha önce sözünü etti ğimiz video RAM, fik, sprite tanımları gibi bellek alanları da iki istisna dışında RAM'den alınır: Eğer $1000-$1FFF (4096-8191) ya da $9000-$9FFF arasındaki alan gerekiyorsa, bu alanlardaki bilgi bu bölgelerdeki RAM'den değil, $DO00- $DFFF arasında uzanan kter jeneratörü ROM'undan alınır. İlk durum bilgisayarınızı açtıktan sonra, yalnızca alt taraftaki 16K'nın VİC tarafından kontrol edilebilmesiyle açıklanabilir. Ekrandaki karakterleri tanımlamak için gereken karakter seti 1/O adreslerinin aşağısında, $DO00-$DFFF arasındadır. Bu nedenle arasındaki adresler özel bir statüye sahiptir ve karakter seti mantıksal olarak oray yerleştirilir. Bu bölgenin diğer fonksiyonları, ne yazık ki feda edilmelidir. $9000'deki sınırlama da aynı nedenden kaynaklanmaktadır. Renkli RAM'de işler daha da basittir. Diğer alanlar gibi hareket ettirilemediği için, her zaman $D800- $DBFF (55296-56319) arasındadır.

EKRAN BELLEĞİNİ HAREKET

ETTİRMEK

Video kontrolünün bellek idaresindeki en pratik yönlerden birisi ekran belleğini hareket ettirebilme yeteneğidir. Örneğin, Bit-mapped grafik belleğini normal olarak bulunduğu $2000 (8192) yerine, ROM'un altına $E000 (41440)'a yerleştirebilirsiniz. Karakter setini de başka alanlara taşıyıp kendi kişisel karakterlerinizi yaratabilirsiniz. O kadar çok olanak vardır ki tümünün peşine düşemezsiniz. Her hareketten sonra, VIC'in kontrol edebileceği bellek alanını takip etmelisiniz. Örneğin, RAM'deki sprite tanımını $1000-$1FFF”e yerleştiremezsiniz, çünkü VİIC RAM değil, $DO0O00-$DFFF arasındaki ROM karakter setini okur. a) VİC'in Adres Alanını Deği mek Video Denetimcisi ancak 16K'lık bir alana ulaşabilir. ($000-$3FFF) C- 64'ün adres alanı 64 K'dır. Yani yu-

Şİ karıdakinin dört kat fazlası. VİC en üst ik adres bitine sahip değildir (14 ve 15). Onun için dışarıdan sağlanmaları gerekiyor. Bu amaçla Register (kütük) O kullanılır: register 0, CIA 20/1. bitler ($DDOO — 5676) Bu iki bit VIC bellek adresi için en önemli iki biti temsil ederler: adres bitleri SFEDECBA987654 3210 Bunları ayarlayıp tüm adrese sahip olabilirdiniz. Ama burada dikkat edilmesi gereken bi nokta var. Bu iki bit LOW (aşağı) aktiftir. Yani, eğer ayarlanırlarsa, adresi hesaplamak amacıyla temizlenmişler gibi muamele görürler. Doğru adrese ulaşmak istiyorsak bu bitleri ters çevirmeliyiz. Bunu yaptıktan sonra, VIC'in kontrol edebileceği alanı alırız. VIC'in kontrol ettiği tüm ekran fonksiyonlarını 16K'lık adımlarla otomatik olarak hareket ettirir:

-video RAM rafik depolama -karakter jeneratörü -sprite tanımlama

Anlaşılmasını kolaylaştırmak için, bunların bellek alanlarını aşağıda bir tablo halinde veriyoruz:

BO/1 Adres B Adres alanı nn 00 $0000-$3FFF (0-16383) 10 01 $4000-$7FFF (16384-32767) 01 10 $8000-$BEFF

(32768-49151)

00 Nn $CO00O-$FFF

(49152-65535)

“BO/1” ile CIA 2'nin O kütüğündeki iki bitin gerçek yerleşimini kastedmekteyiz. Adres B VIC adreslemesi için 14. ve 15. bitleri vermektedir. Orijinal değer B 0/1”11'dir. O zaman video RAM $0400-$07FF ar: sında (1024-2047) ve karakter seti de $1000 (53248)'de bulunur. Bir örnek verelim: Diyelim ki katerlerin depolanmasını $C400 (50176 4 4*256)'e getirmek istiyorsunuz. Bu amaçla aşağıdaki komutu vermeniz rli olacaktır: POKE 56576, PEEK (56576) AND 253 OR O VIİC tüm bilgisini $CO0OO $FFF arasındaki alandan alır; bu da ekranda büyük karışıklığa yol açar. (yalnızca hareketsiz olduğu için renk düzgün bir şekilde değiştirilebilir.) POKE 56576, PEEK (5657) AND 253 OR 0 komutu ekanı ekranı eski haline döndürür. b) Video RAM'i hareket ettirmek: Video RAM'de bu IK'lik adres alanı içerisinde küçük adımlarla hareket ettirilebilir. Bu VIC'in 24. kütüğünün içeriğini, özellikle 4-7. bitleri değiştirerek mümkün olmaktadır Bu dört bit video RAM adresinin 10.- 13. bitlerini belirlerler: Adres bitleri $F ED C BA 98 7664 3210 CIA 2 reg. 24 VIC'in İÇ bitler 4-7 O zaman da video RAM 16'lık adres alanı içinde 1K'lık adımlarla hareket ettirilebilir. Bilgisayar açıldıktan sonra, bu dört bit 0001”e verilirler. Bu video RAM'in metin deposu olarak $400 (1024)'de bulunmasının nedenidir. Bu bitleri değiştirmek diğer bellek alanlarının değimesini gerektirmez. Bir örnek: $400'de bulunan video RAM'in $800'e götürülmesini istiyorsak, bunu şu komutla yaparız: POKE 53240 4 24, PEEK (53 24) AND 15 OR 2*16 Bu hareket, $400-$7FF arasındaki bellek alanına ihtiyaç gösteren geniş BASIC programlar olduğunda sürekli olarak or... or... or... diye değişen iki metin sayfası kullandığınızda kullanılabilir. c) Karakter jeneratörünü hareket ettirmek: Video RAM'e ek olarak, VIC'i 16K'lik alanı içinde karakter jenera törünün yerini değiştermek de mümkündür. Burada VIC'in 24. biti bazı adrers bitleri için ara depolama alanı olarak işe yarayabilir. Yalnıca bu sefer 2x 2K'lık karakter jeneratörünü 2K'lık adımlarla hareket ettirebiliriz. Video RAM tablosundaki 4-7. bitlerin yerini burada 1-3. bitler almaktadır. d) Grafik Deposunu Hareket Bttirmek:

Grafik depolarının yeri de seçilebilir. 8K uzunluğunda olduğu için K'lık adres alanında gidebileceğ nızca iki yer vardır. Bu nedenle onun için ayarlanabilecek yalnızca tek bir bit vardır. Bu da VİC 24. kütüğün 3. bitidir Geli devam edeceğiz.

ay bit-mapped grafikler ile