Copyright(C) 1994,1995,1996,1997 Terumasa KODAKA , Takeshi KONO ■割り込みコントローラ 対象 ノーマル,ハイレゾ チップ 8259A相当品 解説 o PC-9800(PC-98LT・HA,DB-P1を除く)では、割り込みコントローラ(PIC)として 8259A相当品を2個使用している。1個はCPUに対して直接割り込みリクエストを 行うマスタPIC、残りの1個はマスタPICを介して割り込みリクエストを行う スレーブPICとして使用される。 o マスタPICとスレーブPICの接続概念図を示す。 マスタPIC +-----------+ | IR0|←---- IR0(INT 08h) | IR1|←---- IR1(INT 09h) | IR2|←---- IR2(INT 0Ah) CPU←|INT IR3|←---- IR3(INT 0Bh) | IR4|←---- IR4(INT 0Ch) | IR5|←---- IR5(INT 0Dh) | IR6|←---- IR6(INT 0Eh) | IR7|←+ +-----------+ | +-----------------+ | スレーブPIC | +-----------+ | | IR0|←---- IR8 (INT 10h) | | IR1|←---- IR9 (INT 11h) | | IR2|←---- IR10(INT 12h) +--|INT IR3|←---- IR11(INT 13h) | IR4|←---- IR12(INT 14h) | IR5|←---- IR13(INT 15h) | IR6|←---- IR14(INT 16h) | IR7|←---- IR15(INT 17h) +-----------+ u PC-98LT・HA,DB-P1は、V50内蔵ICU(Interrupt Control Unit)を使用し、 スレーブPICは持たない。V50内蔵ICUはμPD71059(8259A)互換。I/Oアドレスは 他機種のマスタPICと同じ。 o NMI(Non Maskable Interrupt)やSMM搭載CPUのSMI(System Management Interrupt)は、割り込みコントローラでは制御できない。 o 割り込みコントローラ関連のI/Oアドレスは以下の通り。 -----------+----+---+------------------------------------------------- I/Oアドレス|幅 |R/W|内容 -----------+----+---+------------------------------------------------- 0000h |BYTE|R/W|割り込みコントローラ(マスタ) 0002h |BYTE|R/W|割り込みコントローラ(マスタ) 0008h |BYTE|R/W|割り込みコントローラ(スレーブ) 000Ah |BYTE|R/W|割り込みコントローラ(スレーブ) 98D2h |BYTE|R/W|割り込みモード設定(bit 7〜0=IR7〜IR0) 98D4h |BYTE|R/W|割り込みモード設定(bit 7〜0=IR15〜IR8) -----------+----+---+------------------------------------------------- 関連 I/O 0050h I/O 0052h I/O FE8Eh■[PC-9801NS/T・NS/R・P・NX/C・NS/A・NL/R,PC-9821Ne] I/O 6B8Eh■[PC-9821Nf・Np・Ns・Ne2・Nd・Nm・Lt・Ld,PC-9801NL/A] I/O 0259h,0A59h - 70〜73h INT 08〜17h I/O 0000h 名前 割り込みコントローラ(マスタ) 対象 全PC-9800シリーズ チップ 8259A相当 機能 表[イニシャライズコマンドワード]参照 解説 o 割り込みコントローラのイニシャライズ、IRR(Interrupt Request Register) とISR(In Service Register)の読み出し、EOI(End Of Interrupt)の送出など に使用する。詳細はデータシート参照。 o PC-9800では、EOI時に「非特殊EOI」を使用する。 mov al,20h out 0000h,al でEOIが発行できる。 関連 I/O 0002h INT 08〜0Fh I/O 0002h 名前 割り込みコントローラ(マスタ) 対象 全PC-9800シリーズ チップ 8259A相当 機能 [READ/WRITE] bit 7: IR7(INT 0Fh) bit 6: IR6(INT 0Eh) bit 5: IR5(INT 0Dh) bit 4: IR4(INT 0Ch) bit 3: IR3(INT 0Bh) bit 2: IR2(INT 0Ah) bit 1: IR1(INT 09h) bit 0: IR0(INT 08h) 1= 割り込み禁止 0= 割り込み許可 解説 o 割り込みコントローラ(マスタ)のIMRレジスタの読み書きを行う。 イニシャライズ時のコマンド(ICW2〜ICW4)書き込みにも使用する。 関連 I/O 0000h INT 08〜0Fh I/O 0008h 名前 割り込みコントローラ(スレーブ) 対象 ノーマル,ハイレゾ チップ 8259A相当 機能 表[イニシャライズコマンドワード]参照 解説 o 割り込みコントローラのイニシャライズ、IRR(Interrupt Request Register) とISR(In Service Register)の読み出し、EOI(End Of Interrupt)の送出など に使用する。詳細はデータシート参照。 o PC-9800では、EOI時に「非特殊EOI」を使用する。 mov al,20h out 0008h,al でEOIが発行できる。なお、スレーブPICでEOI送出後、スレーブPICにサービス 中の割り込みがなくなったときにはマスタPICにもEOIを発行する必要がある。 以下のような処理を行う。 cli mov al,20h ;Send EOI to SLAVE out 0008h,al jmp $+2 ;I/O WAIT mov al,0Bh ;ISR read mode set(slave) out 0008h,al jmp $+2 ;I/O WAIT in al,0008h ;ISR read(slave) cmp al,00h ;slave pic in-service ? jne EoiEnd mov al,20h ;Send EOI to MASTER out 0000h,al EoiEnd: sti 関連 I/O 000Ah INT 10〜17h I/O 000Ah 名前 割り込みコントローラ(スレーブ) 対象 ノーマル,ハイレゾ チップ 8259A相当 機能 [READ/WRITE] bit 7: IR15(INT 17h) bit 6: IR14(INT 16h) bit 5: IR13(INT 15h) bit 4: IR12(INT 14h) bit 3: IR11(INT 13h) bit 2: IR10(INT 12h) bit 1: IR9 (INT 11h) bit 0: IR8 (INT 10h) 1= 割り込み禁止 0= 割り込み許可 解説 o 割り込みコントローラ(スレーブ)のIMRレジスタの読み書きを行う。 イニシャライズ時のコマンド(ICW2〜ICW4)書き込みにも使用する。 関連 I/O 0008h INT 10〜17h 表 イニシャライズコマンドワード 割り込みコントローラは、システム起動時にBIOS(ITF)によって以下のように 初期化される。通常、ユーザプログラムが割り込みコントローラを初期化 しなおす必要はない。 --------+-------------------------------------------------------------- コマンド名 |内容 --------+-------------------------------------------------------------- ICW1 |bit 7〜5: A7〜A5 | * PC-9800では000bに設定(86系CPUモード) |bit 4: 常に1 |bit 3: LTIM | * PC-9800では0に設定(エッジトリガモード) | * PC-H98はレベルトリガモードもサポートしているが、 | 外部回路で処理しているため、PICはエッジトリガに | 設定する。 |bit 2: ADI | * PC-9800では0に設定(86系CPUモード) |bit 1: SNGL | * PC-9800(PC-98LT・HA,DB-P1を除く)では0に設定 | (ノットシングル) | * PC-98LT・HA,DB-P1では1に設定(シングル) |bit 0: IC4 | 0= ICW4を送出しない | 1= ICW4を送出する --------+-------------------------------------------------------------- ICW2 |bit 7〜3: T7〜T3 | * インタラプトベクタアドレスの上位5ビットを設定する | PC-9800のマスタでは00001bを設定(INT 08〜0Fh) | PC-9800のスレーブでは00010bを設定(INT 10〜17h) | (PC-98HA,DB-P1は、V50内蔵ICUに00010bを設定する) |bit 2〜0: A10〜A8 | * PC-9800では000bに設定(86系CPUモード) --------+-------------------------------------------------------------- ICW3 |■マスタPIC |bit 7〜0: S7〜S0 | * PC-9800(PC-98LT・HA,DB-P1を除く)のマスタでは | 10000000bを設定(IR7のみスレーブ入力を持つ)。 |■スレーブPIC |bit 7〜3: 常に0 |bit 2〜0: ID2〜ID0 | * PC-9800のスレーブでは111bに設定(スレーブID) --------+-------------------------------------------------------------- ICW4 |bit 7〜5: 未定義(常に000b) |bit 4: SFNM | 1= スペシャルフリイネスティッドモード | 0= ノットスペシャルフリイネスティッドモード |bit 3: BUF | * PC-9800では1に設定(バッファモード) |bit 2: M/S | * PC-9800のマスタでは1に設定 | * PC-9800のスレーブでは0に設定 |bit 1: AE01 | * PC-9800では0に設定(ノーマルEOI) |bit 0: μPM | * PC-9800では1に設定(86系CPUモード) --------+-------------------------------------------------------------- I/O 98D2h,98D4h 名前 PIC割り込みモード制御 Undocumented 対象 PC-H98 チップ 機能 -----------+----+---+------------------------------------------------- I/Oアドレス|幅 |R/W|内容 -----------+----+---+------------------------------------------------- 98D2h |BYTE|R/W|割り込みモード設定(bit 7〜0=IR7〜IR0) 98D4h |BYTE|R/W|割り込みモード設定(bit 7〜0=IR15〜IR8) -----------+----+---+------------------------------------------------- 1= レベルトリガ 0= エッジトリガ(従来互換) 解説 o PC-H98では、割り込み信号線をレベルトリガに設定することもできる。この ポートで、各割り込み信号線をエッジトリガで使用するか、レベルトリガで 使用するか設定する。 o この設定は、割り込みコントローラの外部回路に対して行われる。PC-9800 では、割り込みコントローラはエッジトリガで使用している。 レベルトリガモードのときは、レベルセンシティブの外部回路が、エッジ トリガの信号を発生して割り込みコントローラに割り込みを掛けるように なる。 関連