正規のボード(PC-6061/PC60m61/PC-6061SR)では、ハードウエア的には、600/1200/2400/4800bps の転送速度が出せます。さらに今回作成したボードは、9600bps が出せるようにしました。
ただ、BASIC でPRINT#-2、INPUT#-2 でデータを受け渡しする時、受信側(INPUT#-2)では、9600bps でデータ落ちが発生してしまいます。タイマ割り込みとか、VSYNC の関係かと思いましたが、違うようでした。
以下、解析結果です。
・リバースケーブル
通常、パソコン対パソコンで通信をするときは、リバースケーブルを使います。
リバースケーブルの形式にもいろいろありますが、一番ちゃんとしているのは以下のような接続です。
TXD(送信データ)が、相手のRXD(受信データ)に接続。
RTS(送信要求)が、相手のCTS(送信可)に接続。
DTR(データ端末レディ)が、相手のDSR(データセットレディ)に接続。
・データ送信
DSR=on 、TxEMPTY=1、TxRDY=1 になるまで待つ。その後、データを出力する。
DSR は、相手の端末の準備が完了している時は、on になっています(DTR=on として出力される)。
TxEMPTY は、送信するデータがない時(つまりデータを送信したい時)に1になります。
TxRDY は、CTS がon の時に1になります。
結局、速度に関係なく、データが出力できる時には出力します。
・データ受信
受信側は割り込みで処理されています。
データを受信すると、RxRDY という信号がon になります。これは、サブCPUに接続されています。
サブCPU は、ある一定の間隔でRxRDY を監視しており、on になるとメインCPUへ割り込みを掛けます。
メインCPUは、割り込みがあると、まず RTS をoff にします(処理中にさらにデータが来るのを防ぐため)。
その後、受信データを読み込んで、RS-232C用バッファに格納します。
最後に、バッファの残量を確認して、2バイト以上残っていれば、RTS をon に戻します。
ここで問題は、サブCPUのRxRDYの監視タイミングで、どうもかなり遅いようです(2ms程度?)。
そのため、9600bps 以上では、受信データを取りこぼすようです。