13.01.2015 Views

Amiga Dunyasi - Sayi 26 (Temmuz 1992).pdf - Retro Dergi

Amiga Dunyasi - Sayi 26 (Temmuz 1992).pdf - Retro Dergi

Amiga Dunyasi - Sayi 26 (Temmuz 1992).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.

DİLLER<br />

A<br />

M<br />

I<br />

G<br />

A<br />

CENKER OZKURT<br />

Bu ayki yazımızın konusu, <strong>Amiga</strong> C'de Assembler alt rutinlerinin<br />

kullanımı. Assembler bildiğiniz gibi bilgisayarın en temel dili<br />

olarak kullanılıyor. Assembler programlan araya hiçbir yorumlayıcı<br />

girmediğinden çok hızlı çalışabiliyor. Hız her programcının<br />

istediği bir özellik. Bu nedenle özellikle oyunlar assembler dili<br />

ile yazılmakta. Assembler dilini diğer dillerden ayıran en büyük<br />

özellik; sisteme direkt olarak ulaşabilmek. Örneğin <strong>Amiga</strong>'nın<br />

blitter cipine ulaşmak, assembler dili ile oldukça kolay. Bu sayede<br />

de sistemi tam performans çalıştırabiliyorsunuz. Hızlı<br />

scroll'lar kayan yazılar, vektör hesaplan ve çizimleri bu tür bir<br />

yazılım gerektiriyor.<br />

<strong>Amiga</strong> C'de yazılan programların hemen hepsi sistem komutlarım<br />

kullanır. Bu komutlar Library dediğimiz kütüphanelerde bulunuyor.<br />

Bildiğiniz gibi kullanılan Library'ler genellikler<br />

'graphics.library', 'intuition.library', 'dos.library' ve diğerleridir.<br />

Eğer biz bu library'leri kullanmadan program yazmak istersek,<br />

işte o zaman sisteme direk olarak ulaşıp işimizi görmeliyiz. Tabii<br />

bu iş için de <strong>Amiga</strong> sistemini ve yapısını iyi tanımamız gerekmektedir.<br />

Örneğin açmış olduğumuz iki ekrandan birindeki resmi<br />

diğer ekrana taşımak istiyoruz. Bu işi <strong>Amiga</strong> C'de yaparken bir<br />

blitter komutu olan 'ClipBlit0' ya da 'BltBitMap0' komutlarından<br />

birini kullanırız. Bu komutlar <strong>Amiga</strong>'nın 'graphics.library'<br />

kütüphanesinde hazır. Eğer bu komutları kullanmadan aynı işi<br />

yapacaksak, direkt olarak blitter adreslerini kullanmalıyız. İşte bu<br />

iş için de en iyisi, assembler bir alt rutin oluşturup bu rutini C dilinde<br />

çağırmak.<br />

Şimdi <strong>Amiga</strong> C'de assembler alt rutinlerinin nasıl kullanıldığına<br />

bir bakalım. Vermiş olduğum örnekler, basit assembler örnekleri.<br />

Daha gelişmiş örnekleri denemek istiyorsanız, dergimizin<br />

yazarlarından Cem Gencer'in yazılarını takip etmenizi öneririm.<br />

<strong>Amiga</strong> C içerisinde bir assembler program parçası kullanırken,<br />

bu programın bir assembler program olduğunu compiler'a bildirmemiz<br />

gerekmektedir. Aksi takdirde compiler, yazılan programı,<br />

C programı olarak derlemek isteyecek ve hata verecektir. Assembler<br />

programını aşağıda olduğu gibi ayırmalıyız;<br />

#asm<br />

move.l $4,a6<br />

…<br />

#endasm<br />

#asm ve #endasm, assembler programının başlangıç ve bitiş<br />

bloklannı belirtir. Bu satırlar içerisindeki programı C derleyicisi<br />

göz önüne almaz. C derleme işlemi bittikten sonra, Assembler<br />

derleme programı işlemine başlar ve programın assembler bölümleri<br />

burada derlenir. Aynı zamanda C derleyicisi, programın C<br />

ile yazılmış kısımlarını assembler'a çevirmiştir. Bu nedenle assembler<br />

derleyicisi tamamı assembler olan bir program üzerinde<br />

çalışacaktır. Hatırlayacağınız gibi, geçen sayılarda yazmış olduğumuz<br />

programların assembler listesinin nasıl alınacağım göstermiştim.<br />

Bu yazımızda bu işlemleri daha derinlemesine inceleyeceğiz.<br />

Assembler rutinlerinin kullanımını ile ilgili birkaç program ha-<br />

zırladım. Şimdi isterseniz bu programlara bir göz atalım.<br />

İlk örneğimiz bilgisayarımızın power ışığını söndürüp mouse<br />

tuşuna basılncaya kadar bekleyen ve tekrar power ışığını yakan<br />

bir program. Program içerisinde üç rutin mevcut. Bu rutinler<br />

led_on(), wait_mouse() ve led_off(). Rutinlerin içerisi assembler<br />

ile yazılmış. Şimdi programımıza bir göz atalım;<br />

/* Aztec-C Assembler */<br />

/* alt rutinlerinin */<br />

/* kullanimi; */<br />

/* Ornek 1. */<br />

/* alt rutinleri çağıran */<br />

/* main bloğu */<br />

main()<br />

{<br />

led_on();<br />

wait_mouse();<br />

led_pff();<br />

}<br />

led_on()<br />

{<br />

#asm<br />

bset#l,$l,$bfe001<br />

#endasm<br />

}<br />

wait_mouse()<br />

(<br />

#asm<br />

wait:<br />

btst #6,$bfe001<br />

bne.s wait<br />

#endasm<br />

}<br />

led_off()<br />

{<br />

bclr#l,$bfe001<br />

#endasm<br />

}<br />

Gördüğünüz gibi, alt rutinleri bir C rutini gibi çağırabiliyoruz.<br />

Power ışığını söndürmek için assembler'dan $bfe001 adresinin<br />

1. bitini logic ' 1' yapmamız yeterli. Daha sonra gene aynı adresin<br />

6. bitinin durumunu kontrol ederek mouse tuşuna basılıncaya kadar<br />

bekliyoruz. $bfe001 adresinin 1. bitini tekrar '0' yaptıktan<br />

sonra da programdan çıkıyoruz. Programın kullanımı oldukça<br />

kolay. Şimdi ikinci örneğimize geçelim.<br />

/* Aztec-C Assembler */<br />

/* alt rutinlerinin */<br />

/* kullanimi; */<br />

/* Örnek 2. */<br />

main()<br />

{<br />

int m;<br />

while(l) {<br />

m=mouse();<br />

switch(m) {<br />

case 0 :printf("mouse off\n");<br />

break;<br />

case 1 :printf("mouseon\n");<br />

break;<br />

}<br />

)<br />

AMIGA DÜNYASI 22

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

Saved successfully!

Ooh no, something went wrong!