AMIGA ASSEMBLER
Retro bilgisayarMerhaba assembler'cı arkadaşlar. Geçen sayıda Seka Assembler'ın genel işleyişini ve komutlarını öğrenmiştik.
Seka Assembler'ın komutları, geçen sayıda anlatılanlar kadar değil. Daha anlatmadığım birçok komut ve kullanım çeşidi mevcut. Fakat bunları şimdiden anlatıp kafanızda, bunların kullanım yerlerini düşünmeniz gibi sorular bırakmayacağım. Şimdilik sizden istediğim, geçen sayıda verdiğimiz komutları ve kullanım amaçlarını dikkatlice atlamadan belleğinize yerleştirmeniz. Çünkü Seka Assembler ile çalışmak için, daha doğrusu bütün assembler derleyicileri ile çalışmanız için geçen sayıdaki komutları ve daha doğrusu bu komutların ifade ettiği kullanım türlerini iyice kavramanız, ileride süratli bir çalışma temposu oluşturmanıza zemin hazırlayacaktır.
Gerçi ben bu komutları, sizin Seka Assembler'a tamamen ısındığınızı hissedinceye kadar devamlı açıklayacak ve tekrar edeceğim. Sonuçta hepimiz Seka Assembler'ı tam randıman kullanıp birer Seka kurdu olacağız.
Bu sayıdan itibaren size vereceğim örnek makina dili programlar ve Seka Assembler kullanım uygulamaları, sizin ileri makina dili uygulamalarınızın temelini oluşturacaktır.
Üzerinde çalışacağımız örneklerde sırası ile şu adımlarla hareket edeceğiz.
I- İlk önce Seka Assembler'ı bilgisayarımızın hafızasına yükleyeceğiz.
II- Daha sonra Seka Assembler'ın editörünü kullanarak verdiğimiz örnek programı dikkatlice yazacağız.
III- Şimdi bu sihirli satırlar neye yarıyormuş diye sizi fazla merakta bırakmadan, yazdığınız source satırların nasıl compile edildiğini ve çalıştırılmasını göreceğiz.
IV- Tabii örneğimizde bir çok yeni kullanım olduğunu göz önünde bulundurarak size çok geniş açıklamalar yapacağız. Ve Amigamızın işletim sistemine hafiften girip Amiga'nın 68000 işlemcisine hakimiyetini sistematik şekilde öğreneceğiz.
V- Son adım olarak oluşturduğunuz makina kodu programı diskete Execute file olarak kaydetmeyi öğreneceğiz.
Aslında assembler yazı dizimize topluca baktığımızda şimdiye kadar öğrendiğimiz şeyler Assembler'ın dörtte biri sayılabilir. Ama bu ana kadar, yani 10. sayıya kadar öğrendiğiniz bilgiler aşağıdaki örneği kavramanız için yeterli olacağına inanıyorum.
Yazı dizimizin devamı esnasında sırası ile Amiga'nın diğer Assembler ve sistem konularına da dalacağız. Bu sırada karşılaştığımız yeni Assembler ve Seka Assembler komut uygulamalarını yeri geldikçe açıklayacağız.
Tabii bu açıklamalarda sizin bu sayıya kadar olan bilgilerinizden oluşan belli bir pratik bilginiz olduğundan, benim verdiğim örnekleri inceleyip yenilerini üretmek ve keşfetmek zevkine varacaksınız. Daha ileri örnekleri ve Assembler uygulamalarını da işlerken, daha anlamlı bir tavırla izleyerek, onları algılamada büyük kolaylık edineceğinize inanıyorum.
Şimdi yukarıda bahsettiğimiz işlem adımlarını sırası ile görelim.
I- Bu andan itibaren sizin bir adet Seka Assembler derleyicisine sahip olduğunuzu varsayarak yazımıza devam ediyorum.
Şimdi Seka Assembler derleyicisinin bulunduğu disketi sürücüye takın ve eğer derleyici kendi başına ekrana çıkacak şekilde düzenlenmiş ise program kendiliğinden yüklenecektir. Seka derleyicisinin bulunduğu disket, bir compact program paketi içinde bulunabilir. Çoğunlukla böyle disketlere Utility Disk adını veriyoruz. Ve tabii çoğunlukla utility disketleri sürücüye taktığınızda kendiliğinden ekrana bir menü gelmektedir. Kullanıcı ise bu menüdeki talimatlara uyarak istediği programı çağırabilir. Tabii siz de menüden Seka Assembler'ı bularak, onu yüklemek için ne yapılması gerektiğini öğrenip Seka'yı çalıştırabilirsiniz. Çoğunlukla compact utility disketlerdeki programların çalışması şu şekilde olur.
Her programın birer tuşu vardır. Bu tuşlar çoğunlukla Fonksiyon Tuşları diye adlandırdığımız Amiga klavyesinin en üst seviyesindeki F1'den F10'a kadar olan tuşlardır. Biz de bu tuşları kullanarak ekrandaki açıklamalara göre Seka'yı yükleyebiliriz.
Fakat yine de her ihtimale karşı, bir türlü Seka'yı yükleyemezseniz, size en yakın Amiga bayisine gidip, bizzat onlardan Seka'yı alarak, yüklenişini yerinde öğrenebilirsiniz.
Tabii yine üzerinde dikkatle duruyorum ve tekrarlıyorum. Piyasada iki ayrı Seka derleyicisi ve bunların her ay değişen bir sürü versiyonları mevcut. Kullanacağımız Seka derleyicisinin ismi ve versiyonu şu şekilde olmaktadır.
MASTERSEKA 1.51 veya daha yukarı bir versiyon. Bu arada söylemeden geçemeyeceğim. Geçen ayki yazı dizisinden sonra yeni versiyon Master Seka'lar da geldi. Hatta Master Seka 1.80'li versiyonları da şu anda mevcut. Tabii söylememe gerek yok. Yine bir sürü ek komut ve kullanım kolaylıkları eklenmiş. Ben bu versiyonları sizin bu anda bulamayacağınızı düşünerek açıklamalarıma ve çalışmalarımıza versiyon 1.51'den itibaren başlıyorum. Şimdi Master Seka'nın 1.51 versiyonunun ekranda hazır olduğunu düşünerek devam ediyorum.
Başlangıçta sorulan memory ile ilgili soruları bir önceki sayıda açıklamıştık. Yine de şöyle özetleyelim.
Burada yazacağımız sayılar aşağıdaki örnek için yeterli olmaktadır.
CHIP OR FAST > sorusuna C (RE-
AMIGA ASSEMBLER
RETURN) olarak cevap veriyoruz.
WORKSPACE > sorusuna ise 40 (RETURN) olarak cevap veriyoruz.
Gerçi aşağıdaki kısa makina dili programının çalışması için 5 Kbyte'lık yer de yeterli olmaktadır. Ama yine biz rahat bir çalışma ortamı için 40 Kbyte'lık bir yer açıyoruz.
Şimdi ESCAPE tuşuna basarak derleyicinin editör moduna geçiyoruz ve aşağıdaki source metnini aynen klavyeyi kullanarak editöre yazacağız. Fakat daha önce bilmeniz gereken bir konu daha var.
Assembler source'larınızı yazarken veya hazırlarken hata yapmamaya dikkat edeceksiniz. Çünkü bazı hatalar çok kötü sonuçlar doğurabilir. Tabii bu hatalar bilgisayarınızı bozar demiyorum; ama bozmasa da kaybolan emeğiniz bilgisayarınızın bozulduğundan daha çok sizi üzecektir (Benim başıma çok geldi).
Source yazımı esnasında nasıl hatalar yapılabilir?
En sık yapacağınız ve en basit hata, syntax hatası olabilir. Yani komutların yazımında hata yapabilirsiniz. Mesela Move yerine Movd veya Moev veya buna benzer bir sürü kelime hatası yapılabilir. Bu gibi hataları derleyicimiz compile işlemi esnasında şıp diye yakalayacaktır.
Ama bir de komutun text kısmında değil de parametre kısmında bir hata yapabilirsiniz. O zaman olacakların sorumlusu hatayı yapan olacaktır.
Olmaması gereken bir yerde yanlış bir sayı yazılırsa, bilgisayarın göstereceği tepki ne olur onu tahmin etmek çok güç. Çoğunlukla bilgisayarınız kilitlenebilir. Veya bilgisayar kilitlenmez de ekranda karışıklıklar olabilir. Ses rutinlerinde bir hata yapılmışsa, bilgisayarınız istenmeyen sesleri çıkarabilir. Ya da program çalışıyor gibi gözükerek belli bir zaman sonrasında saatli bomba gibi patlayabilir! (Şakaydı). Programınız çalışıyor gibi gözükebilir ve belli bir zaman sonra az önce söz ettiğimiz hatalardan birini gösterebilir.
Seka Assembler'da hatalar iki türlü ortaya çıkabilir: birincisi programınızı yazdıktan sonra compile işlemi sırasında; ikincisi ise programı çalıştırdığınızda.
Gerçi compile işlemi esnasında hata yapmanız çok düşük bir ihtimal. Çünkü compile işlemi sırasında hata yapmak çok zor. Ancak programınızın başında origin ve obje kodunu memory'de Seka Assembler'ın çalışma adresi üzerinde veya sistem için önemli bir adresin üzerinde oluşturacağını söylersek hata ortaya çıkmış demektir. Böyle bir durumda artık ok yaydan çıkmış demektir. Büyük ihtimal ile source'ınızı kaybetmiş bulunuyorsunuz. Tabii compile işleminden önce source'ınızı diskete kaydetmemişseniz.
İkinci hata olarak en sık karşılaşılan hatalar, komut parametrelerinde olmaması gereken veya yanlış yazılmış sayılardır.
Bu durumda da source listesini kaybedebilirsiniz. Size önerim, benim de her zaman yaptığım gibi, programınızın üzerinde en ufak bir değişiklik yapsanız bile Seka editöründen çıkar çıkmaz source listesini diskete save etmenizdir. Bu sizin açınızdan yararlı olacaktır. Save işleminden sonra, programınızı korkusuzca compile edebilir ve çalıştırabilirsiniz.
Tabii program source'larının kayıt işlemlerinin zamanlamalarını sizin Assembler bilginiz ve çalışma şekliniz ile zamanla orantılayacaksınız. Örneğin tecrübeli bir programcı programında yaptığı değişikliklerin sonrasında compile ve run işlemlerinde bilgisayarı kilitleyip kilitlemeyeceğini çok iyi bilir. Ve kilitleyeceğine inandığı değişiklikleri, daha tehlike başlamadan gereken kayıt işlemlerini yapar.
İşte Assembler yazı dizimizde yeni bir boyut açıyoruz.
Yan kutudaki makina dili programında Amiga sistem library'lerinin ne olduğu ve nasıl çalıştırıldığı, ardından bu library uygulamalarını kendi programımıza nasıl dahil edeceğimiz ve nelere dikkat edeceğimizi öğreneceğiz.
Yıldızlı satırlardan itibaren gördüğünüz her karakteri aynen Seka editör ekranına aktarmalısınız.
Son satırı da yazdıktan sonra artık açıklamalara geçebiliriz.
Programımızın genel amacı, intuition library üzerinden, Amiga'nın Workbench ekranında basit bir window açmaktır. Artık editördeki yazım işiniz bitti. ESCAPE tuşuna basarak editörden çıkabiliriz. Şimdi Seka'nın direkt komut modundayız. Buradan bir önceki sayıda verdiğimiz tek veya iki harflik bütün komutları kullanabiliriz.
Programımızı compile etmenin zamanı gelmiştir. Fakat daha önce yapmamız gereken çok önemli bir şey var. Programın source listesini diskete kayıt etmek. Bunun için ".W DF0:İsim" komutunu kullanacağız. İsim yerine siz de source'un diskete hangi isim ile kayıt edilmesini istiyorsanız, onu koyabilirsiniz. Kayıt için son bir şey daha söylememiz gerekiyor. Derleyici source listesini diskete daima sizin verdiğiniz ismin sonuna ".S" ibaresi ile kaydeder. Nedeni ise onu diğer Amiga file'larından ayırıp disket directory'sinde source listelerini temsil eden file isimlerini kolayca ayırt etmemiz içindir.
Tabii şu anda editörde hazır durumda bir programımız çalıştırılmayı bekliyor. Hemen A (Compile) komutunu verip iki defa RETURN tuşuna basın. Kısa bir süre sonra bir satır aşağıda NO ERRORS mesajı belirecektir. Böylece herhangi bir Syntax hatası yapmadığımıza emin olabiliriz.
Bu andan itibaren source listesinin obje kodu, Seka çalışma bölgesi içinde hazırdır.
Oluşan makina kodu programı çalıştırmak için JSTART veya GSTART komutunu vereceğiz. GSTART'ı kullanırsak ardından iki defa RETURN tuşuna basmalıyız (Daha sonra açıklanacak). Görünürde hiçbir şey olmamış gibi gözükebilir. Fakat hemen Seka derleyicisinin ekranının arkasındaki ekrana (Workbench ekranına) bir göz gezdirirseniz, Benim window'um isimli bir window açıldığını göreceksiniz.
Eğer programı çalıştırdığımızda bilgisayarınızın power led'i yanıp sönmeye başlarsa veya mouse işaretçiniz hareket etmiyorsa bilgisayarınız kilitlenmiş demektir. Böyle bir durumda ya bilgisayar kendisini bir guru mesajı ile reset eder ya da kendi halinde bekleyip sizin onu reset etmenizi bekler. Örneğimizi çalıştırdığınızda böyle bir sonuç ile karşılaşırsanız hemen derleyiciyi tekrar yükleyip, ardından "R isim" komutunu kullanarak örneği yükleyip dergideki döküm ile karşılaştırınız.
Evet, yazdığınız satırlar işte bu window'un yaratılması içindi. Artık sizin de Workbench ekranında tamamı ile kendi ürününüz olan bir pencere mevcut. Tamam çok güzel de, derleyicinin editörüne
*** AMIGA DÜNYASI *** AMIGA INTUITION LIBRARY WINDOW EXAMPLE *** ASSEMBLER KURSU ÖRNEK 10.1 ***
start: move.l 4,a6
lea
INTNAME,al
jsr
-$228(a6)
move.l d0,INTBASE
beq
EXIT3
move.l INTBASE,a6
lea
WINDOW,a0
jsr
-$cc(a6)
move.l d0,WINBASE
beq
EXIT2
LOOP: btst
#10,$dff016
bne
LOOP
EXIT1: move.l WINBASE,a0
jsr
-$48(a6)
EXIT2: move.l 4,a6
move.l INTBASE,al
jsr
-$19e(a6)
EXIT3: rts
* _________________________________________
INTNAME:
dc.b "intuition.library",0
WINNAME: dc.b "Benim Window'um",0
WINDOW:
dc.w
20,20
dc.w
300,100
dc.b
0,1
del
0
del
$l+
$2+$4+$8
del
0,0
del
WINNAME
del
0,0
dew
200,50
dc.w
400,200
dc.w
1
INTBASE:
del 0
WINBASE:
del 0
bir şeyler yazdık. Sonra onu compile ettik. Ardından çalıştırdığımızda ortaya bir window çıktı. Şimdi hepinizin bu source listesi üzerinde az çok bir fikriniz vardır. Hemen sizi bir sürü sorularla yalnız bırakmayıp bu esrarlı ve bilinmeyen dolu satırları açıklığa kavuşturalım.
Bu arada JSTART ve GSTART harflerinin ne anlama geldiğini size kısaca anlatayım.
J komutu (jump) hafızada herhangi bir makina dili programını çalıştırmak için kullanılır, ikinci harf olarak yazdığımız START ise benim programlama tekniğim ile ilgilidir. Anlamı ise source koddaki programın başlangıç label'ının ismidir. Ben bu programda başlangıç label'ı için START demiştim. Siz de kendinizce kolay gelebilecek başka label isimleri kullanabilirsiniz. Mesela başlangıç label'ımızın ismi AMIGA olsaydı, biz programı compile ettikten sonra çalıştırmak için JAMIGA yazmamız gerekecekti. Yani J komutunun çalışma şekli, J + LABEL'dı. Aynı zamanda J ile AMIGA arasında isteğe göre boşluk da bırakabilirsiniz (J AMIGA gibi). Veya sadece J komutunu verirseniz, LABEL ismi vermezseniz, bilgisayar otomatik olarak source kodunun başından itibaren programı çalıştırmaya başlayacaktır.
GSTART komutu için de aynı şeyler geçerlidir. Fakat J ile arasında ufak bir fark vardır. GSTART komutunu verdiğinizde, bilgisayar programı çalıştırmadan önce size BREAKPOINT soracaktır. Bunun anlamı, programın ortasında bir yerde işlemci RTS komutu olmadan RTS görmüş gibi Seka'ya geri dönmesini isteyebilirsiniz. İlk düşünüşte bir anlam veremeyebilirsiniz. Fakat yerine göre BreakPoint'in yararı çok olabilir. En basitinden hata arama ve tespit etmede yararı büyük olmaktadır. Veya yine programın belli bir yerinde programı durdurup Register'lerin değerlerini öğrenmeniz gerekebilir. Ya da başka birisinin programını kurcalarken işlem adımlarını birbirinden ayırmak için bu komutu kullanabilirsiniz. Kısacası BREAKPOINT, 68000 makina kodunun yararı çok olan bir kullanım modudur.
Bu sayı için bize ayrılan sayfalar doldu. Yazı dizimize bu aylık son veriyoruz. Son örneğimizin tam açıklamasını gelecek sayıda yapacağız. Buna ek olarak gelecek sayıda Amiga Library'lerine de gireceğiz ve yukarıdaki programda da görüldüğü gibi son derece yararlı olan bu sistem rutinlerinin, basit ama can sıkıcı işlemleri kolayca ve zahmetsiz yapmamıza ne kadar yaradığını göreceksiniz.