Plazma sayı 5, sayfa 92

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 92

BA : Başlangıç Adresi BT : Bitiş Adresi XEX Dosya Yapısı: 2 byte : $ffff (dosya başlığı)

2 byte : BA (16 bit)

2 byte : BT (16 bit)

N byte : Programı bu bölüme yazıyoruz

2 byte : $02e0

2 byte : $02e1

2 byte : BA (16 bit) Eğer byte'ları tek tek sıralayacak olursak.

$ff, $ff, BA(alt 8 bit), BA(üst 8 bit), BT(alt 8 bit), BT(üst 8 bit), ... , $e0, $02, $e1, $02, BA(alt 8 bit), BA(üst 8 bit)

Böyle bir byte dizilimiyle karşılaşıyoruz.

ACME Kullanarak XEX Dosyası Yaratmak

Şimdi yukarıda verdiğimiz dosyanın ACME'den nasıl oluşturulduğunu görelim. Atari Assembler Editor için yaptığımız örneğin aynısını ACME'den kullanarak hazırlayalım.

renk.ata

BASLANGIC ADRESI $0600

!to "renk.xex",plain

*

BASLANGIC ADRESI-6

lword BASLANGIC ADRESI, BITIS ADRESI

*

BASLANGIC ADRESI lda #$c4 Sta $Ş02c6 jmp $a000

$02e1,

BITIS ADRESI *

lword $02e0, BASLANGIC

Bu örneğin tek farkı sonunda "RTS" yerine "JMP $a000" kullanmamız. Bunun nedeni ise otomatik olarak çalıştırılan programlar Basic'ten çağırılmıyorlar. Bu durumda da geri döneceğimiz nokta Basic olmadığı için programdan çıktığımız takdirde bilgisayar reset atıyor ve bunun gibi bir örnekte sonucu göremeyebiliyoruz. Basic'e dönmeden sonucu görmek istersek "RTS" yerine "JMP *" kullanabiliriz. Bu durumda programımız çalışacak ve sonunda sonsuz döngüye girerek kilitlenecektir. Ancak ekran renginin değiştiğini gözlemleyebiliriz. Atari'de Basic'in başlangıç adresi $a000'dır. "jmp *" yerine "jmp $a000" kullandığımız durumda programımız çalışıyor ve Basic ekranına güvenli bir şekilde ulaşmış oluyoruz.

Şimdi yukarıdaki örneği inceleyelim. İlk olarak BASLANGIC ADRESİ isimli bir sabit tanımlıyoruz. $0600 rastlantısal bir adres değil. Otomatik olarak çalıştıracağımız programlarımızı bu adrese yerleştirmemiz önemli. Tabii ki istediğimiz takdirde programımız farklı bir hafıza adresine de yerleşebiliyor. Fakat yine de ilk olarak başlangıç adresinin $0600 verilmesi gerekiyor. Daha sonra program istenilen adrese dallanabiliyor.

Ito "renk.xex",plain

Bu satırda dikkat etmemiz gereken noktalar şunlar. "renk.xex" derlenmiş programın kaydedileceği dosya ismi. Ancak asıl önemli olan ondan sonraki "plain" parametresi. Eğer ACME'yi Commodore 64'e yönelik kullanıyor olsaydık buraya "cbm" yazardık. Bu sayede otomatik olarak başlangıç adresi programın başına eklenirdi. Kısacası ACME'nin Atari'ye özel bir dosya formatı desteği olsaydı buraya "ATR" gibi bir şey yazıp doğrudan programımızı yazmaya geçebilirdik. Ancak ne yazık ki ACME'nin henüz Atari'ye özel bir desteği bulunmuyor. Ama ACME'nin yapımcıları, ACME'nin farklı 6502 tabanlı platformlarda kullanılabileceğini öngördükleri için "plain" parametresini eklemeyi ihmal etmemişler. Bu parametrenin yaptığı şey ise dosyanın başına, sonuna hiçbir şey eklememek ve düz bir binary dosya oluşturmak. Biz bu özelliği kullanarak kendi istediğimiz bir dosya formatını oluşturabiliyoruz.

* z BASLANGIC ADRESİ-6

XEX dosyalarının 6 bytelık bir başlığı (header) bulunuyor. Biz de burada başlangıç adresinin 6 byte öncesine denk gelecek şekilde başlık için pozisyon ayarlaması yapıyoruz.

lword $ffff, BASLANGIC ADRESİ, BIİTİS ADRESİ

Bu satır dosyanın başlığını oluşturuyor. !word 16 bitlik değerleri doğrudan yazmamızı sağlıyor. Eğer byte byte yazacak olsaydık bu satırı şu şekilde kullanabilirdik: $ff, $ff, <BASLANGIC ADRESİ, >BASLANGIC ADRESİ, <BITIS ADRESİ, >BITIS ADRESİ

* z BASLANGIC ADRESİ

Programın başlangıcına geldik. Aslında bu satırı yazmasak da tam 6 bytelık bir başlık tanımladığımız durumda aynı noktada olmamız gerekiyor. Ancak hem programın daha rahat okunması için hem de bir tedbir olarak bu satırı ekledik.

BITIS ADRESİ - *

Programın bitiş adresini baştan tanımlamak mantıklı bir yol değildir. Çünkü program uzayıp kısaldıkça bitiş adresi değişecektir. Her defasında bu adresi bulmaya uğraşmak da çok mantıklı bir seçenek değildir. Bu yüzden programın sonuna geldiğimizde "*" sembolünü kullanarak program adres sayacının değerini BITIS ADRESİ'ne eşitliyoruz. Bu da doğrudan olarak başlıktaki yerini alıyor.

$02e0, $02e1, BASLANGIC ADRESİ

$02e0 ve $02e1 adresleri Atari'nin disk işletim sistemi tarafından kullanılan adresler. Programın sonuna eklediğimiz BASLANGIC ADRESİ de yine programın çalıştırılacağı başlangıç adresinin yer aldığı yer.

Klavyeyle gezinmek için ← ve → tuşları.