Bu sayfadaki yazılar
Sayfanın metni
Sayfa 27
Merhaba Assembler'cılar. Geçen ay son örneğimizin ilk beş satırının açıklamasını yaparken, sayfalarımızı doldurmuştuk. Şimdi kaldığımız yerden yazı dizimize devam ediyoruz.
Programımızın dördüncü satırı olan MOVE.L D0,INTBASE'in önemini size biraz daha anlatmak istiyorum. Geçen sayıda da söylediğim gibi örneğimizin ilk beş satırının görevi Intuition Library'i açmak için idi. Dördüncü satırımızda Exec Library'den Open Library rutinini çağırdıktan sonra, ortaya çıkan Intuition Library'nin tablo adresini işlemci bize D0 data registerine göndererek ulaştırmaktadır. Tabii bize de onu oradan alıp hafızada herhangi bir yere kaydetmekten başka bir iş kalmıyor.
Bu adresi D0'dan alıp başka bir yere koymamızın amacı gayet basittir. D0 hem bizim için, hem de sistem için en çok kullanılan registerlerden biridir. Aynı zamanda onu hafızada kalıcı bir yere koyarak her zaman elimizin altında kullanıma hazır bir kıvamda bırakıyoruz. Örneğimizde olduğu gibi, INTBASE isimli label'ın gösterdiği hafıza adresine gönderiyoruz. Ne zaman Intuition Library'in ihtiyacını duyarsak hemen onu oradan alarak (Örneğin Move.L INTBASE,A6) library içinden istediğimiz rutinleri çağırırız.
Şimdi örneğimizin 6-10'nolu satırları ile açıklamalarımıza devam edelim.
6 move. l INTBASE.a6 7 lea WINDOW.a0 8 jsr -$cc(a6) 9 move.l d0,WINBASE 10 beq EXIT2
Altıncı satırın içeriğinin ne olduğunu artık biliyorsunuz. Yine de açıklama gerekirse, INTBASE label'ı ile adlandırılmış adresteki longword değeri A6 registerine yolluyoruz.
Yedinci satır. Open Window rutininin tek parametresi olan structure'ı, structure hafıza adresinin rutine yerini bildirilmesidir.
Sekizinci satırda rutin çağrılıyor. Burada dikkat edilmesi gereken husus; bu satırda gördüğünüz gibi $cc değeri ile a6 adres registerindeki değeri topluyor ve işlemciyi bu sonucun gösterdiği yere dallandırıyoruz. Tabii altıncı satırda a6'ya intuition library tablo adresini gönderdiğimizden, bu değer ile $cc'nin toplamı da Intuition Library'nin Open Window'una karşılık geliyor.
ÖMER SİNAN POLAT Dokuzuncu satırda ise rutin çıkışında oluşan window'un window durum bilgilerini tablo'nun adresini WINBASE isimli label'ın gösterdiği hafıza adresine gönderiyoruz. Tabii window'umuzu açarken herhangi bir problemler ile karşılaşabiliriz. Mesela yeterli hafıza olmayabilir. Bu gibi durumlarda window açılamadığından sistem bize bu durumu burada D0 registerine 0 değeri koyarak belirtir. Bizde 10. satırdaki çıkış satırı ile bu gibi tehlikeli durumlardan programı korumuş oluruz. Buradaki koruma kelimesi, açılamayan bir window'u kapatmaya çalışmamaktır (EXIT'de olduğu gibi). Bu gibi durumlarda mesela bilgisayarınız kilitlenebilir veya başka aksaklıklar görülebilir.
Buraya kadar anlattığımız kısım örneğimizin açılış için gerekli olan kısmı olarak yorumlayabiliriz.
Evet... Yukarıda Intuition Library açmıştık. Arkasından da bir rutin çağırdık. Rutinin ismi: Open Window. Tabii ki bu rutin Intuition Library'ye ait. Daha önce de size söylediğim gibi, her Library rutinin parametreleri vardır. Bu rutinin de parametreleri şöyledir:
Rutin çağrılmadan önce yapılması gereken işlere geçmeden önce; size Library'lerle ilgili bir sistem kullanımını daha anlatmam gerekiyor. Bazı library rutinleri işledikleri değerleri bizden sistem registerleri yerine, structure diye adlandırdığımız tablolar aracılığı ile almak isterler. Bu tablolarda biz, bir dizi sayısal veya text değerler ile rutine bir dizi bildiride bulunuruz ve o da bu tablodaki değerleri okuyup, bizim verdiğimiz formatlarda söz konusu işlemi yapar.
İşte Open Window rutini de böyle kullanımı olan bir rutin. Onun da bir structure'ı var. Ve biz de söz konusu window'un en ufak ayrıntısına kadar her şeyi bu tabloya yazıyoruz. Sonrasını hiç düşünmeyin Open Window rutini sağ olsun, her şeyi hallediyor. Bir de bakıyorsunuz window karşınızda belirmiş.
Şimdi size Open Window structure’ında neler bulunduğunu anlatacağım. Örnek programımızda WINDOW label adı altında olduğu gibi bir window structure'ı 48 byte'dan oluşan bir data satırından ibarettir.
Bu 48 byte, bu data satırlarında kimi zaman word kullanımlı ve kimi zaman byte ve longword kullanımlı bir format taşır ve data bölgesinin aynı adlı yerinde aynı uzunluk için bir anlam ifade etmektedir. WINDOW: dc.w 20,20
dc.w 300,100 dc.b 0,1 del 0 del $l+$2+$4+$8 del 0,0 del WINNAME del 0,0 dc.w 200,50 dc.w 400,200 dc.w 1
WINNAME: dc.b "Benim Window'unV'.O
Şimdi Byte Byte structure satırları açıklayalım.
dc.w 20,20 ilk iki word açılacak window'un sol üst köşesinin koordinatlarını oluşturmaktadır, dc.w 300,100 üçüncü ve dördüncü word ise söz konu-
AMIGA ASSEMBLER
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 26
SAVE: O anki kareyi bir IFF ekran halinde saklar.
CAMERA Menü, FRISKET <->: Frisket. DPAINT'teki "STENCIL" kullanımının aynısı. Bu seçenekle, ekrana paletteki tüm renkleri ve altında <CLEAR>, <INVERT>, <USE> ve <CANCEL> kutucuklarını içeren bir pencere açılıyor. Bu penceredeki renklerin üzerine her basışta sağ taraflarındaki belirtecin belirmesi veya yok olması sağlanıyor. Burada belirlenen ve sonra <USE> seçeneği ile aktif hale getirilen renkler birazdan göreceğimiz IN USE seçeneğinin aktif olduğu durumlarda korunuyor, yani ekranda bu renklerle yapılmış çizimleri silemiyor veya üzerinden gidemiyorsunuz. <INVERT> seçeneği seçilmiş ve seçilmemiş renkleri birbirleriyle değiştiriyor. <CLEAR> ise paletteki tüm belirteçleri siliyor. <CANCEL> her zamanki gibi değişiklik yapmadan pencereyi kapatmanızı sağlıyor.
IN USE <>: Frisket'ı aktif hale getirir veya kapatır.
FREE: Frisket'ı serbest bırakır. PALETTE <p>: Bu seçeneği kullandığınızda, ekrana o anki renk paletini içeren bir pencere açılıyor. Pencerenin sol kısmını RGB ve HSV türünden renk kontrolünü sağlayan kayar belirteçler kaplıyor. Sağ kısımda ise renkler mevcut. Kullanacağınız yardımcı komutlar ise bunların aralarında yer alıyor. Bunlardan <copy> o an üzerinde bulunduğunuz rengi, seçenek aktif edildikten sonra gösterdiğiniz rengin üzerine kopyalıyor. <exchange> sonradan seçilen ve ilk renklerin yerlerini değiştirir. <Spread> ile, ilk belirlenenle son belirlenen iki renk arasındaki bütün renkler geçiş tonlarını alıyorlar. <Undo> son yaptığınız işlemi iptal ediyor ve <remap> ile yaptığınız renk yer değiştirmelerine göre renklerin kodlanması değiştiriliyor.
DEFAULT: O anki paleti, standart tanımlanmış paletle değiştirir.
COPY TO ALL: O karenin renk paletini tüm karelere atar.
COPY FORWARD: O karenin paletini bir sonrakininkine atar.
COPY BACKWARD: O karenin paletini bir öncekininkine atar.
AUTO REMAP: Palet işlemleri sırasında, paletteki renk değişimlerine göre o anki karenin bozulmamasını sağlar.
MAP TO: Renk kodlamalarının arkaplan <BACKGROUND> veya ön plana <FOREGROUND> yapılacağını belirler.
TOOLS Menu ...
Bu menüdeki seçenekler aynı zamanda ekranın sağındaki ikon bloğunda da olan seçenekler. Bunun için her seçeneğin ikonunun biçimini de tarif edeceğim.
SERBEST ÇİZİM <d>: Serbest elle çizim. İkon bloğunun sol üst köşesindeki sürekli eğri.
ÇİZGİ <v>: Çizgi çizme. Başlangıç noktasına gelip mouse'un sol tuşuna basın ve çizginin bitiş noktasında da basmayı bırakın. İkonu, en üst sırada sağdaki düz çizgi.
KUTU <r> veya <R>: İçi dolu veya taranmış kutu çizimi. İkon bloğunda üstten ikinci sırada soldaki ikon.
ALAN DOLDURMA <f>: Kapalı bir alanı istediğiniz renkle doldurur. İkinci sıra, sağ ikon.
ALAN TARAMA <F>: Kapalı bir alanı tarama renkleriyle kanaviçe gibi doldurur. Bloktaki yeri üçüncü sıra sol ikon.
RENKLE SINIRLI ALAN DOLDURMA: Bu ikon veya seçenek seçildiğinde, mouse işaretçisi <pick> yazan bir duruma gelir. Bu durumda ekran üzerinden veya renk paletinden doldurmanın sınırını oluşturacak olan rengi seçin. Daha sonra dolduracağınız tüm alanların sınırı bu seçtiğiniz renk kabul edilecektir.
PREFERENCES Menu ... SET # of COLOURS: O anki animasyonda kaç renk kullanacağınızı seçmenize yarar. Seçilebilecek renkler 2, 4, 8, 16, 32 (Halfbrite ve HAM yok).
NTSC FILTER: NTSC kullanım için renk filtrelemesi yapar. <SET> ile filtrenin alt üst ton sınırlarını giriyorsunuz. IN USE ile de seçeneği aktif hale getiriyorsunuz.
TOOLBOX <F10>: İkon bloğunu açıp kapatıyor.
Gelelim programla ilgili bazı inceliklere. İlkin taramada kullanılacak renklerin seçimini göstereyim, çizim renklerinin belirlendiği kutucuğun üst kısmında bu tarama renkleri yer alıyorlar. Sırayla soldaki ve sağdaki tarama renklerine klik'leyin ve sonra çıkan <pick> şeklindeki mouse işaretçileriyle de tarama renklerini seçin. Büyüteç kullanımı Pencil Test'tekinin aynısı. Kareden kareye atlamak için, ikon bloğunun altındaki sağa ve sola bakan ok ikonlarını veya ok tuşlarını kullanabilirsiniz.
FİLMLERİ OYNATMA... CFAST modunda ve ses efektleriyle hazırlanmış bir filmin oynatımına gelince. Animasyonu kaydedeceğiniz disket (veya harddisk) ile mutlaka WORKBENCH'ten çalışın, aksi halde bu işlemler bayağı karışıyor.
Ses efektli bir film hazırlamak için, ilkin filmin siyah-beyaz halini ve poz listesi ile ses efektlerini hazırlayın. Daha sonra filmin bu halini poz listesi ile birlikte CFAST modunda kaydedin. INK & PAINT'i yükleyin ve kareleri boyayın. INK & PAINT programının içinden poz listesini göremezsiniz, ama merak etmeyin, liste hala hafızada. Boyama işlemi bittikten sonra, gene sonucu bir CFAST dosyası halinde saklayın ve programları kapatıp WORKBENCH'e dönün.
Şimdi en önemli yere geldik. WORKBENCH'ten gerekli drawer'ları açıp kaydettiğiniz animasyonun ikonunu bulun. İkonun üzerine gelip bir kez klik'leyin ve sonra da Workbench menüden "info" seçeneğini seçin. Bu arada dikkat etmeniz gereken husus, animasyonun oynatıldığı kayıt ortamında mutlaka "studio" disketinde kayıtlı "FLICKER" programının bulunması. Info seçeneğinin seçilmesinden sonra, ekrana seçtiğiniz ikon hakkında bilgiler gelir. Bunlardan "TOOL TYPES" adlı satırın içini mouse ile klik'leyip "FLICKER" programının bulunduğu yeri ve "FLICKER"'in kayıtlı bulunduğu adı girin. Daha sonra bu ekrandan <SAVE> kutucuğuna basarak çıkın. Bütün bu işlemlerden sonra yaptığınız şey, animasyon dosyasının Workbench'ten her çağrıldığında ilk önce "FLICKER" programını yükleyip, sonra da kendisini veri olarak yüklemesini sağlamak. Artık ikonu çift klik ile çağırıp animasyonunuzu seyreyleyebilirsiniz.
SON SÖZ... Programı her yönüyle övgüye değer. Eğer bu satırları program elinizde yokken okuyorsanız ve geçen sayıyı da okumadıysanız, hemen geçen sayıyı alıp okuyun ve sonra da bu programı mutlaka bir yerlerden edinin (her eve lazım!). Programımız kendi türünün ilk örneği bence. Ama ben gene de programın daha yeni ve daha da marifetli versiyonlarını dört gözle bekliyorum.