둠(DOOM)이 무선 이어버드로 포팅됨

2 weeks ago 6

  • 1993년 고전 게임 DOOM무선 이어버드 PineBuds Pro에서 실행하도록 이식한 프로젝트로, 웹을 통해 원격 플레이 가능
  • 이어버드와 웹 서버를 연결하는 직렬 서버(serial server) , 웹 서버, 정적 웹페이지, 그리고 DOOM 포트의 네 구성 요소로 이루어짐
  • UART 연결을 통해 약 2.4Mbps 대역폭을 확보하고, MJPEG 스트림으로 영상을 전송해 최대 27FPS 이론 성능을 달성
  • CPU를 100MHz에서 300MHz로 오버클럭하고, JPEG 인코딩 한계로 약 18FPS 수준의 실제 성능 확보
  • RAM·FLASH 제약을 최적화와 경량화된 Squashware WAD 파일로 해결해, 오픈소스 펌웨어 기반 하드웨어 실험의 가능성 제시

프로젝트 개요

  • 1993년 출시된 DOOMPineBuds 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 인코딩에서 병목 발생
    • 실제 프레임 속도는 약 18FPS 수준

메모리(RAM) 최적화

  • 기본 접근 가능한 RAM은 768KB, 보조 프로세서 비활성화 시 992KB 확보
  • DOOM은 4MB RAM을 요구하므로 다양한 최적화 수행
    • 룩업 테이블 사전 생성, const 변수 플래시 저장, 캐싱 시스템 비활성화, 불필요 변수 제거 등으로 메모리 절감

플래시(FLASH) 용량 문제

  • DOOM 1의 기본 WAD 파일은 4.2MB로, 이어버드의 4MB 저장 한도를 초과
  • fragglet의 경량화 버전 Squashware WAD(1.7MB) 사용으로 문제 해결
    • 모든 자산이 플래시 내에 수용 가능

오픈소스 및 접근성

  • 프로젝트 코드는 두 개의 GitHub 저장소에서 공개
    • DOOMBuds: 이어버드용 DOOM 포트
    • DOOMBUDS-JS: 브라우저와 이어버드 간 상호작용 지원
  • 웹사이트는 대기열 기반으로 운영되며, 5번째 순서부터 Twitch 스트림저지연 MJPEG 스트림으로 전환

Read Entire Article