いままでは、ボードマイコンを組むとそれに組み込むプログラムをデバッグするのに EP-ROMまたは EEP-ROMに書いては試しの繰り返しで、なかなか骨の折れる作業でした。 そこで、簡単な ROMエミュレータを作ってみることにしました。ROMエミュレータなら、ターゲットシステムに接続したままプログラムを転送するだけで済みます。 ROMの抜き差しの手間が省けるので、デバッグ効率も大幅に向上するというわけです。
エミュレーションする ROMタイプは、ボードマイコンによく使われる2764/128/256タイプとします。また、何より扱いが容易でなければなりませんので、エミュレーションの機能は必要最低限にすることにしました。とりあえず、LOAD & RUN だけできれば以前のデバッグ環境を継承できます。実際は ICEを使用しているときも LOAD & RUN 中心ですので、それでも十分でしょう。
電源は、ターゲットシステムから得るようにして、メモリのバックアップも無しです。制御にはパソコンを使用しますので、各種パソコンに容易に接続できるよう、専用I/F回路は使わず汎用ポートで制御するようにします。エミュレーターのサイズはなるべく小さく、今回は小型化の限界に挑戦ということで、カードサイズ(かっちょえぇ(^^;)を目標としましょう。
| 対象ROM | 2764,27128,27256タイプ(70ns以下) |
| 制御方法 | 各種パソコンのパラレル(プリンタ)ポート |
| 電源 | ターゲットシステムより供給 |
| サイズ | カードサイズ |
| 製作費 | \5000以下 |
目標のサイズがカードサイズですので、使用する部品は全てSMDということになります。これらを1.27mmピッチのユニバーサルボードの片面に組み上げます。まず、ICの位置を決めてから電源ライン、信号ラインの順で配線してゆきます。電源ラインにはφ0.5メッキ線、信号の配線にはφ0.2のUEWを使用するとよいでしょう。信号線は ICの間を通すようにします。ワイヤはICのリードに巻き付けられないので、予備半田しながら接続していきます。配線の混み具合を考えながら配線しないと最後で苦労すると思いますので注意したほうがいいでしょう。完成したら周りを薄いプラ板で保護して完成です。
で、小型化の結果ですが回路図の破線内の部分を 69mm×47mm×5mm のサイズに収めることができました。目標はカードサイズでしたので余裕で達成できたことになりますね。ケースから ROMプラグまでは電源ラインが2本だけなので、極力短くしたほうが良いです。
一般的な部品だけしか使用していないので、特に入手難な物はありませんし、SOPが入手し難いようでしたらDIPでも全くかまいません。高速SRAMは、キャッシュメモリ用として多く出回るようになったので、入手は容易でしょう。これも普通のSRAMでもアクセス速度が遅くなるだけで置き換え可能です。部品代は\4000程になりました。
データバス幅を16bitにする場合は、SRAMを追加してシフトレジスタを2段にすればOKです。アドレスを拡張する場合は、SRAMを相応の物に交換してアドレスカウンタを拡張すればOKです。74HC590は同期モード接続できるのが2段までなので、3段以上接続するときはRCOで次段のクロックを叩くようにします。
また、プログラムの転送に使うパラレルポートも出力4ビットしか使用していないので、どのようなパソコンでも使うことができると思います。当然ですが制御プログラムはそれぞれの機種毎に必要になりますが。
PROGが"Low"のときは実行モードになります。RAMの出力は Enableされ、RAMのアドレスはターゲットシステムから入力(U3,U4)され、バッファ(U2)を通してターゲット側から読み出すことができます。アドレスカウンタ(U6,U7)の値はリセットされて、カウンタ出力も切り離されます。
PROGを"High"にするとデータ転送モードになります。ターゲットシステムからのアドレスは切り離され、カウンタの出力が RAMのアドレスに入力されます。カウンタのリセットは解除されカウント可能になります。RAMの出力はDisableされてシフトレジスタ(U8)の出力が RAMのデータに入力されます。ターゲットからの読み出しデータは不定となるので RESETプローブをターゲットシステムのリセット回路に接続しておかないとターゲットシステムが暴走します。
CLKの立ち上がりエッジでDATAがシフトレジスタに取り込まれるので、転送データのMSBから順にシフトレジスタにセットします。
STBに正パルスを加えるとデータが書き込まれてアドレスがインクリメントします。最初のSTBは無効で、その後にアドレス0000hが出力されるので注意しないといけません(74HC590の仕様)。
3、4を繰り返してデータを順に書き込みます。27128/64をエミュレートする場合も 32KBをすべて埋めること(A13,A14が不定になるのでイメージも転送する必要がある)。
転送が終わったらPROGを"Low"にするとターゲットシステムのリセットが解除されターゲットシステムが動作を開始します。
EROM.COMは IBM PC用の転送プログラムで、LPT1の D0〜D3を使用するものです。ソースファイルも付けておきました。PC9800などに対応するには定義を変えるだけで(アセンブラが無ければ簡単なパッチで)Okです。使用方法は、
erom <rom type> <hex file> リセット・プログラム転送 erom g 実行(リセット解除) erom r 停止(リセット) <rom type>は 64/128/256のいずれか。 <hex file>はインテルHEXフォーマットのファイル。 次のようなバッチファイルで使用するとよいと思います。 [run.bat] erom 256 %1 erom g最後に V25ボードをデバッグしている様子
