ITmedia NEWS > 製品動向 >

PCのスケーラビリティを決定付けた超重要コンポーネント、地味にスゴイ「APIC」の登場“PC”あるいは“Personal Computer”と呼ばれるもの、その変遷を辿る(1/2 ページ)

» 2021年08月13日 16時46分 公開
[大原雄介ITmedia]

 昔ながらのIBM PC、PC/AT互換機からDOS/Vマシン、さらにはArmベースのWindows PC、M1 Mac、そしてラズパイまでがPCと呼ばれている昨今。その源流からたどっていく連載。USB、PCIとようやく現代の人々が知るところまでたどり着いたが、第10回のトピックはかなり地味な、だがスゴイものだ。


 USB、PCIという前回までのトピックと比べると今月の話は猛烈に地味。だが、PCの構造に大きな影響を及ぼしたコンポーネント、「APIC」が主役だ。

 APIC、正式名称は“Advanced Programmable Interrupt Controller”、つまり「進化したプログラム可能な割り込みコントローラー」である。“Advanced”というのは、その元となる、“進化する前の”「PIC」(Programmable Interrupt Controller)があり、それに比べて“進化した”という意味だ。まずはその元となるPICの話をご紹介したい。

 そもそも1970〜1980年代のCPUの場合、チップ1個に全ての機能が搭載されていたわけではなく、複数のチップでCPUを構成する仕組みになっていた。これは単純に、当時の半導体技術ではチップ1個に入りきらない(無理に入れるとダイサイズが巨大になるため、コストがバカ高くなり、しかも生産量が減ってしまう)という事情に起因する。

 Intelが1971年当時に最初に量産を始めたときのウエハーの寸法は50mm(2インチ)。その後次第にウエハーは大型化するが、たしか8080の時点ではまだ100mm(4インチ)に行ってなかった気がする。直径100mmのウエハーとはいえ、当時の製造技術だからウエハー上に欠陥が出まくりで、大きすぎるダイを製造しようとすると「1枚のウエハーからまともな製品が1つも取れなかった」なんてことになりかねなかった。

 CPUの機能を細かく分割し、それぞれ別のチップにして後で基板上で組み合わせるという方策は、当時としては確実かつ合理的な方法だった。

 ちなみに1976年にIntelが発売したSystem 80/10という8080搭載のワンボードマイコンはこんな構造(写真1)である。

photo 写真1:これはIntelの出した“Introducing the SBC 80/10 Single Board Computer”というカタログの表紙である。ちなみにこれにPICは載っていない

 その内部ブロック図がこちら(写真2)だ。

photo 写真2:Intelの“SYSTEM 80/10 MICROCOMPUTER HARDWARE REFERENCE MANUAL”より抜粋。System 80/10の場合、拡張バス全体で共通する1本の割り込みラインがあり、これを使って1種類だけのIRQを利用できた

 搭載されているのは、

  • Intel 8080A(CPU本体)
  • Intel 8224(クロックジェネレーター)
  • Intel 8238(システムコントローラー兼バスドライバ)
  • Intel 8251(USART:汎用シリアル通信コントローラー)
  • Intel 8255(PPI:プログラム可能な周辺機器I/F)

といった辺りで、このボード1枚でCPU+1KB SRAM+4KB EPROM/ROM、それとRS-232CのI/F(インタフェース)とTTY(テレタイプ)I/F、8bitの拡張バス、48本のGPIO(汎用I/Oポート)が実現されていた。

 ちなみに8080の場合、他に、

  • Intel 8257(DMAコントローラー)
  • Intel 8259(プログラマブル割込コントローラー)

というチップがあった。

 System 80/10ではDMAのサポートも、複数ポートの割り込みもなかったからこれで事足りた、という話である。

 ところが初代IBM PC(というか、その元となったSystem/23 Datamaster)では、性能改善のためにDMAを必要としたし、回路も複雑化した結果として多数の割り込みをハンドリングする必要が出たことで、割込コントローラーも必要になった。以前IBM PCの内部ブロック図を示したが、この図で左下に“INTERRUPT CNTRLR”としてIntel 8259Aが搭載されているのが分かる。

 IBM PCでは、

  • NMI:メモリパリティエラー
  • IRQ0:タイマー
  • IRQ1:キーボード
  • IRQ2:予約
  • IRQ3:非同期通信(2nd)、SDLC通信、BSC(Binary Synchronous Communications:当時利用されていたIBM独自のネットワークの一種)(2nd)
  • IRQ4:IRQ3:非同期通信(1st)、SDLC通信、BSC(1st)
  • IRQ5:HDD
  • IRQ6:FDD
  • IRQ7:プリンタ

が定義されている。

 NMIというのはNon Maskable Interrupt(マスク不可割込)という一番高い優先度を持つ割り込みで、メモリのパリティエラーが発生したらその場で処理を中断し、直ちにハングアップさせる(でないと暴走して例えばFDDとかHDDに変なデータを書き込んでしまったりしかねない)ためのものだ。

 IRQ0〜7は、それぞれの優先度をもってシステムに割り込みが入る。例えばIRQ0は、Intel 8253(Programmable Interval Timer)からの割り込みを処理するものだが、そのIntel 8253は1.193182MHz(ブロック図左上にある14.31818MHzのクロック信号を12分の1に分周した信号)を利用して、一定タイミング毎に割り込みを発生させる。

 CPU側はこのIRQ0の割り込みを利用して、例えばDRAMのリフレッシュ、PCスピーカーの駆動、さらにMS-DOSや初期のWindows、最初期のLinuxなどは、時間経過の制御(この割り込みが入ったら、内部で保持している現在時間を更新する)などにも利用していた。

 8080の場合、割り込みが入るとInterrupt Vector(割り込みベクター)と呼ばれるテーブルを参照して、そのテーブルに記載されたアドレスに処理を移すという仕組みになっているのだが、問題は割り込みをハンドリングするピン(INT)が1本しかないので、割り込みが入っても、それが「何の割り込み」なのかを確認する方法がない。

 後継の8085の場合だと、INTR/RST 5.5/RST 6.5/RST 7.5/TRAPの5本のピン(うちTRAPのみはNMI)があり、TRAPを除く4本の割り込みピンを利用することで「これは何の割り込みか」を判断できるのだが、8080の場合は割り込みを掛けられた際に「これは何の割り込みか」を教えてやる必要がある。それを行ってくれるのがIntel 8259というわけだ。

 Intel 8259は周辺機器からの割り込みが入ったら、8080のINTピンに割り込み信号を出すとともに、D0〜D7のデータバス経由で「それは何番の割り込みか」をCPUに通知してくれる。そこでCPUは先の表に出てきたように、「IRQ0ならタイマー処理ルーティンを呼び出す」「IRQ1ならキーボード入力なので、キーボードから文字入力ルーティンを呼び出す」というように処理の使い分けができる。

 さて、Intel 8259はNMIを別にすると8個まで割り込みを管理できる訳だが、周辺機器が増えるとこれでは足りなくなる。そういう場合にどうするかというと、Intel 8259をカスケード接続することで、最大64個まで割り込みを増やせる(写真3)。

photo 写真3:“Intel 8259A PROGRAMMABLE INTERRUPT CONTROLLER Datasheet”より抜粋。この場合、右端のものがMaster、その隣2つがSlaveになる

 写真3の構造の場合、Slave×2で16個、Masterで6つの合計22個まで扱える。最大構成だとMaster+Slave×8で9個のIntel 8259を使う形だ。実際、IBM PC/ATの場合は2つのIntel 8259を組み合わせて15個のIRQを利用可能にしており(写真4)、

  • IRQ0:タイマー割り込み
  • IRQ1:キーボード割り込み
  • IRQ2:Slave PIC用に予約
  • IRQ3:COM Bポート
  • IRQ4:COM Aポート
  • IRQ5:プリンタBポート
  • IRQ6:FDD割り込み
  • IRQ7:プリンタ割込
  • IRQ8:RTC(リアルタイムクロック)
  • IRQ9:未定義(ASPI SCI)
  • IRQ10:未定義
  • IRQ11:未定義
  • IRQ12:PS/2マウス(PS/2で追加)
  • IRQ13:FPU
  • IRQ14:Primary IDE
  • IRQ15:Secondary IDE

にそれぞれ割り当てられていた。

photo 写真4:“IBM PC/AT Technical Reference Manual”より抜粋。赤枠で囲った部分が2つのIntel 8259である。CPUは左上にある
       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.