MCS85ボードでプログラムが無事動作することが確認できたので、この後の開発がより簡単になるように統合環境「CMPLDRV」でターゲットとして選択できるように組み込みました。
・・・といってもASアセンブラを起動するバッチを呼べるようにしただけですが。
フリーエリアが256バイト(実際にはメモリの底からスタックが攻めてくるので220~230バイトくらい)しかコードを置けないのでビルドツールはアセンブラ
一択ですが統合環境のおかげでソース編集→ビルド→ボード転送→実行→出力表示がウィンド間でシームレスに操作できます。
このMCS85ボードはシリアルがソフトウェアUARTなのでデータの送受信には最初から最後まで1ビット1ビットCPUが面倒を見なければなりません。なのでキャラクタが隙間なく来るとキャラクタ間で必ずデータを取りこぼしてしまいます。ここは注意が必要です。
そのためこのホスト側ツールではキャラクタ間にSleep()で1msの隙間が入るようにしました
以下はCPMLDRVのDLL処理部分のソースです
これは一般的なターミナルソフトでも同様で文字間に1msでも隙間を入れてやれば大丈夫でした
ここのところはソフトウェアによる処理の宿命でたぶん割込みを併用してもオーバーヘッドが大きくなる分、事態は変わらない感じです。
i8251とかのハードウェアによるシリアルコントローラはCPUの介在なくレジスタに入ったかフラグを見るだけで後は他の仕事ができるのでCPUからしたらホント楽ですね。128クロック×10ビットとして1280クロック待ちだったら相当いろいろできるはずです。
といっても自作の8251受信処理ルーチン見るとRxRDYフラグをポーリングする空回りループでやっちゃてますが。
とりあえずハードも開発環境も整ったので、サクッとプログラム書いてサクッと実行で快適です