A20ゲートについて、ちょっと見てみよう。
適当に、ここでメモして後で、整理してHPにアップするつもり
(ほとんど書籍『作りながら学ぶOSカーネル』の内容だけど
この本、日本語がちょっと変でよみづらいのと
誤植が多いのが欠点だなぁ。内容は良いけど)
■アドレス指定について
・8086時代
CPUのアドレスラインは0番~19番までの20本、レジスタは16ビット
0x0000:0000~0xffff:ffffの範囲で、物理アドレスで
示すと、0x00000~0x10FFEF(0xffff0 + 0xffff)となる。
0x10FFEFは、2進数で、1 0000 1111 1111 1110 1111となる。
アドレスラインが20本なので、最上位ビットを除いた
0000 1111 1111 1110 1111(16進数では、0xffef)となる。
要するに8086では、アドレス指定(セグメントとオフセット)を使用し
1MBを超えた場合、0番地からになってしまう。
・80286時代以降
8086との互換を可能にする為に、A20に、当時のキーボートコントローラチップ
である8042の1つのピンとともにANDゲートで繋いでいる。
1MB目を指定した場合、
A20ゲートがOFFだと
1MB = 1024x1024 = 0x10 0000 = 1 0000 0000 0000 0000 0000[2進数]
常に20番目が0になって次のようになる。
(ここでは最上位ビットの1が0になってしまう)
0 0000 0000 0000 0000 0000[2進数] = 0
A20ゲートがONだと、A20の値がAND演算されて
(ここでは最上位ビットの1と1がAND演算されて1になる)
1 0000 0000 0000 0000 0000[2進数] = 1MB
32ビットで、1Mバイト以上のアドレス指定を正常に
行うには、常にA20ゲートをONにしなければならない。
[参考書籍]
はじめて読む486、OS自作入門、作りながら学ぶOSカーネル、
0 件のコメント:
コメントを投稿