Bu sayfadaki yazılar
Sayfanın metni
Sayfa 11
Mutlak X İndeksli Adresleme : Bu modda belli bir taban adresine X registeri eklenerek bulunan yeni adresle işlem yapılır. Mesela taban adres $2000 olsun X registerinde ise $30 (desimal 48) bulunsun, işlem yaparken $2000 + $30 = $2030 adresi kullanılır. Örnek : LDA $3A00,X SBC $BACA,X DEC $EBEE,X Bu adresleme modundaki komutlar 3 bayt uzunluğundadır.
Mutlak Y İndeksli Adresleme : Yukarıdaki modun Y registerini kullanan şekli olarak tanımlayabiliriz. Mutlak X indeksli ve mutlak Y indeksli adresleme modlarını özellikle hafızada büyük veri transferleri sırasında ve döngü içinde adreslere sabit değer yüklerken kullanabilirsiniz.
Sıfırıncı Sayfa X İndeksli Adresleme : Bu mod Sıfırıncı Sayfa Adresleme moduna X registeri eklenerek kullanılır. Mutlak X indeksli adresleme modunun kısaltılmışı olarak düşünebilirsiniz.
Dolaylı İndeksli Adresleme : İşte geldik kullanımı biraz karışık olan bir adresleme moduna... Aslında çalışma mantığını bilirseniz çok rahat kullanırsınız. Bu mod sıfırıncı sayfada 2 ardışık (arka arkaya) adresle ve sadece Y registeriyle kullanılır. Bu moddaki komutların yazılışı KOMUT ($adres),Y şeklindedir.
Çalışma şekli şöyledir : İşlem yapacağınız bir taban adresini LOW BAYT-HIGH BAYT formatında (bkz: assembler-1) Sıfırıncı Sayfada arka arkaya gelen 2 adrese yerleştirin. Y registerine ise bir değer verin. Komut bu iki adreste bulunan değerlerin gösterdiği adrese Y'nin değerinin eklenmesiyle bulunan yeni adresi kullanarak işlem yapar. Komutunuz mesela LDA ($02),Y olsun. Daha önceden ise $C5A3 sayısını $A3 ve $C5 olarak $02 ve $03 adreslerine yükleyelim. Y registerinde de $12 (desimal 18) bulunsun. Bu durumda bizim komutumuz $02 ve $03 adreslerindeki değerlerin gösterdiği $C5A3 sayısına Y'deki $12 değerini ekleyerek bulunan $C5B5 adresindeki değeri aküye yükler. Yani aslında verdiğim örnek LDA $C5A3,Y komutunun değişik bir şeklidir. Aradaki tek fark LDA ($02),Y komutunun 2 bayt LDA $C5A3,Y komutunun 3 bayt sürmesidir.
Bu arada Dolaylı İndeksli komutları kullanırken Sıfırıncı Sayfada rastgele iki adresi kullanamazsınız. Çünkü işletim sistemi bu bölgeyi kendisi için kullanır ve bize kalan sadece $FB, $FC, $FD ve $FE adresleridir. Ben yazdığım programlarda $02 ve $03 adreslerini de kullanırım.
İndeksli Dolaylı Adresleme : En sona kalan bu mod ne yazık ki kullanımı oldukça dikkat isteyen ve benim şu ana kadar hiç kullanmadığım bir adresleme modudur. Üstteki mod sadece Y registeriyle kullanıldığı gibi bu modda sadece X registeriyle kullanılır.
Çalışma şeklini şöyle açıklayalım : Sıfırıncı Sayfada bir bayt olarak belirtilen adresten X ötedeki adreste ve onu izleyen adreste bulunan değerlerin gösterdiği adres işlem yapılacak yeni adrestir.
Örnek : Taban adresimiz $20 olsun. X registerinde $50, $70 nolu adreste $A5, $71 nolu adreste ise $85 olduğunu kabul edelim. Komutumuz ise LDA ($20,X) olsun. Bu durumda taban adres olan $20 sayısına X'in değeri olan $50 eklenir. Sonuç $70'tir. Daha sonra $70 (LOW BAYT) ve $71 (HIGH BAYT) nolu adreslerdeki değerlerin oluşturduğu sayı olan $85A5 nolu adresteki sayı Aküye yüklenir.
ŞARTLI DALLANMALAR Önce şartlı dallanmanın ne demek olduğunu açıklayalım. Program içinde yapılan bir aritmetiksel, mantıksal, arttırma, azaltma, karşılaştırma veya yükleme işleminde sonuca göre başka bir adrese dallanıp yani sıçrayıp programın akışını değiştirebilirsiniz. Daha genel bir ifadeyle programda o anda işlenmekte olan komut sonucunda eğer N, Z, C ve V flaglarından değişenler olursa, bu değişimlere göre program içinde sıçrama yapabilirsiniz. Şunu unutmayın: Flaglara göre yapılan sıçramalarda gideceğiniz yer çok uzakta olmamalıdır. Yazdığınız programlarda eğer uzak bir mesafeye sıçramaya çalışırsanız kullandığınız editör programı hata verecek ve hatanın hangi satır(lar)da olduğunu yazacaktır. Şartlı dallanmalarda, dallanma en fazla 127 bayt ileriye veya en fazla 128 bayt geriye olabilir. ALT PROGRAMLAR Alt program nedir? Önce tanımını yapalım. Bir program içinde farklı yerlerden çağrılan ve sadece belli işleri yapan ufak programcıklara alt program denir. Bir program yazmaya başladınız ve bazı yerlerde aynı işlemi yapan bölümler oluşmaya başladı. Bu durumda aynı işlemi yapan bölümü ayrı bir program olarak yazarsınız. Ana program içinde gerekli yerlerde JSR komutunu kullanarak alt programa sıçrarsınız, gerekli işlemler yapıldıktan sonra alt programın sonundaki RTS komutuyla ana programdaki alt programı çağıran komuttan bir sonraki komut işleme konulur ve ana program kaldığı yerden devam eder. Alt programları öyle yazmalısınız ki yazacağınız programlarda hazır halde olsun. Mesela bir intro yapmak ve bu intro da renk şeritleri olmasını istiyorsunuz. Önce renk şeritleri rutinini yazarsınız ve ana programda ilgili raster satır değerini vererek renk şeritleri rutinini çağırırsınız. Commodore 64'ün ROM'larında işinize yarayan birçok alt program mevcuttur. (İsterseniz alt rutin diyebilirsiniz. Bundan sonra hep alt rutin kelimelerini kullanacağız.) İşte birkaç hazır alt rutin adresi......
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 10
5. PC (Program Counter -Program Sayacı- ) : Program Sayacı işlemcinin o anda işlenmekte olan makina dili komutunun bulunduğu adresi gösterir ve sürekli değişir. Nedeni ise C64'ün işletim sisteminin sürekli çalışır durumda olmasıdır. PC’yi durdurmak için işlemcinin durdurulması gerekir. Mesela hatalı bir işlem yapıldığında C64 kilitlenirse işlemci durmuş demektir. Bu durumda işlemcinin resetlenmesi gerekir.
6. SP (Stack Pointer -Yığın Göstergeci- ) : Bu register, yığındaki ilk boş yerleşim yerinin adresini gösterir. Yığın (Stack) makina dili ile yazılmış programlarda geçici saklama yeri olarak kullanılır. Ayrıca ana programın ve JSR komutu ile çağrılan alt rutinlerden RTS komutu karşılaşınca geri döneceği adresi gösterir. Yığın ile işlem yapılırken dikkatli olun. Çünkü eksik bir komut bilgisayarın kilitlenmesine veya programın rastgele bir adresten itibaren çalışmasına sebep olabilir. Eksik işlem'den kastettiğim kullanılan her PHA komutuna karşılık bir PLA komutu kullanılmalıdır. Yığın LIFO (Last In First Out) prensibiyle çalışır. Yani yığına en son attığınız bir sayı yığından ilk önce alınır. Yığına bir sayı attığınızda, SP 1 azalır. Sayıyı yığından geri aldığınızda, SP 1 artar. Yığın dediğimiz bölge, C64'ün RAM'inde 256 ile 512 nolu adresler arasındaki bölgedir (512 hariç). Yığın göstergeci bu bölgedeki ilk boş yeri gösterir.
7. I/O PORT (Giriş/Çıkış Portu) : C64'ün hafızasındaki 0 ve 1 nolu adresler işlemcinin kendi içindedir. 0 nolu adres veri yön registeri olup 1 nolu adresteki verinin yönünü belirler. 1 nolu adres ise veri registeridir. Bu iki adres C64'ün hafıza düzenleme işleminde kullanılır. Böylece C64'ün bellek haritasındaki RAM-ROM-I/O bölgesi gibi birimler seçilebilir. Bu iki adresi bu sayıdaki “bellek haritası” bölümünde ayrıntılı olarak göreceğiz.
MAKİNA DİLİNDE NASIL PROGRAM YAZABİLİRİZ Makina dili programlarını hafızaya yüklediğinizde bu programları düzeltme imkanınız yoktur. Bu nedenle makina dili programları yazmak için genellikle ASSEMBLER EDİTÖR denilen programlar kullanılır. (Benim sürekli kullandığım TURBOASSEMBLER programıdır.)
Bu programlar makina dili komutlarının anlaşılması için, bir sürü sayı ile uğraşılması yerine, anlaşılması ve akılda kalması daha kolay "MNEMONIC" denilen kısaltılmış komut isimleri kullanmamızı sağlar. Kısaca makina dili programlarını "MNEMONIC" kullanarak yazmamızı sağlayan programlara "ASSEMBLER", bu işlemin tersini yapan, yani hafızadaki bir makina dili programını "MNEMONIC" şeklinde gösteren programlara da "DISASSEMBLER" denir.
Bu iki programdan başka içinde basit bir assembler/disassembler programı içeren ve çeşitli işlemler yapılmasını sağlayan - mesela hafızanın bir bölümünü save yapan veya belli bir sayıyla dolduran veya başka bir hafıza bölümüyle karşılaştıran vs. - yardımcı programlardan oluşan "UTILITY" programlarına ise "MONITOR" programı denir.
ADRESLEME MODLARI 6510 işlemcisi bize 8 çeşit adresleme modu sunmaktadır. Bazı komutlar bu modların hepsini kullanır, bazı komutlar ise daha az adresleme moduna sahiptir. Adresleme modları yazdığımız programların daha kısa olmasını sağlar.
Dolaysız Adresleme : Bu adresleme modunda A, X ve Y registerlerine doğrudan bir değer yüklenir. Bu adresleme modunu kullanırken #$ işaretlerini kullanacağız.
Örnek : LDA #$00 LDX #$3A LDY #$FF Bu adresleme modundaki komutlar 2 bayt uzunluğundadõr.
Sıfırıncı Sayfa Adresleme : Bu mod, bellek haritasında 0 ile 255 (dahil) arasındaki adresler ile işlem yaparken kullanılır. Dolaysız adresleme modu haricindeki adresleme modları için $ işaretini kullanacağız.
Örnek : LDA $02 ASL $FB STX $01 Bu adresleme modundaki komutlar 2 bayt uzunluğundadır.
Mutlak Adresleme : Mutlak Adresleme modunu Sıfırıncı Sayfa Adresleme modunun genişletilmişi olarak düşünün. Yani Sıfırıncı Sayfa Adresleme modu aslında Mutlak Adresleme Modunun yüksek adresi gösteren baytının her zaman 0 olan halidir.
Örnek : INC $DEDE ROR $CEFA ADC $BABA Bu adresleme modundaki komutlar 3 bayt uzunluğundadır.