残念ながら、それはもう少し先です。
ビデオメモリへの書き込みの規則は、グラフィックモードによって異なります。従来のビデオモードの中で、VGAモード320x200(8bpp)は、ビデオメモリが通常の種類のメモリのように動作する唯一のモードです。0xA000:0000(または0xA0000リニア)から始まるピクセルに対応するバイトをビデオバッファに書き込みます。 、そしてそれだけです。
他のVGA(pre-SVGA)モードの場合、ルールはより複雑です。ビデオメモリにバイトを書き込むとき、ピクセルのグループをアドレス指定し、私がずっと忘れていたいくつかのVGAレジスタは、それらのピクセルのどの平面が更新されるかを指定します。そしてそれらの古い値がどのように使用されるか。それはもはや単なる記憶ではありません。
SVGAモードがあります(800x600x8bppから)。VESA Video Bios Extensionsを使用して、ハードウェアに依存しない方法でそれらに切り替えることができます。これらのモードでは、ビデオメモリは再びメモリのように動作し、ピクセルあたり1、2、3、または4バイトであり、1バイトのアクセスで触れるVGAのような8ピクセルグループはありません。問題は、リアルモードのビデオバッファが画面全体をアドレス指定するのに十分な大きさではなくなっていることです。
VESA VBE 1.2は、メモリウィンドウベースを変更する機能を提供することでこの問題に対処しました。特定の瞬間に、線形0xA0000のセグメントはビデオメモリの64Kb領域をアドレス指定しますが、フレームバッファ全体のどの64Kbがこのアドレスで使用可能かを制御できます(ベースアドレス調整の最小単位、別名ウィンドウの細かさはハードウェアに依存しますが、0xA0000でN*64Kbオフセットをマップする機能に依存できます。欠点は、異なる64Kbチャンクで作業を開始するたびにVBEBIOS呼び出しが必要になることです。
VESA VBE 2.0は、フラットフレームバッファーを追加しました。これは、プロテクトモード(非現実モードでも)の一部の上位アドレスで使用できます。したがって、ビデオモードに入るにはVBE BIOS呼び出しが必要ですが、ピクセルを描画するためには必要ありません。
VESA VBE 3.0は、まだ十分に移植性がない可能性がありますが、プロテクトモードでVBE関数を呼び出す方法を提供します。(私はそれを試す機会がありませんでした、それは私の「アセンブリ中のOS」の時代にはありませんでした)。
とにかく、最初にグラフィックモードに切り替える必要があります。それを行うにはいくつかのバリエーションがあります。
- 最も簡単な方法は、プロテクトモードに入る前にBIOS呼び出しを使用することです。VBE 2.0では、ビデオメモリウィンドウの調整を呼び出す必要はありません。
- もう1つの方法は、BIOSに十分なV8086モード環境を作成することです。最も難しい部分は、割り込みをリアルモードの割り込みハンドラーに転送することです。簡単ではありませんが、完了すると、PMでビデオモードを切り替えたり、他のBIOS機能(ディスクI / Oなど)を使用したりできるようになります。
- さらに別の方法は、VESAVBE3.0プロテクトモードインターフェイスを使用することです。それがどれほど簡単か複雑かはわかりません。
- そして、本当のジェダイの方法は、特定のビデオカードの情報を掘り起こし、レジスタを設定してモードを切り替えることです。そこに行って、過去にいくつかのCirrusカードでそれを行いました-PMで大きなプレーンフレームバッファを取得することはそれほど複雑ではありませんでした。移植性はありませんが、マシンの内部を理解することが目的である場合は、それが必要なのかもしれません。