概要
- Pinebuds ProでDOOMを動作させた技術デモ
- インターネット経由でリモートプレイが可能な仕組み
- ハードウェア制約を工夫で突破した解説
- ソースコード・技術情報も公開
- プレイ体験やシステム構成の詳細説明
インターネット接続イヤホンでDOOMをプレイ!
- Pinebuds Pro で1993年の名作 DOOM を動作させたプロジェクト
- WASD で移動、 矢印キー で視点操作、 スペース で射撃、 Shift でダッシュ
- Eキー でドアやオブジェクトとインタラクト、 数字キー で武器切り替え
- Escape/Enter でメニュー、 Tab でマップ表示
- 死亡時は Eキー でリスポーン
- プレイヤーは キュー制、自分の順番・待機人数・待ち時間が表示
そもそもこれは何なのか?
- 1993年の DOOM を イヤホン で動かし、さらに インターネット経由で遠隔操作 できるデモ
- Pinebuds Pro 専用、 オープンソースファームウェア 搭載イヤホンのみ対応
- 他のイヤホンでは動作不可
ソースコードの公開と自分での実行
- DOOMBuds リポジトリ:DOOMをイヤホン上で動かす移植版
- DOOMBUDS-JS リポジトリ:ブラウザからイヤホンとやりとりするための仕組み
- 誰でもコード参照・自分のPinebudsで実行可能
Twitch配信について
- Twitch配信 は 帯域コスト削減のための最適化
- キューで 5番目 になると 低遅延MJPEGストリーム に自動切り替え
システム構成の概要
- プロジェクトは 4つのパート で構成
- DOOM移植版 (イヤホン上で動作)
- シリアルサーバ (イヤホンとWebサーバの橋渡し、MJPEG→Twitch変換も担当)
- Webサーバ (アセット配信、キュー管理、キープレス転送、MJPEG表示)
- 静的Webページ (ブラウザ表示/サーバ通信制御)
ハードウェア制約への対処
- ディスプレイ非搭載 のため、データ転送は Bluetooth または UART接点 経由
- Bluetooth は最大1Mbpsと遅く、 UART (2.4Mbps)が最適
- DOOMのフレームバッファ は96KB(320×200×8bit)
- UART帯域 では3FPS程度しか出せず、 MJPEGストリーム で圧縮送信
- JPEGフレーム は高品質で約13.5KB、平均11KB程度
- 理論最大FPS
- 楽観値:27.3FPS
- 保守値:22.2FPS
CPUとRAMの工夫
- CPUクロック を100MHz→300MHzへ上昇、低電力モード無効化
- Cortex-M4F (300MHz)はDOOM動作に十分、JPEGエンコードがボトルネック
- 最大18FPS程度が限界
- RAM は標準768KB、コプロセッサ無効化で992KB
- DOOMは4MB必要 だが、各種最適化で削減
- ルックアップテーブル事前生成、不変変数のconst化、フラッシュから読み込み、キャッシュ無効化、不要変数削除
フラッシュメモリの工夫
- DOOM 1シェアウェアWAD は4.2MB、イヤホンの容量は4MB
- fragglet 氏作成の Squashware WAD (1.7MB)を利用
- これにより全データがフラッシュに収まる
まとめ
- Pinebuds Pro を使った超小型デバイスでの DOOM移植 と リモートプレイ
- ハードウェア制約を 圧縮・最適化・OSS活用 で突破
- ソースコード・技術情報 も公開され、DIYも可能
- 技術詳細や今後の解説記事・動画も予定