up

High Memory Area (HMA)

    メモリについて

     以下の事は正確では有りません

この領域の メモリは 通常の使用方法では使えないと思われる所が 使用可能 になるということで 使われる様になった という領域のようです。

CPU 8088 8086 は アドレスの 端子は 20個で有ったそうです。そこに 新 しい CPU が 出てきて 80286 というものはこの端子が 24個 有るそうです。

通常であれば アドレス FFFFFh というものの 次のアドレスは存在しない のだそうです。といういいかたは おかしいのですが アドレスの端子が20個な ので 2^20=1048576---> 0 〜 1048575 個数でいえば 1048576 個 ということで す

間違っているかも知れないが segment:offset というのは こういうことをい うのでしょう。少し練習してみます。

FFFFFh というのは 1048575 (10進数)
ここで 表現として FFFF:FFFF というものを 考えると これの 意味するアドレ
スは 
FFFFh * 10h + FFFFh で表されます これは  FFFF0 + FFFF ということですので

FFFF0 + FFFF = 10FFEF ということです 1114095(10進数)
これの意味する所は 100000h から 10FFEF までのアドレスを 有効にするという
ことになります アクセスできることになるのですが いかんせん 20個のもの
の場合は 最上部 1 は無視されて 0FFEFh --> 65519(10進数)ということに
なります。

10進数                   16進数       
 1048575                      FFFFF        F000:FFFF --> F000*10 + FFFF
 1048575             ここが最初の 1MB という場所  ( 983040 + 65535=1048575 )

F000:0000 ---> F000*10h +0000 ---> 983040(10進数)
F000:0009 ---> F000*10h +0009 ---> 983049(10進数) 
F000:000F ---> F000*10h +000F ---> 983055(10進数)
F000:0010 ---> F000*10h +0010 ---> 983056(10進数)

F001:0000 ---> F001*10h +0000 ---> 983056(10進数)

10FFEF の次は 10FFF0 の次は 10FFF1 ... 10FFFF この 数は Fh 個 16個 少ない

segment:offset 方式のアドレスでは 同じ番地を 別の方法で表される事が有 るということです。また この方式で の 最大の数は 10FFEFh であり 10FFFFh に 16個少ないということです これが HMA ということですので 最初の 1MB の 次の 64KB の 領域全てではなく それより 16個 少ない領域 ということの ようです。

ここで 漸く リアルモード というのについて少々調べると このモードは 80286 という CPU の場合は 8088 8086 CPU を 実現するようなものということ です。本当はまったく同じ動作をするという所なのですが そうなっていなかっ たようです。というのは 80286 という CPU はアドレスの端子が 24本有るの で 上記の場合の segment:offset 方式 で FFFF:FFFF を 表現するアドレス 10FFEF が 8088 8086 CPU では 存在しないという アドレス まあ強いていえば 最上部の 1 を無視する事で 0FFEF という アドレスが 80286 という CPU では もしメモリが実際に有れば 有効にアクセス出来るという事になるということで す。この場合は リアルモード で アクセス出来るという点が 重要です。

この アクセス可能なものは 本来の使いかたでは無いということで 一度使え ないようにする 対応がなされたようですが あまりにも Conventional Memory が きつくなって来たので 改めてこれを有効にする ようになったようです。当 然 8088 8086 CPU では 無理なことは理解できると思います。

この領域を 使えるようにしたのが HIMEM.SYS というもののようです (FreeDOS では HIMEM.EXE に なるのだろうが)

この領域を使うのは DOS 本体の一部を この領域に 置くという使いかたをす るようです。つまり一般のプログラムをここに 置くということでは無いという ことです。 その使いかたは "DOS=HIGH" ということで CONFIG.SYS で 指定する ようです。でも 稼げるのは 45KB ということです これは DOS 本体が大きく なったのか それとも単に これだけしか持ってこれないのかはわかりませんが?

HIGH

HIGH といっても"DEVICEHIGH=" ; ”CONFIG.SYS”"LOADHIGH" とか "LH" ;”AUTOEXEC.BAT” がありました これは upper memory area に 持ってくるの で有りました”EMM386.EXE”

"DOS=HIGH" というのは ”high memory area”に DOS 本体の一部を持ってく るということに なるようです。

順序からいっても ”high memory area”が ”upper memory area”より 上 部に有るというか 少し 不思議な感じがしますが これが DOS というもののよう です。

にゃんたろう 拝!
2008年 3月20日 (木) 21:42:12 JST


up

Copyright © 2006.-2008. nyantarou All Rights Reserved.