Commodore sayı 18, sayfa 60

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 60

AYHAN KALAYLIOĞLU

6. MAKİNE DİLİNDE PROGRAMLAMA

COMMODORE 64'te makine dilini kullandırmayı gerektiren başlıca konu, yüksek çözünürlüklü grafiklerin yaratılması olayı. Bu bölümde, biz bu sorunları önce BASIC'te formüle edip, daha sonra makine diline çevirmeyi deneyeceğiz. Bu arada ana işlem ünitesinin yapabileceklerinin hepsini keşfedip, yeri gelince kullanmaya çalışacağız.

Grafik işlemlerini yürütmek üzere yazılmış BASIC programlar genelde birbirinin içine geçmiş PEEK ve POKE komutları yığını şeklindedir. Bilhassa bu tip programları makine diline çevirirken bu dilin asıl gücünü keşfedeceğiz. Bundan başka, her iki dilin avantajlı yönlerinden aynı anda yararlanmak için değişik yollar deneyeceğiz. Böylece yarı makine dili, yarı BASIC yapısına benzer programlarımız olacak. Böylece, oldukça kısa bir zamanda oldukça güçlü programlar elde edebileceğiz.

Örnek programımıza geçmeden önce makine dili programların BASIC'ten nasıl kullanıldığını ve parametrelerin nasıl gönderildiğini görelim. Makine dilindeki altprogramların çağrılması için SYS komutunu kullanacağız. Bu komutun arkasından gelen rakam, yürütülmek istenen altprogramın bellekte bulunduğu başlangıç adresidir. Makine dilindeki altprogram RTS (return from subroutine) komutu ile bittiğinde kontrol gene BASIC yorumlayıcısına geçer. Böylece BASIC'teki program kaldığı yerden yürümeye devam eder. Diyelim ki makine dilindeki altprogramımızın sabit bir görevi var, örneğin ekranı silmek, böyle bir durumda herhangi bir parametreye gereksi-

60 nim duyulmayacak ve SYS komutu kendi başına yeterli olacaktır. Diyelim ki grafik ekranına bir nokta koyan bir altprogramı çağıracağız; böyle bir durumda tabii ki noktanın nereye konacağını bildiren bilgiler, makine diline geçmesi gereken parametrelerimiz olacaktır. Bu parametreleri göndermek için birçok yöntem vardır. Bunlardan ilki ve en basiti, parametreleri peşpeşe gelen hafıza birimlerine saklamaktır. Makine dilindeki altprogram, daha sonra bu parametreleri o bölgeden alır. Bizim örneğimizde de aynı yöntemi kullanacağız. Şöyle ki: Yatay koordinatı bir hafıza birimine, dikey koordinatı bir diğer hafıza birimine saklayacağız. BASIC'te tüm bu işlemi yapmak için iki adet POKE komutuna ihtiyacımız olacak. Makine dili programımız yürürken bu parametreleri o adreslerden alıp kullanacak. BASIC yorumlayıcımız bize bir olanak daha sağlıyor. Bu olanak, BASIC'ten ana işlem ünitesinin registerlerine hitap etmemizi sağlıyor. Tabii, bu olay doğrudan gerçekleşemeyeceği için, ara değerleri saklayacak bir bölge olması gerek değil mi? Doğru, bu iş için dört hafıza elemanı ayrılmış. SYS komutu ile bir programı çağırdığımızda, altprogram çağırılmadan önce ana işlem ünitesinin registerleri bu bölgedeki değerlerle yüklenir. Bu hafıza birimlerinin adresleri ve yüklendikleri registerler şunlardır:

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