------------------------------------------------------------------------------

  FM-7 EMULATOR XM7 (V1.1L60)

  for Win32
  Copyright (C) 1999-2013 ＰＩ．
  Copyright (C) 2001-2013 Ryu Takegami

------------------------------------------------------------------------------

□はじめに

  XM7は、1982年に富士通より発売された8bitパーソナルコンピュータFM-7シリーズを
  仮想化・再現する、エミュレータと呼ばれるソフトです。

  FM-7は「究極の8bitMPU」6809を2つ搭載したホビーパソコンで、FM-8の後継機種とし
  て登場しました。FM-7がベストセラーとなった後、FM-77→FM77AV→FM77AV40と拡張
  を続け、1988年発売のFM77AV40SXをもってシリーズ終了となっています。

  このバージョンでは、最大構成でFM-77L4(厳密には400ラインセット搭載のFM-77)の
  エミュレーションを行います。従って、FM-8、FM-7、FM-77(200ライン)等への下位
  互換性を持ちます。


□前バージョンからの変更点

  XM7 V1.1L52a→V1.1L60の変更点一覧です。

  <新規>
    ・ラスタ単位でのレンダリングに対応した
    ・XM7dashで対応した新形式のバブルイメージファイル、B77形式に対応。関連する
      機能(新規B77イメージ作成、BBL→B77変換機能)も追加。

  <修正>
    ・400ラインモードにおいて、VRAMオフセットが$8000を超えると描画領域内の先頭
      1バイト(8ドット)分にゴミが表示されることがある問題を修正
    ・メモリ検索ダイアログでショートカットキーの表示に関するレイアウトがくずれ
      る問題を修正

  <変更>
    ・スケジューラウィンドウでのフレーム数表示を小数点以下第2位まで表示するよう
      に変更
    ・Visual C++ 2005/2008(たぶん)でのビルドに対応し、w32_wxp.hをw32.hに統合し
      た


□動作環境

  Win32系OS(Win95/Win98/WinMe/WinNT4/Win2000/WinXP/WinVista/Win7/Win8)+DirectX3
  以降で動作します。ただし、以下の制限事項があります。

  ・Windows95の初期リテールバージョン(Build 950)は推奨しません。
    Service Pack 1の適用もしくはOSR2以降をお勧めします。

  ・WindowsMeは激しく推奨しません。
    理由はお察しください。

  ・WindowsNT4.0ではService Pack 3以降が必須です。

  ・Windows Vistaの初期リテールバージョン/Service Pack 1は推奨しません。
    Service Pack 2以降の適用をお勧めします。

  ・WindowsNT系(NT4.0、Win2000、WinXP、Vista、Win7、Win8)では一部キー入力に制限
    があります。問題がある場合はXM7のキーマップ設定機能を使い、キーボードの再割
    り当てを行って下さい。

  ・ROMEO対応機能を使用するには、柏野 政弘氏作のpcidebug.dllが必要です。
    pcidebug.dllはXM7のアーカイブに含まれていないので、柏野氏のサイト「ガジマ
    ルの森」(http://www.otto.to/~kasiwano/)からダウンロードして、pcidebug.dll
    (NT系OSではpcidebug.sysも)をXM7.exeと同じフォルダに置いてください。
    ※Vista/Win7(32ビット版)上でのROMEO対応はサポート対象外とさせていただきます。
    ※64ビット版OSではROMEO対応機能は使用できません。


□仮想マシン

  XM7 V1.1が提供する仮想マシン(Virtual Machine:以下VM)の仕様は最大構成の状態で
  以下の通りです。

    プロセッサ     メイン     6809(MC68B09相当  クロック2.0MHz/1.2MHz)
                   サブ       6809(MC68B09E相当 クロック2.0MHz/1.0MHz)
                   日本語サブ 6809(MC68B09相当  クロック1.2MHz)
    RAM            メインRAM 256KB(拡張RAM 192KB含む)、サブRAM 7KB、
                   ビデオRAM 48KB、日本語サブワークRAM 8KB
    ROM            F-BASIC ROM 32KB、キャラクタジェネレータROM 2KB、
                   サブモニタROM 8KB(200ライン)/18KB(400ライン)
                   400ラインキャラクタジェネレータROM 4KB
                   辞書アクセスルーチンROM 16KB
    漢字ROM        JIS78準拠第1水準漢字・非漢字 128KB
    辞書ROM        OASYS-Liteベース、256KB
    表示能力       640x200ドット  8色中8色 1面
                   640x400ドット 16色中2色 1面    から選択
    フロッピー     320KBフロッピーディスクドライブ×2
    テープ         FSK方式にて記録、約1600bps
    サウンド       BEEP音
                   標準PSG音源(AY-3-8910相当,THG増設FM音源のSSG部と共用)
                   標準FM音源(YM2203)
                   WHG増設FM音源(YM2203)
                   THG増設FM音源(YM2203)
    オプション機器 インテリジェントマウス(MSXマウス)、MIDIアダプタ、RS-232Cイ
                   ンタフェース


□ROMファイル

  XM7.exeを起動するためにはFM-7/FM-8のROMをファイル化したものが必要です。FM-7シ
  リーズについては、次にあげるファイルを添付のSAVEROM7ユーティリティを使用して
  各自準備してください。FM-8に関しては申し訳ないですが自力で何とかしてください。
  FM-7シリーズ/FM-8の実機をお持ちでない方は使用できませんのでご注意ください。

  (FM-7/77モード用必須ファイル)
    ファイル名    サイズ  CPU    物理アドレス
    FBASIC30.ROM  31744  メイン $38000-$3FBFF
    BOOT_BAS.ROM    512  メイン $3FE00-$3FFDF (BASICモード)
    BOOT_DOS.ROM    512  メイン $3FE00-$3FFDF (DOSモード)
    SUBSYS_C.ROM  10240   サブ  $D800 -$FFFF

  (FM-8モード用必須ファイル)
    ファイル名    サイズ  CPU    物理アドレス
    FBASIC10.ROM  31744  メイン $38000-$3FBFF
    BOOTBAS8.ROM    512  メイン $3FE00-$3FFDF (BASICモード)
    BOOTDOS8.ROM    512  メイン $3FE00-$3FFDF (DOSモード)
    SUBSYS_8.ROM  10240   サブ  $D800 -$FFFF

  (FM-8モード用ファイル:なくても起動します)
    BOOTBBL8.ROM    512  メイン $3FE00-$3FFDF (バブルモード)

  (400ラインカードサポート:なくても起動します)
    ファイル名    サイズ  CPU    物理アドレス
    SUBSYSL4.ROM  18432   サブ  $9800 -$BFFF, $E000 -$FFFF
    ANKCG16 .ROM   4096  (CRTC) テキスト画面表示用フォント
    EXTSUB  .ROM  49152  (CRTC) FM77AV40EX/SX 拡張サブモニタROM
                                (テキスト画面表示用フォント)

  (漢字・日本語関連サポート:なくても起動します)
    ファイル名    サイズ  CPU    物理アドレス
    KANJI   .ROM 131072  (漢字)  JIS78 第1水準漢字・非漢字
    KANJI2  .ROM 131072  (漢字)  JIS83 第2水準漢字
    JSUBMON .ROM  16384  日本語  $C000- $FFFF
    DICROM  .ROM 262144  日本語  $A000- $AFFF (64バンク)

  (FM-77 隠しブートROM:なくても起動します)
    ファイル名    サイズ  CPU    物理アドレス
    BOOT_MMR.ROM    512  メイン  $3FE00-$3FFDF


  ROMファイルはXM7.exeと同じディレクトリに配置してください。
  ROMファイルはFM-7/77モード、FM-8モードのどちらかの必須ファイルが一式揃って
  いれば、XM7を起動することができます。

  SUBSYSL4.ROMは、400ラインカード対応機能を使用しない場合は無くても構いません。
  テキスト画面表示用フォント(ANKCG16.ROM)のフォーマットは16バイト×256文字です。
  ANKCG16.ROMおよびEXTSUB.ROMが無い場合は、400ラインモード時のテキスト画面には
  XM7.exeに内蔵されているフォントが使用されます。ANKCG16.ROMとEXTSUB.ROMの両方
  が存在する場合はANKCG16.ROMが優先して使用されます。

  KANJI.ROMがなくてもXM7は起動できますが、漢字ROMによる漢字表示は行えません。
  KANJI.ROMがJIS83準拠の場合、内部でJIS78準拠エミュレーションを行います。KANJI2
  .ROMがあると、よりいっそう再現度が上がります。
  JSUBMON.ROM・DICROM.ROMは、日本語サブシステム対応機能を使用しない場合はなくて
  も構いません。

  BOOT_MMR.ROMは、MMRによる$3F000-$3FFFFのマッピング内容を厳密化する必要がなけ
  ればなくても構いません。


□コマンドライン

  コマンドラインオプションは以下のとおりです。

  XM7 <ファイル名> [<ファイル名>...]

  ディスクファイル/バブルファイルは有効なものを2組まで、テープ/ステートファイル
  は1つだけ指定できます。
  コマンドラインオプションは、ファイルの拡張子によって動作が変わります。以下に
  拡張子別の動作を記します。

  .D77/.2D/.VFD ディスクファイルをマウントし、VMをリセットします。
  .BBL/.B77     バブルファイルをマウントします。リセット動作は行いません。
  .T77          テープファイルをマウントします。リセット動作は行いません。
  .XM7          ステートファイルをロードし、セーブした時点から再開します。
  その他        何も行いません。

  ステートファイルを指定した場合、他のファイルは全て無視されます。
  ディスクファイルとして.D77ファイルを1つだけ指定した場合、ドライブ1には2番目の
  メディアが(存在すれば)マウントされます。

  コマンドラインを持ってXM7を二重起動すると、先に存在するインスタンスにファイル
  名を渡します。


□ドラッグ＆ドロップ

  XM7のウインドウに対して有効な拡張子のファイルをドラッグ＆ドロップすることによ
  り、以下の操作が可能です。

  ・ディスクファイル(.D77/.2D/.VFD)をドラッグ＆ドロップすることで、ディスクをマ
    ウントし、VMをリセットします。ステータスバーのアクセスランプ部分を除くウイ
    ンドウ領域に対して有効です。

  ・ディスクファイル(.D77/.2D/.VFD)をステータスバーのアクセスランプ部へドラッグ
    ＆ドロップすることで、指定されたドライブにディスクをマウントします。この場
    合はVMのリセットは行われません。

  ・バブルファイル(.BBL/.B77)をドラッグ＆ドロップすることで、バブルカセットをマ
    ウントすることができます。マウントできるホルダはホルダ0固定です。ウィンドウ
    の全領域に対して有効です。

  ・テープファイル(.T77)をドラッグ＆ドロップすることで、テープをマウントします。
    ウィンドウの全領域に対して有効です。

  ・ステートファイル(.XM7)をドラッグ＆ドロップすることで、ステートデータをロー
    ドし、セーブした時点から再開します。ウインドウの全領域に対して有効です。


□キーボード

  キーボードは基本的にFM-7準拠ですが、一部特殊キーの扱いが異なります。

  ここにあげる設定はデフォルトのものです。全てのキー割り付けはキーボード変換設
  定機能により変更できます。

  ☆日本語106キーボードの場合

    FM-7 [BREAK]     → JP106 [ESC]
    FM-7 [ESC]       → JP106 [半角/全角]
    FM-7 [CTRL]      → JP106 [Ctrl(左)]
    FM-7 [CAP]       → JP106 [CapsLock]
    FM-7 [GRAPH]     → JP106 [無変換]
    FM-7 [カナ]      → JP106 [Ctrl(右)]
    FM-7 [SPACE]     → JP106 [SPACE]
    FM-7 [INS]       → JP106 [Insert]
    FM-7 [DEL]       → JP106 [Delete]
    FM-7 [EL]        → JP106 [Home]
    FM-7 [CLS]       → JP106 [Page Up]
    FM-7 [DUP]       → JP106 [End]
    FM-7 [HOME]      → JP106 [Page Down]

  テンキー部は0〜9の数字キーに加え、JP106に存在する[/][*][-][+][.]の各キーを
  FM-7のキーに対応させています。

  その他[Alt]([F10])でWin32メニューを呼び出し、[F12]でリセットがかかります。


  ☆NEC PC-9801キーボードの場合

    FM-7 [BREAK]     → PC-98 [COPY]
    FM-7 [CAP]       → PC-98 [CAPS]
    FM-7 [カナ]      → PC-98 [カナ]
    FM-7 [GRAPH]     → PC-98 [NFER]
    FM-7 [SPACE]     → PC-98 [SPACE]
    FM-7 [EL]        → PC-98 [HOME CLR]
    FM-7 [CLS]       → PC-98 [ROLL DOWN]
    FM-7 [DUP]       → PC-98 [HELP]
    FM-7 [HOME]      → PC-98 [ROLL UP]

  テンキー部は0〜9の数字キーに加え、PC-98に存在する[-][/][*][+][=][,][.]の各
  キーをFM-7のキーに対応させています。

  その他[Alt]([GRPH]･[f･10])でWin32メニューを呼び出し、[vf･2]でリセットがかか
  ります。


  ☆英語101キーボードの場合

    FM-7 [BREAK]     → US101 [ESC]
    FM-7 [ESC]       → US101 [~]
    FM-7 [^]         → US101 [=]
    FM-7 [\]         → US101 [\]
    FM-7 [@]         → US101 [[]
    FM-7 [[]         → US101 []]
    FM-7 [:]         → US101 [']
    FM-7 [CTRL]      → US101 [Ctrl(左)]
    FM-7 [CAP]       → US101 [Caps Lock]
    FM-7 [GRAPH]     → US101 [Num Lock]
    FM-7 [カナ]      → US101 [Ctrl(右)]
    FM-7 [SPACE]     → US101 [SPACE]
    FM-7 [INS]       → US101 [Insert]
    FM-7 [DEL]       → US101 [Delete]
    FM-7 [EL]        → US101 [Home]
    FM-7 [CLS]       → US101 [Page Up]
    FM-7 [DUP]       → US101 [End]
    FM-7 [HOME]      → US101 [Page Down]

  テンキー部は0〜9の数字キーに加え、US101に存在する[/][*][-][+][.]の各キーを
  FM-7のキーに対応させています。

  その他[Alt]([F10])でWin32メニューを呼び出し、[F12]でリセットがかかります。


□ディスクファイル

  ディスクファイルとして2Dフォーマット・VFDフォーマット・D77フォーマットの3種
  類をサポートしています。

  2Dフォーマットは森田 浩次氏・GORRY氏が開発されたX1エミュレータ for X68kでサ
  ポートされているファイル形式で、327680バイトのサイズを持ちます。

  VFDフォーマットはFM-7エミュレータ"EM-7"でサポートされているフォーマットです。
  EM-7とのファイル互換を取りたい場合に使います。

  D77フォーマットはPC-88エミュレータで一般的に使われているD88フォーマットと互
  換性があるフォーマットです。FM-7/77向けであることを明確にするため拡張子を変
  更しています。記録密度は2Dをサポートします。


□テープファイル

  テープファイルは独自のT77フォーマットを採用しています。メニューよりファイル
  設定・録音・早送り・巻き戻しなどの操作を行います。


□バブルファイル

  バブルファイルはXM7の派生版であるXM7dashと同様のBBLフォーマット・B77フォーマ
  ットを採用しています。

  BBLフォーマットは32768バイトのサイズを持つベタファイルです。

  B77フォーマットは32バイトのヘッダを付加したベタファイルです。
  D77(D88)フォーマットに似た32バイトのヘッダを持ち、16ファイルまで連結可能
  です。
  ・B77ファイルヘッダフォーマット
      offset size 内容 
      0x0000  17  バブルカセットの名前(ASCIIZ)
      0x0011   9  リザーブ( 0x00 )
      0x001A   1  ライトプロテクトフラグ( 0x00:なし, 0x10:あり )
      0x001B   1  バブルカセットの種類( 0x80: 32KB, 0x90: 128KB )
      0x001C   4  バブルカセットのサイズ(DWORD)
                                      ( 0x00008020: 32KB, 0x000020020: 128KB )


□サウンド出力

  現在のバージョンではサウンドエミュレーションをサポートしています。BEEP音源、
  PSG音源、FM音源、WHG音源、THG音源、モータ制御用のリレー動作を含めたテープ音、
  FDDシーク音のエミュレーションが行えます。
  本体側PSGのエミュレーションはTHG音源のSSGパートにより行われます。

  モータ制御リレー動作音・FDDシーク音のサンプルは、XM7.exeと同じディレクトリに
  モノラル・16ビットPCMのWAVファイルとして以下のファイル名で置いてください。

    モータ制御リレー オン : relay_on.wav
    モータ制御リレー オフ : relayoff.wav
    FDD 1トラックシーク   : fddseek .wav

  実際に出力を行うためには、DirectSoundに対応したサウンドデバイスが必要です。


□ジョイスティック

  現在のバージョンではジョイスティックのエミュレーションをサポートしています。

  実際に入力するためには、Windowsの「ゲームコントローラ」コントロールパネルで
  セットアップされたジョイスティックデバイスが必要です。


□マウス

  現在のバージョンではインテリジェントマウス(MSXマウス)のエミュレーションをサ
  ポートしています。純正マウスセット(MB22436)のエミュレーションには対応してい
  ません。

  マウスエミュレーションの有効・無効や、マウス使用時に占有するジョイスティック
  ポートの設定は、「ツール」→「設定」の「オプション」タブで設定できます。
  また、マウスの中央ボタンおよびマウスホイール、[F11](NEC PC-9801キーボードでは
  [vf･1])を押すことで、一時的にマウスエミュレーションモードをトグルで切り替える
  ことも可能です
  (キーマップ変更機能によって[F11]・[vf･1]に何らかのキーを割り当てている場合は
   キーボードによるマウスエミュレーション切り替えは使用できません)。

  マウスエミュレーション中は、Win32メニュー呼び出しなどのマウス操作が必要とな
  る場面を除いて、Windows側のマウスポインタが表示されなくなります。


□MIDI

  現在のバージョンでは純正MIDIアダプタ相当のMIDI出力のエミュレーションを仮サ
  ポートしています。

  ただし、USARTのエミュレーションを厳密に行っているわけではないので、動作しな
  いソフトがないとはいえません。また、MIDI入力や純正MIDIアダプタに搭載されて
  いるPIT(i8253相当)には対応していません。

  実際に出力するためには、MIDI出力デバイスが必要です。


□RS-232C

  現在のバージョンではRS-232Cインタフェースカード(MB22406)および日本語通信カー
  ド(FM77-101)相当のエミュレーションをサポートしています。

  ただし、非同期通信モードのみのサポートで同期通信には対応していません。

  実際に通信するためには、シリアルポートデバイスが必要です。


□Win32メニュー

  以下にメニューの概略を示します。

  ファイル(F)
    開く(O)               VMの状態をファイルからロードします。
    保存(S)               VMの状態をファイルに上書き保存します
    名前をつけて保存(A)   VMの状態をファイルに名前をつけて保存します。
    リセット(R)           VMをリセットします。
    ホットリセット(H)     VMをホットリセット(BREAK+RESET)します。
    BASICモード(B)        起動モードをBASICモードにセットします。
    DOSモード(D)          起動モードをDOSモードにセットします。
    終了(X)               XM7を終了します。

  ドライブ1(ドライブ0も同様)
    開く(O)               ディスクイメージファイルを設定します。
    両ドライブで開く(B)   ディスクイメージファイルを両ドライブに設定します。
    取り外す(E)           ディスクイメージファイルを取り外します。
    一時取り出し(T)       VMに対し強制的にディスク未挿入状態を返します。
    書き込み禁止(W)       現在選択しているディスクを書き込み禁止に設定します。
    (ディスク名)          D77ファイル内のメディアを切り替えます。

  カセット(C)
    テープ(A)
      開く(O)               テープイメージファイルを設定します。
      取り外す(E)           テープイメージファイルを取り外します。
      巻き戻し(W)           １つ手前まで巻き戻します。
      早送り(F)             １つ先まで早送りします。
      録音(R)               録音可能状態、再生状態を切り替えます。
    バブルホルダ0(バブルホルダ1も同様)
      開く(O)               バブルイメージファイルを設定します。
      取り外し(E)           バブルイメージファイルを取り外します。
      一時取り出し(T)       VMに対し強制的にバブルカセット未装着状態にします。
      書き込み禁止(W)       現在選択しているバブルカセットを書き込み禁止状態に
                            設定します。
      (メディア名)          B77ファイル内のメディアを切り替えます。

  表示(V)
    フロッピーディスク(F) FDCウインドウを表示します。
    ﾊﾞﾌﾞﾙﾒﾓﾘｺﾝﾄﾛｰﾗ(B)     バブルメモリコントローラウインドウを表示します。
    FM音源/PSGレジスタ(O) FM音源/PSGレジスタウインドウを表示します。
    FM音源/PSGﾃﾞｨｽﾌﾟﾚｲ(D) FM音源/PSGディスプレイウインドウを表示します。
    サブCPUコントロール(C)サブCPUコントロールウインドウを表示します。
    キーボード(K)         キーボードウインドウを表示します。
    メモリ管理(M)         MMRウインドウを表示します。
    ステータスバー(S)     ウインドウ下部のステータスバーをon/offします。
    実行に同期(Y)         サブウインドウの表示を自動更新します。
    最新の情報に更新(R)   すべてのウインドウを再描画します。
    フルスクリーン(U)     ウインドウモード・全画面モードを切り替えます。

  デバッグ(D)
    実行(X)               VMの実行を開始します。
    停止(B)               VMの実行を止めます。
    トレース(T)           １命令だけ実行します。
    リセット(R)           VMをリセットします。
    ブレークポイント(P)   ブレークポイントウインドウを表示します。
    スケジューラ(S)       スケジューラウインドウを表示します。
    CPUレジスタ(C)        CPUレジスタウインドウを表示します。
    逆アセンブル(D)       逆アセンブルウインドウを表示します。
    メモリダンプ(M)       メモリダンプウインドウを表示します。

  ツール(T)
    設定(C)               XM7の動作設定を行います。
    マウスモード(M)       マウスエミュレーション状態を一時的に切り替えます。
    画面キャプチャ(S)     現在の画面をビットマップファイルにセーブします。
    縮小画像キャプチャ(R) 現在の画面を320×200ドットに縮小してセーブします。
    WAVキャプチャ(W)      サウンド出力をWAVファイルにロギングします。
    新規ディスク作成(D)   新しいディスクイメージファイルを作成します。
    新規テープ作成(T)     新しいテープイメージファイルを作成します。
    新規ﾊﾞﾌﾞﾙｶｾｯﾄ作成(B)  新しいバブルイメージファイルを作成します。
    VFD→D77変換(V)       VFD形式のイメージファイルをD77形式へ変換します。
    2D→D77変換(2)        2D形式のイメージファイルをD77形式へ変換します。
    VTP→T77変換(P)       VTP形式のイメージファイルをT77形式へ変換します。
    BBL→B77変換(L)       BBL形式のイメージファイルをB77形式へ変換します。

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

  ヘルプ(H)
    バージョン情報(A)     XM7のバージョン情報を表示します。


□互換性

  プリンタポートはVMレベルではサポートしていますが、I/Oエミュレーションを行わ
  ず仮想的に動作します。また、1MBフロッピーディスクドライブ、FM-8のアナログポ
  ートには対応していません。

  それ以外の部分では高い互換性があります。FM-7/8向けのほとんどのソフトが動作
  すると思われます。


□速度

  仮想CPUを2.0MHzで動かし、サウンド合成を行ったあとの余り時間で画面描画を行う
  スケジュールをしています。このため低速なCPUほど実際のフレームレートが低下し
  ます。

  XM7 V1.1ではV1.0以前より厳密なスケジューリングを行っているため、エミュレー
  ションにはより多くのCPUパワーを必要とするので、XM7 V1.0以前でパワーに余裕が
  あるCPUでもフレームレートの低下が発生する可能性があります。
  V1.1L60で新設されたラスタ単位でのレンダリングを行う場合は、さらに高いCPUパワ
  ーを要求します。大体CoreDuo 1.66GHz程度が目安です。

  リアルタイムでエミュレーションを行うための目安としては、最低限MMX Pentium
  300MHz程度が必要です。WHG音源、THG音源を考慮して余裕を見ると、K6-2 500MHz,
  K6-3 450MHzといったプロセッサであればラスタ単位でのレンダリングを行わない
  場合で大抵のソフトで問題なく動作します。


□その他

  XM7 for Win32(V2.2〜V2.5,V3.0)はBorland C++ Builder 5 (Professional Edition)
  を、XM7 for Win32(V3.1〜,V2.6〜)は Borland C++ Compiler 5.5.1を用いて開発さ
  れています。付属のVCLライブラリを使用せず、Win32API+DirectXの範囲で記述して
  おり、Windows98以降で新設されたAPIに関しては内部でロード/解放を行っています。
  このため、DirectX以外のコンポーネントDLLは原則として不要です。

  またDirectDrawの振る舞い、Windowsのスケジュール制御についてcisc氏に有用な
  示唆を多数頂きました。この場を借りてお礼申し上げます。

  アイコンファイルの一部は天丸氏によるもの、およびそれをベースにしたものを使用
  させていただいています。

  また、日本語通信カードをお貸ししてくださった「はせりん」氏、バブルカセットサ
  ポートコードの使用を快諾してくださった「トマ」氏にはこの場を借りてお礼申し上
  げます。


□著作権

  XM7はＰＩ．および、たけがみりうが著作権を所有するフリーソフトウェアです。
  無償かつ書庫を改変しない場合に限り、配布を認めます。

  ROMファイルについては著作権者の意向に従ってください。なお同梱のSAVEROMは
  ROMデータを個人的に利用するために作成されており、いわゆる違法配布を助長もし
  くは幇助するものではありません。

  なおPSG音源、FM音源合成部はPC-88エミュレータ「M88」に搭載されているOPNエミュ
  レータ「fmgen」をベースとしています。この部分の著作権はM88の作者であるcisc氏
  に帰属します。
  (FM Sound Generator, OPN Interface, PSG Sound Implementation:
        Copyright (C) cisc 1998-2003.)

  バブルカセットサポート部はトマ氏の「XM7dash」用のものを32KBバブルカセットに
  限定して搭載した物です。著作権はトマ氏に帰属し、配布条件はXM7本体に準じます。

  アイコンファイルの一部は天丸氏によるもの、およびそれをベースにしたものを使用
  させていただいています。


□開発スペック

　<XM7 V3・XM7改 開発スペック>
  設計開始日時   2001年2月28日 (XM7改 V3.0L0.0)
  開発開始日時   2001年3月10日 (XM7改 V3.0L0.0)
  開発終了日時   2013年4月22日

  動作機種/OS    Win32
  開発言語       C,C++,アセンブラ(x86)
  ソース規模     VM部 68ファイル、Win32部 37ファイル

  主要ハード     開発マシン1 (V3.4L51〜)
                   ASRock Fatal1ty Z77 Professional (Intel Z77 Express Chipset)
                   Intel Core i7-3770(Ivy Bridge) 3.40GHz, 32GB RAM, 5.5TB HDD
                   GIGABYTE GV-N670OC-2GD (nVIDIA GeForce GTX 970, 2GB)
                   Creative SoundBlaster X-Fi Titanium Professional Audio
                   Windows 7 Ultimate Service Pack 1 (x64), Windows 8 Pro (x64)
                   Windows 8 Pro RTM (x64) on VMware Player
                 開発マシン2 (V3.4L50a〜)
                   Sony VAIO Sシリーズ13P SVS13A1AJ (IntelHM77ExpressChipset)
                   Intel Core i7-3520M(Ivy Bridge) 2.90GHz, 8GB RAM, 512GB SSD
                   Intel HD Graphics 4000 / NVIDIA GeForce GT 940M LE (2GB)
                   Realtek High Definition Audio
                   Windows 7 Professional Service Pack 1 (x64)
                 開発マシン3 (V3.4L50〜)
                   IBM ThinkPad X60s Type 1703-AL7 (Intel 945GM)
                   Intel Core Duo(Yonah-DC,LV) 1.66GHz, 2GB RAM, 500GB HDD
                   Intel 945GM Express Graphics Controller
                   SoundMax Integrated Digital HD Audio
                   Windows 7 Professional Service Pack 1 (x86)
                 開発マシン4 (V3.4L21〜)
                   NEC VALUESTAR G type TZ PC-VG30NYZMJ (SiS 760)
                   AMD Athlon64(NewCastle) 3000+@2GHz, 1GB RAM, 610GB HDD
                   SAPPHIRE ATLANTIS RADEON 9600 FANLESS BULK (128MB)
                   Creative SoundBlaster Audigy 2
                   Windows XP Professional Service Pack 3
                 評価マシン1 (開発マシン:V3.4L22〜V3.4L50)
                   Panasonic Let'snote CF-W5KWUAXP (Intel 945GMS)
                   Intel Core Solo(Yonah,ULV) 1.06GHz, 1GB RAM, 120GB HDD
                   Intel 945GMS Express Graphics Controller
                   Sigmatel C-Major AC'97 Audio
                   Windows XP Professional Service Pack 3
                 評価マシン2 (V3.4L21a〜)
                   Sony VAIO PCG-U101 (PCG-1E1N)
                   Mobile Intel Celeron(Banias-512K,ULV) 600A MHz
                   512MB RAM, 30GB HDD
                   ATI MOBILITY RADEON (16MB), YAMAHA AC-XG AC'97 Audio
                   Windows XP Home Edition Service Pack 3
                 過去の開発マシン1 (V3.4L50〜V3.4L50a)
                   MSI P43 NEO-F (Intel P43 Express Chipset)
                   Intel Core 2 Duo(Wolfdale-3M) E7200@1.6GHz,4GB RAM,1.5TB HDD
                   LEADTEK WinFast PX8500GT TDH (256MB)
                   Creative SoundBlaster X-Fi Xtreme Audio
                   Windows 7 Ultimate Service Pack 1 (x64)
                 過去の開発マシン2 (V3.4〜V3.4L21a)
                   Panasonic Let'snote LIGHT CF-W2BW1AXR (Intel 855GM)
                   Intel Pentium M(Banias,ULV) 1GHz, 512MB RAM, 40GB HDD
                   Intel 82855GM Graphics Controller
                   Sigmatel C-Major AC'97 Audio
                   Windows XP Professional Service Pack 2
                 過去の開発マシン3 (V3.3L31〜V3.4L20a)
                   ABIT NF7-SL (NVIDIA nForce2 Ultra 400)
                   AMD Athlon XP(Thoroughbred B-step) 1700+ (1.47GHz…?)
                   SAPPHIRE ATLANTIS RADEON 9000 FANLESS BULK (64MB)
                   NVIDIA nForce2 MCP-T Audio (Onboard)
                   Windows XP Professional Service Pack 2
                 過去の開発マシン4 (V3.1〜V3.3L30)
                   GIGABYTE GA-7IXE4 (AMD-750), AMD Athlon(Thunderbird) 1GHz
                   ATI XPERT98 PCI(ATI RAGE PRO TURBO PCI)
                   Labway Xwave6000(YAMAHA YMF754), FUJITSU TownsCard PCI
                   Windows 2000 Professional Service Pack 4,TownsOS V2.1L51(謎)
                 過去の開発マシン5 (XM7改 V3.0〜V3.0L31)
                   MSI MS-5163 (ALi AladdinIV+), AMD K6-III 333-366MHz
                   ATI XPERT98 PCI(ATI RAGE PRO TURBO PCI)
                   Labway Xwave6000(YAMAHA YMF754), FUJITSU TownsCard PCI
                   Windows 95 OEM Service Release 2
                 過去の評価マシン1 (FMV-BIBLO LOOX T60D, V3.4〜V3.4L23)
                   Mobile Intel Celeron (Banias-512K,ULV) 600A MHz
                   512MB RAM, 40GB HDD
                   Intel 82855GM Graphics Controller, Realtek AC'97 Audio
                   Windows XP Home Edition Service Pack 3
                 過去の評価マシン2 (FMV-BIBLO LOOX U/C30, V3.4L30)
                   Intel Atom Z530(Silverthorne) 1.33GHz, 1GB RAM, 60GB HDD
                   Intel Graphics Media Accelerator 500
                   Realtek High Definition Audio CODEC
                   Windows XP Home Edition Service Pack 3
                 ターゲットマシン
                   FM77AV40EX, FMT-DP531
                   FM77AV40SX, FMDPC232D, KDL-20J1, モニタケーブルがない(滅
                   FM77AV-2, FMTV-152, ビデオディジタイズカード(FM77-411)
                   FM-NEW7, PC-KD252, マイクロフロッピィディスクドライブ
                   (MB27631H)
                   FM-8, CZ-600DB

  主要開発言語   Borland C++ Compiler 5.5.1
                 Netwide Assembler 0.98+towns05
                 HD6309 cross assembler version 01.20T


□XM7 V1.1L60に関するFAQ

  <概要>

  Q:XM7はFM-7を100%エミュレートしていますか。
  A:していません。大半のソフトを動かすのに支障がない程度です。イメージ的には
    98%程度と考えて下さい。
  Q:残り2%は具体的にはどこですか。
  A:最大の欠点はディスクアクセスが速すぎることです。これが原因で動作異常を
    起こすソフトがあります。それ以外にも問題点は幾つかあります。
  Q:各バージョンのXM7の間でのステートファイルの互換性は。
  A:XM7 V1.0以前とXM7 V1.1、XM7 V1系とV2/V3系の間でのステートファイルの互換性
    はありません。

  <起動>

  Q:起動時に「仮想マシンを初期化できません」と出ます。
  A:起動に最低限必要なROMファイルが無いか、ファイルサイズが不足しています。
    ROMファイルはカレントでなく、XM7.exeと同じディレクトリに置いて下さい。
  Q:XM7を終了させた直後に再度起動しようとしても起動できません。
  A:おそらくアンチウイルスソフトが.INIファイルのチェックを行っているために前の
    XM7.exeが終了していないものと思われます。しばらく経ってから再度お試しくだ
    さい。
  Q:動作中のOSにDirectXが入っているか、バージョンが正しいかわかりません。
  A:Win98以降ならOSデフォルトでDirectX3以降をサポートしていますので、気にする
    必要はありません。Win95/WinNT4は要チェックです。
  Q:メモリは何MBくらい実装している必要がありますか。
  A:OS本体や他のアプリケーションにもよるため一概には言えませんが、最低32MBくら
    いから動作すると思います。XM7自体の消費メモリは5〜10MB前後です。
  Q:同じFM-7エミュレータであるEM-7やFEMU7、VM7のROMイメージは使えないのですか。
  A:EM-7やFEMU7のROMイメージは使えません。
    VM7が要求するFM-7のROMイメージはファイル名を含めてXM7 V1.1と同じ仕様になっ
    ているので、そのまま利用できます。

  <ディスク>

  Q:2DディスクをD77ファイルに変換するにはどうすればいいのですか。
  A:PC-88エミュレータP88SR向けのツールMAKE_HDか、M88向けのツールDITTが使えま
    す。ただしプロテクトのかかったディスクや、N=5のディスクは変換できません。
  Q:では、それらのディスクはどうすれば変換できるのですか。
  A:汎用的なツールは今のところありません。FM-7実機、FM TOWNSなどで専用ツール
    を作成したり、D77ファイルを直接バイナリエディットするなどして下さい。
  Q:D77ファイル内の全てのディスクに対して、ライトプロテクトしたいのですが。
  A:D77ファイルの属性をRead Onlyにしてください。ファイル内の全てのディスクが
    ライトプロテクト状態として扱われます。
  Q:1つのD77ファイルに入るディスクの枚数に制限はありますか。
  A:あります。XM7ではD77ファイルについて、1ファイルあたりの最大ディスク数を
    16枚に制限しています。
  Q:2Dファイルの構造・目的がわかりません。
  A:F-BASIC標準の40(track)×2(side)×16(sector)×256(byte)を、頭から順に連結
    したものです。FM77AV40向けのツールCOPY2D(非公開)で作成可能です。
  Q:VFDファイルの構造がわかりません。
  A:FM TOWNS版EM-7のドキュメントにファイルフォーマットの説明があります。こちら
    を参照して下さい。(とは書いてあるが見当たらない(汗))
  Q:D77ファイルの構造がわかりません。
  A:PC-88エミュレータP88SRの公式サイトに技術文書の形で公開されています。D88の
    説明をD77に読み替えて下さい。
  Q:D77ファイルではセクタステータスをどのようにサポートしていますか。
  A:仕様書では"DISK BIOSが返す値"となっていますが、XM7では$B0のみサポートして
    います。この値のセクタを読み込むとCRC ERRORとして振る舞います。

  <テープ>

  Q:テープ音声を録音したWAVファイルからT77ファイルを作成することはできますか。
  A:Apolloさん作のWAV2T77で可能です。この場合サンプリングレートを可能な限り高
    くし(44.1kHz)、極力ノイズが混入しないように注意して下さい。
  Q:T77ファイルをマウントし、F-BASICからロードを試みても必ず失敗します。
  A:F-BASICではテープのモータをONにした後、回転が安定するまで1、2秒待っていま
    す。この間を考慮して、RUN"CAS0:"[CR]などの後数秒待ってマウントして下さい。
  Q:テープの書き込み保護はできますか。
  A:T77ファイルの属性をRead Onlyにすることで、録音禁止(テープのツメを折った状
    態)として扱います。
  Q:テープの巻き戻し・早送りを行うと、砂時計状態のまま長時間応答しません。
  A:仕様です。これはT77ファイルの最小単位(2バイト単位)でマーカ位置の検索を行っ
    ているためです。
  Q:T77ファイルのサイズが数MB〜数10MBになるのですが、異常ではないですか。
  A:正常です。これはFM-7のテープインタフェースから読みとれる最低レベルのデータ
    をそのままファイル化しているためで、効率そのものは非常に悪いです。

  <画面・速度>

  Q:全画面モードの設定を"640x400"にしていても、設定されていないようです。
  A:設定できるかどうかはビデオドライバに依存します。全画面モードの解像度設定
    は優先度の設定であり、失敗すればもう一方を使って試みます。
  Q:他のエミュレータでよくあるようなフレームレートの設定はないのですか。
  A:ありません。XM7ではフレームレートは常に"自動"として扱われます。最小2フレー
    ム、最大55フレーム or 60フレームの範囲内で負荷に応じて変化します。
  Q:フレームレートを確認するにはどうすればよいですか。
  A:スケジューラウインドウを開いてみて下さい。"Frame Rate"の項目2つで確認でき
    ます。Totalはウインドウオープン後の平均、Latestは最近2秒間の値です。
  Q:スケジューラウインドウで、メインタイマーの速度が交互変化しています。
  A:メインタイマーは4.9152MHzのXtalから作られています。つまり周期が2.0345msで
    あり、XM7では2.034msと2.035msとを交互に発生させて近似しています。
  Q:ラスタ単位でレンダリングを行った場合のメリット・デメリットは。
  A:ラスタ単位でのレンダリングを行うことにより、いわゆるラスタスクロールの再現
    が可能となりますが、V1.1ではあまりメリットがありません。
    逆にデメリットとしては、毎フレームの毎ラスタごとにレンダリングを行うように
    なるため、マシンへの負荷が増え、フレームスキップ等が発生しやすくなります。
  Q:ラスタ単位でのレンダリング対応で「画面描画タイミングを表示終了期間直後にす
    る」機能はなくなりましたか。
  A:GUIから設定する機能はなくなりましたが、INIファイルを直接書き換えることで対
    応できます。XM7.iniの[Screen]セクションに「DrawAfterVSYNC=0」と書いてくださ
    い(旧バージョンの「DrawTiming」と値が逆な点には注意してください)。

  <サウンド>

  Q:FM音源・PSG音源・BEEP音源の各ボリュームを調節したいのですが。
  A:今までは未対応でしたが、V1.1L20からボリューム比の変更に対応しました。
  Q:ステレオ設定で音量バランス(パンポット)がきちんと分かれていないようです。
  A:V1.1L20から「チャンネルセパレーション」の設定が可能になりました。デフォルト
    では従来バージョンと同じ左右70%:30%近辺の割合になるようにしています。このた
    め音が中央に寄ります。
  Q:オプション設定で標準OPN音源、WHG音源,THG音源をカットすると処理が軽くなりま
    すか。
  A:内部処理ではリセットの度に使用フラグをクリアし、本当に使われた場合だけソフ
    トウェア合成を行っています。このため未対応ソフトの場合はOFFにしている状態
    と変わりません。
  Q:FM音源・PSGのチャンネルマスク機能の操作方法は。
  A:[表示]→[FM音源ディスプレイ]で開くFM音源ディスプレイウインドウ上の鍵盤に対
    して以下の操作を行えます。
      左クリック      ：指定されたパートのミュート状態を切り換えます。
      左ダブルクリック：指定されたパート以外を全てミュート状態にします。
      右クリック      ：全てのパートのミュート状態を解除します。

  <キーボード>

  Q:Windows2000を使っていますが、[半角/全角]を押した時にリアルタイムキースキャ
    ンが正常に動作せず、オートリピートOFFの状態でもリピートがかかります。
  A:WinNT系でのDirectInputの仕様による制限事項で、従来バージョンのようにキーロ
    ックがかかってしまうのを回避する処理を行っているためです。この動作が問題と
    なる場合は、キーマップ設定機能を使って別のキーを割り当てて下さい。
    対策処理を行っているのは[半角/全角]、[Caps Lock]、[ひらがな]の3つのキーで
    すが、[左Ctrl]、[右Ctrl]でも不具合が出るケースがあるようです。
    また、PC-9801キーボードの場合にもキーロックがかかる[CAPS]、[かな]キーにつ
    いて同様の対策処理を行っています。

  <ジョイスティック>

  Q:FM特有の[5]キーストップを、ジョイスティックを使って回避できるそうですが。
  A:ジョイスティック設定でタイプを"キーボード"にし、センターを[5]に割り当てて
    下さい。センターに戻ったときに1回だけ[5]キーのMake/Break動作を行います。
  Q:ISA互換ゲームポートを使っていますが、重いポーリングを抑制するには。
  A:ジョイスティック設定で、ポート1・ポート2ともにタイプを"使用しない"に変更
    してください。ゲームポートの定期ポーリングを行わなくなります。
  Q:ジョイスティックのタイプで選択可能な"電波新聞社JOY I/F"とは何ですか。
  A:FM-7時代に電波新聞社から発売されたジョイスティック"XE-7"のインタフェース
    です。プリンタポートに接続して使います。"ゼビウス"などが対応しています。

  <日本語通信カード>

  Q:日本語通信カードを有効にするとF-BASICのフリーエリアが減ります。
  A:実機でもフリーエリアが減少する仕様です(RS-232C 1回線分の減少とは別に)。
    日本語通信カードのI/OポートをF-BASICインタプリタの初期化時に増設RS-232Cポー
    トと誤認するため、フリーエリアが余計に減少します。
    なお、FM-7モードでは1回線分、FM-77モードでは2回線分減少します。

  <デバッガ>

  Q:デバッガの使い方がわかりません。
  A:逆アセンブルウインドウで左クリックするとブレークポイントを設定します。また
    ブレークポイントウインドウで左クリックすると該当アドレスへジャンプします。
  Q:左クリック・右クリックの機能があるウインドウは。
  A:左クリックについては逆アセンブル・ブレークポイントの各ウインドウ、右クリッ
    クは逆アセンブル・メモリダンプ・ブレークポイントの各ウインドウです。
  Q:割り込みベクタアドレスにブレークポイントを置きましたが、ブレークしません。
  A:内部構造上、NMI/IRQ/FIRQ等の割り込み先にブレークポイントを置いてもブレーク
    しません。その次の命令はokです。
  Q:ブレークポイントを設定すると重くなりますか。
  A:メインCPU・サブCPUともに1命令実行ごとにチェックを行うため、数%ですが重くな
    ります。
  Q:CPUレジスタ表示内の"IR"とは何ですか。
  A:CPUエミュレーション上設けた疑似レジスタです。NMI等の割り込み要求フラグや、
    SYNC/CWAIといった同期命令の管理を行うためのもので、"InterRupt"の略です。

  <設定>

  Q:CPU速度の設定を変更するとどうなりますか。
  A:大きくすると仮想マシンのCPU速度は速くなりますが、処理は重くなります。小さ
    くするとその逆に遅くなります。デフォルトの値は適当なベンチマークプログラム
    をでっちあげてそれを参考に決定したものなので、変更するメリットはあまりない
    と思います。
  Q:テープモータオン時のフルスピード動作とは何ですか。
  A:テープモータが回っている間だけ、仮想マシンの実行速度を上げてロード時間の
    短縮を図る機能です。
  Q:テープモータオン時のフルスピード動作がデフォルトではメインCPUのみ全力駆動
    になりますが、旧版のように速度調整省略にすることはできますか。
  A:できます。全般ページの「テープモータオン時の動作を速度調整省略にする(C)」を
    チェックしてください。
  Q:全力駆動モードとは何ですか。
  A:CPUパワーに余裕がある場合に、その余裕分だけ仮想マシンのCPU速度を上げます。
    「テープモータオン時のフルスピード動作」と異なり、タイマー間隔や時計などの
    CPU以外の部分の速度は変わりません。
  Q:自動速度調整機能とは何ですか。
  A:全力駆動モードとは逆に、CPUパワーが足りない場合に、自動的に仮想マシンのCPU
    速度を5%〜100%の間で調節して描画やイベントの実行時間を確保します。処理が間
    に合っていればCPU以外の部分の速度は変わりません。CPUのエミュレーションに時
    間を取られて常時2fps程度しか出ないような状況で有効です。ただし、厳密な実行
    タイミングを要求するソフトは動作しなくなる可能性があります。

  <ツール>

  Q:画面キャプチャ機能は、どのタイミングで画面をセーブしますか。
  A:ファイル入力ダイアログボックスでファイルを入力して、[OK]が選択された直後
    の画面です。このため予めVMを止めておくと良いと思います。
  Q:画面キャプチャ機能で、1ライン単位にセーブされる(ラインが抜ける)のは。
  A:画面表示にあわせた仕様です。設定で"ウインドウモード時に24kHz表示をエミュレ
    ート"にチェックを入れた状態でキャプチャすると、フルスキャンでセーブされます。
  Q:WAVキャプチャ機能の使い方は。
  A:WAVキャプチャを開始するとチェックマークがつき、音出力監視状態に入ります。
    その後何らかの音が出力され始めた瞬間から逐次セーブを始めます。
  Q:WAVキャプチャ機能を使おうとすると、エラーが出て開始できません。
  A:指定されたファイルが書き込みオープンできないか、サウンドバッファの設定値が
    700ms以上になっているかのどちらかの場合にエラーを出します。

  <個別の互換性>

  Q:"MAGUS"が動作しません。
  A:パッチを当てないと動作しません。XM7の公式掲示板のログを参照して下さい。
    これはCLR命令がメモリをRead→Writeする一瞬のReadタイミングで同期をとるため
    です。(V2/V3同様の対策処理は入っていますが…)

  <その他>

  Q:今後のバージョンアップ予定は。
  A:更新は不定期となります。
  Q:XM7 V1.0系で対応していたWin32以外のプラットホームへの対応はどうなりますか。
  A:Win32以外への対応は、開発環境の都合もあるので考えていません。
  Q:Windows 8/Windows RTのModern UI版の開発予定は。
  A:全くありません。
  Q:追加して欲しい機能、動くようにして欲しいソフトがあるのですが。
  A:要望はいつでも受け付けます。但し、実現させるかどうかは私が決めます。


□連絡先

  ホームページ
  http://ytanaka.vicp.net/ (本家・機能停止中)
  http://retropc.net/ryu/xm7/ (誰も見ないXM7改のぺーじ)

  公式掲示板
  http://ytanaka.vicp.net/cgi-bin/xm7/hyperbbs.cgi (機能停止中)

  臨時掲示板
  http://xm7.bbs.coocan.jp/

  メールアドレス
  ＰＩ．氏 : yasushi@tanaka.net
  たけがみ : ryu.takegami@mbg.nifty.com
