Amiga Dünyası sayı 12, sayfa 27

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ı.