Bu sayfadaki yazılar
Sayfanın metni
Sayfa 49
Sta — $0400,y
Sta $0420,y; $0400 4 40 (alt satırın başı) kaç satır transfer ya- pılacaksa Inx İny. Cpy #$28 Rne Döngü
Burada X register'ına “Offset” değeri, logonun saklandığı matrisinin başından itibaren kaç karakter atlanacağını belirtir. Logo matrisini 80 karakterlik satırların ortasına yerleştirirsek (40 kolon için düzenlenen matrisinin başına ve sonuna 20 adet boşluk karakteri yerleştirirsek), bu programın kullanacağı matrisi hazırlamış oluruz. Böyle bir matriste yukarıdaki programda bulunan Offset
değerini 0 yaparsak, ekrana logonun sol yarısı, sağa bitişik olarak çıkar. Eğer bu değeri 40 yaparsak da logonun öbür yarısı sola bitişik olarak görünür. Yani yapacağımız böyle bir rutin, logonun iki taraftan da yarısının ekrandan çıkabilecek şekilde sallanmasını sağlayabilir. Neyse, fazla konuyu dağıtmadan rutinin açıklamasına dönelim. İlk Lda-Sta çifti ilk satırın; ikincisi, ikinci satırın ekrana transfer edilmesini sağlar. Y registeri de kırk kere karakter taşınmasını, diğer bir deyişle tek bir satırın transfer edilmesini sağlar. Yani ilk olarak Matris + Offset adresinden itibaren 40 karakter ilk satıra taşınır, sonra Matris + Offset + 80 adresinden itibaren 40 karakter ikinci satıra taşınır, vb. Eğer 5 satırlık bir logo için bu işlemi yapacaksanız, son taşımanız gereken adres, Matris + Offset + 4*80'den başlar. Burada bir satır atlamak için 80 karakter ileri bakmamızın sebebi, matris satırlarının her birinin 80 karakter olmasıdır. Şimdi de size, karakter setine sıkıştırılan (yarım ekrandan bir-iki satır küçük) bir logonun MATRİS'inin nasıl kolayca 80 kolonluk matrise çevrilebileceğini anlatayım: İlk olarak herhangi bir adresten gerekli sayıda satırı ekrana taşıyacak bir program yazın. Bu program şöyle görünmelidir:
Ldy # 40 Döngü Lda Matris,y Sta $0400,y Lda Matris 4 40 ,y Sta $0428,y istediğiniz sayıda satır
için
Dey Bpl Döngü Rts
Bir de bu işin tersini yapacak bir program yazmanız gerekir. Yani, $400'den başlayarak, ilk logonun iki katı satırı istediğiniz adrese taşıyacak bir rutin olmalı bu. Şimdi matrisinizi belleğe yükleyin. Ekranı “Shift + CLR/HOME” tuşlarıyla temizleyin ve logo matrisini ekrana taşıyacak olan programı çalıştırın. Şimdi ekranda bir sürü garip karakter olması gerekir. İlk satıra çıkan ve yirmi kere “SHIFT + INS/DEL” tuşuna basarak boşluk ekleyin. Bunu yapınca, ikinci satırın bir aşağı kayıp yeni satıra yer açması gerekir. Bu işlemi, ikinci logo satırına (üçüncü ekran satırı oldu şimdi) da yapın. Daha sonra her satıra bu işlemi yapın ve ekranda boş bir yer bularak ekranı geri belleğe taşıyacak olan programı çalıştırın. Böylece 80 kolonluk matrisiniz hazır olacaktır. Eh, yolun yarısını geçtik artık. Şimdi de logonun sallanabilmesi için gereken SİNÜS tablosunu nasıl hazırlayacağımızı öğrenelim. Daha önce size sinüs tabloları hazırlamanın yöntemini öğretmiştim, fakat burada gereken sinüs tablosu, makine dilinde yapılacak olan hesapları minimuma indirmek için özel olarak hazırlanmış olmalıdır. Yani iki ayrı tablodan biri 80'lik karakter matrisinin neresinden başlanacağını, öteki de $D016 adresinin ne kadar sağa kayması gerektiğini göstermelidir. Bu işi yapmak için BASIC program yazmamız şart tabii ki. Bu program: 10 PI=3.14159:FOR R=0 TO 255 20 A=16+8*SIN(R/128*PI)+16 30 X=7-(A AND 7):Y=INT(A/8) 49
Klavyeyle gezinmek için ← ve → tuşları.
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