Bu sayfadaki yazılar
Sayfanın metni
Sayfa 9
Cin Numaraları
Daha önce cinlerin 0-7 arası rakamlarla gösterildiğini söylemiştik. Ancak hangi cinin ne yapması gerektiği makineye bildirilirken bu rakamlar değil, 2^n formülü ile elde edilen sayılar kullanılır. Dolayısıyla kendi aramızda, 0, 1, 2 diye adlandıracağımız cinlerden makineye bahsederken şu temsil numaralarını (bundan böyle tn. kısaltmasıyla gösterilecek) kullanacağız:
Cin no. Temsil no. 0 1 1 2 2 4 3 8 4 16 5 32 6 64 7 128
Birden çok cinden birden söz etmek istediğimiz zaman ise, o cinlere ait temsil no.ları toplanır. Şimdi artık cinlerin çarpışmasına dair örnek komutlarımıza dönebiliriz:
IF PEEK (V 430) AND 1—1 THEN GOTO 100
0 no.lu cin başka herhangi bir cinle çarpışırsa, 100 no.lu program satırına git.
IF PEEK (V * 30) AND 6-6 THEN POKE (V 4 21), PEEK (V 4 21) AND (255-2-4)
1 ve 2 no.lu cinler çarpışırsa, her ikisi de ekrandan silinsin. Şimdi bu karmaşıklığı biraz çözmeye çalışalım. 1 ve 2 no.lu cinlerden söz ettiğimiz 6'nın 244 olmasından anlaşılıyor. $D015 cinlerin silinmesini sağlayan sicil. Bütün cinler birden görünüyorsa, değeri 128-255 olacaktır. Bizim yapmak istediğimiz, $D015'te mevcut olan değerden, sadece 2 ve 4'ün silinmesini sağlayacak olan değerleri çıkartmak. Bunun için önce mevcut değeri PEEK etmemiz, bunu yalnızca 2 ve 4 no.lu cinlerin silinmesini sağlayacak şekilde yeniden düzenlememiz (255-2-4) ve sonucu yeniden $D015 POKE etmemiz gerekiyor. Eğer çarpışanlar cinler değilse, bir cin başka herhangi bir başka karakterle çarpışıyorsa, ufak bir değişiklik gerekiyor. Örneğin;
IF PEEK (V 431) AND 4-4 THEN PRINT “CLR”
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 8
Şimdi artık programımızı çalıştırabiliriz. Aşağıdaki program satırlarının çoğu artık açıklama gerektirmeyecek kadar açık olmalı. 70-400 satırlar arasında cin tasarımımızı 832 noktasından başlayarak belleğe yerleştiriyoruz. 110 ve 140. satırların ne anlama geldiğini VIC sicilleri tablosunu inceleyerek anlayabilirsiniz. 150-200 satırlar da, girdiğimiz cinin hareketlerini klavyeden kontrol etmenizi sağlıyor. 210 ve 220 satırlar ise $D010 sicilinin işlevini görmenizi sağlıyor. Hatırlayacağınız gibi herhangi bir sicil en çok 255 değerini alıyor. Eğer cinimiz yatay eksende çok hare-
18 ea 40 SA 78 108 118 izâ 130 156 168 178 180 196 eza e3a 3aa Bia 32a SAA “1G Sen STA
Vz53248
REM DIKEY K RENK #7 POKE 2A4A,13 FOR SICILsA TÜ READ CIN POKE 832*4*SICIL,CIN NEXT SICIL PÜKE PÜKE VY*iİ,Y PÜKE Y*33,RENK GET HAREK$ IF HAREK$£-"" THEN IF THE IF HâREK$-"A" THE IF THE IF THE IF THEN POK IF TH PRINT A.Y POKE Y,& POKE 158 DATA DATA DATA DATA DATA A,221,128,0, DATA DATA A,6G2,A,A,5A4, DATA 0,34,A,A,34, DATA 4,0,0,34, 590 DATA SAA DATA
” ;
“
ket eder ve 255'in üzerinde bir x koordinat sayısı gerektirirse o zaman bu değeri gireceğimiz yeni bir yere gerek var demektir. İşte $D010 sicili bu yerdir. 230. satır ise ekranı biraz daha iyi tanımanızı sağlamak üzere cin hareket ettikçe bulunduğu yerin x ve y koordinatlarını veriyor. Kuşkusuz bu programı çalıştırdığınızda ekranda elde ettiğiniz sonuç çok heyecanlandırıcı değil. Ama bu yazının amacı sizi ZÜLKÜF adını verdiğimiz bu sevimli cinle ve onu kontrol eden VIC'le tanıştırmaktı. ZÜLKÜF'ün nelere kadir olduğunu ilerki sayılarda göreceksiniz. O
REM YATAY
OORDINATLAR
150 N N N AsAL41 N E EN PÜKE
156,128 156,128 a a a
N p
/
Zülküf başka bir cinle ya da herhangi bir başka karakterle çarpıştığı takdirde ne olur? Ne olacağını siz tayin edebilirsiniz... Eğer Zülküf başka bir cinle çarpışacaksa, şu genel komut kullanılabilir:
IF PEEK ($D01E) AND X=X THEN (durum)
Burada $D01E çarpışmaları kontrol eden VIC sicili, (durum) ise gerçekleşmesini istediğiniz olay, X de çarpışması istenen cinlerin numaralarıdır. Ancak örneklere geçmeden önce bir hatırlatma yapmakta yarar var: