Commodore sayı 58, sayfa 24
Sayfanın metni

Sayfa 24

Pur

Vedat Hallaç

Makine Dilinin Püf Noktaları:

Selam sevgili okuyucular. Bu ay da demo veya intro programlamak için gereken bilgileri vermeye devam ediyoruz. Bu ayki konumuz ise makine dilinde sinüs hareketlerinin yapılması. Matematikle ilgileniyorsanız 'Sinüs' formülünü kullanarak birçok ilginç hareket tanımlayabileceğinizi biliyorsunuzdur. Mesela xorta=rxCOS(B) formüllerini kullanarak ve B (beta)'ya 0 ile 360 arası değerler vererek (xorta, yorta) koordinatını merkez alan r yarıçaplı bir daire çizebilirsiniz. Tabii ki makine dilinde sinüs ve kosinüs formüllerini hesaplatmak zaman alacağından bir-iki blokluk sinüs tabloları hazırlayarak bu zaman kaybından kurtulabiliriz. Bu tabloları hazırlarken 360 derecelik bölgenin sinüs değerlerini oldukça iyi bir yaklaşımla 256 bayta indirirsek X veya Y registerini kullanarak bu tabloya ait değerleri rahatlıkla okuyabiliriz. Makine dilinde floating point aritmetiği (kayan nokta aritmetiği: kesirli sayılarla ilgili işlemleri içeren aritmetiğe verilen ad.) kullanmak da çok değerli olan zamanımızın büyük kısmını harcayacağından sadece bize gereken 'rxSIN(B)' değerlerinin tam sayı karşılıklarını içeren bir tablo hazırlamamız gerekiyor. Tabii ki ayrıca bir de 'rxCOS(B)' tablosu hazırlamamız gerekmiyor. Çünkü COS(B)=SIN(90-B) formülünü rahatlıkla kullanabiliriz burada. Ama sinüs tablomuz 256 bayt olduğundan rxCOS(B)=rxSIN(90*256/360-B) veya TxSIN($40-B) formülünden hesaplanacaktır. Daha açık bir dil kullanırsak 256 baytlık tablonuzdan B elemanını okuyacağınıza $40-B elemanını okursak açısının kosinüsünü elde ederiz. (Herhalde çoğunuz "Neden $40-B değil de $40+B elemanını okuduk?"

diye soruyorsunuzdur. Kosinüs fonksiyonu bu noktada simetrik olduğundan bu iki elemanın arasında fark yoktur.) 10 FOR R=0 TO 255 20 A=100*SIN(R*2*PI/256) 30 POKE 49408+R,A 40 NEXT (PI: pi işareti) (1/128*PI ile r derecesini radyana çeviriyoruz) Yukarıdaki programda 100 birim genliğinde 256 elemanlık bir sinüs tablosunu $C400'de yaratan bir BASIC programı görüyorsunuz. İşte bu tür tabloların avantajı bu noktada doğmaktadır. Basic programınızın yarattığı tablonun fonksiyonu ne kadar karmaşık olursa olsun makine dili programınızın hızını etkilemeyecektir. (Sadece sinüs ve kosinüs gibi basit fonksiyonların değil, X^2+2X+XxSIN(X^2+2X^2) gibi karmaşık fonksiyonların tabloları da işinize yarayacaktır.) - Bizim programımız da 100 birim genliğinde bir sinüs tablosu (y koordinatları için) ve 0'dan 320'ye doğrusal olarak artan ve tekrar doğrusal olarak 0'a inen başka bir tablo (x koordinatları için) kullanmaktadır. X koordinatları için kullandığımız tablo, topların ekran kenarına geldikleri zaman sekmesini sağlamaktadır. Zıplama efektini elde etmek için ise 256 baytlık sinüs tablosunun yalnızca ilk 128 baytını kullanıyoruz.

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