NightNetwork - yazılım, yazın, verim vs.

1.9. Neler Oluyor:

Öncelikle prog1.a64'ü inceleyelim. Yorum olmayan ilk satırda şu yazıyor:

!to "out.prg"

Evet tahmin ettiğiniz üzere bu komut çıkış dosyasını belirtiyor. Yani bu komut aslında bir makine dili komutu değil. Bu programcının ACME aracını kullanırken ACMEye bazı yönlendirmaler yapmak için kullandığı komutlardan biri. ACME komutları kodunuzun içinde çeşitli yerlerde kullanacağınız komutlar. Bunların biri hariç hepsi ! ile başlarlar. Bu komutların detaylı bilgilerini çapraz geliştirme yazı dizisinde bulacaksınız. Şimdilik bilmeniz gereken !to ve * komutları.

Hemen arkasından gelen CERCEVE_RENGI satırını birazdan açıklayacağız. Şimdilik bir sonraki satıra bakalım:

*=$c000

bu satırda da ACMEye programımızı C64ün belleğinde hangi adrese yerleştireceğini söylemiş oluyoruz. $c000 - $cfff adres bölgesi BASIC belleğinin dışında kalan bir yer olduğu için makine dilinde programlamaya yeni başlayanlar için en ideal çalışma alanıdır. o yüzden biz de programlarımızı o bölgeye yerleştireceğiz.

Sonraki satırda ise etiket kullanımını görüyoruz:

start:

Burada ACME bellekte makine dili kodunu oluştururken bu satıra geldiği esnada yerleştirme yapacağı adresin ne olduğuna bakar. Biz az önce * komutu ile adresi $c000 yapmıştık. ACME bu adrese etiketteki ismi verir. yani artık ?start? kelimesi $c000'a eşit olmuş olur. Programın diğer satırlarında start geçerse ACME otomatik olarak start yerine $c000 adresini koyacak.

Etiketler kullanarak programcılar bellek adreslerini bilmeye gerek olmadan ve bu esnada sık yapılan dikkatsizlik hatalarının çoğundan kurtularak program yazabilirler. Özellikle dallanma komutlarında adreslere etiket koymak hem programı daha anlaşılır kılar hem de pekçok olası hatayı önler.

Etiketler ayrıca her yerde her değere tanımlanabilir. Az önce atladığımız satıra şimdi bakabiliriz. Bu satırda böyle bir etiket atama işlemini görüyoruz:

CERCEVE_RENGI=$d020

start nasıl $c000'a eşitlendiyse CERCEVE_RENGI isimli etiket de $d020'ye eşlenmiş oldu. Bu teknik de özellikle bellekteki değişkenlerin veya register adreslerinin unutulmasına karşın kolay hatırlanır isimlerle erişilmesini sağlar.

Etiketlerle ilgili çok önemli bir avantaj da böyle yazılan programların bellekteki yerleşiminin istendiğinde programcı tarafından kolayca değiştirilebilmesidir (buna relokasyon denir). Etiketlerle ilgili daha detaylı bilgiyi bu kursun sonundaki ekler bölümünde bulabilirsiniz.

C64ün grafik işlerinden sorumlu çipi olan VIC-II bir grup registera sahiptir. Bu registerlara zaman içinde detaylı olarak değineceğiz. Şimdilik ilk kullanacağımız register $d020 adresinde bulunuyor. Bu register ekranın çerçeve rengini kontrol eder. C64ün desteklediği 16 renkten birinin numarasını bu registere yazdığınızda çerçeve o renkte çizilir. Renkkodlarına da daha sonra döneceğiz ama şu an için 0 nolu rengin siyah 1 nolu rengin de beyaz olduğunu bilin yeter.

Böylece sonraki satırlarda ne olduğunu artık tahmin edebiliyorsunuzdur:

lda# 0
      sta CERCEVE_RENGI

aslında $c000 adresine yerleşen ilk komutlar bunlar. Bu komutlar önce akümülatöre 0 değeri yükleyip ardından cerceve rengi registerine bu değeri yazıyor.

lda# 1
      sta CERCEVE_RENGİ

hemen ardından aynı registere bu sefer de 1 degerini yazıyoruz.

jmp start

ve arkasından da başa dönüyoruz. Yani programımız hic durmadan çerçeve rengini siyah ile beyaz arasında sürekli değiştiriyor.

Böylece en temel makine dili bilgileri ile tanışmış oldunuz. İlk programınızı da yazdınız. Şimdi çerçeve rengiregisterine yüklenen değerleri 0 ve 1 den farklı rakamlarla deneyip oynayabilir ve renk kodlarını keşfedebilirsiniz. Yazının gelecek bölümünde yeni komutlar öğrenecek ve daha ilginç programlar yazabileceksiniz.

NightNetwork - 2009