Last Update 2024/10/12
Release 4.9 Beta 7
このプログラムは、NEC PC-6000/6600 シリーズをエミュレートするプログラムです。
isioさんの PC-6000/6600 シリーズのエミュレータである 「 iP6 for Unix/X11」をベースとして、 SR特有の機能や、ディスク入出力機能等を 新たに追加しました。
Windows
バイナリーファイルの中の、iP6.exe をダブルクリックしてください。 ROMファイルが見つからない場合、「実行に必要なROMファイルを検索して、自動設定しますか?」と聞かれるので、はいと答えると、ディスクの中を検索します。ROMファイルが見つかると、「ROMファイルが見つかりました。」と表示されて、OKを押すとエミュレータが起動します。 または、メニューのControl → Configure から、ROMパス名を指定してください。
または、実行ファイルと同じディレクトリか、rom サブディレクトリに、必要なROMファイルをコピーしてください。
- 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 をディスクイメージとしてマウントする
X11版で、 ROMファイルが見つからない時は、終了します。 実行ファイルと同じディレクトリか、rom サブディレクトリに、必要なROMファイルをコピーしてください。
オリジナルの 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) をサポート。 - 戦士のカートリッジ (初代) をサポート - 秋川様の互換ROM (PC-6001/PC-6601) をサポート - ローマ字入力機能をサポート
このプログラムを使用されるときは、十分注意してご使用ください。 ROMイメージなど 大切なものに関しては、 **必ずバックアップをとっておいてください。**
Rel.4.7 で、ディスクのアクセスランプを右下に作りました。(Windows版) これが点灯中は ディスクにアクセスに行ってますので、いきなり終了したり、 リセットしたりしないで下さい。
ディスクやテープにアクセス中は、どこでもセーブしないでください。どこでもロードした場合、正しい動作を期待できない場合があり、最悪の場合、ディスクイメージなどの破損につながります。
Rel.4.5 以降のバージョンから、d88のファイルが、読み取り専用になっている イメージも対応するようになりました。 ただし、読み込みは出来ますが、書き込みは出来ませんので、注意が必要です。
ゲームでディスクにセーブしたい場合などは、必ず 読み書き可能な属性にしてからマウントしてください。 BASIC上で、save"hoge"や、bsave"hoge"としても、??AT Error となってしまいます。 なお、d88ファイル内部のヘッダの書込み禁止フラグは見ていません。
実行するには、実機に内蔵されているROMファイルが必要になります。まずは、ROMを取得してください。
実行ファイルと同じディレクトリか、rom というサブディレクトリに置いてください。
ファイル名 | サイズ | 対応するROM |
---|---|---|
BASICROM.60 | 16KB | N60-BASICインタプリタROM |
CGROM60.60 | 4KB | N60-BASIC用CGROM |
ファイル名 | サイズ | 対応する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 |
ファイル名 | サイズ | 対応する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 |
ファイル名 | サイズ | 対応するROM |
---|---|---|
SYSTEMROM1.64 | 64KB | システムROM1 |
SYSTEMROM2.64 | 64KB | システムROM2 |
CGROM68.64 | 16KB | CGROM (saver3で取り込んだROM) |
ファイル名 | サイズ | 対応するROM |
---|---|---|
SYSTEMROM1.68 | 64KB | システムROM1 |
SYSTEMROM2.68 | 64KB | システムROM2 |
CGROM68.68 | 16KB | CGROM (saver3で取り込んだROM) |
オプション機能
ファイル名 | サイズ | 対応するROM |
---|---|---|
128KB | 拡張漢字ROM |
### 重要なお知らせ
Rel 4.5から、4.8 までの拡張漢字ROMのファイルは (EXTKANJI.ROM) でしたが、4.9以降は新ファイル名&新フォーマットに変更になります。理由としては、他のエミュレータとの齟齬が発覚したためです。
拙作のksaver で取り込まれた方は、お手数ですが、下記の通り実行してください。
1. エミュレータと同時配布の ip6plus_new_kanji.exe を拡張漢字ROMのあるディレクトリーにコピーする 2. ip6plus_new_kanji.exe を実行する 3. EXTKANJI.ROM から、EXKANJI.ROM に変換されます。EXKANJI.ROM を使用してください。
ちなみに、えすびさんの取り込みソフト saverkanji.zipで取り込まれる場合は、上記の処理は不要になります。
基本的には、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は、読み込みしか出来ません。
サポートしないディスクを指定した場合、ディスクを、自動的にイジェクト してしまいます。ディスクなしになってしまうので、注意してください。 そのときは、メッセージで、お知らせします。
メニューのControl→Monitor mode か、ALT+f6 で、モニターモードに入ります。 はじめ、カーソルは、コマンドラインにあります。 TABを1回押すと、逆アセンブラのところに移動します。 TABをもう1回押すと、メモリーダンプのところに移動します。 TABをさらに1回押すと、コマンドラインのところに戻ってきます。 コマンドラインのところにあるときに、コマンドが入力できます。 ?で、簡易ヘルプが見れます。 ? break などとやると、さらに詳しく使い方がわかるコマンドもあります。 sコマンドか、F11キーを押すと、ステップ実行できます。 コマンドラインは、PageUp キー / PageDown キーで、過去を遡ることができます。 逆アセンブラのところは、上下カーソルで移動できます。赤色反転が現在停止中のPCアドレスです。 緑色が、メモリーへのブレークポイントが設定されているところです。 カーソルが、逆アセンブラのところにあるときに、F9キーを押すと、ブレークポイントを設定できます。 メモリーダンプのところは、上下カーソルや、PageUp/PageDown で移動できます。 SHIFTキーを押しながらPageUp/PageDown で移動すると、さらに高速に移動できます。 ENDキーを押すたびに、表示される内容を、切り替えできます。 メモリーダンプの左上の文字で判別できます。 ENDキーを押すたびに、1→2→3→1に切り替えできます。64KB拡張RAMが無効の場合は、1→2→1 と切り替わります。 1) MEM = 現在のバンク 2) RAM = メインRAM 3) EXT = 64KB 拡張RAM 1の現在のバンクは、バンク切り替えのとおりに、並びます。 これでも、確認出来るといえばできます。 しかし、たとえば、裏RAMにあたるメインメモリーなどは、ROMに隠れて見えないので、内容を確認するのは面倒です。 そのため、2と3を用意しました。バンク切り替え関係なく、RAMだけが見れます。 (SRの場合、メモリーを自由に割り当てできますが、バンク切り替えは関係なしで、あくまで、各メモリーの物理的な並び方 のまま、見えます)。 コマンドについて レジスターなどの表示 reg レジスターの変更 reg A 0x20 で、Aレジスタを、20h に変更 メモリーロード loadmem (ファイル名) (開始アドレス)(終了アドレス) loadmem (ファイル名) (開始アドレス) #(サイズ) メモリーセーブ savemem (ファイル名) (開始アドレス)(終了アドレス) savemem (ファイル名) (開始アドレス) #(サイズ) アドレスでブレークする break (アドレス) [#(スロット番号)] (スロット番号は省略可能です。) すべてのブレークポイント表示 break IN命令でブレークする break in (I/OポートNo.) OUT命令でブレークする break out (I/OポートNo.) ブレークポインタのクリア break clear 現在のバンクを逆アセンブル disasm [(アドレス)] メインメモリーを逆アセンブル ur [(アドレス)] (アドレスは省略可能です) モニターモードのまま実行する g モニターモードを閉じて実行する G メモリーフル fill (開始アドレス) (終了アドレス) (書き込みたい値(1バイト)) メモリーフル fill (開始アドレス) #(サイズ) (書き込みたい値(1バイト)) BASICの命令をステップ実行 (※N66SR BASICを除く) break 0x71c / break 0x7f6 と二か所、ブレークポイントを設定すると、BASICの命令を1つ実行する前に、ブレークポイントで、止まり、 今まさに、実行しようとしているBASICの命令が表示されます。 例えば、10 PRINT "HOGE" というBASICのプログラムがあった場合に、RUN命令で実行しようとすると、下記の表示がなされます。 [65535] RUN [10] PRINT "HOGE" 上記の、[]は、行番号を表しており、つづいて、BASICの命令が表示されます。 行番号=65535 は、ダイレクトモードで実行したことを意味します。 (この機能は、まだテスト中です。) メモリーを編集 edit (アドレス) アドレスを指定すると、そのアドレスに飛んでから編集状態になります テープの位置をセット set tape (新しいポジション) テープの位置を変更できます。 バックトレース bt まだ、テスト中です。 ※この下のコマンドは、普通の人は、あまり使うことがない独自コマンドです。 SR MODE6 SCREEN 2 のVRAMを拡張メモリーに保存したり、ロードしたりします。 X Y Width Height の数値には制限があります。 SRのMODE 6 SCREEN 2 (の左のみ)セーブ savevram X Y Width Height SRのMODE 6 SCREEN 2 (の左のみ)ロード loadvram NO X Y 上記の確認 vrams
同梱のLICENSE ファイルを参照ください。 (このプログラムを修正されるかたは、必ず目を通してください。)
- Windows (x86)マシンを用意してください
- Visual Studio を入れてください。(2022 でビルドしています)
- iP6 Plus のソースコードを好きなところに展開してください。
- [libpng](http://www.libpng.org/pub/png/libpng.html)と、
[zlib](http://www.gzip.org/zlib/) のソースリストを落としてください。
- libpng とzlib のスタティックライブラリ版( libpngd.lib , zlibd.lib ) をビルドしてください(*)
- Win_Project/iP6plus.vcxproj を開いて、ビルドしてください。
(*)libpng /zlib のビルドの仕方 libpng を展開後、ディレクトリの名前を lpng(ver no) となっているのを、lpng にしてください。 zlib も、展開後、ディレクトリの名前を zlib (ver no) となっているのを、zlib にしてください。 iP6-Plus-Emulator のディレクトリと同じ位置に、lpng と、zlib を入れてください。
lpng/projects/visualc71/libpng.vcproj を開いて、ビルドしてください。
zlib/win32 を開いて、nmake -f Makefile.msc でビルドしてください。
- OSと、X Window System を入れてください。
- X11 ライブラリがない場合は、入れてください。
- libpng と zlib とXaw と OpenAL のライブラリがない場合、入れてください。
- 適当なディレクトリで、iP6 Plusのソースを展開してください。
- ./configure を実行してください
- make を実行してください
- src ディレクトリの下の iP6 が実行ファイルです。
注意1:configure がない場合は、下記の手順で生成できます。
- $ aclocal
- $ automake --add-missing
- $ autoconf
注意2:Mac 用のX11は、<a href="https://www.xquartz.org/"> XQuartz</a>を使ってください。
- $ sudo apt update
- $ sudo apt upgrade
- $ sudo apt install libx11-dev
- $ sudo apt install libxt-dev
- $ sudo apt install xpaint-dev
- $ sudo apt install libxaw7-dev
- $ sudo apt install libopenal-dev
- $ aclocal
- $ automake --add-missing
- $ autoconf
- $ ./configure
- $ make
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) というふうに変更しました。
- 一部動かないゲームがあります。(ハドソン系はダメです)
- フロッピィドライブは 一部のコマンドしかサポートしていません。
- Unix環境で音が正しく鳴らないかもしれません。
- Unix環境では、設定ダイアログなどが、オリジナルの iP6 0.6.4 のままです。
- SRの音声合成機能は、ちゃんと喋れません。
- 動作がちょっと重いです。
- Unix環境で、画面がおかしくなる可能性があります。
✳︎ Unix 環境で画面がおかしい場合は、フルカラーでなく、8ビットカラー、16ビットカラーに変更すると、治る可能性があります。
- アナログシンセサイザー(AMDEKのCMU-800)で、4オクターブ目のFの音が出てなかったのを修正 - 4つめのチャンネル以降の演奏指示を無視するように修正(PSG音源の制約のため) - テンポをなるべく合わせた。
- テンポをF7/Shift+F7 で変えられるようにした (P6.c)
- アナログシンセサイザー(AMDEKのCMU-800)に、仮対応 (内蔵PSG音源で鳴らしてみるテスト)3和音まで。リズム音源未対応)
- PADウインドウとりやめ
- README.md ファイルに、モニターモードの使い方を若干書いた
- VM:SRのVRAMウインドウを判別する処理に問題があったために、VRAMに描画されないときがある問題を修正 (mem.c)
- VM: SRの縦方向のハードウエアスクロールで、横線が入る問題を修正 (P6.c)
- Windowsで、テキストファイルをドラッグアンドドロップしたら、テキストファイルを自動入力(追加中)
- SJIS <--> P6コード 変換テーブルの修正
- モニターモード:setbin/ savemem/pwd/reset/fill コマンドを追加した
- モニターモード:nowait コマンドを、set nowait というふうに変更した
- モニターモード:? break などで、一部のコマンドの簡易な使い方表示されるようにした。
- モニターモード:コマンドラインの高さと幅を広げた。
- モニターモード:ダンプリストとI/Oの表示される位置を少し右にした
- モニターモード:SRのとき、ur コマンドで、ROMがある領域は、ROMを参照していたが、RAMを参照するように修正
- モニターモード:文字のフォントを若干修正した
- モニターモード:テープの位置を設定できるようにした
- モニターモード:break コマンドで、設定されてないスロットを探すようにした
- モニターモード:g/G コマンドで継続実行したときに、かなキーを押したことになっていたのを修正
- モニターモード:dump 命令でアドレスを指定しないときは、前の続きを表示するようにした
- モニターモード:dump 命令は、Endキーによって、表示するメモリーを変える
- モニターモード:bt コマンドで、バックトレースを表示されるようにしたい(テスト中)
- モニターモード:実行するBASICのコマンドを表示する(標準BASIC前提)
- モニターモード:print コマンドで、BASIC の変数を表示されるようにしたい(テスト中)
- Autokey.c/Autokey.h は、頭文字が大文字になっているのは間違いで、小文字が正しい
- peek_memory() / poke_memory() を修正
- Linux(Ubuntu) でビルド出来ない問題を修正
- ローマ字変換: 内部処理: キーストロークへの変換をやめて、P6キーコードに変換するようにした
- 上記に関連して、自動キー入力の仕組みを追加
- モニターモード:loadmem コマンドを追加
- モニターモード:ワークパスの追加中
- ゲームキーで押したままになるバグを修正した
- Windowsのキーダウンイベントきたときに、wParam lParamが両方0だとイベントをすてる
- かなのローマ字変換時にスペースキーが押せない問題を修正
- かなモード時に、Page Upを単体で押すと、常にかな、カナ切り替えになってしまう問題を修正
- voice.c の中の並び方を変更した
- ローマ字変換のローマ字を追加した
- どこでもSAVEで、FDCのI/O DC の値を保存していない問題を修正しました
- どこでもSAVEで、ノーウエイトの開始アドレスと終了アドレスを保存してない問題を修正しました。
- ローマ字変換のつづりを修正しました
- テープにセーブするとき、1バイト出力するごとにファイルをオープン・クローズするようにした
- 秋川様の互換ROM のバージョンを上げました。(PC-6001版を、0.7.2 に、PC-6601版を、0.3.1にあげました。)
- Windowsのオートキーリピートの設定をいじって、速さをゆっくりにしていましたが、いじらないようにしました。
- 上記に関連して、キーのオートリピートが、今までより速くなってしまっています。
- 秋川様のPC-6001/ PC-6601 互換ROMに対応しました。(http://000.la.coocan.jp/p6/basic.html)
- PC-6001 のメモリマップを修正しました。
- PC-6001 でMODEキーを無効にしました。
- モニターモードで g / G で再開した時に、ALT押したままにしないようにしました。
- EXTROM 刺された時のみ さすようにしました。
- 拡張漢字ROM 作成機能と、ローマ字変換機能を、MIT ライセンスにしました。
- カタカナ入力モードで、ファンクションキーが、常に SHIFT+ファンクションキー で入力される問題を修正しました。
- ローマ字変換機能で、「DDA」「DDO」に対応しました。
- プログラムの一部を、ノーウエイトで動作させることができる機能を追加しました。( 今回の目玉機能、重い処理をかっとばせるようになります。)
※デバッグモニターを開いて、nowait [start-addr] [end-addr] コマンドを使用してください。PCレジスターが、start-addr のアドレスに到達すると、 ノーウエイトモードに移行して、end-addr に到達したら、通常モードに戻ります。
-
拡張漢字ROM のファイル名と並び方を変更しました。
-
About ダイアログの、状態表示を増やしました。(拡張漢字ROMの状態と、現在のロケールは何で認識されているか)
-
ウインドウのタイトルバーに機種表示と、fps表示を常に行うようにした
- 拡張漢字ROM の並び方を変えたので、4.9にあげました。
- 拡張漢字ROM の状態は、EXKANJIROM_ROM だとROMを認識している、EXKANJIROM_MAKEだとWindows のフォントで自動生成している、EXKANJIROM_NONだとROM なしです
- ロケールは、LANG_JP だと日本語で、 LANG_EN だと英語です
- Windowsで、日本語環境以外の場合、なるべく英語表示するようにした(つもり)。
- Windowsの PAUSEメニューで、一時停止できるようにした
- 漏れていたソースリストを追加した
- Unix/X11 環境でビルド出来なかった問題を修正(したはず)
- デフォルト設定をスキャンライン無しにした
- デバッガーで、ダンプメモリーのときに、メモリーの内容を変更しようとすると、落ちていた問題を修正しました。
- [Windows] PC-6601SRで、DATE$と、TIME$への書き込みが出来るようにしました。(起動時にOSの日時を取得して、それ以降、1秒ごとにタイマーを発火させて、1秒ずつ足していきます。
- ブロック転送命令などの、必要CPUクロックが 0だったのを修正しました。(PC-6601SRの起動メニューの画面表示が速すぎる問題など解消しました)
- [Windows] 最大化できるようにしました
- [Windows] ウインドウの大きさを自由に変更可能に
- 起動時の RAMの初期状態をある程度再現しました。
- どこでも SAVE / LOAD 実装してみた。
- 未定義命令のサポートを追加しました。
- PC6001V のスケジュールを取り込みました。
- 音声合成機能を組み込んでみた。
- PC-6601SRの起動メニューから、テロッパを選ぶと、右下の表示がおかしくなる問題を修正しました。
- デバッグ機能を追加しました。
- デバッグ機能で、逆アセンブラリストをスクロール可能にしました。
- 本来入力できないキー(Shift+¥)を、入力できないように修正しました。
- 本来入力できるはずのキー(かなの句読点)を入力できるように修正しました。
- ディスクを2ドライブ対応しました。
- バグを減らしたい
- モニターモードを、マシにしたい
- モニターモードの文字を見やすくしたい
- モニターモードのコマンドラインの内容をファイルに出力したい
- iPhone / iPad /Mac で動くようにしたい
- 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 さんに感謝します。
- PC-6001とPC-6601の互換ROMの作者 秋川さんに感謝します。
- バグをたくさん見つけてくれた、チョコぼんさんに、感謝します。
- そして、このパソコンを作られた 日本電気の方々に感謝します。
石岡さん本当にありがとうございました。(__)
iP6 がなかったら、とてもじゃないけど、一からこれを作るのは、 無理だったと思いますので、感謝しても感謝しきれないです。(_)
なお、プログラム自体に関する お問い合わせについては、全て私までお願いします。
(isioさんは このプログラムの開発に直接は関わってませんので、これについてisioさんに問い合わせることは、ご遠慮下さい。)
バグや使用上の問題については、出来れば、対応したいと思っています。 しかし、フリーソフトウエアで有る以上、限界というものも有りますので、よろしくお願いします。