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

  FM-7 EMULATOR XM7 (V1.1/V2.9/V3.4 L77TXβ12 ～ with Z80 card & FDX support)

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

  FDX support code
   Copyright (C) 2021-2025 GIMONS

   External DLL support code by Toma
   ROMEO support code by usalin
   line printer support code by Ben.JP
   Icon designed by TENMARU

   Z80 emulation engine by Mamiya
   Z80 disassember core by Marat Fayzullin

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

□はじめに

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

  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はＰＩ．、たけがみりう、GIMONSの3名が著作権を所有する、クリエイティブ・コ
  モンズ・ライセンス「表示 - 非営利 - 継承 4.0 国際 (CC BY-NC-SA 4.0)」によって
  ライセンスされているソフトウェアです。
  ライセンス条項に関することについて、詳しくは以下のWebサイトを参照してください
  (以下のリンク先は日本語で記述されています)。

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

  使用・配布・翻案・改変についてはライセンスに従う限り自由です。
  ここ

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

  さらに重ねて書きますが、XM7の使用・配布・翻案・改変についてはライセンスに従う
  限り自由ですが、逆に言えば、営利目的での使用・配布等はできません(クリエイティ
  ブ・コモンズのサイトにも非営利での使用等のみ認められている旨明記されています)。
  例外としては一般流通やオンライン販売に乗せるソフトウェアでのXM7コアのライセン
  ス使用があり、これについては個別相談に応じますが、それらのプロダクトにおいて
  も一般に公開しているXM7ソースの流用はできません。

  営利目的の配布には、例えば物理メディアに収録されたかたちでのオークションサイ
  ト・フリマサイト等への出品があげられます(つまり、XM7の配布に於いて1円でも利益
  を上げたならその時点でライセンス違反です)。また、もしそのようなかたちで配布さ
  れたXM7のコピー(敢えて言うなら非正規流通品)を入手された方がおられましても、そ
  の方への一切のサポートはいたしかねます。

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

  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.)

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

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

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

  Z80コアにはMamiya氏の「KMZ80」、Z80逆アセンブラには、ベースとしてMarat Fayzul
  lin氏のfMSX用Z80逆アセンブラを採用させていただきましたので、XM7/XM7gの商用利
  用はできません。

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


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

  XM7 V1.1/V2.9/V3.4L77SX+z10 R4→L77TXβ12の変更点一覧です。

  <新規>
    ・デフォルトキーマップ読み込み機能をリスト化。
      それに伴い以下のキーボードマップを追加 (2025/09/01)
      ・瑞起 X68000 Z キーボード(Windowsモード専用)
      ・Lenovo ThinkPad 6段キーボード(日本語用、ThinkPad X395にて確認)
      ・Panasonic Let'snote Escの隣に半角/全角があるキーボード用(一応日本語用)
      ・FMV LIFEBOOK Copilotキー付きキーボードなど用(LIFEBOOK WU2/Jにて確認)
    ・ユーザーキーマップのセーブ/ロード機能を追加 (2025/02/10)
      ・ユーザーキーマップを3つまで扱えるように機能変更 (2025/09/05)
    ・起動パラメータでの動作機種(/MACHINE:xxxx)・起動モード(/BOOT:xxxx)の指定に
      対応
    ・申し訳程度にメインウインドウをダークモードに対応 (2025/12/24)
      (手抜き実装なのでステータスバー・ダイアログなどはライトモード固定です)
    ・XM7dash/XM7 TypeRに搭載されている外部画像フィルタDLL機能を追加
    ・XM7dashから引っ張ってきたクイックセーブ・ロード機能を追加
    ・全力駆動モード時(CPUのみ、VM全体とも)に日本語サブ除くCPUの速度比率がタイ
      トルバーに表示されるようになった
    ・スキャンライン輝度調整機能を追加(書き忘れてた希ガス)
      ついでにスキャンライン輝度が0の場合は従来通り単に黒で埋める処理に変更
    ・GIMONSさん純正XM7gに準拠したFDXサポート機能を追加(無理やり統合(汗))
    ・フルスクリーンにもスキャンライン輝度を反映させるように変更(24bitは不可)

  <修正>
    ・ウインドウモード復帰時、常に画面右上にウインドウが移動する問題を修正
    ・DOSモードでのホットリセットが正常に働かなかった問題を修正
      (いつからなのかは調べてませんが結構昔からあったかも、これ…)
    ・2D/2DD/VFDファイルをマウントしているときにファイル履歴が使えない問題を修
      正(…というか某ほげ氏の手抜きではｗ)
    ・L77SX+z10.5β4で追加した外部画像フィルタ機能使用時、4096色モード時に落ち
      る問題を修正(V3.4L77TXβ7で対策をさらに強化しています)
    ・スキャンライン輝度の設定がうまく保存されない問題を修正(某ほげの(ry)
    ・msctf.dllの読み込み処理で落ちる可能性があった問題を修正
      (DLLが読み込めていれば多分大丈夫なハズ)
    ・画像フィルタDLLをNoneにするとスキャンライン輝度設定ダイアログが出る問題を
      修正
    ・Z80の割り込み透過周りの処理を修正(V2/V3で純正CP/M-80が動くようになりまし
      た)
    ・V1でTTLパレットが一切効かない問題を修正(なんだこりゃ…)
    ・旧バージョンWindowsでもXM7m_v*.exeが起動するように修正
    ・V2/V3のステートファイル読み込み処理のうちZ80周りが腐ってたので修正

  <変更>
    ・FDCのWRITE TRACKコマンドにおけるデータ列の認識処理を変更
      (表面上に見える処理では特に変わっていないように見えますが再現性が上がった
       …かも)
    ・前回の(β9)はWin11以外で動かなかった可能性があるのでBCCビルドでのダークモ
       ード対応を取りやめた
    ・「時刻アジャスト」機能を「時刻をホスト側に同期」に名称変更
      それに伴い、常に時刻をホスト側に同期する機能を追加
    ・ファイル履歴の数を15個に増加
      (10個目以降のファイルは16進数のキーで選択可能です)
    ・メニューからのホットリセット機能/TAB+リセット機能を削除
      (Esc(STOP)やTABを押しながらF12(vf・2)でリセットするとホットリセット・TAB+
       リセットが可能です。これは結構前からこうなってました)
    ・FM77AVシリーズエミュレータであるV2/V3もZ80カードに仮対応
      (富士通純正FM-7用CP/M-80はまだ動きません、BIOSでデッドロックしてるところ
       までは見えてきたんですがその原因が不明で…)
    ・Intel HD Graphics 3000で不具合が生じてしまったため、GPD WIN系などの内部が
      縦画面処理されているハードへの対策処理を設定ダイアログの画面タブで設定す
      る方式に変更
    ・Embarcadero C++でのビルドに正式対応(dxextra.libが入ってないんで該当部分を
      Web記事を参考にしながらまるっと組むハメになりましたが)
    ・ダークモード時のステータスバーが少しはまともに見えるようになった
    ・ステータスバーの機能説明欄において、英語圏の方にわかりにくいらしいステー
      トファイル関連メニュー項目に英語説明を追加
    ・その他、表に見えない部分での修正多数


□動作環境

  Win32系OS(Win95/Win98/WinMe/WinNT4/Win2000/WinXP/WinVista/Win7/Win8/Win8.1/Wi
  n10/Win11)+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-9821シリーズのみサポート対象とします(とはいってもPC-9821ではV2/
    V3が終わりの方の機種でも無改造ではマシンパワー不足になるかも…)。

  ・Windows 95/98/Me/NT4.0/2000/XP/Vista/7/8/10はマイクロソフト社のサポートが既
    に終了しています。これらのOS上でXM7を動作させる場合は、OSのセキュリティ上の
    リスクを理解したうえでご利用ください。

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

  ・メーカー製PCにおいて、Windows Meは激しく推奨しません。
    理由はお察しください(注:ネタではありません)。

  ・WindowsNT 4.0ではService Pack 3以降が必須です。

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

  ・WindowsNT系(NT4.0/2000/XP/Vista/7/8/8.1/10/11)では一部キー入力に制限があり
    ますが、XM7側での対策はできる限り行っています。万が一問題がある場合は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対応機能は使用できません。

  ・SCCI対応機能はソース上では実装してありますが、開発者の「がし3」さんの意向に
    よりSCCI2への移行が行われましたので封印してあります。

  ・GPD WIN系などの内部処理が縦向き画面になっているハードで使用する場合、INIフ
    ァイルの[Screen]セクションに「RotateFix=1」と記述してください。さもないと、
    フルスクリーン時に画面の右側の表示が異常となります。

  ・Windowsでの動作検証は、公開時点での最新OS(Windows 11)においてはInsider Pre
    viewのRelease Previewチャネル、Windows 10/7については最新バージョン(10なら
    22H2)で行なっています。
    最近はWindows Vistaと8一族での動作検証はしていません。めんどくさいのでｗ


□ダークモード対応版について

  XM7m_v*.exeのほうがダークモード中途半端対応版です(というかWin32APIだけで何と
　かなるようにしないMSがイケナイ)。Windowsのバージョンが最新版でない場合に正常
　に動作しない場合があります。もし何らかの理由でバグっても当方が手抜きせざるを
  得なかった事情がありますのですべてMSの手抜き実装のせいということにして諦めて
  ください(ォ

  なお、XM7m_v*.exeのビルドにはMicrosoft Visual Studio 2010 Professionalを使用
　しています。このため、XM7m_v*.exeはWindows Vista以降でしか動作しません。


□ディスプレイ描画(主に外部DLLの使い方)

  XM7は外部画像フィルタDLLに対応しています。
  外部DLL使用時には非整数倍拡大および表示アスペクト比の変更が可能です。

  XM7.exeと同じフォルダに該当するDLLがあった場合、ウィンドウモード時の描画処理
  に外部DLLを使用することができます。iniファイルで特に指定しない場合、stretch.
  dllが使用されます(該当するファイルがない場合は何も起こりません)。

  動作設定プロパティで選択も可能です。
  一度実行するとXM7.iniの[Screen]セクションにDllList0から8までのキーが追加さ
  れるので、そちらを変更することで別のDLLへ変更も可能です。
  他にもいくつかいじれる設定はありますが、変更は自己責任でお願いします。

  外部画像フィルタDLLは各位で導入してください。
  ダウンロードは以下のねねっち氏(895氏)のサイトからお願いします。
  なお、現状で動作保証している外部画像フィルタDLLはstretch.dllのみです。
  (意味ねぇ……)

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

  --------------------------------------------------------------きりとりせん--
  なお、ライセンスの所にも書いたことを繰り返すようですが、外部DLLの指定ミスによ
  るマルウェア感染などがあった場合でもXM7の作者は一切の保証をしません、というか
  できません。この機能は完全に自己責任でご利用ください。こちらとしてはこのへん
  のソースに関わる問題は全部某氏【誰】に押しつけたい気分ですｗ

  あと、今回からスキャンラインの輝度が変更できるようになってます(当然400ライン
  モードでは関係なし)。8色モード以外では重くなりますが、0にしておけば今まで通
  り該当領域をゼロクリアしてるだけなんで負荷は最低限で済むはずです。
  結果としてどれくらいのスペックが必要になっているのかは一番最初に使ってたK6-
  Ⅲ/366マシンがマザー、ゲタともに残ってるのにパーツが足りないとかいろんな理由
  で組み上げられない状態()なので、とりあえずスキャンライン輝度変更だけなら公称
  値通りV3でK6-Ⅲ/400か450あたりを目安にしときます。外部DLL使用時は知らんｗ
  --きりとりせん--------------------------------------------------------------


□Win32メニュー(旧バージョンからの変更箇所のみ)

　ファイル(F)
    クイックロード(Alt+F6)      ステートファイルのクイックロードを行ないます。
    クイックセーブ(Alt+F7)      ステートファイルのクイックセーブを行ないます。

  表示(V)
    表示サイズ(Z)               ウインドウモード時の表示サイズを設定します。
      アスペクト比調整(E)       画像フィルタDLL使用時にアスペクト比を調整します。
      アスペクト比設定(A)       上記機能使用時のアスペクト比を設定します。

  ツール(T)
    時刻をホスト側に同期(A)     VMのRTCの時刻をWindows側に合わせて再設定します。
    常に時刻をホスト側に同期(Y) VMのRTC時刻を常にWindows側に合わせます。
    画像フィルタ(I)             使用する外部画像フィルタDLLを指定します。


□作者のたわごと

  またもや新ばーぢょんですｗ
  これで大きな問題がなければしばらく放置していたTypeRにこのばーぢょんの機能を反
  映させる作業に入ります…とかいうとデカい虫が出てくるんだろうなｗ
  (とか書いてたらほんとにデカいのが出てきたんで公開延期になったのは裏の話)

  そういやこの間プレインストール状態に11アプグレかけて放置してたThinkPad X395の
  OSをクリーンインストールしたときになぜか途中で失敗するんで調べてみたらUSBメモ
  リの中身が腐ってたといふ…たまにはそういうこともあるというか…おかげさまで少
  し動作も速くなって快適でつ。あとはメモリスロットが憑いてれば(とかいってみる


  <XM7 TypeR・XM7 V3・XM7改 開発スペック>
  設計開始日時   2001年2月28日 (XM7改 V3.0L0.0)
  開発開始日時   2001年3月10日 (XM7改 V3.0L0.0)
  開発終了日時   2026年2月1日 (XM7/XM7g V3.4L77TXβ12)

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

  主要ハード     開発マシン1:Lindwurm5 (powered by Sycom。今回もこっちメイン)
                   ASRock B550M Steel Legend (AMD B550 Chipset)
                   AMD Ryzen 7 5700X(Vermeer) 3.40GHz 8C/16T
                   64GB RAM, 1TB NVMe SSD(ゐンテル改めSolidigm)+4TB HDD(WD)×                   ASUS PHOENIX RTX 3060 V2 (GeForce RTX 3060, 12GB)
                   Creative SoundBlaster X-Fi Titanium Professional Audio
                   Windows 11 Version 25H2 Build 26200(x64,以下OSは基本的に同様)
                   Windows 7 Ultimate Service Pack 1(x64, on VMware WS)
                   IODATA EX-LD4K271D, EIZO EV2455, DELL U2415
                 開発マシン2:Wyvern4 (次期メインノート。試験投入中)
                   FUJITSU FMV LIFEBOOK WU2/J Frost Gray  FMVUH04002
                   Intel Core i5-1235U(Alder Lake)@4.4GHz(P)/3.3GHz(E) 10C/20T
                   16GB RAM, 512GB NVMe SSD(KIOXIA), Intel Iris Xe Graphics
                   Realtek High Definition Audio
                 開発マシン3:Xiuhcoatl2 (今回もサボり)
                   Lenovo ThinkPad X395  Type-20NMS1VR00
                   AMD Ryzen 5 PRO 3500U(Picasso) 2.10GHz 4C/8T
                   8GB(-1GB) RAM, 256GB NVMe SSD (TOSHIBA MEMORY)
                   AMD Radeon Vega Mobile Gfx
                   Realtek High Definition Audio
                   Fibocom L850-GL (M.2 LTE Card)
                 検証マシン4:Phoenix (相変わらず試験投入中)
                   Dynabook dynabook G83/HS Onyx Blue  A6G9HSFAD521
                   Intel Core i5-1135G7(Tiger Lake) 2.40GHz 4C/8T
                   16GB RAM, 512GB M.2 NVMe SSD (寒寸)
                   Intel Iris Xe Graphics, Realtek High Definition Audio
                   Windows 11 Insider Preview Dev Channel Build 26220 (x64)
                 検証マシン:新Tamagorou (某氏のところに同じような構成のがｗ)
                   Ctrl+Alt+DELL(謎) Optiplex 3060
                   Intel Core i5-8500(Kaby Lake-R) 2.10GHz 4C/8T
                   16GB RAM, 256GB M.2 NVMe SSD + 1TB HDD(海門)
                   DELL謹製 AMD Radeon RX550, Intel UHD Graphics 630
                   Realtek High Definition Audio
                 ターゲットマシン
                   FM77AV40EX, FMT-DP531
                   FM77AV40SX, FMDPC232D, SONY KDL-20J1
                   FM77AV-2, FMTV-152, ビデオディジタイズカード(FM77-411)
                   FM-77L4, CZ-600DB
                   FM-NEW7, PC-KD252, マイクロフロッピィディスクドライブ
                   (MB27631H)
                   FUJITSU MICRO 8, CZ-600DB/PC-KD252

  主要開発言語   Borland C++ Compiler 5.5.1
                 Microsoft Visual Studio 2010 Professional
                 Embarcadero C++ Compiler 7.30
                 Netwide Assembler 2.15.05
                 HD6309 cross assembler version 01.20T


□連絡先

  ホームページ
  http://retropc.net/ryu/xm7/ (さらにしにかけてますｗｗｗｗｗ)

  Twitter(現X)
  https://x.com/RyuTakegami (そろそろ浮かんでるかも)

