arch/x86/boot/a20.c
======
int enable_a20(void)
{
/*~省略~*/
int loops = A20_ENABLE_LOOPS;
while (loops--) {
/* 既にA20が有効になっていないかチェックする */
if (a20_test_short())
return 0;
/* BIOSを使って有効にしてみる */
enable_a20_bios();
/* なったかな? */
if (a20_test_short())
return 0;
/* キーボードコントローラを読み取ってチェックしてみる */
empty_8042();
/* なったかな?*/
if (a20_test_short())
return 0; /* BIOS worked, but with delayed reaction */
/* キーボードコントローラから有効にしてみる */
enable_a20_kbc();
/* なったかな?(長めのチェック) */
if (a20_test_long())
return 0;
/* ポート92から自力で有効にしてみる */
enable_a20_fast();
/* なったかな?(長めのチェック) */
if (a20_test_long())
return 0;
}
return -1;
#endif
}
======
このように色な手段を使ってA20ゲートを有効にしています。ちなみに、なぜこんなところでキーボードコントローラが出てくるのかというとA20ゲートがキーボードコントローラとつながっているからです。
0 件のコメント:
コメントを投稿