Bu sayfadaki yazılar
Sayfanın metni
Sayfa 57
Bölüm 2 Emir 'Skate' Akaydın
Giriş
Atari, evlerimize giren 8 bit ailesi bilgisayarların en eskilerinden biri olmasına rağmen, bazı açılardan çok şanslı bir bilgisayardır. Çünkü günümüz PC'lerinde bile donanımsal olarak yer almayan ve yine dönemin bilgisayarlarının bir kısmında da bulunmayan bir özelliğe sahiptir. Bu özelliğe genel olarak yaratıklar (sprites) diyoruz. Ancak Atari fazlasıyla oyun odaklı tasarlanmış olacak ki, bu yaratıkları iki başlık altında toplamıştır: Oyuncular ve füzeler (players & missiles). İlk başta bir donanım özelliği olarak kulağa komik gelse de işin içine girince gerçekten de ismini hak eder bir tasarıma sahip olduğunu göreceksiniz.
Bu sayımızda, bu muhteşem donanım özelliğini çeşitli yönleriyle inceleyeceğiz. Öncelikle genel tanımıyla yaratıklara bir göz atalım.
Not: Bu yazıda verilen kaynak kodlar, ACME ile derlenebilirler. Detaylı bilgi için yazı dizisinin birinci bölümüne göz atınız.
Şekil 1.
Yaratık Nedir?
Günümüz bilgisayarları hiper süper hızlarda çalıştıkları için bu tür bir donanım özelliğine ihtiyaç duymamaktadırlar. Kaldı ki 2 boyutlu donanım destekleri 3 boyutun bize yetmediği (!) günümüzde biraz arkaplanda kalmaktadır.
70'lerin sonlarında, 80'lerin başlarında piyasaya sürülmüş 8 bit bilgisayarlar en fazla birkaç MHz hızındaydı. Atari'nin 1-2 MHz aralığındaki hızı da diğer benzerleri gibi bazı grafik fonksiyonlarını yerine getirebilmek için yetersizdi. Bu bilgisayarların önemli ölçüde oyun odaklı tasarlandıklarını düşünecek olursanız, karşımıza ilk çıkacak problem ekranda hareket eden "yaratıklar" oluyor. Yaratık demek öcü demek değil elbette ki. Bu yaratıklar kah hoplayıp zıplayan bir Mario, kah cıv cıv ateş eden bir uzay gemisi, kah namludan fırlamış akıbeti kötü bir kurşun olabilir.
Ekranda hareket eden her yaratık donanım destekli olmak zorunda mı? Bunun başka bir yolu yok mudur? Elbette ki var. Zaten o dönemdeki hemen hiçbir donanım, ekrandaki yaratık sayısı arttıkça yeterli desteği verememekte ve başka yollara başvurulması gerekmektedir. Bunun en bariz örneklerinden biri 1978 yılında yayınlanan Space Invaders oyunudur. Ekranda 50'den fazla hareketli yaratık ve bunlara ek olarak yaratıkların attıkları kurşunlar yer almaktadır. Hele ki bu yaratıklardan 10-11 tanesinin yan yana durduğunu düşünecek olursak o günün standartlarında her biri bağımsız, donanım destekli birer yaratık olarak gösterilmeleri mümkün değildir. Ancak kolaylıkla grafik ekranına çizdirilebilir ya da karakter ekranında karakter seti değiştirilerek elde edilebilirler.
Şekil 2.
Buradaki asıl problem 50'den fazla yaratığın ekrana basılmasının ve yaratıkların hareket etmelerinden önce ekranın temizlenmesi işlemlerinin alacağı zamandır. Bu zaman şu ana kadar bu konu üzerine çok düşünmemiş bir insanın tahmin edebileceğinden daha büyük bir sıkıntıdır. Zaman yetmemesinden kasıt şudur: Atari, Commodore ve benzeri bilgisayarların PAL (Örnek: Avrupa Ülkeleri) standartlarında 50, NTSC (Örnek: Amerika) standartlarında 60 saniyede gösterebileceği belli bir kare (frame) sayısı vardır. Yani bir ekran karesi saniyede 50 ya da 60 kere oluşabilir. Bir kareyi oluşturmak için bilgisayarın belirli bir zamanı vardır. Bu zaman içerisinde işleyebileceği komut sayısı da elbette ki sınırlıdır. Komutların çalışmasında geçen süre cycle ile ifade edilir. Farklı komutlar farklı cycle'larda zaman yiyebilirler. Ekranın tamamının ya da tamamına yakın bir kısmının byte byte silinmesi ve yeni yaratıkların ekrana yine byte byte basılması işlemi, söz konusu yaratık sayısı 50'nin üzerindeyse tek bir karede mümkün olmayacaktır. Bu durumda birkaç karede bir ekran güncellenecek ve bu da gözle görülür bir yavaşlamaya neden olacaktır. Gel gelelim Space Invaders'da yaşanan sorun da budur. Oyun ilk başladığında yaratıklar oldukça yavaş hareket etmektedirler. Yaratık sayısı azaldıkça yaratıkların hareket hızları artar. Son yaratık tek başına kaldığında süpersonik bir hıza ulaşır. Bu oyunun bir özelliği olmasının yanı sıra aynı zamanda teknik bir sorundur.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 56
Son olarak copper'ı aktif hale getirmek için bahsettiğimiz ikinci yöntemi görelim. Yukarıdaki kodda
lea mylist,al move.l move.w move.w
ifadeleri yerine aşağıdakileri yazarak da copper listemizi aktive edebiliriz:
move.l $4,a6 lea gfxname,al moveg #0,dO İsr tSt.1 d0 beg.s out move.l döşal
move.l sonuna gfxname dc.b 'graphics.library',0
Burada grafik kütüphanesi açılıyor ve kütüphanenin base adresinin $32 ilerisine copper listemizin başlangıç adresi yazılıyor. Bu işlem listemizi aktif hale getirecektir. Elbette açtığımız bir library'yi programın sonunda kapatmamız gerekir:
move.l $4,a6 ;Alde graphics librarynin ;şbase adresi olmali İsr
Library'lerle ilgili daha detaylı bilgiyi ileriki sayılarda göreceğiz. Ayrıca -408, -414 gibi ofset değerlerini ezberlemek yerine include dosyaları ile çalışarak OpenLibrary, CloseLibrary şeklinde nasıl kullanacağımızı göreceğiz.
Bu sayıdaki yazımızın sonuna geldik, ekte “sources” klasörünün içinde örneklerin kaynak kodlarını bulabilirsiniz. Ayrıca iki tane daha copper örneğini incelemeniz için koydum. Eğer kaynak kodları Windows üzerinde editlemek isterseniz satır sonu formatını unix olarak kaydetmeyi unutmayın. Aksi halde AsmPro'dan yüklerken problem yaşayabilirsiniz.
Sonraki sayıda yine copper kadar can alıcı olan “Görüntü Alanları (Display Fields)” konusuna bakacağız. Sorularınızı ve isteklerinizi bana iletebilirsiniz. Görüşmek üzere.
Kaynaklar:
1. HowToCode (Amiga Demo Coders Reference Manual) 2. Amiga Hardware Guide
3. Amiga Machine Language (Abacus Books)
Programmer's Reference Manual (Motorola)