CPU実験室

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

シリアルコントローラ

CPU周りが動いたのでいつもの手順でシリアルコントローラのデバッグをやっておきます。NSC800ファミリのNSC858でマルチプレクスバスがそのままつながります

f:id:O3I:20211128081812j:plain

 

モデム制御信号/DSR,/CTS,/DCDは汎用入力として使いDIPスイッチを接続しておきました。

NSC858の内蔵レジスタは以下のように定義しておきます。8ビット空間4xHへのアクセスで16ビット空間4x4xHがイネーブルになりちゃんとNSC858がセレクトされました

f:id:O3I:20211128081841j:plain

 

初期化ルーチンです。シリアルコントローラではi8251は同じレジスタに連続してパラメータを書き込む、Z80SIO、uPD7201はポインタレジスタでコマンドレジスタを指し示す、といった複雑な手順に比べ、NSC858のプログラミングは非常に明快です。独立したレジスタに順不同でセットすればよく825016550系の手続きと同じでした。

f:id:O3I:20211128081855j:plain

ただしすべてのコマンドをベタで書き込んだところ何故かシリアルデータがふん詰まり状態で出ていかないので、試しにリセットコマンドの後にNOPを4つ入れてリカバリタイムを置いたところうまくいきました。

 

あとは1文字入力RX、1文字出力TXルーチンをつくるだけです。これは他のコントローラと同じで受信データあり(RxRDY)、送信バッファエンプティ(TxBE)フラグをチェックしてデータレジスタを読み書きします

f:id:O3I:20211128081906j:plain