CPU実験室

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

1文字入力

ホストPCからコードを受け取るために1文字入力も作っておきます。これも今までのシリアルコントローラと同じでキャラクタが受信バッファに入ったかRxRDYフラグをチェック、これが立つまで永久ループ(用途によってはタイムアウトも必要ですが)し、フラグが立ったら受信バッファを読取るという簡単な作りです

1文字出力ルーチンでは危ういところでしたがステータスレジスタも読めるようになったし、こちらは楽勝、と思ったのですが・・・

 

このルーチンを呼ぶと、ホストPCからデータを送ってなくてもすぐにリタンしてしまいます。そして返り値としても受信キャラクタは常に0xFF。つまり受信データありが正しく判断できてないようです。今度もバスタイミングを見てみました

ch1:/SIOCS  ch2:/RD  ch3:D0(=RxRDYbit)

ステータスレジスタの読取部分で、RxRDY=0;受信データなし、本来はD0=0が読取らなくてはいけないのですが/RDパルスの終縁ギリギリでやっとD0=0が出始めますが実際はこれが読めずに前状態のD0=1をラッチしてしまって受信データありと誤認したのでしょう。

1文字出力のTxEMTは辛うじて読めたようですがやはり/RD幅が規格以下でデータvalid期間が短いのがダメっぽいです。マシンステートの追加挿入を考えてみます