Neko Project II (NP2) 改変
PC-9801エミュレータ『ねこープロジェクト2』(Neko Project II, NP2)を改変しました。
2020年06月23日 更新
NP2 0.86 kai
irori氏・eagle0wl氏の、Raspberry Pi・RetroPie向けNP2 を0.86化して改善(悪)したものです。
- SDL2ポート UNIX(Linux), Windows
- libretroポート UNIX(Linux) Windows,Mac,Android,iOS,他
buildbotによる自動バイナリリリース開始!
マルチエミュレータシステム「RetroArch」とNP2kaiのインストールについては こちら で解説しております。 - X11ポート
SDL12-kms-dispmanx は不要ですが、libsdl2-dev・libsdl2-ttf-dev・libsdl2-mixer-dev が必要です。
SimK 氏の、Neko Project 21/W も参考にさせて頂きました。
「Raspberry Piで、PC98をサクッと体験出来ればいいじゃない」という軽い目標でやってますが、
実用的な動作が充実してきて、「え、そこまで動くの?」って逆に引いてます。
Windows版はMSVC2019にてビルド出来ます。バイナリは公開しません。
ソースファイル : GitHub
CD-ROM動きます。
Windows 95 OSR1、98 SE、NT4.0WS、2000 SP4(音無し)動きました。
SimK 氏の的確なアドバイスに多謝。m(_ _m)
BIOSファイル: bios.rom, font.rom(font.bmp), itf.rom, sound.rom, (d8000.rom or bios9821.rom),
2608_bd.wav, 2608_sd.wav, 2608_top.wav, 2608_hh.wav, 2608_tom.wav, 2608_rim.wav (FONT.ROMとFONT.BMPは大文字、他は小文字)。
SDL2ポートは、実行形式ファイル(np2kai or np21kai) と同じディレクトリにBIOSファイルを置いて下さい。
SDL2ポートでは、NP2メニューは、F11キーまたはマウスホイールクリックにて表示されます。
FDD/HDDの交換が可能です。
libretroポートは、BIOS用ディレクトリ(RetroArchにて設定)
に「np2kai」ディレクトリを作って、その中にBIOSファイルを置いて下さい。
np2.cfgは、BIOSと同じ場所に作成されます。
libretroポートでは、キーボード操作はlibretroフロントエンドのショートカットとして利用されるため、settings > input > input hotkey > enable hotkeys を設定しましょう。
当方は、右Windowsキー(right GUI key)を割り当てています。
なので、Retroarchを終了するには、右Windowsキー+ESCキーで行います。
ホットキーを無効にするには、retroarch.cfg にて 「input_enable_hotkey = "nul"」とします。(Thanks hasenbanck)
「FDDを2枚入れて起動したい」「HDドライブとCD−ROMドライブにイメージをセットして起動したい」
そんなときは、テキスト形式で.cmdファイルを作成してみてください。
np2kai image1locate/image1.d88 image2locate/image2.d88イメージファイルの拡張子でFD/HD/CDを判別してマウントします。
2つめがあれば2番めのデバイスにマウントします。
フロッピーのイメージファイルを.m3uファイルに書いておくと、
libretroのディスク交換インターフェイスが使えます。
FDD1/2の交換をしたい場合は、コアメニューで切り替えておく必要があります。
HDDやCDは.m3uに記述しても使えません。
libretroポートでは、NP2メニューは、F12キーまたはマウスホイールクリックまたはL2ボタンにて表示されます。
FDD/HDDの交換が可能です。
また、F11キーでマウスキャプチャ(カーソルの表示/非表示)が可能です。
右スティックでマウス移動、押し込み(R3)で左クリックです。右クリック必要なら後述のJ2Mで。
ジョイパッドをキーにしたりマウスにしたり。(J2K/J2M機能)
CPUクロックやメモリサイズなどのチューニングは、コアのオプションメニューを使います。
- 「お察し下さい」
- キー入力を、SDL_Keycode→SDL_Scancodeに変更(「ろ」キーの認識を正常化)
- COM、ジョイスティック (X11版から輸入、未検証)
- MIDIは、libretroが認識したのMIDIデバイスに出力 (X11版から輸入)
- np2.cnfファイルをX11版の書式に
- IDE化
- BMP取得(連番制)
- ステートセーブ・ロード(
fmgen使用時はロード時に音が不完全になる改善) - より多くのFDD/HDD/CD-ROMイメージに対応(NP21/W rev32より)
- より多くのクロック/メモリサイズ/HDDサイズに対応(NP21/W rev32より)
- FPU(NP21/W rev32より)
- VGA・256色対応 Windowsも動作
- HOSTDRV対応(np2toolにある、ホスト・ゲスト間を接続出来る便利機能)
- [libretro] ジョイパッドでマウスorキー操作可能。オプションで切り替える。Thanks Tetsuya79!!)
- ネットワーク機能(SimKさんよりソース提供)
- 高精度タイマー機能(SimKさんよりソース提供)
- fmgen 008搭載
- AMD-98 ジョイポート(私家より)
- S98V3(私家より)
- Otomi x2(私家より)
- V30 patch(私家より)
- BMS(私家より)
- VAEG fix(私家より)
- ROM領域をRAM化(kaiEより)
CD-DA修正(kaiEより)更に改良- CSMボイス修正(私家より)
- Sound Blaster 16(NP21/Wより)
- BEEP PCM(ツーショットダイアリーなど)改善
- 某2ちゃんで話題に挙がったtriple fault対策
- [SDL/X] SDL2 mixerを使用
- Mate-X PCM(NP21/W rev.36より)
- Sound Blaster 16(NP21/W rev.36より)
- OPL3(NP21/W rev.36、MAMEより)
- WAB(NP21/Wより)
- [SDL/X] SDL1サポートを復帰
- V30はフラグレジスタbit12-15は1&bit1は1で固定、286はbit12-15は0で固定&bit1はケア無
(ディップスイッチ3-8を、OFFでV30、ONで286)
※「お察し」はEFLAG実装なのでbit12-15使用&bit1は1で固定 - 内部文字列をUTF-8に決定(WinはUTF-16に適宜変換)
- Little Orchestra/Multimedia Orchestra(私家より)
- fontromをフックして文字起こし
- [Windows] SSTP(伺か、ukagaka) 少ししゃべる (xnp2より)
- ビデオフィルタ
見つけたけど実装出来なかったもの。要検討。
- WaveRec(私家より)
fpemul_dosbox.c を含んでいるので、GPLライセンスとなります。
MAME のコードを含んでいるので、GPLライセンスとなります。
開発メモ:
- 「あの妖しい組み込み専用関数群」はキー入力が出来ないので改良したい。(lvglブランチ)
- 他のプロプライエタリや特許と共存し、こちらの権利も守るべくGPLv2採択に向けて準備中。
ビデオフィルタについて
ビデオフィルタを実装してみました。単純なもの、複雑なものいろいろありますです。
中でも、「HSVフィルタについて」紹介します。
HSVフィルタは「周囲の似た色と平均値を出す」という処理です。
黒と白同士はまざらない、大きく違う色とも混ざらない、似た色だけ結合します。
HSVは、H(色相・色合い)を360度の円に見立て、S(彩度)、V(明度)で色を決定します。
なので、Hは近く、Sはまあまあ、Vは遠め、までとしておけば、イイカンジに結合してくれると思います。
での出力例です。
cfgファイルには vf1_pn_p0=1,6,15,5,30,30,90,0 と設定します。
RetroPieへの導入
eagle0wl 氏の carbon-mod を使って、こんなカンジで導入出来ると思います。
NP2 0.86のバグ修正
NP2 0.86にてバグがありましたので報告します。
common.h の LOADINTELWORDマクロ など。
a がUINT8型のポインタでないと、予期せぬ値が生成されてしまいます。
UINT8型のポインタへのキャストが必要です。
(a)
↓修正
((UINT8*)(a))
修正すべきマクロは、以下のものです
- LOADINTELDWORD
- LOADINTELWORD
- STOREINTELDWORD
- STOREINTELWORD
- LOADMOTOROLAQWORD
- LOADMOTOROLADWORD
- LOADMOTOROLAWORD
- STOREMOTOROLAQWORD
- STOREMOTOROLADWORD
- STOREMOTOROLAWORD
fmgen 008のバグ修正
fmgenを搭載しましたが、FM音に雑音が入るケースが多くあったようです。
fmgen.cppの343行目、
*p++ = p[-512] / 2;
↓修正
*p = p[-512] / 2;
p++;
1.式処理
2.インクリメント
と実行されることを期待されているかと思いますが、
1.左辺処理(インクリメント)
2.右辺処理
となってしまう処理系があるようです。
fmgen 008のステートセーブ/ロード追加
fmgenにステートセーブ/ロード用のインターフェイスを追加しました。
OPN/OPNA/OPNB/OPMを搭載したエミュで利用出来ると思います。
XXXX_DataSave() : ステートセーブ、XXXX_DataLoad() : ステートロード、です。
fmgen_xxxxdata_size が、各セーブデータサイズです。
Windows NTの動作
rev.7 にてWindows NT 4.0 WorkStationの動作を確認しました。
インストールや起動の際に、ブートメディアを認識できないので、
NP2kaiのコンフィグファイル(np2.cfg または np2rc)の、「WINNTFIX」を「true」にして下さい。
ただし、NT以外のOSを利用する際は、「WINNTFIX」を「false」にして下さい。
ネットワークの利用(Linux編)
rev.7 にてNICを実装しました。(SimK氏、ソース提供ありがとうございます。)
ホストPCにブリッジを生成し、NP2のTAPに接続することで、ネットワーク通信が出来ます。
NICのスペックは以下の通り。
- 品名: MELCO LGY-98
- IRQ: 6
- I/O: 0x00D0
環境設定 (Ubuntu 16.04)
- NP2kaiは、SDL2ポートまたはX11ポートを使用する。
- NP2kaiのコンフィグファイル(np2.cfg または np2rc)の、「USELGY98」を「true」にする。
- ゲストOS(Win95・98SE・NT4.0WS・2000SP4)をインストールして、NICのドライバを入れて認識させる。
Windows 2000 SP4 では、CDの、VALUEADD\3RDPARTY\DRIVERS.JPN\NEC98\MELCO\LGY98 にドライバが添付されています。
その他のOSは、ドライバーダウンロード LGY-98 | BUFFALO バッファロー にて入手できます。 - /etc/network/interfaces を編集する。
$ sudo vi /etc/network/interfaces
変更前# interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopback
変更後# interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopback auto br0 iface br0 inet dhcp bridge_ports enp0s31f6 bridge_stp off bridge_maxwait 0 bridge_fd 0
※「enp0s31f6」は環境によって変化します。実際のNICのデバイス名に書き換えてください。 - PCを再起動する。
- 以下のバッチファイルを、NP2実行ファイルと同じディレクトリに作成する。
sudo ./np21 & sleep 1s sudo brctl addif br0 tap0 sudo ip link set dev tap0 up
- バッチファイルを実行する。
- NP2kaiが起動してOSが立ち上がる。IEを実行してMSNトップページが表示されればOK。
ネットワークの利用(Windows編)
多分、こちらを参照の事。Neko Project 21/WのLAN設定 - Neko Project 21/WでWindowsを動かす
(Win2000) Opera@USB 11.64でHTTPSサイトのブラウズ
Windows 2000 SP4でも、付属のブラウザはIE5なので、HTTPSのサイトは見れません。
なので、YahooもGoogleも見れません。
しかし、Opera@USB 11.64(Operaのインストール不要なポータブル版)を使うと、何とか閲覧できました。
非常に鈍重なので、忍耐よりも、むしろ応援の精神でお試しください。
(H.Kさん、情報ありがとうございます。)
以下の作業は、ゲストOS内で行います。メモリは64MB以上。Opera起動まではIE5を使用します。
(NTFSで環境を作ったので、DiskExplorerが使えない状態。)
こちらのサイトから11.64(12はXP以上)をダウンロードします。
http://www.opera-usb.com/downloadold.htm
すると、きっとZIP圧縮ファイルを解凍することになるので、+Lhacaをこちらからダウンロードしてインストールしましょう。
+Lhaca
OperaのZIPファイルを解凍して、おもむろにOperaを起動します。
証明書について英語で警告のウィンドウが表示されますが、すべて「Accept」ボタン(見切れてたら、右下の一番左のボタン)をクリックします。
日本語化は、左上の「Opera」ボタンが押せるようになったら、
「Settings」 → 「Preference」を選択。
「General」タブの「Language」で、「日本語(ja)」(ja_jpではない)を選択し、
「OK」ボタン(見切れてたら、右下の一番左のボタン)をクリックします。
こんな風に、ブラウズ出来ます。
WAB (Window Accelerator Boards)
rev.16にて、NP21/W を参考に、WABを実装しました。
通常は、「PC-9821Xe10,Xa7e,Xb10 built-in」を使用して下さい。
- 640 x 480 : 256色、16bit Highカラー、24bit Trueカラー
- 800 x 600 : 256色、16bit Highカラー
- 1024 x 768 : 256色
OSごとのドライバの導入など、詳しくは NP21/Wのサイト をご参照下さい。
参考
- Neko Project II
- NP2 for Raspberry Pi · irori/np2pi Wiki
- Xnp2
- Raspberry Pi 2B に RetroPie 4.0 を導入する その4 (4/4) PC-9801 - ど~もeagle0wlです(再)
- Neko Project 21/WでWindowsを動かす
- PC-9801キーボードを98配列のUSBキーボードにするアダプタ | 雑記
- meepingsnesroms/libretro-meowPC98: Neko Project 2 (PC98 emulator) port for libretro/RetroArch
- project m88
なんかくれkai (Please donate to my researching!)
My wish list (AliExpress)--> BTC 39Ti3CTg9wuquTXt2ELH32BF1Qj2NQjsja