Neko Project 21/W は特定のI/Oポートを操作することにより、エミュレータ本体で設定する必要がある項目(CPUクロック倍率、使用するサウンドボードなど)を動的に変更できます。 これらの動的設定変更はリセットで元に戻りますので、特定のディスクイメージに合わせた設定に一時的に変更するなどの用途で使用可能です。
一般のユーザーがI/Oポートを操作することは容易ではありませんので、この操作を行うプログラムを用意しています。
NPCNGCLK.EXE, NPCNGCFG.EXEは汎用的なプログラムで、それぞれCPUクロック倍率とハードウェア構成を変更できます。 NPCxxx.COMは引数なしの固定設定にしてプログラムサイズを小さくしたものです。こちらはIPLwareへの登録も可能です。 NPCxxx.SYSはNPCxxx.COMのデバイスドライバ版です。AUTOEXEC.BATでは手遅れな場合に使用してください。ただし、180byteほどメモリを占有します。
これ以降はI/Oポートの仕様について説明します。
Neko Project IIは2つのI/Oポート 7EDhと7EFhをエミュレータ本体との通信のために使用します。 動的ハード構成変更はこのポートの機能を拡張して実装されています。
I/Oポート | 役割 |
---|---|
7EDh | コマンドパラメータの書き込み |
7EFh | コマンド文字列の書き込みとコマンド結果の読み取り |
なお、未知のコマンドの場合、エミュレータ側は何もしない仕様となっています。 つまり、本家Neko Project IIで対応していないコマンドを送っても問題はありません(何も起こりません)。
また、実機の場合はI/Oポート7EDhと7EFhに何もいなければ問題ありません(何も起こりません)。
Neko Project II システムポートとの通信は以下の手順で行います。
Neko Project II 共通コマンドは、機能カットなどが行われていない限り、本家から派生した全てのNeko Project II/Neko Project 21で使用できます。
Neko Project 21/W 拡張コマンドはNeko Project 21/W/Neko Project II/Wでのみ使用できます。本家で実行しても何も起こりません。
コマンド | パラメータ | 戻り値 | 機能 |
---|---|---|---|
"NP2" | なし | "NP2" | Neko Project IIまたはその派生であるかの判定に使用する。 |
"ver" | なし | バージョン番号文字列 | Neko Project IIのバージョン番号を文字列で取得する。 |
"poweroff" | なし | なし | Neko Project IIを終了する。 |
"hardwarereset" | なし | なし | Neko Project IIをリセットする。Emulate→Resetの操作と同じです。 |
"cpu" | なし | CPU型番文字列 | CPU型番を文字列で取得する。 |
"clock" | なし | 動作クロック数文字列 | 動作クロック数を文字列で取得する。 |
"multiple" | なし | 動作クロック倍率文字列 | 動作クロック倍率を文字列で取得する。 |
コマンド | パラメータ | 戻り値 | 機能 |
---|---|---|---|
"changeclockmul" | クロック倍率の値(1byte) | 設定されているクロック倍率の文字列 | CPUクロック倍率を設定する。パラメータは文字列ではなく1byteの数値である事に注意。パラメータに0を渡すと設定変更せずに現在値が返ります。 |
"changeconfig" | 可変長(後述) | 可変長(後述) | Neko Project 21/Wの設定を変更する。ここで加えた変更はハードリセットで元に戻ります。 |
"getconfig" | 可変長(後述) | 可変長(後述) | Neko Project 21/Wの設定を取得する。 |
動的ハード構成変更コマンド"changeconfig"と、現在の設定を読み取るコマンド"getconfig"は可変長の引数と戻り値となっています。このため、扱いがやや特殊です。
これらのコマンドは以下のような流れで使用します。 先に、下記の機能番号表から設定したいものを探し、その機能番号に対応するパラメータ値を調べておきます。
機能番号 | パラメータ | 戻り値 | 機能 |
---|---|---|---|
1 | CL-GD54xxウィンドウアクセラレータ機種ID (2byte) | 設定されているウィンドウアクセラレータ機種IDの文字列 | CL-GD54xxウィンドウアクセラレータの種類を変更する。 |
2 | サウンドボードID (1byte) | 設定されているサウンドボードIDの文字列 | サウンドボードの種類を変更する。 |
3 | 1 (1byte) | なし | HRTIMERをコマンド実行時のホスト時刻と同期する。 |
4 | 有効=1, 無効=0 (1byte) | 有効="1", 無効="0" | PCIバスの有無を設定する。 |
6 | 1 (1byte) | なし | サウンドROMを強制的に無効にする。 |
ID | 種類 |
---|---|
80 | PC-9821 Bp,Bs,Be,Bf内蔵 |
88 | PC-9821 Xe内蔵 |
89 | PC-9821 Cb内蔵 |
90 | PC-9821 Cf内蔵 |
91 | PC-9821 Xe10,Xa7e,Xb10内蔵 |
92 | PC-9821 Cb2内蔵 |
93 | PC-9821 Cx2内蔵 |
96 | PC-9801-96(PC-9801B3-E02) |
160 | PC-9821 PCI CL-GD5446(要PCI) |
256 | MELCO WAB-S |
257 | MELCO WSN-A2F |
258 | MELCO WSN-A4F |
512 | I-O DATA GA-98NBI/C |
513 | I-O DATA GA-98NBII |
514 | I-O DATA GA-98NBIV |
65527 | 自動選択(Xe10, GA-98NBI/C, PCI) |
65528 | 自動選択(Xe10, GA-98NBII, PCI) |
65529 | 自動選択(Xe10, GA-98NBIV, PCI) |
65530 | 自動選択(Xe10, WAB-S, PCI) |
65531 | 自動選択(Xe10, WSN-A4F, PCI) |
65532 | 自動選択(Xe10, WSN-A2F, PCI) |
65533 | 自動選択(Xe10, WAB-S) |
65534 | 自動選択(Xe10, WSN-A2F) |
65535 | 自動選択(Xe10, WSN-A4F) |
ID | 種類 |
---|---|
0 | サウンドボード無し |
1 | PC-9801-14 |
2 | PC-9801-26K |
4 | PC-9801-86 |
6 | PC-9801-86 + 26K |
8 | PC-9801-118 |
20 | PC-9801-86 with ADPCM(ちびおと) |
32 | Speak board |
36 | PC-9801-86 + Speak board |
50 | SOUND ORCHESTRA |
64 | Spark board |
65 | Sound Blaster 16 |
66 | PC-9801-86 + Mate-X PCM(B460) + Sound Blaster 16 |
67 | Mate-X PCM(B460) + Sound Blaster 16 |
68 | PC-9801-86 + Sound Blaster 16 |
69 | PC-9801-118 + Sound Blaster 16 |
70 | PC-9801-86 + PC-9801-118(B460) + Sound Blaster 16 |
96 | Mate-X PCM |
100 | PC-9801-86 + Mate-X PCM(B460) |
104 | PC-9801-86 + PC-9801-118(B460) |
112 | WaveStar |
128 | AMD-98 |
130 | SOUND ORCHESTRA-V |