テキストモードとは、コンピュータ画面上でコンテンツが個々のピクセルではなく文字で内部的に表現されるコンピュータ表示モードです。通常、画面は均一な長方形の文字セルグリッドで構成され、各セルには文字セットの文字が1つずつ格納されます。これは、グラフィックスモードやその他の種類のコンピュータグラフィックスモードとは対照的です。
テキストモードアプリケーションは、コマンドラインインターフェースとテキストユーザーインターフェースを使用してユーザーと通信します。テキストモードアプリケーションで使用される多くの文字セットには、ボックスやその他の基本的なグラフィックを描画するために使用できる、定義済みの半グラフィック文字が限定的に含まれています。これらは、コンテンツを強調表示したり、 GUIプログラムにあるウィジェットやコントロールインターフェースオブジェクトをシミュレートしたりするために使用できます。典型的な例として、IBMコードページ437文字セットが挙げられます。
テキストモードプログラムの重要な特徴は、等幅フォントを前提としている点です。等幅フォントでは、画面上のすべての文字の幅が同じになるため、半グラフィック文字を表示する際に垂直方向の配置を容易に維持できます。これは、固定ピッチの初期の機械式プリンターを彷彿とさせるものでした。この方式により、画面に表示された出力を同じフォーマットのままプリンターに直接送信することが可能でした。
環境によっては、スクリーンバッファに直接アクセスできるようになります。リモートビデオ端末に映像を出力するプログラムは、スクリーンバッファを操作するために特別な制御シーケンスを発行する必要があります。このような制御シーケンスの最も一般的な規格は、ANSIとVT100です。
制御シーケンスを介して画面バッファにアクセスするプログラムは、実際のディスプレイとの同期を失う可能性があるため、多くのテキストモードプログラムには、すべてを再表示するコマンドが用意されており、多くの場合、 Ctrl+キーの組み合わせに関連付けられていますL。
テキストモードによるビデオレンダリングは、1970年代初頭に普及し始めた。当時、ビデオ対応のテキスト端末が、コンピュータの対話型利用においてテレプリンタに取って代わり始めたのである。
テキストモードの利点は、グラフィックモードと比較してメモリ消費量が少なく、画面操作が速いことです。[ 1 ] 1970年代にテキスト端末がテレプリンタに取って代わり始めた頃、当時のランダムアクセスメモリのコストが非常に高かったため、コンピュータが画面上のすべてのピクセルの現在の値を同時に保存し、現在フレームバッファと呼ばれるものを形成するのに十分なメモリを搭載することは、非常に高価でした。初期のフレームバッファはスタンドアロンデバイスであり、接続される高度な高解像度ディスプレイの費用に加えて、数万ドルの費用がかかりました。[ 2 ] 単純な線グラフィックを必要とするが、フレームバッファの費用を正当化できないアプリケーションでは、ベクターディスプレイが一般的な回避策でした。しかし、多くのコンピュータアプリケーション(データベースへのデータ入力など)では、通常のテキストを迅速かつ費用対効果の高い方法で陰極線管にレンダリングする機能だけが必要でした。
テキストモードでは、専用の表示ハードウェアが陰極線による画面のスキャンごとにテキストの各行を文字からピクセルに再レンダリングすることで、高価なメモリの問題を回避します。その結果、表示ハードウェアは一度に1行(あるいはそれ以下)のテキストに相当するピクセルを格納するのに十分なメモリだけを必要とします。したがって、コンピュータのスクリーンバッファは基となるテキスト文字のみを格納し、その文字を認識します(これが「テキストモード」という名前の由来です)。そして、それらの文字を表す実際のピクセルが単一の統一された画像として存在する唯一の場所は、ユーザーが見る画面そのものです(残像現象のおかげです)。
例えば、標準的な 80 x 25 文字のグリッドを保持するのに十分なスクリーン バッファには、少なくとも 2,000 バイトが必要です。[ 1 ]モノクロ ディスプレイ、1 バイトあたり 8 ビット、各文字の標準サイズが 8 x 8 ビットであると 仮定すると、結果として得られる画面上のすべてのピクセルを保持するのに十分な大きさのフレーム バッファには、少なくとも 128,000 ビット、16,000 バイト、または 16 キロバイト弱が必要になります。現代のコンピュータの基準からすると、これらは取るに足らない量のメモリのように見えるかもしれませんが、文脈を理解するために、初代Apple IIは 1977 年にわずか 4 キロバイトのメモリで、1,300 ドルで発売されました (当時の米国の最低賃金は時給 2.30 ドルでした)。さらに、ビジネスの観点からすると、テキスト ターミナルは、置き換えるはずだった紙を大量に消費するテレプリンタよりも安価に製造および運用できなければ、ビジネスケースとして意味をなしませんでした。
テキストモードのもう1つの利点は、リモート端末での使用において、比較的低い帯域幅要件で済むことです。そのため、テキストモードのリモート端末は、同じ帯域幅に接続されたグラフィックモードのリモート端末よりも、画面の更新速度がはるかに速くなります(結果として、応答性も向上します)。これは、テキストモードでは、リモートサーバーが画面更新ごとに送信する必要があるのは数十バイト程度であるのに対し、複雑なラスターグラフィックのリモートプロシージャコールでは、ビットマップ全体の送信とレンダリングが必要になる場合があるためです。
テキストモードとグラフィカルプログラムの境界は、特にPCのVGAハードウェアにおいては曖昧になることがある。なぜなら、後期のテキストモードプログラムの多くは、ビデオコントローラを操作することで、このモデルを極限まで推し進めようとしたからである。例えば、独自の半グラフィカルな文字を作成するために文字セットを再定義したり、特定の時点でマウスカーソルが表示される文字の外観を再定義することで、グラフィカルなマウスカーソルのような外観を作り出したりした。
ユーザー定義文字を用いたテキストモードレンダリングは、2Dコンピュータゲームやビデオゲームにおいても有用である。なぜなら、ピクセル指向のレンダリングよりもゲーム画面をはるかに高速に操作できるからである。
テキストモードを実装するビデオコントローラは、通常、2つの異なるメモリ領域を使用します。文字メモリまたはパターンテーブルには、使用中のラスタフォントが格納され、各文字はドットマトリックス(ビットのマトリックス)で表現されるため、文字メモリは3次元ビット配列と考えることができます。表示マトリックス(テキストバッファ、スクリーンバッファ、またはネームテーブル)は、各セルにどの文字があるかを追跡します。単純な場合、表示マトリックスはコードポイントのマトリックス(文字ポインタテーブルと呼ばれる)だけで済みますが、通常は各文字位置に対してコードだけでなく属性も格納します。
コンピュータモニターで最も一般的なラスタースキャン出力の場合、対応するビデオ信号は、ビデオ技術で使用される同名のデバイスと同様の特殊な電子ユニットである文字ジェネレータによって生成されます。ビデオコントローラには、画面ドットマトリックスの座標として機能するスキャンラインカウンタとドットカウンタの 2 つのレジスタがあります。それぞれを対応するグリフサイズで割って、表示マトリックスのインデックスを取得します。余りはグリフマトリックスのインデックスになります。グリフサイズが2 nに等しい場合、バイナリレジスタの下位nビットをグリフマトリックスのインデックスとして使用し、残りのビットを表示マトリックスのインデックスとして使用することが可能です(図を参照)。
文字メモリは、システムによっては読み出し専用メモリに格納されます。他のシステムでは、この目的のためにRAMを使用できるため、アプリケーション固有の目的に合わせてフォントや文字セットを再定義することが可能です。RAMベースの文字を使用することで、ビットマップ用に一部の文字を予約し、対応する文字メモリにピクセルを直接書き込むことでピクセルグラフィックスのフレームバッファを実装するなど、いくつかの特殊な技術も容易になります。TMS9918、MOS Technology VIC、ゲームボーイのグラフィックスハードウェアなど、一部の歴史的なグラフィックスチップでは、これがピクセルグラフィックスを実現する標準的な方法でした。
テキストモードでは、表示される文字に属性を割り当てることがよくあります。たとえば、VT100端末では、各文字に下線、明るさ、点滅、反転を設定できます。カラー対応デバイスでは、通常、各文字の色、そして多くの場合背景色も、限られた色のパレットから選択できます。これらの属性は、文字インデックスと共存することも、カラーメモリまたは属性メモリと呼ばれる別のメモリ領域を使用することもできます。[ 3 ]
テキストモードの実装によっては、行属性の概念を持つものもあります。例えば、VT100互換のテキスト端末では、個々のテキスト行の文字の幅と高さを2倍にすることができます。
IBM PC互換コンピュータでは、使用するグラフィックアダプタに応じてさまざまなテキストモードが利用可能です。それらは以下の表に示されています。[ 4 ]
MDAテキストは、明るさ、下線、反転、点滅などの属性で強調表示できます。
一般的にビデオカードは下位互換性があり、例えばEGAはすべてのMDAおよびCGAモードをサポートし、VGAはMDA、CGA、およびEGAモードをサポートします。
DOS環境や初期のWindowsコンソールで最も一般的に使用されていたテキストモードは、デフォルトの80列×25行(80×25)で、16色表示でした。このモードは、ほぼすべてのIBM互換パーソナルコンピュータで利用可能でした。ターミナルエミュレータなどの一部のプログラムは、メインディスプレイに80×24のみを使用し、最下行をステータスバー用に確保していました。
VGAテキストモードには、80×43と80×50という2つのモードが存在するが、これらはほとんど使用されなかった。40桁のテキストモードは、テレビモニターとの互換性を考慮して設計されたゲームやその他のアプリケーション以外ではあまり普及せず、デモンストレーション目的、あるいは非常に古いハードウェアでのみ使用された。
VESA規格に対応した拡張Super VGAテキストモードの文字サイズとグラフィック解像度は、メーカーによって異なります。また、これらのディスプレイアダプタでは、2つ目のカスタム文字セットを使用すると、使用可能な色数が16色から8色に半減します(これにより、画面上に同時に表示できるグラフィック文字の総数は、一般的な256色ではなく、512色になります)。
一部のカード(例:S3)は、100×37や160×120といった非常に大きなテキストモードをサポートしていました。Linuxシステムでは、SVGATextModeというプログラムがSVGAカードと併用され、分割画面端末マルチプレクサなどで使用する非常に大きなコンソールテキストモードを設定するためによく使われます。
グラフィカルインターフェイスを備えた多くの最新プログラムは、テキストモードプログラムの表示スタイルをシミュレートします。これは、特にコンピュータプログラミング中など、テキストの垂直方向の配置を維持することが重要な場合によく見られます。また、ターミナルエミュレータやコマンドラインコンソールなど、テキストモードをエミュレートするソフトウェアコンポーネントも存在します。Microsoft Windowsでは、Win32 コンソールは通常、エミュレートされたグラフィカルウィンドウモードで開きます。AltキーとEnterキーを同時に押すことで、フルスクリーンの真のテキストモードに切り替えたり、その逆を行ったりできます。 [ 5 ]これは、Windows Vista で導入された WDDM ディスプレイ ドライバーではサポートされなくなりました。[ 6 ]
Linuxの仮想コンソールはテキストモードで動作します。ほとんどのLinuxディストリビューションは、 Ctrlキー、Altキー、ファンクションキーを同時に押すことでアクセスできる複数の仮想コンソール画面をサポートしています。

オープンソースライブラリであるAAlibは、 PNGやWMVなどの標準的な画像ファイルや動画ファイルを変換し、 ASCII文字の集合として表示することに特化したプログラムとルーチンを提供します。これにより、テキストモードシステムやLynxなどのテキストモードWebブラウザ上で、グラフィックファイルを基本的なレベルで表示することが可能になります。
UEFIベースのシステムは、Simple Text Output Protocol で Unicode テキスト モード出力のサポートを提供します。[ 7 ]サポートされる最小テキスト解像度は 80×25 以上で、推奨される最小文字セットには基本ラテン Unicode 文字が含まれます。[ 8 ]