Intel 80286
![]() Intel 80286 (PGA) | |
1982 | |
Intel, IBM, AMD, Harris (インターシル), シーメンス, | |
CPU | 5 MHz から 25 MHz |
FSB | 5 MHz から 25 MHz |
x86 (16ビット) | |
パッケージ | 68ピン PLCC・LCC・PGA |
Intel 80188 | |
Intel 80386 | |
トランジスタ | 134000 |
コプロセッサ | Intel 80287 |
![](https://upload.wikimedia.org/wikipedia/commons/thumb/f/f1/Intel_80286_68pin_plastic_10mhz_2007_03_27.jpg/250px-Intel_80286_68pin_plastic_10mhz_2007_03_27.jpg)
Intel 80286(インテル 80286)はインテルの16ビットマイクロプロセッサ (CPU)。IBMのPC/AT(
概要
[1982
8086とソフトウェアの
インテル
対応 ソフトウェア
[8086や80186に
- PC DOSおよびMS-DOS
- IBMが1984
年 にPC/XTの後継 機種 PC/ATを発表 したとき、8086/8088とリアルモード互換 性 を持 つ80286を採用 した。しかし、プロテクトモードを活 かして設計 されたオペレーティングシステムは一般 向 けに普及 しておらず、80286はもっぱら高速 な8086としてPC-DOS (MS-DOS)上 で利用 されることが多 かった。
- DOS/V
前述 の通 りPC/ATは80286機 であるため、AT互換 機 用 の日本語 OSであるDOS/Vは80286以上 のシステムが前提 となっている。
- Windows 3.x
- Windows 3.0や
英語 版 Windows 3.1において、いずれもスタンダードモードでは、80286のプロテクトモードが活用 された。Windows 3.0の発売 は、IBM PC/ATの発売 から6年 後 の1990年 であった。 日本語 版 Windows 3.1以降 [2][3][4]、およびWindows for Workgroups 3.11以降 [5]は80286には対応 していない。
- OS/2 1.x
- PC DOSおよびMS-DOS
後継 のプロテクトモード用 オペレーティングシステムとしてIBMとマイクロソフトが共同 開発 したが、パソコン用 OSのひとつとしての地位 を獲得 するにとどまった。OS/2 1.0の発売 は、IBM PC/ATの発売 から3年 後 の1987年 であった[6]。 - OS/2 2.0
以降 は80286には対応 していない。
リアルモードへの復帰
[80286で、DOSやBIOSの
なお
リアルモードへ
- IBM PC/AT[7][8]
- 80286を
搭載 したIBM PC/ATではキーボードコントローラのI/Oにリセット機能 が搭載 されていた。これはI/Oポート64hにあり、通例 はFEhを書 き込 みそのbit0を0にすることでリセット動作 となる。これに先立 ち当該 プログラムはリセット後 に処理 を再開 するアドレスCS:IPをBIOS Data Areaの0040:0067hに保存 する。それ以外 のスタックの位置 (SS:SP)などプログラムの動作 継続 に必要 な情報 は当該 プログラム自身 のデータ領域 などに保存 する。次 にリセット後 の動作 を決 めるシャットダウンコードをRTC用 不揮発 性 CMOSメモリのオフセット0FhにI/Oポート70h, 71hを使用 して書 き込 む。5を書 き込 めばリアルモードへの復帰 、0を書 き込 めば通常 の電源 ON、またはリセットスイッチ押下 である。プロテクトモードから戻 るとBIOSはBIOS Data Areaに保存 したアドレスから当該 プログラムの実行 を再開 させる。当該 プログラムはあらかじめ保存 しておいたスタックの位置 などの情報 を戻 す。
- NEC PC-9800シリーズ[9][10][11]
- PC-9800シリーズでは1986
年 に登場 したPC-9801VX[12]に80286とV30の両方 が搭載 され、このとき80286とV30を切 り替 えるためのリセット用 I/Oポートが設 けられている。該当 機 ではI/O 00F0hに0を出力 することでCPUがV30に切 り替 わらずにリセットされるが、これに先立 ちリセット後 に処理 を続行 するか再 起動 するかを事前 に設定 しておく必要 がある。この設定 はI/O 0035hのbit5,7にあり、再 起動 の場合 は両方 のbitを1に、処理 続行 の場合 はbit7を0に設定 する[注 2]。処理 を続行 する場合 は事前 に戻 りアドレスとなるCS:IPをスタックに保存 (PUSH
)したうえで、そのスタックの位置 (SS:SP)をメモリアドレス0000:0404から0407までの4バイトに保存 しておく必要 がある。
HMAの活用
[8086では1MiB(000000H - 0FFFFFH)のメモリ
80286ではこのようなラップアラウンドは
アドレス
HMAは64Kバイト
キャッシュを
なお、80286は16Mバイトの
80286の判別
[80286にはCPUID
PUSHF
/POPF
追加 命令 一覧
[8086から
一般 命令
[80286でIMUL
とPUSH
に
システム命令
[80286で
SGDT, SIDT, SLDT, STR, SMSWは
LGDT … Load Global Descriptor Table Register SGDT … Store Global Descriptor Table Register LIDT … Load Interrupt Descriptor Table Register SIDT … Store Interrupt Descriptor Table Register LLDT … Load Local Descriptor Table Register SLDT … Store Local Descriptor Table Register LAR … Load Access Right LSL … Load Segment Limit ARPL … Adjust Requested Privilege Level VERR … Verify Read Access VERW … Verify Write Access LTR … Load Task Register STR … Store Task Register CLTS … Clear Task Switched Flag LMSW … Load Machine Status Word SMSW … Store Machine Status Word
廃止 された命令
[80286ではPOP CS
非公開 命令
[80286の
既存 命令 の仕様 変更
[80286はリアルモードにおいて8086や80186とPUSH SP
このほか
8086ではFPUWAIT
LOCK
新 しいレジスタ
[システムレジスタ
[GDTR (Global Descriptor Table Regsister)
IDTR (Interrupt Descriptor Table Regsister)
LDTR (Local Descriptor Table Regsister)
TR (Task Register)
フラグレジスタ
[16bitあるフラグレジスタのうち、bit0からbit11までの12ビットは8086と
- IOPL (IO privilege level) フラグ
- bit12・13を
用 いる2ビット分 のフラグで、0から3までのフラグ状態 を持 ち、いわゆるIO特権 レベルを表 す。通常 はPOPF
命令 でなければ変更 できない。 - NT (Nested task) フラグ
- bit14。
裏 のタスクが有効 であることを示 すフラグ。割 り込 みなどで呼 び出 された場合 に1となり、これによりIRET
命令 でのリターン処理 の動作 が変 わる。
なおbit15は
MSW
[80286ではMSW (Machine status word) レジスタがLMSW
、SMSW
という
- PE (Protection enable)
- MSWのbit0。プロテクトモードであることを
表 す。このbitをセットすることでプロテクトモードになる。 - MP (Math present)
- MSWのbit1。FPUが
存在 する場合 にセットされる。 - EM (Emulate math coprocessor)
- MSWのbit2。このビットがセットされているとFPUが
無 い扱 いになる。 - TS (Task switched)
- MSWのbit3。タスク
切 り替 え時 にセットされる。
割 り込 み
[8086では
割 り込 み0:除算 エラー
除算 命令 (DIV, IDIV)で0で割 ろうとした場合 や商 が大 きすぎてレジスタに収 まらない場合 に発生 する。
割 り込 み1:シングルステップ割 り込 み割 り込 み2:NMI(マスク不可能 割 り込 み)割 り込 み3:ブレークポイント割 り込 み割 り込 み4:INTOオーバーフロー割 り込 み5:バウンドチェック
- BOUND
命令 に指定 されたオペランドが、配列 の範囲 外 に出 ていると発生 する。
割 り込 み6:無効 オペコード割 り込 み7:コプロセッサ不在
- タスクスイッチ
後 、または、80287が装着 されていないときに80287の命令 を実行 すると発生 する。
割 り込 み8:ダブルフォルト
例外 を処理 しているときにさらに別 の例外 が発生 し処理 できなくなったときに発生 する。
割 り込 み9:コプロセッサ・セグメント・オーバーラン割 り込 み10:無効 タスク・ステート・セグメント割 り込 み11:セグメント不在
- メモリ
上 に無 いスワップアウトされたセグメントにアクセスした場合 に発生 する。この割 り込 みは80286のプロテクトモードで仮想 記憶 のために使用 される。
割 り込 み12:スタック・フォルト割 り込 み13:一般 保護 例外
- 80286のリアルモードでは、オフセットFFFFにあるワードオペランドをアクセスしたり、オフセットFFFFから
複数 バイトの命令 を実行 しようとすると発生 する。8086ではオフセット0にラップアラウンドし例外 は発生 しない。80286のプロテクトモードでは、データセグメント内 の命令 の実行 、コードセグメント内 のデータの書 き替 え、現在 の特権 レベルより高 い特権 レベルのセグメントへのアクセスなどでも一般 保護 例外 が発生 する。
割 り込 み14 - 15:インテル予約 済 み割 り込 み16:コプロセッサ・エラー
- IBM PC/ATでは80287のERROR#ピンを80286に
直結 せず、割 り込 みコントローラ8259Aに接続 する設計 とした。コプロセッサ(FPU)を内蔵 した80486以降 のCPUではIBM PC/ATとの互換 性 を維持 するためにCPUにFERR#, IGNNE#というピンを追加 したが、CR0レジスタのNEビットを1にすると8259A経由 ではなく本来 の割 り込 み16でコプロセッサのエラーを通知 する[13]。
割 り込 み17 - 31:インテル予約 済 み
ディスクリプターキャッシュ
[80286ではセグメントレジスタには
リアルモードでは、セグメントレジスタの
また、80286は
ディスクリプターキャッシュ | |||
---|---|---|---|
セグメントレジスタ | ベースアドレス(24ビット) | アクセス |
セグメントリミット(16ビット) |
周辺 LSI
[- 80286
用 の数値 演算 コプロセッサ。8086用 のコプロセッサである8087と異 なりI/Oポート (00F8H - 00FDH) を用 いてデータや命令 のやり取 りを行 う。パッケージは40ピンDIPである。
- 82284 クロック
生成 器 - 82288 バスコントローラ
- 82289 バス
調停 器 - 8259A
割 り込 みコントローラ
CPUアクセラレータ
[80286システムはCPUアクセラレータ
- ABM 486GT-Xは
前述 のような486互換 プロセッサを80286ピン互換 のワンチップサイズに封入 したもので、CPUアクセラレータと言 うより80286ピン互換 CPUに近 いものだった。 - CPUアクセラレータ
基板 上 でCyrix Cx486DLCのような外部 32ビットプロセッサを動 かす製品 も存在 した。 - メルコはシステムバスのクロックに
関係 無 く独立 クロック動作 する製品 も出 していた。 最終 的 にメルコやアイ・オ ー・デ ータ機器 から発売 されていたIBM 486SLC2を用 いた80286向 け製品 では最大 4倍 速 (約 50MHz)で動作 した[20]。
数値 演算 プロセッサ多 くの80286用 CPUアクセラレータはその基板 上 に80387のソケットもしくはその互換 チップを直 付 けしており、386/486互換 CPU換 装 時 に80387相当 の数値 演算 機能 が利用 できるようになっていた[21]。- HIMEM.SYSの
問題 - PC-9800シリーズにおいては、80286のシステム[
注 14]とi386以上 のシステム[注 15]ではA20ラインを制御 するI/Oポートが異 なり、前者 にi386以上 のプロセッサを載 せた場合 、そのシステムには後者 にあるI/Oポート00F6hが無 く[11][注 16]、MS-DOS付属 のメモリマネージャ(HIMEM.SYS)がA20ラインを正常 にコントロールできない旨 の警告 を出 す問題 が知 られている。その対策 として、いくつかのCPUアクセラレータではCPUキャッシュドライバとは別 に独自 のメモリマネージャを添付 、もしくは専用 メモリマネージャにCPUキャッシュドライバを統合 していた。 日本語 版 Windows 3.1への対応 上記 の通 り、英語 版 Windows 3.1は80286プロテクトモードをサポートしたが[22]、マイクロソフト版 やNEC版 の日本語 版 Windows 3.1では80286をサポートしなかった[2][3][4]。CPUをi386以上 にアップグレードした場合 でもマザーボードが80286用 であることをWindows 3.1のインストーラが感知 してセットアップを中断 してしまう場合 があり、これを防止 するために80286用 CPUアクセラレータ製品 のいくつかはWindows 3.1をインストールできるようにするためのツールが用意 されていた[23]。- ただし80286システムはCPUを386
以上 に変 えてもメモリまわりに制約 が残 るケースが多 く、快適 にWindowsを利用 できるケースは限 られていた。もともと80286全盛 時代 の機種 にはプロテクトモード用 の1MBを超 えるアドレスのメモリ(プロテクトメモリ)に専用 の高速 スロットが無 いか、あっても増設 できる容量 が少 ないケースがあった。そのうえ本来 のDOS用途 ではプロテクトメモリをEMSに転用 すると80286機 では効率 が悪 く低速 になる[注 17]ことが知 られていた[注 18]。結果 的 に80286機 ではWindows用途 に向 いた専用 プロテクトメモリが普及 せず、DOS用途 のメモリとして汎用 拡張 スロット用 メモリが主 に使 われていた。その中 にはプロテクトメモリに転用 できるものもあったが、プロテクトメモリ用途 としては専用 スロットに増設 するよりも低速 であるため、メモリに負担 をかけるWindows用途 ではそれによる速度 低下 が顕著 に現 れた。 - なおWindows 95や98はOS
自体 が早 い段階 で80286以下 のマザーを感知 して起動 を止 めてしまう仕様 [注 19]のため、事前 にDOSを起動 するなどしてCPU情報 を再 設定 [注 20]したうえで高速 再 起動 ツールなどでその「早 い段階 」をパスできるように工面 するか、もしくはOSの起動 プログラム[注 21]を改造 して機種 判別 ルーチンをつぶさない限 り、たとえCPUを換 えても80286マザー上 でWindows 95を動 かすことはできない。
脚注
[- ^
原文 :iAPX 286 - 80286 CPU family
Each processor family consists of the CPU(e.g., 80286), processor extensions(80287 for the iAPX 286), and bus support circuits, such as the 82284 Clock Generator and 82288 Bus Controller. - ^
通常 この操作 はI/O 0037hのコントロールポートを介 して行 う。I/O 0037hに0Ahを書 き込 めばI/O 0035hのbit5が0に、0Bhを書 き込 めば1になる。同様 に0Eh・0Fhを書 き込 めばI/O 0035hのbit7がそれぞれ0・1に設定 される。 - ^
原文 :If any real-mode program relies on address space wrap-around (e.g. FFF0:0400 = 0000:0300), then external hardware should be used to force the upper 4 addresses to zero during real mode. - ^
厳密 には、8086/80186のフラグレジスタで未 使用 だった予 約 ビットの一部 がV30では8080エミュレーションで使 われるが、x86として動作 している限 りは8086/80186互換 の挙動 となる。 - ^
特 に80386以降 では、条件 ジャンプでnearジャンプ(-32768から+32767までの相対 アドレス指定 )を行 うときのプリフィックスにも使 われるようになった。80286およびそれ以前 の条件 ジャンプ命令 はshortジャンプ(-128から+127までの相対 アドレス指定 )しか使 えない。 - ^ 8086のPUSH SP
命令 でスタックポインタSPを退避 させる場合 、SPから2が減算 された後 のSP値 が記録 される。例 えば、PUSH SPのあとPOP AXを実行 するとAXにはSP-2がロードされる。80286以降 ではPUSH SPの際 に減算 される前 の元 のSP値 を退避 するようになった。この挙動 の違 いはプログラムが8086で実行 されているのか、80286で実行 されているのかを判別 することに使用 できる。 - ^ 80286ではフラグレジスタの
使 われていなかった予 約 ビットのいくつかに新 たな意味 を持 たせており、その値 によって一部 の既存 命令 の挙動 に影響 が出 る。例 えば既存 のPOPF
命令 はプロテクトモードにおいてIO特権 レベルを示 すIOPLフラグが変更 できるようになっており、これによって既存 の命令 のうち特権 レベルに依存 するようになった命令 (I/Oや、割 り込 みフラグの制御 命令 )が影響 を受 ける。また他 のタスクから呼 び出 されたプログラムではそのためのNTフラグが立 っており、IRET
の動作 に影響 する。 - ^ V30ではbit15が「エミュレーションモード・フラグ」に
割 り当 てられており、8080エミュレーション機能 に関係 する。 - ^ PC-9801では
初代 機 から2個 目 の8259Aをカスケード接続 して入力 を15本 に拡張 しており、割 り込 み8から23までの外部 割 り込 みが定義 されていた[17]。 - ^ 80286システムを486
互換 CPUに換 えても起動 時 はCPUキャッシュが有効 になっていない。一般 にCPUはメモリに頻繁 にアクセスしながら動作 するため、CPUキャッシュが無効 でメモリアクセスがまったく高速 化 していない状態 ではCPU内部 倍率 に関係 無 くほとんど処理 速度 は向上 しない。 - ^ EPSON PC-286シリーズの
場合 はロットによってCPUソケット形状 が CLCC(セラミック・リードレス・チップ・キャリア)という特殊 なものが混在 しており、その場合 は半田 ごてを用 いるか、業者 に依頼 してCPUソケットを交換 する必要 があった[19]。 - ^ 8086
世代 のx86CPUはNECのピン互換 CPU V20やV30と交換 することでCPU性能 を向上 できたことが知 られるが、V30用 としては主 に拡張 スロットに増設 するタイプのCPUアクセラレータが製品 が少数 知 られていた程度 で、CPUを置 き換 えるタイプのCPUアクセラレータ製品 が本格 的 に出回 るようになったのは80286以降 のプラットフォームからである。これは8086/V30はアドレスとデータを時分 割 で入出力 していたり、8086/V30用 の周辺 チップとの接続 性 が良 くなかったりなど、それ以降 のCPUと単純 に置 き換 えるには不向 きだったこともある - ^
廉価 版 プロセッサであるi386SXではCPUソケットが省略 されており、基本 的 に基板 直 付 けとなっていた。CPUアクセラレータを動作 させるには外部 からCPUを無効 にできる機能 が必須 であり、これに対応 したi386SXはロットが限 られていた。 - ^ i386DXを
搭載 するPC-98XL2を含 む - ^ PC-98XL2を
除 く - ^ I/Oポート00F2hで
制御 する。このポートはi386以上 のシステムにもある - ^ EMSのページフレームとプロテクトメモリとをCPUがデータをコピーする
方式 のため。この方式 は特別 なハードウェアを必要 とせず「ソフトウェアEMS」と呼 ばれる - ^ なおi386
以上 に換 装 していればDOS用途 であっても専用 プロテクトメモリで「仮想 EMS」を使用 したほうが高速 になる。80286と同 じ方式 を使用 すると遅 くなる - ^ メモリチェック
時 に設定 されるワークエリアの値 で機種 を判別 する。 - ^
例 えば前述 のWindows 3.1をインストールできるようにするためのツールを利用 するなど。 - ^
具体 的 にはIO.SYS。
- ^ a b iAPX 286 Programmer's Reference Manual including the iAPX 286 Numeric Supplement
- ^ a b 『Microsoft Windows Operating System Version 3.1 お
使 いになる前 に』Microsoft Corporation、1993年 、2頁 。KPN890076-9406。 - ^ a b 『
日本語 Microsoft WIndows バージョン 3.1 ライセンス情報 』日本 アイ・ビー・エム、1993年 。66G5342/D42865。 - ^ a b NEC
版 Windows 3.1 - ^ Windows for Workgroups Version History
- ^ OS/2の
歩 みを振 り返 る - ^ Protected Mode Basics by Robert Collins
- ^ トランジスタ
技術 SPECIAL特集 IBM PC & 80286のすべて ISBN 4-7898-3182-5 - ^ “システムポート” (プレーンテキスト). ウェブテクノロジ. 2018
年 1月 6日 閲覧 。 - ^ “BIOSが
使用 するシステム共通 域 ” (プレーンテキスト). ウェブテクノロジ. 2018年 1月 6日 閲覧 。 - ^ a b “CPU,CPU
周辺 が使用 するI/O” (プレーンテキスト). ウェブテクノロジ. 2018年 1月 6日 閲覧 。 - ^ PC-9801VX
- ^ a b c Intel 64 and IA-32 Architectures Software Developer Manuals
- ^ 80386システムプログラム
吉田 俊郎 著 オ ーム社 p104 ISBN 4-274-07544-3 - ^ “インテル(R) プロセッサの
識別 とCPUID命令 ” (PDF). インテル. 2017年 12月5日 閲覧 。 - ^ Jeff Prosise (1990). “Tutor: Distinguishing among CPUs”. PC Mag 9 (13): 426 2016
年 11月20日 閲覧 。. - ^
東工大 電算 機 愛好 会 &小高 輝 真 、「98ハードに強 くなる本 II」 (1988)、pp.25-30。 - ^ Int 50 - IRQ0 relocated by OS/2 v1.x
- ^ a b 「PC-98パワーアップ
道場 」 ソフトバンククリエイティブ ISBN 9784797305777 - ^ PK-X486S50-L
- ^
別売 の数値 演算 コプロセッサ HSC-40 ※このページは一部 ブラウザでは文字 化 けする - ^ Windows 3.1 Hardware Compatibility List - Microsoft
- ^ HRX-C12Qキャッシュコントロールユーティリティ
参考 文献
[- インテルジャパン、CQ
出版 社 1984 80286プログラマーズ・リファレンス・マニュアル ISBN 4-87185-605-4 大貫 広幸 、田中 恵 介 、蓑原 隆 「80286ハンドブック」アスキー出版 局 (1985年 )。ISBN 4871481832成田 佳 應 「80x86/x87 ハンドブック」ナツメ社 (1995年 )。ISBN 9784816318344- Robert L.Hummel
著 槌 田 浩一 訳 80x86/80x87ファミリー・テクニカルハンドブック技術評論社 ISBN 4-87408-588-1