FrontPage  Index  Search  Changes  RSS  wikifarm  Login

int10h,AX=1100h

カテゴリ

EGA-BIOS, DISP

機能

半角(1バイト)文字の表示フォントを設定します。

設定

レジスタ内容
AX1100h
BLキャラクタジェネレータ RAM のテーブル番号
(日本語モードでは 0 のみ)
BHフォントデータの1文字あたりのバイト数
CX設定する文字数
DX設定する最初の文字コード
ES:BP設定するフォントデータへのポインタ
(CX*BH バイト)

戻り値

(変更したフォントの見た目が変わる)

説明

$DISP.SYS (JDISP.SYS) のもっとも標準的なビデオモード(モード 03h, 80x25)では、フォントサイズは 8x19 ドットですので BH に 19 (13h) を設定することになります。

この BIOS コールは、ビデオカードの VRAM 上(日本語モードの場合はディスプレイドライバ内部)にあるフォントデータを一時的に変更するものです。 画面モードを変更した時点で書き換えたフォントデータは失われます。 DOS/V フォントサブシステム($FONT.SYS, JFONT.SYS)の保持するフォントデータには影響を与えません。

EGA 以上の英語テキストモードでは、ビデオ RAM の特定領域にキャラクタジェネレータ RAM を設定し、ユーザがフォントを書き換えることが可能になっています。 $DISP.SYS (JDISP.SYS) では画面上の文字はすべてグラフィック RAM 上にソフトウェアで描画しており、ハードウェア的なフォント書き換えはできないため、これを擬似的に再現しています。
$DISP.SYS に限らずほとんどの DOS/V ディスプレイドライバでは、表示の高速化のため(と思うのですが)ビデオモード切り換え直後に半角フォントデータをドライバ内部のバッファにあらかじめ読み込み、文字表示の際はこのバッファ内のデータを使います。 日本語モードで本 BIOS コールを行った場合、ディスプレイドライバはこの内部バッファを書き換え、画面全体のテキストデータを再描画します*1

ディスプレイドライバの内部バッファから半角データを読み出す機能は(すくなくとも公式には)BIOS に存在しません。 $DISP.SYS (JDISP.SYS) では、割り込みベクタ 43h で示されるアドレスから格納されているようです。 しかもこのアドレスも $DISP.SYS (JDISP.SYS) 以外のドライバや、IBM DOS/V Extension のビデオ拡張ドライバを使用している場合には無効です。

純粋な EGA/VGA 環境(日本語モードの場合は JDISP.SYS と $DISP.SYS の非 V-TEXT モード)以外では期待通りに動作しない可能性が高いため*2、この BIOS コールによるフォント変更に依存したプログラムの作成はあまりおすすめできません。

*1 日本語モードではほんとうに画面全体をソフトウェアで再描画するため、環境によっては非常に遅くなります。

*2 たとえば Windows の DOS プロンプトでは、全画面モードにしない限りフォントは変更されません