Game Boy kartuşlarının nasıl çalıştığı hakkında bilmek istemeyeceğiniz kadar fazla ayrıntı
(abc.decontextualize.com)- Kendi Game Boy kartuşunu üretmek için yıllar süren araştırma ve tasarım sürecinden geçildi
- Bu yazı, özel Game Boy kartuşu yapmak için gereken başlıca teknik bilgileri yeni başlayanların bakış açısından sistematik biçimde derliyor
- Game Boy, basit ama genişletilebilir donanım yapısı sayesinde retro oyun geliştirme ve donanım hackleme topluluğu için cazip bir platform
- Kartuşlar oyun verisini ve ek donanımı (ör. RTC, sensörler vb.) içinde barındırabilir, böylece Game Boy'a yeni işlevler kazandırır
- Bellek bankası denetleyicisi (MBC) devresi sayesinde kapasite artırımı ve seçmeli bellek erişimi mümkün olur ve oyunlar farklı şekillerde çalıştırılabilir
Giriş ve hedefler
- Yazar, kişisel olarak Game Boy kartuşunu tamamen sıfırdan üretme hedefi koyuyor
- Game Boy kartuşlarının iç yapısı ve çalışma prensiplerine dair bilgiyi açık kaynak olarak derleyip yayımlıyor
- Yazının amacı, zor teknik bilgileri acemi bakış açısıyla herkesin takip edebileceği şekilde yeniden yapılandırmak
- Donanımın iç çalışma prensiplerinden ziyade, dışarıdan gözlemlenebilen davranışa (behavior) odaklanıyor
- Açıklamalar, DMG (ilk nesil Game Boy) SoC'si temel alınarak yapılıyor; Game Boy ailesindeki cihazların temel kartuş arayüzü benzerdir
Game Boy platformunu özel kılan şey
- Game Boy, sadeliği ve tasarımının sezgiselliği sayesinde donanım ve yazılım yapısını zihinde kavramayı kolaylaştırır
- Taşınabilirlik ve düşük güç tüketimi özellikleri ile karmaşık koruma mekanizmaları veya bölge kilitleri olmayan yapısı, herkesin geliştirme yapabilmesini sağlar
- Teknik dokümantasyon, donanım şemaları ve topluluk tabanlı kaynaklar bol miktarda birikmiştir
- Resmî/gayriresmî oyun kütüphanesi çok geniştir; açık kaynak geliştirme toolchain'leri ve görsel betikleme araçları da aktif biçimde sürdürülmektedir
- Yalnızca donanım sürücüleri değil, doğru emülatörler ve FPGA gerçekleştirimleri gibi yüksek genişletilebilirliğe sahip bir ekosistem de oluşmuştur
Game Boy kartuşunun temel yapısı
- Geçmiş dönem konsollarında yazılım ile donanım arasındaki sınır belirsizdir
- Game Boy'da işletim sistemi ya da yerleşik kalıcı depolama yoktur. Tüm çalıştırılabilir kod ve ek donanım kartuşun içinde bulunur
- Bu yüzden kartuş tam olarak çalışmıyorsa Game Boy açılıp çalışamaz
- Kartuşun alt kısmındaki 32 pinli 'edge connector', cihaz ile kartuş arasında sinyal alışverişinin ana arayüzüdür
- Kartuş ile ana cihaz arasındaki sinyaller güç, kontrol (okuma/yazma/çip seçimi), adres veri yolu (16 bit) ve veri yolu (8 bit) olarak sınıflanır
Veri yolu (Bus) ve çalışma mantığı
- Bus, birden fazla bileşenin aynı sinyal hatlarını paylaşarak veriyi iletebildiği bir yapıdır
- Game Boy'un CPU'su istediği adresi adres veri yoluna, veriyi ise veri yoluna koyar
- Bus yapısı paralel (parallel) olduğundan, her bite karşılık gelen fiziksel pinler gerçekten vardır
- Bu yapı hız avantajı sağlar; ancak veri yolu paylaşıldığı için çakışma/contention (aynı anda yazma) riski de bulunur
- Birden fazla IC aynı anda veri çıkışı verirse kısa devre (aşırı ısınma ve arıza riski) oluşabileceğinden, her zaman yalnızca tek bir IC etkin olmalıdır
Game Boy'daki başlıca bellek türleri
- Game Boy en fazla 4 tür bellek IC'si barındırabilir: yerleşik RAM, video RAM, kartuş ROM'u ve kartuş RAM'i
- Pratikte video RAM bağımsız bir veri yolu kullandığı için genel açıklamalarda çoğu zaman dışarıda bırakılır
- Yerleşik RAM, kartuş RAM'i ve ROM aynı adres veri yolunu ve veri yolunu paylaşır
- Aynı anda yalnızca bir çip veri yolunda okuma/yazma işlemi yapmalıdır
- Pratik terminolojide bunlar yerleşik RAM (WRAM), kartuş RAM'i (SRAM), video RAM (VRAM) ve yüksek hızlı RAM (HRAM) olarak da anılır
Chip Select (çip seçimi) ve devre yapısı
- Her bellek çipinde çip seçimi sinyali (CS/CE, Chip Select/Chip Enable) pini bulunur
- Çip seçimi sinyalinin durumuna göre yalnızca belirli bir çip veri yoluna erişebilir
- Game Boy, çip seçimi için adres veri yolunun üst 3 bitini (A15, A14, A13) ve CPU'nun _CS pinini yeniden kullanır
- Bu bağlantı düzeni, aynı anda iki veya daha fazla çipin etkinleşmemesini garanti eder
- Örneğin A15 yalnızca 0 olduğunda ROM çipi etkinleşir; RAM ise ayrı bir mantıkla etkinleştirilir
Bellek haritası (Memory Map) ve programcı bakış açısı
- Donanım düzeyindeki adres/pin durumları soyutlanır; programcı yalnızca mantıksal bellek haritasını görür
- 16 bit adres alanında 0x0000–0x7FFF aralığı kartuş ROM'una, 0xA000–0xBFFF kartuş RAM'ine, 0xC000–0xDFFF ise yerleşik RAM'e eşlenir
- Belirli bir adrese erişildiğinde ilgili bellek aralığı otomatik olarak etkinleşir, geri kalanı devre dışı kalır
- Bellek haritası belgeleri, Game Boy dokümantasyonunda temel başvuru kaynaklarıdır
Bellek Bankası Denetleyicisi (MBC; Memory Bank Controller)
- MBC, Game Boy kartuşlarında 32KB'tan büyük ROM kapasitesi ile ek RAM/çevre birimi bağlantısını mümkün kılan temel devredir
- Piyasaya sürülmüş farklı MBC türleri vardır; ancak burada görece basit ve genel amaçlı olan MBC5 temel alınır
- MBC5, bank switching tekniğiyle en fazla 8MB ROM ve 128KB kartuş RAM'ini destekler
- RAM erişim kontrolü ile harici sensörler/RTC gibi ayrı donanımların denetimi de mümkündür
- Kartuşun ROM adres pinleri içindeki üst bitler (A22~A14), MBC5 tarafından dinamik olarak kontrol edilir; alt bitler ise doğrudan ana cihazın adres veri yoluna bağlanır
ROM bank switching mantığı
- Game Boy CPU'sunun toplam adres alanı en fazla 64KB'tır; bunun pratikte yalnızca 32KB'ı (16KB+16KB) ROM erişimi için kullanılır
- MBC5, ROM çipinin üst adreslerini (banka seçimi) doğrudan kontrol ederek istenen 16KB'lık bölgeyi CPU adres alanına eşler
- Donanım düzeyinde CPU'nun adres veri yolundaki alt 14 bit (A0~A13) doğrudan ROM çipine bağlanır; geri kalanı MBC5'ten gelir
- Gerçek oyun çalışması sırasında yazılım belirli bellek adreslerine değer yazdığında, MBC bunu algılar ve içerde seçili banka değerini günceller
MBC protokolü ve mekanizması
- MBC5, belirli adres/kontrol sinyali kombinasyonlarını algılayarak ROM banka seçimi, RAM banka seçimi ve diğer işlevlerin etkinleştirilip devre dışı bırakılması gibi işlemleri yürütür
- Örneğin A15=0, A13=1, A14=0 olan (0x2000~0x3FFF) aralığında bir yazma işlemi olduğunda, veri yolundaki değer ROM banka numarası olarak kaydedilir
- Programcı açısından banka değiştirme işi, düşük seviyeli devre kontrolü olarak değil, belirli bir adrese veri yazıyormuş gibi kodlanır
- Kartuş RAM'i kullanımı, sensörler, RTC vb. de benzer bir desenle kontrol edilir
- Bu bus reuse (yeniden kullanım) tekniği, parça sayısını azaltır ve maliyeti düşürür
Sonuç ve topluluk kaynaklarından yararlanma
- Game Boy kartuş yapısının dikkat çekici yanı düşük maliyet, yüksek güvenilirlik ve genişletilebilirlik kombinasyonudur
- Kendi kartuşunu üretmek isteyenler için, yukarıdaki yapı ve protokollerin doğru anlaşılması şarttır
- Topluluk ve zengin dokümantasyondan etkin biçimde yararlanılırsa, donanım-yazılım entegre geliştirme sürecine giriş engeli önemli ölçüde düşürülebilir
Referanslar ve ek öğrenme yolları
- Rodrigo Copetti'nin Game Boy/Game Boy Color Architecture yazısı
- gbdev.io, Pan Docs teknik belgeleri
- Çeşitli açık kaynak kartuş tasarımları ve toolchain'ler (ör. GBDK, RGBDS vb.)
- Doğrudan üretim projesi örneği: abc.decontextualize.com
(Bu yazının ilerleyen bölümlerinde MBC tasarım varyasyonları, EEPROM/flash bellek, giriş/çıkış IC'leri, çevre birimi entegrasyonu gibi daha karmaşık unsurlar da ele alınıyor; ancak yukarıdaki maddeler Game Boy kartuşlarının çalışma mantığına ilişkin temel içeriği oluşturuyor.)
1 yorum
Hacker News görüşleri
TI'nin TXB0108 kullanım deneyimimi paylaşmak istiyorum; otomatik yön algılama özelliği sayesinde ayrıca yön mantığı eklemeye gerek yokmuş gibi görünüyor ama gerçekte kullanılması tavsiye edilmez. Elektriksel gürültü olduğunda yön değişip girişin çıkışa dönüştüğü durumlar yaşanabiliyor; böyle anlarda cihaz ya bunu bir şekilde tolere ediyor ya da daha kötü senaryoda meşhur "sihirli duman" ortaya çıkıyor. Şans gerçekten yaver gitmezse bu durum endüstriyel sahada kazaya bile yol açabilir. Bu tür parçalar profesyoneller için gizli riskler barındırıyor, bu yüzden fazla pazarlanmamaları gerektiğini düşünüyorum. Yalnızca başarısızlık modlarını tam olarak biliyorsanız ya da başka alternatif yoksa kullanılmalı.
Bu parçalar gerçekten öngörülemez. Çıkış tarafında sadece bir iki inçlik trace ya da bir konektör bile olsa, çıkış ringing'i yüzünden otomatik yön tersine dönmesi sık sık yaşanıyor. Uzman olmayanın kullanamayacağı bir seviyede; tam da kullanmak isteyeceğiniz durumlarda aslında kullanması zor.
Gerçekten de çok yüksek hızda yönün sürekli değişip ciddi gürültü ve salınım ürettiğini yaşadım. Pulldown ile ilgili kısıtlar da epey fazla, ama iki tarafı da aynı yöne çektiğinizde en azından idare ediyordu.
Başka işleri ertelerken abc-pcb.pdf tasarımı hakkında ilk izlenim olarak birkaç noktaya değindim
Bu yazının, özel kartuş yaptığım dönemde var olmasını gerçekten isterdim
Benim oyunum Cubeat'te GB'nin audio-in pinine OPL3-L çipi bağlayarak FM müzik ekledim, MBC mantığı için de yalnızca 7400 serisi tekli logic çipleri kullandım
Bir gün mutlaka bitirip yayımlamak istiyorum; GB üzerinde böyle ilginç numaralar uygulamak gerçekten çok keyifli bir deneyim
Cubeat bilgileri
Game Boy kartuş yapısı hakkında tam da bu seviyede bilgi istiyordum.
Game Boy kartuşlarının uygulamayla birlikte RAM ve disk alanı sağlaması fikri çok taze geliyor; düşününce mantıklı da
Telefonlar da böyle çalışsaydı, çip teknolojisi birkaç yılda bir geliştikçe yeni kartuş alıp daha yüksek performanslı uygulamalar çalıştırmak ya da yeni bir anten takmak gibi yükseltmeler mümkün olabilir miydi diye düşünüyorum
Modüler telefonlar uzun zamandır öneriliyor ama pratik ya da faydalı çıkmadılar. Tüm parçaları soketle bağladığınızda çipler arası gecikme artıyor ve güvenilirlik düşüyor; üstelik gün boyu cepte sallanan bir ürün için bu daha da kötü.
Gerçekte telefonda modası geçen tek bir parça olmuyor; kamera, ekran, CPU, RAM, batarya gibi neredeyse her şeyi aynı anda yükseltmek istiyorsunuz. O durumda parçaları tek tek değiştirmek yerine yeni telefon almak daha mantıklı. Tek tek değiştirmenin kazancı en fazla kasa maliyetinden tasarruf etmek olur.
Mikrodenetleyici ROM hot patch sistemleri konuşulurken, uygulamaların doğrudan çipe gömülü gelip hemen çalışması yaklaşımının bu yüzden net avantajları var. Ama kullanıcı beklentileri sürekli değiştiği için işler giderek daha karmaşık hale geliyor gibi.
Kesinlikle iyi bir fikir ama takılan cihazın donanım gücü sınır olmaz mı diye düşünüyorum
Kartuşa daha hızlı RAM koyabilirsiniz ama mevcut kart bunun avantajını gerçekten kullanabilir mi, emin değilim
Daha hızlı depolama eklemek mümkün olsa bile, alttaki donanım aynı kaldığında bunun pratik etkisinin ne kadar olacağı belirsiz
Hatta kameranın bile takılabileceğini hayal ettim.
Game Boy için özel yazılım geliştirirken kopya koruma ya da bölge kilidi donanımını aşmaya gerek olmadığı söyleniyor ama aslında logo kontrolünü geçmek gerekmiyor mu diye sorulmuş.
Ayrıca Sega v. Accolade kararından sonra bu tür başlık kontrolü yöntemleri fiilen artık hukuken zorlayıcı değil, dolayısıyla pratikte ciddi bir aşma engeli kalmıyor.
Eskiden sık gittiğim GB geliştirme kaynağı sitesi devrs.com artık yayında değil, buna üzüldüm. Bağlantıların çoğu zaten ölmüş durumda ama ilham verici birçok proje vardı.
Ultimate Game Boy Talk (33c3 sunumu) videosu da bakmaya değer
Ultimate Game Boy Talk - 33c3
Pokemon Blue sürümüm 20 yıl önce çamaşır makinesinde yıkandı, hatta kurutucudan da geçti, ama hâlâ çalışıyor. Gerçekten çok sağlam bir donanım. SD kartlar böyle bir muameleye dayanabilir mi merak ediyorum.
Bu ay KiCad ve PCB tasarımına hobi olarak giriş yaptım; orijinal Game Boy PCB'sinin tamamını yeniden tasarlayıp açık kaynak olarak yayımlayan biri oldu mu diye merak ediyorum.
FunnyPlaying adlı şirket GBC ve GBA PCB'lerini kendisi üretiyor ve satıyor; açık kaynak sürümleri bulmak zor
nataliethenerd'in GitHub'ında CGB reverse engineering projesi var ama lisansı ticari olmayan kullanım ile sınırlı
Açıklamaya göre "CGB-CPU-04 kartı kullanılarak tarandı, zımparalandı ve yeniden çizildi; CGB şematikleri düzenlendi, değerler gibi ayrıntılar için orijinal şemaya başvuruldu"
PCB tasarımı için başvurulabilecek iyi kaynak önerileri de merak ediliyor.