INT 10H

INT 10hINT 10H、またはINT 16は、 x86ベースのコンピュータシステムにおける17番目の割り込みベクターであるBIOS割り込み呼び出し10 hexの略称です。BIOSは通常、このベクターにビデオサービスを提供するリアルモード割り込みハンドラを設定します。これらのサービスには、ビデオモードの設定、文字および文字列の出力、グラフィックスプリミティブ(グラフィックスモードでのピクセルの読み書き)が含まれます。

この呼び出しを使用するには、AHレジスタに目的のサブファンクションの番号をロードし、その他の必要なパラメータを他のレジスタにロードして呼び出します。INT 10hかなり遅いため、多くのプログラムはこのBIOSルーチンをバイパスしてディスプレイハードウェアに直接アクセスします。ビデオモードの設定は頻繁に行われませんが、BIOSを使用して行うことができます。一方、ゲーム中の画面へのグラフィック描画は高速に行う必要があるため、ピクセルごとにBIOS呼び出しを行うよりも、ビデオRAMに直接アクセスする方が適切です。

さらに、最新の x86 システムでは、 BIOS 呼び出しはリアル モードまたは仮想 8086 モードでのみ実行できます。 v8086 はロング モードでは選択できません。つまり、保護モード(32 ビット) またはロング モード(64 ビット) で動作する最新のオペレーティング システムは、 BIOS を呼び出すためにリアル モードに切り替えて再度リアル モードに戻す必要があり、これは非常にコストのかかる操作になります。ほとんどの最新のシステムでは通常、ビデオ モードを直接設定するデバイス ドライバーが使用されますが、趣味のオペレーティング システムでは、すべてのビデオ カードにデバイス ドライバーを用意することは不可能です。これは、 Windows 98などの古いサポートされていないシステムでも発生する問題です。このようなシステムでは、代わりにリアル モードに切り替えてビデオ モードを切り替え、フレーム バッファーに直接描画することができます。

EFI 1.xシステムでは、INT 10HとVESA BIOS拡張(VBE)はEFI UGAプロトコルに置き換えられています。広く普及しているUEFI 2.xシステムでは、INT 10HとVBEはUEFI GOPに置き換えられています。[ 1 ] [ 2 ]

サポートされている機能のリスト

このリストは不完全です。包括的な情報については、 Ralf Brownの割り込みリストを参照してください。IBM/PCまたはその他の一般的な標準関数のみを追加してください。00hから0fhはCGAです。

関数 機能コード パラメータ 戻る
ビデオモードを設定する AH=00h AL = ビデオモード

AL = ビデオ モード (旧 IBM のみ)

AL = ビデオモードフラグ / CRTコントローラモードバイト
テキストモードのカーソル形状を設定する AH=01h CH = スキャン行開始、CL = スキャン行終了

通常、文字セルには0~7の8本の走査線があります。したがって、CX=0607hは通常の下線カーソル、CX=0007hはフルブロックカーソルです。CHのビット5がセットされている場合は、多くの場合「カーソルを非表示にする」ことを意味します。したがって、CX=2607hは非表示カーソルです。

一部のビデオ カードには 00h ~ 0Fh の 16 本のスキャン ラインがあります。

一部のビデオカードではCHのビット5は使用されません。これらのカードでは、Start>End(例:CX=0706h)とします。

カーソル位置を設定する AH=02h BH = ページ番号、DH = 行、DL = 列
カーソルの位置と形状を取得する AH=03h BH = ページ番号 AX = 0、CH = 開始スキャンライン、CL = 終了スキャンライン、DH = 行、DL = 列
ライトペンの位置を読み取ります( VGAシステムでは動作しません) AH=04h AH = ステータス (0 = トリガーなし、1 = トリガーあり)、BX = ピクセル X、CH = ピクセル Y、CX = モード 0Fh-10h のピクセル ライン番号、DH = 文字 Y、DL = 文字 X
アクティブな表示ページを選択 AH=05h AL = ページ番号
ウィンドウを上にスクロール AH=06h AL = スクロールする行数(0 = クリア、CH、CL、DH、DL が使用される)、

BH = 背景色と前景色。BH = 43h は、背景色が赤、前景色がシアンであることを意味します。BIOSのカラー属性を参照してください。

CH = 上段番号、CL = 左列番号、DH = 下段番号、DL = 右列番号

ウィンドウを下にスクロール AH=07h 上記のように
カーソル位置の文字と属性を読み取ります AH=08h BH = ページ番号 AH =、AL = 文字
カーソル位置に文字と属性を書き込む AH=09時 AL = 文字、BH = ページ番号、BL =、CX = 文字を印刷する回数
カーソル位置にのみ文字を書き込む AH=0Ah AL = 文字、BH = ページ番号、CX = 文字を印刷する回数
背景/境界線の色を設定する AH=0Bh、BH = 00h BL = 背景/境界線の色(テキストモードでは境界線のみ)
パレットを設定する AH=0Bh、BH = 01h BL = パレット ID ( CGAでのみ有効でしたが、新しいカードでは多くの、またはすべてのグラフィック モードでサポートされています)
グラフィックピクセルを書き込む AH=0Ch AL =、BH = ページ番号、CX = x、DX = y
グラフィックピクセルの読み取り AH=0Dh BH = ページ番号、CX = x、DX = y AL = 色
テレタイプ出力 AH=0Eh AL = 文字、BH = ページ番号、BL =カラー(グラフィック モードのみ)
現在のビデオモードを取得する AH=0Fh AL = ビデオモード、AH = 文字列数、BH = アクティブページ
テキストモードの文字セットを変更する[ 3 ]AH=11時間 BH = 文字あたりのバイト数、CX = 変更する文字数、DX = 変更する開始文字、ES:BP = 文字データのオフセット
書き込み文字列(EGA+、PC AT の最小値を意味する) AH=13時間 AL = 書き込みモード、BH = ページ番号、BL =、CX = 文字列の文字数、DH = 行、DL = 列、ES:BP = 文字列のオフセット
VESA準拠のビデオモードを設定します。640 x 480から1280 x 1024まで、256色で表示されます。 AX=4f02h BX = ビデオモード、符号ビット(ビット15)が設定されている場合、ビデオメモリは更新されません
その他のVESA VBEコマンドAX=4F00hから4F15h 仕様を見る 仕様を見る

参照

参考文献

  1. ^ 「efifbとは? — Linuxカーネルドキュメント」 . kernel.org . 2020年11月24日閲覧
  2. ^ 「vesafbとは何か? — Linuxカーネルドキュメント」 . kernel.org . 2020年11月24日閲覧
  3. ^ 「フォント変更ルーチン」 . Forever Young Software . 2020年3月8日閲覧