2009/09/27

MSXでMAX IIを遊ぶ

トランジスタ技術2006年4月号に、MAX II(EPM240T100C5)基板が付録として付いた。

MAX IIは、メーカはCPLDと呼んでいる。しかしその実は、いわゆるFPGAにコンフィグROMを同梱したもの。MAX7000(EPM7256AがDesign Wave2003年1月号に付録)などとはまったく異なる。安価により大きな容量を得ることができる半面、起動直後にコンフィグの時間があるなど、多少の注意は要する。

このPLDは、コンフィグROMとして使われないフラッシュメモリの一部を、ユーザに解放している。その関連で、精度はないが内蔵オシレータも持っている。512ビット×16、しかもシリアルアクセス、という特殊なメモリではあるが、アイデア次第では使えるかもしれない。今回はROMとして利用した。

PLD用ツールは、ALTERAサイトからQuartusIIがダウンロードできる。以前はライセンス申請(半年毎)が必要だったが、最近のバージョンでは不要になったらしい。



この手の基板をいじる際には、電源コードを引っ張り、スイッチ、7セグLED等入出力装置を外付けすることが多い。MSXにつなぐことで、あらかたまかなえ、アクセスもしやすくなる。接続は、MSXのカートリッジバスを介して行う。

カートリッジ基板は、大昔に買っておいたエミールソフト開発製大型基板。ピンヘッダで下駄を履かせてPLD基板を2階にしている。ちなみに社長のページもある。

MSXのカートリッジバスのピンアサインは、connector contentsの下のほうにある。

基板上にByte Blaster MV相当の回路が搭載されているが、カートリッジに収めることも考えて、10ピン・ピンヘッダで自作ケーブルをつなぐようにした。このケーブルはPCのパラレルポートへ接続する。

PLDは3.3Vで動作する。MSXは5Vなので、72333(JRC)などで3.3Vを作る。LEDなどインジケータを付ける場合には、諸事情から、なるべくこの3.3Vから取るようにする。

このPLDは、TTLレベルではあるが5Vトレラントではない。従って、MSX側につなぐピンには、電圧制限回路を付加する。ちなみにMAX IIシリーズの上位デバイスには、トレラント機能を持つものもある。

回路は電流制限抵抗(R=100Ω)とクリップダイオード(1N4148など)からなる。クリップダイオードにより、3.3V+VFに制限される。その際、電流制限抵抗によって制限された電流が、3.3Vラインに捨てられる。
抵抗が小さければ、捨てられる電流が多くなり、バスの負荷は大きくなり、3.3Vラインも電圧が上がり気味になってしまう。これが上記の「諸事情」。逆に抵抗が大きければ、ICの入力容量などとの積分回路により、信号が遅延してしまう。実際には、1kΩあたりが妥当かもしれない。

なお、オープンコレクタ入力(INT、WAIT)、アナログ入力(SUNDIN)には、この抵抗は付けていない。



動作の様子。左下が起動画面。右上が外観。

「外観」内の挿さっている基板の赤いLEDは、電源インジケータ。その隣で、ふわっと点灯するのがドライブしているLED。右端で青く点灯するのが、FDD IN USEのLED。青色LEDは、前使用者が換装したらしい。
ちなみにマッパーRAMを挿しているので、よく見ると「起動画面」のメモリ容量が増えている。

1.ッボっと電源が入り赤色LEDが点灯
2.MSXのタイトル表示
3.3回BEEPおよび、ほんわり点灯
4.一瞬FDDにアクセスしBEEP
5.画面が変わり、MSX-DOSが起動

通常は、タイトル後、BEEP一発後にフロッピーから立ち上がる。INITルーチンを仕込んだROMカートリッジとして動作させるので、「3.」も実行するようになる。ほんわりLEDは、トランジスタでバッファしてはいるものの、ごく普通に抵抗を咬ませただけ。ハードウェアでPWMを構成して、デジタル的にほんわり感を実現している。



主な作成ファイルは、MSX_MAX2.vhd、MSX_MAX2.mifの2つ。
前者は、PLDのVHDLファイル。MSXとのバスのやりとりや、UFM(User Flash Memory)の操作をしている。後者は、UFM用のROMデータ。速度は出ないが1KB分確保できる。

ほかに、起動時とほぼ同じ動作をするBASICプログラムとして、MSX_MAX2.basも作っておいた。turboR高速モード用なので、Z80で動かす場合には、for文のstepを荒くする必要がある。サイン波風にLEDが点滅する。人間の目は2乗に比例して感じるので、そのような式になっている。

参考に、PLDのピン割り振りを記述したMSX_MAX2.qsfも含めた。

以上すべてをMSX_MAX2.zipにまとめてある。


なお、ハード、ソフトとも、2006年に作成したものを焼きなおした。

3 件のコメント:

  1. 3.3V系のCPLDをMSXに接続したくて検索していたらココがHITしました。
    ちょっと古い記事なのでコメント書いても気づいてもらえないかも知れませんが...

    当記事について教えていただきたい事があります。
    MSX→CPLDの時には抵抗およびダイオードで3.3V化して接続とありますが、実際の回路図というか、どのように接続したのか、詳しくご教示いただけないでしょうか。
    あと、CPLD→MSXの経路の場合、MSXは3.3V信号をHIGHとして認識できるのでしょうか? (TTLの電圧基準的には出来るのかなと想像しています)

    ここ最近MSXを引っ張り出してハードウェアを勉強し始め、最近やっとで74LSロジックIC(139とか273とか)を使ってMSXにI/Oポートの増設程度の事が出来るようになり、FPGA/CPLDにチャレンジしたらこの 5V/3.3Vの電圧差で躓きました。
    MSXが貴重な当時モノで壊したくないので、正確なところを知りたいと思い質問させて頂きました。
    よろしくお願いいたします。

    返信削除
  2. > CPLD→MSXの経路の場合、MSXは3.3V信号をHIGHとして認識できるのでしょうか? (TTLの電圧基準的には出来るのかなと想像しています)
    MSXはTTLレベルですから、想像のとおりです。

    > MSX→CPLDの時には抵抗およびダイオードで3.3V化して接続とありますが、実際の回路図というか、どのように接続したのか、詳しくご教示いただけないでしょうか。
    A5とかD7とか/SLTSLとか、30本余のすべての信号各々について、手書き回路図にある「bus-pin」のような接続にします。1信号につき、抵抗とダイオードを1本ずつ使います。
    冒頭の写真では、スロットに挿さって半分隠れている抵抗群がそれにあたります。1kΩで作り直す気力は残っていませんでした。

    > MSXが貴重な当時モノで壊したくないので、
    厳密に言えば、MSXバスのスペックはオーバーしている可能性があります。
    とはいえ、わざわざギリギリまで落とした設計をする理由はありませんし、外部に信号を出すところですからメーカもマージンを取っているはずです。
    それでも心配であれば、5Vトレラントなデバイスを使って直結するか、間にレベル変換ICをかますか、そんな感じになりそうです。
    MSXバッファカートリッジ」で中継する手もあります。
    74HCTシリーズで作れば±4mAまで、74ACTで作れば±24mAまで、各信号で流せるようになります。

    MSXのデータバス、アドレスバスは、ファンアウトが1しかありません。Hレベル出力は20μAまで、Lレベルは0.4mAまでです。
    コントロール信号でも、ファンアウトは2(つまり40μA、0.8mA)です。
    本記事作成物では、実際のダイオードのVFや、MSX側のHレベル電圧によって、各ラインにmAクラスの電流が流れる可能性はあります。
    負荷は大きめですが出費はほどほどで速度も稼げるのではないか、ということで採用しました。

    抵抗とダイオードを入れ替えてオープンコレクタ風にし、抵抗も10KΩぐらいにすれば、規格内に収まりそうです。
    この場合、CPLD側の電源電圧が上がることはありません。速度的にやや心配ですが、今ならこちらで作ったかもしれません。
    ただし、双方向のデータバスには使えません。

    いろいろ手段はありますが、一長一短ですね。

    返信削除
  3. 大変ご丁寧に回答いただきありがとうございます!
    ファンイン, ファンアウトって言葉なども当に今勉強中のキーワードでして、参考になりました。

    やはり、バス等の大量のピン全てにおいて[bus-pin]のような接続をされているのですね。
    CPLD/FPGAを知った時、大量の配線をしなくても良い夢のようなデバイスだ!と感心したのですが、やはりレガシーなバスに接続する時はその限りじゃなさそうですね。
    実は、そのまさにバッファカートリッジのようなものを作る必要がないじゃないか、と考えていたのです(汗。。。
    しかし、採れる方法も多種あり、どれも一長一短ということでなかなか難しいのですね。
    いったん、1KΩ + ダイオードの構成で試してみたいと思います。


    使っているMSXはSONY HB-101でして、(今さら)最近512KBマッパメモリとか拡張スロットを買い足して研究を重ねてます。(勢い余って、古いアナログのものですがオシロスコープまで入手しました)
    HB-101はアドレスバスとデータバスにバッファIC(74LS367, 74LS645)が入っているようで、それがどれくらいの信号強度(ファンアウト等)なのかまだよく理解できてないのですが、それを勘案して考えれば良いと判りました。

    > 「MSXバッファカートリッジ」で中継する手もあります。

    というか、購入した拡張スロットはバッファされているので、この拡張スロット上で試す分にはHB-101本体までは恐らく影響を及ぼさないって事なんですね。
    ちょっと目から鱗でした。


    ちょっと別の話にはなりますが、以前HB-101からSLTSL3の信号を取り出して、その信号を使ってスロット#3を試作した事があります。
    ケーブルにフラットケーブルを使ったからか、漢字ROMのI/Oアクセスがボロボロで文字化けしまくったのです。
    これは恐らく、漢字ROM自体の出力が弱く、バッファすればOKなのかもと思い至りました。
    バッファカートリッジは少なくとも 1つ、作って持ってると便利そうですね、作ってみることにします!

    とても参考になるコメントいただき重ね重ねありがとうございました。

    返信削除

.