Plazma sayı 6, sayfa 52

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 52

Immediate: MOVE.L #556,DO SUB.W #2,A0

Böylece adresleme modlarının sonuna gelmiş olduk. Bu modların isimlerini ezbere bilmenize tabii ki gerek yok, sadece aklınızda bulunsunlar, gerektiğinde elinizdeki araçları ve nasıl kullanıldıklarını bilin yeterli. Burada verdiğim örneklerin çoğunda MOVE komutunu kullandım ancak bu modlar neredeyse tüm komutlar için geçerlidir (ADD, SUB, BTST, NOT, EOR vb.)

Şimdi sırada Amiga'nın belki de en can alıcı konularından biri olan Copper var.

Copper

Copper, Amiga'nın Custom chip'lerinden biridir, çoğunlukla grafik işlemleriyle ilgili kullanılmasına karşın genel amaçlı olarak da kullanılabilir; ses, blitter ve sprite'ları kontrol edebilir; blitter aracılığıyla hafızada blok kopyalama işlemi yapabilir. Amiga'nın multitasking yapısında çok önemli bir yeri vardır, çünkü copper 68000'den bağımsız çalışır, kendi komutlarını işlerken CPU'ya yük olmaz. Bu sayıda copper komutlarını, bir copper listesini nasıl aktif edebileceğimizi, copper ile ilgili adresleri ve son olarak da bazı örnek copper uygulamalarını göreceğiz.

Copper Komutları

Copper bu kadar çok işi sadece 3 komut ile gerçekleştirir. Bu komutlar WAIT, MOVE ve SKIP'tir. Copper komutları program içinde bir liste halinde verilir. Pek çok Amiga programında uzun listeler halinde bu komutları görebilirsiniz. Bu listeler aslında copper'ın belirli raster satırlarını bekleyip belirli adreslere istenen değerleri yazmasını sağlayan komut listeleridir. Bu listelere “Copper List” denir.

Bir copper komutu 2 word'den oluşur. Basit bir copper listesi aşağıdaki gibi görünür:

DC.W $A001, $FFOO DC.W $0180, $OBBB DC.W $A101, $FFOO DC.W $0180, $0CCcc DC.W $A201, $FFOO DC.W $0180, $OAAA DC.W $FFFF, $FFFE

Bu listeyi şöyle özetleyebiliriz, $A0'ıncı raster pozisyonunu bekle, arkaplan rengini gri ($0BBB) yap, $A1'i bekle, rengi $0CCC yap, $A2'yi bekle, rengi $0AAA yap, listeyi bitir.

Şimdi sırasıyla copper komutlarını inceleyelim.

WAİT

Bu komut istenen x,y raster pozisyonunun beklenmesini sağlar. Evet, copper dikey tarama pozisyonu (vertical blanking) bekleyebildiği gibi yatay tarama pozisyonunu da (horizontal beam position) bekleyebilir. WAIT komutu aşağıdaki gibidir:

DC.W $YYXX, ŞAABB

Burada YY beklenecek dikey raster pozisyonu, XX yatayda beklenecek raster pozisyonudur. AA ve BB ise dikey ve yatay karşılaştırma bitleridir. XX ve YY'nin sadece istenen bitleri raster pozisyonu ile karşılaştırılır. Şimdilik bu aklınızı çok karıştırmasın. AA olarak $FF verdiğinizde tam olarak belirttiğiniz raster satırı beklenir. Benzer şekilde BB olarak $FE verdiğinizde de belirttiğiniz yatay pozisyon beklenir.

Burada ayrıca ilk word'ün ilk biti 1, ikinci word'ün ilk biti 0 olmalıdır. Bu, komutun WAIT olduğunu belirler.

;50.raster satirini bekle ;X pozisyonunu dikkate alma DC.W $5001,$FFOO ;255.raster satirini bekle pozisyonunu dikkate alma DC.W $FFO1,$FFOO ;160.Y pozisyonu ve ;7129.X pozisyonunu bekle DC.W

Burada masking bitlerini interrupt ile birlikte kullanarak, örneğin her 16 satırda bir işlem yapılmasını sağlayabiliriz. Bu konuyu daha ileride göreceğiz.

Aklınıza aşağıdaki copper listesinin çalışmayacağını düşünebilirsiniz:

DC.W $A001,$FFOO DC.W $9001,$FFOO

Burada önce $A0 daha sonra ise $90. raster pozisyonunu beklemeye çalışıyoruz. $A0'dan sonra $90'lı beklemek (zaten geçmiş olan bir pozisyonu beklemek) tüm tarama zamanını alacaktır. Ancak WAIT komutunun çalışma şekline baktığımızda durum düşündüğümüz gibi değildir. WAIT komutu raster pozisyonu (raster beam position) verilen pozisyondan büyük veya ona eşit olduğunda devam eder. Yani yukarıdaki iki satırın ilki çalıştıktan sonra ikinci satır hemen geçilecektir. ($90. satır zaten geçilmiş olduğundan dolayı.)

Amiga'da PAL ekran için raster pozisyonu (0,0)'dan (312,226), yani toplam 312 dikey raster satırı ve 226 yatay pozisyon vardır. Bu nedenle copper yatayda 226'dan ($E2) sonrasını bekleyemez. Ayrıca WAIT komutunun yatay/dikey pozisyon parametreleri 8 bit olduğunda 255. raster pozisyonuna kadar bekleyebilir. 255'ten sonraki raster satırlarını nasıl bekleyeceğimizi daha ileride göreceğiz.

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