2014.12.29

前へ
次へ
ホームページトップへ戻る

MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!


[第89回]


●ボーレート

MYCPU80はND80ZV(ND80Z3.5)と同じようにWindowsパソコンとUSBで接続してデータ、プログラムを送受信することができます。
どちらもUSB接続ですが、その中身は異なっています。
ND80ZV(ND80Z3.5)はPIC18F14K50を使ってHIDによる通信を行なっています。
MYCPU80はPIC16F88を使っていますが、その部分はRS232Cです。
そしてFT232RLを介してRS232CからUSBに変換しています。

USBに変換してはいますがプログラムの側から見るとMYCPU80側もWindows側も共にRS232C通信です。
MYCPU80組立キットとしての標準でのボーレートは2400bpsです。
今時としてはかなり低速です。
MYCPU80にはTK−80モニタの機能がありますが、マシン語プログラムでの操作になりますから、それほど高速の通信は必要ないと考えたからです。
またMYCPU80はCPUクロックが2MHzとこれまた今時としてはかなり低速なので、転送ボーレートを余り高くすると通信エラーになる危険性があるのでは、という気持ちもあって2400bpsにしたのですが、詳細に検討してその値にしたということでもありませんでした。

今回MYCPU80にZB3DOS(CP/M互換DOS)を組み込むについて、その用途としては2400bpsではいかにも低速過ぎるということで、とりあえずは9600bpsでテスト作業を行なってきました。
2400bpsでは標準的なRS232C通信に従って、1バイトのデータを16進数で表記してそれをASCIIコード2バイトに変換して通信を行なっているのですが、9600bpsではASCIIに変換せず生のバイナリデータのまま通信するように変更しました。

ところで9600bpsにしたことについては、それなりの理由がありました。
MYCPU80にZB3DOS(CP/M互換DOS)を組み込むための作業を開始した初期に、ASCIIコードからパイナリコードでの転送方式の変更を行なうとともにボーレートのアップも考えて、そのときに9600bpsのほかにさらに19200bpsでの通信テストも行いました。
9600bpsでは安定して通信が行なえましたが、19200bpsではときどき受信エラーが発生しました。
おそらくMYCPU80のCPUクロックが2MHzと低速なのがその原因かと推測しましたが、とにかく無闇にボーレートをアップして信頼性を損なうことになってはいけませんし、その時点ではそれ以上詳細なテストを行なう時間的余裕もありませんでしたので、とりあえずは9600bpsでいくことにして、ここまでやってきました。

前回ご報告しましたように、やっとMYCPU80にZB3DOS(CP/M互換DOS)を組み込むことに成功しましたので、ずっと気になっておりましたボーレートについて、このあたりであらためて検証しておこうと考えました。

そういうことであらためてテストをしてみましたところ、やっぱり19200bpsでは受信エラーになってしまいました。
が。
さらにテストを進めていきましたところ、受信エラーが発生するのは、ZB3DOSのマシン語モニタ機能の/LDコマンドによる受信のみ、らしいということがわかってきました。
おそらくはCPUクロックが2MHzであることが関係しているであろうとは推測していますが、もしそうならばソフトウェア的に対策が立てられるかも知れません。
/LD以外では19200bpsでもエラーにならずに正常に受信できているようですので、とりあえずはCP/MにエントリしてMBASICを起動して、STARTREKをロードするところまでを、9600bpsと19200bpsのそれぞれの場合でテストしてロードにかかる時間を測定してみました。

19200bpsで接続して動作テストを行なっている画面です。


/CPMコマンドを入力してから A> が表示されるまでの時間は、9600bpsでは30secでしたが19200bpsでは15secでした。
DIRの表示は9600bpsが14secに対し19200bpsでは9secでした。
MBASICが起動するまでの時間は9600bpsでは34secでしたが19200bpsでは19secでした。
STARTREKのロード時間は9600bpsが57secに対して19200bpsでは45secでした。

MBASIC.COMは24KBです。
RS232Cの場合1バイトのデータにスタートビットとストップビットが付加され10bitのデータになりますから、9600bpsの転送速度はバイト換算では960バイト/secになります。
24KBの正味転送時間は24000/960=25(sec)になります。
19200bpsはその倍速ですから12.5(sec)になります。
STARTREK.BASは20KBです。
20KBの正味転送時間は20000/960≒20.8(sec)になります。
19200bpsはその倍速ですから10.4(sec)になります。

MBASICの起動までの時間はロードのための時間よりも長く、9600bpsで9sec、19200bpsで6.5sec余計にかかっています。
起動するまでの間にはロード以外の内部処理の時間が加わっていると考えられますが、CPUクロックは同じですから本来ならばロード以外の時間は9600bpsでも19200bpsでも同じはずです。
ここに差があるのはなぜだかよくわかりませんが、あるいはタイミングによっては9600ボーでは1サイクル余分に待ち時間が加わることがあるのかもしれません。
STARTREKの場合には9600bpsで36.2sec、19200bpsでは34.6sec余計にかかっています。
STARTREKのロードはMBASICによってプログラムとしてのロードが行なわれるため、それだけ処理に時間がかかると考えられます。

以上の比較テストによって、正味の通信時間以外にその他の処理時間が加わるとはいえ、やはり9600bpsよりは19200bpsのほうが明らかに高速で処理できます。
ということになりますと、ここはやっぱり19200bpsでいきたいところなのですが…。
それとももっと上でもいけるのか?
そのあたりを追求するためには、どうしても/LDでの受信エラーについて、原因を突き止めなければなりません。

本日は時間がなくなってしまいました。
この続きは次回に書くことにいたします。

MYCPU80でCP/Mを![第89回]
2014.12.29upload

前へ
次へ
ホームページトップへ戻る