Amiga Dünyası sayı 5, sayfa 56

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 56

TANIYOR MUSUNUZ?

AMIGA'NIN EN ÖNEMLİ ÖZELLİKLERİNDEN BİRİ DE, BLITTER'DIR. IŞIK HIZINDA ÇALIŞAN BLITTER, BİRÇOK ÖZELLİĞİ İLE ÇOK KUVVETLİ BİR HARDWARE PARÇASIDIR. BU YAZI ONUN GİZLİ YÖNLERİNİ AÇIĞA ÇIKARACAKTIR...

Hiç bilmeyenler için söyleyelim; Blitter çok kuvvetli ve bloklar halindeki hafızayı ışık hızında taşıyan bir grafik dinamosudur. Bir kere gerekli register ayarlamaları yapıldığında, Blitter saniyede bir milyon pixel datayı istediğiniz bir yerden başka bir yere transfer edebilir. Bazen kendi işini tamamlayabilmek için 68000'i bir kenara itmesi gerekir. Bu duruma 'Blitter Nasty' adı verilir. Blitter işi bitmedikçe, 68000'e data-bus gidişini engeller ve hepsini kendisi kullanır. Blitter çizgisel ve dikdörtgen şekildeki datayı, alt 512k bellek içinde modulo registerleri sayesinde dolaştırabilir. Ayrıca bilgisayar betimlemeli tasarımlarda kesinlikle ihtiyaç duyulan 'Line-Drawing' özelliği ile de desteklenmiştir.

Amiga'nın bu özelliğini öğrenmek, 68000 dilini kullanarak Amiga'nın hardware'ini onikiden vurmak isteyenler için vazgeçilmez bir ihtiyaçtır. Belki makinanın hardware'ine daha çok önem vererek program yazmak O/S meraklılarına ters gelebilir. Onlar ROM'un içindeki 'Library' dediğimiz kısa rutinleri kullanarak ya da Workbench'de ikonlarla oynayarak vakit geçirebilirler, ama gerçekten iyi bir oyun yapılacağı zaman, işin gerçeği tüm DOS'u unutmanız gereğidir. O andan itibaren Amiga sadece birçok chipleri ve boş bir hafızası olan bir makinadır. 'Library' dediğimiz rutinleri kullanmak

68000'in boşa zamanını yemekten başka bir şey değildir. Bu kısa programlar makinanın olmayan bir özelliğini ortaya çıkaramaz, sonuçta yine makinanın donanımını kullanmak zorundadır. Öyleyse bunu kendimiz doğrudan yapmak varken, niçin gereksiz yere genel durumlar için yazılmış, bu yüzden birçok şeyi gereksiz yere kontrol ya da manipüle eden rutinleri kullanalım? Bu yüzden Blitter'i doğrudan kullanmayı anlatacağım.

Blitter'in data taşımasında kullanılabilecek A, B, C ve D olmak üzere 4 kanalı vardır. A, B ve C source (kaynak) kanalı, D ise destination (hedef) kanalıdır. Ek olarak Blitter 'Barrel shifter' denilen bir kaydırıcıya sahiptir. Kaydırma sayesinde, datalar (herhangi bir grafik) pixel düzeyinde transfer edilebilir. Eğer bu olmasaydı datalar sadece word (16 pixel) düzeyinde transfer edilebilirdi. Çünkü Blitter, bir word blitterdir. Sanki bunlar yeterli değilmiş gibi, A, B ve C source kanalları üzerinde istenilen 256 mantıksal işlemden herhangi biri hiç bir zaman kaybına uğramadan yapılabilir. İstediğimiz genişlikteki bir data dizisini istediğimiz genişlikteki bir alandan çekip transfer edebilmek için Blitter'in her kanal için ayrı modulo registeri vardır. Buna ek olarak A, B, C ve D kanallarının nereye baktığını gösteren adres registerleri de vardır. Blit yapmak için (Blitter'in yaptığı işe blit denir), ilk başta kullanmak istenilen kanalların adres ve modulo registerleri ayarlanır. Daha sonra kaydırma bitleri (barrel shift) ve minterm (mantıksal işlem) değerleri tanımlanır. Ayrıca blit işlemi iki yönde de yapılabildiğinden, yön belirtilmelidir. Bütün bunlardan sonra blit işleminin büyüklüğü BLTSIZE denilen registere girilir ve Blitter donanımı ateşlenir.

Şimdi Blitter'in özelliklerini özetleyip, daha sonra blit işlemini yapmak için tanımlanması gereken her registeri teker teker anlatacağım.

Blitter Donanımı Ve Özellikleri 1 - Data Transferi: A, B, C ve D kanallarıyla saniyede 1 milyon pixele yakın data taşıyabilir.

2 - Adres ve Modulo Registeri: Bütün kanallar için aynı olan adres ve modulo registerleri sayesinde alt 512K içinde dikdörtgen şeklinde datayı herhangi bir yerden istenilen bir yere taşıyabilir.

3 - Artırarak Veya Azaltarak: Blitter iki yönlü çalışabilir. Yani isterse source ve destination bölgesinin altından başlar ve ilerlerken adres registerini azaltır veya source ve destination bölgesinin üstünden başlar ve data transferi yaparken adres registerini artırır.

4- Çizgisel Veya Dikdörtgen Şeklinde Taşıma: Blitter çizgisel veya dikdörtgensel alanlarda işlem yapabilir.

5- Mantık işlemleri: Blitter donanımı, tek bir yerden bilgi alıp başka bir yere transfer etmekle sınırlı değildir. Üç source kanalı sayesinde, bu kaynaklar istenilen mantıksal işlemlerle birleştirilebilir. Böylece grafik programlarında bulunan grafik efektleri kolayca yaratılabilir, (or, xor, and, not...)

6- Kaydırma (Shifting): Kaydırma sayesinde word (16 pixel=16 bit) seviyesinde çalışan Blitter'e pixel seviyesinde işlem yaptırılabilir.

7- Maskeleme: BLTAFWM ve BLTALWM registerleri sayesinde maskeleme yapılabilir ve pixel seviyesinde istenmeyen datalar atılabilir.

BLITTER FONKSİYONLARI

VE GEREKEN REGISTERLER

-Adres Registerleri: Bu registerler, 4 kanalın nereye baktığını gösterir. Source kanalları olan A, B ve C adres registerleri transfer edilecek datanın hafızanın neresinde başladığını gösterir. Destination kanalı olan D kanalının adres registeri de datanın transfer edileceği yeri gösterir. A kanalı BLTAPT $dff050 L(long word) B kanalı BLTBPT $dff04c L(long word) C kanalı BLTCPT $dff048 L(long word) D kanalı BLTDPT $dff054 L(long word)

Ayrıca, hangi kanallar kullanılacaksa bu kanallar BLTCON0 registerindeki 11, 10, 9 ve 8 numaralı bitlerden aktif duruma getirilmelidir.

-Modulo Registerleri: Blitter için modulo vazgeçilmez bir unsurdur, çünkü modulo sayesinde Blitter istediği genişlikte bir alanı istediği genişlikteki bir alandan alıp, istediği genişlikteki bir alana koyabilir. Her kanal için ayrı bir modulo registeri vardır. 30313233343536373839 (Sıralı rakamlar hafızadaki ----------------------- sıralı word uzunluğundaki 40414243444546474849 adresleri temsil ediyor.)

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