概要 : 色と属性

←前頁  次頁→  ↑もくじ


ここでは主に、英語テキストモード(つまり DOS/V でない)と DOS/V の標準的な日本語モードでの属性(主に色)について説明してみます。

前置 : 色表現に関する歴史的経緯

まず、ビデオカードのハードウェアがどのように色を扱っているかについて、もろもろのレジスタの説明などを端折った、いたって基礎的な説明をします。

CGA

CGA は IBM PC 用としてはもっとも初期の部類に入るディスプレイアダプタ(ビデオカードの IBM 的表記)です。 最大色表現能力は16色で、青、赤、緑、高輝度の4ビットをデジタルデータとして専用ディスプレイに送り込む、という方法を取っていました(いちおう NTSC ビデオ出力もついていましたが)。 日本のパソコンにむりやりたとえると、8ビット時代の、FM-7 だの PC-8801(初代)に高輝度ビットをつけた、といったところでしょう。

	 属性(色)
	 ||||
	 I R G B
	 ||||
	 ↓↓↓↓
	  モニタ

EGA

CGA に対して大幅な機能アップをはかったのが EGA です。 というより、CGA との互換性を内包したまったく別のビデオカード、と言えます。
EGA も CGA と同じようにデジタル形式でモニタへ信号を出力しますが、青、赤、緑をそれぞれ2ビットづつ、計6ビット用意することにより64色の色を出すことができます(専用モニタが必要)。 ただし、この64色は同時発色はできず、パレットレジスタに登録された16色分だけが表示できます。 つまり EGA では、CGA のように属性値がそのまま表示色になるのではなく、パレットレジスタの番号になるわけです。 パレットレジスタのエントリに書かれた値によって、実際の表示色が決定されます。

	  属性(色番号)
	       |
	       |4 bits
	       ↓
	パレットレジスタ
	  ||||||
	  r g b R G B
	  ||||||
	  ↓↓↓↓↓↓
	     モニタ

VGA

現在のビデオカードの基本ともいえる VGA ですが、16色モードにおける色表現という点のみに着目すると、EGA のデジタル出力の先にさらにアナログ DAC をつけたものと見なせるでしょう。 EGA の6ビットの色出力が DAC カラーレジスタの番号になるわけです。 (うすうすお分かりかと思いますが、256色モードの場合はパレットレジスタを経由しません)

	  属性(色番号)
	      |
	      |4 bits
	      ↓
	パレットレジスタ
	      |
	      |6 bits
	      ↓
	DACカラーレジスタ
	  ||  ||  ||
	  |R  |G  |B   6bits x 3
	  ||  ||  ||
	  ∨  ∨  ∨
	    D A C
	  |  |  |
	  R   G   B    アナログ
	  ↓  ↓  ↓
	 アナログモニタ

属性(色)

テキストモードでの属性

テキストモードの属性の意味は、以下のように技術解説書に書かれています。

	bit 7	高輝度(背景)、もしくは文字のブリンク
	    6	赤(背景)
	    5	緑(背景)
	    4	青(背景)
	    3	高輝度(前景)
	    2	赤(前景)
	    1	緑(前景)
	    0	青(前景)

いちおうこのようになっていますが、この青、赤、緑、高輝度の関係は、前述した通り、パレットレジスタや DAC カラーレジスタの設定しだいでどうとでもなってしまうものです。 しかし、デフォルトの色設定は上記のものに準じている(これにより CGA との互換性を確保している)ので、レジスタを書き換えない限りはこの関係に従うことができます。

より現実に即した書き方をすれば、こうなるでしょう。


	bit7〜4	背景色のパレット番号(※)
	   3〜0	前景色のパレット番号
	
	※ bit7 は文字のブリンクに使われることもある。

デフォルト状態で、パレット番号に対応する色は以下の通り。

「以下の通り」な画像
8番(灰色)のうっすらとした色づきがおわかりだろうか。
それにしても4番(赤)と6番(茶)の区別がつかないんですけど…

属性の bit7 が背景の高輝度を示すのか、それとも文字のブリンクなのかを判別する、すべてのビデオカードで共通の方法はおそらく存在しません。 CGA の場合は BIOS データエリアの値(0040:0065h の bit5)により間接的に調べられます(EGA や VGA の BIOS でエミュレーションされているのかと思ったら、必ずしもそうではないらしい)。 VGA では属性コントロールレジスタを直接読み出すことで調べられます(EGA で読み出せただろうか…)。 ハードウェアになるべく依存せずにすませるには「bit7 を使わない」という消極的解法がもっとも現実的といえるでしょう。 (とは言うものの、グラフィックモードと日本語テキストモードのときは高輝度、英語テキストモードのときはブリンク、と決め打ちしてもそれほど問題はでない気もしますが…)

拡張 CGA モードでの属性

ビデオモード 73h と 71h(V-TEXT)では、上記の色属性に加えて拡張属性を使用することができます。 拡張属性を使用した文字表示は int 10h, ax=1321h で、拡張属性の取得は int 10h, ax=1311h で行うことができます。 $DISP.SYS や JDISP.SYS では、擬似テキストバッファ中の拡張属性部分の値を直接取得、変更することも可能です(変更したあと、int 10h, ah=FFh で再描画する)が、スーパードライバーズ32では仕様上認められていません。

拡張 CGA 属性の詳細は以下の通り。


	bit 7	アンダーライン
	    6	予約(リバース用に)
	    5	予約(ブリンク用に)
	    4	予約(透過用に)
	    3	縦罫線
	    2	横罫線
	    1	予約
	    0	予約
※「予約」の部分には 0 を設定します。
※アンダーラインは、前景色のパレット番号の色で描画されます。
※縦罫線は、文字セルの左端にタテの線として描画されます。 線の色はパレット番号 7(白)。
※横罫線は、文字セルの最上部にヨコの線として描画されます。 線の色はパレット番号 7(白)。

(以下、作成中)



←前頁  次頁→  ↑もくじ