Game Bub - 오픈소스 FPGA 레트로 에뮬레이션 휴대기기

4 weeks ago 6

  • Game Bub은 오픈소스 FPGA 기반의 레트로 에뮬레이션 핸드헬드 기기로, "Game Boy, Game Boy Color, Game Boy Advance" 게임을 지원함
  • 물리적인 게임 카트리지를 사용할 수 있으며, microSD 카드에 저장된 ROM 파일을 통해 에뮬레이션된 게임도 실행 가능함
  • 이렇게 실제 카트리지를 재생할 수 있는 기존 오픈 소스 FPGA 에뮬레이터는 없었고, 주요 목표 중 하나는 모든 작업을 직접 수행하고 모든 구성 요소를 이해할 수 있도록 하는 것
  • 그래서 직접 PCB를 설계하고 펌웨어를 작성하고 FPGA용 게임보이 및 게임보이 어드밴스 에뮬레이터(Chisel HDL 사용)를 작성하고 3D 프린팅 케이스도 디자인함
  • Game Link Cable을 지원하여 GB 및 GBA 모드에서 멀티플레이도 가능
  • HDMI 출력(도크 사용), 진동 모터, 실시간 시계 등의 기능을 포함하며, 향후 소프트웨어 업데이트로 확장 가능하도록 설계됨
  • Xilinx XC7A100T FPGA가 탑재된 6층 PCB를 기반으로 하며, 맞춤형 3D 프린팅 인클로저에 패키징됨

프로젝트 목표

  • 독립적인 충전식 배터리 기반 FPGA 핸드헬드 기기 제작
  • 비용과 복잡성을 최소화하고, 가능한 한 상용 부품을 사용
  • Game Boy / Game Boy Color / Game Boy Advance 게임 실행 가능
  • 물리적 카트리지 및 microSD 카드 기반 ROM 파일 지원
  • 직관적인 UI 및 인게임 오버레이 제공
  • 디스플레이, 스피커, 헤드폰 출력 통합
  • HDMI 출력 지원
  • 향후 확장 가능성 고려 (다른 시스템 지원, Wi-Fi 등)
  • 직접 FPGA 에뮬레이터 코어를 개발하고, 하드웨어 및 드라이버도 직접 설계하여 시스템을 완전히 이해할 수 있도록 함

FPGA 기반 레트로 게이밍에 대한 견해

  • "FPGA 기반 게이밍이 소프트웨어 에뮬레이션보다 정확하다"는 주장은 과장된 마케팅임
  • FPGA 역시 에뮬레이터이며, 프로그램된 만큼만 정확하게 동작함
  • 소프트웨어 에뮬레이터도 매우 높은 정확도를 가질 수 있으며, 접근성이 뛰어남
  • FPGA 기반 에뮬레이터의 가장 큰 장점은 물리적 하드웨어(카트리지, 링크 케이블 등)와 쉽게 연결 가능하다는 점

하드웨어 설계 개요

  • FPGA + 마이크로컨트롤러(MCU) 구조: FPGA는 핵심 에뮬레이션을 담당하고, MCU가 UI 처리, ROM 로딩, 전력 관리 등을 수행
  • Wi-Fi 및 Bluetooth 지원: ESP32-S3 모듈 사용 (다만 Bluetooth Classic은 지원되지 않음)
  • 디스플레이: 3.5인치 320x480 LCD (게임 화면 2배 확대 가능)
  • 배터리 및 전력 관리: 리튬 이온 배터리, TI BQ2407x 충전 IC 사용, 전력 상태 확인을 위한 MAX17048 연료 게이지 IC 포함
  • 오디오: TLV320DAC3101 오디오 코덱을 사용하여 스테레오 출력 및 디지털 볼륨 조절 지원
  • 입력 장치: GBA SP에서 사용된 클릭감 있는 버튼을 채택하여 좋은 조작감을 제공
  • 메모리: 32MB SDRAM을 사용하여 에뮬레이션된 ROM을 저장
  • 카트리지 및 링크 포트: 실물 카트리지를 직접 연결할 수 있으며, GBA/GBC 전환 감지 기능 포함
  • 기타 기능: IMU(모션 센서), 실시간 시계(RTC), 진동 모터 포함

PCB 설계 및 테스트

  • KiCad를 사용하여 PCB 설계 진행
  • FPGA(Artix-7)는 BGA 패키지를 사용하여 6층 PCB로 설계됨
  • 1차 프로토타입 테스트에서 대부분의 기능이 정상 작동했으며, 일부 전력 관리 이슈가 발견됨
  • MicroPython을 이용하여 초기 테스트 진행 후 Rust로 MCU 펌웨어 작성

GUI 및 펌웨어 개발

  • Slint UI 프레임워크를 사용하여 Rust 기반 GUI 구현
  • LCD 업데이트 속도를 최적화하고, MCU가 아닌 FPGA가 직접 디스플레이를 구동하도록 설계
  • microSD를 USB Mass Storage로 인식할 수 있도록 TinyUSB를 이용한 데이터 전송 기능 추가

Game Boy Advance 지원 추가

  • ARM7TDMI CPU 구현 (3단계 파이프라인 구조)
  • PPU, DMA, 타이머, 오디오 등 GBA 하드웨어 구성 요소를 FPGA에서 직접 구현
  • 물리적 카트리지 지원을 위해 GBA의 특수한 버스 프로토콜 분석 및 FPGA에서 재현
  • 링크 케이블을 이용한 GBA-GBA 멀티플레이 및 GameCube 연결 지원

두 번째 하드웨어 개정판

  • 기판 및 인클로저를 새롭게 설계하여 더 얇고 인체공학적인 디자인 적용
  • 버튼 위치를 조정하여 GBA SP와 유사한 조작감 제공
  • HDMI 포트를 제거하고, USB-C 기반 맞춤형 도크를 설계하여 HDMI 출력 및 컨트롤러 지원 추가
  • LCD 커버 글래스를 맞춤 제작하여 더 고급스러운 디자인 구현

도크 설계 및 HDMI 출력

  • USB-C 포트를 통해 맞춤형 HDMI 신호를 출력하는 방식으로 도크 설계
  • Raspberry Pi Pico W 기반 MCU를 사용하여 무선 컨트롤러 지원 가능
  • 도크에서 USB 허브 기능을 제공하여 유선 컨트롤러도 연결 가능

향후 계획 및 확장 가능성

  • 도크 완성 및 Bluetooth 컨트롤러 지원 구현
  • Game Boy Advance 에뮬레이터의 정확도를 더욱 개선하여 mGBA 테스트 통과 목표
  • 무선 링크 케이블 에뮬레이션(Wi-Fi 기반 GBA Wireless Adapter 구현) 연구
  • Game Boy IR 통신, Boktai 태양 센서, Game Boy Camera 등의 추가 기능 지원 검토

제작 희망 목록 (대량 생산 가능 시)

  • 720x480 해상도의 맞춤형 LCD 패널 (GBA 3배 확대 가능)
  • 사출 성형 인클로저 및 고품질 버튼
  • 맞춤형 배터리팩 (내부 공간 효율 최적화)
  • BGA 기반 SRAM 및 SDRAM 사용 (더 작은 PCB 설계 가능)

오픈소스 및 참고 자료

  • 프로젝트 소스코드 및 회로도: GitHub
  • Game Boy 및 GBA 하드웨어 문서: Pan Docs, GBATEK
  • 오픈소스 도구: KiCad, FreeCAD, Chisel, Verilator, Slint 등

정리

  • Game Bub은 단순한 레트로 게임기가 아니라, FPGA 기반 에뮬레이션의 가능성을 확장하는 도전적인 프로젝트
  • 향후 다양한 확장 기능을 추가하며, 오픈소스 커뮤니티와 함께 발전해 나갈 계획

Read Entire Article