gapuxjp.infoとcranesjp.infoのドメイン名を取って20年、なんかでかいクレーンの模型でもできてたらよかったですが、その代わりに書きかけで1年以上放置されていたものを公開します。

1995年の春ごろだったか夏だったかに空港通りに電子パーツ屋さんがあるのを見つけてそこで買ったNECのCPUだというLSI、

V40 (μPD70 2 08)

買って一度80286搭載パソコンの286用ソケットにつけてみて発熱させちゃったものだけど、気になったまま27年、たまたま通販でおなじ型番の物を手に入れることができてさらにアプリケーションノートに近い資料*も手に入ったので、2022年の初夏にいざつくってみたもの、

NECの独自にIntel 80186とオブジェクトレベル互換の上に独自命令を追加したCPUである、μPD70116(愛称V30)を中心に、データ信号線を16本から8本に省略したμPD70108(V20)、組み込み装置が作りやすいようにV30とクロック発生器、クロック分周器、割り込みコントローラー、DRAMリフレッシュ支援回路、タイマー・カウンター、シリアルポート、ダイレクトメモリーアクセスコントローラーを統合したμPD70216(V50)、V20に対して同様のデバイスを統合したμPD70208(V40)、CPU部分の内部回路を諸事情で改良したものや、クロック周波数を下げれば3V電源でも動作出来るもの(代表としてV30HL)など幾種類か出ていたようですね。V50HLも3.3Vで遊ぼうと思って当時物をいくつか入手してます。

当時特に何も考えず手元に複数買っておいた256KB容量の30ピンSIMMがあったので、これを使うことを目標に装置を作りました。DRAMの読み書き選択には、書き込み合図の信号(WE#)や読み出し合図の信号(OE#)を目当てのモジュールに与えてやるか、アドレス指示の合図信号(RAS#、CAS#の順に)を読み書きしたいものに与えるなどありますが、SIMM内でOE#が操作できないように結線されていることに気づいて、データを読み書きの制御をデータ線とWE#の切り替えをする方式でDRAMコントローラーを自作してしまったので、配線がやたらに増えてしまいました。動作的には目当てのモジュールにだけ RAS#とCAS#を 与えれば、他はすべて並列つなぎで済んだはずですが。回路図は自分が分かって手入れできる、グラフィカルな部品表程度の物しかなく、ある程度まともに動くようになった時点だとこんな感じってところです。

中央がDRAMコントローラー
右よりの3枚搭載された背の低い基板がSIMM
回路全図(LEDボードなし)

メモリーはV40が読み書きできる1MB分の空間すべて搭載でき、SIMMを4枚装着すれば最下位から896KBまでがRAM、最上位128KBがROMということになっています。最上位のSIMMモジュールの上半分128KBはROMと重複するのでROMに制御信号が行くようになっています。追加回路によってROMの中身を重複するRAMの部分にコピーしてしまい、以後ROMを使わないようにする手もありますが、デバッグ用ならともかく新しめの ROMの読み出しは十分に高速なので高速化としては意味がありません。

ROMは最初適当なEEPROMを使っていましたが、抜き差しが面倒くさいので、SRAMをベースにしてパソコンからシリアル接続でいつでも内容が書き換えられる装置「ROMエミュレーター」を作りました。実情としてはV40側からの書き込み制御信号線が中で生かしてあるので、パソコンからとV40からと同時に読み書きができない不完全なデュアルポートRAMという形になっています。RAMには安かった高速SRAM HM678127(128k*8)を使いましたが、この型のRAMは発表当時の技術でひたすら速いことを狙ったためか、スタンバイでも100mA近い電流で動き、バッテリーバックアップは一切考慮されていないような仕様のため、バックアップはしません。すべての電源を切ったらプログラムをパソコンから送り込んでやらねば使えません。アクセスタイム12nsというのも無駄に早いだけです。

ROMエミュレーター(不完全デュアルポートRAM)
ROMエミュレーター回路図

ROMエミュレーター自体は制御にRaspberry Pi Pico使ったのが今風なくらいで、汎用入出力が25本では128kBのRAMを操作するには信号線が足りないのでアドレス信号をD-ラッチで補ったとか、データ線には5Vトレラント入力のバストランシーバーを入れた程度で、プログラムも万年作りかけでこれといった工夫もなくとりあえず16進テキスト受け付けるとか、Intel HEXフォーマットのパーサー作ってHEXファイルを受け付けるとか、エミュレーターの全領域読み出しできるとかそれくらいで、USB CDCインターフェースのバッファーリングの問題なのか1文字エコーバックが期待したように動いてないのもそのままままです。

プログラミングは、とりあえず8086用アブソリュートクロスアセンブラーuASMを使い、生成されたオブジェクトをIntel HEX形式に変換してROM化するか、ROMエミュレーターに転送して走らせます。

といって記事にしようと思っていたら、追加のボードを作ってデバッグ中に電源をちょっとどうにかしようと思って、5V2AのACアダプター直結からDCジャック接続に変えた際に逆接続で通電してしまい、冒頭のV40個体とSIMMのいくつかはだめになってしまったようです。2022年に新品のV40を複数買っていたので復活させることはできそうですが。

*トランジスタ技術1988年4月号

Leave a Reply