ヴィンテージコンピューティングの専門家が、拡張可能なIntel 286テストスイートをリリース

Table of Contents

ヴィンテージコンピューティングの専門家が、拡張可能なIntel 286テストスイートをリリース

サイクル精度を目標とするビンテージ Intel 互換ハードウェアのエミュレーターである MartyPC の開発者が、Intel のクラシック 80286 プロセッサーおよび互換機用のテスト スイートをリリースしました。これは、1980 年代半ばの物理チップをシングル ステップで実行し、約 150 万の命令を実行することで、生々しい熱意と集中力で作成されたものです。

SvarDOS: DR-DOS の復活

SvarDOS: DR-DOSがオープンソースのオペレーティングシステムとして生まれ変わる

続きを読む

「リアルモードテストスイートには326種類の命令形式が含まれています」と、開発者であり、ビンテージコンピュータ愛好家でもあるダニエル・バルソム氏は、最新のオープンソースリリースについて説明しています。「約150万回の命令実行と、3200万回以上のサイクル状態が記録されています。各テストには、レジスタやメモリを含むCPUの初期状態と最終状態が提供されます。また、各テストには、アドレスバスとデータバスの値、バスコントローラの信号、各種ピンの状態、プロセッサのTステート(個々のサイクル状態)など、各命令のサイクルアクティビティも含まれます。」

デモには『バック・トゥ・ザ・フューチャー』の要素がたくさんあるので、マーティ・マクフライにちなんでエミュレータを「Marty」と名付けました。ちょっと生意気な名前ですが、当時は8088MPHをエミュレートできるエミュレータは86boxしかなかったので、まさか自分が8088MPHをエミュレートできるとは思っていませんでした。

一言で言えば、これは 1980 年代初頭のインテルの研究所以外では世界が見たことのないほどの膨大なデータであり、徹底的な努力とかなりの創意工夫を凝らして苦労して収集されたものです。

それは大変な仕事だ

このテストスイートの目的は、Balsom氏がMartyPCに286のサポートを追加するのを支援することです。1982年に8086の後継機である80186のバージョンとしてリリースされたIntelの286は、マルチタスクに特化したメモリ管理機能と保護機能を備えていました。Rolmの設計者Robert Childsは、Morse & Albert社が1986年に発表した参考文献『The 80286 Architecture』の序文で、「メインフレームレベルの機能と性能を、初めてコスト効率の良い価格でオフィスデスクに直接提供する」と評しました。産業用制御システムや通信システムを念頭に開発されたにもかかわらず、一般的なワークロードにおいて同じクロック速度で2倍の性能向上が期待された286は、IBMのPC/ATとその無数の「IBM互換」クローンのプロセッサとして採用されました。

多くのエミュレータ開発者は、人気のあるソフトウェアタイトルを実行できるほどエミュレーションが完成すれば、それで終わりと考えて満足しがちです。これは、エッジケースに悩まされたくない人にとっては全く理にかなったアプローチです。しかし、Balsomはより高い基準を設けています。ライバルエミュレータPCemと同様に、MartyPCはサイクル精度のエミュレーションを目標としており、それを実現するために、開発者は動作を検証する手段を必要としていました。

「結局はデモシーンにかかっています」とバルサム氏はEl Regとのインタビューで説明した。「PC/XTエミュレータの開発を始めた頃、8088 MPHというデモがありました。エミュレートが難しいことで悪名高かったんです(キャッチフレーズは『あなたのエミュレータを壊します』でした)。このデモには『バック・トゥ・ザ・フューチャー』への言及が多々あったので、マーティ・マクフライにちなんでエミュレータをMartyと名付けました。ちょっと生意気な名前ですが、当時は8088 MPHをエミュレートできるエミュレータは86boxしかなかったので、まさか自分が8088 MPHをエミュレートできるとは思っていませんでした。」

インテルのよりシンプルな8ビット8088をカバーする、さらに拡張性の高いテストスイートのリリースに続く、この新しいテストスイートは、オリジナルのハードウェア(インテル製チップではなく、セカンドソースの「クローン」チップであるHarris N80C286-12)を使用して作成されました。その理由は、インテルがデプレッションロードNMOS(N型金属酸化膜半導体)チップ製造プロセスの使用を避け、クロック速度の影響を受けにくいCMOS(相補型金属酸化膜半導体)プロセスを採用したためです。

「CMOSプロセスCPUは一般的に消費電力が少なく、完全に静的な設計も可能です」とバルサム氏は説明する。「つまり、クロックを非常に低速(あるいは全く)にしても、状態が失われたり誤動作したりすることはありません。そのため、CMOS 80C286はこれらのテストを生成するのに理想的な選択肢でした。たまたま、Harris 80C286 CPUが最も広く入手可能なモデルだったのです。」

Arduino制御

由緒ある Intel 4004 の時代では、CPU を各サイクルごとに手動で実行するのは楽しい夜の過ごし方だったかもしれませんが、何千万もの T 状態をキャプチャする必要がある場合、それは実際には選択肢ではありません。また、フロント パネルのライトからメモリの状態を読み取ることも、魅力的ではありますが、そうではありません。

この目的のために、バルサム氏はArduinoX86を開発しました。Arduino Gigaマイクロコントローラ開発ボードの「シールド」アドオンとして設計されたArduinoX86は、Intel 8086、8088、80186、そして新たに80286のコントローラとして機能します。これにより、PCはマイクロコントローラへのシリアルリンクを介してターゲットCPUを制御し、ステップバイステップで実行しながら、すべての状態を記録し、後で分析できるようになります。さらに重要なのは、キャプチャされたデータを使用して、MartyPCのようなエミュレータのサイクルレベルの精度を検証するためのテストを作成できることです。さらには、「クローン」のセカンドソースチップが期待通りに動作するかどうかを検証することもできます。

その結果、初期のマイクロコンピュータのシングルステップ実行機能の自動化版が実現しました。チップの速度を低下させ、USBシリアルリンクを備えた低価格のマイクロコントローラで各サイクルのプロセッサ状態を一つずつ適切にキャプチャできるレベルまで落とします。キャプチャされたデータは、マシンオペコードオペレーション(MOO)と呼ばれるバイナリ形式に変換されます。Balsomは、MOO用にRustとPythonのコードに加え、ファイルをJSON形式に変換するスクリプトを提供しています。このJSON形式は、Balsomが以前にリリースしたテストスイートとほぼ一致しています。

「私が独自のテストを実行する方法は、エミュレータがサイクル状態を記録し、それをテストで記録されたサイクルと並べて表示することです」とバルサム氏は語る。「これにより、『エミュレータのどこが不正確か?』と推測する必要がなくなり、一度に1つの命令に集中できるようになります。」

真の保護

本稿執筆時点では、バルサムのテスト スイートは 286 の「実際の」モードのみをカバーしていました。これは、8086 の設計者であるスティーブン モースが著書『80286 アーキテクチャ』で「非常に高速な 8086 のような」と表現したモードで、8086 および 8088 コードとの下位互換性を保証するために、チップの最新の機能が無効になっています。

このチップには、真のマルチタスクOS向けに特別に設計されたメモリ管理および保護機能を導入する、第2の仮想モード(プロテクトモード)が搭載されています。これは、より困難な課題となる可能性があります。「プロテクトモードのテストを作成するのは容易ではありません」とバルサム氏は認めています。「メモリをランダム化できないためです(そうでなければ、ほとんどの命令が即座にトリプルフォールトを起こします)。」

  • Windows がバージョン 3 に至った経緯 – 図解で見る歴史
  • OS/2の失敗が現代のソフトウェアにどのような影響を与えたか
  • 16歳の誕生日と失敗:コンピューティング業界のさらなる大失敗
  • マイクロソフトのプレリリース版 OS/2 2.0 を試してみる

しかし、バルサム氏の仕事がこれで終わったわけではない。開発者は既に、プロセッサの3番目の動作モードであるアンリアルモードのテストに取り組んでいる。「アンリアルモードもリアルモードであることに変わりはありません」とバルサム氏は記している。「しかし、LOADALL命令を使うことで、セグメント記述子キャッシュを任意の値に初期化できます。」これにより、286の重要な機能が実現する。286は、ダイナミックメモリコンポーネントの高価格のため、その寿命が尽きるまで商用利用されることはなかったが、最大16MBのRAMをサポートできる。これは、リアルモードで動作する8086/8088や80286の1MBという制限から大きく飛躍したものだ。

そして、もちろん、その成果が出てきます。MartyPC に 286 のサイクル精度が証明できるエミュレーションを追加し、その後すぐにテスト生成と開発のトレッドミルに戻って、1985 年の後継機である 32 ビット 386 でも同じことを行います。

「主にエミュレータメーカーです」とバルサム氏はテストスイートの対象読者について語る。「しかし、古いハードウェアの研究に興味のある方なら、このテストが役に立つかもしれません。高精度の286エミュレータの存在は、レトロソフトウェア開発者にとっても有益です。」

さらに、286をArduinoに接続するだけで、286の動作についていくつか興味深い点が明らかになりました。例えば、割り込み実行時に8086とは異なる順序でデータをプッシュしたり、ジャンプ後にプリフェッチキューを完全に埋めてしまうなどです。以前、このようなことを知っていた人がいたかどうかは分かりません。おそらく昔は知っていたのでしょうが、時とともに知識は失われていくものです。

Balsom の 80286 テスト スイートは、MOO 処理コード、ArduinoX86 CPU コントローラー、および MartyPC 自体の個別のリポジトリとともに、許容 MIT ライセンスの下で GitHub で入手できます。®

Discover More