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

가내수공업 형태로 fpga로 만들어서 아는 사람들만 거래하거나 하기도 했는데 오픈소스로 된 것도 있었군요. 재밌네요

FPGA로 CPU까지 직접 구현했군요!, 코드라인수가 궁금해서 찾아봤더니... verilog같은게 아니라 Scala로 FPGA코딩을 할 수 있나봐요. 생각보다 간단해서 놀랐음.

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

덕중의 덕은 양덕이라더니...ㅎㅎ

Hacker News 의견
  • 정말 멋진 프로젝트임. 블로그 글이 매우 철저하게 작성되어 있어 좋았음. 게임큐브와 연결할 수 있을지 궁금했는데 이미 블로그에 언급되어 있었음

    • 실제 카트리지 호환성의 장점 중 하나는 메모리 매퍼를 고려할 필요가 없다는 것임. NES의 다양한 매퍼에 익숙하지만 GB 카트리지가 같은 방식으로 작동하는지는 확실하지 않음. 카메라, 진동, 재봉틀 같은 특수 하드웨어도 원래 카트리지로 특별한 지원 없이 작동할 것 같음
    • ROM 로딩을 지원한다면 FPGA에서 모든 매퍼를 에뮬레이트해야 하는지 궁금함
  • 멋진 프로젝트와 글 작성에 감사함. 이런 것들을 좋아함

    • 이전에 댓글을 봤을 때 "왜 이런 게 존재하냐?"는 반응이 많아 실망했음. 이런 대담한 프로젝트의 1%도 시도해보지 않은 사람들이 대부분임. 이 프로젝트는 멋지고 재미있는 학습 경험임
    • Hack-A-Day의 팁 라인에 제출했으니 며칠 내로 관련 기사가 나올 수 있음
  • Analogue Pocket을 가지고 있는데, FPGA를 사용한다는 사실이 나에게는 큰 의미가 없음. 소프트웨어 에뮬레이션과 비교했을 때 정말 큰 차이가 있는지 궁금함

    • 두 방식의 차이를 알고 있지만, 소프트웨어 에뮬레이션이 FPGA 에뮬레이션만큼 좋지 않은 이유를 이해하지 못함. 소프트웨어로 하는 것이 더 유연할 것 같음
  • 부품이 장착된 PCB의 총 비용이 얼마인지 궁금함. 아마 60-70개 정도일 것 같음

    • 블로그 글과 작성에 감사하며, 이를 저장소에 포함시키면 좋을 것 같음
    • 비슷한 디자인을 시도하고 있으며, 시스템 컨트롤러로 RP2350B와 ESP32-C61을 사용할 예정임. 레거시 BT를 지원하는 칩과 패드 레이아웃이 있으면 좋겠음
    • USB 포트를 추가하여 8bitdo USB 무선 어댑터 같은 것을 지원하는 것도 옵션임. 레거시 BT 지원이 프로젝트를 망칠 수 있는 부가 작업이 될 수 있음. SPI 연결을 내부에 노출하여 원하는 컨트롤러를 해킹할 수 있게 하는 것도 방법임
  • 오픈 소스 하드웨어를 좋아하지만, 부품이 생산 중단되면 어떻게 되는지 고민임

    • 유지보수자가 부품 목록을 업데이트할 수 있지만, 호환성 문제로 여러 부품이 필요할 수 있음. 부품을 구매하는 중에 모두 구할 수 없게 되면 어떻게 해야 할지 고민임. 유지보수자가 부품 키트를 판매하는 것도 방법일 수 있음. 그러나 IP 법과 관련된 문제가 있을 수 있음
  • 디스플레이 컨트롤러 MISO 문제는 악명이 높음. 몇 년 전 처음 접했음. 칩 선택 라인에 트라이스테이트 버퍼를 사용하거나 버스를 분리하는 것이 추천됨

    • 전원 도메인 문제도 자주 발생함. 대부분의 장치에서 IO는 Vdd, ESD 다이오드, IO 핀, ESD 다이오드, 그라운드로 구성됨. Vdd가 그라운드로의 저항 경로를 가지면 문제가 발생함. 전원 공급 IC에서 출력 방전 저항이나 트랜지스터가 그라운드로 전류를 허용할 때 발생함. 이 경우 IO 핀이 그라운드와 병렬로 다이오드를 가지게 됨. 조심하지 않으면 드라이버가 제공할 수 있는 최대 전류가 다이오드를 통해 흐르게 됨
  • 하드웨어 경험이 없어서 바보 같은 생각일 수도 있지만, NES, SNES, Genesis 같은 오래된 시스템은 비교적 간단함. 특허도 수명이 있음. 왜 SOC를 통해 시스템을 거의 완벽하게 에뮬레이트하는 하드웨어 재창조가 없는지 궁금함. FPGA 프로젝트가 가장 가까운 것 같지만, FPGA는 40년 된 CPU 디자인과 1kb의 RAM에 비해 비쌈

  • 멋진 프로젝트임. UI가 Rust와 Slint로 구축된 것이 정말 멋짐. 내가 작업 중인 GUI 프레임워크임

  • 환상적임. 세로 레이아웃을 선택한 이유를 설명했는지 모르겠음. 기존의 FPGA 공간에서는 모두 GBC 스타일임. 개인적인 취향인지 아니면 다른 이유가 있는지 궁금함

  • 훌륭한 글임. 게임 핸드헬드에 관심이 없지만, 디스플레이, 인클로저, 배터리 전원 및 연결성에 대한 현재의 설계 결정에 항상 관심이 있음. Pico W 통합이 좋음. 최근 몇 년간 저평가된 개발 항목 중 하나임. 공유해줘서 고마움