25.10.2014 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!