Bu sayfadaki yazılar
Sayfanın metni
Sayfa 20
Burada vereceğimiz dört KByte'lık monitor programı $C000'dan $CFFF'e kadar olan bölgeyi kaplıyor. Fakat genel amaca hizmet edebilmesi açısından kendi içindeki bazı emirleri kullanarak daha değişik adres aralıklarında çalışması da sağlanmış durumda. Aslında bu özellik diğer makina dili programlar için de geçerli. Yani artık makina dili programlarınız da yer-değiştirebilir (relocatible) oluyor.
Bu monitorun da diğer monitor programları gibi disassembler, memory dump, line assembler gibi özellikleri var. Daha neleri var, onu birazdan emir listesinde göreceğiz.
Monitorumuz SYS49152 emriyle çalıştırılıyor. Burada dikkat etmeniz gereken nokta çağırma adresi ile başlangıç adresinin aynı olması. Bu özellik monitorumuz diğer bir başka yere kaydırıldığı zaman da geçerli. Mesela monitorumuzu $4000'dan $4FFF'e kadar olan bölgeye kaydırdınız. Bu sefer başlatma emri SYS16378 olacaktır.
Monitorumuzu orijinal haliyle kullanırken dikkat edeceğiniz ilk şey bilgisayarın BASIC yorumlayıcısının kafasının iyice karışmış olacağı. BASIC'te herhangi bir program satırı yazmaya kalkıştığınızda "?OUT OF MEMORY ERROR" mesajıyla karşılaşacaksınız. Halbuki, daha çok hafızanız var. Böyle bir durumdan kurtulmak için NEW emrini verin. Artık BASIC yorumlayıcısı düzene kavuşmuştur. Diyelim ki daha evvelden hafızada BASIC bir programınız var ve onu kaybetmek istemiyorsunuz, çünkü o programı da kullanacaksınız, hatta EDIT edeceksiniz. Böyle bir durumda monitor programımızı yükler yüklemez, SYS49152 emriyle çalıştırın. BASIC yorumlayıcısını sakinleştirmesi için şu emri verin:
.ED 0001,0000
Böylece BASIC programınız kurtulur. Monitor programını çağırdığınızda ilk yapılan iş BRK vektörünün monitor içine yönlendirilmesidir. Böylece yazacağınız programlarda BRK emri kullanarak monitor programına dönüşü sağlayabilirsiniz. Bunun birçok yararı var. Mesela programlarınızın ara işlemlerini kontrol etmek istiyorsunuz. Böyle yerlerde BRK emri eşsiz bir araç.
Gelelim monitorumuzun emirlerine:
Line-Assembler
Emrin şekli:
.A aaaa xxx yyyy
Örnek:
.A 9000 LDA $41
Burada yapılan işlem aaaa adresinde xxx emir ve yyyy operandından meydana çıkan 1, 2 veya 3 byte'lık satır yazmaktır. Satır assembler'imiz oldukça ilkeldir ve yalnızca bir disassembler'ın çıkaracağı açıklıktaki yazılımdan anlar. O yüzden sembol kullanma veya hesap yaptırma gibi lüks işlemleri aramayın. Basit programları yazıp, denemek için ideal bir araçtır, zaten monitor'un esas amacı da KByte'lık uzunluğunda programlar yazmanızdan çok yazılmış program üzerinde değişiklik yapma, deneme veya en basitinden öğrenme amacıyla kullanılır. Bu arada bir 'RESET SWITCH' edinmenizi öğütleriz. Çünkü makina dilinde ilk emekleme devrenizde aleti bol bol 'crash' edeceksiniz. Böylece durumlarda aletinizi RESET'lersiniz ve makina dili programınızı denemeye devam edersiniz. Çünkü RESET işlemi sırasında bilgisayarınızdaki makina dili programlar silinmemekte. Oysa aleti kapatıp açtığınızda ise tüm hafıza silinmekte.
Disassembler
Emrin şekli:
.D aaaa,bbbb
Örnek:
.D C000,CFFF
Bu emir verildiğinde aaaa adresinden bbbb adresine kadar bölgede
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 21
bulunan makina dili program LIST edilir. Şayet bitiş adresi vermezseniz, bunun için $FFFF değeri kullanılır ve program, beş satır LIST edilir. Aradaki duraklamalarda herhangi bir tuşa basmanız beklenir. RUN/STOP tuşuna basarsınız disassembler işlemi durur. Şayet arada anlaşılmayan bölgeler varsa bunlar ??? şeklinde LIST edilir.
Branch emirleri için hesaplama
Emrin şekli:
.B aaaa,bbbb
Örnek:
.B 1000,1029
Bu emir branch emirleri için gerekli olan relatif uzaklığı bildiren Byte'ı hesaplar. Sonucu "iki nokta üstüste" işaretiyle bildirilir. Şayet uzaklık bir Byte'a sığmıyorsa hata bildirilir.
Belli bir bölgeyi doldurma
Emrin şekli:
.F aaaa,bbbb,cc
Örnek:
.F 6000,6100,00
aaaa adresinden bbbb adresine kadar olan bölge cc byte'ı ile doldurulur.
Hafızaya byte veya string yazma
Emrin şekli:
.W aaaa, "string1",bb,cc,"string2",......
Örnek:
.W 8000,09,80,09,80,"CBM80"
aaaa'dan itibaren byte ve/veya string'ler yazılır. String'lerin tırnak içinde olması şarttır.
Hafıza içeriklerinin onaltılık olarak LIST edilmesi
Emrin şekli:
.M aaaa,bbbb
Örnek: .M C000,CFFF
Byte'lar onaltılık sistemde LIST edilir. Bitiş adresi verilmezse tek satır gösterilir. Her satır 8 Byte içeriği göstermekte, fakat PRINTER'a veya başka bir yere LIST ettiriyorsanız, tasarruf açısından her satıra 16 Byte içeriği gönderilir. LIST işlemi RUN/STOP'ta durdurulabilir. Ayrıca 1'i Listing'in CURSOR'u götürüp değişiklik yaparsanız gerçekten o Byte'lar değişir.
DATA satırları üretme
Emrin şekli:
.ED aaaa,bbbb
Örnek:
.ED B100,B200
Verilen bölgenin içeriği o sırada hafızada bulunan BASIC programın arkasına DATA satırları olarak eklenir.
Sayı sistemleri arasında hesaplama
Emrin şekli:
.C aaaa
Örnek:
.C FCE2
Burada verdiğiniz rakam diğer sayı sistemlerine çevrilerek yazılır. Verdiğiniz sayının sistemini belirtmek için önüne belirtici karakterler koymanız gerekmektedir. Bunlar onaltılık sayılar için $, onluk sayılar için I, ikili sayılar için % işaretleridir. Şayet hiçbir işaret koymazsanız onaltılık olduğu varsayılır. Aslında bu kuralı diğer emirler için de geçerlidir.
16 Bitlik basit işlemler
Emrin şekli:
.O aaaa,bbbb,c
Örnek:
.O 1000,03A7,+(=$13A7)
aaaa ile bbbb onaltı bitlik değerleri arasında c ile belirtilen işlem yapılır. c'nin alabileceği şekiller: +, -, *, / ve A,E,O'dur. A, AND (ve) işleminin, E, EXOR işleminin, O, OR (veya) işleminin kısaltılmışıdır.
Adres arama
Emrin şekli:
.H aaaa,bbbb,cccc,dddd
Örnek:
.H C000,CFFF,0000,00FF
aaaa ile bbbb arasında bulunan programda herhangi bir şekilde cccc ve dddd arası bölgenin adreslenip adreslenmediği aranır. Burada önemli olan aaaa'dan bbbb'ye kadar kesiksiz program olması gerektiğidir. Anlaşılmaz yere rastlandığında işlem kesilir ve hata bildirilir.
Byte ve string'leri arama
Emrin şekli:
.EH aaaa,bbbb,"string1",cc,dd,"string2",......
Örnek:
.EH A000,BFFF,"SYNTAX"
Parametre olarak verilen string ve byte dizisi, verilen bölgede aranır.
Hafıza bölgelerinin kaydırılması
Emrin şekli:
.T aaaa,bbbb,cccc,-
veya
.T aaaa,bbbb,cccc,+
Örnek:
.T C000,CFFF,6000,-
İlk durumda aaaa'dan bbbb'ye kadar olan bölge cccc'nin peşine kopya edilir. Öteki durumda bu bölge cccc'ye kadar olan bölgeye taşınır.
Taşınmış makina dili programların canlandırılması
Emrin şekli:
.ER aaaa,bbbb,cccc,dddd,eeee,-
(veya +)
Örnek:
.ER 6000,6FFF,C000,CFFF,6000-
aaaa ile bbbb arasında bulunan programın içindeki adreslemelerden cccc ve dddd arasına düşenler eeee'den sonra olacak biçimde değiştirilir. T emri ve ER emri için verilmiş örnekleri peşpeşe verirseniz $6000'da başlayan bir monitor programı elde edersiniz. Adres arama programı gibi hata mesajlarıyla karşılaşacaksınız, fakat bu örnekte bunların bir önemi olmadığını belirtelim.
Makina dili programa Byte insert etme
Emrin şekli:
.I aaaa,bbbb,cccc,dd
Örnek:
.I 1000,1080,1040,03
aaaa'dan bbbb'ye kadar olan bölgede cccc adresinden önce dd byte'lık bölge açılır ve burası NOP'la doldurulur. Adreslerin uydurulması kendiliğinden yapılır.
Makina dili programdan byte delete etme
Emrin şekli:
.K aaaa,bbbb,cccc,dd
Örnek:
.K 1000,1080,1040,03
I emriyle aynı özellikleri taşıyan bu emirde yapılan işlem tam tersidir.
Makina dili programı başlatma
Emrin şekli:
.G aaaa
Örnek:
.G FCE2 (dikkat aleti reset'ler!)
aaaa'da başlayan makina dili program çağrılır.
Register'leri gösterme
Emrin şekli:
.R
Örnek:
.R
Ana işlem ünitesinin registerleri gösterilir. Üstüne gidip değişiklik yapılırsa gerçekten de değişim gerçekleşir. Buradaki register değerleri diğer programlardan monitora veya monitordan diğer programlara geçerken kullanılır.
Makina dili programları saklama
Emrin şekli:
.S"PROGRAM ADI",aa,bbbb,cccc
Örnek:
.S"MON2",08,6000,7000
bbbb'den cccc'ye kadar olan bölge (cccc hariç!!! aman dikkat!) aa numaralı alete belirtilen program adıyla