HC-40/88の時に開発して利用していた、バイナリファイル転送プログラムをPC-8300にも作ってみた! まだ試していないが、PC-8201でも無変更で動くはずだ。
開発のきっかけ
PC-8300でプログラミングしてて、段々とダウンロードに掛かる時間が耐えられなくなってきた!最初のうちはプログラムのサイズも小さく、数秒でロード→実行とサクサク進められるだが、コードサイズが大きくなればなるほど実行に時間が掛かるようになる。
先日作っていたメモリダンププログラムは、生産性を上げるためにC言語を用いたため、コードサイズは大きくなりがちだ。
先日の時点で実行バイナリで1215バイト。え?たったのそれだけ?と思うか、意外にでっかいね…と思うかは、それぞれ生きてきた年代で違う気がする(^^;
このバイナリをRS-232Cでロード出来るようにBASICプログラム(テキスト)へ変換し、PC-8300へ送り込んだ後に実行(RUN)してPOKEでメモリへ書き込む。この行程で掛かる時間は、
ロードで20秒、RUNして動き出すまでに10秒。
転送速度を9600bpsに設定しているが、1文字送るたびに4msのウェイトを入れておかないと途中で通信に失敗してしまう。おそらく…通常の通信は大丈夫だが、1行をロードし終わるたびにBASICの中間コードへ変換してメモリへ格納する作業に時間が掛かってるのだろう。
移植する?新規作成する?
やりたいことは単純明快で、バイナリデータをロード出来るようにしたいだけだ。処理の内容的にもHC-40/88で作ったプログラムと全く同じ。だとしたら移植する道もあると考えた。
通信プログラムと聞くと構えてしまう人もいるかと思うが、実際には通信の根幹部分から書くことなどない。ROMの中にあらかじめ用意されているであろう「RS-232Cから1バイト受信」ファンクションを上手に利用すれば良いのだ。
HC-40用に作ったプログラムで、実際にHC-40に依存しているところと言えば、RS-232Cの初期化、1バイト受信、RS-232Cの終了、そして1文字表示処理の4つだけだ。あとはCPUがZ80だったので便利な命令を使っていたが、これを8085に置き換えれば…そのまま動くのでは??
なんとなく見通しが立ってきたので、方針は「HC-40版からの移植」とした!
移植作業
やりたいことははっきりしているが、残念なことにPC-8300で通信のプログラムを組んだことが無い。まずは必要なエントリを探すところから始まった。
RS-232Cの初期化と終了の処理は、HC-40と全く違う構造になっていたため、完全な作り直しとなった。
他にもPC-8300では受信バッファが溢れたことを知る方法が無いなど、仕様の違いはちょこちょことあった。
一応、PC-8300の名誉のために書いておくが、バッファ溢れが検知出来ない事に関しては、そもそもバイナリを送る事を想定していない+内部でXon/Xoffの制御を完璧にしているため、事実上必要の無いと判断した可能性がある(^-^) これは不備じゃなくて仕様だ。
結局、ROM関数のエントリーを調べるのに時間が掛かったが、移植作業自体は1時間も掛からなかった!Z80で書かれたコードも多くなく、シフト命令と相対ジャンプを変更しただけで修正出来た。
出来上がったバイナリ転送ツール
動かしてみた画面の感じも全く同じだ。
まんま移植してるんだからそりゃそうだ(^^)
通信環境そのものが高機能なゆえに速度が遅かったHC-40に比べ、PC-8300の通信プログラムは単純明快だ。そのため、HC-40に比べても高速な通信が出来るようになった。
上にも書いた通り、メモリダンププログラムをBASICでダウンロードすると20秒、RUNして10秒と、合計で30秒掛かっていた。
それがこのプログラムでダウンロードすると、なんと1.5秒で通信が終わるw
まさに一瞬だ。
通信速度は9600bpsノーウェイトで転送が出来る。試しに19200bpsにしてみたが処理が間に合わなかった。おそらく画面表示を止めたら間に合う気がするが、まぁそこまでやる必要もないだろう。
はー、これで相当便利な環境になった気がする!
PC-8300/8201は「アセンブラしか使えない」+「バイナリ転送が出来ない」と、いろんな理由をつけて大きなプログラムを組まない方向でいたが、それらの制限が無くなってしまった!w
何か大きいものを作りたい気持ちはあるが…さてどうしよう(^-^)
実はとっても楽しいマシンが手に入ってしまい、そっちへ流れてしまうかも知れない!
ドはまりするのが目に見えているので、やり始める時期を見極めたい(^^;;
うーん、PC-8300で何か作りたいよぉ…(アイディアと絵が欲しいw
ではまた次回!(^-^)ノ