12 puan yazan GN⁺ 2025-02-14 | 3 yorum | WhatsApp'ta paylaş
  • Game Bub, açık kaynaklı FPGA tabanlı bir retro emülasyon el konsoludur ve "Game Boy, Game Boy Color, Game Boy Advance" oyunlarını destekler
  • Fiziksel oyun kartuşları kullanılabilir; ayrıca microSD kartta kayıtlı ROM dosyalarıyla emüle edilen oyunlar da çalıştırılabilir
  • Gerçek kartuşları bu şekilde oynatabilen mevcut açık kaynaklı bir FPGA emülatörü yoktu; temel hedeflerden biri de tüm işi bizzat yapabilmek ve tüm bileşenleri anlayabilmekti
  • Bu nedenle PCB'yi kendisi tasarladı, firmware'i yazdı, FPGA için Game Boy ve Game Boy Advance emülatörlerini (Chisel HDL kullanarak) geliştirdi ve 3D baskı kasayı da tasarladı
  • Game Link Cable desteği sayesinde GB ve GBA modlarında çok oyunculu oyun da mümkün
  • HDMI çıkışı (dock kullanıldığında), titreşim motoru, gerçek zamanlı saat gibi özellikler içeriyor; ayrıca gelecekte yazılım güncellemeleriyle genişletilebilecek şekilde tasarlandı
  • Xilinx XC7A100T FPGA içeren 6 katmanlı bir PCB temel alınarak üretildi ve özel 3D baskı bir muhafaza içine yerleştirildi

Proje hedefleri

  • Bağımsız, şarj edilebilir pille çalışan bir FPGA el konsolu üretmek
  • Maliyet ve karmaşıklığı en aza indirmek, mümkün olduğunca ticari bileşenler kullanmak
  • Game Boy / Game Boy Color / Game Boy Advance oyunlarını çalıştırabilmek
  • Fiziksel kartuş ve microSD kart tabanlı ROM dosyası desteği
  • Sezgisel bir kullanıcı arayüzü ve oyun içi overlay sunmak
  • Ekran, hoparlör ve kulaklık çıkışını entegre etmek
  • HDMI çıkışı desteği
  • Gelecekte genişletilebilirliği göz önünde bulundurmak (diğer sistem desteği, Wi‑Fi vb.)
  • FPGA emülatör çekirdeklerini doğrudan geliştirmek ve donanım ile sürücüleri de kendisi tasarlayarak sistemi tamamen anlayabilmek

FPGA tabanlı retro oyunlara bakış

  • "FPGA tabanlı oyun, yazılım emülasyonundan daha doğrudur" iddiası abartılı bir pazarlamadır
  • FPGA da bir emülatördür ve yalnızca programlandığı ölçüde doğru çalışır
  • Yazılım emülatörleri de çok yüksek doğruluğa sahip olabilir ve erişilebilirlikleri yüksektir
  • FPGA tabanlı emülatörlerin en büyük avantajı, fiziksel donanımla (kartuş, link kablosu vb.) kolayca bağlanabilmeleridir

Donanım tasarımına genel bakış

  • FPGA + mikrodenetleyici (MCU) yapısı: FPGA çekirdek emülasyonu üstlenir, MCU ise UI işleme, ROM yükleme, güç yönetimi gibi görevleri yürütür
  • Wi‑Fi ve Bluetooth desteği: ESP32-S3 modülü kullanılıyor (ancak Bluetooth Classic desteklenmiyor)
  • Ekran: 3,5 inç 320x480 LCD (oyun ekranı 2 kat büyütülebiliyor)
  • Batarya ve güç yönetimi: lityum iyon pil, TI BQ2407x şarj IC'si ve güç durumunu izlemek için MAX17048 yakıt göstergesi IC'si
  • Ses: TLV320DAC3101 ses kodeği ile stereo çıkış ve dijital ses seviyesi ayarı desteği
  • Giriş aygıtları: GBA SP'de kullanılan klik hissi veren düğmeler tercih edilerek iyi bir kontrol hissi sağlandı
  • Bellek: Emüle edilen ROM'ları depolamak için 32MB SDRAM kullanılıyor
  • Kartuş ve link portu: Gerçek kartuşlar doğrudan bağlanabiliyor; ayrıca GBA/GBC geçiş algılama özelliği bulunuyor
  • Diğer özellikler: IMU (hareket sensörü), gerçek zamanlı saat (RTC), titreşim motoru

PCB tasarımı ve testler

  • PCB tasarımı KiCad kullanılarak yapıldı
  • FPGA (Artix-7), BGA paket kullandığı için 6 katmanlı PCB olarak tasarlandı
  • İlk prototip testlerinde işlevlerin büyük bölümü sorunsuz çalıştı, ancak bazı güç yönetimi sorunları tespit edildi
  • İlk testler MicroPython ile yapıldıktan sonra MCU firmware'i Rust ile yazıldı

GUI ve firmware geliştirme

  • Rust tabanlı GUI, Slint UI framework kullanılarak geliştirildi
  • LCD güncelleme hızı optimize edildi ve ekranın doğrudan MCU yerine FPGA tarafından sürülmesi sağlandı
  • microSD'nin USB Mass Storage olarak tanınabilmesi için TinyUSB ile veri aktarım özelliği eklendi

Game Boy Advance desteğinin eklenmesi

  • ARM7TDMI CPU uygulandı (3 aşamalı pipeline yapısı)
  • PPU, DMA, zamanlayıcı, ses gibi GBA donanım bileşenleri doğrudan FPGA üzerinde uygulandı
  • Fiziksel kartuş desteği için GBA'nın özel veri yolu protokolü analiz edildi ve FPGA üzerinde yeniden üretildi
  • Link kablosu üzerinden GBA-GBA çok oyunculu ve GameCube bağlantısı destekleniyor

İkinci donanım revizyonu

  • Kart ve muhafaza yeniden tasarlanarak daha ince ve ergonomik bir tasarım uygulandı
  • Düğme konumları ayarlanarak GBA SP'ye benzer bir kontrol hissi sağlandı
  • HDMI portu kaldırıldı; bunun yerine USB-C tabanlı özel bir dock tasarlanarak HDMI çıkışı ve kontrolcü desteği eklendi
  • LCD koruyucu camı özel üretildi ve daha premium bir tasarım elde edildi

Dock tasarımı ve HDMI çıkışı

  • Dock, USB-C portu üzerinden özel bir HDMI sinyali çıkışı verecek şekilde tasarlandı
  • Raspberry Pi Pico W tabanlı MCU kullanılarak kablosuz kontrolcü desteği sağlanabiliyor
  • Dock üzerinde USB hub işlevi sunularak kablolu kontrolcüler de bağlanabiliyor

Gelecek planları ve genişleme potansiyeli

  • Dock'u tamamlamak ve Bluetooth kontrolcü desteğini hayata geçirmek
  • Game Boy Advance emülatörünün doğruluğunu daha da artırarak mGBA testlerini geçmeyi hedeflemek
  • Kablosuz link kablosu emülasyonu (Wi‑Fi tabanlı GBA Wireless Adapter uygulaması) üzerine çalışmak
  • Game Boy IR iletişimi, Boktai güneş sensörü, Game Boy Camera gibi ek özelliklere destek değerlendirmek

Üretim istek listesi (seri üretim mümkün olursa)

  • 720x480 çözünürlüklü özel LCD panel (GBA 3 kat büyütme mümkün)
  • Enjeksiyon kalıplı muhafaza ve yüksek kaliteli düğmeler
  • Özel batarya paketi (iç alan verimliliğini optimize etmek için)
  • BGA tabanlı SRAM ve SDRAM kullanımı (daha küçük PCB tasarımı mümkün)

Açık kaynak ve referans materyaller

  • Proje kaynak kodu ve şemalar: GitHub
  • Game Boy ve GBA donanım belgeleri: Pan Docs, GBATEK
  • Açık kaynak araçlar: KiCad, FreeCAD, Chisel, Verilator, Slint vb.

Özet

  • Game Bub, sadece bir retro oyun cihazı değil; FPGA tabanlı emülasyonun olanaklarını genişleten iddialı bir proje
  • Gelecekte çeşitli genişletme özellikleri eklenerek açık kaynak topluluğuyla birlikte geliştirilmeye devam edilmesi planlanıyor

3 yorum

 
blurblah 2025-02-17

Eskiden daha çok ev yapımı şekilde FPGA ile üretildiği için bunları yalnızca konuya hakim olanların kendi aralarında alıp sattığı durumlar oluyordu; demek ki açık kaynak olanları da varmış. İlginçmiş.

 
botplaysdice 2025-02-15

FPGA ile CPU’ya kadar doğrudan kendisi implemente etmiş demek!, satır sayısını merak edip baktım da... görünüşe göre Verilog gibi bir şey değil, Scala ile FPGA kodlaması yapılabiliyormuş. Düşündüğümden daha basit olduğu için şaşırdım.

https://github.com/elipsitz/gamebub/…

Boşuna dememişler... meraklısının iyisi Amerikalı olurmuş diye... hehe

 
GN⁺ 2025-02-14
Hacker News görüşleri
  • Gerçekten harika bir proje. Blog yazısının çok kapsamlı hazırlanmış olması da çok hoşuma gitti. GameCube'a bağlanıp bağlanamayacağını merak etmiştim ama buna blogda zaten değinilmiş

    • Gerçek kartuş uyumluluğunun avantajlarından biri, bellek eşleyicilerini dert etmemek olsa gerek. NES'in çeşitli mapper'larına aşinayım ama GB kartuşlarının da aynı şekilde çalışıp çalışmadığından emin değilim. Kamera, titreşim, dikiş makinesi gibi özel donanımlar da orijinal kartuşla ekstra destek olmadan çalışacak gibi görünüyor
    • ROM yüklemeyi desteklerse, FPGA üzerinde tüm mapper'ları emüle etmek gerekip gerekmediğini merak ediyorum
  • Harika proje ve yazı için teşekkürler. Böyle şeylere bayılıyorum

    • Daha önce yorumlara baktığımda "böyle bir şey neden var?" tepkisinin çok olmasına üzülmüştüm. Bu kadar cesur projelerin %1'ini bile denememiş insanlar çoğunlukta. Bu proje hem harika hem de eğlenceli bir öğrenme deneyimi
    • Bunu Hack-A-Day'in tip hattına gönderdim, birkaç gün içinde bununla ilgili bir yazı çıkabilir
  • Bende bir Analogue Pocket var ama FPGA kullanıyor olması benim için çok şey ifade etmiyor. Yazılım emülasyonuna kıyasla gerçekten büyük bir fark olup olmadığını merak ediyorum

    • İki yaklaşım arasındaki farkı biliyorum ama yazılım emülasyonunun neden FPGA emülasyonu kadar iyi olmadığını anlayamıyorum. Yazılımla yapmak daha esnekmiş gibi geliyor
  • Üzerine bileşenler dizilmiş PCB'nin toplam maliyetinin ne olduğunu merak ediyorum. Muhtemelen 60-70 civarındadır

    • Blog yazısı ve emek için teşekkürler, bunu depoya da eklemek iyi olabilir
    • Benzer bir tasarımı deniyorum ve sistem denetleyicisi olarak RP2350B ile ESP32-C61 kullanmayı planlıyorum. Eski BT'yi destekleyen bir çip ve buna uygun pad yerleşimi olsa güzel olurdu
    • 8bitdo USB kablosuz adaptörü gibi şeyleri desteklemek için bir USB portu eklemek de bir seçenek. Eski BT desteği projeyi raydan çıkarabilecek ek bir iş olabilir. SPI bağlantısını içeride erişilebilir bırakıp isteyenin kendi denetleyicisini hackleyebilmesine imkan tanımak da bir yol
  • Açık kaynak donanımı seviyorum ama parçaların üretimi durdurulduğunda ne olacağını düşünüyorum

    • Bakımcı parça listesini güncelleyebilir ama uyumluluk sorunları nedeniyle birden fazla farklı parçaya ihtiyaç duyulabilir. Parçaları satın alma sürecindeyken hepsi birden bulunamaz hale gelirse ne yapılır diye düşünüyorum. Bakımcının parça kitleri satması bir çözüm olabilir. Ama bunun IP hukuku tarafında sorunları olabilir
  • Ekran denetleyicisindeki MISO sorunu kötü şöhretlidir. Buna ilk kez birkaç yıl önce rastlamıştım. Chip select hattında tri-state buffer kullanmak ya da veri yolunu ayırmak tavsiye edilir

    • Güç domaini sorunları da sık görülür. Çoğu aygıtta IO yapısı Vdd, ESD diyotu, IO pini, ESD diyotu ve topraktan oluşur. Vdd'nin toprağa doğru dirençli bir yolu varsa sorun çıkar. Bu, güç besleme IC'sinde çıkış boşaltma direnci ya da toprağa akıma izin veren bir transistör olduğunda yaşanır. Bu durumda IO pini, toprağa paralel bir diyoda sahip olur. Dikkat edilmezse sürücünün sağlayabildiği maksimum akım diyot üzerinden akar
  • Donanım tecrübem olmadığı için saçma bir fikir olabilir ama NES, SNES, Genesis gibi eski sistemler nispeten basit. Patentlerin de bir ömrü var. Neden SoC üzerinden bu sistemleri neredeyse kusursuz emüle eden donanım tabanlı yeniden yaratımlar yok diye merak ediyorum. FPGA projeleri buna en çok yaklaşan şey gibi görünüyor ama FPGA, 40 yıllık CPU tasarımları ve 1kb RAM ile kıyaslandığında pahalı

  • Harika bir proje. Arayüzün Rust ve Slint ile inşa edilmiş olması gerçekten çok hoş. Üzerinde çalıştığım GUI framework'ü bu

  • Müthiş. Dikey yerleşimi seçme nedenini açıklayıp açıklamadığını bilmiyorum. Mevcut FPGA alanında herkes GBC tarzına yöneliyor. Bunun kişisel bir tercih mi yoksa başka bir nedeni mi olduğunu merak ediyorum

  • Harika bir yazı. Oyun el konsollarına özel bir ilgim yok ama ekran, kasa, batarya gücü ve bağlantı konusunda güncel tasarım kararları her zaman ilgimi çekiyor. Pico W entegrasyonu güzel olmuş. Son birkaç yılda kıymeti yeterince bilinmeyen geliştirme başlıklarından biri. Paylaştığın için teşekkürler