出来事の日付:2026年11月8日
1980年代の家庭用コンピューターを現代的に再解釈したシステムを開発する技術者が、RP2350マイクロコントローラー上でプロポーショナルなビットマップ文字を描画するための、ジャストインタイム(JIT)コンパイル手法を実演した。vic-2350プロジェクトの一環であるこの取り組みは、見過ごされがちな課題に向き合っている。ソフトウェアが決められたタイミングで映像信号を供給しつつ、柔軟な文字組みも実現するという課題だ。
RP2350はHSTX周辺機能を通じてDVI映像を出力できるが、画素そのものは依然としてアプリケーション側で生成する必要がある。このプロジェクトは、チップに搭載された520kBのSRAMの大部分を画面全体のフレームバッファーに割り当てるのではなく、走査線を1本ずつバッファーに組み立てる「race-the-beam」方式を採用している。メモリーを節約でき、遅延も減らせる一方、開発者の技術解説によると、描画エンジンが使える処理時間は1画素当たりおよそ6プロセッサーサイクルに限られる。
資源の限られたシステムでは、文字描画の処理量を予測しやすくする等幅の文字セルが一般的な解決策となる。これに対し、vic-2350は初期のグラフィカルなコンピューターに見られた、文字幅に応じた間隔とカーニングの実現を目指す。テキスト表示オブジェクトには、文字列、フォントへのポインター、前景色と背景色を格納する。オブジェクトが有効になると、描画エンジンは一時領域を確保し、その文字列専用のCortex-M33命令を生成する。生成したコードで1画素1ビットの中間バッファーを埋め、2回目の処理でそれらのビットを16ビットのRGB565画素へ展開する。
これにより、表示生成の中で最も時間制約の厳しい部分から準備処理を切り離せる。プロジェクトでは表示リストをダブルバッファー化し、オブジェクトを垂直位置で並べ替え、現在の走査線と交差するものだけを追跡する。セットアップ用のメソッドでは作業用メモリーを確保でき、走査線ごとの描画メソッドでは生成済みのコードを呼び出す。開発者は、色への展開段階で1画素当たり1.75サイクルの処理速度を維持すると報告している。ただし、提示された資料には、独立した第三者によるベンチマークの再現結果は含まれていない。
メモリーレイアウトにも同様に細かな工夫が施されている。各字形の画素は、フォントと同じ高さの横長ビットマップに詰め込まれ、どの文字も32画素単位の区画の境界をまたがないように配置される。そのため、描画エンジンは1回の32ビット読み込みで1行分を取得できる。字間は空白画素として保存せず、字形のメタデータに保持する。また、重複するビットマップ領域は再利用できる。プロジェクトで説明されたフォントでは、こうした対策によってビットマップの保存容量が1,140バイトから960バイトに減少した。
この手法は用途に特化したものであり、汎用的にテキストライブラリーを置き換えるものではない。実行可能な作業用メモリー、特定のアーキテクチャー向けに生成されたコード、走査線ごとの予測可能な処理を中心に設計した描画パイプラインに依存する。その意義は、工学的な実例にある。RAMと処理サイクルの双方が乏しいマイクロコントローラーでも、表示オブジェクトの起動時に既知の文字列をコンパイルすれば、より豊かなビットマップ文字組みをリアルタイムの映像出力と両立できる。



