# M88am — 改変内容 (rururutan/m88 からの差分)

**M88am** は、cisc 氏の PC-8801 エミュレータ **M88** の、rururutan 氏によるフォーク版
（https://github.com/rururutan/m88 ）をベースにした私家改造版です。

M88 のライセンス条項にある「M88 に改変を加えたソフトを配布する場合は，
M88 の著作権表示，および改変内容を明示してください」に従い、
ベース版から M88am への改変内容をこの文書にまとめます。
著作権表示は `README.md` および About ダイアログにあります。

**ベースにしたリビジョン:** rururutan/m88（取得日 2026-08-18）

---

## 0. 全ソースの文字コードを変換しています

**`src/zlib/` を除く全ソースファイルを CP932 から UTF-8 (BOM付き) に変換しました。**
`src/win32/M88.rc` のみ UTF-16LE です。

この変換はビルド構成とセットになっています。プロジェクトファイルで
コンパイラに以下を指定しています。

```
/source-charset:utf-8 /execution-charset:.932
```

M88am は **MBCS ビルド**（`CharacterSet` は `MultiByte`）で、ANSI 版 Win32 API に
日本語文字列リテラルを直接渡しているため、**ソースは UTF-8、実行時文字列は CP932**
という組み合わせが必須です。`/utf-8` に置き換えると文字化けします。

**この変換は機械的なもので、動作には一切影響しません。**
以下の一覧では、文字コード変換だけのファイルは除いてあります。

---

## 1. 改変の概要

| 段階 | 内容 |
|---|---|
| 環境整備 | Visual Studio 2022 (v143) 形式へのプロジェクト変換、x64 構成への一本化、全ソースの UTF-8 化、ビルドスクリプトの整備 |
| デバッグウインドウ | マウスホイールスクロール対応、ウインドウの拡大・フォントサイズ拡張（8段階）・位置とサイズの永続化、18px 表示への対応 |
| ディスク | ディスクイメージの排他オープンをやめてオプション化 |
| 画面表示 | ウインドウ倍率 (100 / 150 / 200%)、フルスクリーン切替 |
| CRT フィルタ | **D3D11 描画パスの新設**（`DrawD3D`）。パレット展開とブラウン管効果の 2 パスシェーダ。パラメータ調整ダイアログ |
| UI 整理 | メニュー構成の再編、設定ダイアログの整理、About ダイアログ |
| その他修正 | FM 音源 SSG-EG を本家 M88 2.21a の実装に差し戻し |
| **デバッガ** | ポーズ / 再開 / ステップイン / ステップオーバー / ステップアウト、実行・メモリ読み書きブレークポイント、レジスタ編集、GVRAM プレーンダンプ、逆アセンブル窓の PC 追従と BP 表示 |
| **デバッガ (拡張)** | アドレスジャンプ、ブレークポイント管理ウインドウ、ウォッチウインドウ、バックトレース、ディスクイメージ単位での設定保存 |
| **デバッガ (ステップ実行の改善)** | ブレーク中にスケジューラの時間を進めないよう修正（ステップのたびに割り込みが多発していた原因）、ステップ実行中の割り込みスキップ、デバッグ用ファンクションキーをデバッグウインドウでも受け付ける |
| **デバッガ (操作性)** | サブCPUのステップ実行、コードウインドウの表示CPUをブレーク位置に追従、復元したブレークポイントを無効な状態から始める、停止中はステータスバーの背景色を変える |
| フルスクリーン | 全画面でもステータスバーを表示できるオプション、移行時の操作案内、右クリックのポップアップメニュー、最前面固定をアクティブ時のみに限定 |
| CRT フィルタ (拡張) | プリセットをユーザが上書き保存できる「ユーザ1〜3」に変更、推奨値の調整 |
| その他 | ドラッグ＆ドロップ時のウインドウアクティブ化、拡張モジュール読み込み結果の可視化、OS 互換性マニフェストの追加 |

---

## 2. 新規に追加したファイル

**以下は M88am で新規に書き起こしたものです。2条項BSDライセンスとします。**

### ソース

```
src/devices/z80debughook.h
src/pc88/debugger.cpp
src/pc88/debugger.h
src/win32/DrawD3D.cpp
src/win32/DrawD3D.h
src/win32/M88.manifest
src/win32/bpmon.cpp
src/win32/bpmon.h
src/win32/dbgsettings.cpp
src/win32/dbgsettings.h
src/win32/tracemon.cpp
src/win32/tracemon.h
src/win32/watchmon.cpp
src/win32/watchmon.h
src/win32/wincrtcfg.cpp
src/win32/wincrtcfg.h
src/win32/shaders/crt.hlsl
src/win32/shaders/palette.hlsl
```

### ビルド構成 / ツール

以下はソースコードではなくビルドの入れ物です。
`M88.sln` / `*.vcxproj` は、ベース版の `M88_2008.sln` / `M88_2008.vcproj` を
Visual Studio 2022 (v143) 形式へ変換したうえで、x64 構成への一本化、
文字コードオプションの指定、新規ファイルの追加を行ったものです。

```
M88.sln
M88.vcxproj
M88.vcxproj.filters
diskdrv/diskdrv_2008.vcxproj
diskdrv/diskdrv_2008.vcxproj.filters
cdif/cdif_2008.vcxproj
tools/build.cmd
tools/build.ps1
tools/bisect-build.ps1
tools/make-dist.ps1
```

> ベース版の `M88_2008.sln` / `M88_2008.vcproj` / `M88.dsp` / `M88.dsw` は
> 削除せずそのまま残してあります。

---

## 3. 内容を変更した既存ファイル

**以下は M88 のオリジナルライセンスに従います。**
**文字コード変換だけのファイルは含みません。**

```
src/common/device.cpp
src/common/device.h
src/common/device_i.h
src/common/memmgr.cpp
src/common/memmgr.h
src/common/schedule.cpp
src/common/schedule.h
src/devices/Z80c.cpp
src/devices/Z80c.h
src/devices/fmgen.cpp
src/devices/fmgen.h
src/devices/fmgeninl.h
src/pc88/config.h
src/pc88/memview.cpp
src/pc88/memview.h
src/pc88/pc88.cpp
src/pc88/pc88.h
src/win32/88config.cpp
src/win32/88config.h
src/win32/DrawD2D.cpp
src/win32/DrawD2D.h
src/win32/M88.rc
src/win32/about.cpp
src/win32/about.h
src/win32/basmon.cpp
src/win32/cfgpage.cpp
src/win32/codemon.cpp
src/win32/codemon.h
src/win32/extdev.cpp
src/win32/extdev.h
src/win32/file.cpp
src/win32/file.h
src/win32/iomon.cpp
src/win32/memmon.cpp
src/win32/memmon.h
src/win32/messages.h
src/win32/module.cpp
src/win32/module.h
src/win32/mvmon.cpp
src/win32/mvmon.h
src/win32/regmon.cpp
src/win32/regmon.h
src/win32/resource.h
src/win32/sequence.cpp
src/win32/sequence.h
src/win32/soundmon.cpp
src/win32/status.cpp
src/win32/status.h
src/win32/ui.cpp
src/win32/ui.h
src/win32/wincfg.cpp
src/win32/wincfg.h
src/win32/wincore.cpp
src/win32/wincore.h
src/win32/windraw.cpp
src/win32/windraw.h
src/win32/winmon.cpp
src/win32/winmon.h
src/win32/winsound.cpp
src/win32/winsound.h
```

`README.md`（M88am についての追記とライセンス節の補足）も変更しています。
ベース版および M88 オリジナルのライセンス条項は削除・改変していません。

---

## 4. 変更していないもの

- **`src/zlib/`** — サードパーティ（zlib 1.2.8, Jean-loup Gailly / Mark Adler）。
  **変更していません。**文字コード変換の対象からも除外しています。
  zlib ライセンス（`src/zlib/zlib.h` 冒頭）に従います
- **`src/devices/Z80_x86.cpp` / `Z80_x86.h`** — x86 専用のハンドアセンブリ Z80 コア。
  M88am は x64 ビルドのみを対象としているため、こちらは使用しておらず、
  一切変更していません（x64 では `Z80c.cpp` の C++ インタプリタが使われます）
- **`src/devices/Z80Debug.*`** — 2 つの Z80 実装を並走比較するエンジン検証用ハーネス。
  `CPU_DEBUG` 定義時のみ有効で、M88am のデバッガとは無関係です
- **`src/piccolo/`** / **`src/win32/romeo/`** — 未変更（文字コード変換のみ）
- `diskdrv/` / `cdif/` / `sample1/` / `sample2/` / `writetag.cpp` — ソースは未変更です
  （文字コード変換のみ）。`diskdrv` は x64 でビルドし直しただけです。
  **公式サイトで配布されている `diskdrv.m88` は 32bit DLL なので、
  x64 版の M88am では読み込めません。**同梱のソースからビルドしたものを使ってください
  （`tools/build.cmd` で `x64\Release\diskdrv.m88` が生成されます）
- **`e1.rom` は同梱していません。** diskdrv 機能を使うには、オリジナル M88 の
  配布物に含まれる `e1.rom` を `M88.exe` と同じフォルダに置いてください
  （`diskdrv/dskrom.asm` ほかがその元ソースです）

---

## 5. ビルド構成について

- **x64 のみを対象としています。**Win32 (x86) 構成はプロジェクトに残していますが、
  ソリューションのビルド対象から外してあり、動作は保証しません
- Visual Studio 2022 (v143) / Windows SDK
- `tools/build.cmd` でビルドできます（`x64\Release\M88.exe` が生成されます）

---

## 6. 実行に必要なもの

M88.exe と同じフォルダに、**実機から吸い出した ROM** が必要です。
ROM は M88am には含まれていません。（ROM に関する質問にも、お答えできません）

```
PC88.ROM (N88-BASIC) / N88.ROM / N88_0.ROM〜N88_3.ROM
N80.ROM / KANJI1.ROM / KANJI2.ROM / FONT.ROM
```

M88 のライセンス条項にあるとおり、**使用者は NEC PC-8801 シリーズの本体を所有し、
その本体から直接取り出した ROM データを使用する必要があります。**
