Mac 68K
エミュレータは、
PowerPCプロセッサを搭載したMacintoshにおいて、
Classic Mac OSの全バージョンに組み込まれている
ソフトウェアエミュレータです。この
エミュレータの主な機能は、以前の68Kプロセッサ用に開発されたプログラムやシステムコードを、ユーザーや
プログラマにシームレスに実行できることにあります。その結果、Mac OSは初めて二種類の
ハードウェアアーキテクチャに対応した
オペレーティングシステムとしての成功を収めました。
起源
この
エミュレータの初版は、Gary Davidianによって開発されました。元々は
モトローラ88000CPU向けに設計されたもので、
Appleの
RISCプラットフォーム向けの初期試作として作成されたものの、実用化には至りませんでした。その後、エリック・トラウトが動的再コンパイル(DRE)を用いた新たなバージョンの開発を行い、これが大きな進展として評価されました。トラウトはConnectixで成功を収めた他のエミュレーションプロジェクトにも関わりました。
実装
Mac 68K
エミュレータは、全てのバージョンにおいて68020/68030の例外スタックフレームを含む68EC040命令セットのサブセットをエミュレートしています。
Appleの開発者ドキュメントによると、この
エミュレータはMacintosh Centris 610を模した動作環境を提供するとしています。初期のバージョンでは、すべての命令が逐一デコードされ、
PowerPCの同等命令が実行されていましたが、後期のPCI
Power MacではDRE技術を取り入れることでパフォーマンスを向上させました。
DREは、再利用されるコードを事前に
PowerPCネイティブの命令にコンパイルし、キャッシュすることで実現されています。この仕組により、
エミュレータが同じ680x0コードを認識した際には、事前にキャッシュした
PowerPCのコードを実行するだけで済むため、コンパイル処理を省略することができました。この方式により、68x0の実機よりも速く命令を実行することが可能になり、シンプルながら印象的な成果を達成しました。
その成功の要因の一つは、
Classic Mac OSのAPIが680x0プロセッサのトラップとして実装されていたことです。このため、APIの呼び出しは680x0におけるエラーと同じ方法で処理され、
エミュレータがこれをネイティブ
PowerPCコードに置き換えたことで、アプリケーションはより高速に処理されました。このアプローチは、
AppleがOSを
PowerPCに移行する際にも役立ちました。
プログラマの観点からは、
PowerPCへの移行は驚くほどスムーズでした。これは、エミュレーションの開始や終了が自動化されていたためです。また、Universal Procedure Pointer(UPP)という新しいポインタが使用されており、68Kコードから見れば通常のポインタのように振る舞い、実際には追加のデータ構造が続いています。これにより、
PowerPCのコード側では、UPPを用いてエミュレーションの開始や終了を行うことが可能になります。
さらに、Mac OSのシステムライブラリには、ネイティブコードと68K用コードの両方を透明に呼び出すためのスタブが搭載されており、開発者はデュアルアーキテクチャに対して最小限の労力で対応できたため、アプリケーションやOSに680x0コードと
PowerPCコードの両方を混ぜることも容易でした。
関連項目
- - ナノカーネル
- - Alpha Microsystems
- - Classic(Max OS Xの仮想環境)
- - Rosetta(PowerPC命令をx86に変換)
このように、Mac 68K
エミュレータは、
Appleの
オペレーティングシステムに重要な役割を果たし、技術的な進歩を促進したのです。