# iP6 Plus (PC-6000/6600 Emulator) Last Update 2019/9/17
Release 4.9 Beta 1

## 1. はじめに

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

isioさんの PC-6000/6600 シリーズのエミュレータである 「 iP6 for Unix/X11」をベースとして、 SR特有の機能や、ディスク入出力機能等を 新たに追加しました。


## 2. 起動方法
### Windows

バイナリーファイルの中の、iP6.exe をダブルクリックしてください。 ROMファイルが見つからない場合、「実行に必要なROMファイルを検索して、自動設定しますか?」と聞かれるので、はいと答えると、ディスクの中を検索します。ROMファイルが見つかると、「ROMファイルが見つかりました。」と表示されて、OKを押すとエミュレータが起動します。 または、メニューのControl → Configure から、ROMパス名を指定してください。 ### Unix/X11

- X11を、起動してください。
- ターミナルから、下記のコマンドで起動できます。

    $ ./iP6 

> 主なオプションについて
>
>    -60 .... PC-6001として起動する
>
>    -62 .... PC-6001mkII として起動する
>
>    -64 .... PC-6001mkIISR として起動する
>
>    -66 .... PC-6601 として起動する
>
>    -68 .... PC-6601SR として起動する


> -tape hoge.p6    hoge.p6 をテープイメージとしてマウントする
>
> -disk hoge.d88  hoge.d88 をディスクイメージとしてマウントする

## 3. できること
オリジナルの iP6 for Unix/X11 に、いくつかのSR特有の機能とディスク入出力機能 などを追加します。

 - PC-6001/PC-6001mk2/PC-6601/PC-6001mk2SR/PC-6601SRの、それぞれの機種として動作可能。
 - PC-Unix ネイティブと Windows ネイディブでの動作をサポート
 - デバッグ機能をサポート
 - テープの高速読み書き機能をサポート。
 - ディスク入出力機能をサポート(2ドライブ対応)
 - SR特有の機能を サポート
 - FM音源をサポート (fmgen を使用。)
 - 拡張漢字ROMと、拡張RAM(64kb) をサポート。
 - 戦士のカートリッジ (初代) をサポート

## 4. 使い方
### 4.1 注意してほしいこと

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

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

ディスクやテープにアクセス中は、どこでもセーブしないでください。どこでもロードした場合、正しい動作を期待できない場合があり、最悪の場合、ディスクイメージなどの破損につながります。    

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

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


### 4.2 必要な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-6601-01 / PC-6007SR) を、利用する場合)
ファイル名 サイズ 対応するROM
EXTKANJI.ROMEXKANJI.ROM 128KB 拡張漢字ROM          

### 重要なお知らせ

Rel 4.5から、4.8 までの拡張漢字ROMのファイルは (EXTKANJI.ROM) でしたが、4.9以降は新ファイル名&新フォーマットに変更になります。理由としては、他のエミュレータとの齟齬が発覚したためです。

漢字を表すのに、一つのラインにおいて、左8ドット、右8ドットのデータが存在しますが、その並び方は今まで、左ばかり64KB+右ばかり64KB という並び方でした。 それを、左と右が交互に来るように並び方を変更しました。

拙作のksaver で取り込まれた方は、お手数ですが、下記の通り実行してください。

   1. エミュレータと同時配布の ip6plus_new_kanji.exe を拡張漢字ROMのあるディレクトリーにコピーしてください。
   2. ip6plus_new_kanji.exe を実行して下さい。
   3. EXTKANJI.ROM から、EXKANJI.ROM に変換されます。EXKANJI.ROM を使用してください。
  
 

ちなみに、えすびさんの取り込みソフト saverkanji.zipで取り込まれる場合は、上記の処理は不要になります。  


## 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 の使用をお勧めします。          


## ディスクについて          

今のところ、下記のような設定になっています。                                        
機種 ドライブ使用可能なディスク
PC-6001mk2 外付 1D
PC-6001mk2SR外付 1DD/ 1D 自動認識
PC-6601 内蔵 1D
PC-6601SR 内蔵 1DD (1Dも一部可能)
         

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

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

### 4.3 Windows 版の起動の仕方

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

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

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


## 5. 開発者情報
### 5.1 ライセンス (license)

fMSXの派生物のため、Marat Fayzullin 様の fMSXのライセンスに準拠します。フリーウェアとしての使用が可能です。

Because it is a derivative of fMSX, it conforms to Mr.Marat Fayzullin's fMSX license. You can use it as freeware.

fmgen (PSG音源/FM音源エミュレーター) と、pd7752 (音声合成エミュレーター)は、cisc 様のライセンスに準拠します。 こちらも、フリーウェアとして使用が可能です。

fmgen (PSG / FM tone generator emulator) and pd7752 (speech synthesis emulator) comply with the license of Mr. cics. You can use only as freeware.

[重要] ソースリストを公開していますが、オープンソースではありません。商用利用は禁止とします。非商用の利用については自由にされてもいいですが、引用先を明記してください。 [Important] The source list is open, but it is not open source. Commercial use is prohibited. For non-commercial use, you can leave it freely, but please specify the quotation.

ソースリストのうち、schedule.c/schedule.h/Voice.c/Voice.h はゆみたろ様のPC6001V 、西田様の Cocoa iP6 を参照しています。 Of the source list, schedule.c / schedule.h / Voice.c / Voice.h refers to Mr. Yumitaro's PC6001V and Mr. Nishida's Cocoa iP6.

### 5.2 ビルドの仕方

#### 5.2.1  Windows 

    - Windows 10を入れる
    - Visual Studio を入れる
    - [libpng](http://www.libpng.org/pub/png/libpng.html) [zlib](http://www.gzip.org/zlib/) のソースリストを落としてくる
    - libpng とzlib のスタティックライブラリ版( libpngd.lib , zlibd.lib ) をビルドする。
    - libpngd.lib と、zlibd.lib を、c:\library\lib にコピーしてください。 (デフォルトの場合)
    - Win_Project/iP6plus.vcxproj を開いて、ビルドしてください。
    
#### 5.2.2 Unix系OSでのコンパイルの仕方


     - OSと、X Window System を入れてください。
     - X11 ライブラリがない場合は、入れてください。
     - libpng と zlib とXaw と OpenAL のライブラリがない場合、入れてください。
     - 適当なディレクトリで、iP6 Plusのソースを展開してください。
     - ./configure   で、Makefileを生成してください
     - make   を実行してください
     - src ディレクトリの下の iP6 が実行ファイルです。


    注意:Mac 用のX11は、 XQuartzを使ってください。
     

### 5.3 fmgen の変更点

fmgen.cpp 343行目 void Operator::MakeTable() の中、処理系によっては、優先順位が変わるための対策をしました。

    *p++ = p[-512] / 2;
    ↓

    *p = p[-512] / 2;
    p++;
    
file.cpp のWin32 依存部分を #ifdef WIN32 で囲いました。
opna.cpp と、opm.cppの、pow関数の呼び出し、pow(10,db / 40.0) となっているところを、pow(10.0 , db /40.0) というふうに変更しました。
    

## 6. 既知の問題      - 一部動かないゲームがあります。(ハドソン系はダメです) - フロッピィドライブは 一部のコマンドしかサポートしていません。 - Unix環境で音が正しく鳴らないかもしれません。 - Unix環境では、設定ダイアログなどが、オリジナルの iP6 0.6.4 のままです。 - SRの音声合成機能は、ちゃんと喋れません。 - 動作がちょっと重いです。
## 7. 更新履歴 ### Rel 4.9 β1の変更点 - 拡張漢字ROM のファイル名と並び方を変更しました。 - About ダイアログの、状態表示を増やしました。(拡張漢字ROMの状態と、現在のロケールは何で認識されているか) - ウインドウのタイトルバーに機種表示と、fps表示を常に行うようにした - 拡張漢字ROM の並び方を変えたので、4.9にあげました。 - 拡張漢字ROM の状態は、EXKANJIROM_ROM だとROMを認識している、EXKANJIROM_MAKEだとWindows のフォントで自動生成している、EXKANJIROM_NONだとROM なしです - ロケールは、LANG_JP だと日本語で、 LANG_EN だと英語です ### Rel 4.8 β5の変更点 - Windowsで、日本語環境以外の場合、なるべく英語表示するようにした(つもり)。 - Windowsの PAUSEメニューで、一時停止できるようにした ### Rel4.8 β3の変更点 - 漏れていたソースリストを追加した - Unix/X11 環境でビルド出来なかった問題を修正(したはず) ### Rel4.8 β2の変更点 - デフォルト設定をスキャンライン無しにした - デバッガーで、ダンプメモリーのときに、メモリーの内容を変更しようとすると、落ちていた問題を修正しました。 ### Rel4.7以降の変更点 - [Windows] PC-6601SRで、DATE$と、TIME$への書き込みが出来るようにしました。(起動時にOSの日時を取得して、それ以降、1秒ごとにタイマーを発火させて、1秒ずつ足していきます。 - ブロック転送命令などの、必要CPUクロックが 0だったのを修正しました。(PC-6601SRの起動メニューの画面表示が速すぎる問題など解消しました) - [Windows] 最大化できるようにしました - [Windows] ウインドウの大きさを自由に変更可能に - 起動時の RAMの初期状態をある程度再現しました。 - どこでも SAVE / LOAD 実装してみた。 - 未定義命令のサポートを追加しました。 - PC6001V のスケジュールを取り込みました。 - 音声合成機能を組み込んでみた。 - PC-6601SRの起動メニューから、テロッパを選ぶと、右下の表示がおかしくなる問題を修正しました。 - デバッグ機能を追加しました。 - デバッグ機能で、逆アセンブラリストをスクロール可能にしました。 - 本来入力できないキー(Shift+¥)を、入力できないように修正しました。 - 本来入力できるはずのキー(かなの句読点)を入力できるように修正しました。 - ディスクを2ドライブ対応しました。

## 参考資料
 - 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 )

## 免責事項

ソースリストや、実行ファイルは基本的に無保証です。 テストは行っておりますが、使用した結果、何らかの損害があったとしても、当方では 一切感知できませんので、宜しくお願いします。 特に、大切なROMファイルなどは、必ずバックアップしたものを使用してください。 ## 謝辞

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

石岡さん本当にありがとうございました。(__)

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


## お問い合わせ先

なお、プログラム自体に関する お問い合わせについては、全て私までお願いします。

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

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