Commodore sayı 43, sayfa 25

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 25

Bu şekilde komutumuz 3 bayt işgal etmektedir ve bir sonraki serbest bellek adresi $1505'dir. Basic ile ilgilenmiş olanlar 01'in A harfinin ekran kodu olduğunu bilirler. Ekranın sol üst köşesinde beliren A harfini istesek başka bir renge de boyayabiliriz. Ekran renk kodları ise C-64'ün belleğinde $D800 adresinden itibaren yer almaktadır. Bunun için programımıza aşağıdaki satırları ekleyelim:

A 1505 LDA # $00 A 1507 STA $ D800

Bundan sonra yazacağımız satır $150A adresinde olmalıdır. Bu sefer programımızı bitirmek için BRK komutunu kullanmayacağız, zira her makine dili programın bitiminde register göstergesiyle karşılaşmak istenilmez. Bunun için yeni bir komut kullanacağız:

RTS “Return from Subroutine” veya alt programdan dönüş anlamına gelmektedir. Bu komut kullanılırken ardında herhangi bir parametre yer almaz. Bilgisayar RTS komutu kullanıldığında gideceği adresi Stack-Pointer'dan öğrenir. Şu satırla programımızı bitirelim:

A ISOA RTS

Monitörden çıkmamışsak G 1500 ile, Basic'e dönmüşsek programı SYS 5376 ile çalıştıralım. Ekranın sağ üst köşesinde siyah bir A harfi gözükecektir.

Bu programı doğrudan Basic kullanarak da yazabiliriz, fakat teker teker her komutun desimal karşılığını hesaplamalıyız. Sonuçta aşağıdaki Basic program ortaya çıkacaktır.

10 FOR TO 5386: READ A: POKE I,A: NEXT I: END

20 DATA 169,1,141,0,4,169,0,141,0,216,96 Dört yeni komut:

LDA ve STA'nın kombinasyonu Basic'teki POKE komutuna karşılık gelmektedir. Assembler'da bir sayı doğrudan doğruya bir bayta yazılamaz, bu iş için her seferinde akümülatör kullanılmalıdır. Makine dilinde akümülatörle aynı görevi gören iki register vardır: X ve Y registerleri. Bunlar için ayrıca LDX (X registerini yükle), STX (X registerini boşalt), LDY (Y registerini doldur), STY (Y registerini boşalt) komutları mevcuttur. Aşağıdaki programda şu ana kadar tanıştığımız tüm komutlar kullanılmıştır.

A 1500 LDA # $01 A 1502 LDX # $00 A 1504 LDY #$02 A 1506 STA $0400 A 1509 STX $D800 A 1S0C STY $0401 A 150F STX $D801 A 1512 STA $0402 A 1515 STX $D802 A 1515 RTS

Beklendiği gibi bu program ekranın sağ üst köşesine “ABA” harflerini basacaktır. Burada X register STX komutu ile üç defa okunmuştur. Şu ana dek LDA komutunu sadece dolaysız adresleme yöntemi ile kullandık. Şimdi isterseniz akümülatörü STA komutundan tanıdığımız mutlak adresleme yöntemi ile yükleyelim.

A 1518 LDA $D800

Bu şekilde $D800 adresinde kayıtlı olan değer akümülatöre yüklenecektir. Bu değer $1509'da sıfır değeri almıştır. Yine devam edelim:

A 151B STA $0403 A STX $D803 A 1521 RTS

SYS 5376 ile programı çalıştırdığınızda ekranın sol üst köşesinde daha önce beliren üç harfin yanına bir “Ğ” işareti eklenecektir. LDA komutunu dolaysız adresleme yöntemi ile kullandığımızda (örneğin LDA #$01) hafızada 2 bayt işgal ettiğini daha önce belirtmiştik. Mutlak adresleme yöntemi kullanıldığında ise (örneğin LDA $D800) bu iş için 3 bayt harcanacaktır. Zaten hemen hemen tüm monitör programları bir Assembler satırı yazılıp RETURN'e basıldığında o satırın onaltılık sayı sistemindeki kodları hemen yanında gösterilir. Örneğin LDA #$01 ve LDA $D800 komutları şu şekilde gösterilecektir:

1500 A9 01 LDA $ $01 İSI8$ADOOD8 — LDA $D800 Her satırın başındaki ilk sayı LDA

komutuna aittir, fakat görüldüğü gibi

“ bunlar farklıdır. Buradan şu sonucu çıkarabiliriz: Onaltılık sistemdeki bir kod hem makine dilinde bir komutu, hem de kullanılan adresleme yöntemini belirtmektedir. Aynı şekilde LDX ve LDY için de dolaysız ve mutlak adresleme yöntemleri mevcuttur. STX ve STY için dolaysız adresleme kullanılmaz. Şu ana dek öğrendiğimiz komutların adresleme yöntemleri ve onaltılık sistemdeki kodları Resim 1'deki tabloda gösterilmiştir. Tablonun son sütununda her komutun statüs registerinde etkilediği göstergeler (flag) belirtilmiştir. Sondan bir önceki sütunda ise her komutun yorumlanabilmesi için harcanan süre yer almaktadır. Burada birim olarak çevrim (cycle) sayısı kullanılmıştır. Her bir çevrimin 1 mikrosaniye olduğu düşünülürse yukarıdaki programımız için 48 mikrosaniye sürecektir. Aynı programın Basic karşılığı ise aşağı yukarı 100 kat fazla zaman (0,05 saniye) harcayacaktır.

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