CPU実験室

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

CRUインターフェース

TMS9995へ周辺I/Oを接続する場合、前項の74VHC574を使ったパラレル出力のようにメモリ空間にマッピングするのが簡単です。
メモリ空間を一部潰してしまいますが80系インターフェースを持つ周辺I/O、8255や8251も容易に接続できると思います。
 
イメージ 1
 
ですがTMS9995にはI/O専用のインターフェースとしてCRU(Communication Register Unit)インターフェースも用意されています。
これは全く触ったことがないところなのですがTMS9995のマニュアルを読み解きながら進めています。
まず基本的にCRUはクロック同期式のシリアルI/Fなのですが、最近のI2CやSPIのようにそれだけで完結せず、別途パラレルのアドレス指定も併用しなければなりません。
自分としての解釈ではターゲットのデバイスに下図のように1ビット幅のレジスタが並んでいるイメージです
 
イメージ 2
 
80系周辺デバイスに8ビット幅のレジスタが例えば4個内蔵されている場合、
このレジスタのアクセスのためには
 データバス:8本
 アドレス指定:2本
 制御線:/WR,/RD,/CS:3本  
の計13本の接続が必要ですが、
一方CRUインターフェースによる接続で同等のビット数(8×4=32ビット)をアクセスするためには
 アドレス線:5本
 制御線:CRUCLK,CRUOUT,CRUIN、/CS:4本 
の計9本で済むことになります
 
つまり、ターゲット側デバイスのピン数を少しでも節約できる、というメリットがあります。あとはビットオリエンテッドなI/Oでは読出し時に不要なビットをマスクしたり、書込み時に書き換えてはいけないビットを保護するといった面倒がなくなります。
またCRUインターフェース空間はメモリ空間とは独立して存在するためメモリがフル実装でもI/Oを配置できるといった利点もあるということになります。
 
しかし実際、CRUで接続されるデバイスは自分の知る限りTMS9901とTMS9902くらいで、TMS99シリーズ自体廃れてしまったので当時の評価もいまいちだったのかもしれません。