DT A NN CG4 için üf Noktaları Vedat Hallaç Makine Dilinin Püf Noktaları: Selam sevgili okuyucular. Bu ay da demo veya int- ro programlamak için gereken bilgileri vermeye de- vam ediyoruz. Bu ayki konumuz ise makine dilinde si- nüs hareketlerinin yapılması. Matematikle ilgileniyorsanız 'Sinüs' formülünü kulla- narak birçok ilginç hareket tanımlayabileceğinizi bi- liyorsunuzdur. Mesela x—xorta--rxSIN(B) yeyorta-rxCOS(B) formüllerini kullanarak ve 8 (beta)'ya O ile 360 arası değerler vererek (xorta, yorta) koordinatını merkez alan r yarıçaplı bir daire çizebilirsiniz. Tabii ki maki- ne dilinde sinüs ve kosinüs formüllerini hesaplatmak zaman alacağından bir-iki blokluk sinüs tabloları ha- zırlayarak bu zaman kaybından kurtulabiliriz. Bu tab- loları hazırlarken 360 derecelik bölgenin sinüs değer- lerini oldukça iyi bir yaklaşımla 256 bayta indirirsek X veya Y registerini kullanarak bu tabloya dit-değer- leri 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ı har- cayacağından sadece bize gereken 'rxSIN(8)' de- ğerlerinin tam sayı karşılıklarını içeren bir tablo hazır- — lamamız gerekiyor. Tabii ki ayrıca bir de 'rxCOS(B8)' tablosu hazırlamamız gerekmiyor. Çünkü COS(8)- SIN(90- -) formülünü rahatlıkla kullanabiliriz burada. Ama sinüs tablomuz 256 bayt olduğundan TrxCOS(B)-rxSIN(90*256/360-8) veya rxCOS(B)— TxSIN(540-8) formülünden hesaplanacaktır. Daha açık bir dil kullanırsak 256 baytlık tablonuzdan — ele- manını okuyacağınıza $40-4 8 elemanını okursak açısının kosinüsünü elde ederiz. (Herhalde çoğunuz 'Neden $40- B değil de $40-4- B elemanını okuduk?” 24 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-INT(400*SIN(r/128 *7 )) 30 POKE 49408 4-R.A 48 NEXT (7r: pi işareti) (1/128* 7T ile r derecesini radyana çeviriyoruz) Yukarıdaki programda 100 birim genliğinde 256 elemanlık bir sinüs tablosunu $C400 adresinde yara- tan bir BASIC programı görüyorsunuz. İşte bu tür tab- loların avantajı bu noktada doğmaktadır. Basic prog- ramınızın yarattığı tablonun fonksiyonu ne kadar kar- maşık olursa olsun makine dili programınızın hızını et- kilemeyecektir. (Sadece sinüs ve kosinüs gibi basit fonksiyonların değil, X? -4 2X -4 XxSIN(X? 4 2X2) gibi kar- maşık fonksiyonların tabloları da işinize yarayacaktır.) * Bizim programımız da 100 birim genliğinde bir si- nü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 ek- ran kenarına geldikleri zaman sekmesini sağlamak- tadır. Zıplama efektini elde etmek için ise 256 baytlık sinüs tablosunun yalnızca ilk 128 baytını kullanıyoruz.