Amiga Dunyasi - Sayi 14 (Temmuz 1991).pdf - Retro Dergi
Amiga Dunyasi - Sayi 14 (Temmuz 1991).pdf - Retro Dergi
Amiga Dunyasi - Sayi 14 (Temmuz 1991).pdf - Retro Dergi
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Merhaba Assemblercılar... Bu sayıda geçen<br />
sayıda verdiğimiz intuition text rutininin<br />
açıklamaları ile devam edeceğiz ve bu<br />
işlemi iyice öğreneceğiz. Text rutini açıklamaları<br />
ardından window'a intuition'ın<br />
verdiği özellikleri kazandıracağız.<br />
Geçen sayıdaki programı çalıştırdığınızda,<br />
gördüğünüz gibi window'un sol üst<br />
köşesinde bir yazı bulunmaktaydı. Şimdi<br />
gelelim bu yazının nasıl oluştuğuna. İlk<br />
önce size programdan window'un içinde<br />
yazı yazımına ait makina kodu rutinini tek<br />
başına göstereyim.<br />
1 move.l INTBASE,a6<br />
2<br />
3<br />
move.l<br />
move.l<br />
WINBASE,a0<br />
50(a0),a0<br />
4 move.l #TEXT,al<br />
5 move.l #0,d0<br />
6 move.l #0,dl<br />
7 jsr -$d8(a6)<br />
Şimdi, IntuIText rutininin açıklamasına<br />
geçelim.<br />
Bu rutinin yaptığı işi gördünüz, Window<br />
içerisine yazı yazmaktan ibaret. Rutinin<br />
dört parametresi bulunmakta.<br />
İlk parametresi, örneğin 2. satırında gördüğünüz<br />
gibi AO registerine atanan WIN-<br />
DOW RASTPORT adresini içermektedir.<br />
Tabii bu rastport'un yazının yazılmasını<br />
istediğimiz window rastport'u olduğunu<br />
söylemeye gerek yok herhalde. Bu<br />
rastport'un nerede olduğuna gelince, o da<br />
window structure'ın 50. byte'ından itibaren<br />
bir longword değerde saklıdır. Bu uygulamayı<br />
3. satırda görebilirsiniz.<br />
ikinci parametre olarak, Text structure'ınızın<br />
adresini Al registerine bildirmemiz<br />
gerekiyor (4. satır).<br />
Üçüncü ve dördüncü parametre ise, yazılacak<br />
satırın X ve Y koordinatlarını içermelidir.<br />
Sizin isteğinize göre bu değer,<br />
window'un boyutlarını geçmemek şartı ile<br />
kullanılabilir.<br />
intuition Text rutinin bir parçası olan<br />
text structure'ını aşağıda ayrı olarak tek<br />
tek açıklayalım.<br />
TEXT: dc.b 3,2<br />
dc.b 1<br />
even<br />
dew 2,10<br />
del 0<br />
del TEXTST<br />
del 0<br />
dc.b 3,2<br />
AMIGA DÜNYASI 30<br />
AMIGA<br />
ASSEMBLER<br />
ÖMER SINAN POLAT<br />
Bu iki byte değer yazımızın renklerini<br />
belirliyor. İlk değer yazının rengi, ikinci<br />
değer ise yazının arka plan rengi olmakta.<br />
dc.b 1<br />
Bu byte değer ise, ilk iki değer ile kombine<br />
bir halde. Görevi, yazının dört çeşit<br />
yazı modundan hangisi olacağına karar<br />
vermek. Bu değerler 0, 1, 2, 4 olabilir. 1<br />
değeri, ilk satırda verdiğimiz iki değer aynen<br />
kullanılacak anlamına gelir. Burada 0<br />
kullanırsak, sadece yazı rengi dikkate alınıyor<br />
ve 4 kullanırsak Text'imiz yazı renginin<br />
negatifi olarak beliriyor,<br />
even<br />
Bu kullanım, Seka'ya aittir. Görevi, bir<br />
üst satırda tek byte kullanıldığından ve<br />
Seka'da kodu word değerler üzerinden<br />
oluşturduğundan oluşabilecek bir hatayı<br />
önlemek.<br />
dc.w 2,10<br />
Bu iki word değer rutindeki gibi yazı satırının<br />
X ve Y koordinatlarını belirtirler.<br />
Buraya yazıdığınız değerler, rutindeki ile<br />
toplanıp sonuca göre yer tespiti yapılır.<br />
Ben burada 2 ve 10 değerlerini kullandım;<br />
nedeni, rutindeki X, Y koordinat değerlerine<br />
0 girilse dahi yazı satın window'un<br />
tam sol üst köşesine eşit gelecektir.<br />
dc.l 0<br />
Bu değer, herhangi bir karakter setinin<br />
pointer adresini içermelidir. Tabii bu karakter<br />
seti de yazının yazımında kullanıla-<br />
cak karakterleri belirtir. Eğer standart karakter<br />
setini kullanıyorsak, buraya 0 değeri<br />
girmeliyiz.<br />
del TEXTST<br />
İşte burada yazımızın bulunduğu hafıza<br />
adresini giriyoruz.<br />
del 0<br />
Bu adres 0 olduğunda, başka yazı çıkışı<br />
olmayacağı anlamına gelmektedir.<br />
TEXTST: dc.b "IntuitionText",0<br />
Bu satır, yukarıda da anlattığımız gibi<br />
yazılacak karakterleri içeriyor, dc.b formatında<br />
girdiğimiz bu kısa yazının son<br />
karakteri daima Null yani 0 olmalıdır.<br />
Evet. Artık window içerisine yazı yazımını<br />
öğrenmiş bulunuyoruz.<br />
Şimdi yeni bir örnekle yazı dizimize devam<br />
ediyoruz.<br />
Bu arada dikkatinizi son iki örneğimizde<br />
de aynı olan birşey çekmiştir. İki programda<br />
da programdan çıkmak için mouse-<br />
'un sağ tuşunu kullandık. Acaba Workbeneh'teki<br />
window'larda olduğu gibi,<br />
window'u kapama kutucuğuna basarak bizim<br />
window'umuzu da kapatamaz mıyız?<br />
Bunu biz de yapabiliriz. Tabii biraz karmaşık<br />
bir yapısı var. Şimdi örneğimizin<br />
bu halini görelim.<br />
**** AMIGA DÜNYASI<br />
**** AMIGA INTUITION LIBRARY<br />
**** WINDOW EXAMPLE<br />
**** ASSEMBLER KURSU<br />
**** ORNEK <strong>14</strong>.1<br />
start: move.l<br />
lea<br />
4,a6<br />
INTNAME,al<br />
jsr<br />
move.l<br />
-$228(a6)<br />
d0,INTBASE<br />
beq EXIT3<br />
move.l<br />
lea<br />
jsr<br />
move.l<br />
beq<br />
INTBASE,a6<br />
WINDOW,a0<br />
-$cc(a6)<br />
dO,WINBASE<br />
EXIT2<br />
LOOP: move.l WINBASE,a0<br />
move.l<br />
move.l<br />
86(a0),a0<br />
4,a6<br />
jsr<br />
move.l<br />
-$174(a6)<br />
d0.a0<br />
move.l<br />
tst.l<br />
20(a0),d6<br />
d0<br />
beq.s LOOP<br />
cmp.l<br />
bne.s<br />
#$200,d6<br />
LOOP<br />
move.l<br />
move.l<br />
4,a6<br />
WINBASE,a0<br />
move.l 86(a0),a0<br />
move.l<br />
jsr<br />
d0,al<br />
-$16e(a6)<br />
EXIT1: move.l,INTBASE,A6<br />
move.l WINBASE,a0<br />
jsr -$48(a6)<br />
EXIT2: move.l 4,a6