Intel 80286

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
80286
KL Intel i286.jpg
Intel 286 (PGA)
生産時期 1982年から
生産者 インテル
CPU周波数 6 MHz から 25 MHz
命令セット x86 (16ビット)
パッケージ 68ピン PLCC・LCC・PGA
テンプレートを表示
Intel 80286 (PLCC)

Intel 80286(いんてる はちまるにいはちろく)はインテル16ビットマイクロプロセッサ (CPU)。IBMPC/ATおよびその互換機によって広く普及した、DOS時代の代表的なパーソナルコンピュータ (PC) 用プロセッサであった。

概要[編集]

1982年2月1日に発表、1984年から6MHz版と8MHz版が出荷された。134,000個のトランジスタを集積した1.5μmのNMOSプロセス(インテルの呼称だとHMOS-III)で製造され、性能を大幅に増加させるパイプラインを構成する4つの独立したユニット(アドレスユニット、バスユニット、命令ユニットと実行ユニット)を持っていた[1]。クロック周波数は6、8、10、12MHz があった。パッケージには68ピンPLCC、LCC、PGAがあった。

8086ソフトウェアの上位互換性を持ち、より高速に命令実行可能(同クロック8086比で約2.5倍)。また、物理メモリ空間が16MBに拡張され、1GBの仮想記憶マルチタスク処理に対応している。 また、インテルはこのモデルまではセカンドソース推進戦略を採用したため、AMD富士通シーメンス、ハリスからもセカンドソース品が供給された。特にAMDとハリスは、ライセンスが受けられない80386に対抗するため、16、20MHz、ハリスは25MHz、といった、より高クロックの80286を市場に投入した。後述するようにDOSで動作させる限り、同一クロックの80386よりも高い実行速度が得られたからである。

時折「正式名称はiAPX286である」という解説をなされることもあるが、これは誤解である。CPUチップ本体である80286は単体でシステムを構成することができず、80284クロック生成器や80288バスコントローラと組み合わせなければメモリやI/Oをつなぐこともままならない。iAPX286とはこれら周辺チップを包括した「Microcomputer System」に対して与えられた名称であり、チップ単体の正式な名称はやはり80286である。

対応ソフトウェア[編集]

i8086i80186に対する上位互換性を持つリアルモードに加えて、プロセスやメモリを保護するプロテクトモードを追加し、これをサポートする命令が追加された。また、マルチタスクオペレーティングシステムを実装する際に必要な仕組みや命令群が拡張され、その後の32ビットCPUへ繋がる基礎ができあがった。4階層の特権レベル、仮想記憶機能、メモリ保護機能、TSS(Task State Segment)を使用したタスクスイッチ機能などを持つ。インテル自身が用意した専用のリアルタイムOS iRMX286はプロテクトモードで動作しており、開発用のプログラミング言語 PL/M286もプロテクトモードの実行ファイルを生成できた。またマイクロソフトからは80286上で動作するXENIXが提供されていた。

インテル自身は一般用途向けの高機能プロセッサとしてはiAPX432をあてる目論見であった。一方、x86ファミリーに連なる80286は工業/制御用のコントローラとして位置づけており、超高信頼性が要求される用途、すなわち航空宇宙や原子力産業への採用を考慮して設計された。たとえプログラムにバグがあっても暴走せず、バグを検出して動作を停止する煩雑なほどのメモリアクセス制御機構も、プロテクトモードからリアルモードに戻れない仕様も、すべて信頼性第一という設計方針に基づいたものであり、インテル純正の80286ソフトウェアが工業用に偏っているのもその方針に沿ったものである。

しかし432プロジェクトは遅延し、また何よりIBM PC系パソコンに搭載され既に圧倒的なシェアを築きつつあった8086/8088とソフト互換性がないことから、IBMが1984年に後継機種PC/ATを発表したとき、少なくともリアルモード互換性を持つ80286を採用したのは当然のなりゆきだった。しかし当然のことながらプロテクトモードを活かして制御用として設計されたオペレーティングシステムは一般向けに普及しておらず、80286はもっぱら高速な8086としてPC-DOS (MS-DOS) 上で利用されることが多かった。

HMAの発見[編集]

上記の通りi80286はリアルモードとプロテクトモードを備えており、起動直後やMS-DOSでは基本的にi8086や80186と互換性の高いリアルモードで動作する。

i8086では1MiB(000000H - 0FFFFFH)のメモリ空間を持つが、本来16ビットのレジスタでは64KBまでのアドレス(00000H - 0FFFFH)しか表現できない。そこで16ビットレジスタを2つ用意し、まず1MB中のメモリ空間からアドレスの「原点」を10Hバイト単位で大雑把に指定し、もう1つのレジスタでそこから上位の64KBまでをアクセスできるようにしていた。したがって「原点」を示すセグメントレジスタを最大の0FFFFHに設定すれば、0FFFF0Hからさらに上位の64KBすなわち1MBを超える10FFEFHまでアドレスを表現できることになる。しかしi8086ではアドレス線がA0 - A19の20本しか用意されていないため100000H - 10FFEFHのアドレスにはアクセスできず、桁あふれした部分は000000H - 0FFEFHにアクセスすることになる。

その前提で作られたソフトウェアとの互換性のため、アドレス線を24本持つi80286では(本来の仕様ならば)リアルモードで21本目のアドレス線 (A20) が無効になり強制的に0と認識されているはずだった。しかし特殊な手続きを経ることによりリアルモードのままA20ラインを有効にできる方法が発見された。すなわち前述のアドレス演算の桁あふれを利用してリアルモードのままでも64Kバイト程度の上位メモリを参照することが可能になり、 HMA と呼ばれた。

これは本来はCPU設計上のミスなのだが、メモリ枯渇に苦しむDOSユーザーにわずかな救いとなった。そのためi80386以降のプロセッサでも仕様として受け継がれることになった。

初期のHIMEM.SYSはこのHMAだけを有効にするもので、当初はEMBに対応していなかった。

OS/2の登場と失速[編集]

3年後の1987年にIBMマイクロソフトが共同で開発した80286用オペレーティングシステム (OS) のOS/2 1.0が出荷されたが、主としてビジネスPC向けの製品であることと、特にPC DOSプログラム実行時のフリーメモリの不足と速度低下の著しさから一般にはあまり普及しなかった。

80286を高速版8086として用い、さらに仮想記憶機能を生かすためにはリアル/プロテクトモード間を往復することが必要である。しかし80286にはプロテクトモードからリアルモードへの復帰命令が無く、復帰にはCPUのリセット信号線を有効にするしかなかった。

そのため、IBMを初めとする各PCベンダは苦肉の策として、特定のI/Oポートを叩くことによりCPUのリセットパルスを発生させる回路を組込み、ソフトウェアからハードウェアリセットを行えるようにした。BIOSなどの初期化プログラムの中で通常のハードウェアリセット(電源ONまたはリセットスイッチ押下)と前述のソフトウェアリセットを区別し、初期化方法を切り替えるという処理は無駄時間が多い。結果的に(OS/2に限らず)80286を用いたリアル/プロテクトモード間のスイッチングは非効率的なものとなった。

次世代の80386以降は両モード間を任意に往復できる機能を備えていた。この点と仮想8086モードを欠くこともあり、80286はMicrosoft Windows 3.1日本語版、およびOS/2 2.0以降のPC用OSのサポートから外され、PC用プロセッサ市場から退くこととなった(Windows3.0および英語版3.1のスタンダードモードでは80286をサポートしていた)。

周辺LSI[編集]

  • 80286と協調して働くように準備された数値演算コプロセッサ80287 NPXで、8086用のコプロセッサである8087と異なりI/Oポート (00f8H〜00fdH) を用いてデータや命令のやり取りを行う方式を取ったため、演算速度は概して遅いものであった。こちらのパッケージは40ピンDIPである。
  • 82284 クロック生成器
  • 82288 バスコントローラ
  • 82289 バス調停器
  • μPD71071 DMAコントローラ

CPUアクセラレータ[編集]

80286システムはCPUアクセラレータ製品により、より上位のプロセッサが利用できる場合があった。その際、486相当の製品は起動後にソフトウエアでCPUキャッシュを有効にすることで高速化させる必要があった[2]。80286システムは16ビットバスであるため、外部16ビットであるi386SXにピン互換のCyrix Cx486SLC登場後は、これを用いた80286用のCPUアクセラレータ製品が各社から登場した。特に日本で主流だったPC-9801シリーズおよびEPSON PC-286シリーズでは80286をソケット経由で実装した機種が多く、CPU交換が容易だった。結果的にV30[3]や後のi386SX[4]と比べてCPUのアップグレードパスに恵まれ、様々なバリエーションのCPUアクセラレータ製品を生んだ[5]

  • ABM 486GT-Xは前述のような486互換プロセッサを80286ピン互換のワンチップサイズに封入したもので、CPUアクセラレータと言うより80286ピン互換CPUに近いものだった。
  • CPUアクセラレータ基板上でCyrix Cx486DLCのような外部32ビットプロセッサを動かす製品も存在した。
  • メルコはシステムバスのクロックに関係無く独立クロック動作する製品も出していた。また同社は当時の技術が後のクロックマルチプライヤ技術の元となったとしている[6]
  • 最終的にメルコやアイ・オー・データ機器から発売されていたIBM 486SLC2を用いた80286向け製品では最大4倍速(約50MHz)で動作するまでに至り、特に後者は1999年ごろまでカタログに載る、息の長い製品となった。
数値演算プロセッサ
多くの80286用CPUアクセラレータはその基板上に80387のソケットもしくはその互換チップを直付けしており、386/486互換CPU換装時に80387相当の数値演算機能が利用できるようになっている。なおi386自体は仕様上80287もサポートしており[7]、FPU機能を持たないCPUアクセラレータを載せた場合はマザーボード上の80287ソケットを利用してi386(486互換)CPU + 80287という組み合わせも有り得た。
HIMEM.SYSの問題
80286前提のシステムにi386以上のプロセッサを載せた場合、MS-DOS付属のメモリマネージャ(HIMEM.SYS)がA20ラインを正常にコントロールできない旨の警告を出す問題が知られている。その対策として、いくつかのCPUアクセラレータではCPUキャッシュドライバとは別に独自のメモリマネージャを添付、もしくは専用メモリマネージャにCPUキャッシュドライバを統合していた。しかし当時のHIMEM.SYSは警告を出すだけで動作自体は特に問題が無かったため、メーカーによってはCPUキャッシュドライバだけ用意し、HIMEM.SYSはそのまま使って良いことになっていた。ただし後年の新しいバージョンのHIMEM.SYSではこのエラーを検出すると常駐自体をキャンセルするように仕様が変わっている。
Windowsへの対応
前述の通り日本語版Windows 3.1は80286に対応していない。CPUをi386以上にアップグレードした場合でもマザーボードが80286用であることをインストーラが感知してセットアップを止めてしまうため、80286用CPUアクセラレータ製品のいくつかはWindows 3.1をインストールできるようにするためのツールが用意されていた。
ただし80286システムはCPUを386以上に変えてもメモリまわりに制約が残るケースが多く、快適にWindowsを利用できるケースは限られていた。もともと80286全盛時代の機種にはプロテクトメモリ専用の高速スロットが無いか、あっても増設できる容量が少ないケースがあった。そのうえ本来のDOS用途ではプロテクトメモリをEMSに転用すると80286機では効率が悪く低速になることが知られていた[8]。結果的に80286機ではWindows用途に向いた専用プロテクトメモリが普及せず、DOS用途のメモリとして汎用拡張スロット用メモリが主に使われていた。その中にはプロテクトメモリに転用できるものもあったが、プロテクトメモリ用途としては専用スロットに増設するよりも低速であるため、メモリに負担をかけるWindows用途ではそれによる速度低下が顕著に現れた。
なおWindows 95はOS自体が早い段階で80286以下のマザーを感知して起動を止めてしまう仕様のため、高速再起動ツールなどでその「早い段階」をスキップしない限り、たとえCPUを換えても80286マザー上でWindows 95を動かすことはできない。

その他[編集]

  • 一般には8086と68000がライバルとして比較される事が多いが、OSサポート機能、メモリ空間などのプログラミングモデル、実装されている機能から、80286になって68000と比肩する機能を得たといえる。ただし演算速度については80286が68000のほぼ2倍程度の性能を有している。セガがIBMとの提携で発売したテラドライブというPCでは、この80286と68000の組み合わせで、CPUが2つ搭載されていた。
  • 同クロック、同等構成のPCで、MS-DOSなど16ビットOS、またプログラムを動作させる場合、構造が32ビット化されたことや高機能化のために複雑化した80386よりも、構造がシンプルでオーバーヘッドなどが少なくて済む80286の方が(特に16ビットバスの386SXとの間で)いくらか高速であった。

脚注[編集]

  1. ^ http://en.wikipedia.org/wiki/Intel_80286
  2. ^ 80286システムを486互換CPUに換えても起動時はCPUキャッシュが有効になっていない。一般にCPUはメモリに頻繁にアクセスしながら動作するため、CPUキャッシュが無効でメモリアクセスがまったく高速化していない状態ではCPU内部倍率に関係無くほとんど処理速度は向上しない。
  3. ^ 8086世代のx86CPUはNECのピン互換CPU V20やV30と交換することでCPU性能を向上できたことが知られるが、V30用としては主に拡張スロットに増設するタイプのCPUアクセラレータが製品が少数知られていた程度で、CPUを置き換えるタイプのCPUアクセラレータ製品が本格的に出回るようになったのは80286以降のプラットフォームからである。これは8086/V30はアドレスとデータを時分割で入出力していたり、8086/V30用の周辺チップとの接続性が良くなかったりなど、それ以降のCPUと単純に置き換えるには不向きだったこともある
  4. ^ 廉価版プロセッサであるi386SXではCPUソケットが省略されており、基本的に基板直付けとなっていた。CPUアクセラレータを動作させるには外部からCPUを無効にできる機能が必須であり、これに対応したi386SXはロットが限られていた。
  5. ^ 「PC-98パワーアップ道場」 ソフトバンククリエイティブ ISBN 9784797305777
  6. ^ 例えばHK6-MD550P-NV4”. buffalo. 2010年12月13日閲覧。
  7. ^ 80386ハンドブック 丸善 ISBN 9784621033258
  8. ^ なおi386以上に換装していればDOS用途であっても専用プロテクトメモリで仮想EMSを実現したほうが高速になる。

参考文献[編集]

  • インテルジャパン、CQ出版社 1984 80286プログラマーズ・リファレンス・マニュアル ISBN 4-87185-605-4

関連項目[編集]