M88

# M88 - PC88 emulator -

### 概要

M88 は，NEC の 8bit 時代の名機 PC-8801 のソフトウェアを Win32 環境で動作させる， エミュレータと呼ばれる種類のプログラムです．

PC-8801mkIISR 以降に搭載された機能を含む，88 の主要なハードウェアをソフトウェアのみで再現しています． このため少々(?) CPU パワーを費やしますが，88 とは縁も所縁もなさそうな環境(あ，Microsoft 繋がりか)で，昔懐かしい 88 のソフトを動かすことができるようになります．

ただし，M88 が再現するのは 88 のハードウェア機能だけです． PC-88 を再現するためには欠かせない，N88-BASIC 等のファームウェアによる機能は M88 には一切実装されておりません． このため，実際に M88 を起動し，ソフトを動作させるためには，実機に搭載されている ROM からファームウェアを取り出す必要があります．

### 著作権，免責規定等

M88 を使用する前に，確認してください．

- M88 は作者 cisc (cisc@remus.dti.ne.jp) が著作権を所有しています．
- M88 はフリーソフトです．
- 作者は M88 の動作に関していかなる保証もしません．完全に無保証です．
- 作者は M88 に起因するいかなる被害・損害に対しても，一切の責任を負いかねます．
- M88 で使用する ROM データは著作物に相当します．使用者は著作権法を厳守してください．

### 使用上の注意

M88 を使う場合，PC-8801 シリーズの本体から直接転送した BIOS データを用意する必要があります． M88 の使用者は NEC PC-8801 シリーズの本体を所有している必要があります． 実機を所有していない方が著作権者の許可なく BIOS データを入手・使用すると著作権法に抵触します．

### 動作環境

M88 は以下に示す環境で動作することを期待して作られています．

CPU | IA-32 系 CPU Pentium Pro 世代(Pentium-II/K6)以降の CPU を推奨します．
OS | Windows 95/98/NT4/2000 (x86) DirectX 3 以上必須． VC 6.0 に対応したランタイムライブラリが必要になるかも．
キーボード(*1) | 日本語 106 キーボード または PC-98 用キーボード
88 本体 | PC-8801mkIISR 以降(PC-88VA系も可，PC-8801/mkII は不明)

(*1) 未対応のキーボードを使用する場合，押したキーと 88 に入力される文字が対応しない可能性があります．

### 準備

#### BIOS の転送

まず，88 本体から BASIC-ROM の内容を転送します．

注意：88 の ROM データは著作物です． 個人的な利用以外は，著作権法上，権利者の許可なく利用することはできません．

##### 5 インチドライブを搭載した AT 互換機がある場合

M88 Tools for AT の中の READROM.EXE が使用できます(DOS/Win95 で動作確認済)．

まず，2D のブランクディスクを５インチドライブに入れ，
`READROM M [drive]:`
と実行し，読み出し用ディスクを作成します．
このディスクを 88 で起動し，Completed の文字とともにディスクランプが消灯するまで待ちます．

その後ディスクを５インチドライブに入れ，
`READROM R [drive]:`
と実行すれば，カレントディレクトリに ".ROM" という拡張子を持つ BIOS データが作成されます．

##### Windows 機と 88 が近くにある場合

Windows 機と 88 をシリアルクロスケーブルで接続して BIOS データを転送することができます．

TransDisk を使用してください． 詳しい説明は付属のテキストにあります．

##### 自力で読み出す人へ

88 の内部に詳しい方は自力で読み出すのも良いでしょう． 必要なデータとファイル名は以下の通りです．

ROM 種別 | アドレス | ファイル名
N88 BASIC ROM | 0000-7fff | N88.ROM
N88 E0-ROM | 6000-7fff | N88_0.ROM
N88 E1-ROM | 6000-7fff | N88_1.ROM
N88 E2-ROM | 6000-7fff | N88_2.ROM
N88 E3-ROM | 6000-7fff | N88_3.ROM
N88 BASIC ROM | 0000-7fff | N80.ROM
SUB ROM(FDD) | 0000-1fff(*1) | DISK.ROM
漢字 ROM | (128KB) | KANJI1.ROM(*2)
第 2 水準 | (128KB) | KANJI2.ROM(*3)
辞書 ROM | (512KB) | JISYO.ROM(*4)
N80 BASIC ROM | 0000-7fff | N80_2.ROM(*5)
CD-BIOS ROM | 0000-7fffx2 | CDBIOS.ROM(*6)
N80v2 BASIC ROM | 0000-7fff,6000-7fff | N80_3.ROM(*7)

(*1) SR, FA 等，2D 専用機は 0000-07ff まで

(*2) M88 はテキストの表示に漢字 ROM の中の 1/4 倍角フォントを利用しているので， KANJI1.ROM がないと画面が正常に表示されません． 但しテキストフォントのファイルを自作すればそれで代用することも可能です(FONT.ROM 8 バイト * 256 文字)．

(*3) MR, FH/MH 以降にしか実装されてませんが，それ以前の機種から読み出してもファイルは作成されます．但し中身に意味はありません．削除しても結構です．

(*4) MA, MA2, MC に実装されていますが，添付の日本語 DISK BASIC を使わない限り普通必要ありません．本当に必要な方のみどうぞ．

(*5) N80 Mode を使用する場合のみ必要です．PC-8001mk2/SR から吸い出すことが可能です．

(*6) CD-ROM 拡張モジュールを使用する場合のみ必要になります．

(*7) N80v2 Mode を使用する場合のみ必要です．PC-8001mk2SR から吸い出すことが可能です．

起動には最低でも N88.ROM または PC88.ROM，そしてフォントファイル(KANJI1.ROM 又は FONT.ROM)が必要です． その他のファイルが足りない場合，起動はしますが，正常な動作は期待できません． N80 mode のみ使用される場合で N88.ROM を持っていない場合は N80_2.ROM のコピーを N88.ROM という名前で置いておいてください．

##### おまけ: P88SR 用の PC88.ROM を使用する場合

KANJI1.ROM がない場合漢字表示が豆腐になりますが，とりあえず起動できるようになります． また，KANJI1.ROM が無い場合，テキストフォントファイル FONT.ROM が必要になりますが， これには P88SR が自動生成したフォントファイル PC88.FNT が使用できます． FONT.ROM という名前に変えて置いてください．

KAJA 氏のサイトにある GETK というツールで， 98 に搭載されている漢字 ROM から KANJIx.ROM を作成することができます．

#### リズム音

YM2608(OPNA)に搭載されているリズム音源は，LSI 内部の ROM に入っている ADPCM サンプルを鳴らすものです．そのため，M88 でリズム音を鳴らしたい場合は，実機から録音するなり，似たような楽器から録音するなりしてリズム音のサンプルを用意する必要があります．

モノラル, 16bit PCM の wav ファイル のみ使用できます． wav ファイルの読み込み部分は，超手抜きな実装なので，ヘッダーに余計なものがあると正常に読みこめません． サンプルのファイル名は下記の通りにしてください． ひとつでも欠けているとリズム音は鳴りません．

リズム音の周波数変換アルゴリズムは，単純な間引き法です． 通常使用する PCM レートにあわせた wav ファイルを用意すると音質を落とさずに再生できます．

音色 | ファイル名
バスドラム | 2608_BD.WAV
スネアドラム | 2608_SD.WAV
トップシンバル | 2608_TOP.WAV
ハイハット | 2608_HH.WAV
タムタム | 2608_TOM.WAV
リムショット | 2608_RIM.WAV

### 起動

読み出した ROM ファイル全てと，必要ならフォントファイル，リズム音を M88.EXE と同じディレクトリ(起動時ディレクトリ)におき，M88.EXE を実行してください．

### メニュー

#### Control メニュー

Reset
  リセットします．
V1/V1S/V2/N/N80 Mode
  起動モードを変えてリセットします．VA 系の ROM では N-BASIC は使用できません．
  N80 モードは PC-8001mkII 互換モードで，対応する ROM を用意した場合のみ使用できます．
Configure
  動作に関する設定を行います．
Exit
  M88 を終了します．

#### Disk メニュー

Drive 1/2
  ドライブにディスクイメージをセットします．
  キャンセルなどダイアログに何も指定しなかった場合，ドライブはディスクを抜いた状態になります． また，存在しないファイルを指定すると，その名前で新しく空のディスクイメージ (P88SR 形式) が作成されます．
Change both drive
  双方のドライブからディスクをアンロードしてからディスクイメージを開きます．

#### Tool メニュー

Show status
  画面の下部に，ステータスバーとディスクアクセスランプを表示します．
Capture
  現在表示されている画面の内容を 16 色 BMP として保存します．
Record Sound
  M88 で発せられた音を test.wav というファイルに書き出します．
Save Snapshot
  M88 の現在の状態をファイルに保存します．いわゆる「どこでもセーブ」です．
Load Snapshot
  ファイルに保存した状態を復帰します．

#### Debug メニュー

選べない項目があるかもしれませんが，気にしないでください．

Show FDC Status
  ステータスバーが表示されている場合，ディスクのアクセス状況などを表示します．
Show Register
  PC の値をステータスバーに表示します．

### 設定

#### CPU の設定

動作周波数
  88 のクロック周波数を設定します． 割り込みの頻度は変化しないので，音楽などは正常に再生されます(ソフトにもよりますが)．
全力駆動
  全力でエミュレートします． 88 のクロック周波数は実行する命令や，他の処理の負担等に応じて変化します． このオプションをつけると，音楽のテンポなどが少し狂うかもしれません．
倍率
  エミュレーションの速度を指定します．スローや早回しに相当します．
速度調整を省略する
  ウェイトを省略します． 全体的な動作が速くなるので，だるいイベントなどを飛ばしたいときなどにどうぞ．
Sub CPU を常に駆動する
  M88 は，Sub 側が Main 側からの交信を待っている状態では， Sub 側の CPU を停止し，省力化を図りますが，互換性は低下します． このオプションをつけると Sub 側 CPU を常に動作させるので， 互換性が高くなります．
ウェイト
  実機相当のウェイトをかけます． 一部ソフトで，ウェイトを掛けると起動しないものがあるようです．

#### 画面の設定

画面更新頻度
  画面を何フレームごとに更新するかを設定します．
PCG を使用
  PCG-8100 互換のフォント変更機能を有効にします． PCG-8100 の効果音機能は実装していません．
15KHz モニターモード
  CRTC に関する設定，VRTC 割り込みの周期などを 15KHz 相当の設定にします． PC-8001 用のソフトなど，24KHz モードで動作させると表示がおかしくなる場合に有効です．
ディジタルパレットモード
  ディジタル RGB モニタで表示する時のようなディジタルカラーで画面を表示します．
全画面時 640x480 にする
  95 等では，全画面切り替え時は，可能な場合，解像度 640x400 で表示しますが， このオプションをつけると常に解像度を 640x480 で表示するようになります． 全画面表示の時，妙に伸びた画像になると思った方は試してみてください．
描画の優先度を下げる
  画面の書き換えが激しいソフトを使う場合， CPU パワーが不足しているとエミュレーション自体が遅くなります． このオプションを付けると，画面の描画を飛ばしてでもエミュレーションの速度を保とうと努力します．
偶数ラインを表示する
  当時のディスプレイ表示のように，グラフィック画面のラインの間に空白を入れます．

#### 音の設定

合成周波数
  PCM 再生周波数と FM 音源の合成周波数を決めます． 周波数は高いほど音質が上がりますが，FM 音源の合成はかなり CPU 負担の高い処理なので覚悟してください(^^;
FM 音源 (44h)
  FM 音源の種類を設定します． OPNA(サウンドボード２相当) は高い CPU 性能を要求します．
FM 音源 (a8h)
  PC-8801-23 などの増設タイプの FM 音源を設定します．
PCM バッファ
  音の遅延につながる DirectSound のバッファの大きさを設定します． Win95/98 では，100ms でも問題ないでしょう． 再生が途切れ途切れになる時は，大きくすることで解決できるかもしれません．
CMD SING を使う
  PC-8801mkII 以降で搭載された CMD SING 機能の使用設定をします．
音の合成を優先
  CPU の演算性能が足りない時などにも音の合成を優先させます．
高精度合成
  BEEP 音による効果音などを正確に発音できるようにします． 多少重くなります．
waveOut を使用
  音データの出力に DirectSound でなく従来の waveOut API を用います．

#### 音量の設定

各音源の音量を設定します．約 1/2 dB 単位で調整できます．

#### DIP-SWの設定

ディップスイッチを設定します．

#### その他の設定

終了時のディレクトリを記憶
  終了時のディスク選択時のディレクトリを記憶するようになります．
リセットおよび終了の際に確認を取る
  このオプションを有効にすると，終了時，およびリセット操作をしたときに， 実行を確認するダイアログを開きます． F12 を何かの拍子で押してしまって悲しい気分にならないためのオプションです．
キーによるメニュー起動を抑制
  GRPH(ALT) や F10 キーなどでメニューを起動しないようにします． これらのキーを使いたいときは指定する必要があります．
方向キーをテンキーに対応
  方向キーを押したときに，同時にテンキーの８，４，６，２も押されるようにします． 指がテンキーではなく方向キーに最適化されてしまった場合などに有効です．
ジョイパッドを使う
  Windows 機に接続されたジョイパッドを使えるようにします．
ジョイパッドのボタンを入れ替える
  ボタン 1 と 2 を入れ替えます．
F12 を Reset とする
  F12 をリセットキーとして使用するようにします． F12 を COPY キーを使いたい場合は無効にする必要があります．
マウスを使用
  マウスを使えるようにします．ジョイパッド，およびメニュー抑制オプションとは排他使用となっています．

#### 注意

全画面モードでは，ダイアログのヘルプ表示を使うと厄介なことになるようです．

### 起動時引数

起動時に，ディスクイメージのファイル名を与えると，起動時にそのディスクイメージを開きます．

また，複雑ですが，いくつかオプションもあります． src/win32/ui.cpp の ApplyCommandLine 関数の辺りを参照してください．

### キーボード対応表

キーボードの種類は，「設定ダイアログ」の「環境」で変更できます．

#### 106 日本語キーボードの場合

106 日本語キーボードにおける特別なキー配置は，以下の通りです．

88 キー | 対応するキー
Stop | F11
Reset/COPY(*1) | F12
Help | End
カナ | Scroll Lock
GRPH | ALT(*2)
テンキーの "," | テンキーの"."(Num Lock off)
テンキーの "." | テンキーの"."(Num Lock on)
無変換 | 決定
変換 | 変換キー
全画面モード切り替え | ALT+ENTER
F10(*2) | F10

(*1):設定の『F12 を Reset とする』を無効にした時
(*2):キーでのメニュー起動抑制時

Windows 側の制限により，NUM LOCK on で使用すると SHIFT+テンキー入力の際に SHIFT が離れてしまうという現象が起こる場合があります． また．PC キー，テンキーの "=" は割り当てられるキーが無くなってしまったので 割り当てていません．

#### PC-98 用キーボードの場合

98 キーボードのキー配置は以下の通りです．

88 キー | 対応するキー
Reset/COPY(*1) | VF2
Stop | VF5(又は VF1)
決定 | NFER
変換 | XFER
全画面モード切り替え | GRPH+ENTER
GRPH(*2) | GRPH
F10(*2) | F10

(*1):設定の『F12 を Reset とする』を無効にした時
(*2):キーでのメニュー起動抑制時

### 注意

パレット制御の関係上，256 色環境では，バックグラウンドになると， 色がおかしくなることが多々あります．

### ディスクイメージについて

現在，Blue_B 氏の PC-9801 用 88SR エミュレータ P88SR で使用できるディスクイメージに対応しています．

なお，古い M88 Tools に同梱されていた READER を用いて作成されたディスクイメージに対して書き込みを行うと，自動的に P88SR 方式に変換されます．

### 今後の課題

開発予定があるものも，対応するつもりが無いものも... まだまたたくさん残ってます．

- シリアル，プリンタ，カセット(relay music)
- RTC の 1Hz 出力
- CRTC の特殊機能 (特殊制御文字による割り込み，ライトペン)

### 謝辞

FM 音源部の作成にあたって参考にさせていただいた FM Sound Generator の作者 佐藤達之氏， N80/SR モードを追加された arearea 氏， また，掲示板や開発室等を通じて M88 の発展に寄与してくださった皆様， 貴重な資料や重要な情報を供給してくださった ISL の皆様， 悠黒氏，KAJA 氏，norimy 氏，午後T 氏， 開発のキッカケを与えてくれた某 CCS-BBS の方々， RPC の方々, 皆様に心からの感謝をささげます．

### 連絡先

とりあえず以下の場所にお願いします．
cisc
E-mail: cisc@retropc.net
WWW: http://www.retropc.net/cisc/m88/