検索
連載

登場して半世紀、多くの互換品を生んだIntel「80186/80188」マイクロプロセッサ懐古録(10)(2/3 ページ)

1980年代初頭に登場したIntelのマイクロプロセッサ「80186/80168」は、多くの互換CPU/CPU IPを生んだ。発売後、半世紀近くがたった今でも、多くの組み込み機器で動作している驚異的なロングランのプロセッサである。

Share
Tweet
LINE
Hatena

8086/8088のシステムで登場する「8089 IOP」とは?

 余談だが初期の8086/8088のシステムではしばしば8089 IOPが登場する(図5)。名前の通りI/Oのハンドリングをつかさどるチップで、特にMulti-Processor Systemにおける非同期I/Oに要するCPUのOverheadを軽減するのが目的であった(図6)。もっとも、8089は勝手に作業をしてくれる訳ではなく、あくまでもIO Processorという事でプログラミングをする必要があり(このためにASM-89がIntelから提供された)、だったら8086/8088でやっても大差ないということや、IBM-PCが8089を採用しなかった(もともとの回路が8085ベースのIBM System/23 Datamasterのものを流用しており、当時は8089が存在しなかった)ことなどから、採用例は非常に限られたものになってしまった。

Photo05:同じく1979年10月版のThe 8086 Family User's Manualより。最大2つの8089が利用できることになっている。
図5:同じく1979年10月版のThe 8086 Family User's Manualより。最大2つの8089が利用できることになっている。
Photo06:8089のデータシート。複数本のMultibusを搭載するような複雑なシステムでは効果があったのかもしれないが。
図6:8089のデータシート。複数本のMultibusを搭載するような複雑なシステムでは効果があったのかもしれないが。

8086/8088コアに周辺回路を統合

 話を80186に戻す。そんな訳で80186/80188は「基本的に」、8086/8088のコアに周辺回路を統合したものである。80186のブロック図(図7)と8086のブロック図(図8)を比較すると

  • Clock Generatorを内蔵している
  • PIC(Programmable Interrupt Controller)を内蔵している
  • Programmable Timerを内蔵している
  • DMA Controllerを内蔵している
  • Bus Interface Unitに8086のControl&Timing Unitの機能が統合されている

というあたりが主な相違点となる。

Photo07:1983年3月版のAP-186"Introduction to the 80186 Microprocessor"より。古いものだとiAPX-186呼ばわりしていた。
図7:1983年3月版のAP-186"Introduction to the 80186 Microprocessor"より。古いものだとiAPX-186呼ばわりしていた。
Photo08:1990年9月版の8086 Datasheetより。
図8:1990年9月版の8086 Datasheetより。

 当然機能が増えている分ピン数も68pinに増えており、40pin DIPだった8086に対しCLCC/CPGA/PLCCの形で提供となった(図9)。

Photo09:1994年11月版の80186/80188 Datasheetより。当初からこの3種類のパッケージがあった模様。
図9:1994年11月版の80186/80188 Datasheetより。当初からこの3種類のパッケージがあった模様。

 そんな訳で当然8086/8088に対するPlug-in Compatibilityは無いが、そもそも周辺チップを統合している段階で互換性があっても仕方ないのは明白で、これは問題にならない。またClock GeneratorはともかくPICやTimer、DMA Controllerの仕様は微妙に8259Aや8237、8253と異なっており、なのでIBM-PC用のOS(MS-DOSやCP/M-86)が無修正で動作する訳ではない。ただ80186/80188用のMS-DOSやCP/M-86などを作成するのは別に難しくなかったし、実際流通している。iRMXも80186用がIntelから提供された。アプリケーションの方は?というと、システムに関係する部分はそんな訳で当然修正が入るが、プログラムそのものは基本8086/8088とBinary Compatibleである。「基本」と書くのは若干相違点があるからで

  • 即値PUSH:指定された即値をStackにPushする
  • PUSHA/POPA:AX/CX/DX/BX/SP/BP/SI/DIの順で全レジスタを纏めてPush/Popできる。ただしセグメントレジスタ(CS/DS/SS/ES)とIP、Flag、周辺回路のレジスタは対象外
  • 即値による乗算:即値で16bit乗算が可能。珍しく3オペランド命令
  • 即値によるShift/Rotate:Shift/Rotateのbit数を即値で指定できる
  • Block入出力:INS/OUTSという命令が追加された。INSはI/Oポートからメモリへのブロック入力、OUTSはメモリからI/Oポートへのブロック出力
  • BOUND命令:配列の境界チェックを行う
  • ENTER/LEAVE命令:高級言語向けのスタックフレームの構築・解放を行う命令。単にスタックフレームを構築するだけなので、レジスタの退避/復活や実行制御そのものは別途行う必要がある

といった命令が追加されている。逆に既存の8086/8088命令は、おおむねそのまま動作する(*1)と考えて良い。

(*1)厳密には、例えばOpCodeが63H/64H/65H/66H/67H/F1H/FEH XX111XXXB/FFH XX111XXXBの場合には、8086/8088はそれを無視するが、80186では未定義命令としてType 6の割り込みを発生するとか、そういう細かな違いはいくつかある。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る