Copyright(C) 1994,1995,1996,1997 Terumasa KODAKA , Takeshi KONO ■APIC(Advanced Programmable Interrupt Controller) 対象 マルチプロセッサ搭載機 75MHz以上のPentiumプロセッサ搭載機 解説 o APICとは32bitOS用の割り込みコントローラであり、マルチプロセッサ環境で の割り込みを扱う。 o APICは、各CPUに対して1個ずつのローカルユニットと、I/Oからの割り込みを 取りまとめるI/Oユニットで使用される。(図1) o 現在のところ、PC-9800シリーズにはこのAPIC(82489DX)がI/Oユニットとして 搭載された機種はないが、75MHz以上のPentiumプロセッサ(P54C,P55C)では、 ローカルAPICがCPUに内蔵されている。 o APICの機能は、現在のところPC-9800シリーズでは使用されていない。 o CPUがローカルAPICを内蔵しているかどうかは、EAX=00000001hでCPUID命令を 実行したとき、EDXレジスタに得られる値のbit9が1であるかどうかで判別で きる。 u CPUIDが0521h,0522h,0524hではP54Cでは、TR12レジスタのbit4を1にすること によってCPUに内蔵されたローカルAPICをディセーブルにすることができる。 図1: ローカルユニットとI/Oユニット --------------------------------------------------------------------- +----------+ +----------+ +----------+ |プロセッサ| |プロセッサ| |プロセッサ| +----+-+---+ +----+-+---+ +----+-+---+ | | | | | | Register| |PINT Register| |PINT Register| |PINT Access | |PNMI Access | |PNMI Access | |PNMI | | | | | | +-----+-+----+ +-----+-+----+ +-----+-+----+ |APIC 82489DX| |APIC 82489DX| |APIC 82489DX| |ローカル | |ローカル | |ローカル | | ユニット| | ユニット| | ユニット| +------+-----+ +------+-----+ +------+-----+ | | | | | | ICCバス ←-------+----------+-------+------------------+------------→ | |ID=0 +-------+ +------+-----+ |各種I/O+----|APIC 82489DX| +-------+ | I/Oユニット| +------------+ --------------------------------------------------------------------- o APICは、通常メモリマップトI/Oでアクセスされる。ローカルユニットは、 メモリ空間のFEE00000h〜にマッピングされる。I/OユニットはFEC00000h〜 にマッピングされる。I/Oユニットが複数個ある場合は、それぞれのAPICは 表1のようにマッピングされる。 表1: I/Oユニットのマッピングアドレス --------+----------------------- 番号 |アドレス --------+----------------------- #0 |FEC00000h〜 #1 |FEC01000h〜 #2 |FEC02000h〜 : | : : | : --------+----------------------- 表2: I/Oユニットのレジスタ1 ---------------+-----+------------------------------------ アドレス[9:4] | R/W |レジスタ名 ---------------+-----+------------------------------------ 00 0000b |WRITE|I/O Register Select 00 0001b | R/W |I/O Windows Register ---------------+-----+------------------------------------ 表3: I/Oユニットのレジスタ2 ---------------+-----+------------------------------------ アドレス[7:0] | R/W |レジスタ名 ---------------+-----+------------------------------------ 00000000b | R/W |I/O Unit ID Register 00000001b |READ |Version Register 00010000b | R/W |Redirection Table[0](31:0) 00010001b | R/W |Redirection Table[0](63:32) 00010010b | R/W |Redirection Table[1](31:0) 00010011b | R/W |Redirection Table[1](63:32) 00010100b | R/W |Redirection Table[2](31:0) 00010101b | R/W |Redirection Table[2](63:32) 00010110b | R/W |Redirection Table[3](31:0) 00010111b | R/W |Redirection Table[3](63:32) 00011000b | R/W |Redirection Table[4](31:0) 00011001b | R/W |Redirection Table[4](63:32) 00011010b | R/W |Redirection Table[5](31:0) 00011011b | R/W |Redirection Table[5](63:32) 00011100b | R/W |Redirection Table[6](31:0) 00011101b | R/W |Redirection Table[6](63:32) 00011110b | R/W |Redirection Table[7](31:0) 00011111b | R/W |Redirection Table[7](63:32) 00100000b | R/W |Redirection Table[8](31:0) 00100001b | R/W |Redirection Table[8](63:32) 00100010b | R/W |Redirection Table[9](31:0) 00100011b | R/W |Redirection Table[9](63:32) 00100100b | R/W |Redirection Table[10](31:0) 00100101b | R/W |Redirection Table[10](63:32) 00100110b | R/W |Redirection Table[11](31:0) 00100111b | R/W |Redirection Table[11](63:32) 00101000b | R/W |Redirection Table[12](31:0) 00101001b | R/W |Redirection Table[12](63:32) 00101010b | R/W |Redirection Table[13](31:0) 00101011b | R/W |Redirection Table[13](63:32) 00101100b | R/W |Redirection Table[14](31:0) 00101101b | R/W |Redirection Table[14](63:32) 00101110b | R/W |Redirection Table[15](31:0) 00101111b | R/W |Redirection Table[15](63:32) ---------------+-----+------------------------------------ 表4: ローカルユニットのレジスタ ---------------+-----+------------------------------------ アドレス[9:4] | R/W |レジスタ名 ---------------+-----+------------------------------------ 000010b | R/W |Local Unit ID Register 000011b |READ |Version Register 000100b | |Reserved 000101b | |Reserved 000110b | |Reserved 000111b | |Reserved 001000b | R/W |Task Priority Register 001001b | |Reserved 001010b | |Reserved 001011b | R/W |EOI Register 001100b |READ |Remote Register 001101b | R/W |Logical Destination Register 001110b | R/W |Destination Format Register 001111b | R/W |Spurious Vector Register 010000b |READ |ISR(31:0) 010001b |READ |ISR(63:32) 010010b |READ |ISR(95:64) 010011b |READ |ISR(127:96) 010100b |READ |ISR(159:128) 010101b |READ |ISR(191:160) 010110b |READ |ISR(223:192) 010111b |READ |ISR(255:224) 011000b |READ |TMR(31:0) 011001b |READ |TMR(63:32) 011010b |READ |TMR(95:64) 011011b |READ |TMR(127:96) 011100b |READ |TMR(159:128) 011101b |READ |TMR(191:160) 011110b |READ |TMR(223:192) 011111b |READ |TMR(255:224) 100000b |READ |IRR(31:0) 100001b |READ |IRR(63:32) 100010b |READ |IRR(95:64) 100011b |READ |IRR(127:96) 100100b |READ |IRR(159:128) 100101b |READ |IRR(191:160) 100110b |READ |IRR(223:192) 100111b |READ |IRR(255:224) 101000〜101111b| |Reserved 110000b | R/W |Interrupt Command Register(31:0) 110001b | R/W |Interrupt Command Register(63:32) 110010b | R/W |Local Vector Table[Timer] 110011b | |Reserved 110100b | |Reserved 110101b | R/W |Local Vector Table[Local int 0] 110110b | R/W |Local Vector Table[Local int 1] 110111b | |Reserved 111000b | R/W |Initial Count Register 111010b |READ |Current Count Register 111011b | |Reserved 111100b | |Reserved 111101b | |Reserved 111110b | R/W |Divider Confituration Register 111111b | |Reserved ---------------+-----+------------------------------------