PC-8300でプログラミング その2

f:id:PocketGriffon:20210131172415j:plain

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で書かれたコードも多くなく、シフト命令と相対ジャンプを変更しただけで修正出来た。

 

出来上がったバイナリ転送ツール

f:id:PocketGriffon:20210131175919j:plain

動かしてみた画面の感じも全く同じだ。

まんま移植してるんだからそりゃそうだ(^^)

 

通信環境そのものが高機能なゆえに速度が遅かったHC-40に比べ、PC-8300の通信プログラムは単純明快だ。そのため、HC-40に比べても高速な通信が出来るようになった。

上にも書いた通り、メモリダンププログラムをBASICでダウンロードすると20秒、RUNして10秒と、合計で30秒掛かっていた。

それがこのプログラムでダウンロードすると、なんと1.5秒で通信が終わるw

まさに一瞬だ。

通信速度は9600bpsノーウェイトで転送が出来る。試しに19200bpsにしてみたが処理が間に合わなかった。おそらく画面表示を止めたら間に合う気がするが、まぁそこまでやる必要もないだろう。

 

はー、これで相当便利な環境になった気がする!

PC-8300/8201は「アセンブラしか使えない」+「バイナリ転送が出来ない」と、いろんな理由をつけて大きなプログラムを組まない方向でいたが、それらの制限が無くなってしまった!w

何か大きいものを作りたい気持ちはあるが…さてどうしよう(^-^)

 

実はとっても楽しいマシンが手に入ってしまい、そっちへ流れてしまうかも知れない!

ドはまりするのが目に見えているので、やり始める時期を見極めたい(^^;;

うーん、PC-8300で何か作りたいよぉ…(アイディアと絵が欲しいw

 

ではまた次回!(^-^)ノ