iAPX186

non object

8086はパーソナルコンピュータのCPUとして使われましたが、当時の状況だと組込み用途も応用として重要でした。8086に周辺回路やI/Oを追加して、組込みに使いやすくしたCPUが80186です。

80186
左右はLCCパッケージ、俗にいうメンコです。中央はPLCCパッケージ。どちらも大きさは約25 mm角。メーカは左と中央がIntel製で右がAMD製です。LCCパッケージのデバイスは特殊なソケットに入れて使用します。PLCCパッケージはソケットを使用することも可能ですが、直接はんだ付けすることもできます。誤挿入防止のため、一箇所だけ角の切り欠きの形が異なります。左のチップでいえば左上の部分だけ切り欠きの形が他の角と異なっています。

CPU部分にも新命令がありましたが、8086の小改良といった程度です。重要なのは集積されている周辺回路部分で、次のものがあります。

  1. クロックジェネレータ
  2. 割り込みコントローラ
  3. チップセレクトユニット
  4. タイマユニット
  5. DMAユニット

クロックジェネレータは水晶発振子を接続するだけでシステムに必要なクロック信号を発生します。CPUの動作クロックの2倍の水晶発振子を使用します。
割り込みコントローラは、タイマユニットやDMAユニットなどの内部デバイスからの割り込みと、4ないし2本の外部端子からの割り込みを受け付けて、適切なベクタ送出などの割り込み制御を行います。外部に8259Aを接続して、外部割り込み端子を増設することも可能になっています。
チップセレクトユニットはメモリ用6本、I/O用7本のチップセレクト出力を備えており、制限がいろいろとありますがプログラムで割り当てアドレスなどを設定できます。I/OデバイスはI/O空間に割り当てることもできますし、メモリ空間に割り当てることも可能です。また、ウェイトサイクルの挿入もプログラムすることができます。
タイマユニットには3個の16 bitタイマ・カウンタが含まれています。そのうちの2個は入出力端子を備えていて、外部の信号をカウントしたり、外部にパルス出力を行ったりできます。もちろん、割り込み源にもなります。
DMAユニットは2個の独立したコントローラが含まれています。転送アドレスは20 bit指定でき、全メモリ空間の任意の場所でDMAを行えます。転送カウンタは16 bit幅。転送元アドレスと転送先アドレスのインクリメントやデクリメントや不変指定も可能ですし、転送先や転送元がメモリ空間かI/O空間かもプログラマブルで、8080A用のDMACを8086で流用するのと比べるとずいぶんと便利になっています。なお、転送アドレスは20 bitの物理アドレスを直接設定することになっているので、セグメントとオフセットで20 bitアドレスを取り扱っているプログラム側からは、アドレス変換を設定前に済ましておかなくてはなりません。

少なくとも8086で組み込みシステムを作成するより5個くらいはICが減りますかね。タイマやDMACまで使用するシステムだと、うまくすると20個程度のICを節約できることでしょう。

8086に対する8088のように、80186にも外部データバス幅を8 bitにした80188が存在します。組み込み用のプロセッサといっても80186はROMやRWMを必ず外付けにしなければならず、当時はROMや小容量のRWMに主に8 bitデータ幅のメモリが使われていたので、16 bit幅のデータバスをもつプロセッサではROMとRWMがそれぞれ2個単位で付加する必要があります。8 bitデータバス幅の80188なら1個単位で外付けすれば良いので、処理能力が間に合えばコストダウンが可能となります。

80188
LCCパッケージの80188。

そういえば、80186の応用にイーサネットのインターフェースってのがありました。初期の、10 Mbpsの伝送速度のイーサネットが使われていた時代ですが、もちろん、そういうものが実用化されてくれば一部の高性能PCにもイーサネットを接続してLANを実現しようってなってきます。さすがに最初期とは違い、変復調やシリアルパラレル変換くらいはLSI化されてはいますが、でもせいぜいそれくらい。プロトコル処理とか、それ以前にパケットデータをバッファメモリに転送することすら、単体ではできない程度のLSIでした。しかも。その一部の高性能PCってのがクロック周波数20 MHz前後の286とか386をCPUとして採用していたPCだったりします。2020年ごろの低価格PCの数千分の1の能力しかない程度のものです。というわけで、ユーザーとの対話処理を続けながら、その裏でデータ転送やプロトコル処理を行うには残念ながら力不足ですね。そんな時に手頃な組込み用プロセッサとして使えたのが、実はこの80186や80188でした。
10 Mbpsの通信速度に対応するには、当時の8 bitマイクロプロセッサでは能力不足でした。データリンク層やネットワーク層あたりのプロトコル処理まで含めて16 bitプロセッサならなんとかなります。しかも80186にはDMACが入っていて、1 MByte/secくらいの速度のデータ転送を楽に実現できます。当時、これくらいの応用に使われたメモリのサイクルタイムは500 nsくらいでしたから、プログラム転送ではちょっと無理な速度で、DMAを利用しないと間に合わない状況でした。ほら、本当にちょうど良い感じのプロセッサだったのです。
ちなみにインターネットの名前を出さなかったのは、まだ当時、物理インターフェースがイーサネットでも、LANの通信プロトコルはコンピュータメーカごとにバラバラだったからです。末端までIPが普及するのは5 - 10年くらいかかりましたか。それと、LAN処理を別プロセッサに任せたから快適にPCを利用できるかというと、例えば大きめのファイルを転送するだけでハードディスクの読み書きが手一杯になって、アプリケーション動作が引っ掛かるのなんて普通でしたけど。