2017-01-11 14:00 — asano
カテゴリー:
今ではPCのCPUに浮動小数点プロセッサを内蔵しているのは当たり前ですが、以前は必要な人のみが追加する(かなり高価な)オプションでした。
これはIntelのC8231A、8080時代の浮動小数点プロセッサです。CPUの命令を拡張するのではなくI/Oデバイスとして接続して値のやり取りをするタイプです。
開発したのはIntelではなくAMDでAm9511というもの、これはそのセカンドソースです。
裏側にもマーキングがあります。
C8231A(Am9511A)は16/32ビットの整数と32ビットの浮動小数点数をサポートし、加減乗除・平方根・三角関数・ログ等の演算が可能でした。IEEE754制定前の開発なので互換性はありません。
AMDからは64ビット浮動小数点に対応する代わりに超越関数をサポートしないAm9512というデバイスもありました。Intelがこちらのセカンドソーサになっていたのかはわかりません。
IntelのD80287-6、80286用のもので接続すると命令が拡張されます。
私が浮動小数点プロセッサの存在を初めて知ったのはPC-9801のオプションとしてです。確かPC-9806だったか、8087のICそのもので自分でソケットに実装する必要がありました。5万円以上する高価なもので、よく雑誌の読者コーナーとかに「挿す時に足を折るんじゃないかとヒヤヒヤした」話が載っていたものです。折っちゃった話もあったかもしれません。
8086/8088には8087、80286にはこの80287、80386には80387 (80386SXには80387SX)とCPUの進歩とともに代替わりしました。80486では浮動小数点ユニット(FPU)を内蔵した80486DXが現れましたが、非内蔵の80486SXも廉価版として存在してオプション用の80487も存在します。
PentiumからはすべてFPU内蔵となったので、専用の浮動小数点プロセッサというものは存在しません。
ちなみに80387/80387SXからIEEE754に完全互換となりました。
以前にも紹介したMotorolaのMC68881RC16B、MC68020用に用意されたものです。MPUとのやり取りは特殊なI/O (特殊と言ってもアドレス空間が別になっているだけ)なので、他のプロセッサに接続することもできます。実際、MC68kボードではMC68000やMC68010に接続しています。これらのプロセッサは上記の「特殊なI/O」はサポートしていませんので通常のアドレス空間に配置する必要がありますし、命令も拡張されません。不正命令のエクセプションでエミュレートすれば命令の拡張もできるかもしれませんが。
もちろんMC68020ならそのままで命令が拡張されます。
その後改良版のMC68882が用意されました。MC68040ではFPUが内蔵されたので、Motorola系ではMC68882が最後ですね。
このMC68881は登場が遅かったためか最初からIEEE754互換です。
これはSparcプロセッサ用のWeitek 3170です。以前SPARC CPU-1E/4で紹介したものです。
このWeitekはSparc以外にもIntel 80286,80386用やMotorola MC68000用などを用意していました。
コメントを追加