Bu sayfadaki yazılar
Sayfanın metni
Sayfa 115
xs = int(x / 8)
xk = x mod 8 işlem: x/8 x: 0 xs:0 xk:0 x: 1 xs:0 xk:1 x: 2 xs:0 xk:2 x: 7 xs:0 xk:7 x: 8 xs:1 xk:0 x: 9 xs:1 xk:1 x: 15 xs:1 xk:0 x: 16 xs:2 xk:1 x: 17 xs:2 xk:2 x: 318 xs:39 xk:6 x: 319 xs:39 xk:7
"xs" parametresinde 0'dan 39'a kadar byte değerlerini elde ediyoruz. Ekran adreslerinde bir sırada toplam 40 byte var. Ancak unutmamamız gereken hafızada bu byte'ların peş peşe gelmediği 8'er aralıklarla dizildiği. Çünkü aralarda aynı karakter alanında yer alan diğer y koordinatlarına ait değerler duruyor. Peki 8'er 8'er gittiğine göre ne yapmak lazım? Tabii ki bu "xs" değerini 8 ile çarpmak lazım.
xi = xs * 8
Hadi artık bu kadar uzun işlemden sonra şu adres indeksini bulalım.
ai = yi + xi
İşte bu kadar. Artık dizinin kaçıncı elemanına erişmemiz gerektiğini biliyoruz. Ama hala ona hangi değeri vermemiz gerektiğini bilmiyoruz. Bunu bulmak için "xk" parametresini kullanacağız. Peki "xk"nın 0'dan 7'ye değişim göstermesini ekranda nasıl görmemiz lazım?
xk = 0 -> Xooooooo -> bd = %10000000 = 128 = 2^7 xk = 1 -> oXoooooo -> bd = %01000000 = 64 = 2^6 xk = 2 -> ooXooooo -> bd = %00100000 = 32 = 2^5 xk = 3 -> oooXoooo -> bd = %00010000 = 16 = 2^4 xk = 4 -> ooooXooo -> bd = %00001000 = 8 = 2^3 xk = 5 -> oooooXoo -> bd = %00000100 = 4 = 2^2 xk = 6 -> ooooooXo -> bd = %00000010 = 2 = 2^1 xk = 7 -> oooooooX -> bd = %00000001 = 1 = 2^0
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 114
Elbette ki aşağıdaki şekilde.
ys = int(y / 8)
yk = y mod 8
Yani "ys", y / 8 işleminden çıkan sonucun tam sayı kısmı ve "yk" ise 8 ile bölümden kalan yani matematiksel ifadesiyle "mod 8". Peki bu "ys" ve "yk" bize neyi veriyor? Hadi bir tablo yaparak görelim sonucu.
işlem: y/8 y: 0 ys: 0 yk: 0 y: 1 ys: 0 yk: 1 y: 2 ys: 0 yk: 2 y: 7 ys: 0 yk: 7 y: 8 ys: 1 yk: 0 y: 9 ys: 1 yk: 1 y: 10 ys: 1 yk: 2 y: 11 ys: 1 yk: 3 y: 15 ys: 1 yk: 7 y: 16 ys: 2 yk: 0 y: 17 ys: 2 yk: 1 y: 198 ys: 24 yk: 6 y: 199 ys: 24 yk: 7
Hmmm, işte bu tablodaki değerler bir şeyleri ortaya çıkarıyor. Dokümanın en başında verdiğim tabloya bakarsanız ve az önce bahsettiğim gibi 320'de bir y'de 8'lik bir artış olduğunu düşünecek olursak hafızadaki doğru adresi bulmak için "ys" parametresini 320 ile çarpmak ve "yk" ile toplamak gerekiyor. Bu durumda formülümüz;
yi = ys * 320 + yk
Haline dönüşüyor. Buradaki "yi" bize dizinin y koordinatına bağlı indeksini veriyor. Ne yazık ki işimiz bitmedi. Bir de x koordinatımız var. Ama x koordinatında işimiz biraz daha kolay. Tek bir noktayı unutmamak koşuluyla! x koordinatındaki 1 pixellik ilerleme y koordinatında olduğu gibi hafızada 1 byte'lık ilerlemeye denk gelmiyor. 8 pixel aynı byte üzerinde yer alıyor. Yani x = 0 ve x = 7 değerleri aslında bize aynı byte'ı veriyor. Ancak bu byte'da değiştirmemiz gereken bit değerleri değişiyor. Şimdilik yalnızca hafıza adresini bulmaya çalıştığımıza göre x = 0 ve x = 7 bizim için aynı şeyi ifade ediyor. Bu ne demektir? x'i 8'e bölebiliriz. Böylece;