INT 10H
INT 10h、INT 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 = ビデオモードフラグ / 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 | 仕様を見る | 仕様を見る |
参照
参考文献
- ^ 「efifbとは? — Linuxカーネルドキュメント」 . kernel.org . 2020年11月24日閲覧。
- ^ 「vesafbとは何か? — Linuxカーネルドキュメント」 . kernel.org . 2020年11月24日閲覧。
- ^ 「フォント変更ルーチン」 . Forever Young Software . 2020年3月8日閲覧。