plazma - amatör bilgisayar kültürü

AsmPro Kılavuzu

Şemseddin 'Endo' Moldibi

Merhaba Amiga’da assembly dilini kullanarak kod yazmak için kullanabileceğiniz pek çok assembler vardır. Bunların en tanınmış olanları Master Seka, Trash’m One, PhxAss, AsmOne ve AsmPro’dur. Bunlar dışında Aminet’te pek çok güzel derleyici bulabilirsiniz.

Bu yazımızda AsmPro ve AsmOne’yu nasıl kullanacağımızı öğreneceğiz. Bu iki program birbirinden bağımsız olsalar da özellikleri çok benzerdir.

Size tavsiyem artık Master Seka ve Trash’m One kullanmamanızdır. Çok uzun yıllardır geliştirilmiyorlar ve özellikle yeni sistemlerde problemlidirler. AsmPro’nun AsmOne’a göre en önemli avantajı ise grafik kartlı amigalarda, grafik kartının ekran modlarını kullanabilmesidir. Ancak AsmOne’ın son versiyonlarında bu özellik de eklendi.

PhxAss ise çok kaliteli ve güncel olmasına karşın bir IDE’ye sahip değildir. Elbette CED ya da GoldEd gibi bir text editörü ile kullanabilirsiniz. Ancak yine de bir debugger kullanmanız gerekir. Bu konuda da Barfly’ı tavsiye ederim.

Yazının geri kalanını AsmOne üzerinden anlatmaya devam edeceğim, çok büyük ölçüde AsmPro için de aynı olacaktır.

AsmOne bir; Editör, Assembler, Debugger ve Monitör programıdır. Yani kodlarınızı yazabilir, derleyebilir, satır satır çalıştırarak ya da breakpoint koyarak debug edebilirsiniz. Ayrıca hafızanın herhangi bir bölümünü görüntüleyebilir ve disassemble edebilirsiniz. AsmOne ile aynı anda 10 farklı kaynak dosyası üzerinde çalışabilir ve bunları bir proje olarak kaydedebilirsiniz.

1. AsmOne/Pro Komutlar / Menüleri

AsmOne ile çalışırken kullanabileceğiniz 2 yöntem vardır. Bunlardan biri programın menülerini kullanmak diğeri ise (kendi dokümanında DLC = Direct Line Command olarak isimlendirdiği) çoğunlukla tek karakterlik komutları komut satırına yazarak kullanabilirsiniz.

Dilerseniz önce komut satırından verilen komutların genel bir listesine bakalım:

Komutların bazıları parametre almazken bazıları birden fazla parametre alır, o durumda karşınıza prompt çıkacaktır. O komutlar için parametre bölümünde “?” göreceksiniz.

1.1. AsmOne Komutları

Komut

Parametre

Açıklama

!

-

Çık/İlk ekrana dön

!!

-

Hemen çık

#

-

Hakkında penceresi

=

-

Hafıza kullanım bilgisi

=C

-

Program renklerini değiştir

=F

-

Font'u değiştir

=M

-

Projeye hafıza ekle

=P

-

Proje bilgisi

=R

-

Register bilgisi

=S

-

Sembol listesi (label vs.)

>

dosya ismi

Çıktıyı dosyaya yönlendir

?

value

Hex/Ascii/Bin çevirici

[

value

Ondalıklı işlem

@A

adres/label

Hafıza editleme

@B

adres/label

Hafızayı binary göster

@D

adres/label

Hafızayı disassemble et

@H

adres/label

Hafızayı hexadecimal listele

@N

adres/label

Hafızayı ascii listele

A

-

Kodu derle

AC

-

Kodu test et

AD

-

Derle ve debugger aç

AO

-

Assemble ve optimize et

B

-

Son satıra git (Editörü açar)

C

?

Hafızanın bir bölümünü kopyala

CC

sürücü

Disketin Checksum'ını hesapla

CS

?

Sinüs tablosu oluştur

D

-

Disassembler'ı aç

E

dosya ismi

Harici dosya yükle

EL

?

Tüm labelların başına/sonuna verilen ifadeyi ekle

F

?

Hafızayı doldur

G

Adrese git (Go)

H

adres/label

Monitere geç (hexadecimal)

I

dosya ismi

Dosyayı araya sok (Insert)

IB

?

Hafızayı binary olarak araya sok

ID

?

Hafızayı disassembly ederek araya sok

IH

?

Hafızayı hex olarak araya sok

IN

?

Hafızayı ascii olarak araya sok

IS

?

Sinüs tablosu sok

J

adres

Adrese git (Jump)

K

adım sayısı

Adım adım çalıştır

L

ifade

Verilen yazıyı bul

M

-

Monitör'e geç

N

-

Monitör'e geç (Ascii)

O

-

Silinmiş kodu geri getir (Old)

P

satır sayısı

Yazdır (bulunduğu pozisyondan)

PS

?

Debug işlemi için parametre

Q

?

İki hafıza bölümünü karşılaştır

R

dosya ismi

Dosya aç

RB

dosya ismi

Binary dosya aç

RE

dosya ismi

Proje aç

RO

dosya ismi

Obje (exe) dosyası aç

RS

sürücü, ?

Disketten sektör oku

RT

sürücü, ?

Disketten track oku

S

?

Hafızada bul

T

-

İlk satıra git (Editörü aç)

U

-

Dosyayı güncelle

UA

-

Tüm dosyaları güncelle

V

klasör

Klasörü listeler (Dir)

W

dosya ismi

Dosyaya yaz

WB

dosya ismi

Binary dosya yaz

WE

dosya ismi

Projeyi kaydet (Tüm açık dosyaları)

WL

dosya ismi

Link dosyası kaydet

WN

dosya ismi

Kodu ascii olarak

WO

dosya ismi

Obje (exe) oluştur

WP

-

Ayarları kaydet

WS

?

Sektör yaz

WT

?

Track yaz

X

-/register

Registerları listele

Y

komut

DOS komutu çalıştır

ZA

-

Derlemede kullanılan hafızayı serbest bırak

ZB

-

Breakpoint’leri temizle

ZF

Dosyayı sil (disketten)

ZI

-

Include’ları temizle, derleme işleminde tekrar yüklenirler

ZS

-

Üzerinde çalışılan dosyayı sil

CD

klasör adı

Klasör yarat

Bu listedeki pek çok komut yazılıp enter’a basıldıktan sonra parametrelerini almaktadır, bu komutların parametrelerini “?” ile gösterdim. Örneğin;

> C

> BEG> $00234500

> END> $00302500

1.2. AsmOne Menüleri

AsmOne’ın menülerinden ulaşabileceğiniz tüm komutlar aslında prompt’tan ulaştıklarınızın aynısıdır. Bu nedenle tekrar açıklamalarını yapmaya gerek görmüyorum. Tüm menü seçeneklerinin yanında o işlemi gerçekleştirmek için kullanabileceğiniz komutu görebilirsiniz. Editör ve Debugger içindeki menü seçenekleri de isimlerinden kolayca anlaşılabilecek seçeneklerdir. Editörde blok komutları, kod içinde belirli satırlara atlama; Debugger’da ise breakpoint ve watch ekleme, satır satır çalıştırma gibi özellikler vardır.

1.3. AsmOne Ayarları

AsmOne/Pro ayarları iki bölümdedir: Assembler Preferences ve Environment Preferences.

Assembler Preferences, derleme işlemi ile ilgili ayarlardır;

Rescue

Kaynak kodunuzun ZS ile silindikten sonra O (Old) komutu ile geri alınabilmesini sağlar.

Level 7

AsmOne Level 7 interrupt kullanır.

NumLock

Açık olması durumunda nümerik klavyeyi yön tuşları olarak kullanabilirsiniz.

Auto Alloc

Section’lar için hafıza ayırma işlemini otomatik yapar.

Debug

Debugger geçmeden önce kodun otomatik derlenip derlenmeyeceğini belirler.

List File

Derleme işlemi sırasında kod listesini gösterir; satır numaraları, label’lar vb.

Paging

Listelemeyi sayfa sayfa yapar.

All Errors

Hata ile karşılaşıldığında derleme işlemi devam eder. Birçok hatayı aynı anda görmek için kullanabilirsiniz.

Progress Indicator

Derleme işleminde progress gösterir.

Progress By Line

Derlenmekte olan satırı gösterir.

DS Clear

DS ile ayrılan bloğun temizlenmesini sağlar. Normalde bu alan herhangi bir değer ile doldurulmaz. Derlenmiş programda temizlenmeyeceğini unutmayın.

Label :

Label’lar : ile bitmesi gerektiğini gösterir.

UCase = LCase

Büyük/Küçük harfin eşit kabul edilip edilmeyeceği.

; Comment

Açıklama satırlarının ; ile başlayıp başlamayacağı.

Processor Warn

Kullandığınız komutların seçili CPU tarafından desteklenmemesi durumunda uyarı gösterilir.

FPU Present

Sisteminizde FPU olup olmadığını seçebilirsiniz.

68020++ Odd Data

68020 ve üstü işlemcilerde data’larınız tek adreslere denk gelebilir. 68000’de bu durumda hata oluşur. Tek adrese denk gelen data olması durumunda uyarı verilip verilmeyeceğini bu seçenek ile belirleyebilirsiniz.

68851 Present

Sisteminizde MMU olup olmadığını seçebilirsiniz.

Environment Preferences, uygulama ayarlarınızın bazılarının açıklamaları aşağıdaki gibidir:

ReqTools Library

Dosya açma / kaydetme işlemleri için ReqTools library kullanılır.

Save Marks

Dosyanızın içine belirlediğiniz mark’lar da kaydedilir.

WB to front

Kodunuzu çalıştırdığınızda Workbench öne getirilir.

Resident Registers

REGSDATA dosyası hafızada bekletilir. =R ile tüm donanım register’larının listesini görebilirsiniz.

Safety

Popup pencerelerde varsayılan seçenek olmaz.

Close Workbench

AsmOne açıldığında WB kapatılır. WB’den çalışan başka programlar varsa kapatılamayabilir.

Clipboard Support

Clipboard açık/kapalı.

Parameters

Debug işlemi başlatılırken koda parametre verilip verilemeyeceği. PS ile verilecek parametreleri belirleyebilirsiniz.

RTG Mode

Grafik kartı desteği açık/kapalı. DİKKAT! Eğer AGA ekranda çalışıyorsanız ve bu seçenek seçiliyse Debugger’a girerken hata alabilirsiniz. Grafik kartı ekranında çalışmıyorsanız seçmeyiniz.

Extended ReqTools

Bul/değiştir gibi işlemler için ReqTools library’i kullan/kullanma.

Keep x

Editörde aşağı/yukarı ilerlerken imleç aynı kolon hizasında kalır.

ASCII Only

Monitörde ASCII olmayan karakterler gösterilmez.

Disassembly

Debugger’da bir sonraki satırı gösterir.

Show Source

Debugger ekranında derlenmiş kod ya da kaynak kod gösterilmesini sağlar.

Enable/Permit

Kod çalıştırılmadan önce multitasking’in kapatılıp kapatılmayacağı.

Libcalls dec

Library fonksiyonları için ofset değerleri decimal moda gösterilir.

1.4. AsmOne Direktifleri

Aşağıdaki kodlarınızın içinde kullanabileceğiniz direktifleri ve açıklamalarını bulabilirsiniz.

EXTERN

[label] EXTERN [number,]<file>,<address>[,length]

Harici bir dosyayı verilen adresten itibaren yükle

=

<label> = <value>

label'a <değer> atar.

*

<label> *<operator>

Derleme işleminde o anki hafıza adresini gösterir.

ADDWATCH

ADDWATCH <label>

Debugger için bir izleme yeri ekler.

ALIGN

ALIGN <value1>,<value2>

Sonraki satırın denk geleceği adresi belirler. Değer2'ye bölünebilen, sonraki ilk adres bulunur ve değer1 eklenir, derleme işlemine bu adresten itibaren devam edilir. Ör: ALIGN 0,4 bir sonraki 4'e bölünebilen (longword) adrese geç. Burada arada atlanan byte'lara herhangi bir değer yazılmaz.

AUTO

AUTO <command>[\command..]

Derleme sırasında diğer DLC'lerin çalıştırılmasını sağlar, komutlar \ ile ayrılır.

BASEREG

BASEREG <label>,<register>

Verilen adres reg. için bir ofset değeri atar, sonraki tüm relatif işlemlerde bu ofset değeri otomatik olarak eklenir.

BLK

[label] BLK.[B|W|L|D|S] <value1>,<value2>

Sabit değerlerden oluşan bir blok tanımlar. Ör: BLK.W 100,$AA55 ;100 adet $AA55 (word)

CMEXIT

CMEXIT <value>

İç içe çağırılan makrolardan <değer>'e ulaşıldığında çıkılmasını sağlar.

CNOP

CNOP <value1>,<value2>

Bkz. ALIGN

DC

DC.[size] <expresion>[,expresion...]

Sabit veri tanımlamanızı sağlar, Ör: DC.B $01,$02,'plazma',$80 / 2

DCB

DCB.[size] <value1>,<value2>

Bkz. BLK

DR

DR.[B|W|L] <value>

Relatif değerlerden oluşan bir blok tanımlamanızı sağlar. Bu değerler bulunduğu adres ile verilen değer arasındaki fark ile hesaplanır (<value>-*). Ör: DR.L myRoutine

DS

DS.[size] <value>

İleride kullanılmak üzere <değer> kadar alan ayırır. Ör: DS.W 50 ;50 word (100 byte) alan ayır. Dikkat! Bu ayrılan alan herhangi bir değer ile doldurulmaz.

ELSE

IF ile kullanılır

END

Kodun bittiği yeri gösterir, o noktadan sonrası derlenmez.

ENDB

ENDB <address register>

BASEREG tanımlamasını kaldırır.

ENDC

ENDIF ile aynıdır.

ENDIF

IF bloğunu bitirir.

ENDM

Makro bloğunu bitirir.

ENDOFF

OFFSET tanımlamasını kaldırır.

ENDR

REPT bloğunu bitirir.

ENTRY

Harici bir tanımlama yapar. Bkz. XDEF, EXTRN, GLOBAL.

EQU

<label> EQU <value>

<label>a <değer> atar.

EQUC

<label> EQUC <PPC register>

PPC reg.'na <isim> verir

EQUD

<label> EQUD <FPU value>

<label>a <değer> atar. (Double, Ondalık)

EQUP

<label> EQUP <FPU value>

<label>a <değer> atar. (Paxked)

EQUR

<label> EQUR <register>

<register>a <isim> verir.

EQUS

<label> EQUS <FPU value>

<label>a <değer> atar. (Single, Ondalık)

EQUX

<label> EQUX <FPU value>

<label>a <değer> atar. (Extended)

EREM

REM bloğunu bitirir

ETEXT

TEXT bloğunu bitirir

EVEN

Sonraki adresin bir çift (even) adres olmasını sağlar (CNOP 0,2)

EXTRN

EXTRN <label>[,label...]

Harici tanımala yapar. C'deki extern ile aynıdır.

FAIL

'User made FAIL' hatası verilmesini sağlar.

FILESIZE

FILESIZE(<file>)

Harici bir dosyanın boyutunu okur. Özellikle derleme sırasında Memory Allocation için kullanışlıdır.

GLOBAL

Bkz. EXTRN

IDNT

IDNT <string>

???

IF

IF(EQ|NE|GT|GE|LT|LE) <bool-value>

IF bloğu açar

IF1

Bu blok içindekiler sadece derlemenin ilk aşamasında derlenir. (AsmOne/Pro 2 aşamalı (2 Pass) bir derleyicidir)

IF2

Bu blok içindekiler sadece derlemenin ikinci aşamasında derlenir.

IFB

???

IFC

IFC <string1>,<string2>

<string1> = <string2> olduğunda IF bloğu derlenir.

IFD

IFD <symbol>

<sembol> tanımlı ise blok derlenir.

IFNB

???

IFNC

IFNC <symbol1>,<symbol2>

<string1> ile <string2> eşit olmadığında blok derlenir.

IFND

IFND <symbol>

<sembol> tanımlı değil ise blok derlenir.

IMAGE

IMAGE <file>[,<address>]

Bkz. INCBIN

INCBIN

INCBIN <file>[,<address>]

Binary dosyayı hafızaya okur. Adres verilirse verilen adrese yükler.

INCDIR

INCDIR <path>

INCBIN vb. komutlar için path belirtir. Ör: INCIDR "HD0:sources/" ;sondaki / karakterini unutmayın.

INCIFF

IFF dosya include eder

INCIFFP

IFF palet include eder

INCLUDE

INCLUDE <file>

Verilen kaynak kod dosyasını include eder. Bu işlem sadece ilk derlemede bir defa yapılır, böylece derleme işleminde hız sağlanır. ZI ile hafızaya yüklenmiş olan bu dosyaları temizleyip yeniden yüklenmelerini sağlayabilirsiniz.

INCSRC

INCSRC <sourcenumber>

<sourcenumber> numaralı kaynak kodu include edilir.

JUMPERR

JUMPERR <label>

Kendi hata rutininize atlamanızı sağlar

LOAD

LOAD <address>

Derleme işleminin belirli bir adresten itibaren yapılmasını sağlar. Bkz. ORG

MACRO

Makro bloğu açar.

MEXIT

Makro tanımlamasından çıkar. Tanımlamayı bitirmek için ENDM kullanın.

ODD

Sonraki adresi tek (odd) adres yapar.

OFFSET

ORG

ORG <address>

Program için bir mutlak (absolute) başlangıç adresi belirler. LOAD ile birlikte programınızın belirli bir hafıza adresine yerleştirilmesini sağlayabilirsiniz.

PRINTT

PRINTT <string>

Verilen ifadeyi ekrana yazar.

PRINTV

PRINTV <label/value>[,label/value...]

Verilen <label> ya da <value>'ları ekrana yazar.

REM

Açıklama bloğu açar. REM / EREM arasında kalan yazılar derlenmez. ; ile tek satırlık açıklamalar girebilirsiniz.

REPT

REPT <number>

REPT / ENDR arasındaki blok <number> kadar tekrarlanır.

RS

RS.[size] <value>

Dâhili RS sayacına <value> ekler. Örneklere bakınız.

RSRESET

RS sayacını sıfırlar.

RSSET

RSSET <value>

RS sayacını verilen değere eşitler.

SECTION

[label] SECTION <name>[,type][_memory]

Yeni bir program bölümü (section) başlatır. Tip CODE, DATA ve BSS olabilir, hafıza için _C (chip), _F (fast) and _P (public) kullanılabilir. Copper list, ses ve görüntü verilerini CHIP RAM'e koymak için kullanabilirsiniz.

SET

[label] SET <value>

[label]'ı <value>'ya eşitler. EQU ve = ile aynıdır, ancak daha sonra aynı label için farklı değer SET edilebilir.

SETCPU

SETCPU <option>

CPU tipini belirler: 000, 010, 020, 030, 040, 060 olabilir.

SETFPU

SETFPU <option>

FPU olup olmadığını belirler: ON, OFF verilebilir.

SETMMU

SETMMU <option>

MMU olup olmadığını belirler: ON, OFF verilebilir.

TEXT

TEXT bloğu başlatır. Bkz. ETEXT

XDEF

XDEF <label>[,label....]

Diğer kodlarda kullanılmak üzere verilen label'ları harici olarak tanımlar.

XREF

XREF <label>[,label....]

Verilen label'ların harici tanımlar olduğunu belirtir. Derleme işleminde aktif kaynak kodda bu ifadeler tanımlı olmasa da derleme işlemi devam eder.

1.5. Hata Mesajları

Hata Mesajı

Açıklama

Workspace Memory Full

Proje için ayrılan hafıza bitti, =M kullanın

Address Register Byte/Logic

Adres reg.’larına .B ile ulaşamazsınız.

Ayrıca lojik işlem uygulanamaz.

Ör. OR.W A0,D0

Address Register Expected

Adres reg. gereken yerde data reg. kullanıldı

Comma Expected

, ile ayrılmış argüman gerekli

Data Register Expected

Data reg. gereken yerde adres reg. kullanıldı

Double Symbol

Aynı ifade iki kez tanımlanmış

Unexpected End of File

Bir MACRO/IF ifadesi açık kalmış

End of File

Dosya sonuna ulaşıldı (Search)

User made FAIL

FAIL komutuna rastlandı (compile-time)

Illegal Command

Geçersiz komut

Illegal Address Size

Geçersiz adres boyutu. Ör. CLR.B A0

Illegal Operand

Geçersiz argüman

Illegal Operator

Geçersiz operatör

Illegal Operator in BSS Area

BSS içinde yalnızca DS kullanılabilir

Illegal Order

Argüman sırası hatalı. Ör: MOVEM.L A0,D4-D0.-(A7) ;Önce data sonra adres reg. verilmelidir.

Illegal Register Size

Geçersiz reg. boyutu. Ör: MOVE.L (A0,D0.B),D1 ;Index reg. .W ya da .L olabilir

Illegal Section Type

Geçersiz SECTION tipi. Geçerli tipler: code, data, bss

Illegal Size

Hatalı boyut. Ör: ADDA.B D0,A0 ;adres reg. ile .B işlem yapılamaz

Illegal MACRO Definition

Geçersiz MACRO tanımı

Immediate Operand Expected

Bazı komutlar sadece

Include Jam

Include hatası

MACRO Overflow

İç içe en fazla 25 macro tanımlanabilir

Invalid Address Mode

Geçersiz adres modu

LOAD without ORG

LOAD komutu yalnıza ORG ile kullanılabilir

1.6. Makro Tanımlama

AsmOne/Pro bir makro assembler’dır. Yani kaynak kodlarınız içinde sık kullandığınız işlemleri kolayca yapmak ve tekrar tekrar yazmamak için çeşitli makrolar tanımlayabilirsiniz. Bu bölümde nasıl makro tanımlayacağımızı göreceğiz.

Bir makro tanımı yapmak için en uygun yer kodunuzun ilk satırlarıdır. Ayrıca tüm makrolarınızı ayrı bir include dosyasına da koyabilirsiniz. Bir makro tanımlaması aşağıdaki şekilde yapılır:

MYMACRO: MACRO
         ...
         ENDM

Burada MYMACRO tanımladığımız makronun ismidir. İsmin büyük harfle yazılması şart değildir ancak kod içinde makro çağırılan yerleri kolayca görmek açısından bu şekilde kullanmak iyidir. Makro ismi aynı zamanda bir label gibidir bu nedenle ayarlarınızda label sonlarında : olması gerektiğini seçtiyseniz burada da olması gerekir. Ayrıca isim ile MACRO ifadesi aynı satırda olmalıdır.

CLEAN: MACRO
           moveq #0,d0
           moveq #0,d1
           moveq #0,d2
       ENDM

1.6.1. Makrolara Argüman Verme

Tanımladığınız makrolara 10 taneye kadar argüman ekleyebilirsiniz. Bunun için \0 - \9 ifadelerini kullanabilirsiniz. Aşağıdaki örneği inceleyin:

CLEAN: MACRO
           moveq #0,\1
       ENDM

TEST:  MACRO
           move.l (\1)+,(\2)+
       ENDM

       CLEAN D3
       TEST  A0,A1

Ayrıca NARG isimli değişken makro içinde, makronun kaç argümanla çağırıldığını görmek ve buna göre farklı adımlar uygulamak için kullanılabilir:

CLEAN: MACRO
                IF NARG = 2
                        clr.l \1
                        clr.l \2
                ELSE
                        FAIL
                ENDIF
         ENDM

Daha karmaşık bir makro örneği aşağıdadır (AsmOne 1.4 Manual’den alıntıdır):

do_it:  MACRO
            btst        #\1,d0
            bne.b        \@1
            move.l        \2,d0
            lsl.w        #\3,d0
            bra.b        *+4
\@1:              moveq        #0,d0
        ENDM

start:
        do_it        10,d2,3

Include dosyalarından (özellikle exec/types.i) pek çok makronun nasıl tanımlandığını görebilirsiniz.

1.6.2. Makrolar Hakkında Dikkat Edilmesi Gerekenler

AsmOne/Pro’da makro yazarken bazı kurallara dikkat etmemeniz durumunda bulunması çok güç hatalarla karşılaşabilirsiniz. Çünkü AsmOne, hataları makronun içinde değil makronun çağırıldığı yerde verecektir. Bu yüzden aşağıdaki konulara dikkat edin;

  1. Açıklama (comment) satırlarını makroların dışına yazın.

  2. Makro içinde \ karakterini argümanlar dışında bir amaç için kullanmayın.

  3. Makro tanımları içinde gereksiz hiçbir karakter kullanmayın.

1.7. Include Dosyaları ile Çalışmak

Include dosyaları C’den bildiğimiz include dosyaları ile aynı işi görürler. “.i” uzantılıdırlar ve içerikleri AsmOne ile derlenebilecek şekildedir. İçlerinde çok çeşitli tanımlar tipler (types), yapılar (structure), makro tanımları ve sabitler (constants) vardır. Commodore firmasının yayınladığı “Includes & Autodocs” dosyalarını bulup hard diskinize ve bir diskete kopyalayabilir ve AsmOne’ın içinden yüklenerek kullanılabilirsiniz. Autodoc’lar tüm kütüphanelerin tüm fonksiyonlarını açıklayan yardım dosyalarıdır.

Ayrıca bu dosyalara ek olarak kütüphane ofset değerlerini barındıran LVO (Library Offsets) dosyaları vardır. Bu dosyalar çoğunlukla include klasörünün içinde LVO isimli ayrı bir klasörde dururlar. Bu dosyaları include ettiğinizde fonksiyonlar için ofset değerlerini ezbere bilmenize gerek kalmaz. Aşağıdaki örneği inceleyin:

incdir  "include:"
include "exec/types.i"
include "lvo/exec_lib.i"

CALL:   MACRO
            jsr    _LVO\1(a6)
        ENDM

;
; Open Gfx Library
;
        move.l $4.w,a6
        lea    gfxname(pc),a1
        CALL   OpenLibrary
        move.l d0,gfxbase
        beq.s NoGfx

Burada önce gerekli dosyalar include edilmiş, fonksiyon çağırma işlemini kolaylaştırmak için bir makro tanımlanmış ve OpenLibrary fonksiyonu çağırılmıştır. exec_lib.i dosyası include edilmemiş olsaydı CALL OpenLibrary yerine jsr -552(a6) yazmamız gerekecekti.

“types.i” dosyası ise tüm ön tanımlı ifadeleri barındırır. Herhangi başka bir dosyayı include etmeden önce bu dosyanın include edilmesi gerekir.

Ayrıca bu dosyaların içine bakarak da çok şey öğrenebilirsiniz. İçlerinde pek çok yararlı açıklama vardır.

Incdir "include:" ifadesinde tam yolu vermek yerine daha önceden yapılmış bir assign kullanılmıştır. CLI penceresinde assign komutu vererek assign’ların listesini alabilir ve yenilerini ekleyebilirsiniz. Ya da dilerseniz include dosyalarının tam yolunu yazabilirsiniz. INCDIR ifadesini kod içinde herhangi bir yerde tekrar vererek farklı klasörlerle çalışabilirsiniz.

Ayrıca belirtmekte fayda var; pek çok include dosyasının derlenebilmesi için ayarlarınızda UCase = LCase’in kaldırılması gerekir. Bazı durumlarda label’lar için : zorunluluğunu da kaldırmanız gerekebilir.

2. Sonsözler

AsmOne/Pro kullanımı hakkında uzunca bir yazı oldu. Son olarak şunları ekleyebiliriz; AsmOne/Pro çok kullanışlı editörler olsa da bug’ları vardır, o nedenle çalışırken kodlarınızı hard disk ya da floppy diske kaydetmenizi öneririm. Benim yaptığım gibi RAM diske kaydetmeyin, aksi halde makineniz kilitlendiğinde kodlarınızı kurtaramayabilirsiniz.

Kodlarınızı yazarken her zaman label’ları en sol sütuna, komutları ise en az 1 tab karakteri ileriye yazın. Bu sadece okunabilirlik için değil sebebini anlamadığınız birçok hata mesajını da almanızı engelleyecektir.

Sonraki sayıya kadar hoşça kalın.

plazma - 2008