Commodore sayı 75, sayfa 18

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 18

X değerini bir kere sola kaydırmak bu işlemi yapacak gibi görünebilir, ama sola kaydırmadan önce ilk iki biti temizlemeliyiz, çünkü sağa kaydırma işlemi sırasında ilk iki bitin değeri sıfırlanacaktır. Bu yüzden önce AND $FC komutuyla ilk iki biti sıfırlamamız, daha sonra ASL komutu yardımıyla ikiye çarpmalıyız. Şu anda çok dikkatli olmalıyız, çünkü carry flag'inde son hesabın en yüksek değerlikli biti var. Yapacağımız işlem carry'yi etkilerse bu bilgiyi kolaylıkla kaybedebiliriz. Bu yüzden ilk olarak A + 1'e sıfır eklemeliyiz. Bu biti korumaya aldıktan

$2000

$2001 $2002

$2003

$2140

Şekil 3 $2000'den başlayan bir ekranın kart boyutlarının adresleri

sonra gönül rahatlığıyla A'yı adresY'ye ekleyebiliriz. Eğer herhangi bir şeyi atlamadıysak şu anda adresin değerini hesaplamış olmalıyız. Buraya kadar yaptığımız işlemleri programımızı inceleyerek kontrol edin. Eğer anlamadığınız yerler olursa da bana yazın. Şimdi son iş olarak gerekli biti hesaplayıp AdresY'deki yerine yazmak kaldı. Yazının başlarında bit hesaplamak için bir sürü formül hesapladık, ama bu formülleri kullanmayacağız. Bunun yerine bit çiftini baytın en soluna koyacağız ve (X AND 3)'ün sonucu kadar bu bit çiftini sağa kaydıracağız (ikişerli olarak). Bu işlemin sonucu olarak X AND 3'ün değerleri şu sonuçları verecektir:

XAND3-0 - 4011000000 XAND3-İ - 9000110000 XAND3-2- 77000001100 XAND3-3- 000000011

(% işareti sayıların ikilik düzende olduğunu belirtir.) İlk olarak X AND 3'ün değerine göre, bir tablodan değer okuyup bu değerle adresY'yi AND'lemeliyiz. Bu tabloda şu değerler bulunmalıdır:

Buraya kadar olan yerde gerekli adreste bulunan noktayı sildik. Şimdi bu adrese koyulacak noktayı, kullanıcının seçtiği rengi verecek bit çiftiyle doldurmalıyız. Bu bit çiftini de bir tablodan okuyoruz: 11000000, 01100000, 00011000, 00000110. Şimdi de okunan bu bit çiftini X AND 3'ün değeri kadar sağa kaydırmalıyız (her seferinde iki bit kaydırarak). Küçük bir döngüyle bu kaydırma işini de hallettikten sonra adresY'de bulunan değeri alıp hesapladığımız bu değerle ORA'larsak ve adresY'ye geri yazarsak noktayı da basmış oluruz. Pek yerimiz kalmadığı için rutinleri detaylı olarak inceleyemeyeceğiz, ama bu işi yapabilecek kapasitede olduğunuza inanıyorum. Eğer bu programın çok yavaş nokta koyduğunu düşünüyorsanız, kullanıcıdan data almanın yeni bir yöntemini bulmalısınız. Benim burada kullandığım yöntem her data almak istediğinizde üç adet ROM rutini kullanıyor, ve bu rutinlerin hızlı olduğunu kimse söyleyemez. Bu rutinleri kullanmamak için ya doğrudan doğruya POKE'larla çalışan bir program yaparsınız ya da yeni ROM rutinleri bularak hızlı bir şekilde data okuyabilirsiniz. Eğer hesaplarda hız istiyorsanız, en uygun kısmı 320 ile çarpma rutininin sonuçlarını bir data tablosu olarak hazırlamak (düşük değerlikli baytlar bir yerde, yüksek değerlikler başka bir yerde), sonra da Y/8'inci elemanı doğrudan doğruya bu tablodan okumak size oldukça zaman kazandıracaktır. Aslında uygun tablolar hazırlayarak tüm hesaplamalardan kurtulabilirsiniz, ama bu şekilde oldukça fazla bellek harcarsınız. Aslında bu konuda daha uzun yazmak isterdim, ama yerim dolduğu için bu aylık burada kesmem gerekiyor. Gelecek ay görüşmek üzere hoşçakalın.

Şekil 4: Noktaların ikişer ikişer gruplanması

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