12 คะแนน โดย GN⁺ 2025-02-14 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
blurblah 2025-02-17

ก่อนหน้านี้ก็มีแบบทำกันเองในลักษณะงานคราฟต์ในบ้าน ใช้ fpga แล้วซื้อขายกันเฉพาะในหมู่คนที่รู้จักกันอยู่เหมือนกัน แต่ก็มีแบบโอเพนซอร์สด้วยสินะ น่าสนใจดี

 
botplaysdice 2025-02-15

ถึงขั้นเอา FPGA มาเขียนตัว CPU เองเลยสินะ! พอสงสัยว่าโค้ดมีกี่บรรทัดเลยลองไปค้นดู... ดูเหมือนว่าจะเขียนโค้ด FPGA ด้วย Scala ได้ ไม่ใช่ verilog นะครับ/นะคะ ง่ายกว่าที่คิดเลยจนแอบตกใจ

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

สมกับที่เขาว่ากันว่า ในบรรดาคนคลั่งสิ่งใดสิ่งหนึ่ง คนตะวันตกนี่สุดจริง ๆ 555

 
GN⁺ 2025-02-14
ความคิดเห็นจาก Hacker News
  • โปรเจ็กต์นี้เจ๋งมาก ชอบที่บทความในบล็อกเขียนไว้ละเอียดมาก ฉันสงสัยว่าน่าจะต่อกับ GameCube ได้ไหม แต่ในบล็อกก็พูดถึงไว้แล้ว

    • ข้อดีอย่างหนึ่งของความเข้ากันได้กับตลับจริงคือไม่ต้องคำนึงถึง memory mapper ฉันคุ้นกับ mapper หลากหลายแบบของ NES แต่ไม่แน่ใจว่าตลับ GB ทำงานแบบเดียวกันหรือไม่ ฮาร์ดแวร์พิเศษอย่างกล้อง ระบบสั่น หรือจักรเย็บผ้า ก็น่าจะใช้งานได้กับตลับจริงโดยไม่ต้องมีการรองรับพิเศษ
    • ถ้ารองรับการโหลด ROM ก็สงสัยว่าจะต้อง emulation mapper ทั้งหมดบน FPGA หรือไม่
  • ขอบคุณสำหรับโปรเจ็กต์และบทความดี ๆ แบบนี้ ฉันชอบของแนวนี้

    • ก่อนหน้านี้ตอนเห็นคอมเมนต์ รู้สึกผิดหวังที่มีคนตอบแนวว่า "ของแบบนี้มีไปทำไม?" คนพวกนั้นส่วนใหญ่น่าจะไม่เคยลองทำอะไรที่กล้าหาญแบบนี้แม้แต่ 1% โปรเจ็กต์นี้ทั้งเจ๋งและเป็นประสบการณ์การเรียนรู้ที่สนุก
    • ฉันส่งเข้า tip line ของ Hack-A-Day แล้ว ดังนั้นอีกไม่กี่วันอาจมีบทความเกี่ยวกับเรื่องนี้ออกมา
  • ฉันมี Analogue Pocket อยู่ แต่การที่มันใช้ FPGA ไม่ได้มีความหมายมากนักสำหรับฉัน เลยสงสัยว่ามันต่างจาก software emulation มากจริงไหม

    • ฉันรู้ความต่างของสองแนวทางนี้ แต่ยังไม่เข้าใจว่าทำไม software emulation ถึงไม่ดีเท่า FPGA emulation ดูเหมือนว่าทำด้วยซอฟต์แวร์จะยืดหยุ่นกว่า
  • สงสัยว่าต้นทุนรวมของ PCB ที่ลงชิ้นส่วนแล้วอยู่ที่เท่าไร น่าจะประมาณ 60-70 ดอลลาร์

    • ขอบคุณสำหรับบทความและการเขียน อยากให้รวมสิ่งนี้ไว้ใน repository ด้วย
    • ฉันกำลังลองทำดีไซน์คล้ายกัน และวางแผนจะใช้ RP2350B กับ ESP32-C61 เป็น system controller คงจะดีถ้ามีชิปและ pad layout ที่รองรับ legacy BT
    • อีกทางเลือกคือเพิ่มพอร์ต USB เพื่อรองรับอะไรอย่าง 8bitdo USB wireless adapter การรองรับ legacy BT อาจกลายเป็นงานเสริมที่ทำให้โปรเจ็กต์บานปลายได้ การเปิด SPI connection ไว้ภายในเพื่อให้คน hack controller ที่ต้องการเองก็เป็นอีกวิธี
  • ฉันชอบฮาร์ดแวร์โอเพนซอร์ส แต่ก็กังวลว่าถ้าชิ้นส่วนเลิกผลิตแล้วจะทำอย่างไร

    • ผู้ดูแลอาจอัปเดตรายการชิ้นส่วนได้ แต่ก็อาจต้องใช้หลายชิ้นส่วนเพราะปัญหา compatibility ถ้าระหว่างกำลังสั่งซื้อแล้วหาซื้อทั้งหมดไม่ได้จะทำอย่างไร ผู้ดูแลอาจขายเป็นชุดคิทชิ้นส่วนก็ได้ แต่ก็อาจมีปัญหาเกี่ยวกับกฎหมาย IP
  • ปัญหา MISO ของ display controller นี่ขึ้นชื่อมาก ฉันเจอครั้งแรกเมื่อหลายปีก่อน คำแนะนำคือใช้ tri-state buffer บนเส้น chip select หรือแยก bus ไปเลย

    • ปัญหา power domain ก็เจอบ่อยเช่นกัน ในอุปกรณ์ส่วนใหญ่ IO จะประกอบด้วย Vdd, ESD diode, ขา IO, ESD diode และกราวด์ ถ้า Vdd มีเส้นทางความต้านทานลงกราวด์ก็จะเกิดปัญหา สิ่งนี้เกิดขึ้นเมื่อ IC จ่ายไฟมีตัวต้านทานคายประจุที่เอาต์พุต หรือมีทรานซิสเตอร์ที่ยอมให้กระแสไหลลงกราวด์ ในกรณีนี้ขา IO จะเหมือนมีไดโอดขนานกับกราวด์ ถ้าไม่ระวัง กระแสสูงสุดที่ไดรเวอร์จ่ายได้จะไหลผ่านไดโอด
  • ฉันไม่มีประสบการณ์ด้านฮาร์ดแวร์ อาจเป็นความคิดงี่เง่า แต่ระบบเก่าอย่าง 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 เข้ามาด้วยนั้นดีมาก นี่เป็นหนึ่งในหัวข้อการพัฒนาที่ถูกประเมินต่ำไปในช่วงไม่กี่ปีที่ผ่านมา ขอบคุณที่แชร์