Bu sayfadaki yazılar
Sayfanın metni
Sayfa 46
Bu sayımızda yayınladığımız ve makina dili editörü ile yazdığınız bu monitor programı dışarıdan para ile satın alacağınız veya bir kitaptan yazabileceğiniz monitorlar kadar iş görebilecek bir programdır. 4K uzunluğunda olup 49152-53247 desimal ($C000 - $CFFF hex.) adreslerine yerleşmektedir. Hafızanın en üstüne yerleşmesinin sebebi, üzerinde çalışacağınız BASIC yada MAKİNA KODU ile yazılmış programlardan uzak kalması içindir. Bununla birlikte, daha ileride açıklanacağı gibi eğer istenirse herhangi bir adrese de taşınabilir. Programın $C000 adresine yerleşmesi sebebiyle herhangi bir Basic Pointer'i değiştirmek gerekmemektedir. Program kendini korumak için önce Pointer'in kendi adresine taşıp taşmadığını kontrol etmekte ve gerekirse Pointer'i daha aşağı bir adrese indirmektedir.
64'ler Mon. programının ayrıntılarına girmeden önce nasıl yazılıp yükleneceğini açıklayacağım. Önce Makina Dili Editörünü yükle ve çalıştır. Program adını 64'ler Mon. şeklinde yaz ve RETURN tuşuna bas. Başlangıç adresi olarak C000 yaz ve RETURN tuşuna bas. Bitiş adresini D000 yaz ve RETURN tuşuna bas. Programı yazdıktan sonra kaydet (Save)
Kaydettiğin programı tekrar yüklemek için:
| — Load"'64'ler Mon.”,8,1 Disket için
Mon.”,1,1 Kaset için
yaz ve RETURN tuşuna bas. Program yüklendikten sonra SYS 49152 yaz ve RETURN tuşuna bas. Ekranda 64'ler Mon. Y mesajı ve bir takım rakamlar göreceksin. Artık monitor çalışmaya hazırdır. 64'ler Mon programı yüklenip SYS 49152 yazıldığında normal ekran yazılım kolaylıklarının yanısıra iki özel fonk-
siyona daha kavuşuruz:
F1: Cursor'ın bulunduğu yerden satır sonuna doğru ekranı siler. F3: Cursor'un bulunduğu yerden başlamak üzere ekranın altına doğru ekranı siler. Komutlar tek bir (alfabetik harf komut karakteri) ve onu takip eden özel değişkenleriyle girilir. Her komutun çeşitli şekilleri ileride ayrıntılı şekilde anlatılmıştır. Kısaltmalar şöyledir: $sss dört rakamlı başlangıç adresi, eeee dört rakamlı bitiş adresi, dddd dört rakamlı gideceği adres, dd iki rakamlı DEVICE değeri (örnek 08 -disk drive-).
ver)
bb iki rakamlı bayt değeri
Herhangi bir komutta kullanılan yukarıdaki sayıların hepsi hexadesimal kabul edilmişlerdir ve $ işareti gerekmemektedir. Fakat desimal sayılarda başına ve sonunda birer nokta konularak da verilebilir. (Örneğin: D 2000 ile D. 8192. birbirlerine eşdeğerdir). Bütün komutlardaki biçim boşlukları da dahil olmak üzere dikkatle korunmalıdır. Her komutu alfabetik olarak ele alıp, çeşitli olanaklarını göstermeye çalışacağım. A ssss - Assembler'i başlatma modu. Program kendiliğinden ekrana > ssss yazıp size her satır için opcode ve operand yazmanıza olanak vermek üzere READY duruma geçer. Hiçbir şey yazılmadan bir satır program Assembly durumundan çıkar. Operand'ı hex veya Desimal girebilmemiz için önüne karakterin ASCII değerinden girersek bir apostrof ('), ekran değerinden girersek bir ünlem (!) koymak yeterli olacaktır. Bir dallanma komutunun (branch instruction) operand'ı işe yukarıdaki bu iki seçeneğin birisiyle belirtilebilir. Bu girilen değer ya tek bayt'lık bir dallanma parçasıdır veya iki bayt'lık kesin (absolut) varış adresidir. Çok kullanışlı komutlardan bir tanesi de 255'e kadar diledi-.
b
ğiniz sayıda NOP veya BRK komutunu, komutun ken-
disinden sonra sadece sayısını belirtmekle girebilirsiniz. Örneğin NOP 07 yazarak ardarda yedi NOP girebilirsi- niz. .A 1800 1800 LDX #03 1802 LDA ##!M 1804 STA. 1024., X 1807 LDA 1809 JSR FFD2 180C NOP 04 1810 DEX 1811 BNE 1802 1813 BEO 01 1815 BRK 1816 RTS 1817
V V V V
C ssss eeee dddd - Bu komut hafızanın ssss-eeee arasında kalan bölümünü dddd adresinden başlamak üzere daha yukarıya doğru karşılaştırarak farklı değerleri içeren adreslerin dökümünü yapar. Stop tuşuyla durur. D - En son referansı verilmiş adresten başlıyarak
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 47
Disassembling'e devam eder. D ssss - ssss adresinden başlıyarak hafıza sonuna kadar Disassembling'e devam eder. D ssss eeee - 'ssss' den eeee'ye kadar olan bölümü Disassembling eder. Disassembling sırasında, her satır tek tek görünüp herhangi bir tuşa örneğin SHIFT tuşuna basılıncaya kadar beklemede kalır. STOP tuşuna basılarak Disassembling sona erdirilir. Disassembling süresince JSR, JMP, Absolute ve Zero Page referanslarında, dallanma komutlarında varış adresi takip edilmek istenirse F tuşuna basılması yeterlidir. Eğer komut hafızadaki bir adresten referans almaktaysa örneğin LDA 3D78,X - F tuşu sadece O adresteki değeri verir fakat o adreste herhangi bir JSR, JMP veya dallanma komutu varsa onun akışını izler. R tuşuna basarak bir önceki Follow (izle) komutunun başlangıcına dönebilirsiniz. Follow döngüsü içiçe onaltı kez tekrarlanabilir. Eğer monitor programı geniş NOP yada BRK komut bloklarıyla karşılaşırsa (üç'ten fazla olmak kaydıyla) onların hepsini tek bir satırda birleştirir. Örneğin: .> 201D - 203F NOP E ssss - Komutu size ssss adresinden başlamak üzere hafızaya ASCII kodundan metin yazma olanağı sağlar. ASCII metin ve kontrol karakterleri klavyeden girilir. Ins. Del. tuşu son karakteri siler ve yerine boş bir bayt koyar. Bu konumdan stop tuşuna basarak çıkabilirsiniz. O zaman program size bir sonraki karakterin adresini verir. Böylece sonradan ek yapmak isterseniz hangi adresten başlıyacağını bilirsiniz. F ssss eeee bb bb - Bu komut verilen adres aralığında nitelikleri belirlenmiş 1-7 arası bayt'ın bütün “occurance” larını bulur. Bayt değeri yerine * * yazmakla es geçilebilir. Bayt'lar önüne bir (') apostrof yazarak karakterin ASCII değerinden de girilebilir. F ssss eeee bb bb bb - bb bb bb: Bul komutu bu şekliyle verilen aralığı tarıyarak bayt'ların occurance'larını ikinci aralıktaki bayt'ların occurance'larıyla değiştirir. Birinci komutta olduğu gibi * * ile es geçilmiş bayt'ın hafızadaki esas değeri değişmeden kalır. Not: Bütün MATCH'lerin adresleri ekrana dökülür. Birden fazla occurance varsa BUL komutu STOP tuşuyla zamanından önce kesilebilir. Örneğin: F 1000 17FF A9 18 20 * * 18 - ** ** * 19 Bu komut 18. sayfadaki bütün A9 18 dizilimleri bularak (yani LDA N JSR dizilimi) onları aynı sırayı koruyarak fakat A9 40 şeklinde (yani LDA N JMP biçimiyle) 19. sayfaya yerleştirir. G ssss - ssss adresinden makina kodunu çalıştırmaya başlar. G - Program Counter belirdiği adresten makina kodunu çalıştırmaya başlar. 64'ler mon.'a geçildiğinde IRQ, NMI vektörlerini, program counter'ı, Stack Pointer'ı, Accumulator'u, X, Y, ve Status'u muhafaza eder. G komutuna girildiğinde bütün bu yukardaki register'ları yerlerine koyar, ve belirtilen adresten Makina kodunu başlatır. Otomatik olarak da 64'ler mon. NMIV'i kendini gösterecek şekilde ve RESTORE'a basıldığında programı yarıda keserek tekrar 64'ler mon.'a döner. GN ssss ve GN: İkisi de yukardaki komut gibidir. Ne var ki bir makina kodu işlemesi sırasında BRK ile karşılaşıldığında bilgisayar kendiliğinden 64'ler mon.'a döner. Böylece bir programın hatalarını Check ederken rutin aralarına BRK yerleştirerek işinizi kolaylaştırabilirsiniz. H - Ondalıklı sayı n'nin heksadesimal değerini verir. Örneğin: .H 326 0146 | bb ssss eeee - Hafızanın ssss eeee adresleri arasında kalan değerleri bb değeri kadar arttırır. Heksadesimal bir değeri FF kadar arttırmak elbette bir eksiltme etkisi yapar. J ssss ya da J yada JN ssss JN - G gibidir. Farkı RTS ile biten subroutine içeren Stack'a 64'ler mon.'a dönmesi için bir return adresi yerleştirir. K - VIC chip'ini reset ederek tekrar orjinal değerlerini almasını sağlar. Ayrıca SID chip'inin tüm ses kanal anahtarlarını kapalı (off) duruma getirir. Görüldüğü gibi çok kullanışlı bir komuttur. Bir programı BRK yada RESTORE komutuyla kırdığınızda ve tanımlanabilir karakterler, HI-RES, ekran ve ses kaybolduğunda bu komutu kullanabilirsiniz. L - Herhangi bir programı teypten yükler. L “TEST” -(” ”) içinde adı yazılan programı teypten yükler. L “TEST 2” dd - Adı yazılan programı 01 durumunda teypten, dd- 08 durumunda da disketten yükler. L “TEST 3” dd ssss - öteleme (yeniden yerleştirilmiş yükleme) Adı yazılan programı normalde varış adresi ne olursa olsun ssss adresinden başlamak üzere yükler. M ssss - Hafızanın 8 bayt'ını ssss adresinden itibaren ekrana çıkarır: M ssss eeee - ssss'den eeee'ye kadar olan bayt'ları ekrana döker. Döküm herhangi bir tuşa basılarak yavaşlatılabilir. RUN/STOP'a basarak durdurulabilir. Bayt'ların ASCII karşılıkları ekranın sağ tarafına dökülür. Karşılığı olmayanlar ise bir nokta şeklinde belirir. Herhangi bir bayt normal ekran yazım yollarıyla değeri değiştirilerek, istenen değişiklik yapılabilir. N ssss eeee dddd - Yeniden yerleştirme. Dışardan ne kadar karışık görünürse görünsün büyük kolaylıklar getiren kullanımı rahat bir komuttur. Bu komut size bir programı yeni bir adrese yerleştirme olanağı verir ve hafızanın başka bir bölgesinde tüm referansları değiştirerek yeniden uygulama olanağı sağlar. Program tüm JSR, JMP, Absolute, Zero Page ve Branch (dallanma) referanslarını yeniden yerleştirir. Hatta bir dallanma referansı hafıza sınırı dışına taşarsa yada bir Zero Page referansı Absolute adres olursa, program bu durumu belirtir. Değişen her referans önce ekrana yansıyacak ve siz herhangi bir tuşa basıncaya kadar bekliyecektir. Yeniden yerleştirilen programın taranması sırasında rutin (döngü) geçersiz hale gelen bir opcode'a rastlarsa o bayt'ın adresini ve değerini verip sizin bir tuşa basmanızı bekler. Böyle yapmasının nedenine gelince program bazı dataları özgün referans kabul edip, istemiyerek data listesinde değişiklik yapabilir.