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

  FM-7 EMULATOR XM7 (V2.9L52a)

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

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

□はじめに

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

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

  このバージョンではFM-7およびその上位機種であるFM77AVのエミュレーションを
  行います。


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

  XM7 V2.9L52→V2.9L52aの変更点一覧です。

  <新規>
    ・サブウィンドウを全て閉じる機能を追加

  <修正>
    ・レジスタ内容変更ウィンドウのメッセージが本来リソースに逃がすべきところを
      ハードコードされていたので修正
    ・strncatの使い方を間違えていたポカを修正

  <変更>
    ・BASIC/DOSモードの切り替えの際のリセット処理を廃止

  今回の一部の修正・変更点はXM7dash開発者のトマさん、XM7LP開発者のBen.JPさんに
  指摘していただきました。ありがとうございました。 


□動作環境

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

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

  ・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/Win8(x86)上でのROMEO対応はサポート対象外とさせていただきます。
    ※64ビット版OSではROMEO対応機能は使用できません。


□仮想マシン

  XM7 V2が提供する仮想マシン(Virtual Machine:以下VM)の仕様は以下の通りです。

    FM-7, FM77AV (いずれかを選択) + オプション機器


  最大構成での仕様をあげると次のようになります。

    プロセッサ     6809(MC68B09E相当品 クロック2.0MHz)×2
    RAM            メインRAM 128KB、サブRAM 5KB、ビデオRAM 96KB
    ROM            F-BASIC ROM 32KB、イニシエータROM 8KB
                   サブモニタROM 32KB
    漢字ROM        JIS78準拠第1水準漢字・非漢字 128KB
    表示能力       640x200ドット     8色 2面
                   320x200ドット  4096色 1面    から選択
    フロッピー     320KBフロッピーディスクドライブ×2
    テープ         FSK方式にて記録、約1600bps
    サウンド       BEEP音
                   標準FM音源(YM2203)
                   WHG増設FM音源(YM2203)
                   THG増設FM音源(YM2203)
    その他         論理演算・直線補間LSI、時計LSIなど
    オプション機器 インテリジェントマウス(MSXマウス)、MIDIアダプタ、RS-232Cイ
                   ンタフェース


□ROMファイル

  XM7.exeを起動するためにはFM77AVのROMをファイル化したものが必要です。次にあげ
  るファイルを添付のSAVEROMユーティリティを使用して各自準備してください。
  FM77AVシリーズの実機をお持ちでない方は使用できませんのでご注意ください。

  ファイル名    サイズ  CPU    物理アドレス

  FBASIC30.ROM  31744  メイン $38000-$3FBFF
  INITIATE.ROM   8192  メイン $36000-$37FFF
  KANJI   .ROM 131072  (漢字) JIS78 第1水準漢字・非漢字
  KANJI2  .ROM 131072  (漢字) JIS83 第2水準漢字 (なくても起動します)
  SUBSYS_A.ROM   8192   サブ  $1E000-$1FFFF
  SUBSYS_B.ROM   8192   サブ  $1E000-$1FFFF
  SUBSYS_C.ROM  10240   サブ  $1D800-$1FFFF
  SUBSYSCG.ROM   8192   サブ  $1D800-$1DFFF (4バンク)

  ROMファイルはXM7.exeと同じディレクトリに配置してください。

  ※INITIATE.ROMについてはXM7起動後に、メモリ上でパッチを当てています。これ
    は次の2点を改良するためのものです。

    1.フロッピーディスクドライブのモータ回転待ちを省略する。(初期化時)
    2.機種判別用IDコードをFM77AV相当に設定。(リセット毎)
    3.ブート処理の変更を行う。(リセット時)

  ※KANJI.ROMがJIS83準拠の場合、内部でJIS78準拠エミュレーションを行います。


□コマンドライン

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

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

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

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

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

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


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

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

  ・ディスクファイルをステータスバーのアクセスランプ部へドラッグ＆ドロップする
    ことで、指定されたドライブにディスクをマウントします。

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

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


□キーボード

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

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

  ☆日本語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 [変換]
    FM-7 [SPACE(中)] → JP106 [ひらがな]
    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 [XFER]
    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フォーマットを採用しています。メニューよりファイル
  設定・録音・早送り・巻き戻しなどの操作を行います。


□サウンド出力

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

  FM-7モード時のみ、THG音源により標準OPNと独立した本体側PSGのエミュレーション
  が行われます。

  モータ制御リレー動作音・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)相当のエミュレーショ
  ンをサポートしています。

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

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


□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ファイル内のメディアを切り替えます。

  テープ(A)
    開く(O)               テープイメージファイルを設定します。
    取り外す(E)           テープイメージファイルを取り外します。
    巻き戻し(W)           １つ手前まで巻き戻します。
    早送り(F)             １つ先まで早送りします。
    録音(R)               録音可能状態、再生状態を切り替えます。

  表示(V)
    フロッピーディスク(F) FDCウインドウを表示します。
    FM音源/PSGレジスタ(O) FM音源/PSGレジスタウインドウを表示します。
    FM音源/PSGﾃﾞｨｽﾌﾟﾚｲ(D) FM音源/PSGディスプレイウインドウを表示します。
    サブCPUコントロール(C)サブCPUコントロールウインドウを表示します。
    論理演算/直線補間(L)  論理演算/直線補間ウインドウを表示します。
    キーボード(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)       マウスエミュレーション状態を一時的に切り替えます。
    時刻アジャスト(A)     VMのRTCの時刻をWindows側に合わせて再設定します。
    画面キャプチャ(S)     現在の画面をビットマップファイルにセーブします。
    縮小画像キャプチャ(R) 現在の画面を320×200ドットに縮小してセーブします。
    WAVキャプチャ(W)      サウンド出力をWAVファイルにロギングします。
    新規ディスク作成(D)   新しいディスクイメージファイルを作成します。
    新規テープ作成(T)     新しいテープイメージファイルを作成します。
    VFD→D77変換(V)       VFD形式のイメージファイルをD77形式へ変換します。
    2D→D77変換(2)        2D形式のイメージファイルをD77形式へ変換します。
    VTP→T77変換(P)       VTP形式のイメージファイルをT77形式へ変換します。

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

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


□互換性

  ビデオディジタイズ機能、プリンタポートはVMレベルではサポートしていますが、
  I/Oエミュレーションを行わず仮想的に動作します。

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


□速度

  V2は特に画面描画まわりで、V3よりも確実に負荷が下がっています。

  リアルタイムでエミュレーションを行うための目安としては、最低限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.)


□V2開発終了によせて(V2.5L10のものを一部修正しています)

  やっとここまで来たか、やっと終わったかというのが正直な感想です。

  ちょうど1年半前にVersion1.00をリリースしたときは単なる通過点という感じでし
  たが、今回は明確な区切りがつけられたと思います。1999年のゴールデンウィーク
  後の5月上旬から中旬にかけて基本設計や構想を練っていたのですが、その時
  考えていた機能、目標としていた互換性を現実のものとして実現できました。

  特に互換性については当初から明確な思想をもち、「メモリの中だけで動作する
  完全な仮想マシンを作る」という方針で開発にあたりました。その結果はVM部という
  形で結実しています。現在のC言語,C++言語,x86アセンブリ言語がこの先何年通用
  し、何年読み書きできる人が残るか私にもわかりませんが、少なくとも言語レベル
  で通用する間は、このXM7のVM部もソースファイル群として生き残るでしょう。
  すなわちそれは、FM-7/77AVというハードウェアの電子文書化をも意味します。

  汎用的な仮想マシンを作成する以上、プラットフォームに依存しない移植性の高さ
  も必然的に求められます。今回の開発で掲げた移植性の高さ、対応プラットフォーム
  についても、V2こそWin32のみとなりましたがV1では当初予定していた3機種を大幅に
  上回る7機種へ移植することが出来、移植性の実証という意味で大きな成果をあげる
  ことができました。

  また仮想マシンを制御しユーザインタフェースを担う部分については、V2.2で構造を
  一新しWin32 APIのみで記述したものを新しく作成しました。V1ではWin16でOWL、Win
  32でMFCといったクラスライブラリを使っていましたが、V2.1の時点でこれ以上速度
  を稼ぐことが難しくなったため、コンパイラを変更すると共にWin32依存部分を全面
  的に作り直すという作業を行いました。開発効率はMFC使用時に比べると若干落ちま
  したが煩雑になりがちな部分も比較的スッキリと記述することができ、最終的には大
  幅な機能向上が図れたと思います。特にFM音源ディスプレイは気に入っている機能の
  一つです。

  今回の開発では開発着手から終了まで2年近くを要しています。以前私が手がけた、
  ソーサリアンのX680x0への移植でもやはり2年近い時間がかかりました。大きな成果
  を  あげるには、どうしてもある程度の期間とその期間内にかける時間、時間消費に
  伴う犠牲を乗り越えていかないと実現しない  ということを今にして強く感じます。
  ただ後悔はしていません。それは私が望み、成果を夢見てやってきたことですから。

  何にせよこのXM7というエミュレータは、今だけでなくこの先の数10年にわたって、
  少なくとも私の心の中にはいつまでも残ることでしょう。

  XM7開発開始からの26ヶ月の思い出と共に、私の人生の中の、ある一時期として。

  <XM7(V2) 開発スペック>

  設計開始日時   1999年5月7日
  開発開始日時   1999年5月28日
  開発終了日時   2001年7月22日 (注:V2.5L30)

  動作機種/OS    Win32
  開発言語       C,C++,アセンブラ

  開発期間       26ヶ月
  累計消費日数   323日+α
  累計消費時間   1075時間+α

  主要ハード     PC/AT互換機
                   MSI MS-5169 Rev2.1, AMD K6/K6-III/K6-III+ 300-550MHz
                   Matrox Millennium G400, Creative SoundBlasterAWE64 Gold
                 X680x0
                   X68kXVI(CZ-634C), 68000 24MHz
                   まーきゅりゆにっとV4, Neptune-Evolution
                 PC-98
                   PC-9801BX4, Am5x86 160MHz
                   Canopus PowerWindow T64S, PC-9801-86
                 FM-7
                   FM77AV40EX
                   ビデオカード, 256KB RAMカード, WHG音源カード

  主要開発言語   Microsoft Visual C++ 4.0 (Standard Edition)
                 Borland C++ Builder 5 (Professional Edition)
                 Borland C++ 4.0
                 Netwide Assembler 0.98
                 その他TC,TASM,HAS,HLK等


□開発スペック

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

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

  主要ハード     開発マシン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 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 V2.9L52aに関するFAQ

  <概要>

  Q:XM7はFM-7・FM77AVを100%エミュレートしていますか。
  A:していません。大半のソフトを動かすのに支障がない程度です。イメージ的には
    98%程度と考えて下さい。
  Q:残り2%は具体的にはどこですか。
  A:最大の欠点はディスクアクセスが速すぎることです。これが原因で動作異常を
    起こすソフトがあります。それ以外にも問題点は幾つかあります。
  Q:エミュレートをFM-7・FM77AVに切り替えできるようですが。
  A:FM77AVモードでは、XM7 V2とほぼ同等の動作となります。
    FM-7モードであってもディスク・漢字ROM・FM音源は使えます。このため厳密には
    FM-7モードといっても、MMRのないFM-77L2に近い動作をします。
  Q:各バージョンのXM7の間でのステートファイルの互換性は。
  A:XM7 V3のステートファイルはV2の上位互換仕様となっているので、XM7 V2で作成
    したステートファイルをXM7 V3でロードすることが可能です。逆にXM7 V3で作成
    したファイルをXM7 V2でロードすることはできません。
    また、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、VM7 V0.1のROMイメージは使えません。XM7 V2はFM77AVのROMイメージ
    を要求するためです。ただしこの逆は簡単な変換を施してやることで可能です。
    VM7 V0.2が要求するFM77AVのROMイメージはファイル名を含めてXM7 V2と同じ仕様に
    なっているので、そのまま利用できます。

  <ディスク>

  Q:2D/2DDディスクを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:全画面モードの設定を"1280x800"にするにはどうすればよいですか。
  A:設定ファイル「XM7.ini」の「DDResolution」項目を「4」に設定してください。
    設定メニューから設定できないのは、単にスペースがなかったからです。
  Q:他のエミュレータでよくあるようなフレームレートの設定はないのですか。
  A:ありません。XM7ではフレームレートは常に"自動"として扱われます。最小2フレー
    ム、最大60フレームの範囲内で負荷に応じて変化します。
  Q:フレームレートを確認するにはどうすればよいですか。
  A:スケジューラウインドウを開いてみて下さい。"Frame Rate"の項目2つで確認でき
    ます。Totalはウインドウオープン後の平均、Latestは最近2秒間の値です。
  Q:ソフトによってフレームレートが急激に落ちたり、テンポ落ちが起こります。
  A:直線補間・論理演算LSIの使われ方によって負荷が大きく変化するためです。例えば
    "AMNORK"や"Dragon Buster"は負荷が非常に大きいため、落ちやすくなります。
  Q:スケジューラウインドウで、メインタイマーの速度が交互変化しています。
  A:メインタイマーは4.9152MHzのXtalから作られています。つまり周期が2.0345msで
    あり、XM7では2.034msと2.035msとを交互に発生させて近似しています。

  <サウンド>

  Q:FM音源・PSG音源・BEEP音源の各ボリュームを調節したいのですが。
  A:今までは未対応でしたが、V3.4L30からボリューム比の変更に対応しました。
  Q:ステレオ設定で音量バランス(パンポット)がきちんと分かれていないようです。
  A:V3.4L30から「チャンネルセパレーション」の設定が可能になりました。デフォルト
    では従来バージョンと同じ左右70%:30%近辺の割合になるようにしています。このた
    め音が中央に寄ります。
  Q:オプション設定でWHG音源,THG音源をカットすると処理が軽くなりますか。
  A:内部処理ではリセットの度に使用フラグをクリアし、本当に使われた場合だけソフ
    トウェア合成を行っています。このため未対応ソフトの場合はOFFにしている状態
    と変わりません。
  Q:オプション設定で標準OPN音源(FM-7モード時),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:デバッガの使い方がわかりません。
  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:ビデオディジタイズカードはI/Oエミュレーションを行っていないため、特にどう
    ということはありません。VMレベルでカード無しとして処理されるのみです。

  <ツール>

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

  <個別の互換性>

  Q:"MAGUS"が動作しません。
  A:パッチを当てないと動作しません。XM7の公式掲示板のログを参照して下さい。
    これはCLR命令がメモリをRead→Writeする一瞬のReadタイミングで同期をとるため
    です。(なお、V3.3L31/V2.8L31でこの問題に関わる対策処理を追加しています)
  Q:"デスフォース"のオープニングでハングアップします。
  A:CPU速度を変更して下さい。たとえばメインCPU、サブCPUともに1752に設定すると
    動作します。これはCPU間の通信制御が甘く、お互いの進行が少しズレただけで
    デッドロックするからです。
    (V3.3/V2.8以降ではデフォルト設定でほぼ動作するように改善されています)
  Q:「METAL-X-」シリーズで敵が見えません。
  A:画面描画タイミングを表示期間終了直後に変更してください。
    これは敵機の消去・描画処理の開始をVSYNC期間突入まで待機していて、VSYNC期間
    が終了した時点で画面のレンダリングを開始しているため、敵機の描画が完了する
    前にVSYNC期間を抜けてしまうと、レンダリング結果にキャラクタが描画されないの
    が原因です。

  <その他>

  Q:今後のバージョンアップ予定は。
  A:バグフィックスを除き、原則行いません。また更新は不定期となります。
  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
