Bu sayfadaki yazılar
Sayfanın metni
Sayfa 48
Komutun değişkenliklerine gelince ilk ssss - eeee adres aralığını ikinci ssss - eeee aralığına taşımak istediğinizde, önce ikinci dilimdekilere dddd başlamak üzere yukarıya taşır, sonra ilk dilimi ikinci aralığa yerleştirir.
Komutun kullanılımını göstermek için 64'ler mon.'u hafızanın başka bir bölümüne Normal durumda 64'ler mon. $C000 - $CFFF daha ilerde anlatacağımız TAŞIMA komutu ile önce doğru bölüme yerleştirmemiz gerekir. T C000 CFFF 6000 64'ler mon.'un son üç sayfası 3 x 256 bayt, sadece DATA'dan oluştuğundan sadece ilk on üç sayfayı taşıyacağınız bölmeye yerleştirmek kafidir. N 6000 6D00 C000 CFFF 6000 Bu komut yeni programın 13 sayfasını tarıyarak eski programın referanslarını gerektiği gibi değiştirmektedir. Bir başka örnek bu komutun normal kullanımını iyice açıklamaya yardımcı olacaktır. adresleri arasında bir programınız olduğunu ve $1300 adresine 16 bayt yerleştirmek istediğimizi düşünelim. Bu son 256 bayt'ın hafızada daha ileriye kaydırılması demektir. Bunu şöyle yapabiliriz; N 1000 13FF 1300 13FF 1310 T 1300 13FF 1310 y Değiştirmek istediği her referansı ekrana dökmesi, hafızanın herhangi bir bölgesindeki referanslara bakmak için 64'ler mon.'u kullanabileceğinizi gösterir. Örneğin 0 ve 1 deki herhangi bir referansı bulmak için aşağıdaki komutu yazmak yetecektir: N ssss eeee 0000 0001 0000. O - Güvenlik nedeniyle, kontrol 64'ler mon.'a geçtiğinde yada herhangi bir komut onunla birlikte uygulandığında, 64'ler mon. kendiliğinden KERNAL ROM'a bağlanıp INTERRUPT vektörünü, normal INTERRUPT ROUTINE'ine RESET eder. Bununla birlikte, herhangi bir nedenden dolayı, örneğin 64'ler mon.'un içinden çalışan bir müzik programı istenmezse O komutuyla korumayı sağlıyabilirsiniz. Aç-Kapa (On, Off) anahtarı gibi çalışır. P sayacının belirteceği adresten başlamak üzere bir programı işleme koyar. P ssss - Bir programı ssss adresinden itibaren işleme koyar. Bu komut bir makina kodu programı, 64'ler mon.'dan yavaşlatılmış işleyişini izlemenize olanak verir. Her komut uygulandıkça, önce komutun kendisi ve çeşitli registerlerin o andaki durumları ekrana dökülür. Ve bir tuşa yada SHIFT tuşuna basılıncaya kadar bekler. SHIFT tuşuna bastığınızda program normal hızıyla çalışmaya başlar. Bu komut rutinlerinizdeki hataları ayıklamak için çok iyi bir yol gibi görünmekle birlikte, ayrıca da yeni başlayan biri içinde komutların çeşitli register, bilhassa STATUS REGISTER üzerine etkilerini incelemesine olanak tanıdığı için çok kullanışlıdır. Ayrıca programın işleyişi için hangi tuşlara basmanız gerektiğini de göstermektedir. Eğer bir dallanma komutu
(branch instruction) ekrana dökmekteyse R tuşuna basarken, bu uzun beklemeli LOOP'lar nedeniyle zaman kaybetmenizi önler. İşlem rutini bir JSR komutuyla karşılaştığında çeşitli seçenekler vardır. Subroutine adresi KERNAL ROM'da ise ($F000 - $FFFF) routine kendiliğinden işleme girer; Tabii siz ayrıntılarıyla incelemek için bir tuşa basmadıysanız. Eğer subroutine adresi KERNAL sınırları dışındaysa, program sizin routine'in her komutunun işlemesini istediğinizi varsayar. Eğer bu komutların hızlı akışını sağlamak isterseniz D tuşuna basmanız gerekmektedir. Register'lerin dökümü ve DISASSEMBLING işlemi (programın yürüyüşünü) çok yavaşlatırsa yada printing sırasında iki program birbiriyle karıştırırsa S tuşuna basarak kurtulabilirsiniz. Bu durumda bile program bir tuşa yada SHIFT tuşuna basmanızı bekleyecektir. SHIFT tuşuna basarak akışı hızlandırsanız bile yine de normal makina kodu hızından 500 kez daha yavaş olarak çalışacaktır. Tekrar S tuşuna basarak komutların dökümünü başlatabilirsiniz. C ssss eeee ssss eeee dddd - Bu komut tek bir fark dışında N komutuyla tamı tamına aynı işi yapar. Normal olarak yeniden yerleştirme rutin bulduğu tüm geçersiz opcode'ların dökümünü yapar. Bununla birlikte, bu rutini sadece hafızanın bir bölümündeki referansları bulmak için kullanıyorsanız ve programınızda geniş aralıklarla DATA blokları varsa, tüm geçersiz bayt'ların tek tek bulunması ve ekrana dökümü çok zaman alır. Oysa C komutu sadece bulunduğu referansları yazar. R - Bu komut, Accumulator'un, X register'in, Y register'in, Stack Pointer'in, Program Counter'in, Status Register'in, IRQ vektörünün ve NMI vektörünün bulunduğu durumları ekrana döker. Ayrıca Status Register hangi FLAG'in açılmış olduğunu göstermek için genişletilmiş olarak ekrana dökülür. Dökümü yapılan değerlerin hepsi normal ekran yazım yollarıyla değiştirilebilirler ve yeni değerler G, J yada P komutları kullanıldığında işleme girer. S “Dosya Adı” dd ssss eeee yada S “Dosya Adı” dd ssss eeee bk Bu bir bölümünü diskete yada teybe kaydetmenize olanak sağlar. Bölüm sonu adresi (eeee) kaydedilecek son bayt'tan bir fazla yazılmalıdır. İkinci kayıt seçeneği ise sıfırdan farklı durumlarda kullanabilmeniz içindir. İkinci adres BASIC içinde geçerlidir. T ssss eeee dddd - Hafızanın ssss - eeee adresleri arasında kalan bölümünü dddd'den başlamak üzere başka bir adrese taşır. U b... -Birden dörde kadar rakamlı hexadesimal sayıyı ondalıklı sayıya çevirir. V yada V “Dosya Adı” yada V “Dosya Adı” dd yada V “Dosya Adı” dd ssss - Bir programı VERIFY eder. Load'daki seçenekler gibidir. W bb ssss eeee - Hafızanın bu adresleri arasında bildireceğiniz bir bayt'ı yazar (hafızaya doldurur). X - BASIC'e geri döndürür. 1 - Bu komut sırasıyla DISASSEMBLING ettiğiniz programı yada hafızayı ekran yerine PRINTER'daki kağıda döker. Komut kapatma düğmesi gibi (On-Off) çalışır. İkinci kez bastığınızda normal hale yani ekrana döküm yapmaya başlar. Bu rutin PRINTER DEVICE sayısının dört ve ikinci adresinin de bir olduğunu varsayar. PROGRAM : MON Bununla birlikte, sizin PRINTER'iniz bu komutlara uymuyorsa $CCE6 adresindeki LDX #04 ve $CCF7 adresindeki LDY #01 komutlarını PRINTER'ınızın DEVICE sayısına ve ikinci adresine uygun olarak değiştirmeniz gerekir. Örneğin: 1520 PRINTER/PLOTTER kullanıyorsanız LDX #06 ve LDY #00 şeklinde bir değişiklik
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 49
08 48 BA 48 98 dö AZ OE dü A0 EZ 20 BÜ Üs AD 50 Co BD 16 OZ AE 5D CO GE öz 03 E4 38 BO ÖD E? ZF BO
yapmalısınız. Coz0 : Ol CA 85 37 BE S3 Bö 38 2028 : Be 34 AZ OZ BE 56 ÖZ 20 AD
iş Tecrübeli programcılar için de birkaç söz ederek yazımızı bitirelim. 64'ler mon., BASIC ROM'dan tamamiyle bağımsız olduğu için BASIC ROM'u gözardı edebilirsiniz ama BASIC ROM iptal edildikten sonra da 64'ler mon.'dan çıkış yapmaya kalkmayın. 64'ler mon. tüm komutları için ZERO PAGE adreslerini yoğun bir şekilde kullanmaktadır, bu nedenle sayacağımız aşağıdaki adresler programlarınızda tarafınızdan kullanılmaması gerekmektedir:
AZ 1F 68 AB â8 AR 68 20 C5 Ci 68 85 ZA 68 Bo 38 ES 1F 8D 50 OZ E? öf 00 BD Si OZ BA Bö 20 50 69 Ci 20 ZE AP 15 85 EZ BE DO 24 40 CO A? ZA DA 85 19 A9 00 BE 1A AZ SA
rekmektedir: A5 SA CF? OZ DO FF AD 75 Ş19-Ş20, Ş26-Ş2A, ŞAB-ŞAA, — CÜZÜ BD DO Fd AS FO Fİ 09? ŞBO-ŞB1 ve Ş0240-Ş0256 Co78 20 ZE Fi C9 OZ DO EŞ Ağ IF İyi çalışmalar, bol programlı günler 00 BE 85 A? BE AB Dr. Ali Özçelik ga YA 20 EF CE 78 AZ Ol 78 Doso BD Ca 9D BF 02 CA 10 ©B F7 A5 BER CF OZ Bö iZ 9
09 Od AA Bö Câ AF 17 1D 9D 76 OZ CA DO FA Bö 9ü BR 58 20 BB CO dü 7F Dü 74 /20 ES FO C2 2E Fo EF
Not: Assembler dilinde satırın amacı, yapılacak işlemi (komut) belirtmek ve bu komutun yerine gelmesi için gerekli DATA ve ADRES'i belirtmektir. Komut kısmına “operatör” DATA veya adres kısmına ise
“'operand”” denir. CoCo : F7 C? 20 FO FE 78 AZ 48 E0 Device 1- kaset CoCce : A0 EB BC 90 OZ BE SBF OZ GA Device 24 Modem CoDO : 58 C9 43 90 OA CD CO CE 90 Device 3—- Ekran : BO OS E9 3D AA DO ÖZ AZ BE Device Printer COBO : 04 DD OD CD DO 24 Ge BE ZF Device 8-11— Disk (veri) COEB : BA AA BD CE öD 5SC SF Divice 15— Disk (komut) * COFO : CO AB ED ÖR CE AA 29 BE CoOFB : 6D 5D 48 98 48 BA 10 â3 C4 20 EA Ül 40 Z2ü » BE Ci CA 10 D4 EB Ba 17 0? Cii0 * AA A? O? BS JA AC OZ A? BÜ C118 : 18 Dİ 19 DO 68 CE 27 : Bö 10 Fe BA 20 37 Ci E& “50 €128 : AŞ JA CP? DO 90 AF S5 C130 3F 20 SF CE 4€ 7F Tü 60 Gü Ci38 : 19. 00 78 AE FE Ca AC FF : 24 BB 10 Od AE SA ÖZ 28 CidB : AC 55 OZ SE 18 03 Bü 19 EF C150 1-035 AE 52 02 AC 53 02 BE CA : 14 OZ BC 15 OZ Ad 03 : 29 (AS BD 8D 00 DÜ AS ZA
AB 18 05 AC 19 05 EL FF FE DO 05 FF Ca BE 5d OE BE 55 05 Ez 14 8D 02 AD 15 OZ AB
C1B8 BD 53 OZ 7B AZ 47 A0 FE 55 BE 18 05 BC 19 OZ AZ FF Bİ BE 07 DC EB SE 05 DC 20 Sa OZ 30