Bu sayfadaki yazılar
Sayfanın metni
Sayfa 44
VEDAT HALLAÇ
Tüm GEOS kullanıcılarına selamlar, GEOS programlama kursumuza geçen ay kaldığımız yerden, yani grafiklerin kullanılması konusundan devam ediyoruz. Bu ayki konumuz ise “İçi Dolu Alanlar”. İçi dolu alanlar yaratmak için de yatay ve dikey çizgi çizme mantığına benzer bir yaklaşım uygulanır. Bu durumda desen, 8 x 8'lik kartlardan oluşur ve her zaman kart sınırlarına göre ayarlanmıştır. 8 x 8'lik desenlerin seçilmesi, C-64'ün yüksek çözünürlüklü ekran modunun 8 x 8'lik kartların yan yana gelmesinden oluşmasından dolayıdır. (Bu konuda daha ayrıntılı bilgiyi “Programcının El Kitabı” adlı kitapta bulabilirsiniz.) Daha önce yayınladığımız örnek programda iki önemli grafik komutu kullanmıştık. Bunlar, SetPattern ve i-Rectangle komutlarıydı. SetPattern rutiniyle GEOS'un kendi içinde bulunan 8 x 8'lik desenlerden birinin kullanılmasını sağlarsınız. i-Rectangle rutiniyle de içi dolu bir dikdörtgen elde edersiniz. Bir dikdörtgenin içine herhangi bir deseni yerleştirme olayını daha iyi anlamak için, desenli bir masa örtüsünün üzerine, tüm örtüyü kapatacak bir beyaz kâğıt koyduğunuzu düşünün. Şimdi bu kâğıdın ortasından bir dikdörtgen kesin. Artık beyaz bir alanın ortasında desenli bir dikdörtgeniniz bulunuyor. GEOS'un desenleri de aynı sisteme göre çalışır. Öyle ki, bir kısmı kesişen iki dikdörtgen çizerseniz, kâğıt örneğinde karşılaşacağınız sonuçla karşılaşırsınız, yani kesişim alanında bulunan desen her iki dikdörtgenle uyum içindedir. Aşağıdaki tabloyu incelerseniz, kartlar hakkında daha iyi bir fikre sahip olursunuz. Eğer dikdörtgen sınırlarınız kart sınırlarından farklıysa
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 45
Dikdörtgen
SA SANS NE SEV CERAN
SNBE AAA 33838 ea DD ANAN NE SERE NR NE
NE ER HARE MENE ENES NE EE RS RR NE
#38 OLAR
Desenli dikdörtgen çizilirken gri alan maskelenecek
(şekilde olduğu gibi) dikdörtgen sınırlarıyla kart sınırları arasında kalan bölge (şekilde koyu gri olarak görünen kısım) üzerinde hiçbir işlem yapılmaz ve deseniniz tamamen desen sınırları içerisine yerleştirilir. Desenli çizimler yapmak için kullanabileceğiniz rutinler şunlardır: - 1) SetPattern (DesenAyarla)-$C139 * Fonksiyonu: Sistem desen kartını ayarlar. * Gerekli hazırlık: a- desen numarası (0-33) * Dönüş değerleri: $22-$23 desen baytlarının saklandığı adres * Bozulan değerler: a * Açıklama: Hazırda bulunan 33 sistem deseninden birinin seçilmesini sağlar. Bu desenler, GeoPaint desenlerinin aynısıdır. Yani kaç numaralı desenin neye denk geldiğini buradan öğrenebilirsiniz. Desenin data baytlarına $22-$23 adreslerinde bulunan adresi kullanarak erişebilir, $22-$23'e kendi deseninizin adresini koyarak istediğiniz desenin kullanılmasını sağlayabilirsiniz. Bu desen tüm şekil içi dolduran kernal rutinlerince kullanılacaktır. 2) Rectangle (Dikdörtgen) - $C124 i-Rectangle - $C19F * Fonksiyonu: Seçilen deseni kullanarak bir dikdörtgen çizer. * Erişim: displayBufferOn bit 7 - 1 ise ana ekrana yaz bit 6 - 1 ise tampon ekrana yaz * Gerekli Hazırlık: r2L - dikdörtgenin üst y koordinatı (0-199) r2H - dikdörtgenin alt y koordinatı (0-199) r3 - dikdörtgenin sol x koordinatı (0-319) r4 - dikdörtgenin sağ x koordinatı (0-319) * Inline çağırım: Jsr komutundan hemen sonra;
.byte üstkenar .byte altkenar .word solkenar .word sağkenar * Bozulan değerler: a, x, y, r5-r8, r11 * Açıklama: Verilen koordinatlara bir dikdörtgen çizer. Bu dikdörtgenin içinde sistem deseni bulunur ve dikdörtgenin çevresinde çerçeve bulunmaz. Eğer çerçeve istiyorsanız bu rutini çağırdıktan sonra çerçeve çizmeniz gerekir, çünkü bu rutin önceden çizilen bir çerçeveyi silecektir. 3) FrameRectangle (ÇerçeveÇiz) - $C127 i-FrameRectangle - $C1A2 * Fonksiyonu: koordinatı belirtilen bir dikdörtgenin çevresine çerçeve koyar. * Erişim: displayBufferOn bit 7 - 1 ise ana ekrana yazar bit 6 - 1 ise tampon ekrana yazar * Gerekli hazırlık: a - GEOS desen baytı (yatay-dikey çizgiler için) r2L - dikdörtgenin üst y koordinatı (0-199) r2H - dikdörtgenin alt y koordinatı (0-199) r3 - dikdörtgenin sol x koordinatı (0-319) r4 - dikdörtgenin sağ x koordinatı (0-319) * Inline çağırım: Jsr komutundan hemen sonra; .byte üstkenar .byte altkenar .word solkenar .word sağkenar * Bozulan değerler: a, x, y, r5-r9, r11 * Açıklama: a registerine çizginin
1 Kart
.desen baytını verin. (Çizginin desen baytı hakkında ayrıntılı bilgiyi geçen sayımızda bulabilirsiniz.) Bu rutinle, istediğiniz bir dikdörtgenin çevresine herhangi bir desen kullanarak çerçeve koyabilirsiniz.
4) RecoverRectangle (Dikdörtgen Al) - $C12D i-RecoverRectangle - $C1A5 * Fonksiyonu: Tampon ekrandan bir dikdörtgen ana ekrana kopyalar. * Gerekli Hazırlık: r2L - dikdörtgenin üst y koordinatı (0-199) r2H - dikdörtgenin alt y koordinatı (0-199)