[MSX0] シリアルコンソール経由でファイル転送するプログラム #MSX #MSX0

能書き

PCからMSX0にシリアルコンソール経由でファイル転送するプログラム群です。

PC側はChromebookのLinux環境を想定していますが、正直、Linuxなら多分なんでも大丈夫なんではないかと思います。PC側のプログラムはPythonとodコマンドを利用していますので、それらがなければインストールしておいていただければ動くと思います。Windowsでもodコマンド相当のものがあれば動かせると思いますが検証していません。

シリアルポートのデバイスファイルが /dev/ttyACM0 に割り当たっていることを想定したコードになっていますので、環境によって異なる場合は変更してお使いください。

PCとMSX0はシリアルコンソールが利用できる必要があるため、USBで接続しておく必要があります。

MSX側の受信プログラムはZ88DKを使ってC言語で書いております。プログラムのビルドにはZ88DK環境が必要です。

MSX側の実行環境はDiskBASICになります。ディスクアクセスにファンクションコールを使っていますが、DiskBASICとMSX-DOSではファンクションコールの実行アドレスが異なるため、そのままではMSX-DOSでは実行できません。ソースコードの一部とビルドオプションを変えればいけると思われますが未確認です。

肝心の転送速度は、1KBあたり10秒くらいかかってしまい、はっきり言って遅いです。 あくまで、こんなこともできるんだなというサンプルとしてご参考になりましたら幸いです。

数キロバイトとかの小さいプログラムの転送であれば、コマンド一発でCプログラムのビルドと転送、MSX0側での保存までできるので、それなりに便利に使えると思います。自分は使ってます。

転送用のテキストファイルの内容を使うと、コピーペーストのひと手間ふた手間はかかりますが、WebMSXなどへのファイル転送にも応用できます。

ファイル群の説明

  • linuxフォルダ
    • PC(Linux環境)上に配置します。パスの通ったフォルダに配置してください。置かれているサンプルコードは、~/binへ配置し、~/binにパスが通っていることを前提としているものがありますので、ご注意ください。
  • MSXフォルダ
    • MSX側に配置する受信プログラムのソースコードや実行ファイル、また受信プログラムをMSX0側で生成するためのテキストファイルなどが含まれています。

linuxフォルダ

ファイル名 説明
build.sh Cソースコードファイル名(拡張子なし)を指定するとCプログラムをビルドし、転送用のBASICプログラムソースコード+αを生成
buildsend.sh build.sh実行後に、MSX0にバイナリを転送する
printBinAsBasic.py 転送用ではなく、MSX0のシリアルコンソールにコピペする用のテキストファイル(BASICプログラムとその前後で実行したいコマンドが含まれる)を生成するプログラム
printBinAsBasic.sh printBinAsBasic.py実行のシェル。対象のファイル名を指定して利用する。
crebin.bas.txt 上記のprintBinAsBasicで出力に利用されるテキストファイル。
serialSendBin.py MSX0のシリアルコンソール経由でデータ送信するプログラム。プログラム内で受信プログラムを実行するため、あらかじめ受信プログラムをMSX0側に入れておく必要あり。
serialSendBin.sh 上記のserialSendBin.py実行のシェル。対象のファイル名を指定して利用する。
serPri.py 上記Pythonファイルでインポートされるファイル
conPri.py 上記Pythonファイルでインポートされるファイル

MSXフォルダ

ファイル名 説明
serbinsv.c 受信プログラムの本体
serbinsv.msx 受信プログラムの実行バイナリ
serbinsv.msx.bas 受信プログラムを最初にMSX0に格納するためのBASICプログラム
mymsx.c/mymsx.h 主にMSX BIOSを実行するための共通ユーティリティ

利用手順

MSX側の準備

  • PCとMSX0をUSBケーブルで接続します
  • telnet 等で serbinsv.msx.bas の内容をコピーペーストします
  • MSX0側にBASICプログラムが入力、実行されます。
  • serbinsv.msx saved. と表示されると転送プログラム(serbinsv.msx)がディスクに保存完了しています。

Linux側の操作

  • 何かしらのバイナリファイルをMSX0に転送したいとき
    • serialSendBin.sh [転送したいファイル名]
  • Cプログラムをビルドしたいとき
    • build.sh [Cソースファイル名(拡張子なしで指定)]
  • Cプログラムをビルドし、ビルド結果のバイナリファイルをMSX0に転送したいとき
    • buildsend.sh [Cソースファイル名(拡張子なしで指定)]
  • 何かしらのバイナリファイルをMSX0にコピペして生成するためのBASICプログラムを作成したいとき
    • printBinAsBasic.sh [バイナリファイル名]

その他

  • serbinsv.msx はBSAVE形式なので、単独で bload"serbinsv.msx",rで実行することも可能です。

以上

コメント