アイマスMADをMZ-700実機で再生する
2008年9月。またひとつMZ-700に不可能がなくなりました。なんと、音声付き動画がMZ-700で再生できるようになったのです。ここでは、ハード製作および実機検証担当として今回のプロジェクトを説明します。
MZ-700での動画再生とは
事の発端は2008年8月2日、数々のレトロPCエミュレータ作家である武田氏によって、野球拳2000の技術を応用したカラー動画の実験がニコニコ動画にて投稿されたところにあります。アイデアからアルゴリズムの構築、動画再生までの解説はこちらを参照してください。→MZ-700でアイマスMADを再生してみよう、の実験報告
武田氏は、実はMZ-700の実機を持っていませんでした。PCGはもとより、当時憧れたけど買えなかったオプションや、当時想像もできなかったハードを、追加投資なしで接続して楽しめてしまうのはエミュレータのひとつの楽しみではないかと思うのですが、武田氏はここで容量無制限の仮想EMM(I/O空間にあるRAMディスク)を作り上げ、そこに画像データがあると仮定して動作する動画プレーヤを作成したのです。
原理的には、エミュレータにできて実機にできないことはない。仮想EMMの仕様も本物と大差なく、動画データの容量も抑えてもらえることになったので、一発奮起して拡張ボードを製作することにしました。いろいろと試行錯誤の結果、このようなすばらしい動画再生が実現したのです。
製作したボード"bigEMM"について
動画データをあらかじめ読み込んでおけるEMMとして、このような拡張ボードを製作しました。名付けて"bigEMM"。
ボード全景 | |
EZ-FPGAとSIMMを取り外す | 裏面 |
bigEMMは、おおよそこんなボードです。
EMMとDRAMコントロール、SDカードアクセス用のAVRコアをFPGAに組んであります。モジュールを取り外した後で最も大きい石はSRAMで、AVRのワークエリアとして設けてあります(FPGA内のメモリが足らなくなったので)。
SIMMの端子は千鳥配列なのですが、基板に細長い穴を開けて一列をそちらに通してあります。ソケットは基板に接着するつもりだったのですが、接地面積が思うほど大きくなかったのでうまくいきませんでした。今はもう一列の端子の配線で固定しているようなものです。背を低くしたくて斜め型のソケットを古いマザーボードから取り外してきたのですが、それでも2スロットを要する高さのボードになってしまいました。
何分手抜きですので…
なおネーミングの"bigEMM"とは、tree氏による4MB EMM"fatEMM"よりも大きい容量のEMMであることからつけたものです。fatEMMは残念ながら回路上の不都合からか完全には動作しませんでした(本当はこちらも16MBまで使用できる設計だったのだが…)が、SIMMを用いてメモリの実装を行うアイデアをいただきました。そういえばあのボードはどこに行ったの?
コンセプト
製作にあたっては、次の点に留意して進めました。
「MZ-700が発売されていた当時に実現可能な技術」という言葉について説明を加えましょう。
MZ-700やMZ-2000など、かつてMZシリーズが「現役」(注:私にとっては今でも現役なのだが…)だった時代に、アイ・オー・データ機器が発売し一部はシャープ純正となった外部RAMディスク・通称EMMというものがありました。3つのアドレスレジスタにそれぞれ上位・中位・下位のアドレスを書き込み、データポートを読み書きすると拡張ボードにあるメモリを読み書きできるわけです。一度アドレスをセットすると、アクセスするたびにアドレスが+1されていく「オートインクリメント」があったため、わりと高速な読み書きができたのです。MZ-700では、本体添付のHu-BASICがアドレスレジスタ$00〜$02、データレジスタ$03でこのボードをサポートしていました。
EMMは2Dフロッピーと同じ容量のRAMが搭載されているのが特徴で、MZ-700用には320KBのものが使用できるようになっていました。320KBというと19ビットですみますので、上位アドレスレジスタは3ビットしか必要なく、残り5ビットは空きということになっていました。で、この5ビット分にもアドレスレジスタを割り付けてしまえば、計24ビット。つまり16MBの容量を扱えることになるわけです。
ハードの枠に縛られた状態で開発しなければならないソフトとは違い、ハードはいわば「何でもあり」。好きなアドレスに好きな回路を接続すれば、いくらでも機能を拡張できるでしょう。もちろんベースにまつわる制限からくる限界はありますが、そういう拡張で得られた機能で何かやったとしても、それがMZ-700でできたことになるのか…?
理想は何も拡張しないMZ-700で全てが可能になること。でも今回は動画のデータサイズの問題から何か拡張しないと実現不可能。そこで次の一線が、「当時の仕様を極力逸脱しないで拡張し、その範囲で実現させる」こと。今回はメモリ拡張なので、次のような考え方が適用できるでしょう。
さらにポイントは、「拡張しても従来のソフトが使用可能」。実はこれは当時の仕様に沿うと自然にできることなのですが、逆に言えば変な独自拡張(というか改造だな)をするとどこかにしわ寄せが行き、従来のソフトの何かが動かなくなる場合があるわけです。
SDカードは当時の仕様を逸脱しないのか?という疑問は当然のようにわき出てくるでしょう。確かに、当時こんなデバイスはありませんからね。FPGAだってそう。しかし、こう考えるのです…「そのデバイスは、目的を果たすために必要不可欠なものか?代替手段はないのか?」
SDカードは動画データを入れておくための入れ物です。つまり別の入れ物があればSDカードでなくてもいい。例えば、HDDを接続したMZ-2500が横にあって、MZ-700にはEMMの他にRS232Cボードが入っているとしましょう(EMMの件を除けばいずれもメーカー純正で揃います)。これらをシリアルクロスケーブルで接続し、MZ-2500から動画データを送り込めば、同じ目的が果たせます。FPGAだって、開発のしやすさと実装面積から採用しているだけであって、ディスクリートで組むことは可能です。
残りはメモリ。当時に16MBのRAMを揃えるにはかなりのお金と、数十階〜100階ぐらい重ねた基板で実装する必要がありそうで、さすがにかなり非現実的ですが、理論的には無理ではない。
というわけで、いろいろこじつけや割り切り・開き直りもありますが、なんとか必要最小限の拡張にとどめていると自負しています。これはすなわち、動画再生はほぼMZ-700の実力でやっているということ。GUIや安全性、開発効率でどんどんCPUが本来持つパフォーマンスを削られている現在、MZ-700みたいなマシンで音声付き動画が再生できてしまうのを目の当たりにすると、いかに無駄があるかということを痛感する思いです。つまりこれは今のPCに対するアンチテーゼなんじゃないかと。って、ちょっと大げさですかね。
回路図とデータ
設計するよりコテを握る方が先になってしまう癖で、できあがったものを回路図におこすといういつものパターンですが、参考用に掲載しておきます。
中央にぽっかり穴が空いてるみたいですが、これがオプティマイズのEZ-FPGAに対応したコネクタです。一応見た目に合わせて配置してあります。下にあるのがもうなかなか手に入らないかもしれない72ピンのSIMMモジュールソケットです(2008年秋頃千石電商で奇跡的に売られていましたが…)。それとパスコンを省略しまくってるのでマネするときはご注意ください。
CN6のEZ-FPGAのJTAGコネクタは、そのままでも接続できたのですがDigilentのJTAG3ケーブルを直接接続できるように、配列変換してCN9に出力しています。CN5のシリアルポートはデバッグメッセージ出力専用なので、ボードからの出力しか配線してありません。
SD/MMCカードを扱えるよう、EZ-FPGAにはAVRソフトコアを搭載しています。AVRコアにてChaN氏作の汎用FATファイルシステムモジュールを使って動画データをアクセスしています。コンソールの類がないので、SW2(ロータリースイッチ)で示した番号のファイル名(0.romとか)を読み込むようにしてあります。提供された動画データが4つしかなかったので、4bitのスイッチですが2本しか配線していません。当初提供された動画データが4つしかなかったのでスイッチも2bit分しか使っていなかったのですが、データの増加に伴い4bit使えるように改造しています。おかげで第3bitの配線が他の3本から離れてしまいました。
ソフトとFPGAのデータなどは、こちらからダウンロードしていただけます(割り込み対応版に更新しています)。無保証でよろしくお願いします。