Windows 10の次期大型アップデートで現在プレビュー版が提供されている19H1(来年4月にリリース予定)では、コンソールが改良された。具体的には、文字色と背景色で「デフォルトカラー」をサポートした。そのほかにカーソルの形状や色の指定などが可能になっている。ここでは、この文字色と背景色について考えてみる。
Windowsコンソールの表示色は
IBM PC当初のハードウェアの制限を受け続けていた
そもそもWindowsのコンソールは、Win32アプリケーション(デスクトップアプリケーション)がコンソールAPIを使って出力などをするように作られたもの。コンソールは、文字や背景の色を16個のカラーコードで指定する。つまり全部で16色しか利用できない。
WindowsアプリケーションはグラフィックスでRGB各8bitのフルカラーを使えるというのに、コンソールの中の文字や背景の色はたった16色しか指定できないのである。
これは、IBM PCに搭載されたCGAなどのテキストモードの仕様を引き継いだからだ。現在のコンソールは、アプリケーションが指定した文字列をWindowsがフォントのビットパターンとして描画している。しかし、IBM PCが発売された当時は、CPUも高速ではなかったため、現在のような「ビットマップディスプレイ」で文字を扱うと描画速度が遅くなってしまう。
そんなIBM PCのディスプレイカード(CGA、MGAと呼ばれるハードウェア)では、文字をハードウェアで表示していた。具体的には、ビデオメモリーに文字コードとアトリビュートを書き込むと、ハードウェアでフォントパターン(当時は、これをキャラクタージェネレーターと呼んでいた)として表示させていた。プログラム側は、8bitの文字コードをビデオメモリに書き込むだけで、文字が表示できた。
このときビデオメモリには、文字コードだけでなく、表示色を指定する「アトリビュート」も同時に書き込んだ。合わせて16bitをメモリに書き込むだけで文字が表示できたわけだ。IBM PCはそのままではいわゆる7bitアスキーコードや互換の1バイト文字コードしか想定しておらず、日本語の表示はできない。
アトリビュートは、表示モード(たとえば白黒モードなどもある)によって違うが、テキストモードでは、上位4bitが背景色、下位4bitが文字色になっていた(正確には、点滅ビットや輝度ビットなどがあるのだが、それについては省略)。それぞれ4bitしかないため、最大16色しか指定できない。
そもそも、CGAは16色表示のCRTディスプレイのためのハードウェアで、最大16色しか表示させることができなかった。16色表示のディスプレイは、Red、Green、BlueのいわゆるRGB各1bitと輝度(Intensety)1bitの4bitでドットを表現する。RGB各1bit値を組みあわせた8色(黒、青、緑、シアン、赤、マゼンタ、ブラウン、明るいグレー)の暗い色と明るい色で合計16色となる(明るいグレーの輝度の高いものが白。黒の輝度の高いものが暗いグレー、ブラウンの輝度の高いものが黄色になることに注意)。
この仕組みはずっと継承されており、後継のEGA、PS/2向けに開発されたVGAでもテキストモードは、この方式のアトリビュートを使っていた。VGAではこの16色に対して、RGB値を自由に割り当てる「カラーパレット」の仕組みも持っていた。カラーパレットを使うことで、同時に表示できる色は16色だが、任意の色を表示させることができた。
Windowsのコンソールは、CGAやVGAのテキストモードを前提に開発されたMS-DOSアプリケーションを移植しやすいように作られた。このため、テキスト表示時のアトリビュートは、CGAから使われている「伝統ある」方式を踏襲している。
また、カラーパレットもコンソールAPIから制御可能だ。さらに、コンソールプロパティのダイアローグボックスにある「画面の色」タブで、ユーザーは手動で16色に対して任意のRGB値を設定することもできる。
この連載の記事
-
第429回
PC
Windows Updateの「利用可能になったらすぐに最新の更新プログラムを入手する」はオンにした方がいいか? -
第429回
PC
WindowsからWordPadが廃止! RTF(Rich Text Format)はどうなる? -
第428回
PC
Google/Bingで使える検索オプション -
第427回
PC
WindowsのPowerShellのプロファイルを設定する -
第426回
PC
WindowsでAndroidスマホをWebカメラにする機能を試した -
第425回
PC
無料で使えるExcelにWord、Microsoft 365のウェブ版を調べた -
第424回
PC
Windowsの基本機能であるクリップボードについてあらためて整理 -
第423回
PC
PowerShellの今を見る 2つあるPowerShellはどっち使えばいい? -
第422回
PC
Windows 11の目玉機能が早くも終了、Windows Subsystem for Android(WSA)を振り返る -
第421回
PC
進化しているPowerToys LANで接続したマシンでキーボード/マウス共有機能などが追加 -
第420回
PC
Windowsプレビュー版に搭載されたsudoを試す - この連載の一覧へ