Game Boy'un / Color'un Mimarisi

Rodrigo Copetti tarafından hazırlanan pratik bir analiz

EuropaYou tarafından çevrildi

Klasik - Son güncelleme: 3 Kasım 2024

Mevcut olan diller: 🇬🇧 - English, 🇫🇷 - Français, 🇵🇱 - Polski, 🇪🇸 - Español, 🇹🇷 - Türkçe, 👋 - Çeviri ekleyin


Bu baskı hakkında

'Klasik' sürüm, 'modern' muadiline alternatif bir sürümdür. Çalışması için Javascript, son teknoloji CSS veya karmaşık HTML gerektirmez, bu da onu erişilebilirlik araçları veya eski internet tarayıcıları kullanan okuyucular için ideal hale getirir. Öte yandan, e-Kitap kullanıcıları artık e-Kitap sürümünü kontrol edebilirler.

Bu basım içerik açısından aynıdır. Bununla birlikte, etkileşimli widget'lar saf HTML ile çalışacak şekilde basitleştirilmiştir, ancak bunlar okuyucunun "tam sürümü" denemek istemesi durumunda orijinal makaleye bir bağlantı sunacaktır.

Her zaman olduğu gibi, bu makale okuyucuların hataları bildirmesine veya değişiklik önermesine olanak sağlamak için Github'da mevcuttur. Ayrıca seriyi anlamaya yardımcı olacak destekleyici bir okuma listesi de mevcuttur. Yazar ayrıca mevcut ve gelecek makalelerin kalitesini artırmaya yardımcı olmak için bağışları ve çevirileri de kabul etmektedir.


İçindekiler

  1. Destekleyici görüntüler
  2. Hızlı bir giriş
    1. Gökkuşağı analizi
  3. İşlemci (CPU)
    1. CPU çekirdeği
      1. Renk etkisi
    2. Donanımsal erişim
    3. Kullanılabilir hafıza
  4. Grafikler
    1. İçeriğin düzenlenmesi
    2. Kare Oluşturulması
      1. Kareler
      2. Arka Plan Katmanı
      3. Pencere
      4. Spritelar
      5. Sonuç
    3. Sırlar ve Sınırlamalar
      1. Wobble Effect
    4. Renk eklemeleri
      1. Çalışma modları
      2. (Yeni) İçeriğin düzenlenmesi
        1. Görseller
        2. Ekstra alan
  5. Ses
    1. Fonksiyonellik
      1. Nabız
      2. Dalga
      3. Ses
    2. Sırlar ve Sınırlamalar
  6. İşletim Sistemi
    1. Gözden geçirilmiş dizi
  7. Oyunlar
    1. Kartuş türleri
    2. Dış iletişim
  8. Korsanlıkla Mücadele
  9. Hepsi bu kadar
  10. Copyright and permissions
  11. Kaynaklar / Okumaya Devam Edin
  12. Katkıda Bulunma

Destekleyici görüntüler

Model

Image
Orjinal Game Boy.
Japonya'da 21/04/1989, Amerika'da 31/07/1989 ve 28/09/1990'da Avrupa'da satışa sunuldu.
Image
Game Boy Color adlı yeni nesil halefi.
21/10/1998 tarihinde Japonya'da, 18/11/1998 tarihinde Kuzey Amerika'da, 23/11/1998 tarihinde Avrupa'da piyasaya sürüldü.

Anakart

Image
Anakart
Revizyon '04' gösteriliyor. Not: 'DMG' orijinal Game Boy modelinin adlarından biridir.
Image
Önemli parçaları etiketlenmiş anakart

Diyagram

Image
Ana mimari diyagramı
Orijinal Game Boy'un.

Hızlı bir giriş

Game Boy serisi, 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.

Gökkuşağı analizi

Bu konsolun muazzam popülaritesi, çeşitli revizyonlarla sonuçlandı (örneğin, Game Boy Pocket, Light ve hatta Super Nintendo kartuşları şeklinde). Aslında, Game Boy markası iki nesli kapsar. 4. nesilde, monokrom Game Boy ve onun revizyonlarını buluyoruz ve bir sonraki nesilde Game Boy Color (Virtual Boy’un ölümünden sonra piyasaya sürüldü) yer alıyor. İyi haber şu ki bu makale her iki ucu da kapsıyor. Sonuç olarak, Game Boy’un nasıl çalıştığını ve teknolojisinin daha sonra Game Boy Color’a nasıl dönüştüğünü iyi bir şekilde anlayacaksınız.


İş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 System On a Chip (SoC) adı verilir ve bu durumda, Nintendo’nun ihtiyaçlarına (diğer şeylerin yanı sıra güç verimliliği, korsanlığa karşı koruma ve ekstra G/Ç) göre uyarlanmasına olanak tanıyan bu konsol için özel olarak üretilmiştir. Aynı zamanda, bu çip herhangi bir perakende kataloğunda bulunamaz, yani o zamanki rakipler bunu klonlamakta daha zorlandılar.

Bununla birlikte, Game Boy’da bulunan SoC, DMG-CPU veya Sharp LR35902 [1] olarak adlandırılır ve adından da anlaşılacağı gibi Sharp Corporation tarafından üretilmiştir. Bu şirket, Ricoh (NES’in CPU tedarikçisi) ile birlikte Nintendo ile yakın bir ilişki içindeydi.

CPU çekirdeği

DMG-CPU’da ana işlemci bir Sharp SM83 [2] ve Z80 (Sega Master System’de kullanılan aynı CPU) ile Intel 8080 arasında bir karışımdır. Bu işlemci ~4,19 MHz hızında çalışır, bu da ortalama 1 MHz CPU’dan daha hızlıdır, ancak saat hızlarının aldatıcı olabileceğini unutmayın.

Image
DMG-CPU, Game Boy’un anakartında bulunur.

Şimdi, Master System analizini yaptığımda, Z80’in 8080’in bir üst kümesi olduğunu açıklamıştım. Peki, SM83’ün bu ikisinden neyi eksik ve neyi fazla? [3]

Ayrıca Sharp, Z80 ya da 8080’de bulunmayan birkaç yeni register da eklemiştir. Nintendo/Sharp’ın donanımı düzenleme biçimiyle ilgili belirli işlemleri optimize ederler. Bunun bir örneği de yeni LDH komutudur (‘load from high memory’ [5] anlamına gelir), bu komut özellikle memory map’in son 256 baytında (adreslerin $ff00’dan başladığı yerde) çalışmak üzere eklenmiştir ve en önemlisi bir bayt daha az yer kaplar (ve dolayısıyla daha hızlıdır).

Renk etkisi

Image
Game Color’ın Ana Kartı [6].
Image
Önemli kısımları etiketlenmiş aynı resim.

Yaklaşık 10 yıl sonra, Virtual Boy ve onun ileri teknoloji donanımının terk edilmesinden sonra, mütevazı bir halef geldi: Game Boy Color. İçinde, birkaç eklemeler taşıyan yeni bir SoC olan CPU CGB bulunmaktadır. Ancak, SM83 CPU çekirdeği, saat hızı iki katına çıkmış (yani ~8.38 MHz hızında) olmasına rağmen aynı kalıyor.

On yıl sonra Nintendo’nun aynı CPU’yu kullanmaya devam edeceğini düşünmek zor, ancak böyle bir karar şu avantajlarla birlikte gelir:

Ancak, bu, 90’ların sonları standartlarına göre eski teknoloji benimsemenin maliyetiyle gelir. CPU pazarının durumuna bakarak Nintendo’nun kaçırdığı fırsatları fark etmek için yeterli (adil olmak gerekirse, Nintendo Virtual Boy ile denedi).

Donanımsal erişim

SM83’de bir 8 bitlik veri yolu ve bir 16 bitlik adres yolu vardır, böylece 64 KB’a kadar bellek adreslenebilir. Memory map esas olarak aşağıdaki uç noktalardan oluşur [7]:

Bunlar, makale boyunca açıklanacaktır.

Kullanılabilir hafıza

Image
DMG’nin (orijinal Game Boy) bellek mimarisi. PPU, VRAM erişimini yönetir.

Nintendo anakarta 8 KB RAM yerleştirmiştir, bu genel amaçlı kullanım içindir (ki buna Work RAM’i veya ‘WRAM’ adını vermişlerdir) [8]. Bunun NES’in içerdiğinden dört kat daha büyük olduğuna dikkat edin.

SoC’de yer alan ilave 127 B RAM var. High RAM veya ‘HRAM’ olarak adlandırılır ve SM83’ün benzersiz LDH talimatı ile daha hızlı erişilebilen veriler için küçük bir alan sağlar. Bu, 6502’nin bellek konumuna dayalı performansı optimize eden “Zero Page” moduna [9] çok benzer. Şimdi, High RAM teknik olarak genel RAM’den daha hızlı erişilebilir değildir, ancak CPU için öncelikli bir alandır. DMA bileşenini tartıştığım ‘Grafikler’ bölümüne ulaştığınızda bunun ne anlama geldiğini göreceksiniz.

Image
CGB’nin (Game Boy Color) genişletilmiş bellek mimarisi. Yine PPU, VRAM’e erişim konusunda hakemlik yapar.

Daha sonra, Color varyantıyla birlikte, Nintendo WRAM’i 32 KB’ye genişletti. Ancak, CPU değişmeden kaldığı için (özellikle adresleme yetenekleri), mevcut adres alanı taşmadan tüm yeni belleği bağlamak mümkün değildir. Bununla başa çıkmak için, Nintendo’nun mühendisleri bank switching tekniğini kullandı. Başlangıçta NES kartuşlarında bulunan, Game Boy Color yalnızca 8 KB bellek alanı kullanarak bu 32 KB’ye erişmek için aynı prensibi kullanır. Hile basittir: son 4 KB, yedi farklı bank kullanılarak değiştirilebilir. Sonuç olarak, CPU bir bank değiştirici işlevi gören ekstra bir kayıt (“SVBK” adı verilen) sağlar, geliştiricilerin genişletilmiş belleği incelemek için bunu kullanmaları gerekir.


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 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

Image
PPU’nun bellek mimarisi.

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

Image
Birden fazla karo.
Image
Bir ızgara ile ayrılmış birden fazla karo.
Image
Tek bir karo.
Desen Tablosunda bulunan karolar.

PPU, grafikleri, özellikle de sprite ve arka planları oluşturmak için temel bir bileşen olarak tiles kullanır [10].

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ı

Image
VRAM’de tahsis edilmiş Arka Plan haritası.
Image
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.
Image
Görüntülenen Background haritası.
Arka plan haritası oluşturma işlemi.

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

Image
Ayrılmış Window haritası.
Image
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 oluşturma işlemi.

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

Image
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ç

Image
Son sonuç. Tada!

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

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ı

Image
The Legend of Zelda: Link’s Awakening DX (1998).
Bir CGB modunda çalışan hibrit bir Game Boy Color oyunu.
Image
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:

(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:

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 [11]. 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 [12] İki modda çalışır:

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.


Ses

Ses sistemi, dört kanallı bir PSG yongası olan Ses İşleme Birimi (APU) tarafından gerçekleştirilir [13].

İlginçtir ki, bu modeller arasında evrim geçirmeyen birkaç bölümden biridir. Aslında, osilatörlerin hızını değiştirirseniz, daha ‘iyi’ sesler duymazsınız, sadece daha yüksek bir pitch duyarsınız, bu yüzden hızlandırılamaz bile.

Fonksiyonellik

Dört kanalın her biri bir dalga biçimi türü için ayrılmıştır:

Nabız

Pulse 1 kanalının osiloskop görünümü.
Pulse 2 kanalının osiloskop görünümü.
Tüm ses kanallarının osiloskop görünümü.
Pokemon Red/Blue (1996).

Pulse dalgaları, çoğunlukla melodi veya ses efektleri için kullanılan çok belirgin bir bip sesine sahiptir.

APU her biri bir pulse dalgası için iki kanal ayırır. Bunlar, pulse 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; bu yüzden hiçbir Pokémon savaş müziği perküsyon kullanmaz.

Dalga

Wave kanalının osiloskop görünümü.
Tüm kanallarının osiloskop görünümü.
Pokemon Red/Blue (1996).

APU, üçü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.

Ses

Noise kanalının osiloskop görünümü.
Tüm ses kanallarının osiloskop görünümü.
Pokemon Red/Blue (1996).

Ses temelde beyaz statik gibi ses çıkaran bir dizi rastgele dalga biçimidir. 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.

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! Çünkü hoparlör monodur.

Ayrıca, mixer çipi de kartuş üzerindeki özel bir pine bağlanarak, kartuşun analog sesi vermesi şartıyla (yalnızca ekstra donanımla mümkündür) bir ekstra kanal akışına izin verir. Bununla birlikte, piyasadaki hiçbir oyun bu özelliği kullanmadı ve Game Boy Advance’ın geri uyumlu alt sistemi üzerinde de bu pini bulamazsınız.


İşletim Sistemi

NES’in aksine, doğrudan oyuna başlayan Game Boy, her zaman dahili 256 Byte ROM ile başlaması ve ardından oyun koduna geçmesi için tasarlanmıştı. Önyükleme süreci şu şekildedir [14]:

  1. Konsol açıldıktan sonra, CPU 0x0000 adresinden (Game Boy’un ROM konumu) okumaya başlar.
  2. RAM ve APU başlatılır.
  3. 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 bozuk tile’lar içerecektir. Kötü yerleştirilmişse de aynı şey olabilir.
  4. Logo aşağı kaydırılır ve ünlü po-ling sesi çalınır.
  5. Oyunun Nintendo logosu, konsolun ROM’unda kayıtlı olanla eşleştirilir. Daha sonra, kartuşun doğru takıldığından emin olmak için kartuşun ROM başlığında hızlı bir checksum yapılır. Bu kontrollerin herhangi biri başarısız olursa, konsol donar.
  6. Konsolun ROM’u bellek haritasından kaldırılır.
  7. 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.

Game Boy’un açılış ekranı ve logoyla uğraşan bir homebrew demosu olan 20y.

Gözden geçirilmiş dizi

Image
Game Boy Color’ın açılış ekranı, logo artık kaymıyor ancak gökkuşağı efekti içeriyor.

Bir kez daha, Game Boy Color durumunda, ROM’un içeriğinde köklü değişiklikler buluyoruz. Örneğin, ROM’un boyutu şimdi 2 KB [15] ve rutinleri yeni bir davranış sergiler:


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 Memory Bank Controller (mapper) kullanımı ile oyunlar daha büyük boyutlara ulaşabilir. Piyasada bulunan en büyük Game Pak (kartuş) 1 MB ROM’a sahiptir (Game Boy Color’da ise 8 MB’dır).

Game Pak’lar, oyun kayıtlarını tutmak için SRAM’ın yanı sıra gerçek zamanlı bir saat ve harici bir pil içerebilir, ancak bunların hepsi isteğe bağlıdır.

Kartuş türleri

Game Boy Color’un desteklediği iki işletim modu nedeniyle, Nintendo üç farklı türde Game Boy oyununu listeledi:

Dış iletişim

Image
Farklı konsol çeşitleri için Game Boy Link kablosu [16]. Orijinal konsolun piyasaya sürülmesinden bu yana, sonraki revizyonlar soketi küçültmüştür, ancak aynı sayıda pini korumuştur.

İlk kez oyunlar, çok oyunculu işlevsellik sağlayan Game Boy Link kablosunu kullanarak diğer Game Boy’larla iletişim kurabilir, örneğin arayüz çok ilkel bir seri bağlantı türüne dayanır.

Orijinal Game Boy, bilgiyi saniyede 8 Kbit (1 KB/sn) hızla aktarırken, Color varyantı saniyede 512 Kbit’e kadar (64 KB/sn) ulaşabilir, bu daha yüksek hız ‘high speed’ modu olarak biliniyordu.

İkinci varyant ayrıca bir kızılötesi yayıcı ve alıcı (sırasıyla bir LED ve bir fototransistörden yapılmış) ile birlikte gelir [17]. Bu, Pokemon Gold ve benzeri oyunlarda görüldüğü gibi, Game Boy Color’lar arasında kablosuz veri alışverişini mümkün kıldı. Ancak, sistemin herhangi bir iletişim protokolü uygulamadığını, yalnızca IR sensörünün eylemini (yayma veya alma), aktarılan tek bit (0 veya 1) ve alınan son biti kodlayan tek bir kayıt (RP) içerdiğini göreceksiniz. Yine de, geliştiricilerin işini kolaylaştırmak için Nintendo, resmi Game Boy Geliştirici kılavuzuna [18] bir referans uygulaması dahil etti.


Korsanlıkla Mücadele

‘İşletim Sistemi’ bölümünde gördüğünüz gibi, konsol asla bir 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 [19], bu şekilde Nintendo dağıtımı kontrol etmek için Telif Hakkı ve Ticari Marka yasalarından yararlanabilirdi. Oldukça zekice, değil mi?

Tersine, Sega v. Accolade davası sonrasında, bu tür gereksinimler adil kullanım kapsamına girdiğinden, herhangi bir şirkete telif hakkıyla korunan logoları kullanma hakkı verildi.

Yine de, 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.


Hepsi bu kadar


Katkıda Bulunma

Bu makale Konsolların Mimarileri serisinin bir parçasıdır. Eğer ilginç bulduysanız lütfen bağış yapmayı düşünün. Bağışınız, mevcut ve gelecek makalelerin kalitesini artırmama yardımcı olacak araç ve kaynakların satın alınmasını finanse etmek için kullanılacaktır.

Donate with PayPal
Become a Patreon

Ayrıca eBook sürümünü İngilizce olarak da satın alabilirsiniz. Kârları bağış olarak kabul ediyorum.

Image

Bu makale için arzu edilen araçların ve en son kazanımların bir listesi burada takip edilmektedir:

Interesting hardware to get (ordered by priority)

Alternatif olarak, değişiklikler önererek ve/veya çeviriler ekleyerek yardımcı olabilirsiniz.


Copyright and permissions

This work is licensed under a Creative Commons Attribution 4.0 International License. You may use it for your work at no cost, even for commercial purposes. But you have to respect the license and reference the article properly. Please take a look at the following guidelines and permissions:

Article information and referencing

For any referencing style, you can use the following information:

For instance, to use with BibTeX:

@misc{copetti-gameboy,
    url = {https://classic.copetti.org/writings/consoles/game-boy/},
    title = {Game Boy / Color Architecture - A Practical Analysis},
    author = {Rodrigo Copetti},
    year = {2019}
}

or a IEEE style citation:

[1]R. Copetti, "Game Boy / Color Architecture - A Practical Analysis", Copetti.org, 2019. [Online]. Available: https://classic.copetti.org/writings/consoles/game-boy/. [Accessed: day- month- year].

Special use in multimedia (Youtube, Twitch, etc)

I only ask that you at least state the author’s name, the title of the article and the URL of the article, using any style of choice.

You don’t have to include all the information in the same place if it’s not feasible. For instance, if you use the article’s imagery in a Youtube video, you may state either the author’s name or URL of the article at the bottom of the image, and then include the complete reference in the video description. In other words, for any resource used from this website, let your viewers know where it originates from.

This is a very nice example because the channel shows this website directly and their viewers know where to find it. In fact, I was so impressed with their content and commentary that I gave them an interview 🙂.

Appreciated additions

If this article has significantly contributed to your work, I would appreciate it if you could dedicate an acknowledgement section, just like I do with the people and communities that helped me.

This is of course optional and beyond the requirements of the CC license, but I think it’s a nice detail that makes us, the random authors on the net, feel part of something bigger.

Third-party publishing

If you are interested in publishing this article on a third-party website, please get in touch.

If you have translated an article and wish to publish it on a third-party website, I tend to be open about it, but please contact me first.


Kaynaklar / Okumaya Devam Edin

Ses

İşlemci (CPU)

Oyunlar

Grafikler

İşletim Sistemi

Fotoğrafçılık