-
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 기반 에뮬레이션의 가능성을 확장하는 도전적인 프로젝트임
- 향후 다양한 확장 기능을 추가하며, 오픈소스 커뮤니티와 함께 발전해 나갈 계획