------------------------------------------------------------------------------
  XM6 2.05 TypeG(2012/11/16) MAMEコア版

　X68000 EMULATOR XM6 (version 2.05) TypeG
  Unofficial and experimental release By GIMONS

------------------------------------------------------------------------------
□はじめに
　このアーカイブはＰＩ．氏作成のXM6(version 2.05)にグラフィック関連を中心に
　実験的に機能強化した成果物です。実験はGIMONSが勝手＆趣味で行っています。

　オリジナルのXM6の進化のために微力ながらフィードバックすることを目的に実験
　しています。

  このドキュメントはオリジナルのXM6.txtに説明してある内容に対してTypeGで異な
　る場合にのみ記述しています。したがってオリジナルのドキュメントを合わせて
　参照ください。

□動作環境

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

  (1)プロセッサ
     IA-32プロセッサでMMX拡張セットとCMOV命令を備えたものが必要です。

  (2)OS
     WindowsXP以降のWin32系OSで動作すると考えられます。
     64ビット版のOSでもWOW64で動作するでしょう。
　　 日本語OSかつ日本語モードのみサポートします。

　　 作者が動作確認しているのは下記のOSになります。
      WindowsXP Professional 32ビット版
      Windows7 Professional 64ビット版

  (3)DirectX
     DirectX9を使用しています。具体的には、その内部に含まれるコンポーネント
     であるDirectSound(サウンド)、DirectInput(入力デバイス)、DirectGraphics
　　 (グラフィックス)を使っています。

     XP系のOSではMicrosoftからDirectXをダウンロードしてインストールが必要に
     なるでしょう。

□DLLファイル

  外部DLLとしてATL8.0,MFC8.0およびVisual C++ランタイムライブラリ8.0を使います。
  別途配布しているランタイムファイルをダウンロードして、XM6g.exeと同じフォルダ、
  またはWindowsのシステムフォルダに配置してください。
  該当ファイルは以下の３つです。

      ATL80.dll    (ファイルバージョン 8.0.50727.6195以降)
      MFC80.dll    (ファイルバージョン 8.0.50727.6195以降)
      MSVCR80.dll  (ファイルバージョン 8.0.50727.6195以降)

  上記ファイルは次のURL等から手に入るでしょう。

  ①VisualStudio2005 SP1再頒布パッケージ
    http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647

  ②Microsoft Visual C++ 2005 Service Pack 1 再頒布可能パッケージ ATL のセキュリティ更新プログラム 
    http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=766a6af7-ec73-40ff-b072-9112bab119c2

  ③Microsoft Visual C++ 2005 Service Pack 1 再頒布可能パッケージ MFC のセキュリティ更新プログラム 
    http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=ae2e1a40-7b45-4fe9-a20f-2ed2923aca62


□グラフィック関係

　下記のある最終的に表示に関する各コンポーネントを大幅に強化しました。

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

　　インタレースの処理についても考慮していますが再現性は高くありません。

　　その他にラスター割り込みタイミングの変更やグラフィック高速クリアやラスター
　　コピーの動作を修正しました。

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

　SPRITE
    BGに対するスクロールの1ラスター遅延反映を実装しました。
　　スプライトの3ラスター遅延反映を実装しました。

　VC
    テキストパレットのバイトアクセス禁止しました。
　　vr1h,vr2hに対する遅延反映処理を実装しました。
　
  RENDER
    以下に示す特殊モードに対応しました。但し実機調査で判明した分だけであり、
　　正しい動作であるかはよく分かりません。かなり特殊な使い方をするアプリでも
　　ほとんど問題になることはなくなりました。

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

　ドロワー
　　DirectGraphicsを利用してホストPCに負荷をかけることなくスムースな拡大縮小
　　ができるようになりました。

    CRTCの各種タイミング設定に対するCZ-6XXDの動作特性を独自に調査して表示上の
　　アスペクト比が実機と同様になるようにしています。またバックポーチやフロント
　　ポーチのタイミングもサポートしているため特殊な画面演出をしたアプリでも
　　ほぼ正常にエミュレーションできます。

　　その他次のようなオプション機構があります。

　　①線形補間のon/off
　　②15,24,31kHzそれぞれの水平表示位置、水平表示幅調整
　　③PCの垂直同期周波数でCRTCを駆動しTypeGのVSYNCを同期させる機能
　　④1024x848といった超高解像度モードにおいてドットバイドットで表示する機能

□ターボモード

　XM6の「VM全体をノーウェイト動作」をショートカットキーだけでON/OFFする機能
　です。ショートカットキーはALT+F11になります。ただ最近PCでは早すぎるため、
　VMの動作倍率をオプションから設定できるようにしています。

□エコモード

　MPUやVMのノーウェイト動作は非常に便利ですがMPUのSTOP命令を利用して割り込み
　トリガで待つようなOS（MPL OSやNetBSD等）では、コマンドプロンプトの待ち状態
　でもホストPCのCPUを使い続けます。そこでCPUがHALT状態にある場合には上記の
　MPU,VMのノーウェイト動作やターボモード動作を一時的にオフにしてPCの負荷を
　下げます。

□ジョイスティック

　①ジョイスティックエミュレーション
　　いわゆるJoyKeyという機能でキーボードの方向キー（上下左右）でスティックの
　　方向、Z,X,A,Sでボタンの押下状態を再現します。

　  [ツール]→[JoyKeyモード] でエミュレーションのON/OFFが可能です。

　　但し[オプション]→[ジョイスティック]で割り当てデバイスに「JoyKey」を選択
　　して、どのデバイスに対してJoyKeyを有効にするか選択しておいてください。

　　またエミュレーションが有効な間はキーボードの上下左右、Z,X,A,Sの各キー入力
　　を無視します。

　②デバイスの割り当て拡張
    通常デバイスの各ボタンにはX68K上で認識されるジョイスティックの各ボタンを
　　割り当てますが、TypeGではX68Kのキーボードの各ボタンを割り当てる機能を拡張
　　しています。応用としてターボモードのON/OFFなどの割り当ても可能です。

□サウンド出力

  XM6ではFM音源のエミュレーションに実績あるfmgenを使用していますが、TypeG
　ではx68ksound.dll由来のエンジンや、MAME由来のFM音源エミュレーションを使用
　することができます。

　[オプション]の[サウンド]と[MercuryUnit]のタブで選択できます。

  またROMEOやGIMICを利用して実際のFM音源ICを駆動することもできます。
　ROMEOはpcidebug.dll、GIMICはc86ctl.dllを必要とします。

□フロッピーディスク

  以下のファイル形式を追加サポートしています。

      1.2MBファイル形式 (拡張子2HC、2HC専用)

□ステートセーブ

  ショートカットキー（ALT+F1/F2）を利用してクイックロード/セーブが可能です。
　xm6g.exeと同じディレクトリにSTATE.xm6というファイル名でステートファイルが
　作成されます。

□バグ修正と追加実装

  MPU
    MAMEの680x0コアを改造して組み込みました。x68030モードをサポートする
　　ためにいくつかのバグ修正を行っています。

  MFP
　　バスエラーの再現性向上とCPUとの動作タイミングの調整を修正しました。
　　　①GPIPとその割り込みタイミングの微調整。
　　　②IMR設定時の割り込みタイミングの変更。
    　③トランスミットステータスレジスタの再実装。
　　　④CPU→MFPへのデータ引渡しのタイミング調整。

    これらの修正はクレイジークライマー、アルカノイド、サイバリオンなどの
　　アプリで不具合として表面します。一見描画系に関係ないように見えて実は
　　割り込みやデータ受信のタイミングが影響していることは多々あるようです。


  DMAC
    バス占有率計算のバグ修正とパック転送を新たに実装しました。
    バイトアクセスとワードアクセスでデバイスによっては動作が異なる場合に
　　パック転送が実装されていないと不具合がでます。例えばテキストパレット
　　のアクセスなど。
　　

  FDC
    主に状態遷移割り込み(READY信号変化の割り込み)を修正しました。割り込みを
　　利用した制御を行うようなOS(NetBSD等)での不具合に対処したものです。

  FDD
　　2HCイメージのサポートの他にアンフォーマット時のセクタクリア処理を修正
　　しました。

　ADPCM
    コード上のバグ修正。
　　クロック比率変更時に一時的に設定した比率よりも高い比率で動作する機能を
　　追加しました。A-JAXのオーケストラヒットなどの再現性が向上しています。

  OPM
　　fmgen以外にx68sound.dll、MAME ym2151、ROMEO、GIMICをサポートします。

  SCSI
    主にxm6iで修正されたコードを取り込みました。

  SCC
    主にxm6iで修正されたコードを取り込みました。

  MIDI
　　クリックカウンタやシーケンサ処理が仕様通りに実装されていなかっため追加
　　実装しました。不必要な割り込みが発生することで MIDI が停止する不具合が
　　修正されます。

  システムポート
　　xm6iで修正されたコードを取り込んであります。アドレスと処理内容がかなり
　　間違っていました。またバージョン情報の取得は先頭の$36('6')、メジャー
　　バージョン、マイナーバージョンの後にTypeGで追加された$67('g')が帰ります。
　　TypeGはメジャーバージョンが3系のXM6として偽装しています。

□Windowsメニュー

  以下にメニューの概略を示します。なお動作中はマウスモードがWindows側にある
  時に限り、右クリックでメインメニューと同じメニューが開きます。

　説明の最後に★マークが付いたものはTypeGで拡張または動作を変更したものです。

  ファイル(F)
    開く(O)               ステートデータをロードします。
    上書き保存(S)         ステートデータを上書きで保存します。
    名前をつけて保存(A)   ステートデータを別名で保存します。
    リセット(R)           仮想マシンをリセットします。
    インタラプト(I)       仮想マシンにNMI割り込みをかけます。
    クイックロード(L)     ステートデータをファイル指定なしでロードします。★
    クイックセーブ(Q)     ステートデータをファイル指定なしでセーブします。★
    電源スイッチ(P)       仮想マシンの電源スイッチをON/OFFします。
    終了(X)               XM6を終了します。

  フロッピーディスク0,フロッピーディスク1
    開く(O)               フロッピーディスクイメージを設定します。
    イジェクト(E)         フロッピーディスクイメージを取り外します。
    書き込み保護(W)       ライトプロテクトシールを操作します。
    強制イジェクト(F)     イジェクト禁止の場合に強制イジェクトします。
    誤挿入(I)             誤挿入をシミュレーションします。

  MOディスク
    開く(O)               MOディスクイメージを設定します。
    イジェクト(E)         MOディスクイメージを取り外します。
    書き込み保護(W)       ライトプロテクトタブを操作します。
    強制イジェクト(F)     イジェクト禁止の場合に強制イジェクトします。

  表示(V)
    システム(S)           システム情報を表示します。
    プロセッサ(P)         MPUまわりの情報を表示します。
    デバイス(D)           各種デバイスの情報を表示します。
    ビデオ(V)             ビデオRAMの情報を表示します。
    レンダラ(R)           表示合成用ワークメモリの情報を表示します。
    Win32(W)              Windows固有の情報を表示します。
    キャプション(C)       ウインドウ上部のウィンドウタイトル部をon/offします。
    キャプション(C)       ウインドウ上部のウィンドウタイトル部をon/offします。
    ステータスバー(S)     ウインドウ下部のステータスバーをon/offします。
    メニューバー(M)     　ウインドウ上部のメニューをon/offします。
    最新の情報に更新(R)   すべてのウインドウを再描画します。
    ストレッチ(T)         0.5,1.0,1.5,1.8,2.0倍の拡大表示を選択できます。★
    フルスクリーン(U)     スクリーン表示を全画面モードに切り替えます。

  デバッグ(D)
    実行(X)/停止(B)       仮想マシンの実行を開始/停止します。(トグル動作)★
    トレース(T)           1命令だけ実行します。
    リセット(R)           仮想マシンをリセットします。

  ツール(T)
    マウスモード(M)       マウスエミュレーションの有効・無効を切り替えます。
    JoyKey(J)             JoyKeyの有効・無効を切り替えます。
    ソフトキーボード(K)   ソフトウェアキーボードウィンドウを表示します。
    サウンドシンセサイザ(S)    内蔵音源のシンセサイザを表示します。★
    MercuryUnitシンセサイザ(U) MercuryUnitのシンセサイザを表示します。★
    時刻アジャスト(A)     エミュレータ内の時計をWindows側を見て合わせます。
    trap#0命令(I)         d0.bに任意値をセットして、trap#0を実行します。
    WAVキャプチャ(W)      再生サウンドをWAVファイルに記録します
    画面キャプチャ(P)     画面をPNGファイルにキャプチャします。★
    フロッピーの作成(F)   新しいフロッピーイメージを作成します。
    SASIディスクの作成(A) 新しいSASIハードディスクイメージを作成します。
    SCSIディスクの作成(S) 新しいSCSIハードディスクイメージを作成します。
    MOディスクの作成(D)   新しいSCSI光磁気ディスクイメージを作成します。
    オプション(O)         XM6の動作オプションを設定します。

  ウィンドウ(W)
    重ねて表示(C)         サブウィンドウを再配置します(カスケード)
    並べて表示(T)         サブウィンドウを再配置します(タイル)
    全てアイコン化(I)     サブウィンドウをすべて最小化します。
    アイコンの整列(A)     アイコン化されたサブウインドウを並べます。
    全て隠す(H)           サブウィンドウをすべて非表示にします。
    全て復元(R)           アイコン化や非表示の前の状態に戻します。

  ヘルプ(H)
    英語モード(E)         画面リソースを英語版に差し替えます。★
    バージョン情報(A)     XM6のバージョン情報を表示します。

□速度

  TypeGはオリジナルのXM6に比べて性能が劣化している訳ではありません。
　様々な機能強化と同時にチューニングを行うことで負荷が低くなっています。

　x68kは簡単にエミュレーションできるほどシンプルなマシンではありません。
　一部のアプリケーションでは期待するほどの速度はでないでしょう。

□開発環境

  開発ホスト:PC/AT互換機
      AMD Athlon(tm) 64 X2 Dual Core Processor 6000+ 3.00GHz
      AMD Radeon HD 6450
      AMD High Definition Audio Device
      Roland CM-64(ジャンク),SC-55K

  ターゲット:X68000XVI Compact
      68000 16MHz
      CZ-601D
      Roland CM-64(ジャンク),SC-55K


□著作権、および謝辞

  ベースとなったXM6はＰＩ．氏が作成されており著作権を所有しております。
　他の著作権に関する情報はオリジナルXM6のアーカイブに含まれるXM6.txtを参照
　してください。

　XM6 2.05 TypeG で機能強化した箇所についてはGIMONSが著作権を所有します。
  実験成果公開という性質上、私のHP以外での配布を認めておりません。

  FM音源の合成エンジンのX68sound.dllはm_puusanさん作成のものを使っています。
　この部分の著作権は作者であるm_puusanさんに帰属します。

　一部のソースコード（サウンドエンジン強化）についてはnueさん、RuRuRuさんに
　コードを寄贈していただきました。ありがとうございました。

　また同じくXM6 2.05をベースにマルチプラットホームでの動作サポートやx68030
　への対応を進めているxm6iの成果の一部を統合しました。これらのコードの一部
　はisakiさん、Y.Sugaharaさんが著作権を所有しております。

　TypeGは様々なサポータの方々に貴重なフィードバックを頂いて進化してきました。
　ここに感謝します。

□ライセンスについて
  ・XM6 2.05 TypeGはフリーソフトです．
　　当ソフトを利用して生じたあるいは生じると予測される損害について，私および
    オリジナルのXM6作者は一切責任を負いません．

  ・その他のライセンス事項
　　オリジナルのXM6の規定に従います。特に雑誌/書籍での紹介や付属CD-ROMによる
　　配布に関しての制約事項にご注意願います。

□連絡先
  ホームページ   http://www.geocities.jp/kugimoto0715/
  e-mail         kugimoto0715@yahoo.co.jp
