PIT 8253/8254 は x86 で広く利用されているタイマ・カウンタ IC です。 8253 のカウントレートは 0 MHz から 5 MHz です。 8254 では Read-Back Command が追加され、カウントレートが 10 MHz 程度まで拡大されました。
AT 互換機には 8254 が 1 つ搭載されており、1.19318 MHz のクロックが与えられています。 PC-9801 には 8253 が 1 つ搭載されており、2.4576 MHz か 1.9968 MHz のクロックが与えられています。
8254 は内部に 16 bit なカウンタを 3 つ持っており、CLK (クロック)、GATE (ゲート)、OUT (出力) のピンがカウンタ毎にあります。 それぞれに外部からのクロックが与えられ (それでも大抵は同一のクロックですが)、それぞれが別のモードで駆動することができます。 カウントは原則としてデクレメントで行われ、カウント値が 0 になった瞬間に設定値が再ロードされます (値 0 が読み出されることはありません)。 カウンタモードにはバイナリカウントモードと BCD カウントモードがありますが、BCD カウントモードは省略されていることがあります。 8254 では、その瞬間のカウント値を読み取ることができますが、設定値そのものを読み取る方法はありません。
動作モード
8253 と 8254 の動作モードは次のとおりです:
モード | 動作 |
---|---|
モード 0: カウント終了時に割り込み | カウントが終了したら信号 High を出力する |
モード 1: プログラマブルワンショット | 指定した長さのワンショットパルス信号 Low を出力する |
モード 2: レートジェネレータ | 入力クロックを n 分周する |
モード 3: 方形波レートジェネレータ | 入力クロックを Duty 比 1:1 で n 分周する |
モード 4: ソフトウェアトリガストローブ | 指定したカウントが終了するとストローブパルスを出力する |
モード 5: ハードウェアトリガストローブ | 外部トリガ入力によりカウントを開始し、カウントが終了するとストローブパルスを出力する |
I/O ポート
AT 互換機
I/O Addr. | bit | R/W | 備考 |
---|---|---|---|
0x0040 | 8 | R/W | カウンタ 0 (IRQ0 用) DOS ではモード 2 でカウント 65536 が設定されている |
0x0041 | 8 | R/W | カウンタ 1 (メモリリフレッシュ用) メモリやチップセット等によるが、通常は モード 2 で 0x18 が指定されている |
0x0042 | 8 | R/W | カウンタ 2 (BEEP 用) 通常はモード 3 |
0x0043 | 8 | W | コントロールレジスタ |
0x0061 | 8 | R | システムポート |
0x0061 | 8 | W | システムポート |
0x0043:W コントロールレジスタの値
bit | 値 |
---|---|
0 | カウントモード 0: バイナリ, 1: BCD |
1–3 | カウントモード (上の表を参照) 000, 001, x10, x11, 100, 101 |
4, 5 | カウンタアクセスモード 11: 16 bit リードロード, 10: 上位 8 bit リードロード, 01: 下位 8 bit リードロード, 00: カウント値ラッチ |
6, 7 | カウントチャネル指定 00: カウンタ 0, 01: カウンタ 1, 10: カウンタ 2, 11: リードバックコマンド |
0x0043 で 16 bit リードロードを指定した場合、0x0040–0x0042 には下位 8 bit、上位 8 bit の順に書き込みます。
0x0061:R システムポートの値
bit | 値 |
---|---|
0 | カウンタ 2 の GATE ピンの状態 |
1 | スピーカイネーブルピンの状態 (これとカウンタ 2 の出力の AND がスピーカに接続される) |
2 | Write したときの bit 2 の値 |
3 | Write したときの bit 3 の値 |
4 | メモリリフレッシュが行われるたびに値が反転 |
5 | カウンタ 2 の出力ピンの状態 |
6 | ISA の IOCHK 信号が assert されて NMI が発生すると 1 |
7 | メモリパリティエラーが発生すると 1 |
0x0061:W システムポートの値
bit | 値 |
---|---|
0 | カウンタ 2 の GATE ピンへの値 |
1 | スピーカイネーブルピンへの値 (1 で ON) |
2 | 1 にするとメモリパリティエラーを検出したときに NMI が発生 |
3 | 1 にすると ISA の IOCHK 信号で NMI が発生 |
4–7 | 予約 (0 を推奨) |
PC-9801
IO アドレス | bit | R/W | 備考 |
---|---|---|---|
0x0071 | 8 | R/W | カウンタ 0 (IRQ0 用) モード 3 で利用 |
0x0073 | 8 | R/W | カウンタ 1 (メモリリフレッシュ用もしくは BEEP 用)、モード 3 で利用 BEEP の音程が変わらないもの (元祖, E, F, M) はメモリリフレッシュ VF, VM, XL 以降は BEEP |
0x0075 | 8 | R/W | カウンタ 2 (BEEP 用) モード 3 で利用 |
0x0077 | 8 | W | コントロールレジスタ 0x3FDF に書き込んでも同じ |
0x3FDF | 8 | W | コントロールレジスタ 0x0077 に書き込んても同じ |
0x3FDB | 8 | R/W | カウンタ 1 (BEEP 用)、モード 3 で利用 多くの機種のノーマルモードではこちら |