12 điểm bởi GN⁺ 2025-02-14 | 3 bình luận | Chia sẻ qua WhatsApp
  • Game Bub là một thiết bị cầm tay mô phỏng retro dựa trên FPGA mã nguồn mở, hỗ trợ các trò chơi "Game Boy, Game Boy Color, Game Boy Advance"
  • Có thể sử dụng băng game vật lý, đồng thời cũng chạy được các trò chơi được mô phỏng thông qua tệp ROM lưu trên thẻ microSD
  • Trước đây chưa có trình mô phỏng FPGA mã nguồn mở nào có thể chạy được băng game thật như vậy, và một trong những mục tiêu chính là tự tay thực hiện mọi thứ để có thể hiểu rõ toàn bộ các thành phần
  • Vì vậy, tác giả đã tự thiết kế PCB, viết firmware, xây dựng trình mô phỏng Game Boy và Game Boy Advance cho FPGA (dùng Chisel HDL), đồng thời thiết kế cả vỏ in 3D
  • Hỗ trợ Game Link Cable nên cũng có thể chơi nhiều người ở chế độ GB và GBA
  • Bao gồm các tính năng như xuất HDMI (qua dock), motor rung, đồng hồ thời gian thực, và được thiết kế để có thể mở rộng thêm bằng các bản cập nhật phần mềm sau này
  • Thiết bị dựa trên PCB 6 lớp tích hợp Xilinx XC7A100T FPGA, được đóng gói trong một vỏ tùy chỉnh in 3D

Mục tiêu dự án

  • Tạo ra một thiết bị cầm tay FPGA dùng pin sạc độc lập
  • Giảm thiểu chi phí và độ phức tạp, sử dụng linh kiện thương mại nhiều nhất có thể
  • Có thể chạy game Game Boy / Game Boy Color / Game Boy Advance
  • Hỗ trợ băng game vật lý và tệp ROM trên thẻ microSD
  • Cung cấp UI trực quan và overlay trong game
  • Tích hợp màn hình, loa và ngõ ra tai nghe
  • Hỗ trợ xuất HDMI
  • Tính đến khả năng mở rộng trong tương lai (hỗ trợ hệ máy khác, Wi‑Fi, v.v.)
  • Tự phát triển lõi mô phỏng FPGA, đồng thời tự thiết kế phần cứng và driver để có thể hiểu hoàn toàn hệ thống

Góc nhìn về retro gaming dựa trên FPGA

  • Nhận định rằng "chơi game trên FPGA chính xác hơn mô phỏng phần mềm" là một cách tiếp thị bị phóng đại
  • FPGA cũng là một trình mô phỏng, và chỉ hoạt động chính xác đến mức nó được lập trình
  • Trình mô phỏng phần mềm cũng có thể đạt độ chính xác rất cao và có tính tiếp cận tốt
  • Ưu điểm lớn nhất của trình mô phỏng dựa trên FPGA là dễ kết nối với phần cứng vật lý (băng game, cáp link, v.v.)

Tổng quan thiết kế phần cứng

  • Cấu trúc FPGA + vi điều khiển (MCU): FPGA đảm nhiệm mô phỏng cốt lõi, còn MCU xử lý UI, nạp ROM, quản lý điện năng, v.v.
  • Hỗ trợ Wi‑Fi và Bluetooth: dùng mô-đun ESP32-S3 (tuy nhiên không hỗ trợ Bluetooth Classic)
  • Màn hình: LCD 320x480 3,5 inch (có thể phóng to màn hình game lên gấp 2)
  • Pin và quản lý điện năng: pin lithium-ion, dùng IC sạc TI BQ2407x, kèm IC đo mức pin MAX17048 để theo dõi trạng thái nguồn
  • Âm thanh: dùng codec âm thanh TLV320DAC3101, hỗ trợ xuất stereo và điều chỉnh âm lượng kỹ thuật số
  • Thiết bị nhập liệu: sử dụng loại nút bấm có độ nảy tốt từng dùng trên GBA SP để mang lại cảm giác điều khiển tốt
  • Bộ nhớ: sử dụng 32MB SDRAM để lưu ROM được mô phỏng
  • Cổng băng game và cổng link: có thể kết nối trực tiếp băng game thật, kèm tính năng nhận biết chuyển đổi GBA/GBC
  • Các tính năng khác: tích hợp IMU (cảm biến chuyển động), đồng hồ thời gian thực (RTC), motor rung

Thiết kế và kiểm thử PCB

  • PCB được thiết kế bằng KiCad
  • FPGA (Artix-7) dùng gói BGA nên được thiết kế trên PCB 6 lớp
  • Ở bài kiểm tra nguyên mẫu đầu tiên, phần lớn các chức năng hoạt động bình thường, dù phát hiện một số vấn đề về quản lý điện năng
  • Sau khi thử nghiệm ban đầu bằng MicroPython, firmware cho MCU được viết bằng Rust

Phát triển GUI và firmware

  • GUI nền tảng Rust được triển khai bằng framework UI Slint
  • Tối ưu tốc độ cập nhật LCD, và thiết kế để FPGA trực tiếp điều khiển màn hình thay vì MCU
  • Bổ sung tính năng truyền dữ liệu bằng TinyUSB để microSD có thể được nhận diện như USB Mass Storage

Bổ sung hỗ trợ Game Boy Advance

  • Triển khai CPU ARM7TDMI (kiến trúc pipeline 3 giai đoạn)
  • Triển khai trực tiếp các thành phần phần cứng GBA như PPU, DMA, timer, âm thanh trên FPGA
  • Để hỗ trợ băng game vật lý, đã phân tích giao thức bus đặc thù của GBA và tái tạo lại trên FPGA
  • Hỗ trợ multiplayer GBA-GBA qua cáp link và kết nối với GameCube

Bản sửa đổi phần cứng thứ hai

  • Thiết kế lại bo mạch và vỏ để áp dụng thiết kế mỏng hơn và công thái học hơn
  • Điều chỉnh vị trí nút bấm để mang lại cảm giác thao tác tương tự GBA SP
  • Loại bỏ cổng HDMI, thay vào đó thiết kế dock tùy chỉnh dựa trên USB-C để bổ sung xuất HDMI và hỗ trợ tay cầm
  • Chế tạo riêng kính phủ màn hình LCD để tạo ra thiết kế cao cấp hơn

Thiết kế dock và xuất HDMI

  • Dock được thiết kế theo cách xuất tín hiệu HDMI tùy chỉnh thông qua cổng USB-C
  • Sử dụng MCU nền Raspberry Pi Pico W để có thể hỗ trợ tay cầm không dây
  • Dock còn cung cấp chức năng USB hub để kết nối cả tay cầm có dây

Kế hoạch tương lai và khả năng mở rộng

  • Hoàn thiện dock và triển khai hỗ trợ tay cầm Bluetooth
  • Tiếp tục cải thiện độ chính xác của trình mô phỏng Game Boy Advance với mục tiêu vượt qua các bài kiểm tra của mGBA
  • Nghiên cứu mô phỏng cáp link không dây (triển khai GBA Wireless Adapter dựa trên Wi‑Fi)
  • Xem xét hỗ trợ thêm các tính năng như giao tiếp hồng ngoại Game Boy, cảm biến ánh nắng của Boktai, Game Boy Camera

Danh sách mong muốn cho việc sản xuất (nếu có thể sản xuất hàng loạt)

  • Tấm nền LCD tùy chỉnh độ phân giải 720x480 (có thể phóng to GBA gấp 3)
  • Vỏ đúc phun và nút bấm chất lượng cao
  • Pack pin tùy chỉnh (tối ưu hiệu quả sử dụng không gian bên trong)
  • Sử dụng SRAM và SDRAM dạng BGA (giúp thiết kế PCB nhỏ hơn)

Mã nguồn mở và tài liệu tham khảo

  • Mã nguồn và sơ đồ mạch của dự án: GitHub
  • Tài liệu phần cứng Game Boy và GBA: Pan Docs, GBATEK
  • Công cụ mã nguồn mở: KiCad, FreeCAD, Chisel, Verilator, Slint, v.v.

Tổng kết

  • Game Bub không chỉ là một máy chơi game retro đơn thuần, mà là một dự án đầy tham vọng nhằm mở rộng khả năng của mô phỏng dựa trên FPGA
  • Trong tương lai, dự án sẽ tiếp tục phát triển cùng cộng đồng mã nguồn mở bằng cách bổ sung nhiều tính năng mở rộng khác nhau

3 bình luận

 
blurblah 2025-02-17

Trước giờ cũng có kiểu làm thủ công tại gia bằng FPGA rồi chỉ những người trong giới biết mới trao đổi mua bán với nhau, không ngờ lại còn có cả bản mã nguồn mở nữa. Thú vị thật.

 
botplaysdice 2025-02-15

Đúng là họ đã tự triển khai cả CPU bằng FPGA!, tôi tò mò về số lượng dòng code nên tìm thử thì hóa ra... có vẻ có thể lập trình FPGA bằng Scala chứ không phải kiểu như Verilog. Đơn giản hơn tôi tưởng nên khá bất ngờ.

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

Bảo là trong những người mê thì fan Tây mới là đỉnh của đỉnh... haha

 
GN⁺ 2025-02-14
Ý kiến trên Hacker News
  • Dự án này thật sự rất tuyệt. Bài viết blog được viết rất kỹ lưỡng nên đọc rất thích. Tôi đã tự hỏi liệu nó có thể kết nối với GameCube hay không, và hóa ra điều đó đã được nhắc đến trong blog rồi

    • Một trong những lợi thế của khả năng tương thích với cartridge thật là không cần phải bận tâm đến memory mapper. Tôi quen với nhiều mapper khác nhau của NES, nhưng không chắc cartridge GB có hoạt động theo cách tương tự không. Có vẻ như cả phần cứng đặc biệt như camera, rung hay máy may cũng sẽ hoạt động với cartridge gốc mà không cần hỗ trợ riêng
    • Nếu hỗ trợ nạp ROM thì tôi tự hỏi liệu có phải giả lập mọi mapper trên FPGA hay không
  • Cảm ơn vì dự án tuyệt vời và bài viết rất hay. Tôi rất thích những thứ như thế này

    • Trước đây khi đọc bình luận, tôi đã thấy thất vọng vì có quá nhiều phản ứng kiểu "tại sao thứ này lại tồn tại?". Phần lớn là những người chưa từng thử làm dù chỉ 1% của các dự án táo bạo như thế này. Dự án này rất ngầu và là một trải nghiệm học hỏi đầy thú vị
    • Tôi đã gửi nó vào tip line của Hack-A-Day, nên có thể trong vài ngày tới sẽ có bài viết liên quan
  • Tôi có một chiếc Analogue Pocket, nhưng việc nó dùng FPGA không có nhiều ý nghĩa với tôi. Tôi tự hỏi liệu so với giả lập bằng phần mềm thì khác biệt có thực sự lớn không

    • Tôi biết sự khác nhau giữa hai cách tiếp cận, nhưng không hiểu vì sao giả lập bằng phần mềm lại không thể tốt ngang giả lập bằng FPGA. Làm bằng phần mềm có vẻ sẽ linh hoạt hơn
  • Tôi tự hỏi tổng chi phí của PCB sau khi gắn linh kiện là bao nhiêu. Chắc khoảng 60-70 thôi

    • Cảm ơn vì bài blog và phần trình bày, sẽ rất hay nếu đưa nó vào kho lưu trữ
    • Tôi cũng đang thử một thiết kế tương tự và dự định dùng RP2350B và ESP32-C61 làm system controller. Sẽ tốt hơn nếu có một con chip và pad layout hỗ trợ legacy BT
    • Một lựa chọn khác là thêm cổng USB để hỗ trợ thứ như adapter không dây USB của 8bitdo. Hỗ trợ legacy BT có thể trở thành phần việc phát sinh làm hỏng cả dự án. Một cách khác là đưa kết nối SPI ra bên trong để người dùng có thể tự hack bộ điều khiển họ muốn
  • Tôi thích phần cứng mã nguồn mở, nhưng vẫn băn khoăn chuyện gì sẽ xảy ra khi linh kiện bị ngừng sản xuất

    • Người bảo trì có thể cập nhật danh sách linh kiện, nhưng vì vấn đề tương thích có thể sẽ cần nhiều lựa chọn linh kiện khác nhau. Nếu đang mua linh kiện mà đột nhiên không thể tìm đủ tất cả nữa thì phải làm sao? Có lẽ người bảo trì có thể bán các bộ kit linh kiện. Tuy nhiên điều đó có thể phát sinh vấn đề liên quan đến luật IP
  • Vấn đề MISO của display controller vốn nổi tiếng tai tiếng. Tôi đã gặp nó lần đầu vài năm trước. Người ta thường khuyến nghị dùng tri-state buffer trên đường chip select hoặc tách riêng bus

    • Vấn đề power domain cũng xảy ra rất thường xuyên. Trong đa số thiết bị, IO được cấu thành bởi Vdd, diode ESD, chân IO, diode ESD và ground. Nếu Vdd có một đường điện trở xuống ground thì sẽ phát sinh vấn đề. Điều này xảy ra khi IC cấp nguồn có điện trở xả đầu ra hoặc transistor cho phép dòng đi xuống ground. Khi đó chân IO sẽ có một diode song song với ground. Nếu không cẩn thận, dòng điện tối đa mà driver có thể cấp sẽ chảy qua diode đó
  • Tôi không có kinh nghiệm phần cứng nên có thể đây là suy nghĩ ngớ ngẩn, nhưng các hệ máy cũ như NES, SNES, Genesis tương đối đơn giản. Bằng sáng chế cũng có thời hạn. Tôi thắc mắc vì sao không có một bản tái tạo phần cứng dùng SoC để giả lập gần như hoàn hảo những hệ thống này. Có vẻ các dự án FPGA là thứ gần nhất, nhưng FPGA lại đắt so với các thiết kế CPU 40 năm tuổi và 1kb RAM

  • Dự án rất tuyệt. Việc UI được xây bằng Rust và Slint thực sự rất hay. Đó cũng là framework GUI mà tôi đang làm việc

  • Quá tuyệt vời. Tôi không rõ tác giả có giải thích lý do chọn bố cục dọc hay chưa. Trong không gian FPGA hiện tại, hầu như mọi thứ đều theo kiểu GBC. Tôi tò mò không biết đó là sở thích cá nhân hay còn lý do nào khác

  • Một bài viết xuất sắc. Tôi không quá quan tâm đến máy chơi game cầm tay, nhưng luôn hứng thú với các quyết định thiết kế hiện nay liên quan đến màn hình, vỏ máy, nguồn pin và kết nối. Việc tích hợp Pico W rất hay. Đó là một trong những hạng mục phát triển bị đánh giá thấp trong vài năm gần đây. Cảm ơn vì đã chia sẻ