Commodore sayı 75, sayfa 17

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 17

bu formülleri makine dili bir programda uygulamaya sokabilmek. Tabii ki pek de kolay bir iş olmayacak, ama birbiriyle çarpılan değerlerin birinin sabit olması işlerimizi inanılmaz derecede kolaylaştıracak. Rutinin en başında kullanıcının verdiği X,

Y ve renk değerlerini alıyoruz. Eğer X, 0 ile 160; Y, 0 ile 200 ve renk 0 ile 2 arasında değilse hemen ILLEGAL QUANTITY ERROR verdiriyoruz. Tüm değerler izin verilen sınırlardaysa formülümüzü uygulamaya başlıyoruz: İlk iş olarak Y'nin sekizde biriyle 320'yi çarpmalıyız, Y'yi sekize bölmek çok kolay, Y koordinatını akümülatöre aldıktan sonra üç kere LSR kullanırsınız, olur biter. Asıl zor kısmı bu sayıyı 320 ile çarpmak. İlk olarak 320'yi çarpanlarına ayırmalıyız: 320 = 64 * 5

128 | 32 | 16 8 4 | 2 1

128 Ml

1 |

5s

Şekil 2 Bir bayt'ta bulunan değerin her noktayı nasıl kontrol edeceğini burada

görebilirsiniz.

Şimdi yapmanız gereken şey sonuç olacak adresi tutacak bayt çiftini ayarlamamız gerekli. Bellekte ardışık iki adres seçin ($0000-$00FF arasında) ve bunları sıfırlayın, Y/8'i buraya yazın ve iki kere sola kaydırın. Sola kaydırmak iki ile çarpmak anlamına geldiği için sayıyı dörtle çarpmış olduk şimdiden,

Daha sonra A'da bulunan Y/8'i bu iki bayta ekleyin: CLC ADC AD STA AD LDA 0 ADC STA İkinci toplama size anlamsız gelebilir, ama C bayrağının değerini de A + 1'e eklediğiniz için hayati önemi vardır. Bundan sonrası çocuk oyuncağı. İki baytlık bir alanı tam altı kere sola kaydırmak işi halledecektir: ASL AD ROL AD+1 ASL AD ROL AD+1 «4 kere daha... Buradaki ASL AD komutuyla AD adresini sola kaydırıp ilk bitini sıfır yapıyoruz, ve ROL AD+1 ile de sola kaydırıp ilk bitini AD'nın kaydırılmadan önceki son bitine eşitliyoruz. Bir de bu değere Y'nin ilk üç bitini eklersek (Y AND 7'yi bu yüzden tercih etmiştim) AdresY kısmı tamamlanmış olacak, Y koordinatını akümülatöre alın, AND $7 komutuyla ilk üç bitini alırız, ve deminki ADC komutlarıyla adrese bu değeri ekleriz. İnanılmaz derecede kolay oluyor, değil mi? Şimdi de adresX'i hesaplayıp AdresY'ye ekleyelim. X/4 için X koordinatını içeren akümülatörü toplam iki kere sağa kaydırmalıyız. Daha sonra da bunu 8'le çarpmak için üç kere sola kaydırmalıyız. Toplam olarak

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