11.07.2015 Views

Amiga Dunyasi - Sayi 23 (Nisan 1992).pdf - Retro Dergi

Amiga Dunyasi - Sayi 23 (Nisan 1992).pdf - Retro Dergi

Amiga Dunyasi - Sayi 23 (Nisan 1992).pdf - Retro Dergi

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ASSEMBLER'daYENİ UFUKLARSelam! İşte yine sizlerle beraberiz. Bu ay, sprite'lan biraz dahakarıştıracağız. Geçen ay bir sprite'ı ekranda nasıl göstereceğimiziöğrenmiştik. Bu ay ise aynı şekilde 8 sprite'ı birden ekranda göstermekiçin yapılması gerekenleri inceleyeceğiz. Aynı zamandada sprite'ları hareket ettirmeyi de göreceğiz. Dilerseniz vermişolduğum programı hemen yazıp kaydedin.Programı incelemeye başlamadan önce, size yine biraz teorikbilgi vermemde fayda var. Aslında burada yeni bilgiler yerine,geçen ay kazandığınız bilgileri biraz tazeleyeceğim. Hatırlarsanızsprite koordinatları sprite datalarının ilk üç byte'ında bulunmaktaydı.Bunlar sırayla VSTART, HSTART ve VSTOP idi. İstediğimizbir sprite’ı hareket etirmek aslında gayet basit. Örneğinsprite'ı sağa doğru hareket ettirmek istediğimizi varsayalım. Bununiçin her ekran tranmana sprite datalarındaki ikinci byte'ıbir artırmamız yetmekte. Bu şekilde HSTART'ın aldığı değer herekran taranmasında 1 artacak. Sprite’lar da her ekran taramasındatekrar çizildiğinden sprite'ımız ekran tarama ışınına senkron olaraksağa doğru hareket edecektir. Sprite hızını artırmak için herseferiınde 1 değil de başka bir sayı eklememiz yeterli. Fakat yüksekbir sayı kullanırsanız bu sefer de sprite titremeye başlayacak.Yavaşlatmak için de her seferinde HSTART'a 1/2 ya da 1/4 değereklemek gerekmekte. Fakat Assembler'da sadece tam sayılarıhiçbir uğraş olmadan kullanabildiğimizden 1/2 ya da 1/4 değerliklibir sayı elde etmek için değişik bir yöntem uyguluyoruz:HSTART değerini ekran tarama ışını 2 ya da 4 defa ekranı tamolarak taradığında 1 artırıyoruz. Nasıl, basit değil mi? Tarama ışınıylasenkronizasyonu karıştırmamak için sprite hız değerini2'nin katlan (2, 4, 8, 16, ...) ya da askatları (1/2, .1/4, 1/8, 1/16,...) olarak seçmemizde fayda var.Sprite'ı yukarıya ya da aşağı doğru hareket ettirmek için de aynıyöntemi uyguluyoruz. Fakat burada sadece VSTART değerinideğiştirmiyoruz. Aynı zamanda VSTOP'u da VSTART'la aynıoranda artırmalı ya da azaltmalıyız. Aksi halde sprite'ımız bazenbozuk gözükebilir, bazen de ekranda sprite'ın altında bir sürüpislik oluşabilir. Bu pislikler aslında sprite datalarından hemensonra gelen bilgilerdir. Sprite yüksekliği (VSTOP-VSTART) herseferinde değişik olacağından sprite'ın altındaki pisliklerin deyüksekliği-otomatik olarak değişecektir. Bazen de negatif değereulaşılacağından (VSTART, VSTOP'dan büyük olduğu durumlarda)ekranda sprite yerine sadece pislik gözükebilir.Şimdi biraz da sprite'ların değişik bir özelliği hakkında bilgivermek istiyorum: Extended (attached) sprite. Bunun hakkındadetaylı bilgiyi aşağıda bulabilirsiniz.Bildiğiniz gibi sprite'lar nonnalde 4 renk ve 16 piksel genişliklesınırlıdırlar. Fakat bazı durumİarda 32 piksel genişliğinde yada 16 renkli sprite'lar da olmasını isteriz. Programımızda sprite'larınhepsini kullanmadığımız durumlarda bu mümkün olmakta.32 piksel genişlikli sprite’lar için iki sprite'ı yanyana kullanmamızyeterli olabilir. Sprite kordinatlarını da değiştirirken heriki sprite’ın koordinatlarını da aynı anda değiştirmemiz gerekmekte.Fakat hala 16 rengi nasıl oluşturabileceğimizi bilmiyoruz.Copper çipj sprite’ları ikili gruplar halinde işlemekte. Bu yüzdende sprite renkleri 4 grup olarak sınırlıdır. Her bir renk grubuardarda gelen iki sprite’ın rengini gösterir. Renk register'lerininüst yarısı ($dff1a0-$dff1be) aynı zamanda sprite'ların da renklerinitaşıdığını düşünürsek her sprite renginin aşağıdaki listede yeralan renk register'lerinde bulunması gerektiğini de kabul etmişizdemektir.Grup 0 : Sprite 0, 1 - $dff1a0, $dffla2,$dffla4, $dffla6Grup 1 : Sprite 2, 3 - $dffla8, $dfflaa, $dfflac, SdfflaeGrup 2 : Sprite 4, 5 - Sdfflb0, $dfflb2,$dfflb4, $dff lb6Grup 3 : Sprite 6, 7 -$dfflb8,$dfflba,$dfflbc, SdfflbeExtended sprite modundarenk register'lerinin üst yarısıkomple bu genişletilmiş spriteiçin kullanılmakta. Ne deolsa genişletilmiş sprite 16renkten oluşmakta. Dilerseniztüm sprite'ları genişletilmişsprite olarak gösterebilirsiniz.Fakat bu durumda sprite sayısı4 ile sınırlı kalacaktır. Ya da sadecebir-iki genişletilmiş sprite kullanıp gerisini normal sprite olarakda kullanabilirsiniz. Fakat bu durumda tüm renkregister'lerini birbirleriyle çakışmayacak şekilde ayarlamalısınız.Peki extended sprite'ı nasıl mı kullanacağız? Gayet basit; extendedsprite'ı oluşturan grubun sprite'larını her zaman üstüstegelecek şekilde koordinatlarını belirlememiz gerekmekte. Ayrıcaextended sprite'ı oluşturan ikinci sprite'ın dördüncü byte'ındaki(SPRxCTL) ATTACH bitini (7. bit) de set etmemiz gerekmekte.Renkleri oluşturmak için de her iki sprite'ın bitplane'lerini üstüstegetirmemiz gerekmekte. Renk kodunu aşağıdaki tablodan rahatlıklabulabiliriz.Renk no Spr0 Sprl Renk register'i0 00 00 $dffla01 01 00 $dffla2<strong>23</strong>10110000$dffla4$dffla64 00 01 $dffla85601100101$dfflaa$dfflac7811000110$dfflae$dfflb091001101010$dfflb2$dfflb4111211001011$dfflb6$dfflb813 01 11 $dfflba141510111111$dfflbc$dfflbeNe yazık ki bu aylık yerim dolmaya başladığından ancak gelecekay size extended sprite ile ilgili bir örnek verebileceğim.Şimdilik bu ay vermiş olduğum örneği incelemeye başlayalım.Programın genelini anlamanız o kadar zor değil. Hemen gözeçarpan kısımlar arasında ekran tarama ışınını kontrol etmediğimdir.Sprite hareket ettirme rutinini işlemek biraz zaman aldığındanbir de ekran tarama ışınını bekletseydim ekrandaki tümsprite'lar titremeye başlıyordu. Fakat hiç bekleme olmadan dasprite'lan hareket ettirmeye kalkıştığımda sprite'lar epey yüksekbir hızla hareket ediyordu. Bu yüzden ben de ekran tarama ışınınıbekleteceğim yerde boş bir döngü yaratarak 800'den -l'e kadarsaydırma rutini ekledim. Bu şekilde sprite'lar tam istediğim birhızla hareket etmekteler. Sprite'ları biraz daha hızlandırmak içinbu değeri azaltmanız kafi olacaktır. Aynı şekilde yavaşlatmakiçin de bu değeri anırmanız gerekmekte. Fakat bu değeri fazladüşük ya da yüksek seçerseniz sprite'lar ya titrer, ya da çok hızlıhareket eder.AMIGA DÜNYASI 47

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!