iP6 Plus (PC-6001/6601 Emulator) [Windy's room]

# iP6 Plus (PC-6000/6600 Emulator)

Last Updated 2004/1/25
Version Release 4.7

## はじめに

このプログラムは、NEC PC-6000/6600 シリーズをエミュレートするプログラムです。

isioさんの PC-6000/6600 シリーズのエミュレータである 「 iP6 for Unix/X11」をベースとして、 SR特有の機能や、ディスク入出力機能等を　新たに追加しました。 まだまだ、至らない部分も沢山ありますが、 よろしくお願いします。

今回のバージョンは、 Release 4.7 です。ありがとうございます。

## できること

基本的には、オリジナルの iP6 for Unix/X11 に準じますが、いくつかの SR特有の機能とディスク入出力機能　などを追加します。

主な出来ることは下記のとおりです。

- PC-6001/PC-6001mk2/PC-6601/PC-6001mk2SR/PC-6601SRの、それぞれの機種として動作可能。
- PC-Unix ネイティブと Windows ネイディブでの動作をサポート
- ディスク入出力機能をサポート
- SR特有の機能を　サポート
- FM音源をサポート　（SRの時のみ。fmgen を内包。）
- 拡張漢字ROMと、拡張RAMをサポート。
- ハードウエアスクロールをサポート。(Windows版)
- スナップショットの保存サポート。　(Windows版)
- テープの高速読み書き機能をサポート。
- SRの細かいほうのセミグラフィックモードに対応
- USBの JOY STICK 対応(Windows版)

## 今回から出来るようになったこと

前回の積み残しのバグを直して、機能アップしました。 よろしくおねがいします。（＿）

### エミュレータ内部について

- SR以外の機種で起動したときの、メモリ関係のバグを修正
- 2ms Timer 割り込みの発生条件を修正!
- フロッピィドライブの読み書き動作時に、若干のウエイトを追加
- YM2203 の内部タイマーをカウントアップするようにした (不完全)
- YM2203 のステータスを　I/O を通して読み込めるように修正
- YM2203から、擬似的にBUSY/ READYを返すようにしてみた。
- 小さな画面(320x200)にしているのに、リセットすると、大きな画面(640x400)になってしまうときがあったバグを修正。
- SRのグラフィックVRAMアクセス時、Y座標を 204以上指定すると、エミュレータ内のRAMの内容を破壊していたバグを修正 (Thanks Hashi さん!)
- MODE 6で、SCREEN 2,2,1 か、 SCREEN 3,2,1のときに、画面が化けていたのを修正
- TAPE を、LOAD用と、SAVE用で分けました。
- SRのモード6で、拡張ROMを正しくマッピングできてなかったバグを修正。(Thanks Chocobonさん!)
- MODE 5 から MODE 6に戻ったときの、メモリー関係（CGROM)のバグを修正
- 66SRのユーカラJJで、終了するときに、f5->f5でリセット後、暴走していたバグを修正
- ブロック転送命令 (LDIR/LDDR) で、自己書き換えしないように対策

### Windows版　特有の部分について

- フルスクリーンモードに対応　(Windows版)
- 拡張ROMを読み込めるようにした。(Windows版のお話)
- 設定を変更したあと、自力で再起動するように変更。（Windows版）
- ディスクアクセスランプを追加。(Windows版)
- リセットできなかったことがあったバグを修正 (Windows版) Thanks Hashi さん!
- iP6 Plus 以外の窓に切り替えたときに、キーリピートの速度を通常に戻すようにした (Windows版）
- リセット時に、窓の上のほうに絵が残ってしまっていたのを修正　(Windows版)
- 設定ダイアログを整理
- 設定画面で、スキャンラインの有無を選択できるように。(Windows 版)
- SAVE用テープが存在しない場合、ファイルを作るかどうか聞くようにした。（Windows版）
- 初回起動時に、DISKのOPENが選べてしまうバグを修正。(Windows)Thanks Moriya さん!
- 2ms Timerのカウントアップ値を変えているときに、 Configure を開いて、OKを押すと、その値が元に戻ってしまうバグを修正 (Windows版)
- CPUの負荷を減らしました。(Windows版)

### Unix版　特有の部分について

- Unix版の設定パネルで、ファイル名を入力時に、Cancelを押すと、Segment Fault を起こすときがあったバグを修正

今回は、鬼のように変更点が多いです・・。（汗） それもこれも、皆さんのおかげです。(^^;

## 主なできないこと

- 一部動かないゲームがあります。
- SRの システム時計への書き込みは、出来ません。
- フロッピィドライブは　一部のコマンドしかサポートしていません。
- Unix環境で音が正しく鳴らないかもしれません。
- Unix環境では、設定ダイアログなどが、Unix版のiP6 0.6.4 のままです。
- 音声合成機能は、未サポートなので、喋れません。
- 動作がちょっと重いです。

Alpha-11 では、存在しないディスクを指定したら、新規作成をして、ブランクディスクとしてマウントするようにしました。

## 注意してほしいこと

このプログラムを使用されるときは、十分注意してご使用ください。 ROMイメージなど　大切なものに関しては、 必ずバックアップをとっておいてください。 よろしくお願いします。

Rel.4.7 で、拡張ROMをセットできるようになりましたが、PC-6001専用の拡張ROMをさしたまま、 機種を、PC-6601SR などにすると、起動途中で止まってしまう可能性があります。 お手数ですが、拡張ROMを抜いてください。（＿）

Rel.4.7 で、ディスクのアクセスランプを右下に作りました。(Windows版) これが点灯中は　ディスクにアクセスに行ってますので、いきなり終了したり、 リセットしたりしないで下さい。

Rel.4.7 以降のフルスクリーンモードは、全ての環境でテストされたわけではありません。 もし、使用した結果、上手く切り替わらない場合などは、使わないようにしてください。 よろしくお願いします。

Rel.4.5 以降のバージョンから、d88のファイルが、読み取り専用になっている イメージも対応するようになりました。 　ただし、読み込みは出来ますが、書き込みは出来ませんので、注意が必要です。

ゲームでディスクにセーブしたい場合などは、必ず読み書き可能な属性にしてからマウントしてください。 BASIC上で、save"hoge"や、bsave"hoge"としても、??AT Error となってしまいます。 なお、d88ファイル内部のヘッダの書込み禁止フラグは見ていませんので、注意が必要です。

## 必要なROM

実行するには、実機に内蔵されているROMファイルが必要になりますので、まずは、ROMを取得してください。

実行ファイルと同じディレクトリか、rom というサブディレクトリに置いてください。

(PC-6001 として利用する場合)
ファイル名 | サイズ | 対応するROM
--- | --- | ---
BASICROM.60 | 16KB | N60-BASICインタプリタROM
CGROM60.60 | 4KB | N60-BASIC用CGROM

(PC-6001mk2 として利用する場合)
ファイル名 | サイズ | 対応するROM
--- | --- | ---
BASICROM.62 | 32KB | N60m-BASICインタプリタROM
CGROM60.62 | 8KB | N60-BASIC用CGROM
CGROM60m.62 | 8KB | N60m-BASIC用CGROM
KANJIROM.62 | 32KB | 漢字ROM
VOICEROM.62 | 16KB | 音声合成ROM

(PC-6601 として利用する場合)
ファイル名 | サイズ | 対応するROM
--- | --- | ---
BASICROM.66 | 32KB | N66-BASICインタプリタROM
CGROM60.66 | 8KB | N60-BASIC用CGROM
CGROM66.66 | 8KB | N66-BASIC用CGROM
KANJIROM.66 | 32KB | 漢字ROM
VOICEROM.66 | 16KB | 音声合成ROM

(PC-6001mk2SR として利用する場合)
ファイル名 | サイズ | 対応するROM
--- | --- | ---
SYSTEMROM1.64 | 64KB | システムROM1
SYSTEMROM2.64 | 64KB | システムROM2
CGROM68.64 | 16KB | CGROM (saver3で取り込んだROM)

(PC-6601SR として利用する場合)
ファイル名 | サイズ | 対応するROM
--- | --- | ---
SYSTEMROM1.68 | 64KB | システムROM1
SYSTEMROM2.68 | 64KB | システムROM2
CGROM68.68 | 16KB | CGROM (saver3で取り込んだROM)

オプション機能

(拡張漢字ROM (PC-6006SR/ PC-6007SR) を、利用する場合)
ファイル名 | サイズ | 対応するROM
--- | --- | ---
EXTKANJI.ROM | 128KB | 拡張漢字ROM

拡張漢字ROMをお持ちの方は、ksaver で取り込んだ後、上記のファイル名にしてください。

## ROMの取得方法

基本的には、iP6 のROMを使いまわしできるのですが、SRをお持ちの方は、拙作の saver3 での吸出しをお勧めします。

(PC-6601SR の場合です。PC-6001mk2SRの方は、拡張子を.64にして下さい）

       1. MODE 6で起動して、拙作のsaver3 で次のROMを取得して下さい。

            SYSTEMROM1-1 を取得して、ファイル名を仮に SYSROM11にする。
            SYSTEMROM1-2 を取得して、ファイル名を仮に SYSROM12にする。
            SYSTEMROM2-1 を取得して、ファイル名を仮に SYSROM21にする。
            SYSTEMROM2-2 を取得して、ファイル名を仮に SYSROM22にする。
            CGROM　を取得して、　　　ファイル名を CGROM68.68 にする。

       2. SYSTEMROM が それぞれ別々に鳴っているので、下記のようにして結合してください。

      　　DOSなら、
             copy /b  SYSROM11+SYSROM12   SYSTEMROM1.68
             copy /b  SYSROM21+SYSROM22   SYSTEMROM2.68

          Unixなら、
             cat SYSROM11 SYSROM12  > SYSTEMROM1.68
             cat SYSROM21 SYSROM22  > SYSTEMROM2.68

        これでできあがりです。

SR以外の方は、isioさんの saver の使用をお勧めします。

テープ経由の場合、最終的にテープ音声から、データに変換する必要があります。 morikawa さんの　P6DatRec の使用をお勧めします。

## Windows 版の起動の仕方

1. まず、実機からROMファイルを取り込んでください。
2. 実行ファイルと同じディレクトリか、ROMサブディレクトリに、上記のROMを置いてください。
3. iP6.exeを実行させると、まず、デフォルトでPC-6601SRとして起動しようとします。 このときに、ROMファイルが見つからない場合は、その旨を表示します。
4. PC-6601SR 以外として動作させたい場合は、Control メニューのConfigureの 設定パネルで　ご希望の機種を選択してください。

設定のうち、(*)マークのついている分については、変更後、再起動するかどうか聞いてきますので今すぐ適用したい場合、再起動してください。 設定は、ip6kai.iniというファイルに書き込まれます。（実行ファイルと同じディレクトリーに　自動的にできます。）

詳しい使い方については、同梱のHELPファイルを参照してください。(＿)

## ディスクについて

今のところ、下記のような設定になっています。

機種 | ドライブ | 使用可能なディスク
--- | --- | ---
PC-6001mk2 | 外付 | 1D
PC-6001mk2SR | 外付 | 1DD/ 1D 自動認識
PC-6601 | 内蔵 | 1D
PC-6601SR | 内蔵 | 1DD　(1Dも一部可能)

mk2SRのみ、起動時に、1D/1DDを自動認識します。 PC-6601SRの場合、基本的に1DDですが、ディスクの先頭に　'SYS'が書かれていると、1Dと認識するようです。ただし、この時の1Dは、読み込みしか出来ません。

サポートしないディスクを指定した場合、ディスクを、自動的にイジェクト してしまいます。ディスクなしになってしまうので、注意してください。 そのときは、メッセージで、お知らせします。

## ディスクイメージの作り方

フロッピィ読み込みツールとしては、 M88 の作者の CISCさんが作成されている DITTか、 それの派生版で、SMC-777用である、1DDitt が有ります。

### 1DDの場合

1DDの場合は、1DDittの使用がお勧めです。何故かというと、1DDは片面メディアなのにたいして、Dittはあくまで両面メディア用なので、問題が生じやすいからです。(汗) （裏面が既にフォーマットされている2DDを使った場合、余計な裏面のデータまで読み取ってしまい、使用できないイメージになってしまいます。(汗)）

1DDitt の場合の使用例です。

> 1dditt r -8 -d a: hogehoge.d88

-8 としているのは、1DDを80トラック読むという意味です。 P6の1DDでは、必ず80トラック読み取る必要があります。 あと、1DDの場合は、-d をつける必要があります。

読み取りが成功すると、ファイルが出来ます。 もちろん、そのd88ファイルは、そのまま このエミュレータで使えます。

### 1Dの場合

それから、1Dの場合、Dittも、1DDitt も、両面読んでしまうので、どちらを使っても、変わらないと思います。その場合は、裏面の無い2Dという形になります。あと、1Dの場合、-8 や、-d は不要になります。

あと、気をつけることといえば、これらのソフトは、FDCを直接叩いているので、MS-DOSか、Windows 95/98/Meの DOS窓などでしか、動作しないということです。（NT4.0 / 2000/ XP などでは、動作しません。）

## PC-Unixでのコンパイル

Linux や、FreeBSDなどでコンパイルする場合は、下記のようにしてください。 標準的な状態で、コンパイルできると思います。

1. OSと、X Window System を導入してください。
2. 空のディレクトリを作成して、iP6 Plusのソースを展開してください。
3. Makefile の上のほうの、OS Selector の該当する行のコメントを外してください。
4. make とすると、出来上がるはずです。

※　Rel.4.7 より、Gnu make が必要になるようになりました。 FreeBSDなど、最初から Gnu make が入っていない環境の方は、お手数ですが、別途 gmake をインストールしてください。

※　Rel.4.7 より、一行編集するだけで、切り替えできるようにしました。 下記の該当する環境の行のコメントを外してください。 (本当は、configure に対応するべきですが、申し訳ございません。)

      # OS Selector    by Windy
      # Please select OS. comment out one  from following lines
      #OS      = LINUX
      #OS      = BSDI
      #OS      = FREEBSD
      #OS      = MACX11
      #OS      = SDL

## 参考資料

- PC-Techknow6000Vol.1
- PC-6001mk2取扱説明書
- Mr.PCテクニカルコレクション
- PC-6001/PC-6001MK2 わかるマシン語入門
- PC-9800 シリーズ テクニカルデータブック HARDWARE 編
- PC-9821 Undocument ( http://www.webtech.co.jp/undoc/io_2d.txt )

## ソースリストについて

ソースリストを公開しています。が、著作権を放棄しているわけでは有りません。 ソースリストについては、有るがままに提供されます。

このソースリストは、沢山の人の修正が入っていますので、このソースリストの著作表示を消し去って、他の人だけの著作物とすることは出来ません。

派生物を作られるときは、必ず、前の著作表示に追加する形で、併記してください。 それから、派生物も、必ずフリーソフトにしてください。

実のところ、P6エミュレータのSR対応が、少しでも進んでくれれば・・。 との思いから公開していますが、私の実装方法を　鵜呑みにしないでください。 間違いがあると思いますし、たまたま、動いているだけの可能性も有ります。

それから、ソースリストをみていて、気づいたことや、バグ報告などありましたら、 遠慮なくおねがいします。(__)

## 免責事項

ソースリストや、実行ファイルは基本的に無保証です。 一応、テストは行っておりますが、 使用した結果、何らかの損害があったとしても、 当方では 一切感知できませんので、宜しくお願いします。

## 謝辞

- iP6 for X11 を作られた 石岡さんに 感謝します。
- fMSXの作者Marat Fayzullin さんに感謝します。
- PC6001V の作者 ゆみたろさんに感謝します。
- iP6win の作者 守谷さんに感謝します。
- M88のDITTと、fmgen の作者のCISCさんに感謝します。
- 1DDitt の作者の　bobsaito さんに感謝します。
- アイコンの作者　天丸さんに感謝します。
- PC6001V for WINの作者 Bernieさんに感謝します。
- バグをたくさん見つけてくれた、チョコぼんさんに、感謝します。
- そして、このパソコンを作られた　日本電気の方々に感謝します。

石岡さんには、ソースリストをさわることと、 パッチファイルの公開を 快諾していただきました。 本当にありがとうございました。(__)

iP6 がなかったら、とてもじゃないけど、一からこれを作るのは、 無理だったと思いますので、感謝しても感謝しきれないです。（＿）

Rel.4.5以降より、CISCさんの FM音源エミュレータである fmgen と、天丸さんのアイコンを使用させていただきました。ありがとうございました。（＿）

それから、fmgen の中で、変更させてもらっている個所があります。 変更箇所は、#ifdef WIN32か、#ifdef UNIXでくくられた個所になります。 主に、Unix環境に対応させるためです。 よろしくお願いします。（＿）

あと、opna.cpp と、opm.cppの、pow関数の呼び出しで、pow(10,db / 40.0) となっているところを、pow(10.0 , db /40.0) というふうに変更させてもらいました。（＿）

## お問い合わせ先

なお、パッチやソースリストやプログラム自体に関する　お問い合わせについては、全て私までお願いします。

(isioさんは　このプログラムの開発に直接は関わってませんので、このパッチについてisioさんに問い合わせることは、ご遠慮下さい。）

バグや使用上の問題については、出来れば、対応したいと思っています。 しかし、フリーソフトウエアで有る以上、限界というものも有りますので、よろしくお願いします。