Commodore sayı 59, sayfa 40

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 40

Bir aylık bir aradan sonra GEOS programlama kursuna devam ediyoruz. Artık bu yazı dizisi sadece GEOS programlamasını değil; GEOS Desktop, geoWRITE, geoPAINT gibi GEOS programlarının kullanımlarını ve gizli yönlerinin açıklanmasını da kapsayacak. Yani bu aydan sonra tek başlık altında iki konuyla devam edeceğiz.

GEOS PROGRAMLAMA KURSU

Bu ayki program konumuz GEOS grafik rutinlerinin makine dilinden çağrılması. Daha önce de belirttiğimiz gibi GEOS, menüler, ikonlar, pencereler gibi özellikleri desteklemek için yüksek çözünürlük (high resolution) grafik ekranını kullanır. Eğer yüksek çözünürlüklü grafik ekranlarıyla aranız iyi değilse, ya dergimizin eski sayılarında yayınlanmış yazılardan ya da “Programcının El Kitabı”ndan bu konu hakkında bilgi edinmeniz, yazıyı daha rahat anlamanız açısından oldukça yardımcı olacaktır. En genel anlamıyla ekrana herhangi bir şey çizmek, ekran RAM'inde bulunan bazı bitleri “1” veya “0” yapmaktır. Değeri 1 olan bitlere “önplan rengi”, 0 olanlara ise “arkaplan rengi” adı verilir. (DİKKAT!! bu “önplan-arkaplan” kavramı normalde kullanılanından farklıdır. C-64 işletim sisteminde “önplan” ekranın rengini, “arkaplan rengi” çerçevenin rengini belirtir.) GEOS'un normal ön/arkaplan rengi koyu gri/açık gri olarak belirlenmiştir (Hâlâ değiştirmediyseniz). Bu size biraz ters gelebilir çünkü genelde boş bir ekran siyah (ya da koyu bir renk) olarak düşünülür. Oysa bizde bunun tam tersi geçerli. Açık renkli bir ekran üzerine koyu renklerle yazı yazıyoruz. Bu tür kavramların kafanızı karıştırmasına asla izin vermeyin. Bu arada dikkat etmeniz gereken şey GEOS rutinlerinin grafik ekranının renk RAM'ını hiçbir şekilde etkilememesi. Yani değişik renkte bir şeyler çizmek isterseniz, programınızın renk RAM'ını da ayarlaması gerekiyor. geoPAINT programı da renkler konusunda bu yöntemi kullanmaktadır. GEOS grafik destek rutinlerinin en önemli özelliklerinden biri de bir “tampon grafik ekranı” bulundurmasıdır. Bu tampon ekranda asıl ekranın bir kopyası bulundurulup ve asıl amacı herhangi bir anda ekranın belli bir bölgesini eski haline çevirmektir. Bir bölgeyi eski haline getirmek terimi, bu bölgenin eski içeriğini tampon ekrandan asıl ekrana kopyalamak olarak açıklanabilir. Bu özellik çizim

Celal & Vedat Hallaç programlarına “UNDO” işleminin eklenmesini oldukça kolaylaştırır. Özellikle menüleri kullanırken tampon bölgeye sık sık başvurulur. Bir menü elemanını seçtiğinizde, tampon ekrandan menü boyutlarında bir bölüm olduğu gibi ana ekrana kopyalanır. Böylece menünüz kapanmış olur. GEOS'un bir özelliği de, yapılan grafik işlemlerinin ana ekrana mı, tampon ekrana mı yapılacağını $002F adresinin (“displayBufferOn” label'ıyla tanınır) değerine göre belirlemesidir. Bu işlem için $002F adresinin 6. ve 7. bitlerine bakarak karar verilir. Eğer 7. bitin değeri 1 ise ana ekrana, 6. bitin değeri 1 ise tampon ekrana çizim yapılır. İki bitin değeri de 1 ise her iki ekrana da çizim yapılır. $2F adresinin en yaygın kullanım şekli, herhangi bir grafik işlemini sadece bir ekrana yaptırmak, dolayısıyla sonradan kolayca silinmesini sağlamaktır. Bazı programlar belleğe öylesine muhtaçtır ki, tampon ekranını programı yerleştirmek için kullanır. Bu durumda menüleri nasıl kullanacaklar acaba? sorusunu duyar gibi oluyorum. Programda hiç menü kullanmamak bir çözüm tabi ki. Fakat GEOS'u tasarlayanlar bunu da düşünmüşler ve “RecoverVector” adlı bir vektör tanımlamışlar ($84B1-$84B2 adresleri). Bu vektör normalde RecoverRectangle (Bu rutin ne yazık ki gelecek sayıya kaldı!) rutinin adresini saklar ve GEOS bir menü veya herhangi bir alanı tampon ekrandan kopyalamak istediği zaman RecoverRectangle rutinini çağıracakmış gibi hazırlık yapar ve RecoverVector vektörünün sakladığı adrese bir sıçrama yapar. Eğer tampon ekranı ek RAM olarak kullanmayı düşünüyorsanız, yapmanız gereken şey, dikdörtgen alanların içeriğini saklayacak bir rutin yazmak ve RecoverVector vektörünün adresini burayı gösterecek şekilde ayarlamaktır. Tabi daha basit bir yol da var. Eğer her çağrıldığında ekranı yeniden çizecek bir rutin yazarsanız, ekranın belli bir bölgesinin saklanması ihtiyacı ortadan kalkar. Böylece hızdan kaybedersiniz ama RAM'dan oldukça tasarruf edersiniz. Bu kadar teorik bilgiden sonra pratik rutinlere geçme zamanı geldi sanırım. İşte en temel rutin olan çizgi çizme rutini ile başlayalım. Çizgiler, yatay-dikey çizgiler ve çapraz çizgiler olarak iki gruba ayrılırlar GEOS'un gözünde. Yatay ve dikey çizgileri kullanırken bir desen baytı kullanabilir ve bu sayede değişik şekillerde noktalanmış çizgiler elde edebilirsiniz. Buna karşılık çapraz çizgiler sadece tamamen dolu olarak çizilebilirler. Yatay ve dikey çizgilerde kullanılacak olan desen baytı sağa veya sola kaydırılmadan olduğu gibi çizilir ve gereken yerleri silinir. Bu sayede alt alta gelen çizgilerin boyları farklı bile olsa, desenlerin tüm baytlarının 1 ve 0'ları alt alta gelir.

Klavyeyle gezinmek için ← ve → tuşları.