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