初期のIBMパーソナルコンピューターとその互換機向けのオープンソースエミュレーター「MartyPC」が、基本的なソフトウェア互換性ではなく、サイクル単位の動作を重視する技術的アプローチで注目を集めている。このプロジェクトはIBM PC、XT、PCjrクラスのマシンに加え、Tandyのシステムにも対応し、Windows、Linux、macOSで動作する。

このエミュレーターは、開発者がRustを学ぶための趣味のプロジェクトとして2022年4月に始まった。同年後半に、Intel 8088をサイクル単位で正確にエミュレートする方向へと開発が進むにつれ、その目標も広がった。現在、MartyPCは主に、プログラムが往年のハードウェアとどのように相互作用するかを細部まで観察したいレトロコンピューティングの開発者向けツールと位置づけられている。

CPUモデルを検証するため、開発者は実物の8088プロセッサーをArduino Megaに接続し、実機とエミュレーターでの命令実行を1サイクルずつ比較した。その後、テストシステムを拡張してプロセッサーのプリフェッチキューも動作させ、タイミングの不一致を洗い出して修正できるようにした。リポジトリでは、8088 V2テストスイートに対するサイクル精度を99.9997%と報告しているが、これは独立したベンチマークの結果ではなく、プロジェクト側が示した数値だ。

ハードウェアの調査はCPU以外にも及んでいる。開発者は、Arduinoを用いた8253タイマーのテスト、オシロスコープによるダイレクトメモリアクセスのタイミング測定、ロジックアナライザーを中心としたバス信号を監視する構成の構築について説明している。こうした取り組みは、初代PC上のソフトウェアが依存し得るコンポーネント間の相互作用を再現することを目的としており、そこには、機能の再現を主眼とするより単純なエミュレーターではモデル化されない可能性のある影響も含まれる。

このプロジェクトは、再現の難度が高いデモシーンのプログラム2本を節目として挙げている。ドキュメントによると、MartyPCは2023年4月に「8088 MPH」を実行できるほどの精度に達し、翌月には「Area 5150」のすべてのエフェクトを再現できる初のPCエミュレーターとなった。こうしたデモが重要なのは、この種のソフトウェアが、通常のアプリケーション利用の範囲を超えて、表示ハードウェアとタイミング動作の限界を意図的に追求するからだ。

MartyPCは充実したデバッグインターフェースも備えている。開発者は、逆アセンブルされた命令、CPUと周辺機器の状態、メモリを調べたり、コードやメモリにブレークポイントを設定したり、命令単位またはサイクル単位のログを作成したりできる。マシンプロファイルは、拡張カードを追加するような感覚でオーバーレイを通じて拡張できる。ビデオカード2枚構成やマルチモニター構成にも対応しており、MDAまたはHerculesアダプターを使った組み合わせも可能で、ビューポートごとに個別のシェーダー設定を適用できる。

その代償となるのが複雑さだ。メンテナーは、他のエミュレーターに比べて設定にとっつきにくさを感じる可能性があり、Windows以外の利用者や最新のコードを使いたい人は、自分でプロジェクトをコンパイルする必要があるかもしれないと述べている。定期的なリリースが提供される一方、自動生成された開発ビルドはGitHub Actionsを通じて配布されている。

したがって、MartyPCの価値は、手間をかけずにゲームを起動できることよりも、初期PCの動作を測定可能にすることにある。8088向けソフトウェア、タイミングに敏感なデモ、周辺機器との相互作用を研究するプログラマーにとって、これはエミュレーションと、内部状態を極めて詳しく観察できる機能を組み合わせた実験室となる。