NetBSD が i486SX プロセッサ向けの FPU エミュレーションを復活させ、レガシーハードウェアに新たな命を吹き込む

BigGo Editorial Team
NetBSD が i486SX プロセッサ向けの FPU エミュレーションを復活させ、レガシーハードウェアに新たな命を吹き込む

レガシーハードウェア向けのソフトウェアサポートが減少し続ける時代において、数十年前のコンピューティングハードウェアに新たな命を吹き込む注目すべきプロジェクトが登場しました。ある開発者が NetBSD 10.x 以降のバージョンで i486SX プロセッサ向けの浮動小数点ユニット(FPU)エミュレーションサポートを復活させることに成功し、ハードウェア浮動小数点機能を持たないこれらのビンテージ CPU で最新のオペレーティングシステム機能を実現しました。

i486SX の歴史と FPU エミュレーション

i486SX は 1990 年代初頭に発売された Intel の 486 プロセッサラインの廉価版で、浮動小数点ユニットが人為的に無効化されていました。あるコメンターが指摘したように、発売当時は「欠陥品」と広く見なされていました。FPU がなければ、これらのプロセッサは科学計算や特定のグラフィック操作など多くのアプリケーションに不可欠な浮動小数点計算をネイティブに処理できませんでした。

このリバイバルプロジェクトでは、NetBSD カーネルに MATH_EMULATE オプションを再導入し、オペレーティングシステムが浮動小数点命令をトラップしてソフトウェアでエミュレートできるようにしています。このアプローチにより、浮動小数点操作を使用する変更されていないバイナリが、特別なコンパイルやソフトフロートライブラリとのリンクを必要とせずに i486SX システムで実行できるようになります。

「これは Pentium プロセッサが登場する前は非常に一般的でした。多くの(ほとんどの?)コンパイラツールチェーンにはソフトウェア FPU エミュレータが含まれていました。とても素晴らしいプロジェクトです!」

i486SX を超えた幅広い応用

コミュニティでの議論から、この取り組みは単にビンテージの Intel ハードウェアを超えた意味を持つことが明らかになっています。あるコメンターが指摘したように、組み込みシステム向けの多くの代替 x86 SoC には FPU がなく、オリジナルの Vortex86 もその一つです。これは、このプロジェクトが当初考えられていたよりも幅広いハードウェアに利益をもたらす可能性があることを示唆しています。

また、この開発により NetBSD 10.x が MiSTer プロジェクトの ao486 コアなどの x86 プロセッサの FPGA 実装で実行できるようになるかどうかについても関心が寄せられています。あるコミュニティメンバーによる初期テストは失敗しましたが、レトロコンピューティング愛好家にとっては依然として興味深い可能性が残されています。

技術的実装とその起源

興味深いことに、このプロジェクトには歴史的な背景を持つコードが組み込まれています。コア FPU エミュレーションコードは Linux の作成者である Linus Torvalds に遡り、1991 年の著作権表示があり、最終的には 386BSD に由来しています。この歴史的なつながりは、初期の Linux コードと BSD ライセンスのプロジェクト間のライセンス互換性に関する副次的な議論を引き起こしました。

この実装は、基本的な算術演算から対数などのより複雑な関数まで、幅広い浮動小数点演算を処理します。ただし、一部の操作は実装されていないか、特に対数関数の精度に関して既知の問題があります。

主要なFPUエミュレーション命令カテゴリー

  • 制御と初期化: FPUを初期化するための fninit などの命令
  • FPUスタックへのロード: fldfldtfildsfildl などの値をロードするための命令
  • FPUスタックからのストア: fstpsfstpt などの値を保存するための命令
  • 算術演算: faddfsubfmulfdiv などの基本的な演算
  • 比較: fcomfucomftst などの命令
  • スタック操作: fxchfchsfabsfrndint などの操作
  • 対数/特殊数学: f2xm1 などの一部の演算は実装済み、fyl2x などは開発中

注: 一部の複雑な演算は未実装であるか、精度に問題があります。

Linux カーネル開発との対比

このプロジェクトのタイミングは、Linux カーネルコミュニティでの最近の動向を考えると特に注目に値します。このプロジェクトが取り上げられる数日前に、FPU を完全に欠いた x86 CPU 向けの Linux カーネルサポートを削除するパッチが提案されました。NetBSD と Linux の間のこのアプローチの違いは、これらのオペレーティングシステム間のハードウェアサポートに対する異なる哲学を浮き彫りにしており、NetBSD は多様なレガシーハードウェアプラットフォームをサポートする評判を維持しています。

現代のコンピューティングはこれらのビンテージプロセッサから大きく進化していますが、このようなプロジェクトは、レガシーハードウェアを最新のソフトウェアで機能させることへの持続的な関心を示しています。レトロコンピューティング愛好家、教育目的、または FPU のない組み込み x86 プロセッサを使用する特殊な産業アプリケーションにとって、NetBSD における浮動小数点エミュレーションの復活は、コンピューティングエコシステムへの貴重な貢献を表しています。

参考: FPU Emulation Revival for i486SX on NetBSD