Amiga Dünyası sayı 20, sayfa 34

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 34

minterms[8], blitter işlemlerinde kullanılan minterm bilgisini (blitter işlem kodunu belirler) taşır. Blitter ve minterm hakkında daha detaylı bilgiyi diğer assembler yazımda detaylı olarak açıklayacağım. Bundan sonraki iki word PenWidth ve PenHeight, çizim kalemimizin boyutlarını belirlemeye yarar. TextFont longword'u kullanılan font'un structure'ını gösteren bir pointer. AlgoStyle yazı yazarken kullanılacak yazım modunu belirler. Bu yazım modu yardımıyla aynı fontla değişik stillerde (italik, altı çizgili ya da bold) yazılar yazabilmek mümkün. Tablo III'te bu yazı stilleri ve kodları yer almakta. Bundan sonraki 5 data, kullanılan fontla ilgili bazı bilgiler içeriyor. İlk bilgimiz TxFlags. Bu word, kullanılan fontun tipini belirleyen flag'lerin yer aldığı word'dür. Bu flag'lerin anlamlarını Tablo IV'de görebilirsiniz. TxHeight, kullanılan fontun yüksekliğini, TxWidth ise genişliğini gösteren iki word'dur. TxBaseline, fontun taban çizgisinin font içinde ne kadar yükseklikte kaldığını belirler. TxSpacing ise her karakter arasında bırakılacak boşluğu gösteren bir word'dur. Son longword'ümüz olan RPJUser, özel kullanımlar için ayrılmıştır. Bundan sonra gelen 32 byte'lık alan ise ilerki gelişmeler için rezerve edilmiştir.

Rastport structure'ını da bitirdiğimize göre artık Bitmap structure'ına geçebiliriz. Bu hayli kısa bir structure (40 byte). Bu yüzden fazla yer kaplayacağını sanmam. Yine bu structure'ı düzenli bir şekilde ofset değerleriyle tablo olarak veriyorum (Tablo V).

BytesPerRow ile, o bitmap'te satır başına düşen byte sayısı belirlenir (=(piksel sayısı/8)+1). Rows, satır adedini belirler. Flags, bize o bitmap'de kullanılan flag'leri gösterir. BitMap structure'ımızdaki 5. byte olan Depth o bitmap içersinde kullanılan bitplane adedini gösterir. Pad adıyla tanımlanan word boştur ve ileriki kullanımlar için rezerve edilmiştir. 8. byte'tan sonra yer alan tablo, bitmap'e ait tüm bitplane'leri gösteren bir tablodur. Sırayla her bir longword'de bitplane'lerin adresleri yer alır. Gördüğünüz gibi sistem structure'ları aslında 8 bitplane için rezerve edilmiş. Bu ilerde yapılabilecek geliştirmeler içindir. Her konuda olduğu gibi Amiga library'ler ve structure'lar ilerki gelişmelere yönelik hazırlanmış. Bu şekilde bilgisayar devamlı kendini yenileyebilmekte. Oysa Amiga'dan üstün birçok bilgisayar geliştirilemediğinden batmış durumda (bu bilgisayarlar en güzel örnek Archimedes bilgisayarı). İlerisi için düşünülüp rezerve edilen byte'lara dokunmamanızı öneririm. Programınız KickStart'ın yeni versiyonlarında sorun çıkarabilir.

Programımızda açıklayacağım iki altyordamdan biri INITBITMAPS. Burada ilk önce graphics.library base'ini A6'ya atıyoruz. Bu şekilde bundan sonra jsr - xxx(A6) komutu kullandığımızda graphics.library'den bir fonksiyon kullandığımıza emin olabiliriz. Her zaman bir library fonksiyonunu çağırmadan önce doğru library base adresini A6 register'ına atın. Aksi halde böyle saçma sapan bir hata epey değişik sonuçlar doğurabilir. Siz de programı yazmak için harcadığınız sürenin en azından 2 katını hatayı aramak için geçirirsiniz. Bazen böyle çok ufak hatalar göze çarpmaz. Her neyse, gelelim sonraki satırlara. Burada yeni bir library fonksiyonu görüyoruz: INITBITMAP. Bu fonksiyon yardımıyla bir bitmap açabiliriz. Bunun için fonksiyonu çağırmadan önce bazı register'lara değerler atamalıyız. Bu değerlerden ilki, bitmap structure'ını barındırabilecek büyüklükte bir hafıza alanı. Bu alanın aynı anda çalışabilecek başka programlar tarafından da yanlışlıkla silinmesini engellemek için bölgeyi BLK komutu ile rezerve etmeliyiz. Hafıza ayırmak için bir diğer yöntem de exec.library'sindeki AllocMem fonksiyonu. Fakat bunu daha ilerde göreceğiz. Bitmap structure'ımızın bulunacağı hafıza bölgesinin başlangıç adresini A0 register'ına atmalıyız. D0'a bitmap'de kullanılacak bitplane adedini gireriz. D1 ve D2 register'ları da bitmap'imizin kaç piksel büyüklüğünde olacağını belirlemek içindir. InitBitMap fonksiyonunun library ofseti, -390 ($186)'dır. Bitmap'imize ait bitplane'lerin her birinin adresini de belirlememiz gerekmekte. Bunu aşağıda yapacağız.

Bu alt rutindeki ikinci kullanılan library fonksiyonu InitRastPort. Kullanımı gayet basit. Açılacak RastPort structure'ını barındıracak bir hafıza bölgesinin adresini A1'e atamamız ve fonksiyonu çağırmamız yeterli. Fonksiyonun library ofseti -198 (=$c6).

InitBitMap ve InitRastPort fonksiyonlarının parametrelerini Tablo V'te görebilirsiniz.

InitRastPort fonksiyonunu çağırdıktan sonra structure için ayrılan bölgede sadece bazı temel datalar değişecektir. Bunlar şöyle: Mask, FgPen, BgPen ve LinePtrn isimli datalar -1 ($ffff) değerini; DrawMode datası ise 1 (=JAM2) değerini alır. Font dataları ve pointer'ı, kullanılan sistem fontunu gösterir. Bu yüzden RastPort structure'ındaki BitMap datasını değiştirmemiz gerekmekte. Bunu da 'move.l #SBITMAP,SRAST+4' satırıyla gerçekleştirdim. Az önce açtığımız bitmap structure'ının adresini (=SBITMAP) RastPort structure'ımızın (=SRAST) 4. byte'ından sonrasına longword olarak yazıyoruz. Böylece SBITMAP, SRAST structure'ına bağlı bir structure olacaktır. Şimdi de demin belirttiğim gibi bitmap structure'ındaki bitplane adreslerini doğru olarak girmemiz gerekmekte. Bir bitplane kullandığımız için sadece 8. ofsetteki longword'a PIC'in adresini yazıyoruz. PIC, programın sonunda tanımlanmış olan bir label. Bura-

Tanımı bit numarası Anlamı

MODE 640 15 Med-res PLNCNTMSK 14,13,12 Bitplane adedi (binary olarak) PF2PRI 7 Double playfield'de 2.playfield'i üste getirir. HOLDNMODIFY 11 HAM modunu açar. DBPLF 10 Double playfield modunu açar. INTERLACE 2 Interlace ekran açar. COLORON 13 Renkli grafik modunu açar/kapatır. Tablo II - RastPort structure'u grafik modu flag'ları

Tanımı Değeri Açıklama FSF NORMAL 0 Hiçbir özellik yok. FSF EXTENDED 8 Geniş font (60 kolonluk yazı ekranı) FSF ITALIC 4 İtalik yazı FSF BOLD 2 Bold yazı FSF_UNDERLINED

Tablo III- Font

1 Altı çizili yazı stilleri (kombinasyon yaratmak için değerleri toplayınız.)

Tanımı FPF ROMFONT FPF DISKFONT FPF TALLDOT FPF WIDEDOT FPF PROP. FPF REMOVED

Değeri 1 2 4 16 32 128

Açıklama Font ROM'da yer almakta. Font disketten yüklenmiştir. hires non-interlace modunda kullanmak için. lores interlace modu için font. Proporsiyonal font. Font hafızadan silinmiştir.

Tablo IV - Font flag'ları

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