前回MSXのBASICコマンドのフックを書き換えて、BASICコマンドで自作のプログラムを実行できるようにしました。そこで前回のプログラムにATmega328Pとの送受信ルーチンを実装して、ATmega経由でのSDカード読み書きを行えるようにしたいと思います。
まずはATmega328Pとの配線ですが、以前に送受信テストをしたときと同じです。デバッグのためにOLEDもそのまま接続してあります。さらにここへSDカードをつなげました。SDカードはSPIで接続するので配線は以下のようになります。
ATmega328P → SDカード端子
( )はArduino IDEでのピン番号
17(11)MOSI → 2 CMD/DI
18(12)MISO → 7 DAT0/DO
19(13)SCK → 5 CLK
16(10) → 1 DAT3/CS
3.3V → 4 VDD
GND → 3、6 GND
次にMSX側のプログラムですが、手始めに前回作成したIPLコマンドのファイル一覧表示(Fコマンド)を実装してみようと思います。
前にテストしたとおり、MSXの汎用入出力インターフェース(PSG AY-3-8910)を使うので送受信は少し複雑です。このインターフェースの詳細はここにあります。
MSXからの送信は汎用入出力インターフェース2の6、7ピンを4回使って1バイトのデータを送ります。このとき8ピンをデータ送信タイミングのクロックとして使い、1ピンからの入力をATmegaの送信許可の信号として使用しました。
MSXの受信は汎用入出力インターフェース2の1〜4ピンを入力として、2回使って1バイトのデータを受け取ります。このとき8ピンをデータ受信タイミングのクロックとして使い、6ピンからの入力をATmegaからの送信可能の信号として使用しています。
ATmega側のSDカード読み書きはArduino IDEのライブラリを利用するので簡単です。MSXからIPL Fコマンドが送られてきたら、SDカードのルートディレクトリ(今回はサブフォルダは扱いません)にあるファイルの名前とサイズを取得して文字列としてMSXに返信します。そしてMSX側は送られた文字を1文字ずつ画面に表示していきます。
作成したMSXのプログラムはこちらです。(マウスの右クリックで保存してください)
Makefile
files.asm
ATmega328Pのスケッチはこちらです。(マウスの右クリックで保存してください)
ATmega328MSX_SD.ino
MSXのプログラムはZ80のアセンブラソースです。前回と同様にUbuntu上のz88dkのアセンブラを使っています。makeを実行するとfiles.wavが作成されますので、MSXのカセットインターフェイスから読み込ませることが出来ます。
具体的な使い方は、上記スケッチを書き込んだATmega328PをMSXにつないだら電源を入れ、以下のコマンドを入力してwavファイルを読み込みます。
clear 200,&he000
bload"cas:",r
プログラムが読み込まれた後、IPLコマンドの初期化が行われます。
MSX BASICのコマンドラインからIPL Fと入力するとATmega328PにつながれているSDカードのルートディレクトリにあるファイル一覧が表示されます。
ファイル名の脇に表示されているのはファイルサイズです。ファイル一覧の表示中にスペースキーを押すと、表示を一時停止させることが出来ます。スペースキーを離すと表示が再開されます。
今回使用したATmega328Pは3.3V、8MHzで動作させていますが、より高速のマイコンを使う場合は送受信タイミングが合わずデータの取りこぼしが発生するかもしれません。その時はアセンブラソースfiles.asmのwait:ルーチンを書き換えてウェイトを増やしてみてください。
IPL F以外のコマンドはまだ実装していませんが、コマンドの引数をATmega328Pに渡すところまでは作ってあります。また後ほど実装していきたいと思います。
最新の画像[もっと見る]
- ラスベリーパイのベアメタル環境でLVGLを使う 5日前
- ラスベリーパイのベアメタル環境でLVGLを使う 5日前
- ラスベリーパイのベアメタル環境でLVGLを使う 5日前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
※コメント投稿者のブログIDはブログ作成者のみに通知されます