Bu sayfadaki yazılar
Sayfanın metni
Sayfa 123
sinXHi = sinX >> 8;
sinY = 100 + Math.floor(99.9 * Math.sin(i / 128 * Math.PI));
if(i != 0)
txtSinXLo += ",";
txtSinXHi += ",";
txtSinY += ",";
txtSinXLo += sinXLo;
txtSinXHi += sinXHi;
txtSinY += sinY;
txtCikti += "!align 255,0,0<br><br>";
txtCikti += "sinusTablosuXLo<br>";
txtCikti += "!byte "+txtSinXLo+"<br>";
txtCikti += "!byte "+txtSinXLo+"<br>";
txtCikti += "cosinusTablosuXLo = sinusTablosuXLo + 64<br><br>";
txtCikti += "!align 255,0,0<br><br>";
txtCikti += "sinusTablosuXHi<br>";
txtCikti += "!byte "+txtSinXHi+"<br>";
txtCikti += "!byte "+txtSinXHi+"<br>";
txtCikti += "cosinusTablosuXHi = sinusTablosuXHi + 64<br><br>";
txtCikti += "!align 255,0,0<br><br>";
txtCikti += "sinusTablosuY<br>";
txtCikti += "!byte "+txtSinY+"<br>";
txtCikti += "!byte "+txtSinY+"<br>";
txtCikti += "cosinusTablosuY = sinusTablosuY + 64<br><br>";
document.write(txtCikti);
</script>
"sinus.htm"in tarayıcıya verdiği çıktıyı kopyala-yapıştır ile "elipsciz.a" kaynak kodunun sonlarında belirtilen bölgeye yapıştırmamız gerekiyor.
elipsciz.a
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 122
Daha sonra en soldaki biti y registerının en sağdaki biti olacak şekilde ayırıp geri kalan 8 biti de a registerına vermek gerekiyor. Yani;
ldy #%00000001 lda #%00101100
Şeklinde x'e 300 değerini verebiliyoruz. Bunu daha basit görmenizi sağlamak için 300'ü 16 bit ile ifade edip ortadan ikiye böleceğim.
300 = %100101100 = %0000000100101100 = %<00000001><00101100>
Soldaki parça Y, sağdaki ise A register'ının değerini ifade ediyor.
Dikkat etmeniz gereken nokta Y register'ının 1 değerini alması durumunda X'in değerinin 319 - 256 = 63 değerini geçmemesi gerektiğidir. Yani Y'nin her iki değeri için A'nın değer aralıklarını inceleyecek olursak;
Y = 0 -> A [0,255] Y = 1 -> A [0,63]
Olması gerekmektedir. Benzer şekilde Y koordinatının değerlerini tutan X register'ı ise 199'u geçmemelidir.
X [0,199]
Bu koşullara uyulmak suretiyle 320 x 200'lük alanda ekranın istediğiniz yerine nokta basabilirsiniz.
Şimdi bu örneği VIC Simülatörü'ndeki örneği yapmakta kullanalım.
Commodore 64'te VIC Simülatör'deki Örnek İle Aynı Sonucu Veren Programı Hazırlamak
Öncelikle elipsin çiziminde kullanılacak bazı sinüs tablolarını hazırlamamız gerekiyor. Bu konu bir önceki Test Platformu bölümünde detaylı olarak ele alınmıştı. Burada yine JavaScript kullanıyoruz.
sinus.htm
<script> var txtSinXLo = "";
var txtSinXHi = "";
var txtSinY = "";
var txtCikti = "";
for(i = 0; i < 256; i++)
sinX = 160 + Math.floor(159.9 * Math.sin(i / 128 * Math.PI));
sinXLo = sinX & 255;