Commodore sayı 63, sayfa 48
Sayfanın metni

Sayfa 48

Vedat Hallaç

Burada verilen program dökümü bilgisayarınızdaki ile aynı olmayabilir. Dizgi hataları olabileceğinden, siz monitör programıyla incelediğiniz döküme göre fikir yürütünüz.

Herkese merhaba. Bu sayımızda da, makine dilinin intro veya demo yapmak için nasıl kullanılacağını anlatmaya devam ediyoruz. Geçen sayıda grafik kullanımını engelleyen bellek problemini nasıl halledeceğimizi öğrenmiştik. Grafik ekranlarını karakter setlerine sıkıştıran bir program sayesinde, diskte 40 blok yer kaplayan bir ekran, 13 blokluk bir karakter setine sıkıştırılabiliyordu. Kursumuzda bu ay, karakter setine atılmamış bir grafikle yapamayacağınız bir efekti yaratmayı öğreneceğiz. Orijinal adı LOGO SWING olan bu efekt, ekranda bulunan bir logoyu, bir sinüs tablosu kullanarak sağa-sola sallamaktan ibaret. Ama, bunu grafik ekranının kendisiyle yapmaya kalkarsanız, yarım ekranlık bir logoyu bir piksel yana kaydırmak için en az 4600 adresin bitleriyle oynamanız gerekir. Bu arada bir bayttan taşan biti diğer bayta eklemeyi de unutmamanız şart. Tabii ki bu işleme kalkışırsanız, saniyede bir piksel kaydırmayı başarırsanız şanslısınız demektir. O zaman, biz de elimizde bulunan ikinci olanağı inceleriz. Yani karakter setine aktarılmış bir logoyu sallamaya çalışırız. Bu şekilde saklanan bir grafiğin 64 noktası (bir kartı) tek bayt tarafından temsil edildiğinden, logoyu oluşturan karakterleri sekiz piksel sağa almak yeterli olacaktır. Tek piksellik hareketleri de $D016 adresli registerin ilk üç bitini kullanarak yaparsanız, işin en zor kısmını halletmiş sayılırsınız. Tabii ki bütün iş bu kadar kolay değil, ama bu kadarını anlamanız, logo swing'i kolay yapabilmeniz için şart. Aslında tek anlamanız gereken, karakter ekranındaki bir logoyu bir bayt sağa almak için gereken transferle, grafik ekranında bulunan bir logoyu bir bayt sağa almak için gereken transfer arasındaki farkı anlamak. Bir kartın sekiz grafik baytından oluştuğunu da göz önüne alırsak, karakter ekranındaki logoyu taşıyan bir rutinin sekiz kat hızlı olacağını rahatlıkla söyleyebiliriz. Geçen sayıdaki yazımı tam olarak okumadıysanız, bu yazıda daha ileri gitmeden geri dönerek bir grafiğin karakter setine nasıl sıkıştırıldığını anlamaya çalışın. Bu yazıda, geçen sayıyı okuduğunuzu ve gerekli temele sahip olduğunuzu varsayacağım çünkü. Bildiğiniz gibi, bir grafiği sıkıştırdığınızda diskete iki parça kaydediliyor: Karakter setinin grafik dataları ve kartların dizilimini gösteren datalar. Daha rahat anlaşılabilmek için birincisine (grafik datalarına) FONT, ikincisine (kart dizilimine) de MATRİS adını verelim. Bir MATRİS'i ekrana ($0400) yükleyip, karakter seti pointer'ini ($D018 — 53272) FONT'u gösterecek şekilde ayarlarsak, grafiğiniz ekranda görünmelidir (renkleri doğru olmayacak tabii ki). Karakter setinde uygulanan bir programı kullanmanın asıl güzelliği burada ortaya çıkıyor. Yani logoyu hareket ettirmek için FONT baytlarına dokunmamıza gerek yok. Yalnızca MATRİS'in ekranda görünen kısmının üzerinde oynayarak da logoyu hareket ettirebiliriz. Sadece MATRİS'i hareket ettirmenin de kendine göre incelikleri var tabii ki. Mesela bir bayt sağa aldık logomuzu. Normal olarak ne yaparız? $0400'den logo sonuna kadar olan

bölgeyi $0401'e taşırız değil mi? Hayır! Eğer bu dediğimi yaparsanız logoyu bir sağa alırsınız, fakat aynı zamanda kırkıncı kolonda bulunan grafik datalarını da bir satır aşağıda birinci kolona taşırsınız. Yani doğrudan doğruya matris üzerinde işlem yapamazsınız. O zaman ne yapmamız gerekir? Bu sorunun cevabı oldukça basit. Logoyu belleğin başka bir yerine transfer ederiz ve gerektiği anda, gereken miktarını ekrana taşırız. Fakat uçlardan alt satıra taşanları kırpmak için de bir sürü hesap yapmak gerekeceği için, biz de her logo satırını 80 kolonluk bir alan içinde ortalar, sonra da ekranı bu matris üzerinde sağa-sola hareket ettiririz. Bu işi yapmak için şöyle bir programcılık kullanabiliriz:

Ldy 0 Ldx — *# Offset Döngü Lda M,Xatris,k Sta $0400,y Lda Matris 4 80

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