X4Term — Xteink X4向けポケットVT100端末

Tool

概要

X4Termは、Xteink X4向けに作られた小型のVT100/ANSIターミナル実装です。800×480のe-inkディスプレイに78列×24行でテキストを表示し、USBシリアル経由でホストと通信します。カーソル制御、消去、スクロール領域、行・文字の挿入削除、SGR属性(色・装飾)など主要なエスケープシーケンスに対応。256色やRGBのカラー出力はグレースケールに変換し、Bayerディザリングを用いて見た目の階調を向上させます。小型デバイスのリソースに配慮した設計が特徴です。

GitHub

リポジトリの統計情報

  • スター数: 12
  • フォーク数: 2
  • ウォッチャー数: 12
  • コミット数: 3
  • ファイル数: 12
  • メインの言語: C++

主な特徴

  • VT100/ANSIエスケープシーケンスの広範なサポート(カーソル移動、消去、スクロール等)
  • 代替スクリーンバッファ(CSI ?1049h/l)をサポートし、フルスクリーンアプリと通常画面を切替可能
  • 256色およびRGBをグレースケールにマッピングし、Bayerディザリングで階調表現
  • USBシリアル接続でホストに繋ぎ、78×24のテキスト表示を800×480のe-inkに最適化

技術的なポイント

X4Termは小型e-inkデバイス上でターミナル機能を実現するため、エスケープシーケンスのパースと表示パイプラインが中心になります。まず、入力されたバイト列をステートマシンで解析してCSIやOSCなどの制御シーケンスを取り出し、それに基づいてカーソル位置の更新・行削除・スクロール領域の操作・属性(SGR)適用を行います。表示は文字セル単位の内部バッファ(78×24)を持ち、各セルに文字コードと属性(逆転、下線、強調、カラー)を保持します。

カラー表現はe-inkの特性に合わせてRGBや256色を直接表示する代わりに、まず輝度(luminance)へマッピングし、その結果をBayerディザリングで近似する手法を採っています。これによりフルカラーデータを白黒/グレースケールの限られた階調で自然に見せることができます。e-ink特有の更新遅延やゴースト対策のために、差分更新(フレーム差分)や部分更新を意識した描画戦略が重要です。リフレッシュ時のコストを抑えるため、変更があったセルのみをまとめて更新する実装になっています。

また、リポジトリにはフォントや画像リソース(fonts/、images/)が含まれ、文字レンダリングはビットマップフォントを用いることで高速化・メモリ効率化を図っています。.gitmodulesがあることから外部モジュールをサブモジュールとして取り込む設計が可能で、プロジェクトをシンプルに保ちつつ再利用性を確保しています。C++で書かれており、組込み環境での実行やクロスコンパイルを想定したコード構成がされている点も特徴です。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • .gitmodules: file
  • README.md: file
  • fonts: dir
  • images: dir

…他 7 ファイル

まとめ

e-ink端末で実用的なVT100体験を提供する軽量で実装性の高いプロジェクトです。

リポジトリ情報:

READMEの抜粋:

X4Term

A pocket e-ink VT100 terminal for the Xteink X4.

78 columns x 24 rows on an 800x480 e-ink display, connected via USB serial.

Features

  • VT100/ANSI escape sequences - cursor movement, erase, scroll regions, insert/delete lines and characters, SGR attributes
  • Alternate screen buffer - estore the previous screen on exit (CSI ?1049h/l)
  • 256-color & RGB - mapped to grayscale luminance with Bayer dith…