Bu sayfadaki yazılar
Sayfanın metni
Sayfa 58
Space Invaders oyununun bir diğer özelliği ise siyah arkaplana sahip olmasıdır. Yani yaratıklar bir arkaplanın üzerine basılmazlar. Peki ya arkaplanda bir resim olacak olsaydı ne olacaktı? Sil-çiz kadar basit bir yöntem kullanmamız mümkün olmayacaktı. Şimdi bu duruma bir göz atalım.
Şekil 3.
Öncelikle yaratığın üzerine çizileceği arkaplanın hafızada bir kopyasının durması gerekir. Bir diğer seçenek ise yaratığın basılacağı alan bir dikdörtgen şeklinde düşünülerek sadece bu kısmın bir kopyası alınabilir. Daha sonra yaratık bu alana yine dikdörtgen biçiminde basılabilir. Ancak arkaplanın silinmemesi için matematikteki VEYA (OR) işleminin kullanılması gerekir. Bir sonraki karede, arkaplan yaratığın bulunduğu alana yeniden kopyalanarak yaratık silindikten sonra, yaratığın yeni pozisyonuna uygun bir biçimde arkaplan hafızaya alınır ve yaratık yeni pozisyonuna yerleştirilir. Bu işlem her harekette tekrarlanmak zorundadır. Grafik moduna ve yaratığın çizimine bağlı olarak yaratık basılmadan önce VE (AND) işlemi ile yaratığın basılacağı alanı arkaplan üzerinde maskelemek de gerekebilir. Bütün bu işlemler ciddi zaman alan işlemlerdir ve oyunun akıcılığını önemli ölçüde etkilerler.
Arkaplan üzerine hareketli grafik basma işinin çözümü donanımsal yaratık desteğinde gizlidir. Konumuz olan Atari 800 XL/XE bilgisayarlarında grafik işlemlerinden sorumlu çip olan Antic çipi yaratıklardan sorumlu değildir. Bu işi GTIA çipi yani Antic'deki görüntüyü TV ya da monitöre aktarma işinden sorumlu olan çip üstlenir. Kısacası Antic çipi ekrandaki görüntüyü oluşturduktan sonra GTIA çipi bu görüntünün üzerine dilediği gibi yaratık basabilir. Hatta bu yaratıkları şeffaf bile basması mümkündür. Atari'deki yaratık desteğini televizyonunuzun sesini açtığınızda ekrana çıkan volume seviye grafiği gibi düşünebilirsiniz.
Oyuncular ve Füzeler
Her donanımsal yaratık desteği olan bilgisayarda kendisine özel sınırlamalar vardır. Aynı anda kaç yaratık gösterilebileceği, bunların ekranda hareket ettirilme kuralları, çözünürlükleri, renk sayıları, çarpışmaları gibi birçok kriter ve sınırlama mevcuttur.
Atari'de 4 oyuncu ve 4 füze şeklinde toplamda 8 yaratık bulunmaktadır. Bu 8 yaratık birbirinden bağımsız hareket edebilirler ve arkaplanı etkilemezler. Yani çok az bir zaman harcayarak ekranda 8 yaratık göstermek mümkündür. Ancak oyuncular ve füzeler aynı özelliklerde değillerdir. 4 füze bir arada kullanıldığında fazladan 1 oyuncu elde edilebilir. Bunun nedenlerini birazdan göreceğiz.
Atari'de Yaratıkların Hareket Etme Prensibi
Yaratıklar iki boyutlu oldukları için iki eksende hareketleri söz konusudur; X ve Y eksenleri. Genellikle her iki eksen için birer hafıza adresi kullanılarak yaratık pozisyonlarını değiştirmek mümkündür. Ancak Atari'de yaratıklar yalnızca X ekseninde bu şekilde hareket ettirilebilirler. Dikeyde ise hareket biraz farklı bir biçimde gerçekleşmektedir. Çünkü Atari'de yaratıklar dikeyde tüm ekran yüksekliğini kaplamaktadırlar.
Şekil 4.
Resimde görülen kırmızı, yeşil, mavi ve sarı bloklar her bir yaratığın çizilebileceği alanları sembolize etmektedirler (normalde ekranda böyle barlar görmeyeceksiniz). Yaratıkların çizim genişlikleri sabitken, yükseklik olarak bir sınırlama yoktur. Bir yaratık tüm ekran boyunda olabilir. Örnek olarak resimdeki uzay gemisi, çarpı sembolü, iki yönlü ok birer yaratık olduğu gibi PLAZMA #6 yazısı da tek bir yaratıktır.
Bu yaratıklar hafızanın çeşitli bölümlerinden grafik verisi okuyabilirler. Ancak hafıza adresleri belirlendikten sonra hep sabit bir adresten veri okudukları için grafik verilerini hafıza üzerinde kaydırarak yaratıkları Y yönünde hareket ettirmiş oluruz. Bu işlem uzay gemisi için oldukça hızlı yapılabilirken, PLAZMA #6 yazısının bulunduğu yaratıkta daha uzun süren bir işlemdir. Kısacası yaratık grafiğinin yüksekliği arttıkça Y eksenindeki hareket de orantılı bir biçimde daha çok zaman almaktadır. Fakat X eksenindeki hareket yaratığın grafik verisinden kesinlikle etkilenmez ve yalnızca bir hafıza adresini değiştirerek yaratık hızlıca yeniden pozisyonlandırılabilir.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 59
Oyuncular
Önceki bölümde gördüğümüz 4 yaratık aslında oyunculara tekabül etmektedir. Oyuncuların yatay çözünürlükleri 8 pixeldir. Bu aslında oldukça düşük bir çözünürlüktür. Ancak elbette ki birden fazla yaratık yan yana getirilerek 16, 24, 32 hatta füzeler de kullanılarak 40 pixel genişliğe ulaşmak mümkündür. Yaratıklar ekranda gösterilirken her bir pixel 2 pixel genişliğinde gösterilmektedir. Yani 8 pixel genişliğindeki bir yaratık ekranda 16 pixellik bir alan kaplayacaktır.
Şekil 5.
Yaratıklar yatay eksende 2 ya da 4 kat, dikey eksende ise 2 kat genişletilebilirler. Yatayda 2 kat genişletilen bir yaratık 16 yerine 32 pixel, 4 kat genişletilen ise 64 pixel kaplayacak şeklinde görüntülenir. Yani yaratık haritasında yer alan her bir bit normalde 2, 2 kat genişletildiğinde 4, 4 kat genişletildiğinde 8 pixel genişliğinde ekrana çizilir.
Oyuncuların her biri hafızada 256 bytelık alanlardan veri okurlar. Aslında bu 256 byte'ın tamamı ekran alanına sığmamaktadır. İlk 8 byte ekranın üstünden dışarıda kalmaktadır. Ekranın görüntülenebilen alanı 240 byte kabul edilebilir. Bu durumda alanın sonunda yer alan yine 8 bytelik bir bölge daha görüntülenemez. Eğer yaratıklar Y ekseninde iki kat genişletilecek olursa bu durumda 256 bytelik alanın ilk 128 byte'ı grafik verisi olarak kullanılır ve her satır 2 kez tekrar eder. Ancak bu durum tüm yaratıkların hafıza yerleşimlerini değiştiren bir durumdur. Bunu ilerde göreceğiz.
Füzeler
Füzeler, oyuncularla büyük oranda benzerlikler içerirler. En temel farklılığı genişliklerinin 8 pixel yerine 2 (yazıyla "iki" :)) pixel olmasıdır. Elbette ki bu hayalinizdeki füzeyi çizebilmek için yeterli bir genişlik değildir. Ancak yine de füzeler mini kurşunlar atmak için kullanışlı bir yöntemdir. Peki niye 2 pixel ile sınırlıyız? Aslında bu sınır hakkında net bir görüş ortaya koymak zor da olsa benim söyleyebileceğim Atari donanımının maksimum 5 oyuncu niteliğinde yaratık destekleyebildiğidir. Bu oyunculardan 4'ü olduğu gibi kullanılırken 1 oyuncu dikey olarak 4'e bölünmüş ve 4 farklı füze olarak kullanılmış varsayılabilir. Füzeler de aynı oyuncular gibi tüm ekran yüksekliğinde basılabilir ve farklı farklı pozisyonlandırılabilirler. Ancak bu defa tek bir byte 4 farklı füzeyi ifade eder. Bu da demektir ki füzeleri dikey olarak hareket ettirirken bit bazlı ek hesaplamalar yapmamız gerekir. Şimdilik bu kadar detaya girmeden füzelerin yapısını incelemeye devam
Şekil 6.
Görüldüğü gibi birkaç farklı model füze elde edebiliyoruz. Dikeyde füze verilerini uzatarak daha farklı füzeler modellememiz de mümkün. Ancak bunların yerine birden fazla füzeyi yan yana kullanarak daha büyük füzeler elde etmemiz de bir başka kullanışlı yöntem olabilir. Ayrıca istersek 4 füzeyi birlikte 5. bir oyuncu olarak kullanabiliriz. Unutmamamız gereken şey her bir füzenin bağımsız bir X koordinatının olduğudur. Yani 4 füzeyi yan yana getirmek istediğimizde aşağıdaki gibi bir yöntem izlememiz gerekir.
ele temizle lda sta adc sta adc sta adc sta
şelde bayra##n# #X Koordinati FUZE3 X
(carry flag)
Burada FUZE(n) X şeklinde geçen tanımlar henüz hafıza adreslerinden bahsetmemiş olduğumuz için yapılmış geçici tanımlardır.
Oyuncular ve Füzeler'in Hafıza Haritası
Oyuncu ve füzelerin dikey genişleme özelliğine göre iki farklı hafıza yerleşimleri vardır. Eğer dikey olarak genişlemişlerse hafızada 1 kilobyte, normalde ise 2 kilobyte yer kaplarlar. Bunun nedeni ise iki kat genişlemiş yaratıkların dikeyde her iki satırda bir yeni grafik verisi okumasından dolayı yarı yarıya az veriye ihtiyaç duymasıdır. Şimdi sırayla hafıza haritalarını verelim.
1) Tek Satır Çözünürlüğü