X1にもEMMにも詳しくないのですが、どういうものなのか、どのように使うのかを知りたかったので調べてみました。間違いがありそうなので、気が付いたら随時修正していきます。
純正品は、こちらの「X1用EMMボード」を参考にさせていただきました。つまり・・・
・純正品の320Kbyteメモリボードの事をEMMボードと呼ぶ。320Kbyteの領域がある。
・320KByte以外のボードは非純正品。(互換性はある)
ということですね。
あと、I/O誌の1986年3,4,5月号にもEMMボードの製作記事が掲載されているようです。
320KByteということは、000000h – 04FFFFhのメモリ空間を持つということになって、Hu-BASICでは、この領域をEMM0:というデバイス名で表記するようです。
また、EMM:はEMM0:と同じデバイスになります。
アドレスの最大が04FFFFhなので、アドレス指定に3バイト必要になるということですね。
上位 | 00h ~ 04h |
中位 | 00h ~ FFh |
下位 | 00h ~ FFh |
上位バイトには余裕があるので、その気になれば、000000h – FFFFFFhまで使えることになると。
FFFFFFh Byte => 1677216Byte => 約16.384MByteということでしょうかね。
ハードウェアレベルでは、3バイトのアドレス指定用のI/Oポートと、指定アドレスの読み書き用1バイトのI/Oポートを通してアクセスするようです。わかりやすいですね。また、読み書きをすると、自動的にアドレスが+1されるようです、便利ですね。
0D00h | アドレス下位指定(00h-FFh) | OUT |
0D01h | アドレス中位指定(00h-FFh) | OUT |
0D02h | アドレス上位指定(00h-04h) | OUT |
0D03h | データ リード/ライト | IN/OUT |
Hu-BASICでは、EMM0:以外に、EMM1:、EMM2:…といった指定ができるようですが、これはボードを複数枚挿し込んだ時のデバイス名として識別されるようです。
この場合、EMM1:は0D04H, EMM2:は0D08h・・・のように、I/Oポートのアドレスをずらしてアクセスすることが出来ます。
Hu-BASICでは、EMM0:のデバイスをフロッピーディスクのように扱えるので、FILES,LOAD,SAVEといった命令を使って、EMM上にファイルを保存できます。ただし、X1本体の電源を切ったら消えると思います。
これらの命令を使う前に、INIT “EMM:”命令でデバイスを初期化しておく必要があるようです。こうすることで78クラスタ分の領域が確保されるようです。(1クラスタって4KBbyteくらい???)
ここまでは320KByteメモリボードの話です。
非純正品の1MByteメモリボードは、BIOS/Hu-BASICのアドレスチェックにより、320KByte以上の領域は扱うことが出来ません。そこでボード側で1MByteのメモリを3つの320KByteの領域に分割してアクセス出来るようにDIPスイッチで切り替えが出来るようになっているようです。
※上記の記事を書くにあたり、Oh!石さんからご助言をいただきました。ありがとうございます。