最終更新:2016/3/20

X68000エミュレータ XM6 TypeG
-an eXcellent eMulator, type 6/G-

はじめに

XM6 TypeGはPI.氏作成のXM6(version 2.06)を改造して既存バグの修正、 エミュレーション精度の向上、グラフィック、サウンド関係の機能強化を行ったものです。いつくつかの拡張ボードも追加サポートしています(ま~きゅり~ゆにっと等)。最近になりXVIやXVI Compact,X68030といったEXPERT以外の機種のエミュレーションが可能になりました。特にX68030モードではMPU換装(MMU付きのMC68030)や040turboや060turboといったMPU拡張ボードを増設した構成ができるようになっています。

機能強化

グラフィック関係

CRTC

時分割処理の精度をラスター単位の処理に加えブロック単位(16ドット)も選択できるようにしました。768x512で256色をサポートするグラフィックローダ等が動作します。これは走査線の中央で256色2面を切り替える処理のためラスター一括で合成するエミュレータでは実現できない機能です。

ラスター割り込みタイミングの変更、グラフィック高速クリアやラスターコピーの動作を修正しました。インタレース処理も仕様上はサポートしていますが再現性に関しては未確認です。

XVI Compact以降(XVI Compact,X68030,X68030 Compact)に追加されたVGA表示用の50MHzOSCを換装するオプションを追加しました。

GVRAM

グラフィック高速クリア処理を修正しました。

SPRITE

BGスクロールの1ラスター遅延やスプライトの3ラスター遅延反映を実装しました。各種シューティングゲームや「ぷよぷよ」などでその効果が分かります。その他にスクロールレジスタ等へのワードアクセスの挙動や未定義ビットの更新を修正しました。未定義ビットは何らかの隠し機能があるかもしれませんが未確認です。

VC

テキストパレットのバイトアクセスの挙動やvr1h,vr2hに対する遅延反映処理を実装してあります。

RENDER

以下に示す特殊モードに対応しました。但し実機調査で判明した分だけであり正しい動作であるかはよく分かりません。かなり特殊な使い方をするアプリでもほとんど問題になることはなくなりました。

①半透明モード
②特殊プライオリティモード
③グラフィックのプレーン別スクロール(32色4面モードなど)
④スプライトコントローラのタイミングレジスタ特殊設定(推奨値以外)
⑤その他、データブック記載以外の使い方

CZ-6XXDエミュレーション

CRTCの各種タイミング設定に対するCZ-6XXDの動作特性を独自に調査して表示上のアスペクト比が実機と同様になるようにしています。またバックポーチやフロントポーチのタイミングもサポートしており特殊な画面演出をしたアプリでもほぼ正常に再現できます。アスペクト比の再現においてはDirectGraphicsを利用してスムースな拡大縮小を行いながらホストPCの負荷を下げています。その他0.5/1.5/1.8/2.0/3.0/4.0倍等の拡大縮小も可能です。

その他次のようなオプション機構があります。
①線形補間のon/off
②15,24,31kHzそれぞれの水平表示位置、水平表示幅調整
③PCの垂直同期周波数でCRTCを駆動しTypeGのVSYNCを同期させる機能
④1024x848等の超高解像度モードにおいてドットバイドット表示する機能

サウンド関係

サウンドエンジン

XM6ではFM音源のエミュレーションに実績あるfmgenを使用しています。加えてTypeGではx68ksound.dll由来のエンジンを内部に組み込んであります。更にx68sound.dllは外部DLL版もサポートしています。実行ファイルと同じフォルダにあれば優先して使用します。その他にROMEOやGIMICを利用した外部FM音源モジュールを利用することができますが作者は実機を持っていないため未確認です。

MercuryUnit

V3,5と満開製作所のMK-MU1Oをサポートします。各種マニュアル、データシート等を参考に実装してあります。一応それなりに再現できているようですが実機と挙動が異なるかもしれません。こちらもGIMICを利用した外部FM音源モジュールを利用することができます。残念ながらMercuryUnitも作者は実機を持っていないため未確認です。
ROMEO/GIMIC利用について
ROMEOはpcidebug.dll、GIMICはc86ctl.dllを必要とします。c86ctl.dllの32及び64ビット版GIMICのHPからダウンロードできます。pcidebug.dllの64ビット版はhttp://pcidebug.yui.ne.jp/から手に入ります。

サウンドシンセサイザ

ADPCM/FM音源、MercuryUnitのPCM/FM音源の動作をグラフィカルに表示できるサウンドシンセサイザ機能を実装しました。オリジナルはXM7のものを参考に実装しました。また内蔵FM音源はシンセサイザ上からチャネル毎にミュートすることが可能です。

機種の追加

EXPERTに加えてXVI,XVI Compact,X68030の各機種のエミュレーション機能を追加しました。さらにX68030モードではMPUの換装や拡張ROMの実装といったオプションを追加しています。これは040turboや060turboを再現するためのものです。

機種毎のSRAM保存

EXPERT,XVI,XVI Compact,X68030のそれぞれに対応したSRAMが保存されます。
機種SRAMファイル名
EXPERTSRAM.DAT
XVISRAMXV.DAT
XVI CompactSRAMCMP.DAT
X68030SRAM030.DAT

動作OS

以下の動作環境で動作します。

対応プロセッサ

x86,x86-64プロセッサで動作します。 MMX拡張セットやCMOV命令は使用していません。

対応OS

WindowsVista以降の32/64ビットモードで動作します。

DLL

ATL/MFC/Visual C++ランタイムライブラリ(UNICODE版)を使います。バージョンの違いによる混乱を避けるために再頒布パッケージ用のDLLを同梱してあります。

ROM

X68000 EXPERTのエミュレーションに必要なファイル。

ファイル名ファイルサイズ内容配置アドレス
IPLROM.DAT131,072 byteIPL,IOCS,ROMデバッガ,ROM OS$FE0000-$FFFFFF
CGROM.DAT786,432 byte英数フォント、漢字フォント$F00000-$FBFFFF
(注)CGROM.DATが見つからない場合は、代替ファイルとしてCGROM.TMPを探します。


SCSIインタフェースを有効にする場合、上記に加えSCSI IOCSのROMデータをファイル化したものが必要です。インタフェースの種類にあわせて、以下のいずれかを使います。
ファイル名ファイルサイズインタフェース種類配置アドレス
SCSIINROM.DAT8192 byte内蔵SCSIインタフェース$FC0000-$FC1FFF
SCSIEXROM.DAT8192 byteSCSIインタフェースボード$EA0000-$EA1FFF
SCSIEXROM.DAT8160 byteSCSIインタフェースボード$EA0020-$EA1FFF
(注)SCSIEXROM.DAT(8160byteタイプ)はWinX68k高速版と互換性があります。

X68000 XVIのエミュレーションに必要なファイル。

ファイル名ファイルサイズ内容配置アドレス
IPLROMXV.DAT131,072 byteIPL,IOCS,ROMデバッガ,ROM OS$FE0000-$FFFFFF
SCSIINROM.DAT8192 byte内蔵SCSIインタフェース$FC0000-$FC1FFF
CGROM.DAT786,432 byte英数フォント、漢字フォント$F00000-$FBFFFF
(注)CGROM.DATが見つからない場合は、代替ファイルとしてCGROM.TMPを探します。

X68000 XVI Compactのエミュレーションに必要なファイル。

ファイル名ファイルサイズ内容配置アドレス
IPLROMCO.DAT131,072 byteIPL,IOCS,ROMデバッガ,ROM OS$FE0000-$FFFFFF
SCSIINROM.DAT8192 byte内蔵SCSIインタフェース$FC0000-$FC1FFF
CGROM.DAT786,432 byte英数フォント、漢字フォント$F00000-$FBFFFF
(注)CGROM.DATが見つからない場合は、代替ファイルとしてCGROM.TMPを探します。

X68030のエミュレーションに必要なファイル。

ファイル名ファイルサイズ内容配置アドレス
IPLROM30.DAT131,072 byteIPL,IOCS,ROMデバッガ,ROM OS$FE0000-$FFFFFF
ROM30.DAT8192 byteSCSI関連,Human2.15,FLOAT2.02,ROMDB2.32$FC0000-$FDFFFF
CGROM30.DAT786,432 byte英数フォント、漢字フォント(6x12フォント含む)$F00000-$FBFFFF
(注)CGROM30.DATが見つからない場合は、代替ファイルとしてCGROM.DAT, CGROM.TMPを探します。

ダウンロード

XM6 TypeG(version 3.30 L35)
XM6g.exeおよびドキュメントと関連するランタイムDLLです。
32ビット版と64ビット版の両方が含まれますのでOSの環境に応じて使い分けてください。
XM6 TypeG version 3.30 L35のダウンロード(9,675,549 bytes)

XM6 TypeG ソースコード
オリジナルのXM6及びその派生版であるXM6 TypeGはオープンソースソフトウェアではありません。TypeGに関してはソースコードは一部の開発協力者の方を除いて非公開となっています。TypeGのソースを活用してX68000の発展に協力いただける方はTwitter上からご連絡下さい。個別にソースコード一式を配布いたします。

hiocs-plus-16.14_TXRASCPYオーバークロック対応版
TypeGは実機のオーバークロック環境での不具合も再現されます。特に発生頻度の高いテキストVRAMのラスターコピー機能に関係する処理を改善したHIOCSを用意しました。必要にHumanのドライバとして組み込んでご利用下さい。
hiocs-plus-16.14_KAI.zip(改造版のアーカイブ)のダウンロード
HIOCSP14_KAI.XDF(XDFにバイナリとソースを格納したもの)のダウンロード

スクリーンショット

オプション画面
このオプション画面を見るだけでどれくらい機能強化されてるか想像つくと思います。開発から10年近くにわたって改善してきた集大成です。
OPTION

半透明演出の技
ファランクスは大好きなゲームの一つですね。この水中を表現する半透明機能は段純な割りに色々な演出をサポートしてくれます。さらにラスター割り込みの正確な再現が難しかった記憶があります。
PHALANX

自由すぎるCRTC
HELLHOUNDはCRTCの柔軟性を活かして様々な変態解像度のテストができるゲームでしたね。実機のCRTで枠から表示位置をmm単位で図って特性分析してました。
HELLHOUND

MMDSPの光るセンス
呪われたクイーンマリー号を聴く。MMDSPもその下で支える音源ドライバ郡、曲自体もスバラシイですね。MDX文化が大きな魅力の一つです。
MMDSP

参考リンク

XM6原作

PC-8801MAエミュレータ XM8
XM6の原作者のPI.さんのサイトです。このページの最後にオリジナルのXM6 2.06のソースコードが公開されています。

XN6派生系

XM6i - クロスプラットフォーム X68000/X68030 エミュレータ
isakiさんのサイトです。XM6及びTypeGをマルチプラットホーム化されています。TypeGの一部の機能はxm6iからフィードバックされたものを利用しています。またTypeGの拡張部分を利用していただいています。
X68000エミュレータXM6 version 2.05改
coさんのページです。X68000エミュレータXM6 version 2.05にWindrvXMや独自の改良を実装されています。TypeGのWindrvXMはこの最新版を反映しています。またTypeGのソースコードの一部を寄贈させていただきました。
XM6 Pro-68k
M.I.J.E.T.さんのページです。海外の方が開発されているものです。XM6ベースにデバッガ機能の強化等を行われています。日本語のページもあります。

オリジナル系

XEiJ (X68000 Emulator in Java) - STUDIO KAMADA
Kamadaさんのページです。Java 言語で記述された X68000 エミュレータです。fputest.x等の実機調査用のツールを数多く公開されています。TypeGの開発で大変お世話になっています。

過去の戦士達

EX68 (X68000 Emulator for Windows95/98/NT/2000)
yamama氏のページ。初期のX68000エミュレータであるEX68を公開されています。
けろぴーのぺぇじだったとこの残骸@新RetroPCサーバー
けんじょさんのページ。X68000エミュレータけろぴー(WinX68k)が公開されていました。このページによれば最終バージョンはうささんのページにあるとこのとです。
うさの倉庫
うささんのページ。ROMEO対応した各種エミュレータを公開されています。WinX68kのバイナリとソースコードも置いてあります。
WinX68k高速版
tamuさんのページ。WinX68kを高速化を中心に改良した高速版を公開しています。

[EOF]