DOS時代の操作感をESP32で再現、瞬時起動の小型PCシステム「BreezyBox」

FabScene(ファブシーン)

Raspberry Piは便利だが、起動に数十秒かかり、シャットダウンも必要だ。停電や突然の電源断にも弱い。個人Makerのvaldanylchuk氏は、こうした課題に対して、ESP32-S3マイコンを使った別のアプローチを提案する。

valdanylchuk氏が開発した「BreezyBox」は、ESP32-S3上で動作するUnix風のシェル環境だ。電源を入れると瞬時に起動し、エディタ、コンパイラ、オンラインアプリインストーラーを備える。Raspberry Piのような汎用OSのオーバーヘッドなしに、1980年代のDOS時代のPC体験を再現している。

開発のきっかけは「サイバーデッキ」スタイルのクラフトプロジェクトだった。valdanylchuk氏はESP32-S3の性能が趣味のMakerコミュニティで過小評価されていると感じていた。「ESP32-S3は1990年代のPCができたことをすべて実行でき、それ以上のこともできる。現代の無線通信機能も備えている」と同氏は説明する。

BreezyBoxの特徴は、FreeRTOSベースのESP-IDFの標準機能を活用しながら、仮想ターミナル、カレントディレクトリの追跡、Unix風のコマンド群を追加している点だ。ls、cat、echo、cd、pwd、cp、mv、rmといったおなじみのコマンドが使える。ANSI カラーコードにも対応し、F1〜F4キーで複数の仮想ターミナルを切り替えることもできる。

注目すべきは、オンボードコンパイラ「xcc700」の実装だ。これは約16kBのミニCコンパイラで、ESP32-S3上で直接Cプログラムをコンパイルできる。while、if/else、int/char/ポインタ/配列の限定的なサポート、関数呼び出しと定義、基本的な算術演算とビット演算をサポートする。xcc700自身も自己コンパイル可能で、開発者がフォークして拡張することを想定している。

アプリのインストールも工夫されている。GitHubリポジトリから直接ELFファイルをダウンロードして実行できる仕組みで、承認や待機は不要だ。valdanylchuk氏のbreezyappsリポジトリには、プラズマエフェクト、viクローン、gzip/gunzip、wgetなどのアプリが公開されている。

ハードウェアは、Waveshare ESP32-S3-Touch-LCD-7Bという7インチ1024×600ディスプレイ搭載の開発ボードを使用している。ただし、この大きなディスプレイをESP32-S3で高速駆動するのは容易ではない。valdanylchuk氏は、LVGLの標準的な使い方を諦め、IRAM内に10スキャンライン分のバウンスバッファを用意し、カスタムの文字生成ロジックで直接書き込む方式を採用した。その結果、フルスクリーン更新で36FPS、テキストバッファ書き込みで最大60FPSを実現した。

BreezyBoxのコアコンポーネントは、Espressif Components Registryに登録されており、他のESP-IDFプロジェクトに組み込むことができる。valdanylchuk氏は「BreezyBoxは、ディスプレイやボード設定の詳細をユーザーのファームウェアプロジェクトに委ね、主に仮想ターミナル、仮想ファイルシステム機能、シェルコマンドを提供する」と説明する。

現在のデモはWaveshare ESP32-S3-Touch-LCD-7Bのみに対応しているが、ソースコードから接続方法が分かるため、他のディスプレイやボードに移植できる。「10ドルの2インチLCD付きS3開発ボードから始めることもできる」と同氏は提案する。

valdanylchuk氏は「FabGLのような既存プロジェクトから得た教訓は『モノリスを作らないこと』だ。だからBreezyBoxのコアは小さくハードウェア非依存に保ち、コンポーネントとしてパッケージ化している」と語る。FabGLはESP32用のグラフィックライブラリだが、新しいESP32コントローラーへの対応が停止している。

今後の展開として、valdanylchuk氏はサウンド機能の追加、レトロゲームの移植、VGA風グラフィックモードの実装を計画している。また、より多くの開発者がBreezyBoxを使った独自のプロジェクトやELFアプリを公開することを期待している。「オープンで再利用可能なプラットフォームであり、ワンオフのデモではないことを示したい」と同氏は述べている。

fabsceneの更新情報はXで配信中です

この記事の感想・意見をSNSで共有しよう
  • URLをコピーしました!