EMSメモリボードを利用したROMエミュレータとRAMDISKドライバ

使用説明書

Version 1.00 Copyright (C) 2026 まりも(DOSsoft)

 

■ このプログラムについて

ROMエミュレータ化ツールであるPC34D0では 、アイオーデータ製 PC34ボードを使ってD0000番地にROMを出現させ、さらにC0000の領域にUMB用メモリを出現させました。しかしPC34ボードのメモリはせいぜい16+16KBしか使われず、残りはまったく使い 切れていませんでした。

そこでこのプログラムでは、D0000hにROMを出現させることに加え、残りの大部分の容量にRAMDISKを作るようにしました。使い方としてはconfig.sysに記述するデバイスドライバとなります。これらの点でPC34D0.EXEとは異なります。

さらにバージョン0.98からは、MelcoのEMJシリーズボードでも同様のことが可能となる EMJ_D0RD.SYSを追加しました。以降の記述では EMJボードの場合は PC34をEMJで置き換えてお読み下さい。ただしEMJでは抗リセット改造を施していないと、ROMエミュレータのほうは動作しません。単なる RAM DISKにしかなりません。

■ バージョン1.00からの機能追加・変更

 以前のバージョンからお使いの方むけにまとめておきます。
・容量は全ての場合自動判定で、オプション指示は廃止した
・RAMDISKのウィンドウは常時オープンではなくアクセス時のみ開けることとした
・PC34では 複数枚挿しに対応(ページが連続に設定されている場合)
・PC34では C0000-CFFFFhに UMB出現の, オプション U を追加
・PC34では ROMエミュレータのアドレスをD4000hに移す, オプション D4 を追加
・EMJでは 使用するI/Oアドレスの設定であるSW1の設定を 1 から E に変更
(PCIバス搭載機での動作可能性を少しでも高くするため)

■ RAM DISKの容量、設定、および対応機種について

PC34シリーズのボードは、必ず容量1MB以上、かつ全容量を「EMSで使う設定」にして下さい。それ以外の用途のメモリも割り当てた状態では、正常に動作しません。そのような状態ではROMエミュレータは動作しません(最終ページにデータを置くため)。PC34の32MB版では16MBで打ち切りとなります。

PC34シリーズでは2枚挿しに対応します。ただし2枚ともEMS専用の設定で、ページの 開始番号を、DIPスイッチまたはロータリスイッチまたはソフトウェアスイッチにて1枚目と2枚目が連続となるようにしておく必要があります。詳しくはそれぞれのPC34シリーズのボードのハードウェアマニュアルを参照してください。PC34Rの場合はソフトウェアで設定するので、MEMORY SERVER IIが必要です。それが無い場合は、おふがお氏が作成したPC34BOW2 を使い、他のPC34ボードとEMSページが連続となるようページ番号開始位置を設定してください。

EMJシリーズではロータリースイッチ SW1=E,SW2=4 に設定してください(全容量EMSとして使用、I/O ベースアドレス6EEEh)。プロテクトモードメモリでの共用ではいけません。2枚挿しに対応しません。EMJ-16Mの一部には裏表で実質2枚挿し相当のものが存在しますが、これには対応しません。またPCIバス搭載機ではEMJボードは問題が多いため、動作しなかったり不安定になることがあります。ただしCanbeのうちPCIスロットを持たない機種(Cx2〜Cx13)では使える可能性があります。なお EMZおよびEMAという製品もありますが、これらは動作対象外です。

■ 使い方

・PC34Rシリーズの場合(PC34E,PC34F,PC34H,PC34X,PC34Rなど)
decive= <パス名>\PC34D0RD.SYS
という記述を加えます。バージョン0.99からは容量指定は廃止となりました。

・メルコの EMJの場合
容量の自動取得ができるので、容量のオプションは不要です。
decive= <パス名>\EMJ_D0RD.SYS

D0000h〜D3FFFhにはROMエミュレータとしてのメモリが現れます。ここにはLoadD0 プログラムでROMデータを置くことができます。

D4000h〜D7FFFhにはRAM DISKのウィンドウが現れます。こちらのアドレスには 不用意にデータを書き込まないようご注意ください。なおPC34シリーズの場合は、RAMDISKアクセス中以外はこのウィンドウにメモリが出現しない状態となっています。

◎コマンドラインオプション(PC34のみ)

PC34シリーズの場合に限って、下記のオプションが使用できます。EMJでは利用できません。 / や- などのスイッチ文字は不要です。
U   UMBエリア(C0000h-CFFFFh)にメモリをマッピングする

D4   ROMエミュレータの出現場所をD0000hではなく D4000hに変更する

例) decive= <パス名>\PC34D0RD.SYS D4 U

Uでは C0000h〜CFFFFhの64KBにUMBエリア用のRAMを出現させます。ここにメモリを出現させると、PARITY ERRORを発生させてしまうようなIPLwareアプリケーションがあるかもしれません。そうなった場合は電源を落とさないと復旧できなくなります。したがって必要性がとくになければ U オプションは使用しないでください。そもそも仮想86 EMMドライバが提供するUMBのほうが高速に動作しますので、何らかの理由でリアルモードでUMBエリアを必要とする場合に限って使用して下さい。UMBエリアを確保するとRAMDISKの容量は64KB減少します。

D4では ROMエミュレータをD4000hに移し、RAMDISKと同じウィンドアドレスを共有する状態にします。それにより空いたD0000hのほうに本当のROMボードを配置できます。とくにPCIバス搭載機では有用かと思います。PCIシステムではD0000hに意図せずにROMが現れやすいためです(PCIセットアップユーティリティを使用してコントロールすれば問題ないですが)。D4000hエリアへのROMデータ転送には LoadD4.EXEを使って下さい。

なお DC という記述の場合は DC000h にROMエミュレータが現れます。しかしあまり意味を持たないばかりか、通常 DC000にはSCSIやPCI ストレージアダプタのBIOSがいるはずです。IDE BIOSを移動させることはできないため、D8 は無効です。

PC34ではROMの出現域とRAMDISKのウィンドウが同じアドレスとなります。通常はこれで問題ないはずですが、何かの拍子に RAMDISKへの読み書き中にリセットが発生した場合に、再起動後にROMが現れなくなる可能性があります。しかしそのようなことはまず起こり得ないはずです。また再び起動後にこのドライバが動作した後にはROMは現れるようになり、次回起動時にはそれが動作します。

このドライバはノーマルモード専用です。ハイレゾリューションモードでは使用できません。 ハイレゾモードでは16KBの連続ウィンドウを2箇所に作ることが難しいためです。

■ その他のデバイスドライバとの関係

HIMEM.SYSは組み込んであっても構いません。

EMM386 などの仮想86 EMSドライバ類は、PC34D0RDより後に記述してください。順序が逆ですとエラーとなります。

■ データ保持

電源ONの後の最初の起動では、デバイスドライバ組み込み時に「チェックサムが異常」と表示されますが、これは一度も書き込んでいないメモリの内容が不定のためです。初期化が行われてからは、この表示は現れません。

2回目以降のリセット再起動でデータが消えることは通常ありません。ROMエミュレータ、RAMDISK、それぞれ何かの拍子にデータが破損した場合は、単独で初期化が行われます。したがって容易に消えうるものとして運用してください。これはRAM DISK一般に言えることです。当然ながら電源を落とした場合は全てデータは消えます。ただしPC34Rシリーズで電源アダプタで保持している場合は消去されることはありません。

PC34Rのボードを設定ユーティリティで操作したり、DIPスイッチでEMSモードの容量を変えたときには、RAMDISKは初期化となりますのでご注意下さい。ROMエミュレータのデータのほうはこれによる初期化はありません。

ROMエミュレータのデータについては、ブート可能な形式のデータに限って初期化をしないようにしています。具体的には先頭からのバイト列がCB 90 90 CB となっているものです。これ以外の形式のデータの場合は起動時に内容を消去してしまいます。

■ 併用禁止

既にあるPC34D0.EXEは PC34D0RD.SYSで運用中には実行しないで下さい。RAMDISK、ROMエミュレータ、ともにデータが消えてしまいます。EMJD0.EXEも同様です。テキスト画面コピーユーティリティである拙作 TXTCPY34 とは排他利用です。PC34とEMJを2枚挿しても、ウィンドウの出現場所が足らないため併用不可能です。ほかのいわゆる「勝手RAM」を使うIPLwareアプリケーションなども併用できません。

■ PCIバス搭載機での使用

PCIバス搭載機では一般にCバスのメモリ(DRAM)ボードがデフォル設定では使用できなくなっています。このモードを変更するには、[ESC][HELP][5]を同時押しした状態で電源投入またはリセットボタンによる起動を一度行って下さい。ただしソフトウェアDIPスイッチがなにかの拍子に初期化してしまった場合は、この処置を行う必要があることを覚えておいてください。また既に述べたようにEMJは、PCIスロットを持つ機種ではPCIデバイスとI/Oアドレスが容易に競合するため、動作しなくなる可能性が高いです。システム内にPCI-PCIブリッジがあると、EMJの動作は絶望的となります。

■ 技術的仕様

EMSボードでは「ページ」と呼ばれる16KB単位のブロックでメモリ管理が行われます。たとえば4096KB(4MB)のボードであれば 4096/16=256 ページが存在します。PC34D0RD.SYS 1.00では、ROMエミュレータでは常にページ0を使用し、RAMDISKはページ1以上から最終ページまでを使用することとしています。以下のようになります。オプションU で UMBを使用しない場合は、最後までRAMDISKです。

ページ番号
0  1  2  3  4 ... 最後-4  最後-3  最後-2  最後-1  最後
ROM <------------- RAMDISK ---------->  <------------- UMB用 ----------->

プログラムを簡単化する(常駐サイズを最小限にする)ため、ディスク記憶単位の1クラスタを1セクタと等しくしています。このため 1MB〜2MBまでは ファイルシステムは FAT12となります。3MB〜16MBはFAT16となり、16MBのときは約65500クラスタでFAT16の上限となります。MS-DOS 3.3xではセクタ数も上限が約65500でなければならないので、16MB上限はやむを得ないところです。MS-DOS 3.3を切り捨てれば1クラスタを複数セクタにすることで 32MBあるいはそれ以上も対応できますが、PC34やEMJの32MB版は希少であり、需要はないと考えて対応を見送っています(セクタ長を512バイトでなく1024バイトにすれば対応可能ですが)。

2MBまでのFAT12はルートディレクトリ エントリ数128個までの仕様です。3MB以上のFAT16はルートディレクトリ エントリ数は少なくとも256個です。

■ ソースプログラム

ソースプログラムはこちらにあります。

■ 免責事項

このプログラムを使用して RAMDISKのデータに破損が起こったとしても、作者は 責任を負いません。一応の動作チェックをしてありますが、RAMDISKのデータは 一般的に消えうるものだということをご承知置きください。

   2026.5.20 まりも

■ 改版履歴

年月日   版数 内容
2026-05-01 0.30 新規作成(容量4MB固定)
2026-05-02 0.40 PC34R以外のPC34*ではMB容量値をコマンドラインで指定可能とした
*このバージョン0.40には4MBを超えるボードでデータを破損するバグがあります。
2026-05-10 0.43 データが壊れるバグ(0.40)の修正, Z1から容量値を指定可能とした。
2026-05-11 0.44 4MB超の所にアクセスできないバグ(0.43)の修正, 常駐サイズ縮減。
2026-05-12 0.50 RAMDISK容量の変動でROMエミュレータ部が初期化されないようにした。このバージョンのダウンロード
2026-05-15 0.98 EMJボード対応版のEMJ_D0RD.SYS を追加。このバージョンのダウンロード
2026-05-20 1.00 オプション D4, U の追加、PC34ではRAMDISK窓とROM窓を二重化

[戻る]