Plazma sayı 6, sayfa 54

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 54

Bit 7-1 Yatay karşılaştırma bitleri, Horizontal position compare enable bits (HE).

SKIP komutu raster pozisyonu, verilen değere eşit veya büyük olduğunda bir sonraki komutun işlenmeden geçilmesini sağlar. Normalde bu komuta çok fazla ihtiyaç duymayız. Aşağıdaki örnek satır, dikey raster pozisyonu 100'ü ($64) geçtiyse bir sonra gelen komutun atlanmasını sağlar.

DC.W $6401,$FFO1

Copper Listesini Durdurmak

Bir copper listesini nasıl hazırlayacağımızı, istediğimiz pozisyonu nasıl bekleyeceğimizi biliyoruz. Peki bir copper listesini nasıl durduracağız? Aslında gayet basit; copper listesi asla ulaşamayacağı bir pozisyonu bekletildiğinde sona erer ve bir sonraki taramada başa döner. Aslında copper listesi her taramada baştan yüklenir, yani oluşturduğunuz liste bir taramayı aşıyorsa eğer yarım kalacak ve yeni taramada liste başa alınacaktır. Aşağıdaki WAIT komutu copper listesini sona erdirir.

DC.W $FFFF,ŞFFFE

Burada X ve Y pozisyonu olarak $FF ve $FF'i bekletiyoruz, ancak biliyoruz ki yatayda copper en fazla $E2'ye kadar bekleyebilir. Bu şekilde sistem copper listesinin sona geldiğini anlar ve sonraki tarama başlangıcında listeyi baştan başlatır.

Copper Listesini Çalıştırmak

Bir copper listesini oluşturduktan sonra çalışmasını sağlamak için aşağıdaki 2 yöntemden birini kullanmalıyız.

Doğrudan hardware yazmaçlarına copper listesinin adresini yazmak ve copper'ı tetiklemek veya graphics.library aracılığıyla copper'ı aktive etmek.

Bir copper listesi oluşturduktan sonra aşağıdaki şekilde aktif hale getirebiliriz:

LEA LEA MYCOPPERLİST,Al MOVE.L A1,$80(A0) MOVE.W #0,$88(A0)

Burada ilk olarak $DFF000 (custom chip base address) A0 register'ına alınıyor. İkinci satırda MYCOPPERLIST isimli label adresi (bizim oluşturduğumuz copper listesi) A1'e alınıyor. A1'deki değer (copper listemizin adresi) A0'daki adresin $80 ilerisine, $DFF080 (COP1LC) adresine yazılıyor. Son olarak $DFF088 (COPJMP1) adresine herhangi bir değer yazılarak copper listesinin tetiklenmesi sağlanıyor. (Bu adres bir strobe adrestir, yani herhangi bir yazma işlemi yapıldığında bir işlemi tetikler)

COP1LC ve COPJMP1 adreslerine istediğimiz zaman yazabilir ve copper'ın farklı bir listeyi göstermesini sağlayabiliriz, hatta bu adreslere copper kendisi de yazma işlemi yapabilir, bu şekilde copper'ı kendi içinde bir döngüye sokabiliriz.

İkinci yöntem ise graphics.library'yi kullanmaktır.

;Grafik kutuphanesini ac

MOVE.L $4,A6 MOVE.L #GEXNAME, A0 JSR OpenLibrary(A6)

;Hata varsa D0-0 olur TST.L DO BEO ERROR ;Gfx librarynin ofset A6ya al

MOVE.L DO,A6 ;Copper listesini calistir LEA MYCOPPERLIİST,AO MOVE.L

Burada “OpenLibrary” ifadesini kullanabilmek için elbette kodun başında graphics.i'yi include etmek gerekir. Veya “JSR OpenLibrary(A6)” yerine “JSR -408(A6)” da yazabilirsiniz.

Bir demo, intro veya oyun yazdığımız zaman açtığımız tüm kütüphaneleri kodun sonunda kapamalı ve eski copper adresini geri yazmalıyız. Bu, temiz bir çıkış için gereklidir. Örneklerde bunun nasıl yapıldığını görebilirsiniz.

Copper

ile neler yapılabilir

Bir copper listesi ile aslında makinenin neredeyse tüm kaynaklarına ulaşabilirsiniz. Tüm hardware register'larına yazabilir, blitter ile veri transferi yapabilir, ses veya sprite'ları kullanabilirsiniz.

Ancak en yaygın kullanım şekilleri şunlardır: ekranda çeşitli renk efektleri oluşturmak (raster barlar ya da Amiga'da daha yaygın söylenişiyle copper bar), sprite multiplexer (aynı numaralı sprite'ların belirli bir raster pozisyonundan sonra tekrar kullanılması), ekran/bitmap/sprite renklerinin veya data göstergeçlerinin istenen rasterlarda değiştirilmesi (2 renkli bir ekran açıp yüzlerce renk kullanabilirsiniz), hatta ekranın üst yarısı 320x256 çözünürlükte iken alt yarısını 640x256 yapabilirsiniz veya bitmap pointer'larını her satırda değiştirerek bir resmi ters gösterebilir, daraltıp uzatabilir, flood efekti yapabilirsiniz.

Örnekler

Sıralama (Sorting)

Aşağıdaki kod parçası <table>'da verilen tablodaki değerleri büyükten küçüğe doğru sıralamaktadır.

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