ずいぶん前からMSX3が開発中だという話はありましたが、ついに今年になって画像が公開され発売が近づいてきた感じです。
MSX3には3タイプあるようで、その中のMSX3 IOTというタイプはMSX1やMSX2のスロットに差し込んでMSX3にする物だそうです。これまでMSX1をベースに電子工作を楽しもうと思っていたのですが、MSX1をMSX3にできるならそちらで楽しみたいところです。
そこでMSX1はしばらく放置して、CDドライブが動かなくなって使わなくなったFM-TOWNSの修理など古いパソコンのメンテナンスを行いながらMSX3の発売を待っていましたが、現在までなんの発表もありません。ソフト面の開発でまだまだ時間がかかるのでしょうか?
いつまで待つことになるのか分からないので、MSX1の電子工作を再開することにしました。
とりあえず前回までにMSXの汎用入出力インターフェイス(ジョイスティック端子)にArduinoをつないでデータの送受信テストを行いましたので、今回はもう少し実用的な入出力ルーチンをつくってみようと思います。
方針として、汎用入出力インターフェイスが入力4ピン、出力1ピン、入出力2ピンとなっていますので、MSXからのデータ送信に2ピンを受信に4ピンを使ってみることにします。
MSXとの接続にはArduinoではなく3.3V、8MHz動作のATMega328Pを使うことにします。これは今後SDカード(3.3V動作)を読み書きできるようにしたいと思っているからです。
配線は以下のようにしました。
ATMega328Pのピンの( )内の数字はArduino IDEでのピン番号です。
ATMega328Pの16(10)〜19(13)ピンはSDカードの読み書きに必要なので空けておきました。さらに、デバッグのために27(18)と28(19)にはI2C接続のOLEDディスプレイをつなぎました。それと3.3Vで動作させるためにMSXからの5V出力を3端子レギュレータで3.3Vに落としています。
次はプログラムです。
まずはMSXの2ピンを使ったデータ出力プログラムを作ってみます。MSXは6〜8までのピンを出力に使えますが、8ピンは送信用のクロック出力にして6、7ピンをデータ出力に利用することにしました。
作成したMSXのプログラムはこちらになります。Z80のアセンブラソースですので、お好きなアセンブラでご利用ください。
data_out.asm
AVRのスケッチはこちらです。使用したArduino IDEのバージョンは1.8.19で"ボード:"は"Arduino Pro or Pro Mini"、"プロセッサ:"は"ATmega328P (3.3V,8MHz)"としました。
ATmega328MSXread.ino
デバッグ用につないだOLEDディスプレイはArduinoでおなじみのSSD1306です。表示にはSSD1306Asciiライブラリを使わせてもらいました。
MSXのプログラムを実行するとMSXからATMega328Pへ改行コード含め18文字のデータが送られます。
上記のMSXのアセンブラソースでは実行アドレスをD000としているので、MSXで実行するときはコマンドラインからDEFUSR=&HD000:A=USE(0)と入力します。それとCLEAR 200,&HCFFFでマシン語領域を確保しておいた方が安全でしょう。
続いてMSXが4ピンを使ってデータ受信するプログラムです。入力には6ピンを使うことができますが、8ビットデータを受信するには6ビット+2ビットで扱うよりは、4ビット+4ビットの方が感覚的に扱いやすいので1〜4の4つのピンを入力に使うことにしました。4ピンにするもう一つの理由として、クロックの受信にもう1ピン必要な点もあります。
理想はMSX側が8ピンでクロックを送り、それに合わせてAVRがデータを送信してくるという形にしたいのですが、MSXの汎用入出力インターフェイス(AY-3-8910)では、汎用入力をポートAに出力をポートBと分けて設定してあり、使用するときはこれらのポートをZ80のI/Oアドレスに割り当てる必要があります。したがってデータを入力するときはポートAを割り当て、出力したいときはポートB割り当てなおすという煩雑な処理が必要になるのです。
したがってMSXでデータ入力が必要なときは、クロックを送信するのではなく受信する方がポート割り当て(PSGのアドレスラッチ)の処理がなくなり、プログラムがシンプルになります。
具体的には、まずMSXで出力ポートBをラッチして8ピン経由でAVRにデータ送信要求の信号を送ったら、こんどは入力ポートAをラッチした状態のままにしておき、6ピンに送られてくる信号をクロックとしながら1〜4ピンでデータを受け取るという処理にします。
この処理のMSXプログラムはこちらです。
data_in.asm
AVRのスケッチはこちらです。コンパイルの条件は上記と同じです。
ATmega328MSXwrite.ino
実行するとATMega328PからMSXへ改行コード含め11文字のデータが送られます。
これで、MSXの汎用入出力インターフェイスのデータ送受信ルーチンが完成しました。今度はこれらを一つにまとめてSDカードの読み書きを行ってみたいところですが、それはまた後ほど試してみます。
最新の画像[もっと見る]
- 2025 秋月電子通商 八潮店 福箱 15時間前
- 2025 秋月電子通商 八潮店 福箱 15時間前
- 2025 秋月電子通商 八潮店 福箱 15時間前
- 2025 秋月電子通商 八潮店 福箱 15時間前
- 2025 秋月電子通商 八潮店 福箱 15時間前
- 2025 秋月電子通商 八潮店 福箱 15時間前
- 2025 秋月電子通商 八潮店 福箱 15時間前
- 2025 秋月電子通商 八潮店 福箱 15時間前
- 2025 秋月電子通商 八潮店 福箱 15時間前
- 2025 秋月電子通商 八潮店 福箱 15時間前
※コメント投稿者のブログIDはブログ作成者のみに通知されます