MELCO EMJシリーズEMSボードをROMエミュレータにする EMJD0 1.28 使用説明書 Copyright(C) 2021,2025 まりも
■ このプログラムの意義
![]()
MELCO製 EMJシリーズEMSボードは、リセットで初期化されますが、ノーマルモードでUMBとしてC0000h〜D7FFFhに割り当てることもできます。また後述のようにリセットで保持される改造を施せば、拡張ROM域にメモリを出現させて、ブートROMのように使うことができます。そのためのプログラムとして既にI-Oデータ製PC34用のものがありましたが、EMJボード用に移植しました。拙作のROMアプリケーションがEXIDE**などいくつかありますが、このEMSボードの拡張ROM域にロードして実行できます。わざわざROMボードを用意する必要がなくなり、ジャンク市場に豊富に出回っているEMJシリーズ EMSボードが活用できます。すなわち本プログラムはEMJ EMSボードを リアルモードUMBやROMエミュレータとして活用するツールです。
■ 対象ハードウェア
EMJ,EMZ シリーズが対象です。EMAなど、これら以外のボードは対象外です。本体は80286以上が必要ですが、EPSON機でも使えるはずです。 I-O DATA 製 PC34用の同様のツールはこちらにあります。■ 使用法
いずれもピュアな(仮想86でない)DOSコマンドプロンプトで実行します。
EMJD0.EXE
EMJD4.EXE
LOADD0.COM
LOADXROM.EXE
EMJD0 は、最初に実行しておくもので、これにより 拡張ROM域のD000:0からの16KBに EMSボードがマッピングされ、以降普通にメモリとして使えるようになります。ハイレゾモードの場合はEC00:0です。 EMJD4 は D400:0からを使用します。ハイレゾモードではE800:0を使用します。 。
LOADD0.COM はコマンド引数としてファイル名が必要です。指定するファイルは何でも構いませんが、拡張ROMプログラムとして実用性のあるものを通常置いて下さい。これによりD000:0にデータがロードされます。ハイレゾモードではEC00:0にデータがロードされます。扱える最大ファイルサイズは12KBです。
LOADXROM.EXE も同様ですが、4KB単位で任意の位置にロードできます。実行後、ロードするセグメントアドレスを途中で尋ねてきますので、解像度ノーマルモードでは D0からDFの値を、ハイレゾモードでは E5からEFまでの範囲でRAMのある場所を指定してください。読み込むことができる最大ファイルサイズは16384バイトまでですが、16KB境界を超えるファイルサイズではいけません。このチェックは行いませんので、各自で把握しておいてください。たとえばD200:0にロードする場合、最大ファイルサイズは8192バイトです。
LOADD0を実行した場合、拡張ROM域のD000:0に置かれたROMコードがリセット再起動後に実行されます。ハイレゾモードの場合はEC00:0です。LOADXROMの場合も指定したセグメントアドレスに置かれ、実行されます。
いっぽうコマンド引数なしで実行すると、4KBをゼロクリアします。起動時ROMコードを実行したくなくなった場合にはクリアできます。もちろんわざわざクリアしなくても、ボードの通電が途絶えれば消去されます。
■ さらなる使い方(オプションや改造)
C0-CFエリアをUMBとして使う場合は、コマンドライン引数に C0 を指定してください(ハイレゾモードでは無効)。なおEMJボードではPC34とは異なり、A5-A7エリアにはマッピングできません。
このUMBエリアは、EMUMBなどアドレスを指定できるUMBツールで利用できます。EMSメモリ付属のドライバ(MELEMM.SYSなど)は使用できません。また仮想86によるUMBではこのエリアの物理メモリが使用されません。
オプション /r を付けると、マッピングされているウィンドウを全て解除します。通常はリセットでも、また電源断でもマッピングは解除されますが、意図的にそうしたい場合に使用してください。
■ ハードウェア的諸注意
・EMJの設定
全てをEMSで使う設定にします。ボードが1個のときは、ロータリーSW1は1 、SW2は4に設定します。ただしハイレゾ兼用機ではSW2はCにします。そうしないと本プログラムは機能しません。一部でもプロテクトモードメモリの設定があるとリセット後に初期化されてしまいます。
・リセット時
EMJボードではハードウェアリセットがかかるとメモリのマッピングが解除されます(内容も無保証になる)。しかしこのリンク先のようなハードウェア改造を行うと、リセット時にメモリマッピングが保持できるようになります。もちろんメモリの内容も保持されます。つまりROMエミュレータとして使えるようになります。
・PCI-Cバスブリッジのある(潜在的にPCIバスのある)機種
EMJボードを使うのには全く適しません。ふつうにI/Oアドレスが競合します。6000h〜の4KBのI/O空間をPCIデバイスがどこも占有していない場合のみ使用できます。その場合でも、必ず[ESC][HELP][5]のキーを同時に押しながらの起動を1回は行ってください。もしなにかの拍子に"SET SOFTWARE DIP SWITCH" のメッセージが起動時に出た場合は、再度[ESC][HELP][5]押し起動が必要となります。なにかの拍子にリセット後にメモリのデータが化けることもあります。基本的にはPCIバス搭載機での使用はお奨めしません。なお Mate-R では全く動作しません(D0000hのMTRRを適切に設定すれば動作可能ですが)。
・ほかの拡張ROMボードとの競合
D000:0をほかのボードのROMが使用していることもあるかもしれません。そのときはEMJD0を実行しても機能しないか、競合により予期せぬことが起こるかもしれません。EMJD0には既にD000:0に別のものが存在するかどうかを確認するルーチンは組み込んでありません(*)ので、ご自身でアドレス管理してください。PnP機でPnPのボードを使うと予期しないのにD000:0が使われることがあります。
* それをやるとPARITY ERROR発生の原因となることがあるため・ハイレゾモード時の制約
ハイレゾモードでは実質的にEC00セグメントにしかメモリウィンドウを配置できません。しかもここはSCSIボードのBIOSが通常EE00セグメントに存在することから、SCSIを使わない環境でなければなりません。なおEMJD4.EXEをハイレゾモードで実行するとE800に配置できますが、その場合はIDE BIOSが無い機種である必要があります。
したがって、SCSIとIDEを両方存在させたうえでEMJD0を使いたいときは、SCSIのBIOSをEA00セグメントに設定してください。なおこのアドレスに移動すると、SCSI_RAMなどによるRAM化はできなくなります。
・ノーマル/ハイレゾモードを切り替えるときの注意
リセットに対抗する改造がなされている場合、リセット時にメモリの内容が保持されるだけでなく、メモリマッピングも保持されます。このため、ノーマルモード←→ハイレゾモード の切り替えを行っても、メモリマッピングは以前の状態のままとなってしまい、次回起動のときに不都合を来す恐れがあります。改造してあるボードを使う場合、解像度動作モードを切り替えるときは、そのままリセットするのではなく、電源も一度切って再投入してください。いっぽうリセットに対抗する改造が為されていない場合はリセットで十分です。
・ソースプログラム
ソースプログラムは PC34D0のほうにあります。
■ お約束
このソフトウェアはフリーソフトウェアです。自由に使っていただいて構いませんが、作者は、このプログラムの動作結果や影響に対して、一切責任は負いません。著作権は作者である「まりも」(DOSsoft)が保有するものとします。不特定多数がダウンロードできる場所への転載はお断りします。
プログラムは、ある程度のテストを経て公開していますが、動作が完璧に行なわれるということを、作者は保証するものではありません。ユーザがプログラムを組み込んだことによる起動不能などのトラブルの補償には一切応じません。
なお、EXIDE**などのROMアプリケーションは、このソフトウェアとEMSボードで使用することは認めます。とくに許可は要りません。
まりも (連絡先メールアドレスはホームページ上で) ■改版履歴
年月日 版 内容 2021. 8.25 1.00 新規 2021. 8.25 1.10 C0オプション指定時のみに当該UMB領域のマッピングをするよう変更 2025.10. 4 1.25 ハイレゾリューションモード(EC00セグメント)に対応 2025.10. 5 1.28 EMJD4 E5をハイレゾで実行時にE5,EA,EB の4+8KBにメモリが出現できるようにした。
補足 EMJボードの抗リセット改造
必要なもの
必要なもの(半導体製品)は、3端子の電源監視リセットICです。秋月電子などで非常に安価に売られています。3端子は電源 Vcc, GND, output の3つです。Vccが5Vの限界より低下すると、outputとGNDの間にパルスの信号が発生するものです。このパルスを、Cバスからのリセット信号の代わりに、EMJの主要チップMGA-7に入れます。
手順
- 1.CバスのRESET信号とMGA-7チップの導通のあるピンを調べる(探す)
- 2.適当なところでこのパターンを切断する
- 3.MGA-7側のそこと電源リセットICの出力ピン[3]を繋ぐ
- 4.リセットICのVcc[2]をVcc5Vに繋ぐ
- 5.リセットICのGND[1]をGNDに繋ぐ
![]()
半田付けの順番としては5、4、3がよいでしょう。3端子のリセットICのピン番号はその製品のデータシートに従ってください。ピン配置は画像の通りという保証はありません。CバスのRESET0のピン番号はB34です。MGA-7の該当ピンは忘れましたが108番あたりでしょうか、画像でなく現物をテスタを使って調べてください。このボードでは積層セラコン近くでGNDとVccの拾えるところにリセットICを置きました。MGA-7への配線はピッチが細かいので半田付けは少々難しいです。切断したパターンを磨きだして半田付けするほうが普通は容易と思います。