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

  FM-7 EMULATOR XM7 (V1.1L77 - Final Release)
        (三度目の正直？二度あることは三度ある？)

  for Win32
  Copyright (C) 1999-2015 ＰＩ．
  Copyright (C) 2001-2015 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.1L70→V1.1L77の変更点一覧です。

  <新規>
    ・設定ダイアログに「その他」ページを追加(以下の変更点はほとんどここに集約し
      ています)

  <変更>
    ・サブウインドウのポップアップ化機能の切り換えがGUIで行えるように変更(デフ
      ォルトではONになっています)
    ・ファイル選択ダイアログの種類を標準的なものとWindows 95以来のものの2種類か
      らユーザーがGUIで選択できるように変更(デフォルトではOFF(Windows95以来のも
      の)になっています)
    ・"MAGUS"に対する対策処理で"リザード"が動かなくなっていたので対策処理をユー
      ザーがGUIで選択できるように変更 ("MAGUS"についてはEM-7(FM TOWNS版)のドキ
      ュメントに解決法があるのでデフォルトではOFFになっています)
    ・FM-8モード時の裏RAMのソフトウェア切り換え機能を「その他」ページに移動
  　・「実行に同期」がオフの場合にFM音源レジスタ/ディスプレイウインドウが更新さ
      れないように仕様を変更

  <修正>
    ・マルチページレジスタ(メイン $FD37)の書き込み内容がパレットレジスタの内容
      を書き換えない限りパレットレジスタウインドウに反映されない問題を修正
    ・物理アドレスモード時に$30000〜$3FBFFにMMRが適用される問題を修正
  　・物理アドレスモード時に下位16ビットが同じアドレスが複数アドレスヒストリに
      登録されていると、論理アドレスモード時に同じアドレスが複数表示される問題
      を修正
    ・メモリダンプウインドウのアドレスモードが逆アセンブルウインドウのアドレス
      入力ダイアログに影響する問題を修正
  　・FM-7/8モード時に逆アセンブルウインドウの物理アドレスモードが選択できてし
      まう問題を修正

W
□動作環境

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

  ・Windows95/98/Me/NT4.0/2000/XPはマイクロソフト社のサポートが既に終了していま
    す。セキュリティ上のリスクを理解したうえでご利用ください。

   ・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、Win8.1、Win10)では一
    部キー入力に制限があります。問題がある場合はXM7のキーマップ設定機能を使い、
    キーボードの再割り当てを行って下さい。

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

  ・Windows10上での動作はBuild 10240,VMware上でのBuild 10565にて行っています。


□仮想マシン

  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マウス)、マウスセット(FMマウス)、
                   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フォーマット・2DDフォーマット・VFDフォーマット・D77
  フォーマットの4種類をサポートしています。

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

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

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


□テープファイル

  テープファイルは独自の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シーク音のエミュレーションが行えます。

  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側のマウスポインタが表示されなくなります。


□プリンタ

  現在のバージョンでは純正ドットインパクトプリンタ(MB27403)のサブセット版をエ
  ミュレーションしています。

  XM7LPのドキュメントから抜粋した仕様は以下の通りです。

  □使用方法
    ・印刷機能を使用するには、LPRINT、LLIST、HARDC（ビットイメージ出力にも対応
      しています）等の印刷用BASICコマンドや、プリンタポートを制御するプログラム
      等を実行して、印刷データを出力した後、「ファイル(F)」-「印刷(P)...」をク
      リックすると、印刷ダイアログボックスが現れます。
      あとは通常のWindowsアプリの印刷の場合と同様です。

    ・一度印刷されたデータは消去されます。
      次の「ファイル(F)」-「印刷(P)...」では、直近の印刷の後に出力されたデータ
      のみが印刷されます。

  □仕様、注意点
    富士通純正ドットインパクトプリンタ「シリアルドットプリンタ MB27403」の機能
    を一通り実装することを目標にしていました…が諸般の事情でXM7LPは開発中止とな
    ってしまいました。

    ・MB27403は、EPSON製「MP-80 TYPE III」のOEM、すなわち実質的な同一機種である
      と仮定しています。（下記参考文献の記述内容より推測しました。）
    ・MB27403及び MP-80 TYPE III の詳細技術情報が未入手のため、仕様の一部は「M
      X-80 TYPE II」（「MP-80 TYPE II」の海外版）および「FX-80」（「FP-80」の海
      外版）のマニュアル（参考文献(iii)および(v)）よりの推測です。
    ・FX-80 のマニュアルには MX-80 TYPE III の情報が載っていました。

    ・対応しているプリンタ制御コードは、9-Pin ESC/P のサブセットです。
      具体的には、以下の制御コードに対応しています。

      - CR  (0x0d) --- 復帰（改行なし）
      - LF  (0x0a) --- 復帰改行
      - HT  (0x09) --- 水平タブ
      - VT  (0x0b) --- 垂直タブ ※1
      - FF  (0x0c) --- 改ページ
      - BS  (0x08) --- バックスペース ※2
      - DEL (0x7f) --- 1文字削除

      - [ESC]@ (0x1b21)   --- 初期化 ※3
      - [ESC]0 (0x1b30)   --- 改行量を1/8インチに設定
      - [ESC]1 (0x1b31)   --- 改行量を7/72インチに設定
      - [ESC]2 (0x1b32)   --- 改行量を1/6インチに設定
      - [ESC]3 (0x1b33)   --- 改行量を1/216インチ単位で指定
      - [ESC]A (0x1b41) --- 1/72インチ単位の改行量の指定
      - [ESC]K (0x1b4b) --- 8ドット単密度ビットイメージモードの指定
      - [ESC]L (0x1b4c) --- 8ドット倍密度ビットイメージモードの指定
                            （HARDCコマンドのビットイメージ出力に用いられる）

      - [FS]&  (0x1c26) --- 漢字モードの指定（漢字ON）
      - [FS].  (0x1c2e) --- 漢字モードの解除（漢字OFF）

      ※1 MB27403/MX-80IIIでは「LF」と同じ動作。（参考文献(i)および(v)より）
      ※2 MB27403/MX-80IIIでは「DEL」と同じ動作。（参考文献(i)より）
      ※3 暫定実装：MB27403の仕様（参考文献(i)）に記述なし

    ・文字（英、数、半角カナ、グラフィックス記号）及びグラフィックデータは、プ
      リンタのドットを模したビットイメージで表示されます。
      （英数半角カナ文字は表示の選択が可能：後述。）

    ・グラフィックス記号（文字コード 0x80-0xa0, 0xe0-0xff）は、常にビットイメー
      ジとして印刷されます。

    ・プリンタ側で漢字を出力できます。
      ESC/P制御コードのFSシーケンス(上述)で漢字ON/OFFを行います。
      漢字コードはJIS(JIS X 0208-1983)です。
      （出力の有無の選択が可能：後述。）

    ・プリンタ機能を有効化するか否かの選択ができます。
      「ツール」-「設定」-「ポート」ページでプリンタ「有効」にチェックすると、
       プリンタ機能が使用可能になります。
       上記で「有効」のチェックをはずしたした場合、プリンタポートにはプリンタが
       接続されていない状態となり、プリンタ機能は使用できず、代わりに「電波新聞
       社ジョイスティック」が使用できるようになります(従来のXM7と同じ動作)。

    ・英数半角カナ文字の表示にOS側のフォントを使用するかを選択可能です。
      「ツール」-「設定」-「ポート」ページで設定します。
    ・OS側のフォントを使用しない場合は、文字はプリンタのドットを模した
      ビットイメージとして印字されます。

    ・プリンタ側で漢字を出力するかを選択可能です。
      「ツール」-「設定」-「ポート」ページで設定します。
      ・選択しない場合は、漢字データは1バイトデータとして
        「そのまま」表示されます。（文字化けが起こります。）

    ・余白は、左右が3.4mm、上が11.7mm、下が5.9mmです。
      （参考文献(iii)の記述よりの推測です。）

    ・BASICコマンドの完了途中で「印刷(P)...」を行うと、出力途中の結果が印刷され
      ます。（完了に比較的長い時間がかかるHARDCコマンドの場合に、特に顕在化しま
      す。）
      これを防止する（コマンド終了まで印刷メニューをdisableする、等）うまい方法
      が現時点では見つけられないため、これは現時点での「仕様」とさせてください。

    ・XM7 をリセットしても、出力された未印刷のデータは消去されません。
      （とりあえずこうしてみました。ちょっとおかしな気もしますが、
        「コマンド終了」=「印刷完了」と考えれば、これでよいような気もします。
        もし動作を変更するとしても、次のバージョン以降とします。）

    ・未印刷のデータは、ステートファイルのセーブ・ロードには対応していません。
      未印刷のデータが存在する状態でステートファイルにセーブしても、その未印刷
      のデータはセーブされません。ロードの場合も同様です。

    ・未印刷のデータが存在する状態で XM7 を終了すると、その未印刷のデータは印刷
      されずに破棄されます。

  □制限事項：

    ・MB27403のプリンタ制御コード／シーケンスのうち、未実装のものがあります。
      具体的には以下のものです。

      - BEL (0x07) --- ブザー
      - SO  (0x0e) --- 横2倍拡大文字の指定
      - SI  (0x0f) --- 縮小文字の指定
      - DC2 (0x12) --- SI機能の解除
      - DC4 (0x14) --- SO機能の解除

      - [ESC]C     (0x1b43)   --- 1ページ当りの行数の指定
      - [ESC]C NUL (0x1b4300) --- 1ページ当りのインチ数の指定
      - [ESC]J     (0x1b4a)   --- 改行量を1/216インチ単位で単発で指定
      - [ESC]D     (0x1b44)   --- 水平タブの設定
      - [ESC]Q     (0x1b51)   --- 印字桁数の設定
      - [ESC]N     (0x1b4e)   --- スキップパーフォレーションの設定
      - [ESC]O     (0x1b4f)   --- スキップパーフォレーションの解除
      - [ESC]G     (0x1b47)   --- 二重印字の設定
      - [ESC]H     (0x1b48)   --- 二重印字の解除
      - [ESC]S     (0x1b53)   --- スーパースクリプト／サブスクリプトの設定
      - [ESC]T     (0x1b54)   --- スーパースクリプト／サブスクリプトの解除
      - [ESC]E     (0x1b45)   --- 強調文字の設定
      - [ESC]F     (0x1b46)   --- 強調文字の解除
      - [ESC]-     (0x1b2d)   --- アンダーラインの設定／解除
      - [ESC]W     (0x1b57)   --- 横2倍拡大文字の設定／解除
      - [ESC]8     (0x1b38)   --- 紙検出信号の無効化
      - [ESC]9     (0x1b39)   --- 紙検出信号の有効化

    ※ 「[ESC]B - 垂直タブの設定」は、MB27403には実装されていなかった可能性が高
      いです。（参考文献(i)及び(v)より。）

    ・水平タブは8文字で固定です。

    ・印刷用フォントのビットイメージは、プリンタ内蔵フォント（9x6ドット）ではな
      く、画面表示用のビットイメージフォント（8x8ドット）で代用しています。


  □参考文献
    XM7LPにおける参考文献を挙げておきます。

    (i)  「富士通 FM-7 ユーザーズマニュアル システム解説  1982年」
    (ii) 「EPSON ESC/P Reference Manual  June 2004」及び「（同） December 1997」
    (iii)「EPSON MX-80 TYPE II Operation Manual  81.10-10」
    (iv) 「ブラザー工業株式会社 TD-4000 ESC/Pコマンドリファレンス Version 1.20」
           及び「（同） Version 1.03」
    (v)  「EPSON FX SERIES PRINTER User's Manual Vol.2 REFERENCES  1984」


□MIDI

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

  ただし、USARTのエミュレーションを厳密に行っているわけではないので、動作しな
  いソフトがないとはいえません。また、MIDI入力や純正MIDIアダプタに搭載されて
  いるPIT(i8253相当)には対応していません。PITのエミュレーションに対応していない
  という点では、厳密にはOh!FM 1990年1月号掲載の自作MIDIカードの仕様に近いと言え
  ます。

  実際に出力するためには、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モードにセットします。
    印刷(P)               印刷ダイアログを表示します。
    終了(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ディスプレイウインドウを表示します。
    パレットレジスタ(P)   パレットレジスタウインドウを表示します。
    サブ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のバージョン情報を表示します。


□互換性

  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はＰＩ．および、たけがみりうが著作権を所有するフリーソフトウェア(※)です。
  無償かつ書庫を改変しない場合に限り、原則として再配布を認めます。
  ただし、実行ファイルを改変して他の言語に対応されたもの等についてもSNS等での画
  像公開や再配布は一切認めません。

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

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

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

  ROMEO対応処理のソースはうささんに提供していただきました。
  プリンタ対応処理のソースはBen.JPさんに提供していただきました。
  バブルカセット対応処理のソースはトマさんに提供していただきました。
  CPUコアの再現性向上にはkeisukeさん、トマさんのお二人に協力していただきました。

  ※ここでいう「フリーソフトウェア」というのは、Free Software Foundationのリチ
    ャード・ストールマン氏が提唱するものと違い(もちろん、これは氏の意見を否定す
    るものではありません)、パソコン通信時代から日本で言われていた「フリーソフト」
    「フリーウェア」の類いになります。これはこれでどうも単に「使用者は何をして
    も構わない無料のソフト」と勘違いされて誤解を生むようですが(10年以上前に某
    CRICがこの件でやらかしてましたが)、それも違いますので念のため。


□開発終了によせて L10(滅)

  今回は無理矢理作らされた感はないんですが(ぉぃ)。前回書いたとおり今度こそ最後
  だからComrade-HGにならってL77にしてみました。そんなわけで、今回は前回のいろい
  ろぶちまけ大会にも若干の修正を入れてみました。

  何回かドキュメントにも書いたことがあるとは思いますが、XM7 V3(XM7改)の開発の発
  端は非アクティブプレーンに対してアクセスがあった場合に論理演算が動作しないと
  いうバグを見つけたためで、それだけをＰＩ．さんに伝えればよかったのに、いつも
  の通り面白がってAV40EX相当の機能を実装していたところをＰＩ．さんに見つかって
  しまい、本家への統合を提案されたのでそれを受けた、というところから始まってい
  ます。当時24歳(年齢詐称はしていません(汁))。

  その後V3.0L30/V2.5L20の時にＰＩ．さんはXM6の開発に専念されるということでこち
  らで微修正版(V3.0L31/V2.5L21)を公開したら、数日後にある事件がやってきました。
  とある市販ソフト(今は亡き蜂のマークの会社の音声合成…といえばわかるでしょうか)
  に対応して欲しいという要望メールが来たんですが、メール本文だけならいいんです
  が、よりによってそのソフトのディスクイメージを添付してきました。こちらから
  「著作権侵害になるのでそのようなことはやめてほしい」と返事を返したところ、相
  手は「作者自身からいただいたので問題はない」 (市販ソフトとして発売された以上
  それはまずいのでは？)とか「XM7の開発に逆行する」(当たり前ですが、XM7の開発方
  針を決めるのはその人ではありません) とか言い出して「それでも開発を続けられる
  なくなるのでやめてほしい」と返事を出すと、「私は著作権関連の仕事をしている。
  謝罪しろ」と訳のわからない逆ギレ。こういうヤツに限ってエミュレータの開発資料
  ともなるソフトは大量に持っているようで非常に迷惑です。ちなみに「ある市販ソフ
  ト」はＰＩ．さんからV3.1用のサウンド周りのソースをいただいたので無事動くよう
  になったはずです。その騒動の言い出しっぺがどうなったかは知らないし知りたくも
  ないですが。
  ＃当時NIFTYのRTC(チャット)で散々ネタにしていたこっちもこっちですが。ちなみに
    統合画像ビュアー"ＶｉＸ"の作者のK_OKADAさんもお気に入りのネタだったようです。

  次もまた市販ソフト(今度は今ではすっかり大手になった会社のゲーム)が動かない云
  々なんですが、 念のためZIPファイルの中身だけ確認したら、どう見てもあからさま
  に違法サイトから落としてきたファイルだったという…あまりにもアレなので即刻処
  分しました。もちろん前回のようなこともあったので変な逆ギレをされても困るし、
  相手には「返事を出していません」。

  それから数年は、目立つようなイタい人も少なく(一番イタいのは俺か(爆笑))、静か
  になっていたのですが(そうでもない？)、 割と最近(とはいっても3年前)になって出
  てきたMESSの直線補間/論理演算のソース盗用問題。 実はこの件に初めて触れたのは1
  年前でTwitterでGIMONSさんのツイートにボソッと返答したところ、空気の読めない
  AW(一応、仮名)というのが「私たちのコミュニティに来ませんか？」とか言い出しま
  した。こっちは盗用された側なのになんであいつらのコミュニティに行かなければな
  らないのかわからなかったので断ったところ、AWは問題のツイートを削除してからネ
  チネチと粘着するようになりました。また、その頃にドライバの担当者である方から
  も、「ソースを盗む意図はなかった」とのメールが来ました。直線補間に関しては連
  絡さえ入れていただければ参考にされるのは自由ですが(そもそも現在のXM7の直線補
  間は◎h!FM 1986年5月号の「6809機械語によるグラフィック処理の技法 第6回」をベ
  ースに実機に合わせたアルゴリズムに変更しただけですから)、後出し的にそういうこ
  とを言われても…と。 ましてや論理演算部はＰＩ．さんに許可を取らないといけない
  わけですが(もっとも、 ＰＩ．さん的には10年以上前にMESSへの統合を行うならアル
  ゴリズムについては使っていい、的なニュアンスの発言はありましたが)…もうお国柄
  とか文化とかの違いがあるから 「仕方なく」黙認することにしました。もうあのKYな
  AWの相手なんかしたくないし。…で、AWがらみの件ですっかり精神的にぶっ壊れてい
  ろいろな方面にご迷惑をおかけしてしまったわけですが、これはまた別の話。AWのほ
  うからブロックしてくれたのでだいぶスッキリしました。本当になんなんだろうあの
  物体は…。

  すごく(無駄に)長文になってしまいましたが、最後に。
  パソコン通信からインターネット時代に移り変わり、フリーソフトウェア (繰り返し
  ますがFSFの提唱する物とは意味が異なります)を取り巻く環境もすっかり変化してし
  まったと考えさせられる14年でした。 XM7はたぶんこれで(今度こそ)最終バージョン
  になると思いますが、自分に感謝しながら使っていただいた方もいらっしゃると思っ
  ているので、そのような方々に支えられてきたからこそ14年も続けられたんだと思い
  ます。こちらこそ感謝したい気持ちでいっぱいです。本当にありがとうございました。
  それでは皆さん、お元気で。

  でもさよならは言いません。いつかまたどこかで。ぼにょんび(FTOWNS謎)。

  ＃ＰＩ．さんの「開発終了によせて」より長文になるとは(滅)

  −−−−−−−−−−−−−− きりとりせん −−−−−−−−−−−−−−−−−

  …ここまでが前回のL70。まさか修正版をこんなに早く出すハメになるとはorz
  今度こそ最後のつもりなので、最初に書いたとおり、せっかくなのでレベルナンバー
  をL77にしてみました。 上の文章にも細かいかもしれないしそうでもないかもしれな
  い修正は入れてます。

  で、MESS問題ですが、あっちの(GPLの)世界では非GPLのソースを引用(盗用！？)して
  も「書き直せばいいじゃないか」で済まされるようですね。実際、今回やられました
  が。まぁ、あっちの方面の人にはいろいろ言いたいことがあるけどスペースがなくな
  るから、今度こそ、ぼにょんび(FTOWNS謎)。


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

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

  主要ハード     開発マシン1 (V3.4L51〜V3.4L77)
                   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 670, 2GB)
                   Creative SoundBlaster X-Fi Titanium Professional Audio
                   Windows 7 Ultimate Service Pack 1(x64)
                   Windows Vista Ultimate Service Pack 2(x64) on VMware Player
                   Windows 8.1 Pro RTM(x64) on VMware Player
                   Windows 10 Insider Preview Build 10565(x64) on VMware Player
                 開発マシン2 (V3.4L50a〜V3.4L77)
                   Sony VAIO Sシリーズ13P SVS13A1AJ (Intel HM77 ExpressChipset)
                   Intel Core i7-3520M(Ivy Bridge) 2.90GHz, 8GB RAM, 512GB SSD
                   Intel HD Graphics 4000 / NVIDIA GeForce GT 640M LE (2GB)
                   Realtek High Definition Audio
                   Windows 7 Professional Service Pack 1(x64)
                 開発マシン3 (V3.4L50〜V3.4L77)
                   IBM(Lenovo?) 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) ←戻した(汗
                 評価マシン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
                   Windows 7 Professional Service Pack 1(x86)
                 評価マシン2 (V3.4L21a〜V3.4L77)
                   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
                 評価マシン3 (V3.4L62〜V3.4L77)
                   Acer Iconia W4-820/FP
                   Intel Atom Z3740(Bay Trail-T) 1.33 GHz, 2GB RAM, 64GB eMMC
                   Intel HD Graphics, Realtek High Definition Audio
                   Windows 10 RTM Build 10240(x86)
                 評価マシン4 (XM7LE V2.9L63)
                   FUJITSU/NTT docomo F-07C
                   Intel Atom Z650(Oak Trail) 1.2 GHz, 1GB RAM, 32GB eMMC
                   Intel Graphics Media Accelerator 600,Realtek I2S Audio Codec
                   Windows 7 Service Pack 1(x86)
                 過去の開発マシン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.4L21〜V3.4L40)
                   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
                 過去の開発マシン3 (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
                 過去の開発マシン4 (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
                 過去の開発マシン5 (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(謎)
                 過去の開発マシン6 (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-77L4, CZ-600DB
                   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.1L77に関するFAQ

  <概要>

  Q:XM7はFM-7を100%エミュレートしていますか。
  A:していません。大半のソフトを動かすのに支障がない程度です。イメージ的には98%
    程度と考えて下さい。
  Q:残り2%は具体的にはどこですか。
  A:最大の欠点はディスクアクセスが速すぎることです。これが原因で動作異常を起こ
    すソフトがあります。それ以外にも問題点は幾つかあります。
    ただし、現在のXM7にはディスクアクセスにウェイトを挿入する機能がありますので
    それを有効にすれば動くソフトもあるかと思います。
  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、eFM7(eFM77)のROMイメージは使え
    ないのですか。
  A:EM-7やFEMU7のROMイメージは使えません。
    VM7・eFM7・eFM77が要求する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では「FM高速書き込みモード」がそれっぽく見えるくら
    いなので(これはむしろデメリット?)、あまりメリットがありません。
    逆にデメリットとしては、毎フレームの毎ラスタごとにレンダリングを行うように
    なるため、マシンへの負荷が増え、フレームスキップ等が発生しやすくなります。
  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音源/PSGディスプレイ]で開くFM音源ディスプレイウインドウ上の鍵盤
    に対して以下の操作を行えます。
      左クリック      ：指定されたパートのミュート状態を切り換えます。
      左ダブルクリック：指定されたパート以外を全てミュート状態にします。
      右クリック      ：全てのパートのミュート状態を解除します。
    なお、この機能はROMEOで出力しているパートに対しては無効です。

  <キーボード>

  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"のインタフェース
    です。プリンタポートに接続して使います。"ゼビウス"などが対応しています。
    なお、電波新聞社JOY I/Fとプリンタ出力機能の併用はできません。どちらか一方の
    みの使用となります。

  <日本語通信カード>

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

  <マウス>

  Q:タッチパネルでのマウスエミュレーションはできますか。
  A:できません。マウスは移動距離を相対座標で返すのに対して、タッチパネルは絶対
    座標を返してくるためです。(名称がややこしいですが)ノートPCのいわゆる「タッ
    チパッド」でのマウスエミュレーションはできます。
  Q:マウスセットのPTMのEクロック使用時の割り込み間隔精度が甘いようですが。
  A:仕様です。現状ではとりあえず純正マウスドライバが動くように,最低限Cクロック
    で駆動した場合の精度はある程度確保できるようになっていますので、Eクロックの
    精度は重視していません。

  <デバッガ>

  Q:デバッガの使い方がわかりません。
  A:逆アセンブルウインドウで左クリックするとブレークポイントを設定します。また
    ブレークポイントウインドウで左クリックすると該当アドレスへジャンプします。
  Q:左クリック・右クリック・左ダブルクリックの機能があるウインドウは。
  A:左クリックについては逆アセンブル・ブレークポイントの各ウインドウ、右クリッ
    クはCPUレジスタ・逆アセンブル・メモリダンプ・ブレークポイントの各ウインドウ、
    左ダブルクリックはCPUレジスタ・メモリダンプの各ウインドウです。
  Q:CPUレジスタやメモリの書き換え機能はありますか。
  A:あります。各ウインドウで変更したいCPUレジスタ/メモリアドレスを左ダブルクリ
    ックしてください。書き換えた内容はCPUレジスタ/メモリ/I/Oポート全てに関して、
    即時反映されます。
  Q:ブレークポイントを設定すると重くなりますか。
  A:メインCPU・サブCPUともに1命令実行ごとにチェックを行うため、数%ですが重くな
    ります。
  Q:物理アドレスでの逆アセンブル・ブレークポイント設定はできませんか。
  A:できません。前者はインデックスモードでのアクセスをどうするかの問題があり、
    後者はXM7の構造上非常に難しいためです。
  Q:CPUレジスタ表示内の"IR"とは何ですか。
  A:CPUエミュレーション上設けた疑似レジスタです。NMI等の割り込み要求フラグや、
    SYNC/CWAIといった同期命令の管理を行うためのもので、"InterRupt"の略です。

  <設定>

  Q:CPU速度の設定を変更するとどうなりますか。
  A:大きくすると仮想マシンのCPU速度は速くなりますが、処理は重くなります。小さ
    くするとその逆に遅くなります。デフォルトの値は適当なベンチマークプログラム
    をでっちあげてそれを参考に決定したものなので、変更するメリットはあまりない
    と思います。
  Q:テープモータオン時のフルスピード動作とは何ですか。
  A:テープモータが回っている間だけ、仮想マシンの実行速度を上げてロード時間の
    短縮を図る機能です。
  Q:テープモータオン時のフルスピード動作がデフォルトではメインCPUのみ全力駆動
    になりますが、旧版のように速度調整省略にすることはできますか。
  A:できます。全般ページの「テープモータオン時の動作を速度調整省略にする(C)」を
    チェックしてください。
  Q:全力駆動モードとは何ですか。
  A:CPUパワーに余裕がある場合に、その余裕分だけ仮想マシンのCPU速度を上げます。
    「テープモータオン時のフルスピード動作」と異なり、タイマー間隔や時計などの
    CPU以外の部分の速度は変わりません。なお、ソフトウェアタイマーでタイミングを
    取っている場合(テープの読み書き、FLEXなど)は正常に動作しなくなりますので、
    この場合は設定をオフにしてください。
  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:パッチを当てないと動作しません。
    これはCLR命令がメモリをRead→Writeする一瞬のReadタイミングで同期をとるため
    です。また、XM7の設定で対策処理を有効にすれば無改造で動作するようになります
    (ゲームのロードが完了した時点で切り換えれば問題ないようです)。
  Q:"リザード"が動作しません。
  A:"MAGUS"の問題の対策処理が影響しています。XM7の設定で"MAGUS"への対策処理を無
    効にしてください("MAGUS"と異なり、起動前に切り換えないと起動しません)。

  <その他>

  Q:今後のバージョンアップ予定は。
  A:バグフィックスを除き、原則行いません。また更新は不定期となります。
  Q:XM7 V1.0系で対応していたWin32以外のプラットホームへの対応はどうなりますか。
  A:Win32以外への対応は、開発環境の都合もあるので考えていません。
  Q:Windows 8/8.1のModern UI版やWindows 10のユニバーサルアプリ版、Windows RT版
    の開発予定は。
  A:全くありません。
  Q:追加して欲しい機能、動くようにして欲しいソフトがあるのですが。
  A:要望はいつでも受け付けます。但し実現させるかどうかは私が決めます。
    ただし、今回で当面の最終バージョンとなるので基本的にすぐ反映されるものでは
    ないと思ってください。
    また、「このソフトに対応して欲しい」からと言ってディスクイメージを送りつけ
    るような事は絶対にやめてください。本当に開発が進められなくなります。


□連絡先

  ホームページ
  http://retropc.net/ryu/xm7/ (もう誰も見向きもしないXM7のぺーじ)

  メールアドレス
  ryu.takegami@mbg.nifty.com

  Twitter
  http://twitter.com/RyuTakegami
