Bu sayfadaki yazılar
Sayfanın metni
Sayfa 164
"Sinüs Hareketi" Örneği
Merhaba dünya örneğinden sonra biraz büyük bir atlayış gibi gözükse de aslında yazacağımız program çok kısa ve basit bir program. Programın en büyük özelliği sinüs fonksiyonuna ihtiyaç duyması. Commodore 64'ün makine dilinde sinüs için özel bir operatör mevcut değil. Bunun için ya Basic ROM'undan sinüs fonksiyonunu kullanmamız gerekmekte ya da kendi sinüs rutinimizi yazmamız. Bu iki metodun da sonucu çok hızlı olmayacaktır. En pratik yol sinüs değerlerini tablolamak ve tablodan okutmaktır. Pekala, öncelikli işimiz sinüs hesaplatmak. Bunun için geçen sayıda da yaptığımız gibi çeşitli metotlar kullanabiliriz.
Amacımız Commodore 64'ün karakter ekranının en üst satırında bir karakteri sinüs hareketiyle sağa sola sallamak. Bir satır 40 karakter olduğuna göre bizim 0-39 arasında değişen değerlerde bir sinüs tablosuna ihtiyacımız var. Şimdi JavaScript kullanarak bu aralıkta değerler hesaplatan bir formül bulalım.
sinus.htm
<script> for(i = 0; i < 256; i++) { a = 20 + Math.floor(19.9 * Math.sin(i / 64 * Math.PI)); if(i != 0) document.write(","); document.write(a); } </script>
Bu örnek tarayıcımızın ekranına;
20,20,21,22,23,24,25,26,27,28,29,.......................,7,8,8,9,10,11,12,13,14,15,16,17,18,19 şeklinde tam 256 adet sayı basar. Şimdi sinüs hareketini oluşturacak minik programımızı yazalım ve internet tarayıcısının ekranındaki bölümü programımızın sonuna kopyala&yapıştır yapalım.
sinus.a
!to "sinus.prg"
* = $0801 !byte $0c, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00
* = $080d loop jsr $e544 sinpos ldx sinus lda #$51 sta $0400,x inc sinpos+1 jmp loop
* = $0900 sinus !byte @Sinus değerlerini buraya kopyala & yapıştır
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 165
"sinus.htm" dosyasının çıktısını "sinus.a" kaynak kodunda kullanarak sinus hareketi yapan bir ASCII karaktere sahip olmuş olduk. Böylelikle geçen sayının başından beri anlatmak istediğimiz noktada ilk amacımıza ulaştık.
Bu örnekte kullanılan "jsr $e544" ekranı temizlemeye yarar. Bunun haricinde sinüs tablosu bilinçli olarak $0900 gibi $100'lük dilime denk gelen bir adrese yerleştirildi. Bu sayede "ldx sinus" komutunun işaret ettiği "sinus" etiketinin yer aldığı adresin alt byte'ı arttırılarak (inc sinpos+1) tablo üzerinde ilerlemek mümkün oluyor. $09FF adresinden sonra ise alt byte $00'a döndüğü için işaret de $0900 adresine dönüyor. Sinüs periyodu doğru ayarlandığında tekrar eden bir fonksiyon olduğu için harekette bir atlama olmuyor ve düzgün bir şekilde başa dönüyor. "lda #$51" satırındaki $51 değeri değiştirilerek de farklı ASCII karakterlerini ekranda sallamak mümkündür.
Bu bölümde ilk asli hedefimize ulaştık ve PC'nin imkanlarını kullanarak Commodore 64 üzerinde en basitinden bir efekt hazırlamayı başardık. Önümüzdeki bölümden itibaren bu tür örnekleri gittikçe geliştirirken, bir taraftan da "programları öncelikle PC'de test etmek" konusuna değineceğiz.
Bu bölümün de sonuna geldik. Eğer gerçekten bu dökümanın işinize yaradığına inanıyorsanız, gelecek Plazma sayısına kadar bol bol pratik yapın, genel olarak makine dili çalışın. Gelecek sayıda kaldığımız yerden devam edeceğiz. Hoşça kalın.
Benimle irtibata geçmek isteyenler için e-mail adresim;
skate <at> glance <dot> ws (mailto:skate@glance.ws)
Emir Akaydın
Skate / Glance