Bu sayfadaki yazılar
Sayfanın metni
Sayfa 22
Selamlar yeni bir assembler köşesiyle yine beraberiz. Bu ayki konumuzu geçen ay başladığımız copper çipi oluşturuyor. Bu sayıda skip komutunu, yatay ve düşey pozisyonların nasıl kontrol ve örnek copper listesi bular
copper komutu memory-bus'tan
cycle'lar çalarak işlevlerini yürütürler. COPPER SINIRLAMALARI : Copper'ın, bireysel olarak hardware register'larına etki edebildiğini onlara veri transferi yapabildiğini biliyoruz. Bunun
BİTLERİ : Hatırladığınız gibi copper pozisyonlarını kontrol için (WAIT komutu) ikinci 16 biti karşılaştırma belirleyici bitler olarak kullanıyorduk. İkinci word'ün 14-1 bitleri arası her zaman 1 yapılmalı 15. bit ise MOVE ve SKIP ko-
KOMUTU : Skip Yonu, vat ko-
mutu gibi bir pozisyonu bekler ve tarama o pozisyona ulaşmışsa yada daha fazla ise, bir sonraki komut çalıştırılmadan atlanır. Skip komutu diğer copper komutları gibi 32 bit yani iki longword'dan oluşur. Bu komutun bitleri aşağıdaki listede gösterilmiştir. İlk word : Bit 0; 1 yapılır. Bit no 8-15 ; raster ışınının y pozisyonu (yatay). Bit no 1-7 ; raster ışınının x pozisyonu. İkinci word Bit no: 0 ; 0 yapılır.
Bit no 1-7 ;x kontrol ile bellek lemek istiyorsak, bunu copper ile direkt olarak değil de, diğer bir yardımcı çip olan blitter ile yapmalıyız. Copper sayesinde, blitter'a çeşitli kopyalama, silme ya da çeşitli taşıma işlemlerini yaptırabiliriz. Copper'la hardware registerlerine veri transferi yaparken bazı limitlerle karşılaşırız. Bunlar 1) Copper kesinlikle $010 ($DFF020) adresinden küçük hardware registerlerine etki edemez. 2) Coprocessor, $020 adresinden yüksek olan tüm hardware registerine istenildiği anda ulaşabilir. 3) $010 - $020 adresleri arasında olan eden bitler. Bit no 8-14 ; y pozisyonunu kontrol eden bitler. Bit no 15 ; BFD biti (Blitter finished disable). Bu bit blitterin işlemini bitirip bitirmediğini kontrol eder. Bu komut için yolu, COPCON registerinin COPPER DAN adlı bitini 1 yapmaktır. YATAY POZİSYON : Bir raster pozisyonu yatay olarak $0 değeriyle $E2 değeri arasında olabilir. Böylece tam 113 adet x pozisyonu bulunmaktadır.
geniş bulabilirsiniz. Örnek olarak aşağıdaki komutu inceleyebiliriz. dc.w $6401 ; yatay pozisyon 100 ($64) ulaşmış yada geçmiş ise bundan sonraki komut atlanır. KOMUT UZUNLUKLARI : Tüm Copper komutları, hafızada iki 16 bitten yani bir longword'dan oluşur. Her bir komutu çalıştırdığında, 32 bitlik bilgiyi kendi belleğine yükler ve çalıştırır Ayrıca her
Fakat bu $04 değeri ile $47 değeri arasında olan pozisyonlar, low-res bir ekranda ekranın yan bölgelerinde kalır ve burada sadece $180 nolu renk olan arkaplan rengi gösterilebilir. DÜŞEY POZİSYON : Bir raster pozisyonunun düşey pozisyonuna raster çizgisi de denilebilir. Normal olarak 312 adet düşey pozisyon mevcuttur. COMPARISON (KARŞILAŞTIRMA)
yaptığından, ko-
mutun cinsine göre 1 yada 0 değeri yazılmalıdır. Normalde WAIT ve SKIP komutlarında ilk word'de belirtilen pozisyon, o anki tarayıcı video ışınının pozisyonu ile karşılaştırılmakta, buna göre bu komuttan sonra gelen MOVE komutu işleme konulmaktadır. WAIT yada SKIP word'ü ise x yada y pozisyonlarından hangisinin yada hangisinin hangi pozisyona kadar karşılaştırılacağını belirler. Örneğin : Comparison enable bitleri : %00000111110010000 şeklinde olsun. Pozisyon bitleri ise şeklinde olursa, sadece pozisyon bitlerinin sayı olarak comparison bitleriyle karşılığı olan bitlerin değeri 1 ise, tarama pozisyonu ile karşılaştırılır. COPPER REGISTER'LERİNİ KULLANMASI : Copper kullanımına ayrılmış birçok hardware register'i vardır. Bu hardware register'leri, copper'ı başlatmak, çeşitli durumları kontrol etmek gibi fonksiyonlara sahiptir. Copper ile ilgili hardware register'leri üç bölümde incelenebilir. Bunlar; listesinin yeri ile ilgili register-
> adreslerle ilgili olanlar. 3) Copper control register'leri. Şimdi bu türleri tek tek inceleyelim...
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 23
YER REGISTER'LERİ : Copper listesi-
nin yerini copper'a bildirmek için kullanılan hardware register'leridir. Bu amaçla 4 adet register ayrılmıştır. Fakat bu register'ler adres belirlemede kullanıldığından, 4 register Hi-pointer'lar ve low-pointer'lar ikişer, ikişer ayrılmıştır. Bu register'lerin adları şöyledir: COP1LC copper listesi adresinin yüksek 3 biti. COP1LCL copper listesi adresinin alt 16 biti. COP2LCH : İkinci copper listesi adresinin yüksek 3 biti. COP2LCL : İkinci copper listesi adresinin alt 16 biti. Hardware register'lerine bazı adresleri yazmak için mutlaka iki adet hardware register'i gerekmektedir, bu amaçla adres yazılması gereken register'ler iki ayrı register olarak, birisi high 3 bit, diğeri ise low 16 bit alır. Bunun sebebi hardware register'lerinin 16 bit olması fakat bu register'lere yazılacak chip ram adreslerinin 19 bit olmasından doğan bir durumdur. Örnek olarak COP1LC register'i COP1LCH ve COP1LCL olarak ikiye ayrılmıştır. Register'ine $25000 adresini yazmak için, ilk önce COP1LCH'ye $0002 değerini daha sonra register'ine ise $5000 değerini yazmalısınız. ATLAMA ADRES REGISTER'LERİ Atlama adres register'lerinden birine yazdığınız zaman, copper belirtilen COP LC adresine atlar ve copper listesini o adresten yeniden başlatır. Bu işlem için iki adet register ayrılmıştır. Bunlar; COPJMP1 ; Copper'ın COP1LC'deki adresten yeniden başlatılmasını sağlar. COPJMP2 ; Copper'ın COP2LC'deki adresten yeniden başlatılmasını sağlar. COPPER KONTROL REGISTER'LERİ : Daha öncede gördüğümüz gibi, copper istenildiği zaman bazı hardware register'lerine kısıtlama olmaksızın ulaşabiliyor, $10 - $20 adresleri arasında bulunan register'lerine ise sadece copper kontrol register'indeki CDANG (Copper Danger Bit) bitinin 1 yapılması durumunda ulaşabiliyordu. İşte copper kontrol register'i bu işlemi yapabilmemizi sağlamak için ayrılmıştır. Copper kontrol bitinin adı COPCON'dur ve kullanılan sadece bir adet biti vardır. Bu bit CDANG bitidir. ÖRNEK COPPER LİSTESİ : Şimdiki örneğimiz her şeyiyle tamam ve çalışmaya hazır bir copper komut listesidir. Copper listemiz, iki bitplanelik (birisi $21000, diğeri $25000 adreslerinde olmak üzere). Ekran renkleri ise beyaz, kırmızı, yeşil ve mavidir. Fakat beam pozisyonu 150 (y pozisyonu) ye geldiğinden renk yazmaçları değiştirilir ve renkler, siyah, sarı, uçuk mavi ve eflatun olarak değiştirilir. Şimdi örnek listeye bir göz atalım... COPPERLİST:
;Bitplane pointerlerinden ikisine $21000 ve $25000 adreslerini yükle.
; registerine $2 değerini yükler. ; $E2 (BPLİPTL) registerine $1000 değerini yükler. — ; $E4 (BPLAPTH) registerine $2 değerini yükler. ; $E6 (BPL2PTL) registerine $5000 değerini yükle.
; Renk registerlerini ayarla.
;$180 (COLOR0O) registerine beyaz rengini yükle. ;$182 registerine kırmızı ($100) değerini yükler. DC.W $184,$00F0 — ;$184 (COLORO2) registerine yeşil ($10) de- ğerini yükle. ;$186 (COLOR03) registerine mavi ($f) rengi yükler.
2 bitplane kullanan düşük çözünürlükte bir ekran aç.
$100,$2200 res, color on.
22 bitplane, lo-
! Taranması imkansız bir noktayı bekleyerek copper listesini bitir.
DC.W $FFFF,$FFFE ; Taranması imkansız olan 254,255 noktasını bekleyerek copper listesini bitirir. COPPER LİSTESİNİ YAPTIKTAN SONRA ÇALIŞMASINI SAĞLAMAK : Copper listesini başlatmak için iki yol izleyebiliriz. Bunlardan birisi direkt hardware aracılığıyla diğeri ise graphics library aracılığıyla. Hardware register'leriyle zaman daha hızlı ve daha güvenli olduğundan bu yolu seçmemiz daha akıllıca olmaktadır. Copper listesini assembler'da yazdıktan sonra, aşağıdaki küçük programcıkla çalıştırabiliriz.
LEA çat < custom chiplerinin adresi. LEA ;a0-bi-
raz önce yazdığımız copper listesinin adresi. MOVE.L a0,$80(at) bulu- 'nan copper listesi adresini COP1LC registerine yükle. Burada Normal olarak $80 ve $82 registerleri- nelliste adresi yazılır. MOVE.W $88(a1),d0 —— ; Copperin COP1LC için COPJMP1'den PC ad- Tesş almasını sağlar. İkinci yol olan graphics.library yoluyla açma yolu için ise şöyle bir program yazmalısınız.
: graphics library'yi aç...
move.| #'graphics.library',a0 -408(a6) move.l
: Copper listesini çalıştır
#COPPERLİST at move.l a1,$32(a6) Bu kodu girip çalıştırdıktan sonra, copper çalıştırılacak, listenin sonuna gelip, imkansız noktayı bekleyince yine başa dönecek ve listeyi baştan çalıştırmaya başlayacaktır. DURDURMAK : Daha öncede gördüğümüz gibi copper taranması imkansız bir bölge taranmaya çalışıldığı zaman duruyor ve yine listenin başına dönüyordu. Copper x pozisyonu olarak $e2 pozisyonundan sonrasını tarayamadığını biliyoruz. Böylece biz $fe gibi bir pozisyonu tararsak, copper $fe, x pozisyonuna ulaşamadığı için listenin başına döner. Bu aylıkta bu kadar. Bir dahaki aya kadar hoşçakalın ve mektup yazmaya devam edin. Mektuplarınızın konuyla ilgili olmasına özen gösterin. Özellikle komik mektup yazanların mektuplarının yayınlanma şansı %100. BURAK ÖZIŞIK