前回作成したZ80マイコン用 YM2151音源のプレーヤをZ80アセンブラで作成してみました。
作成と言っても、こちらのサイトのArduinoスケッチをストレートコンバートしたものです。 ^^)>
Arduino で YAMAHA YM2151 を VGM ファイルで演奏させる
http://another.maple4ever.net/archives/2441/
Z80版プレーヤ アセンブラソース
作成したZ80マイコン用 YM2151音源のプレーヤのソースは こちらです。(ちょっと長いです)
gistにUPしています。数十年ぶりにZ80 CPUのインストラクションを調べながら作ったので無駄なコードがたくさんあると思います。
- 音楽データはArduino用ヘッダファイルに16進形式でサンプル音楽が入っているので、別Z80 ASMファイルへawkでコンバートしました。
- 音楽データは 9000hから配置することで決め打ちにしています。
- Z80のI/O番地 20hにYM2151を配置したので 20h/21hへデータを出力しています。
- 休符のためのウェイトルーチンは私の作ったZ80マイコン用に調整したので他の環境の場合は再調整が必要です。
アセンブリ
Windows上で、zmacを使ってクロスアセンブルしました。
> zmac --oo lst,hex Z80-VGM-PLAY.ASM
インテルHEX形式のオブジェクトが生成されますので、これを流し込めばOK!
先日紹介した機械語モニターのLコマンドで流し込みします。
ちょっと音楽ファイルはファイルが大きめなので、TeraTERMの設定で1文字づつウェイトを入れながら流し込まないとZ80マイコンで取りこぼしてしまいました。1文字1ms待つ設定にしたら、昔のマイコンのカセットテープばりに時間がかかりますw
実行
機械語モニターのLコマンドでロードが完了したら、8000hから始まるプログラムを実行します。
G8000
BASICではDATA文の途中で演奏が止まってしまいましたが、Z80機械語で作ったプレーヤーでは最後まで演奏できました!!
コメント