64'ler sayı 15, sayfa 24

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 24

MAKİNE KODUNA GİRİŞ Şimdi assembler programını yazdın, RUN et. Ekranda menü olması lazım. 1 tuşuna bas. Ekranda “BAŞLANGIÇ ADRESİ” göreceksin. Bunu cevap olarak C000 yaz ve RETURN'e bas. Şu anda Assembly dili, C000 mevkiine girme pozisyonundasın. Dilinde satır no'ları yok, bunların yerine adresler vardı. C00 bir adrestir. Şu anda Assembly dili bilmiyorsun, bunun için X tuşuna bas ve RETURN'le. Bu seni ana menüye geri gön-

derecektir.

Şimdi 2 tuşuna bas. Ekranda “BAŞLANGIÇ ADRESİ” göreceksin. Bu sefer F301 diye cevap ver. Şimdi kompüter F301 adresinden başlamak üzere, ileriye doğru (F301, F302 vs.) bilgileri ekrana print edecek. Nelerin print edildiğini şu anda anlaman gerekmiyor. Sonra anlıyacaksın. Print'i durdurmak için SPACE tuşuna bas ve öyle tut. Şimdi X tuşuna bas. Tekrar ana menüye döneceksin. Şimdi 7 tuşuna bas. Bu sefer “CODE'UN ADRESİ” göreceksin, FFD2 yaz. Şimdi kompüter FFD2 adresindeki Assembly dilini RUN edecek ve ekrana bazı rakam ve karakterler yazacak. Bu karakterler bir sonraki bölümde incelenecek. Herhangi bir tuşa bas, ana menüye döneceksin. Bundan sonra 8 tuşuna bas ve D tuşuna bas. Bu decimal rakamları girmenizi sağlar, kompüter bunu hexadecimal'e çevirir. Şimdi yine 8 tuşuna bas ve arkasından H tuşuna bas. Şimdi hexadecimal rakam gir, kompüter bunları decimal'e çevirecek. Eğer ana menüye dönmek istiyorsan X tuşuna bas. REGİSTER'LERİ YÜKLEMEK Commodore 64'ün Assembly dilinde 3 ana Register'ı vardır. Bu Register'lar değişken olarak düşünülebilirler. Bunlar: 1) Accumulator (A) 2) X Register 3) Y Register BASIC değişkenlerinin tersine, değişkenler 0-255 (0-FF-Hex.) arasındadır. Register'ı bir değere eşitlemek için, bu değeri yüklemeliyiz. Örnek: Basic'te A'nın değeri 55 ise A=55 yazabiliriz. Assembly dilinde bu “LDA #$37” şeklindedir. Burada LDA 'load A' ve “#$” ise bu sonraki değer ile '$' ise hex. rakam demektir.

Dr. Ali Özçelik

A Register'a 37 yüklendi, 55 değil, çünkü rakamları hex. olarak vermeliyiz. 55 decimal = 37 hex. Register'lar değişik metodlar ile yüklenebilirler. Yukarıdaki metoda denir. Daha sonra diğer metodları da anlatacağım. Önce Assembly dili yazmak için Assembler'in nasıl kullanılacağını öğreneceğiz. Assembler'i yükle ve RUN et. 1 tuşuna bas, sonra C000 yaz, kodumuzu C000 adresi ve devamına koyacağız. Şimdi “LDA #$37” yaz ve RETURN'e bas. Cursor tekrar göründüğü zaman RTS yaz. RTS komutu kompüteri tekrar BASIC'e gönderir (RUN olurken). Assembly programının sonunda RTS'yi yazmazsan kompüter BASIC'e dönmez ve donar (CRASH). Yazdığın kod şu şekilde olmalıdır: C000 LDA #$37 C002 RTS Şimdi X tuşuna bas. Asıl menüye dönmelisin. 7 tuşuna bas. Ekranda “CODE'UN ADRESİ” yazısını görmelisin. C000 yaz ve RETURN tuşuna bas. Şimdi kompüter yazmış olduğun Assembly programını RUN edecek ve A register'ini 37 değeri ile yükleyecek. Kompüter Assembly programından döndükten sonra, Register'lerin değerini ekrana dökecek. AR—A Register XR—X Register YR—Y Register SP—Stack Pointer (sonra izah edilecek) Dikkat et A registerinde 37 değeri var, bunu biz yükledik. X ve Y registerleri de yukarıda olduğu şekilde aynı yöntemle yüklenir. Bazı örnekler: C000 LDX #$9A C002 RTS

50 C002 RTS İlk örnekte X registeri 9A ile ve ikinci örnekte Y registeri 50 değeri ile yüklenmiştir. ZERO PAGE: Bunu okumadan önce PEEK komutunu bilmeniz gerekiyor. (Bakınız Programcının El Kitabı sayfa 53) Bundan sonraki direktifler PEEK fonksiyonunu kapsar. Zero page 0-FF kadar verilen adreslere denir. BASIC'te A değişkenini C5 bölgesindeki değere biz eşitlemek istersek 'A=PEEK(197)' yazmalıyız. (197, C5'in decimal yazılışı). Assembly dilinde ise 'LDA $C5'. olmadığına dikkat et (rakam olmadığı için) İşte size A registerinin C5 bölgesindeki değerini gösteren demonstrasyon programı, Programı başlatmak için ana menüdeki 7 tuşuna basmayı unutma. C000 LDA $C5 C002 RTS X ve Y registerleride aynı şekilde yüklenebilir. C000 LDX $D7 C002 RTS C000 LDY $03 C002 RTS Birinci örnekte X registeri D7 ve ikinci örnekte Y registeri 03 ile yüklenmiştir. İNDEXED ADDRESSING (ZERO PAGE): BASIC'te A değişkenini 45+X bölgesine eşitlemek istersen 'A=PEEK(45+X)' yazmalısın. Assembly dilinde karşılığı 'LDA $45,X' şeklindedir. İşte bunu yapacak program: LDA $45,X C002 RTS Bu örnekte eğer X=10 ise A registeri 45+10=55 bölgesindeki değerle yüklenecek. X registeri, Y registeri ile indexli olarak yüklenebilir. Fakat A registeri ile yüklenemez. Şimdiki örnekte X registeri 67 bölgesindeki değer ile yüklenecek, çünki 40+27=67: C000 LDY #$27 C002 LDX $40,Y C004 RTS Y registeride aynı şekilde yüklenebilir. Aşağıdaki programda Y registeri 03 bölgesindeki değeri yüklenir (1+2=3): LDX #$02 LDA $01,X C004 RTS ABSOLUTE ADDRESSING: Zero Page adreslemenin tersine (limitlidir), Absolute adreslemede FFFF kadar figür kullanabilirsin. 0286 bölgesi CURSOR'un halihazır rengini tayin eder. Cursor'un rengini bulmak için A registerine 0286 değerini yükleyebiliriz. İşte bunu yapacak program: C000 LDA $0286 C003 RTS Bu programı çalıştırdıktan sonra cursor'un rengi değişir. Cursor'un rengini değiştirdikçe bu değerinde değiştiğini göreceksin. ABSOLUTE INDEXED ADDRESSING: Bu aşağı yukarı Zero Page adresleme ile aynıdır. A register'i X ve Y register'larını index olarak kullanabilir. Commodore 64 de ekran, 0400 bölgesinden başlar. A registerini ekrandaki ilk karakter ile yüklemek için 'LDA $0400' yazmalısın. Eğer ekrandaki X'inci karakteri yüklemek istersek 'LDA $0400,X'

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