Bu sayfadaki yazılar
Sayfanın metni
Sayfa 7
POKE komutunu girmemiz gerekiyor ki, bilgisayar 0 cinle ilgili bilgilerin 13. öbekte saklandığını anlasın (Bir cin daha yaratacak olsaydık o zaman da POKE 2041, 14 komutunu girmemiz gerekiyordu ki bilgisayar bu sefer 1 numaralı cinin 14. öbekte depolandığını anlasın).
VIC: Bir Cin
Kontrolörü
Sıra geldi bilgilerin işlenmesine: Nasıl seslerle ilgili bilgilerin işlenmesi için SID (ses arabirimi aygıtı) diye anılan ve özel bir bellek bölgesinde saklanan bazı sicilleriniz vardıysa, her türlü görüntü ile bilgileri işleyen VIC (Video Interface Chip-Ekran Arabirimi Yongası) adlı bazı sicilleriniz var. Bunlar 53248 numaralı bellek bloğundan başlıyor, 53294 numaralı bellek bloğuna kadar devam ediyor. Yandaki tabloda en önemli VIC sicillerini, adreslerini ve işlevlerini veriyoruz. Her sicil bir bayt olduğundan her sicile 8 ayrı bilgi verileceğini unutmayın.
Önemli VIC Sicilleri
0 no.lu ekran cininin X koordinatlarının ilk 8 biti burada saklanır. Varsa, 9. bit $D010 (yani 16. sicilde saklanır) $D001: 0 no.lu y koordinatı $D002: 0 no.lu x koordinatı $D003: 0 no.lu y koordinatı $D004-$D00F: Diğer yedi cinin x ve y koordinatları. Örneğin $D002'de 1 no.lu cinin x koordinatı $D003'te y koordinatı saklanır. $D010: Ekran cinlerinin x koordinatlarının 9. biti. Sicilin 8 bit olduğunu hatırlayın. Dolayısıyla 0 no.lu cinin x koordinatının 9. bit değerini 0 no.lu bit, 4 no.lu ekran cinininkini 1 no.lu bit saklıyor. $D011 1. Kontrol Sicili: 0-2 Bitler: Ekranı yukarı aşağı kaydırma 3 Bit: 0 değerini alırsa ekran 24, 1 değerini alırsa 25 satır olur. 4 Bit: 0 değerini alırsa merkezi işlem birimi VIC'ten gelen sinyalleri almaz ve programlarınız biraz daha hızlı çalışır. Ama cinleri kullanabilmek için bunun 1 değerini alması lazım. 5 Bit: 1 değerini aldığında alet standart “bit map” moduna geçiyor. 6 Bit: 1 değerini aldığında ekran geliştirilmiş renk moduna geçiyor. 7 Bit: $D018'den artan değerleri saklıyor (Bu son 3 bit daha sonra ayrıntılı olarak anlaşılabilecek). $D015 En Sevdiğimiz Sicil: Cinlerin ekranda bilfiil görünmesini sağlıyor (0 no.lu bit 0 cinin; 1 no.lusu 1 no.lunun vs.). $D016 2. Kontrol Sicili: 0-2 Bitler: Ekranın sağa/sola kayması 3 Bit: 0 değerini aldığında ekran 38 sütun, 1 değerini aldığında 40 sütun alır. 4 Bit: 1 değerini aldığında çok renkli cinler mümkün olur. 5-7. Bitler: Kullanılmaz. $D01D Şişmanlama Sicili: Her bit bir cine ayrılmıştır. Eğer 0 no.lu bit 1 değerini alırsa 0 no.lu cin bir misli genişler. $D01B Öncelikler: Yine her bit bir cine ayrılmıştır. Eğer 0 no.lu bit 1 değerini alırsa 0 no.lu cinin zemindeki şekillere kıyasla önceliği, 0 değerini alırsa zeminin önceliği var. Cinleri Çok Renklendiren Sicil: Yine her cinin bir biti vardır. 0 bit 1 değerini alırsa 0 no.lu cin çok renklenir. $D017 Uzama Sicili: Her cinin yine kendi biti vardır ve o bit 1 değerini alınca söz konusu cin 1 misli uzar. $D01E Cin Çarpışması Sicili: Bu daha ileriki sayılarda anlatılacak. Cin-Zemin Çarpışması: Bu da daha ileri sayılarda anlatılacak. $D020: Ekran çerçeve rengi. $D021: Zemin rengi. $D022-$D024: 1-3 zemin renkleri. $D025-$D026: Çok renkliliğe geçiş. $D027-$D02E: 0'dan 7'ye kadar çok renkli cinlerin renkleri.
EKRAN0,
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 6
Commodore 64'ünüzün en ilginç özelliklerinden biri hiç kuşkusuz cinlerdir (sprites). Ekran cinleri kendi yaratabileceğiniz ve diğer ekran içeriklerinden ve birbirlerinden bağımsız hareket ettirilebilen grafik dizaynlardır. Ekranda bir defasında toplam 8 ekran cini sergilenebilir.
Ekran cinleri renklerini, boyutlarını, fon karakterleri ve birbirlerine göre önceliklerini değiştirebilirler. İki ekran cini arasındaki ve ekran cinleriyle fon arasındaki çarpışmalar otomatik olarak saptanır. Üstelik her ekran cini için — normal — çok renkli ekran cini modları arasında seçim yapma imkanınız vardır. Tüm bu fonksiyonlar VIC (Video kontrolü 6567) ve sicillerinin yardımıyla kolayca gerçekleştirilebilir. Ancak önce ekran cinlerinin yapısına bir göz atalım. Daha önce de söylediğimiz gibi bir defasında ekranda aynı anda sekiz farklı ekran cinini sergileyebilirsiniz. Her ekran cinine özel bir numara (0-7) ayrılmıştır; bu numara ekran cinine kullanmakta olduğunuz program boyunca eşlik edecektir. Her normal ekran cini 504 noktadan oluşur. Bu 504 nokta birbirlerinden bağımsız olarak kontrol edilir ve değerleri tekrar tekrar değiştirilebilir. Bunun için 24x21'lik bir nokta matrisi kullanılır. Bu yüzden her ekran cini 24 nokta genişlikte ve 21 nokta yüksekliktedir. Bu matris içerisinde çeşitli grafikler ya da şekiller yaratabilirsiniz.
Cin Tasarlamak
O halde nasıl var edeceğiz bir cini? Tanımlayarak... Cinleri tanımlamak zor zanaattır. Bu yüzden okurlarımıza biraz sabırlı olmalarını tavsiye edeceğiz. Her cinin bellekte 24 x 21 nokta olarak saklandığını söylemiştik (eğer çok renkli ise 12x21). Her noktaya bir bit tekabül ediyor (çok renklide 1 noktaya iki bit). 8 bit bir bayt oluşturduğuna göre cinin kapladığı toplam alanın eni 24/8=3 bayttır.
Cini tanımlamanın ilk adımı bu tablodaki hangi noktaların (karelerin) harekete geçirileceğine karar vermek. Basit bir örnek olsun diye adam şeklindeki bir cin üzerinde karar kılalım.
« 3. Block 2. Block 1. Block * 8 2 64 32 16 8 4 2 1 64 32 16 1 0,0,0 2 0,8,0 3 | 0,28,0 « 1 0,28,0 5 0,28,0 | 6 0,8,0 7 | 0,62,0 8 0,127,0 9 0,221,128 10 0,156,128 11 0,156,128 12 0,156,128 13 | 0,62,0 14 0,54,0 15 0,34,0 16 0,34,0 17 0,34,0 18 0,34,0 19 0,99,0 20 0,0,0 21 | 0,0,0
Bu şekilde ilk harekete geçmiş noktanın 2. satırda 2. blokta dördüncü (numaralarına 0'dan başladığı için 4 no. ile gösterilen) nokta. Yani bu satırda 2. bloğu 00001000 şeklinde gösterebiliriz. Bunun ondalık karşılığı ise 8
(sanırım daha önce anlamadıysanız şimdi anlamışsınızdır: Şekildeki 2. satırdaki 128, 64, 32, 16, 8, 4, 2, 1 gibi sayıların ne anlama geldiğini). 2. satırdaki yanık noktalar ise, 4. 5. 6. noktalar; yani bu satırda ikinci bloğun aldığı değer 00111000. Bunun ondalık karşılığı 16+8+4=28'dir. Böylelikle bütün satırları tarayarak adam şeklindeki cinimizin bellekte hangi noktaları harekete geçirilmesiyle yaratılacağını şematize etmiş oluyoruz. Sonunda yazacağımız programda bu değerleri bilgisayara bir dizi DATA komutuyla girmek işten bile değil (bkz. döküm).
Cin Belleğin Neresinde?
Bizim kullandığımız 24 x 21'lik matris her rastgele herhangi 504 bellek noktasını temsil ediyordu. Bunları belleğin neresine yükleyeceğiz? Yani hangi gerçek bellek noktalarını kullanacağız? Aslında ilk önce RAM'ın (bizim yazabildiğimiz belleğin) herhangi bir bölgesini kullanabiliriz. Ama sık kullanılan, trafiği sıkışık bir bölge seçecek olursak, başka bir işlem bizim yazdıklarımızı değiştirip ekran cinimizi yok edebilir. Bunun için RAM'ın ücra bir köşesini kullanmakta yarar vardır. RAM'ın “en tepedeki” 13. öbeğinden başlayan bölgesi böyle bir bölgedir. İlk 12 öbeği ise işlemci kendi ihtiyaçları için kullanılmaktadır. “Öbek” mi ne demek? Tam olarak biz de anlayamadık ama, anlaşılan bellek bölgelerini saymakta kullanılan bir terim. 4 öbek = 64 bayt. Yani ilk ekran cinimizi (0 numaralı olanı) 13 x 64 = 832 numaralı bellek noktasından başlayarak depolayacağız. Ama işimiz daha bitmedi. Bilgisayara da cin tasarımımızı oraya yerleştirdiğimizi söylememiz gerekiyor. Bu bilginin 2040 numaralı bellek noktasından başlayan bellek noktalarına girilmesi gerekiyormuş (Nereden ille de 2040 biz de anlamadık). O halde daha verileri girmeye başlamadan önce