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

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第497回]


●E−80のRS232C送信テスト

前回書きましたように、E−80ミニコンにはND80ZV(ND80Z3.5)用のZB3DOS(CP/M互換DOS)とほぼ同じOSを搭載します。
ただハードの違いにより一部の機能の手直しが必要です。
今はその作業中です。
ここ2、3日はRS232Cについて作業していました。

ZB3BASICのRS232C命令にはREAD #(受信)とWRITE #(送信)があります。
送信は
WRITE #1,”ABC”
のように使います。
”ABC”のところはA$のように文字変数を使うこともできます。
また「,」で区切って、複数の文字変数、文字定数を置くこともできます。
#1はCH0です。
CH0なら#0ではないか、と思われるかもしれませんが、#0は特別の機能に割り当てているため、そのようにしています。
E80ミニコンにはCH0のほかにCH1もあるのですが、今のところ暫定仕様ですのでCH1用のWRITE #2は未実装です。

受信は
READ #1,A$,A%
のように使います。
受信したデータ(文字)は文字変数(上の例ではA$)に入れられます。
ZB3BASICのRS232C受信は割込受信を使っていますから、プログラムの実行と関係なく受信が行なわれます。
受信したデータ(文字)は受信バッファに蓄えられます。
ですからREAD #は厳密に言えば受信命令ではありません。
READ #を実行すると、受信バッファに蓄えられている受信データが、指定する文字変数に読み込まれます。
整数変数(上の例ではA%)には、受信バッファから読み込んだ文字列の情報が入れられます。
約束事として、この整数変数にはREAD #命令が実行される前に0を入れておく必要があります。
受信バッファが空の場合には整数変数の値は0のままです。
文字変数には受信バッファから0D0Aコードまでの文字列が読み込まれます(0D0Aコード自体は読み込まれません)。そして整数変数には読み込まれた文字数が入れられます。
READ #命令が実行されたときに、まだ0D0Aコードが受信されていない場合にも、現在受信されている文字列が文字変数に読み込まれますが、その場合には整数変数には−1が入れられます。

実際の使用例を見ていただくほうが理解しやすいと思います。
下の画像は、当社のZBKボードとE−80ミニコンをRS232Cケーブルで接続して、通信テストをしているところです。
左のDOS窓がZBKボードで右のDOS窓がE−80ミニコンです。
ZBKボードが受信、E−80ミニコンが送信です。



10 A=0
はおまじないです。
ZB3BASICはリセットするとプログラムが一旦クリアされますが、HELPコマンドで復活させることができます。
RAMをバックアップしているときは、電源を切っても、次に電源を入れてシステムを起動したあと、HELPコマンドで電源を切る直前にRAMに読み込まれていたBASICプログラムを元通りに復活させることができます。
なかなかに使いでのある機能です。
ところが、このプログラムのようにシステムで定義済みの整数変数A%〜Z%、文字変数A$〜H$以外を使用しないプログラムは、うまく復活させることができません。
そこでHELPでうまく復活させられるようにダミーの変数を置くようにします。
それが10 A=0です。
なお、何らかの原因でプログラムが暴走してしまったり、CP/M機能に切り換えたりしたあとでは、HELPコマンドでプログラムを復活させることはできません。

左のDOS窓には、
20 WRITE #1,”2N81”
という文があります。
ND80ZV(ND80Z3.5)やE−80ミニコンのZB3BASICは、当社のZBKボード(ZB28Kなど)に搭載しているZBKBASICをもとにして作ったものですが、部分的に異なっているところがあります。
ZBKBASICでは、232Cの初期設定にWRITE #1を使います。
WRITE #1,”2N81”
の最初の2で9600bpsを指定しています。
1=19200bps、2=9600bps、3=4800bps、4=2400bpsです。
次のNはパリティなしの指定です。
8は8ビットを、最後の1はストップビット長の指定です。

ND80ZV(ND80Z3.5)のZB3BASICではボーレートはディップスイッチで指定します。
パリティなし、8ビット、ストップビット1固定です。
E−80ミニコンでは9600、4800、2400、1200のいずれかをソフトウェアで指定することができます。
パリティ、8/7ビット、ストップビット長も指定可能なのですが、とりあえず暫定仕様では、パリティなし、8ビット、ストップビット1固定です。
ボーレートはシステム用の82C55のCポートから出力する値により選択しますが、そのところだけをBASICに組み込みました。
それが右側DOS窓の
20 WRITE #0,”13”
です。
最初の1はCH0を、次の3は9600bpsを示しています。
3=9600,2=4800,1=2400,0=1200bpsです。

上の画面コピーで、右側DOS窓のE−80ミニコンから送信したデータが、左側DOS窓のZBKボードで受信されていることがわかると思います。
受信側プログラムには説明が必要ですが、本日は時間がなくなってしまいました。
次回はE−80ミニコンを受信側にしたテストについて説明をしますので、そのときにREAD #命令についても説明をいたします。

ワンボードマイコンでCP/Mを![第497回]
2013.10.12upload

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