私は、カーネルの最初のビットを一緒にハックしようとしているところです。私は現在、カーネル全体を C コードとしてコンパイルしており、コンソール ウィンドウにテキストを表示することができました。ここで、キーボード入力の受け入れを開始して、実際に使用してプロセス管理を開始できるようにします。
DJGPP を使用してコンパイルし、GRUB をロードしています。また、基本的にコンパイル済みの C コードに直接ジャンプする小さなアセンブリも使用しており、そこから満足しています。
私が行ったすべての調査では、$0x16 の ISR がキーボード バッファーから次の文字を読み取ることを示しているようです。私が知る限り、これは ASCII 値を ah に格納し、キーコードを al に格納するか、その効果を発揮するものです。インライン アセンブリで次のルーチンを使用して、これをコーディングしようとしています。
char getc(void)
{
int output = 0;
//CRAZY VOODOO CODE
asm("xor %%ah, %%ah\n\t"
"int $0x16"
: "=a" (output)
: "a" (output)
:
);
return (char)output;
}
このコードが呼び出されると、コアはすぐにクラッシュします。(私は VirtualBox で実行していますが、実際のハードウェアでこの基本的なことを試す必要はないと感じました。)
今、私は実際にいくつかの質問があります。(私のコードは GRUB から起動されたので) 現在、私がリアル モードで実行しているかプロテクト モードで実行しているかは、誰も教えてくれませんでした。プロセス ハンドラをセットアップするまでは、リアル モードで実行する予定でした。
では、リアル モードで実行していると仮定すると、何が間違っているのでしょうか。また、どのように修正すればよいでしょうか。基本的な getc ルーチン、できればノンブロッキングが必要なだけですが、Google がこれを手伝ってくれているとしたら、私はうんざりします。それができたら、そこから残りを行うことができます。
私がここで尋ねているのは、私は正しい道の近くにいるのでしょうか? 一般的に、このレベルでキーボード入力を取得するにはどうすればよいでしょうか?
編集:ああ...私は保護モードで実行しています。これは確かに、リアルモード機能にアクセスしようとしてクラッシュしたことを説明しています.
それで、プロテクトモードからキーボードIOにアクセスする方法を探していると思います。自分で見つけられるかもしれませんが、もしご存知の方がいらっしゃいましたらよろしくお願いします。再度、感謝します。