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 bir başka bileşendir ve selefi grafik çipinin geliştirilmiş bir versiyonu olarak tanımlanabilir (aynı adla).
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, resim 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. Eh, yeni PPU da LCD'lerin de yenilenmesi gerektiğinden dolayı bu metodolojiyi izliyor. Böyle yaparak, bu konsol CRT tabanlı efektler sayesinde NES geliştiricilerinin daha önce yaratıcı içerikler sunabilmesini sağladı.
İçeriğin düzenlenmesi
PPU, 8 KB VRAM veya 'Display RAM'i ile bağlantılıdır. Bunu yaparken, CPU'ya kontrollü erişim sağlar. Bu 8 KB, PPU'nun grafikleri işlemek için ihtiyaç duyacağı verilerin çoğunu içerecektir. Geri kalanlar daha hızlı erişim hızları gerektirdiğinden 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. Bununla birlikte, uyulması gereken birçok kural vardır (bunları ilerleyen bölümlerde göreceksiniz).
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

Bir ızgara ile ayrılmış birden fazla karo.

Tek bir karo.
PPU, grafikleri, özellikle de sprite ve arka planları oluşturmak için temel bir bileşen olarak tiles kullanır .
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. Ancak pratikte gri tonları bir 'renk' paleti aracılığıyla seçilir. Tek renkli Game Boy'lar, bu paletleri tanımlayan register'lar içerir. Daha önce söylediğim gibi, seçim yapabileceğiniz sadece dört renk/gri tonu var, bu yüzden tek bir 8-bit register dört tonluk bir paleti sorunsuzca barındırabilir. Bununla birlikte, sistem sınırlı kullanımlı üç register (dolayısıyla, üç programlanabilir palet) sağlar (daha fazlası daha sonra açıklanacak).
Ayrıca, tile'lar iki desen tablosunda gruplandırılır.
Resmi oluşturmak için karolara Tile map 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ı

VRAM'de tahsis edilmiş Arka Plan haritası.

Arka Plan haritasının seçilen alanı. Seçili kısmın üst kısmın bir bölümünü içerdiğine dikkat edin, bu Window katmanı ile örtüşecektir.

Görüntülenen Background haritası.
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. Ayrıca, bu katman için yalnızca bir palet mevcuttur.
Pencere

Görüntülenen Window haritası. Oyun, son scanline'lar sırasında bunu etkinleştirir. Bu nedenle, ekranın alt kısmında yalnızca ilk satırlar gösterilir.
Pencere, arka plan ve sprite'ların üstünde görüntülenen kutucukları içeren bir 160x144 piksel katmandır. Bu katman kaymıyor.
Geriye kalan döşeme haritası Window katmanına atanabilir, ayrıca Arka Plan katmanıyla aynı paleti paylaşır.
Sonuç olarak, bu aptalca bir özellik gibi gelebilir. Pencerenin saydam olmaması ve Dolayısıyla Arka Planı tamamen gizlemesi nedeniyle, 'Bu ne işe yarar?' diye merak edebilirsiniz. Hem Arka Plan hem de Pencere, ekranın farklı bölümlerinde aynı anda kullanılabilir. Bu, esas olarak ekranın altında bilgi görüntülemek için tasarlanmıştır, ancak NES'te bu, karmaşık ve zamanlanmış yazmalar gerektirirken, Game Boy'un PPU'su bunu otomatik olarak halledebilir.
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
![]()
Render edilmiş Sprite katmanı.
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.
Bu katman ayrıca bir ekstra renk seçeneği gerektirir: Transparent. Öncelikle, bu, dört yerine yalnızca üç farklı gri görüntüleyebilecekleri anlamına gelir. Neyse ki, iki özel palet seçeneği sunulan bu katman özellikle sağlanmıştır.
Object Attribute Memory veya 'OAM', PPU içinde depolanan ve sprite olarak kullanılacak karoları belirten bir haritadır. Bir karo haritası kullanmak yerine, spritelar OAM'de tanımlanır. Oyunlar genellikle bu bölgeyi çipin içinde bulunan OAM DMA birimini çağırarak doldurur, DMA verileri ana RAM'den veya oyun ROM'undan alır ve OAM'a gönderir. Şimdi, DMA çalışırken, CPU harici belleğe erişemez (bu süre zarfında HRAM kullanmanın önemi buradan gelir).
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 scanline tamamlandığında, Horizontal Blank dönemi başlar. Bu, çerçevenin henüz çizilmemiş kısmıyla oynamanıza olanak tanır.
Tüm scanline'lar tamamlandığında, Vertical Blank periyodu başlar ve özel bir interrupt ç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ı.
Wobble Effect

Video - The Legend of Zelda: Link's Awakening (1993). Spoiler!
Horizontal interrupts, 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, ilginç bir Wobbling etkisi (bunun resmi adının bu olduğundan emin değilim) elde etti.
Renk eklemeleri
Game Boy Color'ın PPU'su, orijinalinin genişletilmiş bir versiyonu gibi davranır. 'Color' modelinin bu markaya ek olarak neler getirdiğini şimdi göreceksiniz.
Çalışma modları

The Legend of Zelda: Link's Awakening DX (1998).
Bir CGB modunda çalışan hibrit bir Game Boy Color oyunu.

Game Boy Color'da görüldüğü gibi, Super Mario Land 2. Bu, renkli bir palet ekler ve DMG modunda çalışır.
Öncelikle, uyumluluk nedenleriyle, yeni PPU iki çalışma moduna sahiptir. Yine de Nintendo, sadece monokrom oyunlarda bile Color kullanıcılarının iyileştirmeleri görmesini istedi. Sonuç olarak, iki çalışma modu aşağıdaki gibidir:
- CGB modu: Yeni Game Boy Color oyunlarını oluşturan tüm görsel iyileştirmelerle genişletilmiş PPU modu.
- DMG modu: Tüm ekstra özelliklerin devre dışı bırakıldığı geleneksel mod. Ancak, 'İşletim Sistemi' bölümünde göreceksiniz ki monokrom oyunlar yine de renk paletleriyle geliştirilmiştir.
(Yeni) İçeriğin düzenlenmesi
Artık CGB anakartında 16 KB VRAM bulunuyor, bu da orijinal VRAM miktarının iki katıdır. CPU'nun adresleme sınırlamaları nedeniyle, bu yeni düzen iki 8 KB bank şeklinde uygulanmıştır, bir anahtar görevi gören yeni bir kayıtçı (VBK olarak adlandırılır) ile. Öte yandan, PPU her iki bank'a aynı anda erişebilir. Günün sonunda, bu, programcıların yalnızca VBK yardımıyla VRAM bankalarını doldurmaları ve ardından döşeme haritasında döşemenin bulunduğu bankayı belirtmeleri gerektiği anlamına gelir, böylece PPU geri kalanıyla ilgilenebilir.
Öyleyse, fazladan VRAM ile ne yapabilirsiniz? Birçok şey:
- İki kat daha fazla tile depolayabilir.
- Daha fazla renk yelpazesi sunan daha fazla palet saklayabilir.
- Daha fazla efekt kodlamak ve ek paletleri ele almak için tile metadata alanını genişletebilir.
Görseller
Yeni PPU sayesinde, programcılar artık 32.768 renkten oluşan renk paletlerini tanımlayabilirler.
Öncelikle, geliştiriciler şimdi Palette Memory adı verilen yeni bir alanı doldurmalıdır, bu alan en fazla on altı renk paleti (yarısı Arka Plan ve Pencere için, yarısı sprite'lar için) saklar ve bunlar dört rengi kodlar . Her giriş 16-bit değerinde (2 bayt) ve yalnızca 15 bit kullanılır. Palette Memory, CPU tarafından adreslenmez, ancak bu belleği üzerine yazmak için yeni bir register tampon olarak kullanılır (Super Nintendo'da bulunan bir metodoloji). Genel olarak, CPU paletleri bu şekilde tanımlar.
Bununla birlikte, Arka Plan ve Pencere karoları bu sekiz paletin herhangi birine referans verebilir. Aynı durum Sprite döşemelerinde de olur, ancak bir giriş 'şeffaf' renk için ayrıldığından üç renkli paletlerle sınırlıdırlar.
Ekstra alan
Devam ediyoruz, Tile setleri şimdi iki kat daha büyük. Böylece, programcılar VRAM'e iki kat daha fazla tile depolayabilirler. Background/Window Tile maps da genişletildi, bu da ekstra metadata kodlanmasıyla sonuçlandı. Sonuç olarak, bu katmanların yeteneklerini genişletildi. Örneğin, tile'lar artık yatay ve dikey olarak çevrilebilir, böylece oyun VRAM'de yinelenen grafikleri depolamaktan kurtulur (bu da, daha fazla benzersiz içerik çizmek için kullanılabilir).
Ayrıca, CPU CGB, bir ekstra DMA ünitesi de içerir, bu ünite Game Pak veya WRAM içeriğini VRAM'e kopyalayabilir. Bu İki modda çalışır:
- General-purpose DMA: Transfer herhangi bir zamanda gerçekleşecek ve DMA, diğer bellek erişimlerinin önceliğini alacaktır. Bu nedenle, programcıların bu bileşeni ne zaman (scanline esnasında mı yoksa dışında mı) ve nasıl (kopyalanacak veri miktarı) kullanacakları konusunda dikkatli olmaları gerekir, çünkü yanlış kullanım ekran yırtılmasına yol açabilir (transfer sırasında VRAM erişimi engellenecektir).
- Horizontal Blank (H-Blank) DMA: Aktarım sadece H-Blank dönemlerinde gerçekleşecektir. Bu, ekran bozukluklarını önler ancak içeriği yalnızca 16 Baytlık gruplar halinde aktarabilir ve LCD taraması sırasında duraklar.
Bir kez daha, bu birim programcılara dönemlerin başlangıçta boşta bırakıldığı için daha zengin içerik sağlama konusunda yeni olanaklar sunar.



