xv6 MIT オペレーティング システムでは、/xv6 /console.cのいくつかの putc 関数の違いを理解しようとしています。
- static void cgaputc(int c)。
- void uartputc (int c)。
- static void constputc(int c)。
ありがとう!
consputc()
コンソール出力機能です。コンソールにa を書き込みますchar
。その OS では、シリアル ポートと CGA テキスト ディスプレイの両方を意味するように見えます。それを行う前に、まずシステムがパニックに陥っているかどうかをチェックします (パニックとは、エラーが発生したときにカーネルが入る状態であり、何をすべきかわからないため、先に進んでおそらく事態を悪化させるのではなく、パニックを決定します。その場合、割り込みが無効な状態で無限ループに入り、システム リセットのみがパニック状態から抜け出すことができます。
uartputc()
char
シリアルポートにa を書き込みます。まず、シリアル ポートがビジーでないことを確認し、char
.
cgaputc()
char を CGA テキスト フレームバッファに書き込み、それに応じてカーソル位置を調整します。CGA テキスト フレームバッファはアドレス 0xb8000 から始まり、インターリーブされた (属性、文字) バイトで構成されます。デフォルト モードのモード 3 は、80x25 (80 列、25 行) のテキスト モードです。属性 07 は、黒い背景に灰色のテキストを意味します。カーソル位置は、いくつかのレジスタを公開する CRT コントローラ ポートを介して操作されます。レジスタ 14 および 15 は、カーソル位置を 14 ビットとして保持します。CRTC にアクセスするには、最初にアクセスするレジスタを選択し、その番号を 0x3d4 のインデックス CRTC ポートに書き込み、次に 0x3d5 の CRTC 制御/データ ポートから書き込みまたは読み取りを行います。この内容はvgadoc4bというドキュメントとRalph Brown の interrupt listに記載されています。