VGA テキスト モードは、1987 年に IBM がIBM PS/2コンピュータのVGA規格の一部として導入しました。[ 1 ] IBM PC 互換機での使用は1990 年代を通じて広く普及し、現代のコンピュータの一部のアプリケーションでは現在も使用されています。[ 2 ] VGA テキスト モードの主な機能は、色付き (プログラム可能な 16 色パレット) の文字とその背景、点滅、カーソルのさまざまな形状(ブロック / 下線 / 非表示の静止 / 点滅)、[ 3 ]およびロード可能なフォント (さまざまなグリフ サイズ) です。[ 4 ] Linuxコンソールは従来ハードウェア VGA テキスト モードを使用しており、[ 5 ] Win32コンソール環境は、一部のテキスト ウィンドウ サイズで画面をテキスト モードに切り替える機能を備えています。
各画面文字は、CPU が 1 つの操作でアクセスできる16 ビットワードとして整列された2バイトで表されます。下位 (または文字) バイトは現在の文字セットの実際のコード ポイントであり、上位 (または属性) バイトは、色、点滅、文字セットなどのさまざまなビデオ属性を選択するために使用されるビット フィールドです。 [ 6 ]このバイト ペア スキームは、VGA がEGA、CGA、そして最終的にはMDAから継承した機能の 1 つです。
色の割り当て方法は、 4ビットインデックスカラーグラフィックモードと同じです( VGAカラーパレットを参照)。 VGAモードでは、前景色と背景色を明示的に設定できるため、MDAの反転属性や明るさ属性は必要ありません。
VGA ハードウェアは、属性ビット 0 が設定されている文字に下線を表示する機能を備えています。ただし、これは MDA 互換機能であるため、 [ 7 ] MDA で使用されていない属性ビットはゼロに設定しないと下線が表示されません。[ 6 ]つまり、ビット 0 (下線) と同時に設定できるのはビット 3 (強度) と 7 (点滅) のみです。[ 8 ]デフォルトの VGA パレットでは、ビット 0 を設定して下線を有効にすると、テキストの色も青に変わります。つまり、下線を付けられるテキストは 2 色 (デフォルトパレットでは 5555FF と 0000AA) のみです。
こうしたことにもかかわらず、通常カラーモードでは下線は表示されません。下線の位置はデフォルトで文字グリフの下のスキャンラインに設定されているため、下線は見えません。[ 6 ]下線の位置が目に見えるスキャンラインに設定されている場合(MDA互換のモノクロテキストモードに切り替えたときのデフォルト設定)、下線が表示されます。

EGA および VGA で使用されるスクリーン フォントは、 256 個のグリフを含む等幅ラスタ フォントで、2 つのフォントを同時に使用でき、合計 512 個のグリフを使用できます。画面上のすべてのグリフは同じサイズですが、そのサイズは可変です。通常、グリフは幅 8 ドット、高さ 8 ~ 16 ドットですが、高さは最大 32 までの任意の値にすることができます。グリフの各行は8 ビット バイトでコード化され、上位ビットはグリフの左側、下位ビットは右側に配置されます。アダプタのROMに格納されているいくつかのハードウェア依存フォントに加えて、テキスト モードでは 8 [ 6 ]のロード可能なフォントが提供されます。2 つのアクティブなフォント ポインタ (フォント A とフォント B) は、使用可能なフォントのうち 2 つを選択しますが、通常は同じフォントを指します。それぞれが異なるフォントを指す場合、属性ビット 3 (上記参照) は、前景色ビットではなくフォント選択ビットとして機能します。実際の VGA ハードウェアでは、これにより色選択に使用されているビットが上書きされますが、多くのクローンやエミュレータでは色選択が維持されます 。つまり、一方のフォントは通常の強度で表示され、もう一方は高強度で表示されます。この違い (および非互換性) は、パレット レジスタを変更して 8 色のパレットのコピーを 2 つ格納することで解決できます。VGA 対応のビデオ カードは、ビデオ BIOSでASCII文字を実装する必要があります。ドイツ語やロシア語などの他のヨーロッパ言語の VGA テキスト フォントは、別のコード ページで定義される場合があります。
文字ボックスの幅が 9 ドットのモード (たとえば、デフォルトの 80×25 モード) がありますが、9 番目の列は文字間の間隔に使用されるため、内容を変更することはできません。常に空白で、現在の背景色で描画されます。[ 6 ]例外として、Line Graphics Enableモードでは、コード ポイント0x C0 から 0xDF まで[ 6 ] の8 番目の列が 9 番目の列として繰り返されます。これらのコード ポイントは、グリフ ボックスの右端まで完全に拡張する必要があるボックス描画文字をカバーしています。このため、文字のような文字をコード ポイント 0xC0~0xDF に配置することは避けるべきです。0xB0 から 0xBF までのボックス描画文字は、右を向いていないため拡張する必要がなく、拡張されません。

カーソルの形状は文字ボックスの全幅の長方形に制限され、カーソルの現在位置にある文字の前景色で塗りつぶされます。高さと位置は文字ボックス内の任意の場所に設定できます。 [ 9 ] EGA および多くの VGA クローンでは、カーソルの開始位置より終了位置を設定することで、スプリット ボックス カーソル (文字ボックスの上部と下部に 1 つの長方形として表示される) が可能でしたが、これをオリジナルの VGA で行うと、カーソルは完全に非表示になります。[ 9 ] VGA 規格では点滅速度を変更する方法は提供されていませんが、[ 9 ]一般的な回避策として、カーソルを非表示にして通常の文字グリフを使用していわゆるソフトウェア カーソルを提供する方法があります。
TUIにおけるマウスカーソル(実装されている場合)は、通常、ハードウェアカーソルとは異なり、背景が変更された動く長方形、または特殊なグリフである。
Impulse Trackerのようなテキストベースのインターフェースの中には、より滑らかでグラフィック的なマウス ポインタを提供するためにさらに工夫を凝らしたものもありました。これは、カーソルの画面上の位置に応じて文字グリフをリアルタイムで常に再生成することによって実現されました。[ 10 ] [ 11 ] [ 12 ] [ 13 ]
アプリケーションのVGAテキストモードにアクセスするには、一般的に2つの方法があります。ビデオBIOSインターフェースを経由する方法と、ビデオRAM [ 4 ]とI/Oポートに直接アクセスする方法です。後者の方法はかなり高速で、テキストバッファを素早く読み取ることができるため、高度なTUIプログラムではこの方法が好まれます。
VGA テキスト バッファは物理メモリ アドレス 0xB8000 にあります。[ 14 ]このアドレスは通常、リアル モードで動作する16 ビットx86プロセスで使用されるため、メモリセグメント0xB800の前半でもあります。テキスト バッファ データは読み書きでき、ビット演算を適用できます。現在のモードの範囲を超えるテキスト バッファ メモリの一部にアクセスできますが、表示されていません。
保護モードでは、同じ物理アドレスが使用されます。アプリケーションは、このメモリ領域を自身のアドレス空間にマッピングするか、オペレーティングシステムを介してアクセスすることができます。最新のマルチタスクOSでは、アプリケーションがコンソールを制御できない場合、実際のテキストバッファではなく、システムRAMの一部にアクセスします。
1980年代のコンピュータでは、テキストバッファを非常に高速に操作し、ハードウェアが個々のピクセルを表示可能な限り高速に生成することが、高速なユーザーインターフェースを実現する上で非常に有用でした。比較的新しいハードウェアであっても、ハードウェアAPA (グラフィックス)モード(プログラムが個々のピクセルを生成してビデオバッファに格納するモード)によるテキストモードのエミュレーションのオーバーヘッドは、無視できないほど大きくなる可能性があります。
モニター側から見ると、テキストモードと全点アドレス指定可能(APA)モードでは、同じサイズの入力信号に違いはありません。テキストモードの信号は、VESA標準モードと同じタイミングを持つ場合があります。アダプタ側では、テキストモードとAPAモードの両方で、これらのパラメータを設定するために同じレジスタが使用されます。テキストモードの出力信号は、基本的にグラフィックモードと同じですが、そのソースはAPAのようにフレームバッファではなく、テキストバッファと文字ジェネレータです。
IBM PC互換機では、使用するグラフィックアダプタに応じて、さまざまなテキストモードが利用可能です。それらは以下の表に示されています。
VGAおよび互換カードは、MDA、CGA、EGAモードをサポートしています。すべてのカラーモードは、テキスト属性のデザインが同じです。MDAモードにはいくつかの特別な機能があります(上記参照) 。テキストを明るくしたり、下線を引いたり、反転させたり、点滅させたりといった属性で強調表示できます。
DOS環境や初期のWindowsコンソールで最も一般的に使用されていたテキストモードは、デフォルトの80列×25行、つまり80×25で、16色、8×16ピクセルの大きな文字サイズです。VGAカードには常にこのサイズのフォントが内蔵されていますが、他のサイズでは異なるサイズのフォントをダウンロードする必要がある場合があります。[ 27 ]このモードは、ほぼすべてのIBM互換パーソナルコンピュータで使用できました。
Linux カーネル 2.6 以降では、VGA BIOS がサポートしている場合、0000h から 00FFh までのモードは標準モードを表し、VESA BIOS がサポートしている場合、0100h から 07FFh までのモードは VESA モードを表すと想定しています。0900h から 09FFh までのモードは Video7 の特殊モードです (一般的な Video7 BIOS では、通常 0940h=80×43、0941h=132×25、0942h=132×44、0943h=80×60、0944h=100×60、0945h=132×28 です)。[ 28 ] Linux 2.x では、引数 "vga=ask" を渡すことでサポートされているビデオ解像度を確認できます。[ 29 ]
Linux の後のバージョンでは、1000h から 7FFFh までのモードを使用して解像度を指定できます。コードは「0xHHWW」形式で、HH は行数、WW は列数です。たとえば、0x1950 は 80×25 モードに対応し、0x2b84 は 132×43 などに対応します。[ 28 ] (Linux 3.x 以降では、「video=<conn>:<xres>x<yres>」を使用して解像度を設定できますが、これはビデオフレームバッファドライバにのみ適用されます。[ 29 ] [ 30 ] )
VGA テキストモードには他に 80×43 と 80×50 の 2 つが存在するが、あまり一般的ではない。Windows NT 4.0 は起動プロセス中にシステムメッセージを 80×50 テキストモードで表示した。[ 31 ]
拡張VESA互換Super VGAテキストモードの文字サイズとグラフィック解像度は、メーカーによって異なります。S3などの一部のカードは、132×43や132×25などの非常に大きなカスタムテキストモードをサポートしていました。[ 32 ] 2000年代の一部のグラフィックアダプタは、リストからパラメータを選択する代わりに、任意のサイズのテキストモード(妥当な範囲内)を設定できました。
いわゆるSVGAカードを搭載したLinuxおよびDOSシステムでは、SVGATextMode [ 33 ]というプログラムを使用して、EGAおよびVGA標準よりも見栄えの良いテキストモードを設定できます。これは、通常の80×25 VGAテキストモードの720×400ピクセル解像度が一般的なグラフィックモードよりもはるかに低い大型( 17インチ以上)モニターで特に役立ちます。SVGATextModeを使用すると、ピクセルクロックと高いリフレッシュレート、大きなフォントサイズ、カーソルサイズなどを設定でき、ビデオカードとモニターの潜在能力をより有効に活用できます。Windows以外のシステムでは、1280× 1024 (またはそれ以上の解像度)のLCDモニターで鮮明なテキストを取得するには、SVGATextMode(またはLinuxフレームバッファなどの代替オプション)の使用が不可欠です。これは、標準のテキストモード解像度のいずれもこのマトリックスサイズに正確に適合しないため(アップスケーリングアーティファクトが発生するため)です。SVGATextModeでは、ビデオ信号のタイミングを微調整することもできます。
このプログラムの名前とは裏腹に、サポートされているモードのうち、SVGA(つまりVESA)規格に準拠しているのはごく一部に過ぎない。
VGAテキストモードには、ハードウェア上の制約がいくつかあります。これらの制約は、現代の(2000年以降に開発された)アプリケーションには厳しすぎるため、VGA対応ビデオアダプタのハードウェアテキストモードは、限られた用途にしか使用できません。
* フォントA で 8 色、フォント B で別の 8 色が使用される場合があります 。したがって、フォント A ≠ フォント B (512 文字モード) の場合、パレットは半分になり、テキストは実質的に8色しか使用できません。 **通常、同じパレットの最初の 8 色です。点滅が無効になっている場合は、16 色すべてが背景に使用できます。
このため、最新のUEFIブートローダーのほとんどはVGAテキストモードを利用しません。UEFIおよびUEFI用に設計されたオペレーティングシステムは、代わりにグラフィックス出力プロトコル(GOP)を使用する傾向があります。テキストを表示するために、GOPを利用する最新のブートローダーおよびオペレーティングシステムは、UEFIシンプルテキスト出力プロトコルとUEFIシンプルフォントプロトコルを使用します。[ 34 ] [ 35 ]
プラットフォームでは、Solaris カーネルの端末エミュレータ モジュール (tem) は、vgatext モジュールとのやり取りに VGA テキスト モードのみを使用します。vgatext モジュールは、業界標準の VGA テキスト モードを使用して、x86 互換のフレーム バッファ デバイスとやり取りします。
プレーン1の対応するバイトは、色、フォント選択、点滅、下線、反転など、文字の属性を指定するために使用されます。
IBM のオリジナルのビデオアダプタである CGA と MDA は文字ビットマップを ROM に格納し、変更できないのに対し、EGA と VGA は RAM に格納します。
コンソールレイヤーから切り離されると、ブートコンソールドライバ(通常はVGAテキストモード)が引き継ぎます。
Tracker は、文字の便利な再マッピングを備えたテキストモードで完全に動作します。
[...] 機能といくつかの注釈: [...] マウスと文字生成機能全般。テキストモードにより、ユーザーインターフェイスを軽快に保ち、メモリ要件を抑えることができましたが、他のプログラムでは見たことのないリアルタイム文字生成でそのギャップを埋めました。
リムは、人気のインパルス・トラッカー・プログラムの著者である。
種類の色を同時に表示できます。文字サイズは8×16ピクセルで、フォントは256文字で構成されます。このサイズの組み込みフォントは、VGAカードに常に搭載されています。
Windows NT 4.0の起動プロセス中に表示されるすべてのシステムメッセージが80×50テキストモードで表示されるのに対し、Windows 2000とWindows XPではこれらのメッセージがVGAモードで表示されるという点です。
。S3 ViRGEは、テキストアプリケーション向けに132×43および132×25の拡張テキストモードをサポートしています。これにより、132列のテキストを必要とする端末をエミュレートすることもできます。
{{cite web}}: CS1 maint: 数値名: 著者リスト (リンク)。SVGATextMode は、SVGA カードの追加機能を使用して Linux のテキスト モードを強化します。ピクセル クロック、H/V タイミング、フォント サイズ、カーソル サイズなどを設定でき、テキスト モードでもビデオ カードとモニターを最大限に活用できます。