Destekleyici görüntüler
Hızlı bir giriş
Game Boy, NES’in sınırlı güce sahip taşınabilir bir versiyonu olarak hayal edilebilir, ancak çok ilginç yeni işlevler içerdiğini göreceksiniz.
İşlemci (CPU)
Nintendo, anakarta birçok hazır yonga yerleştirmek yerine, CPU dahil bileşenlerin çoğunu barındırmak (ve gizlemek) için tek bir yongayı seçti. Bu tür çiplere ‘Çip Üzerinde Sistem’ (SoC) adı verilir ve Game Boy’da bulunan çip DMG-CPU veya Sharp LR35902 [1] olarak adlandırılır.
Bunu söylediğimize göre, ana işlemci Sharp SM83dür [2] ve Z80 ile Intel 8080’in birleşiminden ortaya çıkmıştır. Yaklaşık 4.19MHz hızında çalışır.
Z80’in kendisi 8080’in bir üst kümesidir, peki SM83’ün aslında bu ikisinden farkları nelerdir? [3]
- Ne Z80’in
IX
veyaIY
kayıtları ne de 8080’inIN
veyaOUT
komutları dahil edilmiştir: Bu, I/O portlarının mevcut olmadığı anlamına gelir. Bunun sadece maliyetleri düşürmek için bir önlem olup olmadığından emin değilim, ancak kesin olan bir şey var ki bileşenlerin tamamen bellek eşlemeli olması gerekecek [4]. - Yalnızca 8080’in komut kümesi uygulanmıştır.
- Z80’in genişletilmiş komut setini içerir. Bununla birlikte, sadece bit manipülasyon talimatları bulunur.
Son olarak, Z80 veya 8080’de bulunmayan birkaç yeni talimat da eklediler. Bunları tek tek açıklamanın bu makalenin kapsamını aştığını düşünüyorum, ancak ana fikir, Nintendo/Sharp’ın donanımı düzenleme biçimine göre koşullandırılmış belirli işlemleri optimize etmeleridir.
Kullanılabilir hafıza
Nintendo genel amaçlı kullanım için (Work RAM veya ‘WRAM’ olarak adlandırdıkları) 8 KB RAM yerleştirmiştir [5]. Bunun NES’in içerdiğinden dört kat daha büyük olduğuna dikkat edin.
Donanımsal erişim
SM83, 8 bitlik bir veri yolu ve 16 bitlik bir adres yolu bulundurur, böylece 64 KB’a kadar bellek adreslenebilir. Bellek haritası [6]’den oluşur:
- Kartuş alanı.
- WRAM ve Ekran RAM’i.
- I/O (joypad, ses, grafik ve LCD)
- Kesme kontrolleri.
Grafikler
Tüm grafik hesaplamaları CPU tarafından yapılıyor, daha sonra Resim İşleme Ünitesi veya ‘PPU’ ekrana gönderiyor. Bu, DMG-CPU içinde bulunan başka bir bileşendir ve aslında önceki PPU’ya dayanmaktadır.
Resim entegre bir LCD ekranda görüntülenir, 160×144 piksel çözünürlüğe sahiptir ve 4 gri tonu (beyaz, açık gri, koyu gri ve siyah) gösterir. Ancak orijinal Game Boy yeşil bir LCD’ye sahip olduğundan, grafikler yeşilimsi görünecektir.
NES makalesini daha önce okuduysanız, PPU’nun CRT ışınını takip edecek şekilde tasarlandığını hatırlayabilirsiniz. Ancak (ve bariz nedenlerden dolayı), Game Boy’da bir LCD ekranımız var. LCD’lerin de yenilenmesi gerektiğinden, yeni PPU bu kısmı değiştirmiyor. Hatta bu davranış sayesinde elde edilen bazı özel efektler Game Boy’da da desteklenebilir.
İçeriğin düzenlenmesi

PPU’da 8 KB VRAM veya hem PPU hem de CPU’nun doğrudan erişebildiği ancak aynı anda erişemediği ’Ekran RAM’i vardır. Bu 8 KB, PPU’nun grafikleri işlemek için ihtiyaç duyacağı verilerin çoğunu içerecektir. Kalan bitler, daha hızlı erişim hızı gerektireceğinden, bunun yerine PPU içinde depolanacaktır.
Oyun, farklı alanların doğru veri türleriyle doldurulmasından sorumludur. Dahası, PPU kayıtları açığa çıkarır, böylece oyun PPU’ya bu verilerin nasıl düzenleneceği konusunda talimat verebilir (yine de birçok kural vardır).
Kare Oluşturulması
Şimdi PPU’nun ekrana bir şeyler çizmeyi nasıl başardığını görelim. Gösterim amacıyla, Super Mario Land 2 örnek olarak kullanılacaktır:
Kareler



PPU, grafikleri, özellikle de sprite ve arka planları oluşturmak için temel bir bileşen olarak tiles kullanır [7].
Döşemeler sadece 8x8 bitmapler olup VRAM’de Döşeme seti veya ‘Döşeme desen tablosu’ adı verilen bir bölgede saklanır ve her piksel mevcut dört gri tonundan birine karşılık gelir. Son olarak, karolar iki desen tablosunda gruplandırılır.
Resmi oluşturmak için karolara Karo haritası adı verilen başka bir tablo türünde başvurulur. Bu bilgi PPU’ya karoların nerede işleneceğini söyleyecektir. Çerçevenin farklı katmanlarını oluşturmak için iki harita saklanır.
Sonraki bölümlerde karo haritalarının katmanları oluşturmak için nasıl kullanıldığı açıklanmaktadır.
Arka Plan Katmanı



Arka Plan katmanı 256x256 piksel (32x32 karo) bir harita olup statik karolar içerir. Ancak, ekranda yalnızca 160x144’ün görüntülenebilir olduğunu unutmayın, bu nedenle hangi bölümün görüntülenmek üzere seçileceğine oyun karar verir. Oyunlar ayrıca oyun sırasında görüntülenebilir alanı hareket ettirebilir, Scrolling Effect bu şekilde gerçekleştirilir.
İki karo haritasından biri arka plan katmanını oluşturmak için kullanılabilir.
Pencere


Pencere, arka plan ve sprite’ların üstünde görüntülenen kutucukları içeren bir 160x144 piksel katmandır. Kaydırmaz.
Kalan karo haritası pencere katmanına atanabilir.
İlk başta bu aptalca bir özellik gibi gelebilir. Sonuçta, pencere katmanı diğer her şeyle örtüşüyor, o halde ne işe yarıyor? Hem Arka Plan hem de Pencere, ekranın farklı bölümlerinde aynı anda kullanılabilir. Bu, belirli tarama satırları sırasında LCDCONT
kaydı değiştirilerek gerçekleştirilir.
Bu nedenle, oyunlar normalde bunu oyuncu istatistiklerini, puanları ve diğer ‘her zaman açık’ bilgileri görüntülemek için kullanır.
Spritelar

Sprite’lar ekran etrafında bağımsız olarak hareket edebilen kutucuklardır. Ayrıca birbirleriyle örtüşebilir ve arka planın arkasında görünebilirler, görüntülenebilir grafik bir öncelik özelliğine göre kararlaştırılacaktır.
Ayrıca ekstra bir renk seçeneği de mevcuttur: Transparent. Dolayısıyla, dört yerine yalnızca üç farklı gri görüntüleyebilirler. Neyse ki bu katman, her renkten yararlanmak için iki renk paleti tanımlamaya izin veriyor.
Object Attribute Memory veya ‘OAM’, PPU içinde depolanan ve sprite olarak kullanılacak karoları belirten bir haritadır. Oyunlar bu bölgeyi çipin içinde bulunan DMA birimini çağırarak doldurur, DMA verileri ana RAM’den veya oyun ROM’undan OAM’ye getirir.
Tile indeksinden ayrı olarak, her giriş aşağıdaki öznitelikleri içerir: X-Y konumu, renk paleti, öncelik ve çevirme bayrakları (Tile dikey ve yatay olarak döndürmeye izin verir).
PPU, tarama satırı başına on sprite ve kare başına 40 sprite oluşturma ile sınırlıdır, bunun aşılması sprite’ların çizilmemesine neden olur.
Sonuç

Kare tamamlandığında, bir sonrakine geçme zamanı gelmiş demektir! Ancak, PPU VRAM’den okuma yaparken CPU tabloları değiştiremez, bu nedenle sistem PPU boştayken tetiklenen bir dizi kesme sağlar. Bu davranışı NES zamanlarından hatırlayabilirsiniz.
Tek bir tarama satırı tamamlandığında, Horizontal Blank kesmesi çağrılır. Bu, çerçevenin henüz çizilmemiş kısmıyla oynamanıza olanak tanır.
Tüm tarama satırları tamamlandığında, Vertical Blank kesmesi çağrılır. Oyun artık grafikleri bir sonraki kare için güncelleyebilir.
Tarama çizgisinin başlangıcında tetiklenen OAM search adında ekstra bir durum vardır, bu noktada PPU o tarama çizgisinde hangi sprite’ların görüntüleneceğini işler, böylece oyun OAM hariç herhangi bir bölgeyi güncelleyebilir.
Sırlar ve Sınırlamalar
Pencere katmanının ve ekstra kesintilerin dahil edilmesi, yeni içerik ve efekt türlerine olanak sağladı.
Yalpalama etkisi
Yatay kesintiler, tamamlanmadan önce çerçevenin değiştirilmesine izin verir. Bu, her satıra farklı bir kaydırma değeri uygulanabileceği ve çerçevenin her satırının farklı hızlarda kaydırılacağı anlamına gelir.
Bu, bir Yalpalanma etkisi (bunun resmi adının bu olduğundan emin değilim) elde etti.
Ses
Ses sistemi, dört kanallı bir PSG yongası olan Ses İşleme Birimi (APU) tarafından gerçekleştirilir [8].
Fonksiyonellik
Her kanal bir dalga biçimi türü için ayrılmıştır:
Nabız
Nabız dalgaları, çoğunlukla melodi veya ses efektleri için kullanılan çok belirgin bir bip sesine sahiptir.
APU her biri bir darbe dalgası için iki kanal ayırır. Bunlar, darbe genişlikleri değiştirilerek oluşturulan dört farklı tondan birini kullanır. İlk kanalda özel bir Sweep kontrolü mevcuttur.
Sınırlı sayıda kanal nedeniyle, oyunun bir parçası olarak efektlerin çalınması gerektiğinde melodi sık sık kesintiye uğrayacaktır. Bu, Pokemon Red/Blue gibi oyunlarda, bir savaş sırasında Pokemon’un çığlığı müzik için kullanılan tüm kanallarla çakıştığında çok belirgindir.
Ses
Gürültü temelde beyaz statik gibi ses çıkaran bir dizi rastgele dalga formudur. Bunun için bir kanal tahsis edilmiştir.
Oyunlar bunu perküsyon veya ambient efektleri için kullanır.
Bu kanalda kullanılabilecek sadece 2 ton vardır, biri temiz statik, diğeri ise robotik statik üretir. Frekansı da kontrol edilebilir.
Dalga
APU, dördüncü kanalından duyulmak üzere bir özel dalga formu tanımlanmasına izin verir. Dalga, bir dalga tablosunda saklanan 32 adet 4 bitlik örnekten oluşur.
Bu kanal aynı zamanda frekansını (aynı girişten farklı müzik notaları üretmesini sağlar) ve ses seviyesini kontrol etmeyi sağlar.
Sırlar ve Sınırlamalar
Mikser stereo ses çıkışı verir, böylece kanallar sol tarafa veya sağ tarafa atanabilir, ancak bunu yalnızca kulaklıklardan duymak mümkündür! Hoparlör monodur.
Ayrıca, mikser çipi de kartuş üzerindeki özel bir pime bağlanarak, kartuşun analog sesi gerçekten vermesi şartıyla (yalnızca ekstra donanımla mümkündür) bir ekstra kanal akışına izin verir. Piyasadaki hiçbir oyun bu özelliği kullanmadı.
Oyunlar
Oyunlar assembly ile yazılır ve maksimum 32 KB boyuta sahiptirler, bunun nedeni mevcut adres alanının sınırlı olmasıdır. Ancak, bir Bellek Bankası Denetleyicisi (mapper) kullanıldığında, oyunlar daha büyük boyutlara ulaşabilir. Piyasada bulunan en büyük kartuş 1 MB ROM’a sahiptir.
Kartuşlar, oyun kayıtlarını tutmak için SRAM, saat ve harici bir pil içerebilir.
Dış iletişim
İlk kez oyunlar, çok oyunculu işlevsellik sağlayan Game Boy Link kablosunu kullanarak diğer Game Boy’larla iletişim kurabilir. Arayüz çok ilkel bir seri bağlantı türüne dayanır.
Korsanlıkla Mücadele
Bu konsol, kartuşun ROM’unu önyüklemek için kullanılan CPU’ya yerleştirilmiş bir 256 Bayt ROM içerir. Ancak oyunu hemen çalıştırmaz, önce yetkisiz kartuşların çalıştırılmasını önleyen ve ayrıca kartuşun doğru takıldığından emin olan bir dizi kontrol gerçekleştirir.
Bu kontrollerden geçebilmek için, oyunların ROM başlığına Nintendo’nun logosunun bir kopyasını (kutucuklar şeklinde) eklemesi gerekiyordu [9], bu şekilde Nintendo dağıtımı kontrol etmek için Telif Hakkı ve Ticari Marka yasalarından yararlanabilirdi, Zekice değil mi?. Game Boy ROM’u aynı zamanda karşılaştırma yapabilmek için logonun bir kopyasını da içermektedir.
Bununla birlikte, önyükleme işlemi aşağıdaki gibidir [10]:
- Konsol açıldıktan sonra, CPU 0x00 adresinden (Game Boy’un ROM konumu) okumaya başlar.
- RAM ve Ses başlatılır.
- Nintendo logosu kartuş ROM’undan Display RAM’e kopyalanır ve ardından ekranın üst kenarına çizilir. Kartuş takılı değilse, logo çöp kutucukları içerecektir. Kötü yerleştirilmişse aynı şey olabilir.
- Logo aşağı kaydırılır ve ünlü po-ling sesi çalınır.
- Oyunun Nintendo logosu konsolun ROM’unda kayıtlı olanla eşleştirilir, kontrol başarısız olursa konsol donar.
- Kartuşun doğru takıldığından emin olmak için kartuşun ROM başlığında hızlı bir checksum yapılır, kontrol başarısız olursa konsol donar.
- Konsolun ROM’u bellek haritasından kaldırılır.
- CPU oyunu yürütmeye başlar.
İlginçtir ki, ekranda görüntülenen Nintendo logosu VRAM’den temizlenmez, bu nedenle oyunlar kendi logolarını tanıtmak için bazı animasyon ve efektler uygulayabilir.
Oyunların içinde SRAM boyutunu kontrol etmek (normalde Bootleg’lerde daha büyüktür) ve oyunun rastgele noktalarında ROM’u sağlama toplamı almak gibi daha fazla korsan karşıtı önlem uygulanabilir.