- Game Bub एक ओपन सोर्स FPGA-आधारित रेट्रो इम्यूलेशन हैंडहेल्ड डिवाइस है, जो "Game Boy, Game Boy Color, Game Boy Advance" गेम्स को सपोर्ट करता है
- इसमें फिजिकल गेम कार्ट्रिज इस्तेमाल किए जा सकते हैं, और microSD कार्ड में सेव किए गए ROM फ़ाइलों के जरिए इम्यूलेटेड गेम भी चलाए जा सकते हैं
- इस तरह वास्तविक कार्ट्रिज चला सकने वाला कोई मौजूदा ओपन सोर्स FPGA इम्यूलेटर नहीं था, और इसके प्रमुख लक्ष्यों में से एक था हर काम खुद करना और सभी कंपोनेंट्स को समझ पाना
- इसलिए PCB खुद डिज़ाइन किया गया, firmware लिखा गया, FPGA के लिए Game Boy और Game Boy Advance इम्यूलेटर (Chisel HDL का उपयोग करके) बनाए गए, और 3D-प्रिंटेड केस भी डिज़ाइन किया गया
- Game Link Cable को सपोर्ट करता है, इसलिए GB और GBA मोड में मल्टीप्लेयर भी संभव है
- इसमें HDMI output (dock के साथ), vibration motor, real-time clock जैसी सुविधाएँ शामिल हैं, और इसे भविष्य के software updates के जरिए विस्तार योग्य बनाने के लिए डिज़ाइन किया गया है
- यह Xilinx XC7A100T FPGA से लैस 6-layer PCB पर आधारित है, और एक कस्टम 3D-प्रिंटेड enclosure में पैकेज किया गया है
प्रोजेक्ट लक्ष्य
- स्वतंत्र rechargeable battery-आधारित FPGA हैंडहेल्ड डिवाइस बनाना
- लागत और जटिलता को न्यूनतम रखना, और जहाँ संभव हो commercial parts का उपयोग करना
- Game Boy / Game Boy Color / Game Boy Advance गेम चलाने में सक्षम होना
- फिजिकल कार्ट्रिज और microSD कार्ड-आधारित ROM फ़ाइलों का समर्थन
- सहज UI और in-game overlay प्रदान करना
- display, speaker, headphone output का एकीकरण
- HDMI output समर्थन
- भविष्य में विस्तार की संभावना को ध्यान में रखना (दूसरे सिस्टम का समर्थन, Wi-Fi आदि)
- FPGA इम्यूलेटर core खुद विकसित करना, और hardware व drivers भी खुद डिज़ाइन करना ताकि पूरे सिस्टम को पूरी तरह समझा जा सके
FPGA-आधारित रेट्रो गेमिंग पर दृष्टिकोण
- "FPGA-आधारित गेमिंग software emulation से अधिक accurate है" जैसा दावा बढ़ा-चढ़ाकर किया गया marketing है
- FPGA भी एक इम्यूलेटर ही है, और उतनी ही accuracy से काम करता है जितना उसे प्रोग्राम किया गया हो
- software emulators भी बहुत उच्च accuracy रख सकते हैं, और उनकी accessibility भी बेहतरीन होती है
- FPGA-आधारित इम्यूलेटर का सबसे बड़ा लाभ यह है कि इसे फिजिकल hardware (cartridge, link cable आदि) से आसानी से जोड़ा जा सकता है
हार्डवेयर डिज़ाइन का अवलोकन
- FPGA + microcontroller (MCU) संरचना: FPGA मुख्य इम्यूलेशन संभालता है, और MCU UI प्रोसेसिंग, ROM loading, power management आदि करता है
- Wi-Fi और Bluetooth समर्थन: ESP32-S3 मॉड्यूल का उपयोग (हालाँकि Bluetooth Classic समर्थित नहीं है)
- display: 3.5-inch 320x480 LCD (गेम स्क्रीन को 2x तक बड़ा किया जा सकता है)
- battery और power management: lithium-ion battery, TI BQ2407x charging IC का उपयोग, और power state जाँचने के लिए MAX17048 fuel gauge IC शामिल
- audio: TLV320DAC3101 audio codec का उपयोग, जिससे stereo output और digital volume control सपोर्ट मिलता है
- input device: GBA SP में इस्तेमाल होने वाले clicky buttons अपनाए गए हैं, जिससे अच्छा tactile feel मिलता है
- memory: 32MB SDRAM का उपयोग इम्यूलेटेड ROM स्टोर करने के लिए
- cartridge और link port: वास्तविक कार्ट्रिज सीधे जोड़े जा सकते हैं, और GBA/GBC switching detection सुविधा शामिल है
- अन्य सुविधाएँ: IMU (motion sensor), real-time clock (RTC), vibration motor शामिल
PCB डिज़ाइन और परीक्षण
- PCB डिज़ाइन के लिए KiCad का उपयोग किया गया
- FPGA (Artix-7) BGA package का उपयोग करता है, इसलिए इसे 6-layer PCB के रूप में डिज़ाइन किया गया
- पहले prototype परीक्षण में अधिकांश फ़ंक्शन सामान्य रूप से काम करते पाए गए, हालाँकि कुछ power management issues मिले
- शुरुआती परीक्षण MicroPython से किए गए, फिर MCU firmware Rust में लिखा गया
GUI और firmware विकास
- Slint UI framework का उपयोग करके Rust-आधारित GUI लागू किया गया
- LCD update speed को optimize किया गया, और इसे इस तरह डिज़ाइन किया गया कि MCU नहीं बल्कि FPGA सीधे display को drive करे
- microSD को USB Mass Storage के रूप में पहचाने जाने लायक बनाने के लिए TinyUSB के जरिए data transfer सुविधा जोड़ी गई
Game Boy Advance समर्थन जोड़ा गया
- ARM7TDMI CPU implementation (3-stage pipeline संरचना)
- PPU, DMA, timer, audio आदि GBA hardware components को FPGA में सीधे implement किया गया
- फिजिकल कार्ट्रिज समर्थन के लिए GBA के विशेष bus protocol का विश्लेषण और FPGA में पुनर्निर्माण किया गया
- link cable के जरिए GBA-GBA मल्टीप्लेयर और GameCube कनेक्शन का समर्थन
दूसरा हार्डवेयर revision
- board और enclosure को फिर से डिज़ाइन किया गया और अधिक पतला व ergonomic design अपनाया गया
- button positions समायोजित की गईं ताकि GBA SP जैसा control feel मिल सके
- HDMI port हटाया गया, और USB-C-आधारित कस्टम dock डिज़ाइन किया गया ताकि HDMI output और controller support जोड़ा जा सके
- LCD cover glass को कस्टम बनाया गया, जिससे अधिक प्रीमियम डिज़ाइन मिला
dock डिज़ाइन और HDMI output
- USB-C port के जरिए कस्टम HDMI signal output देने के तरीके से dock डिज़ाइन किया गया
- Raspberry Pi Pico W-आधारित MCU का उपयोग करके wireless controller support संभव बनाया गया
- dock में USB hub functionality दी गई, जिससे wired controllers भी जोड़े जा सकते हैं
भविष्य की योजनाएँ और विस्तार की संभावना
- dock को पूरा करना और Bluetooth controller support लागू करना
- Game Boy Advance इम्यूलेटर की accuracy को और बेहतर बनाना ताकि mGBA tests पास करना लक्ष्य हो
- wireless link cable emulation (Wi-Fi-आधारित GBA Wireless Adapter implementation) पर शोध
- Game Boy IR communication, Boktai solar sensor, Game Boy Camera जैसी अतिरिक्त सुविधाओं के समर्थन की समीक्षा
निर्माण इच्छा-सूची (यदि बड़े पैमाने पर उत्पादन संभव हो)
- 720x480 resolution वाला कस्टम LCD panel (GBA को 3x scale तक दिखाया जा सके)
- injection-molded enclosure और उच्च-गुणवत्ता वाले buttons
- कस्टम battery pack (आंतरिक स्थान की दक्षता के लिए अनुकूलित)
- BGA-आधारित SRAM और SDRAM का उपयोग (छोटा PCB डिज़ाइन संभव)
ओपन सोर्स और संदर्भ सामग्री
- प्रोजेक्ट source code और schematics: GitHub
- Game Boy और GBA hardware documents: Pan Docs, GBATEK
- ओपन सोर्स tools: KiCad, FreeCAD, Chisel, Verilator, Slint आदि
सारांश
- Game Bub सिर्फ एक साधारण रेट्रो गेम डिवाइस नहीं है, बल्कि FPGA-आधारित इम्यूलेशन की संभावनाओं को आगे बढ़ाने वाला एक चुनौतीपूर्ण प्रोजेक्ट है
- भविष्य में इसमें विभिन्न विस्तार सुविधाएँ जोड़ी जाएँगी, और इसे ओपन सोर्स कम्युनिटी के साथ मिलकर आगे विकसित करने की योजना है
3 टिप्पणियां
घरेलू स्तर पर FPGA से बनाकर कभी सिर्फ जानकार लोगों के बीच ही लेन-देन होता था, लेकिन इसका open source वर्ज़न भी था। मज़ेदार है।
लगता है इन्होंने FPGA पर CPU तक सीधे implement कर दिया है! कोड लाइनों की संख्या जानने के लिए खोजा तो पता चला... शायद Verilog नहीं, बल्कि Scala से भी FPGA coding की जा सकती है। सोचे से ज़्यादा सरल लगा, यह देखकर हैरानी हुई。
https://github.com/elipsitz/gamebub/…
कहते हैं शौकीनों में सबसे बड़े शौकीन पश्चिमी लोग होते हैं... हा हा
Hacker News राय
यह सच में बहुत शानदार प्रोजेक्ट है। अच्छा लगा कि ब्लॉग पोस्ट बहुत विस्तार से लिखी गई है। मैं सोच रहा था कि क्या इसे GameCube से जोड़ा जा सकता है, लेकिन ब्लॉग में इसका ज़िक्र पहले से था
शानदार प्रोजेक्ट और यह लेख लिखने के लिए धन्यवाद। मुझे ऐसी चीज़ें बहुत पसंद हैं
मेरे पास Analogue Pocket है, लेकिन यह कि वह FPGA इस्तेमाल करता है, मेरे लिए ज़्यादा मायने नहीं रखता। मैं जानना चाहता हूँ कि software emulation की तुलना में क्या वास्तव में बड़ा फ़र्क पड़ता है
मैं जानना चाहता हूँ कि components लगे हुए PCB की कुल लागत कितनी है। शायद करीब 60-70 होगी
मुझे open source hardware पसंद है, लेकिन मैं सोचता हूँ कि जब components discontinued हो जाते हैं तो फिर क्या होता है
display controller का MISO issue बदनाम है। मैंने इसे कुछ साल पहले पहली बार देखा था। chip select line पर tristate buffer इस्तेमाल करना या bus को अलग कर देना सुझाया जाता है
मेरे पास hardware का अनुभव नहीं है, इसलिए यह बेवकूफ़ी भरा विचार हो सकता है, लेकिन NES, SNES, Genesis जैसे पुराने systems काफ़ी सरल हैं। patents की भी एक समय-सीमा होती है। मैं सोचता हूँ कि SoC के ज़रिए इन systems को लगभग पूरी तरह emulate करने वाला hardware recreation क्यों नहीं है। FPGA projects शायद इसके सबसे क़रीब हैं, लेकिन FPGA, 40 साल पुराने CPU design और 1kb RAM की तुलना में महंगे लगते हैं
शानदार प्रोजेक्ट है। UI का Rust और Slint से बनना वाकई बहुत बढ़िया है। यही GUI framework है जिस पर मैं काम कर रहा हूँ
कमाल है। पता नहीं उन्होंने vertical layout चुनने का कारण समझाया है या नहीं। मौजूदा FPGA space में लगभग सब कुछ GBC style में है। जानना चाहूँगा कि यह सिर्फ व्यक्तिगत पसंद है या कोई और वजह भी है
शानदार लेख है। मुझे game handhelds में खास दिलचस्पी नहीं है, लेकिन display, enclosure, battery power और connectivity को लेकर आज की design decisions में हमेशा रुचि रहती है। Pico W integration अच्छा लगा। पिछले कुछ वर्षों में यह कम आंका गया development item रहा है। साझा करने के लिए धन्यवाद