Game Boy Mimarisi

Tarafından pratik bir analiz Rodrigo Copetti

EuropaYou tarafından çevrildi

Klasik - Son güncelleme: 5 Ocak 2023

Mevcut olan diller: 🇬🇧 - English, 🇫🇷 - Français, 🇵🇱 - Polski, 🇹🇷 - 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ı da kabul etmektedir.


İçindekiler

  1. Destekleyici görüntüler
  2. Hızlı bir giriş
  3. İşlemci (CPU)
    1. Kullanılabilir hafıza
    2. Donanımsal erişim
  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. Yalpalama etkisi
  5. Ses
    1. Fonksiyonellik
      1. Nabız
      2. Ses
      3. Dalga
    2. Sırlar ve Sınırlamalar
  6. Oyunlar
    1. Dış iletişim
  7. Korsanlıkla Mücadele
  8. Hepsi bu kadar
  9. Referencing
  10. Kaynaklar / Okumaya Devam Edin
  11. Katkıda Bulunma
  12. Değişiklik Notları

Destekleyici görüntüler

Modeller

Image
Orjinal Game Boy.
Japonya'da 21/04/1989, Amerika'da 31/07/1989 ve 28/09/1990'da Avrupa'da satışa sunuldu

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ı

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 GameBoy’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]

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:


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 Gameboy 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ı), Gameboy’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 Gameboy’da da desteklenebilir.

İçeriğin düzenlenmesi

Image
PPU’nun bellek mimarisi.

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

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

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 Arka Plan 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.

Pencere

Image
Ayrılmış Pencere haritası.
Image
Görüntülenen Pencere haritası. Oyun, son tarama çizgileri 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. 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

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.

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ç

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

The Legend of Zelda: Link’s Awakening (1993). Spoiler!

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

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

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ü kanalının osiloskop görünümü.
Tüm ses kanallarının osiloskop görünümü.
Pokemon Red/Blue (1996).

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

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

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?. Gameboy 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]:

  1. Konsol açıldıktan sonra, CPU 0x00 adresinden (Gameboy’un ROM konumu) okumaya başlar.
  2. RAM ve Ses 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 çöp kutucukları içerecektir. Kötü yerleştirilmişse 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, kontrol başarısız olursa konsol donar.
  6. 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.
  7. Konsolun ROM’u bellek haritasından kaldırılır.
  8. 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.

20y, logo ile oynayan bir homebrew demosu.

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 Architecture - A Practical Analysis},
    author = {Rodrigo Copetti},
    year = {2019}
}

or a IEEE style citation:

[1]R. Copetti, "Game Boy 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

Korsanlıkla Mücadele

Ses

İşlemci (CPU)

Oyunlar

Grafikler

Fotoğrafçılık