インターバルタイマはi8253を使っていますが、改良版のi8254を入手しました。同じCERDIPですが足の生え方がちょっと違います
i8254の改良点はi8253にリードバックコマンドを追加してOUTピンの状態やモード設定レジスタの読み出しをできるようにしたことです。
割とすぐ思いつくことだし、レジスタを1個追加するだけで出来てしまうのにわざわざ型番を+1したというのはi8253の設計がFIX、量産が始まってから、あっ!やっちまった・・なんて状況があったんでしょうか。型番はi8253Aでもいいような気がしますが。
さてリードバックコマンド実行後に読み出せるステータスレジスタはこのようなフォーマットです
D5~D0は初期化時に設定したモードを示すだけなのであまり意味がありません。
最上位ビットD7にはOUTピンの状態が反映されます。
8254のリードバック機能を確かめるためこんなプログラムを動作させてみました
リードバックコマンド0xCEで全てのカウンタのステータスをラッチさせた直後はステータスレジスタが読み取れるはずです
今まで通りのi8253を実装した状態ではリードバックコマンドは無視されるのでその後のレジスタ読み取りは、カウント値のものなので読むたびに違う値が返ってきてしまいます
i8254に差し替えてから同じプログラムを実行させるとこうなります
全てのカウンタは初期化時にモード3にプログラムしているので下位6ビットは常に0x36が返り、最上位ビットが1(0xB6)になったり0(0x36)になっていてちゃんとOUTピンの状態が見えているようです