EMBは拡張メモリーとも呼ばれ、アドレスで言うと10FFF0h以降のメモリーです。
仮想EMSは、このEMBを使用して、EMSに見せかけるためのドライバーです。
では、EMSとEMBは何が違うのでしょうか? EMSはページフレームという、のぞき穴を
通して1MBytes以上のメモリーにアクセスしています。このページフレームは、16KBytesを
1ページとして、最大4ページまで割り当てることができます。一般にページフレームは
ROMなどの領域で、使用していない1MBytes以内の場所に設けられます。
しかしROMの状況によっては、ページフレームを用意できない場合などがあることと、
16KBytesを1ページという、固定ののぞき穴であるということが、不便な点でありました。
EMBは、ページフレームの大きさは決まっていません。1Byteからでも良いのです。
また、ページフレームの場所もプログラムで動的に設定できます。ただし640KByte以内の
コンベンショナルメモリーにとります。
したがって、ページフレームを通して、EMBをのぞき見ると言うよりも、XMSドライバー
の助けを借りて、コンベンショナルメモリーにEMBをコピーし、アクセスが終わったら
コンベンショナルメモリーをEMBに書き戻すという感じです。
EMSよりも不便な点があります。EMSはハンドル番号の他に、ハンドル名を用いることが
できるので、メモリーにデータだけを残して終了し、次回起動したときにはそのデータを
使うという処理をするプログラムも、プログラムを終了してハンドル番号がわからなくなっても
ハンドル名からハンドル番号を取得し、またEMSにアクセスできました。しかし、EMBは
ハンドル番号だけで管理していますので、ハンドル番号を忘れると、ハンドル番号0から
すべて探さなくてはいけなくなります。これにはかなりの時間がかかります。このような
使い方をしたい場合は、コンベンショナルメモリーをアロケートし、ハンドル番号を
保管しておかなくてはなりません。
では、EMBの使い方を解説します。