﻿------------------------------------------------------------------------------

  FM-7 EMULATOR XM7 (V2.9L77TXβ3)
  based on XM7 V2.9 L77SX+z09 R3e / XM7dash V2.9 R45

  for Win32
  Copyright (C) 1999-2021 ＰＩ．
  Copyright (C) 2001-2021 Ryu Takegami
  Copyright (C) 2010-2021 Toma

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

□はじめに

  XM7 V3.4/V2.9/V1.2 L77TXは、FM-7 EMULATOR XM7のソースコードをもとにトマ氏が開
  発した改造版「XM7dash R45」を、たけがみりうが更に魔改造したものです。

  XM7はＰＩ．氏および、たけがみりうの著作物であるため、XM7dashはその使用規定に
  基づき公開しています。大変有用なソフトウェアを公開されたＰＩ．氏には深く、ト
  マ氏には浅く敬意を表します。

  本改造版はあくまでも派生版の更に迷走系派生版の一種にすぎません。

  オリジナルXM7に同等機能の追加や修正が加わり本改造版の存在意義が無くなった際は
  公開終了します。ただし、オリジナルXM7はロースペックマシン(当社比)でも軽く動作
  するよう、「シンプルに、高速に」をコンセプトの一つとして掲げているので引き続
  き公開を続けます。

  トマ氏個人の考えとしては、ソフトウェアは複数の開発者でソースコードを共有し、
  よりよいものを構築していく形が理想と考えているのだそうです。
  そういう意味で、これに賛同して第四・第五の開発者・協力者が現れるのに、ほんの
  少し期待しています…って最低でもGIMONS氏、Apollo氏、Ben.JP氏あたりの立場は?


□使用規定(ライセンス)

  本アーカイブに含まれるファイル群は、一部の例外(後述)を除き、
    ＰＩ． (Twitter:@xm6_original)
    たけがみりう (Twitter:@RyuTakegami)
    トマ (Twitter:@tomatoma911)
    GIMONS (Twitter:@kugimoto0715)
  の4名が著作権を保有しており、クリエイティブ・コモンズ・ライセンス
    「表示 - 非営利 - 継承 4.0 国際 (CC BY-NC-SA 4.0) 」
  によってライセンスしています。

  ライセンス条項に関することについて、詳しくは以下のWebサイトを参照してください
  (以下のリンクは日本語で記述されています)。

    https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ja

  クリエイティブ・コモンズのFAQと重複しますが、この作品は現状有姿、あるがままの
  かたちで提供され、ユーザーは自己責任で使用することになります。この作品を使用
  した結果、ユーザーやユーザーの所有物であるPCに不利益・損害等が発生した場合で
  も、著作権者にその責任を追及することはできません。

  翻案・改変された作品のバイナリの公開は、意図的にウイルス等のマルウェアを混入
  させないことを条件に、ライセンスに従うかたちで自由に行なっていただいて構いま
  せん。

  ROMファイルの使用については必ず著作権者(主に富士通クライアントコンピューティ
  ング社・マイクロソフト社)の意向に従ってください。なお、XM7同梱のSAVEROMユーテ
  ィリティシリーズはROMデータを個人的に利用するために作成されており、いわゆる違
  法配布を助長もしくは幇助するものではありません。
  特に、ROMデータを同梱、あるいは在処を示す形での再配布は絶対に認めません。

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

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

    天ぷら工房 (TENMARU PLANNING FACTORY)
    http://homepage2.nifty.com/tenpurako/index.html

  ROMEO対応処理のソースはうささんに提供していただきました。

  SCCI対応処理のソースは「がし3」さんの「M88 SCCI.DLL対応版」の実装を参考にさせ
  ていただきました。また、SCCI対応ハードウェアを持っていない中での開発にはぼう
  きちさんの「SCCISIM」を使わせていただきました。

  プリンタ対応処理のソースはXM7LP開発者のBen.JPさんに提供していただきました。
  CPUコアの再現性向上にはVM7開発者のkeisukeさんに協力していただきました。

  初期のXM7 V3の実装においてはNIFTY SERVE FTOWNS(FM TOWNSフォーラム)/FRAV(リア
  ルタイム通信フォーラム)のリアルタイム会議(チャット)での雑談が非常に参考になり
  ました。

  外部音源DLL機能はXM7ヨルダのソースコードをベースとしています。
  この部分の著作権は原作者であるねねっち氏に帰属します。
  Copyright (C) 2011-2020 ねねっち@kirara.st (Twitter:@nenecchi_0505)
  DLLは下記サイトを参照願います。

    (仮)でゲソ
    http://nenecchi.kirara.st/

  外部画像フィルタDLL機能はXM7Dash勝平のソースコードをベースとしています。
  この部分の著作権は原作者であるねねっち氏に帰属します。
  Copyright (C) 2013-2014 ねねっち@kirara.st (Twitter:@nenecchi_0505)
  DLLは下記サイトを参照願います。

    (仮)でゲソ
    http://nenecchi.kirara.st/


□前回(XM7 V2.9L77TXβ2)・前改造版(XM7dash V1.2)からの変更点

  XM7 V2.9L77TXβ2→XM7 V2.9L77TXβ3の変更点一覧です。

  <変更>
  ・オリジナルXM7から「なぜか」削除されていたディスク・バブルの一時取り出し機能
　　とカセットテープの最初まで巻き戻し機能を復活
  ・漢字ROMデータの読み込み優先順位を変更し、JIS78エミュレーション復活
  ・再ビルド時にソースレベルでDirectX9 SDKを不要にした(はず)

  <修正>
  ・FDCのCRCテーブルが作成されないためにCRCチェックを行なっているソフトが全滅す
    る問題を修正
  ・外部画像DLL有効かつアスペクト比調整ON時にフルスクリーンモードにしてからウイ
    ンドウモードにするとウインドウの描画が異常となる問題を修正


  XM7dash V2.9L77SX R45→XM7 V2.9L77TXβ2の変更点一覧です。
  (一部、XM7 L77TXβ1で修正した箇所のうち、XM7dash R45に反映されなかったものを
   含みます)

  <変更>
  ・フルスクリーンモード設定をウインドウモードとフルスクリーンモードに再分割
    というか、これはきちんと意味があってわけているのであって、適当にわけている
    わけではないので念のため(ラスタ単位レンダリングとかモニタモードとかと同列に
    考えられると困ります＞トマ氏)
  ・フルスクリーン時の画面モードを「現在の画面モード(整数倍拡大)」に設定した
    場合のステータス表示の有無によって設定サイズが変化するように変更
    (XM7 TypeRのソースを殆どそのまま持ってきただけ…)
  ・逆アセンブル・メモリダンプウインドウの「その他ベクタ」サブメニューにワーク
    エリア上のBIOSフックアドレスを追加
    (これもXM7 TypeRのソースを完全コピペ…)
  ・設定ダイアログの「サウンド」タブ、「画面」タブの項目配置を見直し
  ・動作モードをオリジナルXM7の仕様に合わせ、高速/中速/低速の3段階に変更
  ・スケジューラの最大イベント数を将来の拡張を見越して32から40に変更
    (その場その場の場当たり的な対策しかしないとR45とXM7 L77TXβ1の関係のように
     破綻します＞トマ氏)

  <修正>
  ・FM-7モードが選択できない問題を修正
  ・逆アセンブル・メモリダンプウインドウのコピー機能で改行コードが欠損する問題
    を修正
  ・FDDモータが回っている状態で作成されたステートファイルをロードすると落ちる問
    題を修正
  ・何だか知らんけどOption2の隠し項目が堂々と保存される件が直ってないので修正

  <注意>
  ・XM7 L77TXβ1とXM7dash R45のステートファイルバージョン(Ver12.10)がファイル上
    は同一のため、今回はXM7dash R45に合わせてVer12.20にしました。XM7 L77TXβ1の
    ステートファイルは一切使えませんので念のため。
    これでXM7dash R46(だか何だか知らんけど)がVer12.20にしたら愛知まで殴り込みに
    行きます。


  R44→R45の変更点一覧です。

  <変更>
    ・クリップボード貼り付け機能のデフォルトキー間隔を20ms/200msにして有効化
    ・低速モード時のサブCPUウェイト処理設定を低速モード時にしか設定できないよう
      に変更
    ・サブウインドウ処理の一部をリファクタリング

  <オリジナルXM7・他XM7派生版からの移植>
    XM7 L77SX+z09 R3cより以下を移植
    ・FM-7モード時に、$FD0C～$FD0Fのミラーが$FD08～$FD0Bに現れるように修正
      (Thanks for CaptainYS,XM7 L77TXβ1時に修正済み)
    ・キー操作で各種ダイアログを閉じた際のキー情報がVMに伝わってしまい誤動作す
      る問題を対策(XM7 L77TXβ1時に修正済み)

    XM7gより以下を移植
    ・FDCサブウインドウのバッファオーバーフロー対策ミスを修正
    ・FDDのモーターON時の回転位置を正確に再現するように改善
    ・回転位置を利用した各種イベント発生タイミングを改善
    ・データ転送割り込み間隔を改善
    ・FDCのシーク系コマンド(TYPE1)実行後、HEAD ENGAGEDフラグが立ったままになる
      問題を修正(XM7 L77TXβ1時に修正済み)
    ・FDCリセット時のセクタレジスタ初期値を0から1へ修正(XM7 L77TXβ1時に修正済
      み)
    ・ディスクイメージファイルのアンマウント時、FDCのWRITE PROTECTEDフラグが1に
      なってしまう問題を修正(XM7 L77TXβ1時に修正済み)

  <移植時に改良・変更した点>
    ・キー操作で各種ダイアログを閉じた際にキーが離されるまで待機するように対策


  R43→R44の変更点一覧です。

  <変更>
  ・サブウインドウの最小化・非表示状態から単体での復帰後、フォーカスをメイン
    ウインドウへ戻すように変更
  ・動作設定画面のカーソルキーによる操作時にフォーカスがあらぬ箇所へ遷移する
    場合がある問題をいくつか対策
  ・ディスアセンブルコード部のセグメント管理変数をBYTE型からint型に変更
    ※呼び元がn変数なので…(←勝手に間違えていただけだろうが)
  ・jcard.cのLOG1を出力する関数が間違っていたのを修正
  ・印刷ダイアログ表示時にVMロックしない設定時もフルスクリーン時からの表示時は
    VMロックして印刷ウインドウを表示する仕様に変更
  ・24kHz表示エミュレートのウインドウ時とフルスクリーン時の設定を統合
    ※ラスタ単位レンダリングとか疑似400ラインモードとかグリーンモニタモードとか
      TTLカラーモニタモードとかは両スクリーンで統合されてるので…
    ※この項目はXM7 L77TXβで再分割しました。
  ・FM音源ディスプレイ/FM音源レジスタで管理している0枚からの搭載OPN枚数表現を
    {16,0,1,2,…}から{0,1,2,3,…}に変更し、ソースコードの可読性を向上。
    PSG搭載時の表現仕様はbit3フラグ(8)から変更無し。
  ・「スティッキーフォーカスを使用」表記をXM6typeGに倣い「バックグラウンド時も
    再生」に変更
  ・メモリダンプ・逆アセンブルサブウインドウの論理アドレスモード時、タイトルの
    [Logical]追記表示を廃止(物理アドレスモード・セグメントモード時は変更無し)
  ・コンパイルスイッチJCARDをXM7_VER >= 2と同義として廃止
  ・FM-7モード時に、標準FM音源を無効にするとマウスセットの割り込み制御も無効に
    なる問題を拡張IRQ要因識別部をmainetc.cへ移動することで対策
  ・FDCトラック読み込み時の2D/2DDファイル時の判定条件を修正

  <移植>
  ◎XM7 V2.9 L77SX+z09 R2/R3/R3aから以下を移植
  ・アナログパレットの初期化をリセット時から起動時へ変更
  ・アナログパレット番号の読み出しはAVシリーズ全機種で不可能とする修正
  ・アナログパレット書き換え時の通知仕様変更
    ※画面モード限定から無条件へ仕様変更。以前のコードには通知の種類によって
      VM側で条件判断している箇所と、機種依存コード側で条件判断している箇所が
      混在していた点がみられたが、これらを機種依存側で行うよう統一する方針に
      したように見受けられた
      この解釈が正しいかどうかはさておきそうであると仮定した場合、その意図に
      共感を感じたため移植を実施
  ・MAGUSパッチ有効時のLizardの起動改善、およびデフォルトをONとする仕様変更
  ・2DDのDSイネーブル記録処理の追加
  ・2DDメディアを2Dとして読んだ場合の処理
  ・アクセス可能な最終トラック算出処理
    ※ただしCRC演算は元々のテーブル実装のままとした
    ※この項目は元の実装だと無駄にソースが長いので、XM7 L77TXβでcrcgen.c/crc
      gen.hに分割しました。
  ・D77イメージファイルのマウント時、これまでメディア#0固定マウントだったのを
    エラーの出る限り次のメディアを順次マウントしてみる仕様変更
  ・READ ADDRESSでセクタレジスタにトラックを設定する処理を削除
    ※この変更のみいまいち理由がわからない。他のMB8877系エミュレータに同様の
      シーケンスが無いのは確認したが、それらを正と判断したのだろうか？
  ・起動時に日本語カードROM用メモリが確保できなかった場合に初期化失敗として
    いた点を、日本語カード無効として継続する仕様に変更
    ※しかしここでメモリ確保できないならば、他の箇所でも確保できず結局起動で
      きないのではないだろうか…？
      (注:Western DigitalのFD1791、富士通のMB8877Aともにデータシート上の動作
          としてはそれが正と判断できるのでそのように実装しています)
  ・pcidebug.dll読み込み時のフォルダをXM7.exeと同じフォルダに限定する修正
  ・リセット時にキーボード入力状態を初期化する修正
  ・BREAKキーを離した際にアムノーク隠し機能対策フラグをリセットする修正
  ・FM77AV20EXモード時のTABリセット機能
  ・拡張割り込み(IRQ)ステータス(0xfd17)から、OPNフラグが読み込める仕様はFM77AV
    以降のシリーズのみとした修正
    ※CaptainYS(山川機長)氏の公開されているFM音源カード回路図からの情報により、
      FM音源カード内で$FD17への接続は破棄されており、OPN割り込みフラグはFM77AV
      以降で実装されたものとみられる点を別途確認したためこの修正は正しいと判断
  ・RTC設定時に時間が狂う問題対策
  ・FM-7モード時のVRAMアクセス制限
  ・ASCII/Oh!FM JoyStick対応
  ・LP安定化処理
  ・SCCI対応

  <移植時に改良・変更した点>
  ・モニタ種別設定をコンボボックス化しアンバーイエローモニタもGUIで選択出来る
    ように変更
  ・ROMEO対応版とSCCI対応版を統合し、音源合成エンジン選択をコンボボックス化
    デフォルトは内蔵fmgen、ROMEO,SCCI機器が接続されていなくてもそれぞれ設定可能
    機器が接続されていない場合内蔵fmgenになる仕様とした
    ※このあたりの挙動はXM6typeGを参考にさせていただきました
    ※SCCI移植時にコードの可読性を最優先して書き直し、ROMEO、SCCI無効でビルドし
      た場合フラグ変数が(FALSE)に置き換わるだけとした
  ・XM7側SCCIチップ定義名を変更
    ※YM2610Bを'OPNBB'と定義しているのがどうにもしっくりこなかったので、
      他のチップ定義も同様に型番による定義名に変更
      (マクロでハイフンが使えない(演算子と解釈される)以上、仕方ないのですが…)
  ・メディアがVFDだった場合READ ADDRESSデータ作成時にID FIELDをID ADDRESS MARK
    の上に上書きしている問題を対策


□オリジナルとの相違点

  XM7 V2との相違点一覧です。
  記録として不具合修正以外のフィードバックされた点も含みます。

  <新規>
  ・FM77AV20モード、FM77AV20EXモードを追加
  ・MMRサブウインドウに学習RAMのEnable情報、高速MMRモードの表示を追加
  ・クリップボードの文字列を擬似的にキー入力する貼り付け機能を追加。ALT+Pに貼り
    付けのショートカットを追加
  ・キー入力支援機能を実装。貼り付け機能を利用しているため、事前にINIファイル
    設定が必要。ALT+Kにキー入力支援のショートカットを追加
  ・外部画像フィルタDLLに対応。現状ウインドウモード時のみ。表示サイズを0.5倍の
    320×200ピクセル、1.2倍の768×480ピクセル、1.5倍の960×600ピクセル、1.8倍の
    1152×720ピクセルで表示させるモードを追加
  ・外部画像フィルタDLL使用時に限りアスペクト比調整機能を追加。デフォルト比率は
    0.833(0.4165)。比率は「アスペクト比設定」コンテキストメニューで変更可能
  ・フロッピーディスクドライブで「#0,1両ドライブを交換する」「#2,3両ドライブを
    交換する」機能を実装
  ・フルスクリーンの画面モード選択肢に「現在の画面モード (整数倍拡大)」を追加
  ・外部音源DLLに対応。詳細はサウンド出力の項を参照
  ・ステート、ディスク、テープのファイル履歴の保存に対応
  ・マウント状態の保存に対応。ベタイメージファイルに対する書き込み禁止設定の保
    存にも対応
  ・漢字ROM、テープ/プリンタ、割り込み(メインCPU、サブCPU)のサブウインドウを追
    加。(XM7 V1.0で実装されていた仕様を継承)
  ・サウンド出力モードをステレオにしている際、FM音源ディスプレイでどちらから出
    力されているか確認できるようにした
  ・サブウインドウのポップアップスタイルに対応
  ・サブウインドウ表示状態の保存に対応。再起動後「全て復元」を実施することで、
    前回終了時のサブウインドウを再現可能。起動時に自動で復元させることも可能。
    サブウインドウポップアップモード変更時に保存情報はクリアする
  ・サブウインドウの「全て閉じる」を追加
  ・ブートモード、メインウインドウ位置、フルスクリーンモード、ステータスバー、
    カレントディレクトリの保存スイッチを追加
  ・固定のステートファイル名(デフォルトでは"STATE.XM7")でステートセーブおよび
    ロードするクイックセーブ・クイックロード機能を追加
  ・終了時および起動時にそれぞれ自動でクイックセーブ・クイックロードする機能を
    追加
  ・ステートの上書き保存時に、既存ファイルを"ファイル名_##.XM7"とファイル名を
    変更して保存しておく機能に対応。##は00からの通し番号であり、99まで。00～99
    まで存在すると99に上書きする仕様
  ・ファイル履歴にコンテキストメニューを追加し、履歴から削除できる機能を追加
  ・D77ファイルメディアリストにコンテキストメニューを追加し、ディスクタイトル
    (ラベル)の変更を行える機能を追加
  ・天丸さんのアイコンを元に作成した、機種アイコン2種(FM77AV20、FM77AV20EX)を
    追加

  <変更>
  ・ファイル履歴によってほぼ同等の操作が可能なため「一時取り出し」を廃止
    一時取り出し状態で保存されたステートをロードすると、ファイル履歴に追加して
    アンマウントする
  ・その後実装された「最初まで巻き戻し(T)」も同様の理由で移植しない方針とする
  ・ドライブ2および3のアクセスインジケータは、どちらかのドライブにマウントした
    際に追加表示する
  ・メディアタイトルの文字数がアクセスインジケータの表示可能文字数を超えた際、
    種別(拡張子)のみを表示する
  ・マウント中はGUIメニューのドライブ(I)にファイル名付きで子メニュー表示するよ
    うに変更。このため、2D/VFDファイルに関しての孫メニューに表示されるマウント
    ディスクファイル種類表示は廃止
  ・キャプションへの表示情報に最後にロード／セーブしたステートを追加
    これはリセットによってクリアする。(XM6の動作仕様に準拠)
  ・マウントしたフロッピーディスク、テープイメージファイル名のキャプションへの
    表示・非表示を動作設定プロパティで設定できる仕様に変更
    ただし、表示にしても#2～3のマウントファイル名は表示出来ない
  ・標準FM音源/WHG音源/THG音源にアクセスした後に動作設定プロパティで各スイッチ
    をOFFにした場合リセットする仕様に変更
  ・ステートファイルのヘッダ文字列をXM7と区別できるよう変更
  ・XM7がステートファイルの拡張を行った際、本改造版で無条件にロード出来てしまい
    不具合が起きるのを防ぐため、改造版公開時に入手可能なXM7のソースコードで保存
    可能なステートの内部バージョン番号より大きな番号のステートファイルはロード
    出来ないように変更
  ・逆アセンブルサブウインドウ上で「実行中はPCに同期」がOFFの時「トレース」で
    同期しないように変更
  ・メインシステムのメモリダンプ・逆アセンブルサブウインドウで物理アドレスや
    セグメント指定で表示できるように変更(64KB単位)。ただしデバッガ、ジャンプ
    CPUレジスタ、システムスタック、ブレークポイント指定は論理アドレスモード時
    以外使用不可。割り込みベクタ、I/Oエリア指定は物理アドレスモード時では使用
    不可
  ・オリジナルXM7にその後実装されたメモリダンプ・逆アセンブルサブウインドウの
    物理アドレスモードについては、dashで先行実装していた仕様と衝突するため統合
    せず

  <修正>
  ・Visual C++でビルドした際のワーニングを軽減
    (注:BCC++5.5.1での対策は大したことがないことが判明しました)


□動作環境

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

  ・Windows 95/98/NT 4.0/2000に関しては、IBM PC ATおよびその互換機(日本で「DOS/
    V機」などと呼ばれていたもの、「DOS/V機」に含まれないNEC PC98-NXシリーズもこ    れに含みます。また、オリジナルのIBM PC ATでは32ビットWindowsは動きませんが
    …)、NEC PC-9800シリーズのみサポート対象とします。EPSON PC-x86シリーズ用Win
    dows 95に関しては動作保証外、富士通 FMR/FM TOWNS II用Windows 95に関してはDi
    rectXに正式対応していないため、正常に動作しません(具体的には起動はしますが、
    キー入力ができません)。

  ・Windows 95/98/Me/NT4.0/2000/XP/Vista/7/8/10(Ver.1507/Ver.1511/Ver.1607/Ver.
    1703/Ver.1709/Ver.1803/Ver.1809)はマイクロソフト社のサポートが既に終了して
    います。また、Windows 10(Ver.1909)は2021年5月11日にサポートを終了します。
    セキュリティ上のリスクを理解したうえでご利用ください。

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

  ・Windows Meは激しく推奨しません。
    理由はお察しください。(注:ネタではありません)

  ・WindowsNT 4.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(N
    T系OSではpcidebug.sysも)をXM7.exeと同じフォルダに置いてください。
    ※Windows Vista以降のOS上でのROMEO対応はサポート対象外とさせていただきます。
    ※64ビット版OSではROMEO対応機能は使用できません(ゆいさん作のx64対応版pcideb
      ug.sysが使えるかもしれませんが保証はできません)。

  ・SCCI対応機能を使用するには、XM7をWindows 7以降のOSで動作させる必要がありま
    す。
    また、別途SCCI.DLLが必要となります。SCCI.DLLはXM7のアーカイブに含まれていな
    いので、「がし3」さんのサイト(http://www.pyonpyon.jp/~gasshi/fm/index.html)
    からダウンロードし、SCCI.DLLをXM7.exeと同じフォルダに置いてください。
    ※SCCI.DLL 2018/12/20版以降で対応したC86CTL(G.I.M.I.C)対応機能については、
      現時点ではXM7では保証外となりますが普通に動くようです。

  ・Windows 10上での動作確認はBuild 17763(Ver.1809,October 2018 Update),Build 
    18362(Ver.1903,May 2019 Update),Build 18363(Ver.1909,November 2019 Update),
    Build 19041(Ver.2004,May 2020 Update),Build 19042(Ver.20H2,October 2020 Upd
    ate),Build 19043(Ver.21H1,May 2021 Update)にて行なっています。


□仮想マシン

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

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

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

    プロセッサ     メイン/サブ 6809(MC68B09E相当品 クロック2.0MHz)×2
    RAM            メインRAM 192KB、サブRAM 5KB、ビデオRAM 96KB
    ROM            F-BASIC ROM 32KB、イニシエータROM 8KB
                   サブモニタROM 32KB
    漢字ROM        JIS第1水準漢字・非漢字・第2水準漢字 256KB
    辞書ROM        OASYS-Liteベース、256KB
    辞書学習RAM    スタティックRAM 8KB (バッテリーバックアップ)
    表示能力       640x200ドット     8色 2面
                   320x200ドット  4096色 1面    から選択
    フロッピー     640KBフロッピーディスクドライブ×4 (320KBとしても使用可,※)
    テープ         FSK方式にて記録、約1600bps
    サウンド       BEEP音
                   標準FM音源(YM2203)
                   WHG増設FM音源(YM2203)
                   THG増設FM音源(YM2203)
    その他         論理演算・直線補間LSI、DMAコントローラLSI、時計LSI、
                   RS-232Cインタフェース(ソフトウェアボーレート設定対応)など
    オプション機器 インテリジェントマウス(MSXマウス)、マウスセット(FMマウス)、
                   MIDIアダプタ、シリアルドットプリンタ、ジャストサウンド

    ※純正の外部FD接続セット(FM77-732)を想定したものではなく、内部の信号を引き
      出して2DDドライブを2基増設した状態を想定しているため、ドライブ2/3でも2DD
      イメージのアクセスが可能です。

  以下の仕様はFM-7, FM77AVモード時に追加されます。

    プロセッサ     日本語サブ  6809(MC68B09相当  クロック1.2MHz)
    RAM            日本語サブワークRAM 8KB
    ROM            辞書アクセスルーチンROM 16KB

  以下の仕様はFM-7モード時に追加されます。

    サウンド       標準PSG音源(AY-3-8910相当)


□ROMファイル

  XM7.exeを起動するためにはFM77AVシリーズのROMをファイル化したものが必要です。
  FM77AVシリーズの実機をお持ちでない方は使用できませんのでご注意ください。

  次にあげるファイルをSAVEROMユーティリティ(FM77AVの場合)/SAVEROM2ユーティリテ
  ィ(FM77AV20/20EX/40/40EX/40SXの場合)を使用して各自準備してください。
  FM77AV+日本語カードの構成の場合に日本語カード対応機能を使用する場合、SAVEROM
  ユーティリティで準備するROMファイル以外にさらにSAVEJDAVユーティリティを使用し
  て辞書ROMファイルの準備を行なう必要があります。

  (必須ファイル)
    ファイル名   サイズ 配置空間
    FBASIC30.ROM  31744  メイン $38000-$3FBFF
    INITIATE.ROM   8192  メイン $36000-$37FFF
    KANJI   .ROM 131072  Ｉ／Ｏ JIS第1水準漢字・非漢字 (JIS78準拠)
    KANJI1  .ROM 131072  Ｉ／Ｏ JIS第1水準漢字・非漢字 (JIS83準拠)
    KANJIA  .ROM 131072  Ｉ／Ｏ JIS第1水準漢字・非漢字 (JIS78準拠+α)
    KANJI   .TMP 131072  Ｉ／Ｏ JIS第1水準漢字・非漢字
    SUBSYS_A.ROM   8192   サブ  $1E000-$1FFFF
    SUBSYS_B.ROM   8192   サブ  $1E000-$1FFFF
    SUBSYS_C.ROM  10240   サブ  $1D800-$1FFFF
    SUBSYSCG.ROM   8192   サブ  $1D800-$1DFFF (4バンク)


  (日本語カードサポート:なくても起動します)
    ファイル名    サイズ  CPU    物理アドレス
    KANJI2  .ROM 131072  Ｉ／Ｏ JIS第2水準漢字 (JIS83準拠)
    KANJI2  .TMP 131072  Ｉ／Ｏ JIS第2水準漢字
    DICROM  .ROM 262144  メイン $2E000-$2EFFF (64バンク)

  (日本語通信カードサポート機能:なくても起動します)
    KANJIN  .ROM 131072         JIS78準拠第1水準漢字 (日本語通信カード版)
    DICROM  .ROM 262144  メイン $2E000-$2EFFF (64バンク)
    JSUBMON .ROM  16384  日本語 $C000 -$FFFF

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

  必須ファイルのうち標準漢字ROMは、KANJIA.ROM→KANJI.ROM→KANJI1.ROM→KANJIN.RO
  Mの順に検索し、最初に見つかったファイルをFM77AVシリーズの本体内漢字ROM、FM-7
  の漢字ROMカードとして使用します。KANJIA.ROM/KANJI.ROMとKANJI1.ROMの両方が見つ
  かった場合は、FM-7/FM77AVモードではKANJIA.ROM/KANJI.ROM/KANJIN.ROMを使用し、
  FM77AV20/FM77AV20EXモードではKANJI1.ROMを使用します。

  日本語カード漢字ROMは、KANJI2.ROMが見つかった場合はそれを使用し、見つからなか
  った場合は日本語カードサポート機能自体が無効になります。

  日本語通信カード漢字ROMは、KANJIN.ROMが見つかった場合はそれを使用し、見つから
  なかった場合は内部的に標準漢字ROMデータを使用します。

  KANJIA.ROM/KANJI.ROMがなく、KANJI1.ROMを使用している場合、FM-7/FM77AVモードで
  は内部でJIS78準拠エミュレーションを行ないます。
  この場合、KANJI2.ROMがあると、よりいっそう再現度が上がります。
  JSUBMON.ROM・DICROM.ROMは、日本語通信カード対応機能を使用しない場合はなくても
  構いません。

  日本語通信カード側漢字ROMのI/Oアドレスを実機同様に変更可能です。
  (設定1:$FD20, 設定2:$FD28)
  FM-7モード時のみ、漢字ROMカードをOFF、日本語通信カードをON、漢字ROM設定を2($F
  D20)に設定することで、日本語通信カード側漢字ROMで実行可能です。


□SRAMファイル

  日本語カードでは辞書学習用のSRAMファイルを備えており、変換を行うたびに学習
  結果が書き込まれます。これはバッテリーバックアップされているため電源を切って
  も内容が保持されます。

  XM7では"USERDIC.DAT"というファイルを用いてこの動作をエミュレーションしていま
  す。起動時にこのファイルがなければ新規作成し、終了時に書き戻しています。


□コマンドライン

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

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

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

  .D77/.2D/.2DD/.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]でリセットがかかります。


□クリップボード貼り付け/キー入力支援機能

  XM7は、クリップボードの文字列を擬似的にキー入力する貼り付け機能に対応していま
  す。ツール→貼り付け または Alt+P で貼り付けが可能です。
  また、gasajz氏の「CopyPe for XM7dash」のようなキー入力支援機能にも対応してい
  ます。ツール→キー入力支援 または Alt+K で使用可能です。

  Windows 8以降のOSを使用している場合、MS-IME使用時にIMEのモードが正常に変更さ
  れないことがあります(OS/IMM周りのAPIの仕様変更が原因です)。ATOKでは問題ありま
  せんが、こちらではATOK・MS-IME以外のIMEでの動作検証は行なっていません。

  これらの機能はデフォルトでは無効になっているので、使用するには設定が必要です。
  環境にもよりますが、通常キー間隔:20ms、制御キー間隔:200ms程度が適正値のようで
  す。なお、片方でも 0 に設定した場合は、本機能は無効になります。


□ディスクファイル

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

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

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

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


□テープファイル

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

  T77フォーマットの詳しい仕様については、XM7配布ページ(表)の「T77フォーマット仕
  様」をご覧ください。


□サウンド出力

  現在のバージョンではサウンドエミュレーションをサポートしています。BEEP音源、
  PSG音源、FM音源、WHG音源、THG音源、モータ制御用のリレー動作を含めたテープ音、
  FDDシーク音のエミュレーションが行なえます。FM-7モード時のみ、標準OPNと独立し
  た本体側PSGのエミュレーションが行なわれます。
  その他、PSG音源、FM音源はROMEOおよびSCCIでの実チップ出力に対応しています。
  (ROMEO/SCCIを使用する場合、「動作環境」にある要件を確認してください)

  モータ制御リレー動作音・FDDシーク音のサンプルは、XM7.exeと同じディレクトリに
  モノラル・16ビットPCMのWAVファイルとして以下のファイル名で置いてください。
  (本番ではXM7と同じものをXM7本体のアーカイブにも収録する予定です)

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

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


  ROMEO/SCCIを使用する場合のその他の注意点は以下の通りです。

  □ROMEO使用時の注意点

    ・XM7はOPN3-L(YMF288)に対応しています。OPM(YM2151)には対応していません。
      また、ROMEOから発音する場合、FM音源は標準OPN/WHG、PSGは標準OPNのSSG部のみ
      対応しており、WHGのSSG部/THGについてはXM7内蔵fmgenからの出力となります。
      fmgenのサウンドバッファ設定はROMEOからの出力には影響しませんので注意して
      ください。
    ・OPN3-Lに供給されるクロックは8MHzとなります。7.9872MHzではありません。
      FM-7標準の1.2288MHz供給時と同じような感じに音程やエンベロープ設定等を合わ
      せようとはしていますが、微妙なニュアンスを含めて完全に同じ音が出るわけで
      はない点はご了承ください(イメージとしてはRoland SoundCanvas(SC)シリーズの
      互換性のような感じです)。
    ・設定メニューの「サウンド」タブにある「音源合成」は、デフォルトではfmgen
      になっていますので、ROMEOが接続されている場合でもXM7dash内蔵のfmgenから発
      音します。ROMEOを使用したい場合は「ROMEO」を選択して下さい。
      なお、「音源合成」として「ROMEO」を選択していても、実際にROMEOが接続され
      ていなかったり、対応した実チップが1つも搭載されていない場合、ROMEO経由で
      音を出すことはできません。
      どのパートが実チップから出力されているかは、表示メニューの「FM音源/PSGレ
      ジスタ」から確認できます。
    ・表示メニューの「FM音源/PSGディスプレイ」のミュート機能とレベルメーター、
      設定メニューからの音量バランス設定等は、ROMEOから出力されているパートに関
      しては動作しません(対応する予定もありません)。
    ・ミュート処理の作りが基本的にいい加減です。


  □SCCI使用時の注意点

    ・XM7はOPN(YM2203)、OPNA(YM2608)、OPNB-B(YM2610B)の3種類の実チップに対応し
      ています(ROMEO対応版で採用しているOPN3-L(YMF288)および単なるOPNB(YM2610)
      等には対応していません)。
    ・最近のSCCI.DLLでは実ハードをお持ちでない方のためにfmgenが利用できますが、
      この機能はクロックがPC-8801mkIISR以降+サウンドボードII、およびPC-9801シリ
      ーズ+PC-9801-86を想定した7.9872MHz固定のため、XM7では使用できません。
      素直にXM7内蔵のfmgenを使ってください。
    ・実音源チップに供給されるクロックは1.2288MHz(OPN)/2.4576MHz(OPNA/OPNB-B)に
      してください。
    ・検索順序は標準OPN→WHG→THGの順番でそれぞれOPN→OPNA→OPNB-B のうち、最初
      に見つかったチップからに固定されており、変更することはできません。
    ・SCCI対応ハードウェアに接続されている実チップの数が少ない場合、SCCI対応ハ
      ードウェアとXM7内蔵のfmgenの混在も可能です。この場合、fmgenのサウンドバッ
      ファ設定はSCCI対応ハードウェアからの出力には影響しませんので注意してくだ
      さい。
    ・設定メニューの「サウンド」タブにある「音源合成」は、デフォルトではfmgen
      になっていますので、対応ハードウェアが接続されている場合でもXM7内蔵のfmge
      nから発音します。SCCIを使用したい場合は「SCCI」を選択して下さい。
      なお、「音源合成」として「SCCI」を選択していても、対応した実チップが1つも
      搭載されていない場合、SCCI経由で音を出すことはできません。
      どのパートが実チップから出力されているかは、表示メニューの「FM音源/PSGレ
      ジスタ」から確認できます。
    ・表示メニューの「FM音源/PSGディスプレイ」のミュート機能とレベルメーター、
      設定メニューからの音量バランス設定等は、SCCI対応ハードウェアから出力され
      ているパートに関しては動作しません(対応する予定もありません)。
    ・ミュート処理の作りが(ROMEO用コードより更に)いい加減です。


  XM7は、外部音源DLL(V1)に対応しています。
  一度実行するとXM7.iniの[Sound]セクションにDllList0から8までのキーが追加され
  るので、そこへDLLのファイル名を記述してください。
  フルパスの必要はありません。
  XM7.exeと同じフォルダまたはパスの通ったフォルダに該当するDLLがあった場合、
  FM音源エミュレーション時に内蔵音源エンジンの代わりにそちらを使用します。
  Win32メニューで音源エンジンの選択も可能です。

  外部音源DLLは各位で導入してください。運用は自己責任でお願いします。
  なお、DLLのパスについては一切チェックを行なっていないため、不正なDLLを読み込
  んだことによるマルウェア実行やウイルス感染などには十分注意してください。

  ※外部音源DLL(V1)使用時の制限事項
  ・FM音源合成時の線形補間(波形補間)が動作設定に関係なく無効になる。
  ・外部音源DLLで鳴らしているパートのみ、FM音源ディスプレイのレベルメータが
    表示できなくなる。(DLL側がGetBufferに対応していれば表示可能)


□ディスプレイ描画

  XM7は外部画像フィルタDLLに対応しています。デフォルトはstrech.dllです。
  XM7.exeと同じフォルダまたはパスの通ったフォルダに該当するDLLがあった場合、
  ウインドウモード時の描画処理にそちらを使用します。
  Win32メニューで選択も可能です。
  一度実行するとXM7.iniの[Screen]セクションにDllList0から8までのキーが追加さ
  れるので、そちらを変更することで別のDLLへ変更も可能です。
 
  外部画像フィルタDLLは各位で導入してください。運用は自己責任でお願いします。
  なお、DLLのパスについては一切チェックを行なっていないため、不正なDLLを読み込
  んだことによるマルウェア実行やウイルス感染などには十分注意してください。

  ※外部画像フィルタDLL使用時の注意事項
    一部外部画像フィルタDLLにおいて、Win32メニューを開いた箇所の再描画がされな
    い場合があるため、この対策としてWin32メニューを閉じた際に強制的に画像を再描
    画しています。
    XM7.iniの[Screen]セクションに追加されるFilterRedrawScreenキーを0に変更する
    ことで、Win32メニューを閉じた際の強制再描画をOFFにすることができます。


□ジョイスティック

  現在のバージョンでは標準のFM音源(OPN)接続ジョイスティック、電波新聞社製プリン
  タポート接続ジョイスティック、ASCII QuickShot、◎h!FM標準ジョイスティック、キ
  ーボードエミュレーションの5種類のジョイスティックのエミュレーションをサポート
  しています。プリンタポート接続ジョイスティックと後述のプリンタ出力エミュレー
  ション機能の同時使用はできません。

  実際に入力するためには、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]J (0x1b4a) --- 改行量を1/216インチ単位で単発で指定
                            （F-BASIC V3.4の400ラインモードでのHARDC 2コマンド
                              のビットイメージ出力に用いられる。）
      - [ESC]K (0x1b4b) --- 8ドット単密度ビットイメージモードの指定
      - [ESC]L (0x1b4c) --- 8ドット倍密度ビットイメージモードの指定
                            （HARDCコマンドのビットイメージ出力に用いられる
                              ([ESC]Jの場合以外)。）

      - [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）は、
      常にビットイメージとして印刷されます。

    ・プリンタ側で漢字（2バイトコード文字）を出力できます。
      ESC/P制御コードのFSシーケンス(上述)で漢字ON/OFFを行ないます。
      （出力の有無の選択が可能：後述。）
      漢字コード（2バイト文字コード）はJISです。
      具体的には、入力文字コードの範囲は、
      JIS X 0208で定義されているコード領域（01区～94区）のうち、
      ・記号、英数字、かな（01区～08区）
      ・第1水準漢字（16区～47区）
      ・第2水準漢字（48区～84区）
      であり、出力される字体は
      ・Windows Vista 以前は JIS X 0208-1990、通称JIS90
      ・Windows Vista 以降は JIS X 0213:2004、通称JIS2004
      となります。
      また、フォントは必ず「ＭＳゴシック」となります。
      「ＭＳゴシック」はWindowsのバージョンによって「フォントのバージョン」も異
      なるため、動作OSによっては、一部の漢字において上記の漢字コードで規定され
      ている字体とは異なる字体が出力されます。

    ・プリンタ出力機能を有効化するか否かの選択ができます。
      「ツール」-「設定」-「プリンタ」ページで、以下のモードが選択できます。
      ・「エミュレーション有効」を選択すると、プリンタエミュレーション機能が有
        効になります。
      ・「ログ出力有効」を選択すると、プリンタ出力情報をファイルに記録する機能
        が有効になります。
      ・「ジャストサウンド有効」を選択すると、ジャストサウンド出力エミュレーシ
        ョン機能が有効になります。
      ・「使用しない」を選択すると、プリンタ出力機能を使用しません。このモード
        では電波新聞社ジョイスティックが使用できます。
      エミュレーション/ログ出力と電波新聞社ジョイスティックの併用はできません。

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

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

    ・印刷ダイアログ表示中に仮想マシンの実行を停止するかを選択可能です。
      「ツール」-「設定」-「プリンタ」ページで選択します。
      「エミュレーション有効」選択時に、「ダイアログ表示中VM停止」をチェック
      すると印刷ダイアログ表示中に仮想マシンの実行が停止されます。

    ・余白は、左右が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]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出力のエミュレーションを仮サポ
  ートしています。MIDIエミュレーション機能の切り離しは出力デバイスを「なし」に
  することで可能です。

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

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


□RS-232C

  現在のバージョンではFM77AV20/FM77AV20EX内蔵RS-232Cインタフェース相当(FM77AV20
  /FM77AV20EXモード時)およびRS-232Cインタフェースカード(MB22406)相当(FM-7/FM77A
  Vモード時)のエミュレーションをサポートしています。

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

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


□Win32メニュー

  ファイル(F)
    開く(O)               VMの状態をファイルからロードします。
    保存(S)               VMの状態をファイルに上書き保存します
    名前をつけて保存(A)   VMの状態をファイルに名前をつけて保存します。
    リセット(R)           VMをリセットします。
    ホットリセット(H)     VMをホットリセット(BREAK+RESET)します。
    TAB+リセット(T)       VMを高速モードでリセット(TAB+RESET)します。
    BASICモード(B)        起動モードをBASICモードにセットします。
    DOSモード(D)          起動モードをDOSモードにセットします。
    クイックロード(K)     VMの状態をファイルからクイックロードします。
    クイックセーブ(Q)     VMの状態をファイルにクイックセーブします。
    (ファイル名)          VMの状態をファイルからロードします。
    印刷(P)               印刷ダイアログを表示します。
    終了(X)               XM7を終了します。

  ドライブ(I)
    #0(#1、#2、#3も同様)
      開く(O)             ディスクイメージファイルを設定します。
      取り外す(E)         ディスクイメージファイルを取り外します。
      一時取り出し(T)     VMに対し強制的にディスク未挿入状態を返します。
      書き込み禁止(W)     現在選択しているディスクを書き込み禁止に設定します。
      (ディスク名)        D77ファイル内のメディアを切り替えます。
      (ファイル名)        ディスクイメージファイルを設定します。
    #0,1両ﾄﾞﾗｲﾌﾞで開く(B) ディスクイメージファイルをドライブ0,1に設定します。
    #2,3両ﾄﾞﾗｲﾌﾞで開く(H) ディスクイメージファイルをドライブ2,3に設定します。
    #0,1両ﾄﾞﾗｲﾌﾞを交換する(R)
                          ドライブ0,1に設定したディスクイメージファイルを交換
                          します。
    #2,3両ﾄﾞﾗｲﾌﾞを交換する(P)
                          ドライブ2,3に設定したディスクイメージファイルを交換
                          します。
    全イジェクト(E)       全てのディスクイメージファイルを取り外します。

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

  表示(V)
    フロッピーディスク(F) FDCウインドウを表示します。
    FM音源/PSGレジスタ(O) FM音源/PSGレジスタウインドウを表示します。
    FM音源/PSGﾃﾞｨｽﾌﾟﾚｲ(D) FM音源/PSGディスプレイウインドウを表示します。
    ﾊﾟﾚｯﾄﾚｼﾞｽﾀ/ﾏﾙﾁﾍﾟｰｼﾞ(P)パレットレジスタ/マルチページウインドウを表示します。
    サブCPUコントロール(C)サブCPUコントロールウインドウを表示します。
    論理演算/直線補間(L)  論理演算/直線補間ウインドウを表示します。
    キーボード(K)         キーボードウインドウを表示します。
    メモリ管理(M)         MMRウインドウを表示します。
    DMAコントローラ(A)    DMAコントローラウインドウを表示します。
    漢字ROM(N)            漢字ROMウインドウを表示します。
    テープ＆プリンタ(T)   オーディオカセット＆プリンタウインドウを表示します。
    ステータスバー(S)     ウインドウ下部のステータスバーをon/offします。
    実行に同期(Y)         サブウインドウの表示を自動更新します。
    最新の情報に更新(R)   すべてのウインドウを再描画します。
    フルスクリーン(U)     ウインドウモード・全画面モードを切り替えます。

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

  ツール(T)
    設定(C)               XM7の動作設定を行ないます。
    マウスモード(M)       マウスエミュレーション状態を一時的に切り替えます。
    時刻アジャスト(A)     VMのRTCの時刻をWindows側に合わせて再設定します。
    画面キャプチャ(S)     現在の画面をビットマップファイルにセーブします。
    縮小画像キャプチャ(R) 現在の画面を320×200ドットに縮小してセーブします。
    WAVキャプチャ(W)      サウンド出力をWAVファイルにロギングします。
    新規ディスク作成(D)   新しいディスクイメージファイルを作成します。
    新規テープ作成(T)     新しいテープイメージファイルを作成します。
    VFD→D77変換(V)       VFD形式のイメージファイルをD77形式へ変換します。
    2D/2DD→D77変換(2)    2D/2DD形式のイメージファイルをD77形式へ変換します。
    VTP→T77変換(P)       VTP形式のイメージファイルをT77形式へ変換します。
    FM音源/PSGエンジン(F) 使用する音源エンジンを設定します。
    画像フィルタ(I)       使用する画像フィルタを設定します。
    貼り付け(E)           クリップボードの文字列を入力します。
                          キー入力支援機能を設定したときにのみ有効です。
    キー入力支援(K)       キー入力支援ダイアログを開きます。
                          キー入力支援機能を設定したときにのみ有効です。

  ウインドウ(W)
    重ねて表示(C)         サブウインドウを再配置します(カスケード)
    並べて表示(T)         サブウインドウを再配置します(タイル)
    全てアイコン化(I)     サブウインドウを全て最小化します。
    アイコンの整列(A)     アイコン化されたサブウインドウを並べます。
    全て隠す(H)           サブウインドウを全て隠します
    全て復元(R)           アイコン化や非表示の前の状態に戻します。
                          動作設定の「起動時に復元」がOFFのとき、再起動後に前回
                          終了時開いていた全てのサブウインドウを復元します。
    全て閉じる(O)         サブウインドウを全て閉じます

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

  右クリックサブメニュー
    タイトル変更(T)       ディスクイメージのタイトルを変更します。
    ヒストリから削除(D)   ヒストリから削除します。
    アスペクト比設定(A)   アスペクト比を設定します。


□互換性

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

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


□速度

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

  ラスタ単位でのレンダリングを行なう場合は、さらに高いCPUパワーを要求します。大
  体CoreDuo 1.66GHz程度が目安です。

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


□その他

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

  また、DirectDrawの振る舞い、Windowsのスケジュール制御、SAVEROM7ユーティリティ
  の1トラック抜きフォーマットについてciscさんに有用な示唆を多数頂きました。この
  場を借りてお礼申し上げます。

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

  また、XM7時に日本語通信カードをお貸ししてくださった「はせりん」さんにはこの場
  を借りてお礼申し上げます。「はせりん」さんにはXM7/XM7 TypeR/XM7 V3.4,V2.9,V1.
  2L77TXβ(XM7dash私家版)に関してもいろいろなアドバイスをいただきました。

  キー入力支援機能につきましてgasajz氏のCopyPe for XM7dashの挙動を参考にさせて
  いただきました。この場を借りてお礼申し上げます。

    gasajz Room
    https://sites.google.com/site/gasaroom/home


□開発環境 (トマ氏)

  以下の情報はトマ氏のものとなりますので、当方の物とは「かなり」異なります。

  開発開始日時  2010年1月23日
  初公開日時    2010年6月10日

  主要ハード    開発マシン
                  Intel Core i7-920 (Bloomfield) 2.66GHz, 9GB RAM, 4TB HDD
                  ASUS Rampage II Extreme, nVIDIA GeForce GTX 950
                評価マシン
                  NEC LaVie G Type Z PC-GL19614GU
                  Intel Core i7-3517U 1.9GHz, 4GB RAM, 200GB HDD
                ターゲットマシン
                  FM-77D2(MB25250), 400ラインセット(MB28121)
                   FM音源カード(MB22459), 日本語通信カード(FM77-101)
                  FM-8(MB25020), 32KBバブルホルダユニット (MB22601)
                   キャラクタセット(非漢字) (MB22002)
                   キャラクタセット(漢字) (MB22003)
                   ミニフロッピィアダプタ (MB22603)
                  FM-7(MB25010), 漢字ROMカード(MB22405)
                   ミニフロッピィインタフェースカード(MB22407)
                   ミニフロッピィディスクユニット(MB27611)
                   FMデータレコーダ(MB27502)

  主要開発言語  Borland C++ Compiler 5.5.1
                Microsoft Visual C++ 2008 Express Edition
                Microsoft DirectX 9.0 SDK Update (October 2004)
                Netwide Assembler (NASM) v0.98.08.towns5
                HD6309 cross assembler version 01.20T


□ちょっとだけ、たわごと

  今更R45とか出されても知らんわ!!というか、今後XM7 L77TXとXM7dashの乱立が相次ぐ
  ようであれば(別の言い方をするとトマ氏が勝手し放題なら)、「TX」に込めた深い意
  味に反する結果とはなりますが、XM7 L77TXは取り下げるつもりでいます。
  (↑の部分は前回から1バイトも変更せずｗ)

  今回のバージョンは派手目な変更は加わっていません。そのうちV1.2もXM7 TypeR同様
  にディスク選択メニューの主従(というか何というか…)を反転させるかもしれません。


  設計開始日時   2021年4月23日
  開発開始日時   2021年5月 1日
  開発終了日時   2021年夏頃を予定 (XM7 L77TX)

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

  主要ハード     開発マシン:Lindwurm4 (V1.2L77TXβ3)
                   ASRock AB350M Pro4 (AMD B350 Chipset)
                   AMD Ryzen 7 3700X(Matisse) 3.60GHz
                   32GB RAM, 500GB NVMe SSD + 3TB HDD
                   GIGABYTE GV-N1060IXOC-6GD (GeForce GTX 1060, 6GB)
                   Creative SoundBlaster Z
                   Windows 10 May 2021 Update Build 19043(x64)
                   Windows 7 Ultimate Service Pack 1(x64) on VMware Player
                 ターゲットマシン
                   FM77AV40EX, FMT-DP531
                   FM77AV40SX, FMDPC232D, KDL-20J1, モニタケーブルがない(滅
                   FM77AV-2, FMTV-152, ビデオディジタイズカード(FM77-411)
                   FM-77L4, CZ-600DB
                   FM-NEW7, PC-KD252, マイクロフロッピィディスクドライブ
                   (MB27631H)
                   FUJITSU MICRO 8, CZ-600DB

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


□XM7 V2.9L77TXβ3に関するFAQ

  <概要>

  Q:XM7はFM-7・FM77AV・FM77AV20・FM77AV20EXを100%エミュレートしていますか。
  A:していません。大半のソフトを動かすのに支障がない程度です。イメージ的には98%
    程度と考えて下さい。
  Q:残り2%は具体的にはどこですか。
  A:最大の欠点はディスクアクセスが速すぎることです。これが原因で動作異常を起こ
    すソフトがあります。それ以外にも問題点は幾つかあります。
    ただし、現在のXM7にはディスクアクセスに(かなりテキトーに)ウェイトを挿入する
    機能がありますので、それを有効にすれば動くソフトもあるかと思います。
  Q:ターゲット機種をFM-7・FM77AV・FM77AV20・FM77AV20EXに切り替えできるようです
    が。
  A:FM77AV20モードでは2DDディスクイメージおよびオンボードRS-232Cが使用できます。
    FM77AV20EXモードではFM77AV20モードの機能に加え、DMACコントローラおよび拡張
    MMR(メモリ空間が256KBに制限されたサブセット版)が使用できます。このため、実
    機には搭載されていないCMT I/Fの使用についても特に制限はしていません。
    FM-7モードであってもディスク・漢字ROM・FM音源は使えます。このため、厳密には
    FM-7モードといっても、MMRのないFM-77L2に近い動作をします。
  Q:各バージョンのXM7/XM7dash/XM7 TypeRの間でのステートファイルの互換性は。
  A:XM7 L77TXは、XM7 TypeRのステートファイルとの互換性は一切ありません。 
    XM7 L77TXβ2/3ではXM7 L77TXβ1のステートファイルが読めませんが、仕様です。
    XM7 V3.4L77TXのステートファイルはXM7 V2.9L77TXの上位互換仕様となっているの
    で、XM7 V2.9L77TXで作成したステートファイルをXM7 V3.4L77TXでロードすること
    が可能です。逆にXM7 V3.4L77TXで作成したファイルをXM7 V2.9L77TXでロードする
    ことはできません。
    また、XM7 V1系とV2/V3系の間でのステートファイルの互換性はありません。
    現状では、XM7のステートファイルはV2.9L77SX+z09 R3d、XM7dashのステートファイ
    ルはV2.9L77a R45までのものに対応しています(たぶん)。

  <起動>

  Q:起動時に「仮想マシンを初期化できません(以下略)」と出ます。
  A:まず、このファイル(XM7.txt)の「ROMファイル」にしっかり目を通してください。
    必要なROMファイルがないか、ファイルサイズが不足しています。ROMファイルはカ
    レントディレクトリではなく、XM7.exeと同じディレクトリに置いて下さい。
  Q:XM7を終了させた直後に再度起動しようとしても起動できません。
  A:恐らくアンチウイルスソフトがXM7.iniのチェックを行なっているために前のXM7.ex
    eが終了していないものと思われます。しばらく経ってから再度お試しください。
  Q:動作中のOSにDirectXが入っているか、バージョンが正しいかわかりません。
  A:Win98以降ならOSデフォルトでDirectX3以降をサポートしていますので、気にする必
    要はありません。Win95/WinNT4は要チェックです。
  Q:メモリは何MBくらい実装している必要がありますか。
  A:OS本体や他のアプリケーションにもよるため一概には言えませんが、Windows 95で
    あれば最低32MBくらいから動作すると思います。XM7自体の消費メモリは5～10MB前
    後です。
  Q:同じFM-7エミュレータであるEM-7やFEMU7、VM7、eFM77AV40、eFM77AV40EXのROMイメ
    ージは使えないのですか。
  A:EM-7やFEMU7、VM7 V0.1のROMイメージは使えません。XM7 V2はFM77AVのROMイメージ
    を要求するためです。ただしこの逆は簡単な変換を施してやることで可能です。
    VM7 V0.2、eFM77AVが要求するFM77AVのROMイメージはファイル名を含めてXM7 V2と
    同じ仕様になっているので、そのまま利用できます。
    (というか、FM-7エミュレータ用ROMデータの抽出ツールとしてXM7のSAVEROMがデフ
     ァクトスタンダードになっている気がしなくもない…)

  <リセット>

  Q:ホットリセット機能とは何ですか。
  A:実機でBREAKキーを押しながらリセットした状態を再現するためのものです。「ウォ
    ームブート」(Warm boot)等とも言います。
    現在のXM7ではリセットをかけた際にキーの押下状態を仮想マシンに再度反映する処
    理を入れたために以前ほど重要度はありません。
  Q:TAB+リセット機能とは何ですか。
  A:FM77AV20EXのイニシエータROM内に追加された、「TABキーを押しながらリセットす
    ると高速モードで起動する」機能に対応するためのものです。リセット直後のキー
    入力取得タイミングがけっこう厳しかった(過去形)ので新設しました。
    イニシエータROMのバージョンチェックを行なっているため、FM77AV/20のイニシエ
    ータROMデータを使用した場合(機能を実現するコードが存在しない)、およびターゲ
    ット機種をFM77AV20/FM77AV/FM-7に落としている場合(高速モードに対応していない)
    はメニュー自体が無効となります。

  <ディスク>

  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:2DDファイルの構造・目的がわかりません。
  A:簡単に言うと2Dファイルの2DD版です。F-BASIC標準の80(track)×2(side)×16(sect
    or)×256(byte)を、頭から順に連結したものです。
  Q:VFDファイルの構造がわかりません。
  A:FM TOWNS版EM-7のドキュメントにファイルフォーマットの説明があります。こちら
    を参照して下さい(とは書いてあるが見当たらない(汁))。
  Q:D77ファイルの構造がわかりません。
  A:PC-88エミュレータP88SRの公式サイトに技術文書の形で公開されていました…が、
    最近になって閉鎖されたようです。たぶん該当サイトの魚拓がどこかに残っている
    と思うので、何とか発見できたらD88の説明をD77に読み替えて下さい。
    明をD77に読み替えて下さい。
  Q:D77ファイルではセクタステータスをどのようにサポートしていますか。
  A:仕様書では"DISK BIOSが返す値"となっていますがこれはPC-9800のDISK BIOSが返す
    値のことで、XM7では$B0のみサポートしています。この値のセクタを読み込むとCR
    C 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:テープの巻き戻し・早送りを行なうと、長時間XM7 TypeRが応答しません。
  A:仕様です。これはT77ファイルの最小単位(2バイト単位)でマーカ位置の検索を行な
    っているためです。最初まで巻き戻し機能はマーカ位置の検索ほ行なわず、単純に
    ヘッダを除いたT77ファイルの先頭位置に戻すだけなので非常に高速です。
  Q:T77ファイルのサイズが数MB～数10MBになるのですが、異常ではないですか。
  A:正常です。これはFM-7のテープインタフェースから読みとれる最低レベルのデータ
    をそのままファイル化しているためで、効率そのものは非常に悪いです。

  <画面・速度>

  Q:全画面モードの設定を"640x400"にしていても、設定されていないようです。
  A:設定できるかどうかはビデオドライバに依存します。全画面モードの解像度設定は
    優先度の設定であり、失敗すればもう一方(例えば"640x480")を使って試みます。
  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:ラスタ単位でレンダリングを行なった場合のメリット・デメリットは。
  A:ラスタ単位でのレンダリングを行なうことにより、ラスタスクロールの再現が可能
    となり、◎h!FM掲載の「ゆらぎの世界」シリーズが動作するようになります。
    また、「METAL-X-」シリーズの敵キャラが表示されない不具合が解消されます。
    逆にデメリットとしては、毎フレームの毎ラスタごとにレンダリングを行なうよう
    になるため、マシンへの負荷が増え、フレームスキップ等が発生しやすくなります。
  Q:ラスタ単位でのレンダリング対応で「画面描画タイミングを表示終了期間直後にす
    る」機能はなくなりましたか。
  A:GUIから設定する機能はなくなりましたが、INIファイルを直接書き換えることで対
    応できます。XM7.iniの[Screen]セクションに「DrawAfterVSYNC=0」と書いてくださ
    い(旧バージョンの「DrawTiming」と値が逆な点に注意してください)。

  <サウンド>

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

  <キーボード>

  Q:Windows 2000を使っていますが、[半角/全角]を押した時にリアルタイムキースキャ
    ンが正常に動作せず、オートリピートOFFの状態でもリピートがかかります。
  A:WinNT系でのDirectInputの仕様による制限事項で、従来バージョンのようにキーロ
    ックがかかってしまうのを回避する処理を行なっているためです。この動作が問題
    となる場合は、キーマップ設定機能を使って別のキーを割り当てて下さい。
    対策処理を行なっているのは[半角/全角]、[Caps Lock]、[ひらがな]の3つのキーで
    すが、[左Ctrl]、[右Ctrl]でも不具合が出るケースがあるようです。
    また、PC-9801キーボードの場合にもキーロックがかかる[CAPS]、[かな]キーにつ
    いて同様の対策処理を行なっています。
  Q:英語配列キーボードと日本語配列キーボードを機種によって使い分けているため、
    キーマップの自動設定機能を使いたいのですが。
  A:XM7.iniの[Unofficial]セクションに「AutoDetectKeyMap=1」と追加してください。
    キーマップ自動設定が有効な時には、GUIからのキーマップ設定は使用できません。

  <ジョイスティック>

  Q:FM特有の[5]キーストップを、ジョイスティックを使って回避できるそうですが。
  A:ジョイスティック設定でタイプを"キーボード"にし、センターを[5]に割り当てて下
    さい。センターに戻ったときに1回だけ[5]キーのMake/Break動作を行ないます。
  Q:ISA互換ゲームポートを使っていますが、重いポーリングを抑制するには。
  A:ジョイスティック設定で、ポート1・ポート2ともにタイプを"使用しない"に変更し
    てください。ゲームポートの定期ポーリングを行なわなくなります。
  Q:ジョイスティックのタイプで選択可能な"電波新聞社JOY I/F"とは何ですか。
  A:FM-7時代に電波新聞社から発売されたプリンタポート接続のジョイスティック"XE-
    7"/"XE-77"のインタフェースです。"ゼビウス"などが対応しています。
  Q:ジョイスティックのタイプで選択可能な"ASCII QuickShot"とは何ですか。
  A:FM-7時代にアスキーから発売されたプリンタポート接続ジョイスティックのインタ
    フェースです。"ザ・キャッスル"などが対応しています。
  Q:ジョイスティックのタイプで選択可能な"◎h!FM JOY I/F"とは何ですか。
  A:FM-7時代に日本ソフトバンクから刊行されていた雑誌"◎h!FM" 1984年9月号に記事
    が掲載されていたプリンタポート接続の"◎h!FM標準ジョイスティック"です。"リン
    グの上は大さわぎ"、"ぐっちゃんばんく"などが対応しています。
  Q:プリンタポート接続ジョイスティックとプリンタ出力/ジャストサウンドエミュレー
    ション機能の併用はできますか。
  A:電波新聞社JOY I/F、ASCII QuickShot、◎h!FM JOY I/Fとプリンタ出力/ジャストサ
    ウンドエミュレーション機能の併用はできません。どちらか一方のみの使用となり
    ます。
    また、プリンタポートは1つしかないので、電波新聞社JOY I/Fと◎h!FM JOY I/Fの
    混在使用などもできません。

  <マウス>

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

  <日本語通信カード>

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

  <デバッガ>

  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:割り込みウインドウで、OPN/WHG/THGがMaskになりません。
  A:仕様です。OPN/WHG/THGの表示に関してはON/OFFにしか対応していません。
  Q:日本語サブCPUの割り込みウインドウはありますか。
  A:現状、日本語通信カードにはCPUの割り込み信号が発生する仕組みがないため実装し
    ていません。

  <設定>

  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程度しか出ないような状況で有効です。ただし、厳密な実行
    タイミングを要求するソフトは動作しなくなる可能性があります。
    CPUパワーが上がってきた現状に合わせ、この機能はそろそろ削るかもしれません。
  Q:オプション設定でビデオディジタイズカードを無効にした場合、どうなりますか。
  A:ビデオディジタイズカードはI/Oエミュレーションを行なっていないため、特にどう
    ということはありません。VMレベルでカード無しとして処理されるのみです。

  <ツール>

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

  <個別の互換性>

  Q:"デスフォース"のオープニングでハングします。
  A:CPU速度を変更して下さい。たとえばメインCPU、サブCPUともに1752に設定すると
    動作します。これはCPU間の通信制御が甘く、お互いの進行が少しズレただけで
    デッドロックするからです。
    XM7 L77TXではデフォルト設定でほとんどの場合に動作するように改善されています
    が、「マウスセットを使用する」状態ではスケジューリングタイミングの微妙な揺
    らぎでハングすることがあります。

  <その他>

  Q:今後のバージョンアップ予定は。
  A:まぁ、その気になれば…という感じです、
  Q:Windows 8/8.1のModern UI版やWindows 10のユニバーサルアプリ版、macOS版など、
    Win32以外の環境で動作するバージョンの開発予定は。
  A:その他のプラットフォームに対してのポーティングの予定は全くありません。
  Q:追加して欲しい機能、動くようにして欲しいソフトがあるのですが。
  A:こっちは散々イメージファイルを送りつけられたんで、もうしらんがな。


□連絡先

  一次公開サイトだけ書いておきます。そちらに連絡先を明記してありますので、当方
  にコンタクトを取りたい方はメール、またはTwitterでお願いします。ただし押しつけ
  脅迫系メンヘラストーカー(笑)はお断りです。

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