goo blog サービス終了のお知らせ 

レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

ユニバーサルテストボードでMSXのSDドライブをつくる

2025年02月01日 | 電子工作

前回、ユニバーサルテストボードの8255でMSXのI/Oポートを増設し、様々なデバイスを接続できるようにしました。これによりユニバーサルテストボード上の回路やマイコンなどをMSXにつなげられるようになりました。

MSXはBASICからI/Oポートを操作できるので動作確認しながらプログラムを書いていけるという便利さはあるのですが、手持ちのMSXでは作ったプログラムの保存にカセットインターフェースしかありません。音声による記録なのでロード・セーブの度に外部のレコーダもしくはPCのレコーディングソフトなどを操作する必要がありますし、読み込み・書き込み時間も長めです。

また、接続したデバイスを本格的に利用するときはCやアセンブラでプログラムを書くことになるのですが、これも音声データに変換してMSXに読み込ませる必要があります。幸い今MSX開発に使用しているz88dkはCやアセンブラをコンパイルするときにバイナリをwavファイルとして出力させることが出来るので問題ないのですが、上記の通りちょっと面倒です。

そこでMSXもしくはz88dkで作成したプログラムをSDカードに読み書きするデバイスを作ることにしました。以前にもMSXの汎用入出力ポート(ジョイスティックポート)を使ったSDカードドライブを作ったことがあったので、今回はこれを8255接続に変更するだけです。

前はSDカードの読み書きにATmega328Pを使いましたが、今回は同じATmega328Pを搭載したArduino Pro Mini(互換機 5V動作)を使うことにしました。最近ESP32のマイコンばかりいじっていて、使われなくなったPro Miniがいくつも転がっていたからです。

ただ、使用にあたってPro Mini(ATmega328P)がCMOSというのが懸念材料でした。ユニバーサルテストボードのICはTTLなので、CMOSのPro Miniとは入出力の電圧レベルが異なり何らかの対策が必要になると思ったからです。

実はユニバーサルテストボードの8255は82C55でCMOSなのですが、データシートによるとTTLフルコンパチブルとなっていたのでTTLとして扱っていました。実際にTTLとの接続には全く問題ありませんでした。しかし、そうなるとCMOSとの接続では問題が出そうです。

そこで82C85とATmega328Pのデータシートを見比べてみると、お互いのHIGHレベルの入出力はうまい具合に重なっていて問題なさそうでした。LOWベルの入出力はお互いに0.1Vほど足りていないのですが、同じGNDにつながっているのでこれも問題なさそうです。

直接接続して送受信テストをしてみましたが、データがおかしくなることもなく正常に動作していたので直につないでも大丈夫みたいです。なので何も対策せずにそのまま使うことにしました。

ユニバーサルテストボードを所持している人は少ないと思いますので詳細は省きますが、参考までに接続内容を簡単に説明すると、8255はモード0にしてポートCを4ビット入力・4ビット出力に分けてそれぞれ2ビットずつ使ってMSXとPro Miniの通信ハンドシェイクの信号線にし、ポートAを入出力切り替えながらデータ送受信に使いました。ただし、8255は初期化されるまでは出力がハイインピーダンスになっているみたいだったのでPro Miniのハンドシェイク用の入力端子はプルアップしています。

SDカードは3.3V動作なので5V動作のPro Miniとの電圧変換は分圧抵抗ではなくレベルコンバータをちゃんと入れました。レベルコンバータとSDカードに3.3Vを入れるための三端子レギュレータも搭載しています。MSXで作成したプログラムやデータがデバイスの誤動作で失われると復元が面倒になることもあり得るので、安定動作を目指した仕様になっています。また、外部電源につないでいるユニバーサルテストボードから電源供給しているのでICを多く使っても大丈夫という安心感もこの構成の理由の一つです。

前に使った汎用入出力ポートにくらべて8ビットをフルに使えるパラレル通信なので、非常に高速に読み書き出来てプログラムも簡単になりました。通信部分以外のソフトウェアは前回と同じでBASICのコマンド拡張により、BASICとマシン語のロート&実行・セーブ、裏RAMを使った32KBまでのROMイメージのロード&実行、SDカードのファイルのリネーム・削除が行えます。

ROMイメージ以外のファイルはエミュレータでも使われるcas形式ですので、z88dkでコンパイルしたプログラムをcasで出力してSDに書き込めばすぐにMSXで利用できます。さらにエミュレータ用のプログラムもそのまま実機に読み込んで実行することが出来ます。これでハードウェアに依存しない部分はエミュレータで作成してすぐに実機で試せるという、効率の良い開発が可能になりました。

でも、SDカードの読み書きプログラム自体は最初にカセットインターフェースから読み込んでおく必要があります。今は手のひらに収まるサイズの携帯音楽プレーヤーからロードしていて、プログラムサイズも小さいので読み込み時間が短くそれほど苦にはならないのですが、いずれは何とかしたいところです。

今回使用した8255のポートにはまだ空きがあります。ここに何か接続してみたいところですが、その前にどうしても使ってみたいICがユニバーサルテストボードにあるのです。ただ、このICもMSXのバスに接続しなければならないのでスロット基板をもう一枚作らなければなりません。製作には少し時間がかかるので、とりあえず今の基板を流用して検証してみようと思います。



最新の画像もっと見る

コメントを投稿