10.11.2014 Views

Amiga Dunyasi - Sayi 02 (Temmuz 1990).pdf - Retro Dergi

Amiga Dunyasi - Sayi 02 (Temmuz 1990).pdf - Retro Dergi

Amiga Dunyasi - Sayi 02 (Temmuz 1990).pdf - Retro Dergi

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

DİLLER<br />

AMIGA<br />

ASSEMBLER<br />

68000 KOMUTLARI<br />

Motorola 68000 komutlarının hepsi<br />

hafızada ikişer byte yer kaplarlar. Buna<br />

ek olarak, çoğunlukla iki byte'dan tutun<br />

sekiz byte'a kadar komutların parametreleri<br />

olabilir. 68000'in komutları bir hafıza<br />

adresindeki sayıyı başka bir hafıza<br />

adresine taşımak, bir sayıyı bir registere<br />

yüklemek, büyük hafıza bölgelerini başka<br />

yerlere taşımak gibi işlemleri yaparlar.<br />

Bunlara ek olarak BYTE'ların tüm<br />

bitlerini teker teker kullanmak ve basit<br />

aritmetik, lojik işlemler yapmak için de<br />

özel komutlar bulunur.<br />

Makina dili komutları ile BASIC komutlarını<br />

karşılaştırdığımızda ise şöyle<br />

bir fark göze çarpıyor. Basic genellikle<br />

PRINT, LINE, DRAW gibi ekrana bir<br />

şeyler yazmak veya çizdirmek için komutlar<br />

içeriyor. Fakat Makina dilinde<br />

böyle belli bir işe göre programlanmış<br />

komutlar bulunmamaktadır. Bunlar yerine,<br />

daha doğrusu bir kısmının yerine,<br />

LIBRARY adını verdiğimiz <strong>Amiga</strong> sistem<br />

altrutinlerini kullanıyoruz. Makina<br />

dili programımızda kullanmak istediğimiz<br />

ve AMIGA LIBRARY (kütüphane)'sinde<br />

bulunmayan komutları ile biz<br />

kendimiz yazmak zorunda kalıyoruz. Tabii<br />

makina dilindeki bu komutlar BA-<br />

SlC'dekiler ile karşılaştırdığımızda çok<br />

büyük hız farkları ortaya çıkıyor, örneğin<br />

Basic'de yaptığınız program bir çizgi<br />

çizene kadar, makina dilindeki aynı<br />

program yüzlercesini rahatlıkla çizebilir.<br />

Bunun nedeni, BASIC'deki komutların<br />

işlevleri bir programa yönelik olmayıp,<br />

genel olarak bütün kullanımlara ayak uydurabilmesidir.<br />

Fakat makina dilinde<br />

biz, yazdığımız rutinleri sadece o<br />

program için yazacağız. Ve bilgisayar<br />

bunları hiçbir yorumlayıcıdan geçirmeyeceği<br />

için süratle çalışacaktır.<br />

ÖMER SİNAN POLAT<br />

Makina dilindeki programlarımızda<br />

tabii ki 68000 haricindeki diğer ciplerin<br />

(grafik ve müzik için) kontrol registerlerine<br />

de erişeceğiz. <strong>Amiga</strong>'nın ROM (Read<br />

Only Memory - Sadece okuyabileceğimiz<br />

hafıza adresleri)'unda grafik işlemlerine<br />

yön veren FAT AGNUS cipinin registerlerine<br />

erişip istediğimiz grafikleri<br />

ekrana getireceğiz, çizgiler çizip, daireler,<br />

kareler yapıp, onların renklerini değiştireceğiz.<br />

Aynı şekilde <strong>Amiga</strong>'nın seslerini<br />

yaratan PAULA cipi registerlerine<br />

erişerek AMIGA'da mevcut 4 ses kanalını<br />

kontrol edeceğiz. İlk başta bu anlattıklarımız<br />

sizin için dağlar kadar yüksek<br />

gözükse de, bunların altında mükemmel<br />

bir basitlik yatmaktadır. Ve tam bir<br />

mantık. Makina dili programcısı mükemmel<br />

bir mantık anlayışı ve sabır sahibi<br />

olmalıdır. Tabii bu mükemmel ciplere<br />

söz geçirmek için ilk önce 68000 Makina<br />

Dili komutlarını öğrenmemiz gerekiyor.<br />

68000'in komutlarını öğrenirken, her<br />

komutun genel olarak ne işe yaradığını<br />

anlatıp, ardından o komutun parametrelerini<br />

teker teker göreceğiz. Ve komutların<br />

parametrelerinin kullanımlarını daha<br />

da iyi anlamamız için hepsine uygulamalı<br />

birer örnek vereceğiz. Tabii zamanla,<br />

komutlarını öğrendikçe örnekler<br />

gelişip kısa rutinler ve daha da ilerledikçe<br />

kısa programlar haline dönüşeceklerdir.<br />

Komutları öğrenirken, işlevlerini ilk<br />

okumada anlamayabilirsiniz. Böyle durumlarda<br />

verilen örnekleri ve yazıyı bir<br />

defa daha, yine olmazsa bir kez daha, yani<br />

anlayıncaya kadar okumanızı tavsiye<br />

ederim. Çünkü anlayamadığınız bir kısmı<br />

geçerseniz, daha sonraki örnek ve uygulamalarda<br />

birçok olayı kavrayamayabilirsiniz.<br />

Şimdi komutların açıklamalarına geçelim,<br />

ilk olarak;<br />

MOVE KOMUTU<br />

Makina dilinde en çok kullanacağımız<br />

komutlardan birisidir. Görevini birkaç<br />

madde ile sıralayabiliriz.<br />

A- Bir hafıza adresindeki sayıyı bir registere<br />

yüklemek<br />

B- Bir hafıza adresindeki sayıyı başka<br />

bir hafıza adresine yüklemek<br />

C- Bir registerdeki sayıyı bir hafıza adresine<br />

göndermek<br />

D- Bir registerdeki sayıyı başka bir registere<br />

yüklemek<br />

E- Bir adres registerindeki sayıyı Stack<br />

register, Program Counter'e göndermek<br />

MOVE komutu yapı bakımından 65<strong>02</strong><br />

işlemcideki LDA ve STA Komutlarına<br />

benzemektedir. Tabii MOVE kendi başına<br />

bu iki komutun yaptığı işi tek başına<br />

ve 4 katı büyüklükte yapabilmektedir.<br />

Şimdi MOVE komutunun en çok kullanım<br />

moduna bir örnek verelim, örneğin<br />

240 sayısını 327680 nolu hafıza adresine<br />

atamak istiyoruz. Bu işlem, BA-<br />

SlC'de POKE 240, 327680 ile yapılabilir.<br />

Aynı işlemi makina dilinde MOVE.B<br />

#$F0, $50000 ile yapabiliriz. Burada $F0<br />

onaltılık sistemdedir ve onluk sayı sistemindeki<br />

240 sayısını temsil ediyor. Aynı<br />

şekilde 327680 sayısı da, onaltılık sistemde<br />

$50000'e karşılık geliyor ve sayının<br />

konacak hafıza adresini gösteriyor. £<br />

$F0'ın başındaki # işareti ise virgülden<br />

önceki sayının atanacak salt sayı olduğunu<br />

belirler. Eğer bu işareti koymasaydık<br />

(MOVE.B $F0, $50000 gibi) komutun<br />

parametresi tamamen değişecekti ve<br />

$F0 sayısı sayı olmaktan çıkıp bir hafıza<br />

adresini temsil edecekti ve bilgisayarda<br />

verdiğimiz komuta uyarak $F0 hafıza adresindeki<br />

sayıyı alıp $50000 hafıza adresine<br />

gönderecekti.<br />

örnekte MOVE komutunun hemen<br />

arkasındaki .B ibaresi ise, komutun<br />

BYTE modunda kullanılacağını belirler.<br />

Bundan başka .W ve .L olarak da kullanım<br />

modları mevcuttur. Bunların yardımı<br />

ile iki byte (WORD veya .W) ve dört<br />

byte (LONGWORD veya .L)'a aynı anda<br />

MOVE komutu ile kumanda edebiliriz,<br />

örneğin az önceki kullanımı MO-<br />

VE.W $F0, $50000 olarak değiştirdiğimizde<br />

komut iki byte kullanımına geçiyor.<br />

Yani $F0'ı WORD olarak (iki byte<br />

= $00F0) olarak $00'ı $50000'e ve $F0'ı<br />

$50001'e göndermiş oluyoruz. Bu<br />

WORD kullanımını MOVE.W#$00F0,<br />

$50000 olarak yazarak daha açıklayıcı<br />

ifade etmiş oluruz, önemsiz gibi görünen<br />

bu iki sıfırın ileride programlamada<br />

çok büyük göz yanılmalarına neden olduğunu<br />

söyleyebilirim.<br />

AMIGA DÜNYASI 26

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

Saved successfully!

Ooh no, something went wrong!