CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

シリアル受信処理

シリアル送信部がほぼできたので今度は受信処理部分をコーディングしていきます。
 
デバッグのため前回作って動作確認済みの8085ボードにちょっと加工をしておきます。このボードのシリアルRXライン(MAX232の12ピン)と8085CPUのSID(5ピン)をUEWで接続
(以下の写真はイメージ)
 
イメージ 1
こうしておくとホストマシンからのキャラクタがボード上の8251RxDとCPUによるソフトウェアUARTに同時に与えられるので両者の結果を比較することでソフトウェUARTの検証ができます。
 
処理方法としてはキャラクタが来る前にソフトウェアUARTルーチンを呼んでおき、RIM命令でSIDピンのレベルを監視しスタートビットの立下りを待ちます。
立下りをトリガとしてその後一定間隔でSIDのレベルをサンプリングしてシフト命令でレジスタに押し込んでいくと8回目で1バイトのキャラクタが受信できたことになります。
イメージ 2
ここでトリガ後の最初のサンプリングまでを192クロック(ビットレート間隔の1.5倍)、その後はビットレート同じ128クロックとしてあります
こうすることで各ビット幅のほぼ中央でサンプリングされるので多少ビットレートが揺らいでもOKです。

1ビット分の受信処理はこうなりました。
Aレジスタの最上位ビットに読み込まれたSIDのレベルと前回結果のBレジスタのORを右シフトしてBレジスタ収納します。
この処理はサブルーチンにしてありCALLで使われる18クロックを考慮して110クロック消費するようになっていて不足69クロック分はさらに調整ルーチンtwait69を呼んでいます
 
イメージ 3