- 1993년 고전 게임 DOOM을 무선 이어버드 PineBuds Pro에서 실행하도록 이식한 프로젝트로, 웹을 통해 원격 플레이 가능
- 이어버드와 웹 서버를 연결하는 직렬 서버(serial server) , 웹 서버, 정적 웹페이지, 그리고 DOOM 포트의 네 구성 요소로 이루어짐
-
UART 연결을 통해 약 2.4Mbps 대역폭을 확보하고, MJPEG 스트림으로 영상을 전송해 최대 27FPS 이론 성능을 달성
- CPU를 100MHz에서 300MHz로 오버클럭하고, JPEG 인코딩 한계로 약 18FPS 수준의 실제 성능 확보
-
RAM·FLASH 제약을 최적화와 경량화된 Squashware WAD 파일로 해결해, 오픈소스 펌웨어 기반 하드웨어 실험의 가능성 제시
프로젝트 개요
- 1993년 출시된 DOOM을 PineBuds Pro 이어버드에서 실행하도록 이식
- PineBuds Pro는 오픈소스 펌웨어를 지원하는 유일한 무선 이어버드로 언급
- 웹사이트 방문자는 대기열에 등록해 원격으로 게임을 플레이할 수 있음
- 프로젝트는 네 부분으로 구성
- 이어버드에서 실행되는 DOOM 포트
- 이어버드와 웹 서버를 연결하고 MJPEG 스트림을 Twitch로 변환하는 직렬 서버
- 자산 제공, 대기열 관리, 키 입력 전달, 스트림 표시를 담당하는 웹 서버
- 브라우저 표시 및 서버 통신을 담당하는 정적 웹페이지
하드웨어 및 연결 구조
- 이어버드는 디스플레이가 없어 Bluetooth 또는 UART 접점 패드로 데이터 송수신
- Bluetooth는 약 1Mbps로 느려, UART(2.4Mbps) 가 더 적합
- DOOM의 프레임버퍼는 320×200 해상도, 8비트 컬러로 약 96KB
- UART 대역폭 기준 약 3FPS 전송 가능
- 이를 개선하기 위해 MJPEG 스트림 방식 채택
-
JPEG 인코더로 bitbank2/JPEGENC 사용
- 평균 JPEG 프레임 크기 11~13.5KB
- 이론상 최대 FPS는 22~27FPS 수준
CPU 성능 조정
- 기본 펌웨어의 CPU 클럭은 100MHz이나, 이를 300MHz로 상승시키고 저전력 모드 비활성화
- Cortex-M4F(300MHz)는 DOOM 실행에는 충분하지만 JPEG 인코딩에서 병목 발생
메모리(RAM) 최적화
- 기본 접근 가능한 RAM은 768KB, 보조 프로세서 비활성화 시 992KB 확보
- DOOM은 4MB RAM을 요구하므로 다양한 최적화 수행
-
룩업 테이블 사전 생성, const 변수 플래시 저장, 캐싱 시스템 비활성화, 불필요 변수 제거 등으로 메모리 절감
플래시(FLASH) 용량 문제
- DOOM 1의 기본 WAD 파일은 4.2MB로, 이어버드의 4MB 저장 한도를 초과
-
fragglet의 경량화 버전 Squashware WAD(1.7MB) 사용으로 문제 해결
오픈소스 및 접근성
- 프로젝트 코드는 두 개의 GitHub 저장소에서 공개
- 웹사이트는 대기열 기반으로 운영되며, 5번째 순서부터 Twitch 스트림이 저지연 MJPEG 스트림으로 전환