Copyright(C) 1994,1995,1996,1997 Terumasa KODAKA , Takeshi KONO ■タイマ 解説 o PC-9800本体は、8253A相当のプログラマブル・タイマ・カウンタを内蔵 している。タイマBIOS(INT 1Ch)の提供するインターバルタイマのための 割り込みタイミング発生、RS-232Cのボーレートジェネレータなどに 使用している。 u 初期のPC-9800では、ディスクリートの8253Aが使用されていたが、現在は 他のペリフェラル回路とともにASIC内に取り込まれている。そのような 機種では、8253A上位互換のμPD71054相当の機能が使用できる。 u PC-98LT・HA,DB-P1ではV50内蔵TCU(Timer Control Unit)が使用される。V50 内蔵TCUはμPD71054相当。 o 8253Aは、独立に動作する3個のカウンタを内蔵している。各カウンタの 用途は以下の通り。 ------------------+------------+------------+------------ 機種 | カウンタ#0 | カウンタ#1 | カウンタ#2 ------------------+------------+------------+------------ PC-9801初代・E・F・M | インターバルタイマ | メモリリフレッシュ | RS-232C ------------------+------------+------------+------------ PC-98LT・HA | インターバルタイマ | INT 0Ah | RS-232C ------------------+------------+------------+------------ DB-P1 | インターバルタイマ | INT 0Ah | 未使用 ------------------+------------+------------+------------ その他の機種 | インターバルタイマ |BEEP音周波数| RS-232C ------------------+------------+------------+------------ * DB-P1のRS-232CポートはV50HL内蔵SCUを使用しており、PC-98LT・HAとは 互換性がない。 o 各カウンタへの入力クロックは、システムクロック周波数に依存する。 8253Aでは、カウンタ#0〜#2にそれぞれ独立のクロックを入力することが できるが、PC-9800では全て同じ周波数が入力されている。 ----------------+------------------------------ システムクロック|カウンタの入力クロック周波数 ----------------+------------------------------ 5M,10MHz系(*1) |1.9968MHz 8MHz系 (*2) |2.4576MHz ----------------+------------------------------ *1: 0000:0501h bit 7=0のとき *2: 0000:0501h bit 7=1のとき o タイマが使用するI/Oアドレスは以下の通り。 -----------+----+---+------------------------------------------------- I/Oアドレス|幅 |R/W|内容 -----------+----+---+------------------------------------------------- 0071h,3FD9h|BYTE|R/W|カウンタ#0リード/ライト 0073h,3FDBh|BYTE|R/W|カウンタ#1リード/ライト 0075h,3FDDh|BYTE|R/W|カウンタ#2リード/ライト 0077h,3FDFh|BYTE| W |コマンドライト -----------+----+---+------------------------------------------------- * 3FDxhのアドレスは、PC-9801初代・E・F・M,ハイレゾモード,PC-98LT・HA,DB-P1 では使用しない。PC-9801U・VM2以降の機種で、カウンタ#1の用途がビープ音 周波数に変更されたとき設けられたもの。ビープ音周波数を変更するときに は、I/O 3FDBh経由でアクセスするように推奨されている。PC-9801初代・E・ F・Mでメモリリフレッシュ周期が変更されてしまうことを防ぐためである。 I/O 0071h,3FD9h 名前 カウンタ#0リード/ライト チップ 8253A相当 対象 全PC-9800シリーズ 機能 [READ/WRITE] bit 7〜0: カウンタ#0を読み書きする 解説 o カウンタ#0を読み書きする。 o カウンタ#0は、インターバルタイマの外部割り込み(INT 08h)を発生させる ために使用している。BIOSではモード3で使用している。 u PC-9801初代・E・F・M,PC-98LT・HA,DB-P1,ハイレゾモード以外では、 I/O 3FD9hにイメージが出ている。ただし、カウンタ#0にアクセスする場合 には、I/O 0071h経由でアクセスするべきである。 u インターバルタイマ使用時の割り込み発生周波数は以下の通り。 ---------+------ 機種 |周波数 ---------+------ DB-P1以外|100Hz DB-P1 | 50Hz ---------+------ u PC-98LT・HA,DB-P1では、タイマにV50(HL)内蔵TCU(Timer Control Unit)、 割り込みコントローラにV50(HL)内蔵ICU(Interrupt Control Unit)を使用 する。TCU,ICUのI/Oアドレスはノーマルモードと互換。 u PC-98HA,DB-P1の場合、実際に発生する外部割り込みはINT 10h。INT 10h ハンドラ内でINT 08hが実行される。 関連 I/O 0077h I/O 3FD9h■[PC-9801初代・E・F・M,LT・HA,ハイレゾ以外] INT 08h INT 1Ch - Function 02h,03h,04h,05h,06h I/O 0073h,3FDBh 名前 カウンタ#1リード/ライト チップ 8253A相当 対象 全PC-9800シリーズ 機能 [READ/WRITE] bit 7〜0: カウンタ#1を読み書きする 解説 o カウンタ#1を読み書きする。 o PC-9801初代・E・F・Mでは、カウンタ#1をメモリリフレッシュレートの生成に 使用している。設定を変更してはならない。 o PC-9801初代・E・F・M,PC-98LT・HA,DB-P1以外では、内蔵ビープ音の周波数設定に 使用している。デフォルトの周波数は2kHz。モード3で使用している。 u PC-98LT・HA,DB-P1は、INT 0Ah割り込みの発生用に使用している。詳細は、 「UNDOCUMENTED 9801/9821 Vol.1」の「INT 0Ah(外部割り込み…LT・HA)」の 項参照。 o PC-9801初代・E・F・M,PC-98LT・HA,DB-P1,ハイレゾモード以外ではI/O 3FDBhに イメージが出ている。ノーマルモードで内蔵ビープ音の周波数を設定する 場合は、I/O 3FDBhからアクセスすることが推奨されている。 u μPD71054搭載機種では、I/O 0035h bit 3でビープ音をOFFにしているとき には、カウンタ#1への入力クロックが停止するようになっている。ノート機 での低消費電力化のためと考えられる。 関連 I/O 0035h bit 3 I/O 0077h INT 0Ah(外部割り込み…LT・HA)■[PC-98LT・HA,DB-P1] INT 1Ch - Function 06h■ハイレゾ INT 18h - Function 24h■ハイレゾ I/O 0075h,3FDDh 名前 カウンタ#2リード/ライト チップ 8253A相当 対象 全PC-9800シリーズ(DB-P1を除く) 機能 [READ/WRITE] bit 7〜0: カウンタ#2を読み書きする 解説 o カウンタ#2を読み書きする。 o カウンタ#2はRS-232Cのレート生成に使用している。通常、モード3で使用 する。 o 転送速度に対応するカウンタへの設定値は以下の通り。 --------+-----------------+-----------------+----------------- 転送速度| 同 期 式 | 調歩同期式 1/16 | 調歩同期式 1/64 (bps) | 5MHz系| 8MHz系| 5MHz系| 8MHz系| 5MHz系| 8MHz系 --------+--------+--------+--------+--------+--------+-------- 19200 | 128 |使用不可| 8 |使用不可|使用不可|使用不可 9600 | 256 | 208| 16 | 13 |使用不可|使用不可 4800 | 512 | 416| 32 | 26 | 8 |使用不可 2400 | 1024 | 832| 64 | 52 | 16 | 13 1200 | 2048 | 1664| 128 | 104 | 32 | 26 600 | 4096 | 3328| 256 | 208 | 64 | 52 300 | 8192 | 6656| 512 | 416 | 128 | 104 150 | 16384 | 13312| 1024 | 832 | 256 | 208 75 | 32768 | 26624| 2048 | 1664 | 512 | 416 --------+--------+--------+--------+--------+--------+-------- u 19200bps対応機以外では、9600bpsまでが保証された転送速度である。 19200bps対応機かどうかの判別は、F8E8:0002h(ノーマル), FFE8:0002h(ハイレゾ)を参照して行う。 u 実際には、19200bps対応機でなくてもこのI/Oポートを直接操作することに より、9600bps以上の速度で通信することができる。 u PC-9801初代・E・F・M,PC-98LT・HA,DB-P1,ハイレゾモード以外では、 I/O 3FDDhにイメージが出ている。ただし、カウンタ#2にアクセスする場合 には、I/O 0075h経由でアクセスするべきである。 関連 I/O 0434h■[19200bps対応機] I/O 0077h F8E8:0002h bit 2■[ノーマル] FFE8:0002h bit 2■[ハイレゾ] INT 19h - Function 00h(BIOS) I/O 0077h,3FDFh 名前 モード設定 チップ 8253A相当 対象 全PC-9800シリーズ 機能 [READ] なし [WRITE] モード指定 bit 7,6: SC1,SC0 - セレクトカウンタ 11b= マルチプルラッチコマンド■[μPD71054搭載機種のみ] 10b= カウンタ#2 01b= カウンタ#1 00b= カウンタ#0 ■[マルチプルラッチコマンド以外] bit 5,4: RL1,RL0 - リード/ライト 11b= LSB,MSBの順にリード/ライト 10b= MSBのリード/ライト 01b= LSBのリード/ライト 00b= カウントラッチコマンド bit 3〜1: M2〜M0 - モード 101b= モード5(ハードウェアトリガードストローブ) (*) 100b= モード4(ソフトウェアトリガードストローブ) x11b= モード3(方形波ジェネレータ) x10b= モード2(レートジェネレータ) 001b= モード1(ゲート端子リトリガラブル1ショット) (*) 000b= モード0(カウント終了時での割り込み) (*) PC-9800では、8253AのGATE端子が不変(プルアップ状態)のため、 モード1,モード5は有効に利用できない。 bit 0: BCD 1= BCDカウント 0= バイナリカウント ■[マルチプルラッチコマンド時] bit 5: COUNT# 1= カウンタをラッチしない 0= カウンタをラッチする bit 4: STATUS# 1= ステータスをラッチしない 0= ステータスをラッチする bit 3: CNT2 bit 2: CNT1 bit 1: CNT0 1= 選択する 0= 選択しない bit 0: 未使用(常に0) 解説 o タイマのモード設定を行う。 o カウンタ#0〜#2をリード/ライトする前には、あらかじめモード設定を 行っておく必要がある。 u PC-9800では、8253AのGATE端子が不変(プルアップ状態)のため、モード1, モード5は有効に利用できない。 u PC-9801初代・E・F・M,PC-98LT・HA,DB-P1,ハイレゾモード以外では、I/O 3FDFhに イメージが出ている。 u μPD71054搭載機ではマルチプルラッチコマンドが使用できる。ただし、 μPD71054搭載機かどうかを判別する方法は用意されていない。 関連 I/O 0071h I/O 0073h I/O 0075h