Program Döküm Eki sayı 16, sayfa 7

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 7

Gerçi MAKİNA DİLİNE MERHABA ve COMMODORE 64 İLE GRAFİK yazılarımızda sıkça değindik, ama gene de bu bit değerlerini nasıl 0-225 arası sayılara çevireceğimizi görelim.

Diyelim ki, sıfırıncı sayfa adreslemelerinin üçer karakter olmasını (BIT 0=1), kimi komutların arkasına bir boş satır eklenmesini (BIT 1 = 1), direkt mod komutlarının ASCII karşılıklarını görmeyi (BIT 2 = 1), tablo satırlarının arka arkaya gelmesini (BIT 3 = 0), tablolarda da ASCII karşılıklarını görmeyi (BIT 4 = 0), T ve E harflerini kullanmayı (BIT 5 = 1) ve ROM'un altındaki RAM'ı düşünmemeyi (BIT 7 = 0) istiyorsunuz. BIT 6'yı da 0 olarak varsayalım (Bu satırların yazarı, devamlı bu kombinasyonu kullanmaktadır). Sonuç:

2↑0+2↑1+2↑2+2↑5=39

Yani ← E39 verdiğimizde daha önce belirttiğimiz sınırlar arasındaki programımız ← P ve ← T komutlarına göre ve demin belirttiğimiz görünüşe sahip olarak assembler koduna çevrilecektir. REASS'ın çalışmasını, ekrandaki gittikçe uzayan bir çizgiden anlayabilirsiniz. REASS işini bitirince LIST yapın. Eğer SUPER-ASS'ı daha önceden yüklemişseniz /E komutunu kullanmanız daha iyi olacaktır. Karşınıza üretilen assembler kodu çıkacaktır. EĞER LIST KULLANIYORSANIZ, SAKIN SATIRLARDA BİR DEĞİŞİKLİK YAPMAYA KALKIŞMAYIN. Önce üretilen kodu bir yerlere SAVE edin, sonra SUPER-ASS'ı yükleyip çalıştırın, ürettiğiniz programı yeniden yükleyip /E yardımı ile değiştirmeye başlayın. Artık gerisi size ait.

Baştan beri anlattığımız şeyler çok karmaşık görünse de, bir-iki kullanımdan sonra saniyelik otomatik işlemlere dönüşüyorlar.

DİKKAT: Yazımızın başından beri verdiğimiz komutları ayrı ayrı satırlarda değil de, aynı satırda yazmalısınız. Aksi takdirde, bir sürü SYNTAX ERROR yaratırsınız. Örneğin:

SYS 49152,$9000,$9100: ← P $9000: ← T $90F0,$90FF: ← E 39

Bu şekilde ancak 80 karakter (iki ekran satırı) uzunlukta komutlar yazabilirsiniz. Ancak, programınızın içinde 5-6 tane tablo varsa, 3-4 yeri label ile işaretlemek istiyorsanız, 80 karakter size yetmeyecektir. Ne yapacağız? Yapılacak şey minik bir program yazmak. Tıpkı BASIC program gibi. Örneğimize bir bakın:

Bu programı yazıp,

SYS 49152,$9000,$9100:RUN

verdiğinizde, REASS önce makina kodunun yerini öğrenecek, sonra kısa programdaki bilgileri okuyacak, sonra bu kısa programı silerek yerine assembler kodunu üretmeye başlayacaktır. Nasıl, basit değil mi?..

Bu tür kısa program yazmadan direkt modu kullanmayı ancak tablo veya ekstra label gibi bir derdiniz yoksa yapmanızı tavsiye ederiz. Örneğin:

SYS $8000,$8357: ← E39

Bir başka direkt mod kullanımı da, makina dili programınızın içindeki tabloların yerlerini bilmiyorsanız ve REASS'ın size yardımcı olmasını istiyorsanız olacaktır. İşte burada, demin es geçtiğimiz 6 numaralı bit'i kullanacağız. Eğer bu bit 1 ise, REASS assembler kodu üretmeyecek, makina kodunun üstünden geçerek, nerelerde tablolar olduğunu bulup bunları demin bizim yazdığımız türde bir program şeklinde ← T komutları ile belirleyecektir. Örneğin:

SYS $8000,$9000: ← E 46 komutu işledikten sonra LIST yapınca, şuna benzer bir program görebilirsiniz (tabii $8000-$9000 arasında bir program varsa):

İşte burada sizin biraz hayal gücünüzü çalıştırmanız gerekiyor. REASS, sadece makina kodu karşılığını tablolamadığı kısımları tablo olarak niteleyecektir. Diyelim ki, $8106 adresindeki byte'ın değeri $60. Bu durumda, makina dilindeki RTS komutunun kendisi ile de aynı olduğu için, REASS o adresi tabloya dahil etmeyecektir. Yukarıdaki örneği gözönüne alırsak, aslında tablonun $8100-$8200 adreslerini tamamen kapladığını varsayabiliriz.

REASS'ın ürettiği tablo listesinin yardımıyla gerçek tablo adreslerini ayarlayıp, en son satıra da E 39 gibi bir komut koyup (gerekiyorsa programın başlangıç ve bitiş adreslerini de ekleyerek) SYS $8000,$9000: RUN ile gayet güzel bir assembler kodu sahibi olabilirsiniz.

İsterseniz REASS'ın kendisini assembler koduna çevirelim. Önce REASS'ı yerine yükleyin. Sonra aşağıdaki program ile onu $8000'den sonraya kaydıralım:

Şimdi NEW verip şu programı yazın:

Şimdi de şu komutu verin:

SYS 49152,$C000,$CB00,$8000: RUN

Sekiz saniye içinde assembler kodu çevrilecektir. Oluşturduğunuz assembler kodunu yükleyin ve üzerinde istediğinizi yapın.

Bazı programlarda, örneğin kendini devamlı değiştiren programlarda, kimi adresler devamlı değişebilir. Bu durumda REASS bu adresleri label ile değil de, gerçek adreslerini onaltılık sistemde yazarak çevirecektir. Bu tür satırların arkasına üç soru işareti eklenecektir. Böylece tanınmaları kolaylaşacaktır.

Makina dili programcıları bilirler, BIT ve LDA komutunun kullanıldığı bir hile vardır. BIT $00A9 komutu aynı zamanda .BY $2C LDA#$00 anlamına da gelmektedir. Bunun derinliklerine inmeyeceğiz. Ancak REASS, bu üç byte'ı .BY şeklinde yazıp, assembler kodu şeklini de noktalı virgülün arkasına açıklama olarak yerleştirecektir.

ÖNEMLİ: Eğer oluşacak assembler kodunun hafızada değil de disket üstünde oluşmasını istiyorsanız, (bu yöntemi sadece disket sürücüsü olanlar kullanabilir), önce OPEN ve CMD komutları ile bir dosya açın sonra REASS'ı işletin. Örnek verelim:

Demin REASS'ın kendisini çevirirken yaptıklarımıza geri dönelim.

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