メモリMAP
PC/AT互換機(あえてDOS/V機とは呼ばない事!)の
メモリMAPを調べてみます。
OSDev で かなり詳細に調べてますね!
ここはいつも参考になる。 素晴らしい!!
↓
http://community.osdev.info/index.php?%28AT%29memorymap
ちなみに、LINUXはこんな感じ。↓ (90000hから使っている?)
http://www016.upp.so-net.ne.jp/e17/lb/setupAT.html
アドレス | 内 容 | 説 明 |
_0000h〜_03FFh | 割り込みベクタ | 4バイトづつ、(セグメント+オフセット)×256個。 |
_0400h〜_7BFFh | 30.72Kバイトの空き? | 使ってもいいのかな? |
_7C00h〜_7DFFh | 512バイト。 | ●ここにブートプログラムが読み込まれる。 |
_7E00h〜_7FFFh | 512バイト。 | ここもブート用に使って良いのでは? |
_8000h〜9_FFFFh | 622.592Kバイト。 | ここが自由に使えるRAM領域(ここまでで640KB) |
A_0000h〜B_FFFFh | 画面表示用ビデオRAM | ここに書き込むと画面に表示される |
C_0000h〜F_FFFFh | ビデオBIOSとか、いろいろ | ここは使わない方が無難 |
10_0000h〜EF_FFFFh | 使えるRAMの可能性大。 | チェックしてから使用。(ここから先が、A20問題) |
F0_0000h〜FF_FFFFh | 使えるない可能性あり。 | チェックしてから使用。 |
100_0000h〜無限大 | 実装されている場合に限り・・・ | もう少し、大人になってから使ってみます。 |
ここで重要なのは、●の 7C00h〜 です。
ここに、FDやHDから、最初のプログラムが読み込まれ実行されるようです。
では、なぜ、こんな中途半端な 7C00h なんでしょう?
私が想像するに、
最初にAT機を(のBIOSを)開発した技術者が、
① 1クラスタ(512バイト)もあれば、IPLローダぐらいは書けるだろう!
② それでも足りなくなるとか、1クラスタが1024になったら困るんで、
もう1クラスタ(合計1024バイト)あいてれば、十分だろう?
③ IPLで OSを 0400h〜に読み込ませれば・・・
④ 0400h〜7BFFh(約30KB)もあれば、OSには十分なはず?
↑
この考えが甘いな(笑)
⑤ そうすれば、7C00h〜7FFFhも OS用に使えて無駄にならないし、
(最悪、OS用のスタックとして使ってもOK)
⑥ これなら、8000h〜は、アプリケーション用として、すっきり使える。
(私って、天才!!)
っと、こんな風に考えたんだと思います。
よって、そっくりそのまま踏襲しようと思います。
OSの容量が32Kバイトを超えないうちは・・・