AMIGA ASSEMBLER

Merhaba Assemblercılar. Şimdiye kadar verdiğimiz teorik örneklerle, ilerdeki makina dili programlarınızın temelini oluşturacak kısa rutinlerin oluşumunu ve program satırlarının birbirlerini nasıl etkilediklerini gördük.

Bu sayıdan itibaren, teorik örneklerden çok doğrudan makinada yazarak erişebileceğiniz ve etkisini göreceğiniz örneklere geçiyoruz.

Tabii önce kullanacağımız Assembler derleyicisini tanıyacağız. Bu konudaki tek favorimiz, Seka Assembler. Makina dili programlarımızı, Seka Assembler ile yazacağız. Seka Assembler diye isimlendirdiğimiz Assembler derleyicisini her yerden rahatlıkla bulabilirsiniz. Kullanacağımız Seka derleyicisinin ismi ve versiyonu MASTER SEKA 1.6'dır. Aşağıdaki açıklamalarda bu versiyonu kullanacağımızı ve diğerleri ile aralarında komut farklılıkları olduğunu da söyleyelim. SEKA ASSEMBLER

Amiga'daki Assembler derleyicilerinin içinde, bence en rahat ve en süratlisi Seka Assembler'dır. Programlarınızı Seka'da yazmak ve hiç zaman kaybetmeden tek tuşa basarak compile (derlemek) etmek Seka'da çok kolay. İşleyişi ve öğrenimi bakımından da en sadesi olması, bu yazı dizimizde size önermeme sebep oluyor.

Tabii makina koduna yeni başladığınızı düşünürsek, sizin için Seka Assembler kaçınılmaz bir fırsat oluyor. Ayrıca Commodore 64 kullanıcıları için de bir şey söylemek istiyorum. Amiga'daki derleyicilerden, C-64 Assembler'ına en yakın olanı Seka. Bu arada Seka Assembler'ın Coder'larından da çok memnunuz.

Şu an için, Seka'nın birçok çeşidinin dünya piyasasında dolaştığını söyleyebiliriz. Gerçi bugün, bunlardan sadece iki versiyonun sivrildiğini görüyoruz.

Avrupa'da, 88-89 yıllarında birçok kişi Seka'nın ilk versiyonlarından en seçkini olan Kuma Seka Assembler Ver 1.5'i taban alarak, kendi derleyicisini yazdı. Tabii iyi kötü herkes, yazdıklarının ürünlerini aldı. Bu arada 90 yılı içinde, PROMAX ve BUDDHA adında çalışkan iki ayrı Coder tarafından her ay Seka'nın iki yeni versiyonu üretilmeye başladı. Seka'yı, 90 yılı içinde öyle bir hale getirdiler ki; geçen sene kullandığım Seka'ya baktığımda, ne kadar ilkel bir ortamda Assembler çalıştığımı görüp üzülüyorum.

Bu arada, sizin ne kadar şanslı olduğunuzu söylemeye gerek yok. Siz

Assembler'a bizim gibi ilkel bir Seka yerine, çok modern bir Seka derleyicisi ile başlayacaksınız.

Seka Assembler'ın, devamlı kendini yenilediğini söyleyebiliriz. Seka'yı ilk yazılışından itibaren değerlendirirsek, görüntü ve işletiminde çok büyük değişiklikler oldu. Şimdi Seka'da programlarımızı nasıl yazacağımıza değinelim.

Seka'yı yüklediğinizde standart Seka ekranı gelir ve bilgisayar bize "CHIP OR RAST > " sorusunu yöneltir. Burada Seka'yı hangi tip hafıza bölgesine yüklemek istiyorsak, o hafıza bölgesini seçeriz. Bu soruya Chip memory seçmek için "C", Fast memory seçmek için "F" harfini yazıyoruz.

Bu arada, Amiga hafızasına ve adreslemesine biraz daha derinlemesine girmek istiyorum. Chip memory dediğimiz kısım, Amiga'da system hafızasında FAT AGNUS'un (system yardımcı mikrochip) gördüğü, grafik ve ses verilerinin bulunması gereken kısımdır ve hafızada $00000000 - $00080000 adresleri arasında yer alır.

Fast Memory diye adlandırılan kısım ise, FAT AGNUS'un görmediği ve diğer bütün RAM belleği (yazılıp okunabilir bellek) temsil eder. Normalde Amiga'nın alt kısmından takılan ilave RAM ile kazanılan ikinci 512K'lık kısım, hafızada $00C00000 - $00C80000 adresleri arasına yerleşir. Diğer expansion port'tan takılabilecek ve maksimum sekiz megabyte'a kadar olabilecek bellek ise, system'in $00200000 no'lu bellek adreslerinden itibaren yerleşmektedir. Seka ile çalışırken, programlarımızı bu hafıza bölgelerinde oluşturacağız. Ve 512K'lık bir Amiga'da çalıştığımızı düşünürsek, Seka ve makine kodu çalışmalarımızı çoğunlukla CHIP MEM ($00000 - $80000) hafıza bölgelerinde yapacağız.

Seka Assembler çalışmaya başlamadan önce, bize sorduğu bu soru ile Seka sisteminin ve bizim oluşturacağımız kodun çalışacağı bellek türünü burada C ve F harfleri ile belirtiyoruz. Tabii şimdi biz genelde kullanıcıların 512K'sı olduğunu düşünerek, soruya C yani CHIP MEMORY cevabını vereceğiz.

Bu soruyu cevapladıktan sonra bilgisayara, seçtiğimiz memory türünde ne kadar çalışma bölgesine ihtiyacımız olduğunu belirtmemiz gerekir. Programcı, kendi hazırladığı programın uzunluğuna göre bu değeri yüksek veya alçak tutmalıdır. Bu değeri belirtirken dikkat edilmesi gereken

AMIGA ASSEMBLER

Bir husus da şudur: Program kodu Seka Assembler'ın çalıştığı bölge içerisinde oluşturulacaksa, maksimum değer verilebilir. Ama, benim de yaptığım gibi, program kodunu Seka çalışma alanının dışında ve programın dataları ile bir arada kullanmak isterseniz, bu sayıyı ufak tutup, sadece ihtiyacınız kadarını yazmalısınız. Tabii derleyiciye, program kodunu Seka alanının dışında oluşturmasını söylemeyi de unutmamalısınız (Daha sonra örnekler ile açıklayacağız.).

Genelde, vereceğim örneklerde anlattığım ikinci yöntemi kullanıp sizin olayı daha yalın hali ile öğrenmenizi sağlamaya çalışacağım. Tabii bu yöntemleri kullanmayı öğrenmeden önce daha Seka Assembler'ın bir sürü komutunu ve işlevlerini açıklayacağım.

ÖMER SİNAN POLAT

Bizim vereceğimiz örnek makina dili programların uzunluğunu düşünürsek, bu sayı 10 KB ile 40 KB arasında bir sayı olacaktır. Siz de bu soruya 10-40 arasında bir sayı girin.

Artık Seka hazır ol vaziyette emirlerimizi beklemektedir.

Seka derleyicisinin sadece iki ekranı vardır. Birincisi direkt modu (ilk açılış ekranı), ikincisi ise ESC tuşuna basarak geçilen program yazım ekranıdır.

Source (Makina kodu Assembler listesi)'larımızı bu ekranda yazacağız. Daha sonra göstereceğimiz şekilde assemble edip onları makina kodu (obje kodu) haline dönüştürüp Seka'nın diğer bir komutu ile oluşturduğumuz kodu çalıştıracağız.

Direkt komut modunda Seka'nın tek harften oluşan komutlarını yazabiliriz. "SEKA>" ibaresi olan bir satır ve aynı satır karşısında yazı kursorunu görebiliriz. Yukarıda da belirttiğim gibi tek satırlık Seka komutlarını buradan gireceğiz.

Seka Assembler'ın en son versiyonu olan Master Seka V1.51 ile çalıştığımızı düşünerek direkt yazılan komutların tam listesini aşağıda veriyorum. =>Başlangıçta girdiğimiz memory opsiyonları hakkında bilgi verir. > Filename>Seka çıktılarını printer çıktısı veya bir disket dosyası olarak almak istersek, bu komutu kullanırız. Printer için filename yerine "PRT:" ve disket dosyası olarak atmak için ise "DF0:dosyaismi" şeklinde yazmamız gerekir. ?>Bu komut Basic'deki Print komutuna benzetilebilir. Yaptığı iş toplama-çıkarma gibi aritmetik işlemlerdir. Ayrıca bu komut yardımı ile Hexadecimal, Decimal ve Binary sayı sistemleri arasında sayı dönüşümleri de yapabilirsiniz. @ Komut>Burada Komut yazılı yere herhangi bir CLI komutunu yazarak onu çalıştırabilirsiniz. a Adress>Seka'da Compile işlemini bu komut yapmaktadır. Komutun iki kullanım modu vardır. Birincisi sadece "a" yazarak komutu Compile modunda kullanmaktır. Bu modda, V yazıp RETURN'e bastığınızda, bir soru ile karşılaşacaksınız ("OPTIONS>"). Burada, options sorusuna 8 ayrı şekilde yanıt verilebilir. Bu seçenekler ile compile işlemini ve adresleme sonuçlarını ekranda izleyebilir veya printer'dan çıktılarını alabilir ya da derleyiciye source üzerinde adreslemelerde düzenlemeler yapmasını söyleyebiliriz. OPTIONS komutlarının tam listesi aşağıdadır: A: Absolute memory adresleme hatalarını varsa bulur. E: Compile işlemini printer'dan liste olarak verir. H: Ekrana liste verirken her sayfada tuş beklemesi L: Oluşacak obje kodunun Linkable olması O: Adres düzenlemeleri seçimi (OPTIMIZE) P: E komutundakine benzer bir printer listesi R: Relocatable adreslemelerdeki hataları bulur V: Compile işleminin ekrandan liste olarak izlenmesi

Normalde Compile işlemleri sırasında OPTIONS sorusuna hiçbir şey yazmasanız da olur. Yani a RETURN RETURN yapıp, doğrudan programınızın compile edilmesini sağlayabilirsiniz. Daha sonra J komutu ile programınızı çalıştırabilirsiniz.

Eğer "a" komutunu "a Adres" şeklinde kullanırsanız, Adres yazılı yerden itibaren doğrudan hafızaya assemble yapabilirsiniz. b> Kursor source editörde listenin en sonuna gelir. b Adres> Adres nolu hafıza adresini disk bootblock checksum'ını hesaplar ve adresten itibaren başlayan bootblock checksum hanesine yazar. cl> Source listesini temizler (NEW) cls > Direkt komut ekranını temizler d Adres> Yazılan adresten itibaren yer alan makina kodu listesi, ekrana sayfa sayfa gelir. Sayfayı ve makina kodu listesini devam ettirmek için RETURN tuşuna kullanabilirsiniz. e satır numarası> Verilen satır numaralı source satırını direkt komut ekranına kopyalayıp, sadece o satırın üzerinde değişiklikler yapmamıza izin verir. f > Hafızada belirli bir byte veya karakter dizisini aramaya yarar. Kullanımı şöyledir: f yazıp RETURN'e bastığımızda, bizden BEG> olarak bir sayı bekler. Buraya byte veya karakter aratmak istediğimiz alanın başlangıcını girmemiz gerekir. İkinci olarak END> sorusuna da aratılan alanın sonu olan adres girilir. Üçüncü olarak DATA> yazılı kısma iki türlü cevap verebiliriz: ya aralıklarla 255 13 $32 $6a gibi sayılar; ya da "AMIGA" gibi tırnak içinde herhangi bir karakter dizisi. fi > Belirli bir bölgeyi belli bir sayı veya karakter dizisi ile doldurmaya yarar. İlk önce başlangıç ve bitiş adresleri girilir. Ardından belirtilen adresler arası, hangi sayı ile doldurulacaksa o sayı belirtilir ve işlem tamamlanır. Bu komutu kullanırken çok dikkatli olmanızı tavsiye ederim. Yanlış yazılmış rakamlar veya ROM belleğin üzerine sayı atamalarında bilgisayar kilitlenmeleri olmaktadır. g Adress> Obje kodu oluşturulmuş programları çalıştırmaya yarar. Sorulan BREAKPT> sorusuna (daha sonra anlatacağız) hata bulma ve programı kesme BREAKPOINT olayının (varsa) adresini yazacağız. h > Yukarıda anlattığımız = komutu ile eşdeğer bir komuttur. i start numarası> Source listemizde istediğimiz satır ardına bir kaç boş satır eklemeye yarar. j Adress> g komutu gibi obje kodunu çalıştırır. Fakat bu komutta BREAKPOINT sorusu sorulmaz. kf> Disketten istediğiniz bir dosyayı siler. (CLI'daki DELETE komutu ile eşdeğer) ks> cl komutu ile eşdeğer (source ekranını temizler). 1 aratılacak yazı> Source listemizden bulunup bulunmadığını öğrenmek istediğimiz kelimeyi 1 komutu ardından yazıp Return tuşuna basarak aratabiliriz. Aratılan kelime programda listesinde mevcut ise, derleyici bize kelimenin bulunduğu satır numarasını verir. m adress> Verilen adres'ten itibaren byte'lar tekrar yazılabilir. Derleyici, ilk olarak o adresteki değeri verir. O byte yerine yenisini yazmak istiyorsak, yazarız.

Yenisini yazmayıp Return tuşuna basarsak, bir sonraki byte ekrana gelir. Hafıza editleme modundan çıkmak için ESC (escape) tuşu kullanılır. n adress> Hafızadaki byte'ların ASCII kod karşılıklarını oluşturan listeyi görmek için, bu komutu kullanıyoruz. Adres olarak, display etmek istediğimiz bölgenin değerini yazıyoruz. o> İşte size çok değerli bir komut. Yaptığı iş, çok yararlı. Diyelim ki, o anda üzerinde çalıştığınız source'unuzu ks komutu ile sildiniz ve son anda yanlış bir işlem yaptığınızı hatırlayıp sildiğiniz source'a ihtiyaç duydunuz. İşte size burada Old komutu görev yapıyor. Yani Old komutunu; derleyiciyi kullanırken ks ile en son sildiğiniz program source'ını geriye çağırmak için kullanabilirsiniz. pa> Seka'nın renkleri ayarlamak için kullanılır. Çıkan window'da aynen preferences gibi renk ayarlamalarını yapabilirsiniz. q adress> İşte size bir hafıza inceleme komutu daha. Listede, verilen adress'ten itibaren hafıza byte'larını her satırda 16'lık olarak; sağda hexadecimal değerler, solda ise bu değerlerin ASCII karşılığı verilir. r isim> isim olarak girilen source file'ı, disketten veya başka bir device'dan yükler. ri isim> İsim olarak girilen data file'ı belirtilen device'dan yükler. Derleyici, isim girdikten sonra bizden data file'ın yükleneceği hafıza adresini isteyecektir. ro isim> Seka'ya artık bu komut yardımı ile çalışan bir programı yükleyip debug yapabilirsiniz, ro komutu ile exe bir file'ı yükleyip, Assemble ve disasemble yapabilirsiniz. rs drive numarası> Disketten bir sector okumak için kullanılır. Komut satırını yazdığınızda, derleyici sizden sector numarasını ve yükleyeceğiniz hafıza adresini isteyecektir. Drive numarası olarak bir şey girmezseniz, bu değer 0 olarak kabul edilir. rt drive numarası> Disketten bir track okuyabilirsiniz. Komut satırını yazdığınızda, derleyici sizden track'ın numarasını ve yükleyeceğiniz hafıza adresini isteyecektir. t satırnumarası> Bu komut ile yazı kursoru; source listede istenen satıra gider. Komutu satırnumarası vermeden yazarsak, yazı kursoru ile satıra gider. u adress> ro ile yüklenmiş bir exe file'ı devreden çıkarmak için bu komut kullanılır. Adres olarak, ro komutu ile yüklemiş olduğunuz segment'in adresini yazmanız gerekir. v directory> Amigados'taki dir komutu gibidir. Diskette istenen directory'yi girerek ekrana listeleriz. w isim> Bu komut ile, yazdığınız source kod listesini diskete ASCII TEXT olarak gönderebilirsiniz. Tabii istenen isim ile. wi isim> Bu kullanım ile hafızadan bir bölümü diskete aktarabilirsiniz. Komutta ismi yazdıktan sonra, bilgisayar bize sırası ile diskete kaydedilecek hafıza bölümünün başlangıç ve bitiş adresini isteyecektir. wo isim> Oluşturulan Assembler kodunu segment olarak diskete kaydedebilmek için bu komut kullanılır. Tabii programımızın datalarını program içine daha doğrusu Seka içine yüklememiz gereklidir. ws sector> Hafızanın istenen bir bölümünü sector olarak disket üzerinde herhangi bir yere yazabilirsiniz. Tabii sector olarak yazılan bu hafıza bölgesinin, diskette sector olarak kurallara uygun tanımlı olması gerekir. wt sector> Hafızanın istenen bir bölümünü track olarak disket üzerinde herhangi bir yere yazabilirsiniz. Tabii track olarak yazılan bu hafıza bölgesinin, diskette track olarak kurallara uygun tanımlı olması gerekir. y > Daha sonra açıklayacağımız extern diye ifade edilen, kolay data yükleme komutudur. Seka Assembler'ın açıklamalarına bir sonraki sayı ile devam edeceğiz. Şimdilik hoşça kalın.