Amiga Dünyası sayı 5, sayfa 57

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 57

50515253545556575859

Eğer amacımız 31-35, 41-45 ve 51-55 numaralı wordlerin oluşturduğu dikdörtgen şekilli data parçasını blit etmek ise, moduloyu tanımlamamız gerekir. Modulo, büyük parçanın genişliği ile almak istediğimiz parçanın genişliği arasındaki farktır. Bu durumda 35. word ile 41. word arasında 5 word vardır. Yani, 31-35 dizisinden sonra 5 word atlanarak 41-45 parçasına ulaşılabilir. O zaman modulo registerine 10 değeri girilir. Çünkü modulo registeri atlanacak byte sayısını gösterir. (1 word = 2 byte) A kanalı BLTAMOD $dff064 W(word) B kanalı BLTBMOD $dff062 W(word) C kanalı BLTCMOD $dff060 W(word) D kanalı BLTDMOD $dff066 W(word) Alttaki iki register bundan sonra anlatılacakların daha iyi açıklığa kavuşmasını sağlayacaktır. Blit kontrol registerleri ve Blit kontrol register2 BLTCON0 - BLTCON1

Bit W(word) $dff040 W(word) $dff042

15 A shift 3 B shift 3 14 A shift 2 B shift 2 13 A shift 1 B shift 1 12 A shift 0 B shift 0 11 A kanalını aktifleme 10 B kanalını aktifleme 09 C kanalını aktifleme 08 D kanalını aktifleme 07 minterm 7 06 minterm 6 05 minterm 5 04 minterm 4 Exclusive fiil aktifleme 03 minterm 3 Inclusive fiil aktifleme 02 minterm 2 Fiil carry girişi 01 minterm 1 Azaltarak/Artırarak 00 minterm 0 Çizgi modu

NOT: BLTCON1 registerinin 0. biti açılırsa çizgi moduna geçilir. Bundan sonra BLTCON0 ve BLTCON1 registerinin görevi değişir.

•Artırarak Veya Azaltarak Modu: Eğer destination ve source adresleri birbirleri ile çakışıyorsa ve data hafızanın ilerki kısmına transfer ediliyorsa, azaltarak modu seçilmelidir. Yine eğer destination ve source çakışıyorsa ve de hafızanın gerisine doğru transfer ediliyorsa, artırarak modu seçilmelidir. Hangi modu istediğinize bağlı olarak BLTCON1 registerinin 1. biti değiştirilir. Azaltarak için bu bit 1 değerini alır. Artırarak modu için bu bit kapalı tutulur.

•Minterm (mantıksal işlemler): Üç source kanalı olan A, B ve C üzerinde istenilen 256 işlemden herhangi biri hiçbir vakit kaybı olmadan yapılabilir ve sonuç destination kanalıyla istenilen bir yere aktarılabilir. Peki, mintermlerin neyi anlattığı nasıl anlaşılır? İstediğimiz bir işlemi (minterm) nasıl tanımlarız?

işlemler ABCABCABCABCABCABCABCABC BLTCON0 7-0 bitleri 7 6 5 4 3 2 1 0

Üzeri çizililer, o kanalın NOT işlemi gördüğünü yani o kanaldaki bilginin tam tersinin alındığını anlatır. Yardımcı olması için temel mantık işlemleri olan AND, OR ve NOT'ın tablosu aşağıdadır. 1 AND 0 = 0 1 OR 0 = 1 NOT(1) = 0 1 AND 1 = 1 1 OR 1 = 1 NOT(0) = 1 0 AND 0 = 0 0 OR 0 = 0 0 AND 1 = 0 0 OR 1 = 1 Örnek olarak, 5. ve 1. bitleri açalım. Minterm değeri $22 (% 0010 0010) olsun. İşlem tablosuna bakarak formül ortaya çıkarılır.

D= ABC + ABC (çarpma işlemi AND, toplama işlemi OR'dur) = BC(A+A) herzaman (A+A)=1 = BC Böylece BLTCON0 registerinin 0-7 bitine $22 girilirse, blit işlemi sırasında B kanalındaki bilgi NOTlanır ve C kanalındakiyle AND'lenir. Sonuç D kanalıyla istenilen bir yere aktarılır.

Bazı önemli mintermler: D=A ($F0) D=B($CC) D=C($AA)

D=A XOR B ($3C) (Deluxe Paint III'ün animasyon saklama şekli)

Daha geniş bilgi için Amiga Hardware Manual'i inceleyin.

-Kaydırma (Shifting): Baştan beri söylediğimiz gibi. Amiga'nın Blitter'i word blitter'dir. Yani taşıyacağı bilgiyi word word taşır, pixel pixel (bit bit) değil. O yüzden aldığınız bir bilgiyi hafızanın içinde ikinin katı olan adreslere koyabilirsiniz. Bu da, 16 pixellik bir incelik sağlar. Fakat bu incelik, hiç yeterli değildir. Kullanıcı aldığı bilgiyi istediği pixelden itibaren koymak isteyecektir. Bunun için donanım, 'Barrel Shifter' ile desteklenmiştir. Bu, 1 pixel inceliğinde işlem yapma olanağı sağlar. Şöyle ki, herhangi bir datayı $70000 adresinin 5. bitinden itibaren yerleştirerek ekranda $70000 adresinin 5 pixel sağında görmek istiyorum. Yapmam gereken kaydırma değerini 5 vermektir. Fakat kaydırma yalnız A ve B kanalı için geçerlidir. BLTCON0 registerinin 15-12 bitleri A kanalı için, BLTCON1 registerinin 15-12 bitleri B kanalı için ayrılmıştır. Böylece bu bitlere 0 ile 15 arasında değer girilebilir ki, bu da Blitter'in 16 pixel (word)'lik işlem kesinliğini 1 pixellik bir kesinliğe çıkarır. •Maskeleme: Bu özellik, sadece A kanalı için geçerlidir. Gerekli registerler şunlardır: BLTAFWM $dff044 W(word) BLTALWM $dff046 W(word) Herzaman transfer edeceğimiz grafik, 16 pixelin (1 word'ün) tamamı olmayabilir. İstemediğimiz bilgiler, pixel düzeyinde atılmak istenebilir. İşte o zaman gereksiz bilgiler Blitter'in maskeleme kabiliyeti ile kapatılabilir. Maskeleme her iki registerin AND'lenip sonuçta '0' kalan bitlerin blit sırasında Blitter tarafından atılmasıyla olur. Örnek olarak BLTAFWM %1111111111001100, BLTALWM %0000110111110011 değerlerini alsın. Bu iki registerin AND'lenmesinin sonucu %0000110111000000 değeridir. Böylece 1., 2., 3., 4., 7., 11., 12., 13., 14., 15. ve 16. pixeller maskelenmiş yani atılmış olur. Word word yapılan blit sırasında 5., 6., 8., 9. ve 10. pixellere (bitlere) dokunulmaz.

-Blit Büyüklüğü: BLTSIZE registeri, blit işleminin büyüklüğünü tanımlar. Bu registerin tanımlanmasıyla Blitter donanımı ateşlenmiş olur. Yani yukarıda yazılı registerlerin tanımlanması blit işleminin başlaması için yeterli değildir. Son aşama olarak blit miktarı belirlenmelidir. Miktarın BLTSIZE registerine girilmesiyle daha önce tanımlanmış Blitter registerleri doğrultusunda blit başlar. BLTSIZE(yükseklik,genişlik) $dff058 W(word) Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 y9 y8 y7 y6 y5 y4 y3 y2 y1 y0 g5 g4 g3 g2 g1 g0 Blit edilecek datanın grafik olduğunu kabul edersek, yükseklik bitlerine (15.-6. bitler) blit edilecek bölgenin pixel olarak yüksekliği, genişlik bitlerine de (5.-0. bitler) blit edilecek bölgenin pixel olarak genişliğinin 16 ile bölümü girilir. Diğer bir şekilde genişlik bitlerine blit edilecek bölgenin word olarak genişliği girilir. ( 16 pixel = 1 word ) Blit işlemi göründüğü kadar kolay değildir. Eğer blit işlemi bitmeden yeni bir blit emri verilirse, Blitter tüm hafızaya atlar ve sistemi crash ettirir. Bundan dolayı yeni bir blit emri verilmeden daha önceki blit işleminin bitip bitmediği kontrol edilmelidir. Bu kontrol DMACONR registerinin 14. biti olan 'Blitter Busy' bitinden yapılabilir. Bu bitin 1 değerini alması Blitter'in meşgul olduğunu, 0 değerini alması Blitter'in boş olduğunu gösterir. DMACONR $dff002 W(word) Artık bu kadar yardım yeterli. Gerisi siz meraklı arkadaşlarımıza kalmış. Blitter'in bütün bu özelliklerinin birleştiğinde ne kadar güçlü olduğunu söylememe gerek yok herhalde. Çünkü birçok baş döndürücü grafiklerin anime edildiği yabancı oyunlar bunun göstergesi. Fakat bu bilgileri daha da pekiştirerek neden siz de göze hoş gelen animasyonlar yapmayasınız? İyi blitler ...

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