- Game Bub คือเครื่องพกพาสำหรับจำลองเกมเรโทรแบบโอเพนซอร์สที่ใช้ FPGA รองรับเกม "Game Boy, Game Boy Color, Game Boy Advance"
- สามารถใช้ตลับเกมจริงได้ และยังรันเกมที่จำลองจากไฟล์ ROM ที่เก็บไว้ในการ์ด microSD ได้ด้วย
- ก่อนหน้านี้ยังไม่มีอีมูเลเตอร์ FPGA แบบโอเพนซอร์สตัวใดที่เล่นตลับจริงได้ และหนึ่งในเป้าหมายหลักคือการลงมือทำทุกอย่างด้วยตนเองและเข้าใจทุกองค์ประกอบทั้งหมด
- จึงออกแบบ PCB เอง เขียนเฟิร์มแวร์เอง เขียนอีมูเลเตอร์ Game Boy และ Game Boy Advance สำหรับ FPGA เอง (ใช้ Chisel HDL) และออกแบบเคสพิมพ์ 3D เองด้วย
- รองรับ Game Link Cable จึงเล่นแบบ มัลติเพลเยอร์ ได้ทั้งในโหมด GB และ GBA
- มีฟีเจอร์อย่างเอาต์พุต HDMI (ผ่านด็อก), มอเตอร์สั่น, นาฬิกาเรียลไทม์ และออกแบบมาให้ขยายความสามารถได้ผ่านการอัปเดตซอฟต์แวร์ในอนาคต
- ใช้ PCB 6 ชั้นที่ติดตั้ง Xilinx XC7A100T FPGA และบรรจุในตัวเครื่องแบบสั่งทำที่พิมพ์ 3D
เป้าหมายของโปรเจ็กต์
- สร้างเครื่องพกพา FPGA แบบใช้แบตเตอรี่ชาร์จได้ที่ทำงานได้อย่างอิสระ
- ลดต้นทุนและความซับซ้อนให้น้อยที่สุด และใช้ชิ้นส่วนเชิงพาณิชย์ให้มากที่สุดเท่าที่ทำได้
- รันเกม Game Boy / Game Boy Color / Game Boy Advance ได้
- รองรับทั้งตลับจริงและไฟล์ ROM บนการ์ด microSD
- มี UI ที่ใช้งานง่ายและอินเกมโอเวอร์เลย์
- รวมจอภาพ, ลำโพง และเอาต์พุตหูฟังไว้ในตัว
- รองรับเอาต์พุต HDMI
- คำนึงถึงความสามารถในการขยายในอนาคต (รองรับระบบอื่น, Wi‑Fi ฯลฯ)
- พัฒนาคอร์อีมูเลเตอร์ FPGA เอง และออกแบบฮาร์ดแวร์กับไดรเวอร์เอง เพื่อให้เข้าใจระบบทั้งหมดอย่างสมบูรณ์
มุมมองต่อการเล่นเกมเรโทรบน FPGA
- คำกล่าวที่ว่า "การเล่นเกมบน FPGA แม่นยำกว่าการจำลองด้วยซอฟต์แวร์" เป็นการตลาดที่พูดเกินจริง
- FPGA เองก็เป็น อีมูเลเตอร์ เช่นกัน และทำงานได้แม่นยำเท่าที่ถูกโปรแกรมไว้เท่านั้น
- อีมูเลเตอร์แบบซอฟต์แวร์ก็มีความแม่นยำได้สูงมากและเข้าถึงได้ง่าย
- ข้อได้เปรียบที่ใหญ่ที่สุดของอีมูเลเตอร์แบบ FPGA คือ เชื่อมต่อกับฮาร์ดแวร์จริง (ตลับเกม, ลิงก์เคเบิล ฯลฯ) ได้ง่าย
ภาพรวมการออกแบบฮาร์ดแวร์
- โครงสร้าง FPGA + ไมโครคอนโทรลเลอร์ (MCU): FPGA รับหน้าที่จำลองหลัก ส่วน MCU ดูแลการประมวลผล UI, การโหลด ROM, การจัดการพลังงาน ฯลฯ
- รองรับ Wi‑Fi และ Bluetooth: ใช้โมดูล ESP32-S3 (แต่ไม่รองรับ Bluetooth Classic)
- จอภาพ: LCD ขนาด 3.5 นิ้ว 320x480 (สามารถขยายภาพเกมได้ 2 เท่า)
- แบตเตอรี่และการจัดการพลังงาน: ใช้แบตเตอรี่ลิเธียมไอออน, ชิปชาร์จ TI BQ2407x และมีชิปวัดระดับพลังงาน MAX17048 สำหรับตรวจสอบสถานะแบตเตอรี่
- เสียง: ใช้ชิปเสียง TLV320DAC3101 รองรับเอาต์พุตสเตอริโอและการปรับระดับเสียงแบบดิจิทัล
- อุปกรณ์รับอินพุต: ใช้ปุ่มกดแบบคลิกที่เคยใช้ใน GBA SP เพื่อให้สัมผัสการควบคุมที่ดี
- หน่วยความจำ: ใช้ SDRAM ขนาด 32MB สำหรับเก็บ ROM ที่จำลอง
- พอร์ตตลับและลิงก์: ต่อเข้ากับตลับจริงได้โดยตรง และมีฟังก์ชันตรวจจับการสลับ GBA/GBC
- ฟีเจอร์อื่น ๆ: มี IMU (เซ็นเซอร์ตรวจจับการเคลื่อนไหว), นาฬิกาเรียลไทม์ (RTC), มอเตอร์สั่น
การออกแบบและทดสอบ PCB
- ออกแบบ PCB ด้วย KiCad
- FPGA (Artix-7) ใช้แพ็กเกจ BGA จึงออกแบบเป็น PCB 6 ชั้น
- ในการทดสอบต้นแบบรอบแรก ฟังก์ชันส่วนใหญ่ทำงานได้ปกติ แต่พบปัญหาบางส่วนด้านการจัดการพลังงาน
- เริ่มทดสอบเบื้องต้นด้วย MicroPython ก่อน แล้วจึงเขียนเฟิร์มแวร์ MCU ด้วย Rust
การพัฒนา GUI และเฟิร์มแวร์
- ใช้เฟรมเวิร์ก Slint UI เพื่อสร้าง GUI บน Rust
- ปรับแต่งความเร็วในการอัปเดต LCD และออกแบบให้ FPGA ขับจอภาพโดยตรงแทน MCU
- เพิ่มฟังก์ชันถ่ายโอนข้อมูลด้วย TinyUSB เพื่อให้ microSD ถูกมองเห็นเป็น USB Mass Storage
เพิ่มการรองรับ Game Boy Advance
- อิมพลีเมนต์ CPU ARM7TDMI (โครงสร้างไปป์ไลน์ 3 ขั้น)
- อิมพลีเมนต์องค์ประกอบฮาร์ดแวร์ของ GBA เช่น PPU, DMA, ตัวจับเวลา, ระบบเสียง ฯลฯ บน FPGA โดยตรง
- เพื่อรองรับตลับจริง ได้ วิเคราะห์โปรโตคอลบัสเฉพาะของ GBA และจำลองขึ้นใหม่บน FPGA
- รองรับมัลติเพลเยอร์แบบ GBA-GBA ผ่านลิงก์เคเบิล และการเชื่อมต่อกับ GameCube
ฮาร์ดแวร์รุ่นปรับปรุงครั้งที่สอง
- ออกแบบบอร์ดและตัวเครื่องใหม่ โดยใช้ ดีไซน์ที่บางลงและจับถนัดมือมากขึ้น
- ปรับตำแหน่งปุ่มเพื่อให้ได้สัมผัสการควบคุมคล้าย GBA SP
- ตัดพอร์ต HDMI ออก และออกแบบ ด็อกแบบสั่งทำที่ใช้ USB-C เพื่อเพิ่มเอาต์พุต HDMI และการรองรับคอนโทรลเลอร์
- ผลิตกระจกครอบ LCD แบบสั่งทำเพื่อให้ได้งานออกแบบที่ดูพรีเมียมยิ่งขึ้น
การออกแบบด็อกและเอาต์พุต HDMI
- ออกแบบด็อกให้ส่งสัญญาณ HDMI แบบกำหนดเองผ่านพอร์ต USB-C
- ใช้ MCU บนพื้นฐาน Raspberry Pi Pico W เพื่อ รองรับคอนโทรลเลอร์ไร้สาย
- ด็อกมี ฟังก์ชัน USB hub จึงสามารถต่อคอนโทรลเลอร์แบบมีสายได้ด้วย
แผนในอนาคตและความสามารถในการขยาย
- ทำด็อกให้เสร็จสมบูรณ์และเพิ่มการรองรับคอนโทรลเลอร์ Bluetooth
- ปรับปรุงความแม่นยำของอีมูเลเตอร์ Game Boy Advance ให้ดียิ่งขึ้น โดยมีเป้าหมายคือ ผ่านการทดสอบของ mGBA
- ศึกษา การจำลองลิงก์เคเบิลแบบไร้สาย (อิมพลีเมนต์ GBA Wireless Adapter บนพื้นฐาน Wi‑Fi)
- พิจารณารองรับฟีเจอร์เพิ่มเติม เช่น การสื่อสาร IR ของ Game Boy, เซ็นเซอร์แสงอาทิตย์ของ Boktai, Game Boy Camera
รายการสิ่งที่อยากทำ (หากสามารถผลิตจำนวนมากได้)
- แผง LCD แบบสั่งทำความละเอียด 720x480 (ขยาย GBA ได้ 3 เท่า)
- ตัวเครื่องแบบฉีดขึ้นรูปและปุ่มคุณภาพสูง
- แบตเตอรี่แพ็กแบบสั่งทำ (เพิ่มประสิทธิภาพการใช้พื้นที่ภายใน)
- ใช้ SRAM และ SDRAM แบบ BGA (ทำให้สามารถออกแบบ PCB ให้เล็กลงได้)
โอเพนซอร์สและแหล่งข้อมูลอ้างอิง
- ซอร์สโค้ดและวงจรของโปรเจ็กต์: GitHub
- เอกสารฮาร์ดแวร์ของ Game Boy และ GBA: Pan Docs, GBATEK
- เครื่องมือโอเพนซอร์ส: KiCad, FreeCAD, Chisel, Verilator, Slint ฯลฯ
สรุป
- Game Bub ไม่ใช่แค่เครื่องเกมเรโทรธรรมดา แต่เป็น โปรเจ็กต์ท้าทายที่ขยายขอบเขตความเป็นไปได้ของการจำลองแบบ FPGA
- ในอนาคตมีแผนจะเพิ่มความสามารถที่หลากหลายต่อไป และพัฒนาไปพร้อมกับชุมชนโอเพนซอร์ส
3 ความคิดเห็น
ก่อนหน้านี้ก็มีแบบทำกันเองในลักษณะงานคราฟต์ในบ้าน ใช้
fpgaแล้วซื้อขายกันเฉพาะในหมู่คนที่รู้จักกันอยู่เหมือนกัน แต่ก็มีแบบโอเพนซอร์สด้วยสินะ น่าสนใจดีถึงขั้นเอา FPGA มาเขียนตัว CPU เองเลยสินะ! พอสงสัยว่าโค้ดมีกี่บรรทัดเลยลองไปค้นดู... ดูเหมือนว่าจะเขียนโค้ด FPGA ด้วย Scala ได้ ไม่ใช่ verilog นะครับ/นะคะ ง่ายกว่าที่คิดเลยจนแอบตกใจ
https://github.com/elipsitz/gamebub/…
สมกับที่เขาว่ากันว่า ในบรรดาคนคลั่งสิ่งใดสิ่งหนึ่ง คนตะวันตกนี่สุดจริง ๆ 555
ความคิดเห็นจาก Hacker News
โปรเจ็กต์นี้เจ๋งมาก ชอบที่บทความในบล็อกเขียนไว้ละเอียดมาก ฉันสงสัยว่าน่าจะต่อกับ GameCube ได้ไหม แต่ในบล็อกก็พูดถึงไว้แล้ว
ขอบคุณสำหรับโปรเจ็กต์และบทความดี ๆ แบบนี้ ฉันชอบของแนวนี้
ฉันมี Analogue Pocket อยู่ แต่การที่มันใช้ FPGA ไม่ได้มีความหมายมากนักสำหรับฉัน เลยสงสัยว่ามันต่างจาก software emulation มากจริงไหม
สงสัยว่าต้นทุนรวมของ PCB ที่ลงชิ้นส่วนแล้วอยู่ที่เท่าไร น่าจะประมาณ 60-70 ดอลลาร์
ฉันชอบฮาร์ดแวร์โอเพนซอร์ส แต่ก็กังวลว่าถ้าชิ้นส่วนเลิกผลิตแล้วจะทำอย่างไร
ปัญหา MISO ของ display controller นี่ขึ้นชื่อมาก ฉันเจอครั้งแรกเมื่อหลายปีก่อน คำแนะนำคือใช้ tri-state buffer บนเส้น chip select หรือแยก bus ไปเลย
ฉันไม่มีประสบการณ์ด้านฮาร์ดแวร์ อาจเป็นความคิดงี่เง่า แต่ระบบเก่าอย่าง NES, SNES, Genesis ค่อนข้างเรียบง่าย และสิทธิบัตรก็มีอายุจำกัด เลยสงสัยว่าทำไมถึงไม่มีการสร้างฮาร์ดแวร์ขึ้นใหม่ผ่าน SoC ที่ emulation ระบบได้แทบสมบูรณ์ FPGA project ดูจะใกล้เคียงที่สุด แต่ FPGA กลับแพงเมื่อเทียบกับดีไซน์ CPU อายุ 40 ปีและ RAM 1kb
โปรเจ็กต์เจ๋งมาก UI ที่สร้างด้วย Rust และ Slint นี่เท่มาก มันเป็น GUI framework ที่ฉันกำลังทำงานอยู่
สุดยอดมาก ไม่แน่ใจว่าเขาอธิบายเหตุผลที่เลือก layout แนวตั้งไว้หรือเปล่า ในวงการ FPGA แบบเดิม ๆ ดูเหมือนทุกอย่างจะเป็นสไตล์ GBC เลย สงสัยว่าเป็นรสนิยมส่วนตัวหรือมีเหตุผลอื่น
บทความยอดเยี่ยมมาก ฉันไม่ได้สนใจเกม handheld เป็นพิเศษ แต่สนใจการตัดสินใจด้านการออกแบบในปัจจุบันเกี่ยวกับ display, enclosure, พลังงานจากแบตเตอรี่ และการเชื่อมต่ออยู่เสมอ การรวม Pico W เข้ามาด้วยนั้นดีมาก นี่เป็นหนึ่งในหัวข้อการพัฒนาที่ถูกประเมินต่ำไปในช่วงไม่กี่ปีที่ผ่านมา ขอบคุณที่แชร์