XM6i - クロスプラットフォーム X68000/X68030 エミュレータ

主な特徴

XM6 および XM6 TypeG ベース
X68000 エミュレータの中でも 正確なエミュレーションで知られる XM6 をベースにしています。 XM6 の移植を目指している面もありますし、 逆に XM6 とは敢えて異なるところを目指している面もあります。 また、XM6 から派生しグラフィックとサウンドを中心に熱い開発を行っている XM6 TypeG より主にグラフィック周りをマージさせて頂いています。

クロスプラットフォーム
Win32 以外でも動作させるべく、各種移植を行い、 フレームワークも MFC から wxWidgets に移植中です。 現在、NetBSD/i386、MacOSX、Win32 版があります。 今のところオリジナル版の制約によりリトルエンディアン環境でしか動作しませんが、 IA32 以外でも動作するようになっています。

wxWidgets 採用
フレームワークに wxWidgets を採用しているため、 同一ソースコードから Windows、MacOSX、UNIX 用の実行ファイルを ビルドすることが出来ています。 なお、XM6 をオリジナルと同じ開発環境を用いて再ビルドするのとは異なり、 MFC で書かれている部分をすべて一から書き起こす必要があります。 実は画面が表示されてるだけでも奇跡的です (XM6 VM が MFC 用に用意したビットマップデータを wxWidgets 用に もう一度変換したりしている)。

X68030 対応
CPU コアを Starscream から MUSASHI に変更しています。 MUSASHI コアは本来 68000 から 68EC040 までの命令セットに対応していますが、 XM6i ではこのうち 68000、68EC030 (および 68030) のみサポートしています。 しかし X68030 の新機能についてはまだほとんどサポートしていません。 また、68040 については知見と実機がないためサポート予定はありません。 68060 の実機なら近くにあるにはありますが…。

68030 MMU サポート
MUSASHI コアを改造して 68030 MMU に対応しています。 68030 MMU のアドレス変換部は透過変換(TT)を除いてたぶんフル実装 してあると思います。 透過変換は、アドレス変換を行わない部分を物理アドレス 16MB 単位で 設定する機能ですが、X68030 の物理アドレスは 16MB しかないため、 実質使い道がないためです。 ロングディスクリプタ、リミット、間接ディスクリプタなどの 誰も使いそうにない機能も全て実装してありますが、面倒なので 動作確認はしていません(ぉ。

アドレス変換キャッシュ(ATC)もたぶんフル実装してあると思います。 NetBSD/x68k の locore.s で MMU をイネーブルする前に PFLUSHA を 実行していなかったバグ (NetBSD-current で 2011/11/27 に修正されています) もわざと起こせば実機同様に再現します。

NetBSD/x68k のための対応
NetBSD/x68k 方面で使用されている 2HC フォーマットの フロッピーイメージのサポート、 MB89352 SCSI プロトコルコントローラのエミュレーションの改善、 FDC エミュレーションの改善などを行っています。 Human68k で使用する分にはたぶん影響はありません。