ど~もeagle0wlです(再)

140文字では収まらないネタを記録するブログ

Raspberry Pi 2B に RetroPie 4.0 を導入する その4 (4/4) PC-9801

f:id:eagle0wl:20160925083314p:plain

2017/05/23追記 RetroPie 4.2より、実験用(EXPERIMENTAL)という位置づけで、RetroPie-Setup Scriptからnp2piをインストールできるようになりました。私がforkしたリポジトリを参照しているようです。
2017/11/03追記 AZOさんがNP2に大幅に機能追加を行ったNP2 kaiを公開しています。知識のある人は試してみる価値はあるはずです。PC-98 Windows 2000が動作してIEが動作(https非対応)するのはやり過ぎでしょう…(笑)。
domisan.sakura.ne.jp

その4:PC-9801(np2pi)の場合

2017/05/21追記 np2piに独自に追加したコマンドライン引数指定処理のバグを修正しました。コマンドラインからHDDの複数指定することは問題ないのですが、FDDは2つ以上指定しても最初の1つめしかマウントされない不具合がありました。githubに修正版をアップロード済みなので、既に導入されている方は、以下の操作で修正されます。

$ cd ~/Dev
$ rm -rf np2pi/
$ git clone https://github.com/eagle0wl/np2pi.git
$ cd np2pi/sdl
$ make -f makefile.rpi
$ sudo cp ~/Dev/np2pi/bin/np2 /opt/retropie/emulators/np2pi

これから導入する方は記事の通り進めて問題ありません。


今回のエントリでは、総まとめとしてPC-9801エミュレータ『NP2 for Raspberry Pi』(以下、np2pi)をインストールしたい。これさえできれば、どんなエミュレータでもEmulationStationから呼び出せるようにできるはずである。

github.com

もしこれがIBM PC/AT互換機であるならば話は簡単である。DOSBoxを簡単にインストールできる。手順は『OpenMSXをインストールする』と同じ。[dosbox]がリストにある。イメージをカスタマイズしたいのであれば、MS-DOS互換のFreeDOSを使っても良い。
FreeDOS | The FreeDOS Project

PC-9801とnp2piとNeko Project II

Raspberry Pi上で動作する『np2pi』はPC-9801エミュレータ『Neko Project II』(NP2)の移植版だが、マウス操作によるGUI動作が再現されている。X無しで動作して、パフォーマンスも良好である。ただしWindows版NP2で動くタイトルが全て動く訳ではないことに注意。うまく設定すれば動くかもしれないが、今回はインストールの話だけということで…。

インストールの手順としてはQUASI88とほぼ同じだが、np2piをそのまま持ってきてEmulationStationからROMイメージを選択しても、選択したROMイメージはロードされない。マウス操作でメニューを開き、ディスクイメージのパスを指定して再起動する必要がある。

なぜ即座にゲームが遊べないのかというと、SDL版にビルドした)np2piはコマンドライン引数に対応していないからである。SDL版では何故削られているのだろう…。これではEmulationStationとの相性が良くない。なんとかしたい。

(修正済みの)ソースをビルドする

ソースコードの修正は本当に些細な話なので、オリジナルのnp2piをforkして修正したパッケージをGitHub上に用意した。
github.com


ここからはターミナルから操作する。

ビルド自体はnp2piのマニュアル通りに行う。
NP2 for Raspberry Pi · irori/np2pi Wiki · GitHub
※2017/01/24追記 np2piのマニュアルどおりに行うと修正版EmulationStationをインストールできません。リンク先の手順ではなく、必ず以下に記した手順通りに行なってください。

まずはアップデートを行う。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo rpi-update

SDL12-kms-dispmanxをインストールする。

$ cd ~/Dev
$ sudo apt-get install libasound2-dev
$ git clone -b np2pi https://github.com/irori/SDL12-kms-dispmanx.git
$ cd SDL12-kms-dispmanx
$ ./MAC_ConfigureDISPMANX.sh
$ make && sudo make install

SDL_ttfをインストールする。

$ cd ~/Dev
$ wget http://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-2.0.11.tar.gz
$ tar xzf SDL_ttf-2.0.11.tar.gz
$ cd SDL_ttf-2.0.11
$ ./configure && make && sudo make install

np2pi(修正版)をビルドする。

$ cd ~/Dev
$ git clone https://github.com/eagle0wl/np2pi.git
$ cd np2pi/sdl
$ make -f makefile.rpi

正しくmakeされていれば、以下に実行ファイルnp2が置かれているはずである。

$ ls -l ~/Dev/np2pi/bin/
-rwxr-xr-x 1 pi pi 739164  9月 10 00:00 np2

np2piとBIOSを配置する

まず、エミュレータ本体は/opt/retropie/emulators/以下に置かれているので、これに倣って実行ファイルを配置する。

$ sudo mkdir /opt/retropie/emulators/np2pi
$ sudo cp ~/Dev/np2pi/bin/np2 /opt/retropie/emulators/np2pi

これだけでもエミュレータは動作するが、実機BIOSイメージなどが無いと動かないソフトがある。互換BIOSが見当たらないので、必要になった時は本体から吸い出すか念写するしかない。

エミュレータの精度を上げるためには、以下のファイル(外部ファイルと呼ぶ)をnp2と同じフォルダに配置する。当然だがこれらのファイルは大文字小文字を区別する(FONT.ROMだけ大文字なので注意!)。

bios.rom
FONT.ROM
sound.rom
2608_bd.wav
2608_sd.wav
2608_top.wav
2608_hh.wav
2608_tom.wav
2608_rim.wav

np2pi本体が使用するフォントを指定する。FONT.ROMがあれば不要だが、本家マニュアルの通りさざなみフォントを指定する。

$ sudo apt-get install ttf-sazanami-gothic
$ sudo ln -s /usr/share/fonts/truetype/sazanami/sazanami-gothic.ttf /opt/retropie/emulators/np2pi/default.ttf

全てのファイルを配置した場合、こうなっているはずである。

$ ls -l /opt/retropie/emulators/np2pi
合計 1224
-rw-r--r-- 1 root root   7612  9月 10 00:00 2608_bd.wav
-rw-r--r-- 1 root root   6412  9月 10 00:00 2608_hh.wav
-rw-r--r-- 1 root root   2980  9月 10 00:00 2608_rim.wav
-rw-r--r-- 1 root root   6700  9月 10 00:00 2608_sd.wav
-rw-r--r-- 1 root root  14044  9月 10 00:00 2608_tom.wav
-rw-r--r-- 1 root root  57500  9月 10 00:00 2608_top.wav
-rw-r--r-- 1 root root  98304  9月 10 00:00 bios.rom
-rw-r--r-- 1 root root 288768  9月 10 00:00 FONT.ROM
-rw-r--r-- 1 root root  16384  9月 10 00:00 sound.rom
lrwxrwxrwx 1 root root     54  9月 10 00:00 default.ttf -> /usr/share/fonts/truetype/sazanami/sazanami-gothic.ttf
-rwxr-xr-x 1 root root 739164  9月 10 00:00 np2

ただし、このままでは外部ファイルのパーミッションが強すぎてnp2piがロードできないので変更する。

$ sudo chmod 666 /opt/retropie/emulators/np2pi/*.wav
$ sudo chmod 666 /opt/retropie/emulators/np2pi/*.rom
$ sudo chmod 666 /opt/retropie/emulators/np2pi/*.ROM

np2piは設定ファイル np2.cfg を生成・参照するが、そのためにあらかじめ空のファイルを作ってパーミッションを変更する必要がある。

$ sudo touch /opt/retropie/emulators/np2pi/np2.cfg
$ sudo chmod 666 /opt/retropie/emulators/np2pi/np2.cfg

以上でnp2の配置は終了である。

ディスクイメージを配置する

ディスクイメージは以下に配置する。

/home/pi/RetroPie/roms/pc98

今回は動作確認のため『メタ女』(メタじょ)を使用しようと思ったが…動かなかった
メタ女メインメニュー

Windows版 Neko Project IIの「お察しください」版では動く(通常版では動かない)。PC-98向けに作られたシミュレーションRPGである。商業タイトルだが、現在はディスクイメージが無償で公開されている。続編『ツァイ メタ女』も無償公開されている。PC-98と言えばプロプライエタリMS-DOSがつきものだが、このディスクイメージは互換OSのFreeDOS(98)をベースに構築されているので気兼ねなく動作確認として利用できるはずだったのだが…。

ということで、フリーゲームでディスクイメージを作成する。自分でPC-98のディスクイメージを作りたいのであれば、唯一の日本語版バージョンであるMS-DOS 6.2/Vを念写するかFreeDOS(98)をベースにする。ウェブ上にはベースとなるPC-98エミュレータ用のHDDイメージ(サイズ別)があるが自己責任で。

hoge.hdiというディスクイメージを用意したとして話をすすめることにする。

ディスクイメージ設置後、EmulationStationを終了(再起動ではない)してシェルに移動する。ターミナルからは起動できないので、Raspberry Pi本体に挿したキーボードから以下のコマンドを入力したいのだが…。

$ cd ~
$ /opt/retropie/emulators/np2pi/np2 /tmp/hoge.hdi

ディスクイメージはエミュレーションされるが、default.ttfが読めずメニューの文字が出ない。起動時に表示されるフォントも漢字ROM(FONT.ROM)のそれではなく貧相である。明らかに外部ファイルのロードに失敗している。
f:id:eagle0wl:20160925164952p:plain
f:id:eagle0wl:20160925165023p:plain

こちらは上手くいくパターン。

$ cd /opt/retropie/emulators/np2pi/np2
$ ./np2 /tmp/hoge.hdi

「ピポッ」というPC-98の起動音の後にディスクイメージがロードされ、期待した動きを見せる。メニューの文字が出なかったり起動時に表示されるフォントが貧相であれば、FONT.ROMを含む外部ファイルのパーミッションが666になっているか確認すること(基本的なことのはずだか少し悩んでしまった)。
f:id:eagle0wl:20160925165051p:plain
f:id:eagle0wl:20160925165059p:plain

カレントディレクトリを指定しないと正常に動作しないことがわかった。EmulationStationから呼び出す時に工夫すればいいのでソースの修正は必要ないだろう。

bios.romが入っている状態で、何もマウントせずに起動すると懐かしのROM-BASICが起動する。BASICでプログラムを書けるがなんと保存ができないというスパルタンな仕様である(フロッピーから起動するDISK-BASICなら保存できるが、素直に買ったら数万円する代物)。
f:id:eagle0wl:20160925084152p:plain

終了したい場合は、マウスの中クリックかF11キーでメニューが出るが、キーボードだけではメニューを選べないのでマウスは必須である。

np2piをEmulationStationに追加する

ここからの作業は、前エントリで紹介したPC88(QUASI88)のやり方と同じように、EmulationStationに手動で追加する。

以降ターミナルから操作する。

テーマを追加する

※2016/12/13追記 以下のエントリの「carbonの修正」に記載されている通りにカスタムテーマ『carbon-mod』を導入すると、この作業は省略できる。
eagle0wl.hatenadiary.jp

前回(PC-88)の時と同じ方法で、carbonテーマをPC-98対応にする。

前回作成したpc88フォルダ以下をコピーしてpc98のベースとする。

$ cd /etc/emulationstation/themes/carbon/
$ sudo cp -r pc88 pc98

このような画像を用意した。前回と同様に、PC-9801のロゴは白抜きと黒抜きの2種類用意している。
f:id:eagle0wl:20160925165519p:plain
この画像は、PC-88と同じくGALAPAGOS STOREから入手できる高解像度のカタログ画像を加工してベクター画像にしている。
galapagosstore.com

編集方法は前回と同じなので省略する。

es_systems.cfgにpc98を追加する

続いて、メインメニューからPC-9801を選択できるようにするため、es_systems.cfgを編集する。

$ sudo nano /etc/emulationstation/es_systems.cfg

様々な機種が定義されているが、以下の記述を追記する。

  <system>
    <name>pc88</name>
    <fullname>PC-88</fullname>
    <path>/home/pi/RetroPie/roms/pc88</path>
    <extension>.d88 .D88</extension>
    <command>/opt/retropie/supplementary/runcommand/runcommand.sh 0 _SYS_ pc88 %ROM%</command>
    <platform>pc88</platform>
    <theme>pc88</theme>
    <directlaunch/>
  </system>
  <system>
    <name>pc98</name>
    <fullname>PC-98</fullname>
    <path>/home/pi/RetroPie/roms/pc98</path>
    <extension>.d88 .d98 .88d .98d .fdi .xdf .hdm .dup .2hd .tfd .hdi .thd .nhd .hdd .D88 .D98 .88D .98D .FDI .XDF .HDM .DUP .2HD .TFD .HDI .THD .NHD .HDD</extension>
    <command>/opt/retropie/supplementary/runcommand/runcommand.sh 0 _SYS_ pc98 %ROM%</command>
    <platform>pc98</platform>
    <theme>pc98</theme>
    <directlaunch/>
  </system>
  <system>
    <name>pcengine</name>
    <fullname>TurboGrafx 16 (PC Engine)</fullname>
    <path>/home/pi/RetroPie/roms/pcengine</path>
    <extension>.pce .ccd .cue .zip .PCE .CCD .CUE .ZIP</extension>
    <command>/opt/retropie/supplementary/runcommand/runcommand.sh 0 _SYS_ pcengine %ROM%</command>
    <platform>pcengine</platform>
    <theme>pcengine</theme>
  </system>

PC-98のディスクイメージの形式は多様である。その中でnp2piに対応する拡張子は網羅しているはずだが(一応ソースは読んだ)、漏れがあったら許して欲しい。

EmulationStationを再起動するとメインメニューにPC-98が現れる。
f:id:eagle0wl:20160925083314p:plain

emulators.cfgを追加する

これでメインメニューにPC-9801が表示されるようになったが、EmulationStationにnp2piの在り処を教えて終わりにする。

/opt/retropie/configs/ 以下に機種ごとの設定があるので、np2piを起動するためのemulators.cfgを書く。

$ cd /opt/retropie/configs/
$ sudo mkdir pc98
$ cd pc98
$ sudo nano emulators.cfg

/opt/retropie/configs/emulators.cfg の内容は以下の通り。

np2pi="pushd /opt/retropie/emulators/np2pi; /opt/retropie/emulators/np2pi/np2 %ROM%; popd"
default="np2pi"

正しく設定できれば、EmulationStationに追加されたPC-9801からnp2piが起動し、ゲームタイトルが上がるはずである。ただし、%ROM%から想像できるようにディスクイメージを複数選択することができないので、ゲームタイトルを選ぶとフロッピーが2枚挿さっているという風にはこのままではできない(方法はある)。この辺はエミュレータ固有の問題なので各自なんとかしてください。

効果音が遅れて表示される時

※2016/12/13追記 メニューのEmulateからConfigureを選び、SoundグループのBufferを100msに設定すると緩和できる。FM音源を酷使しているタイトルの場合、音がプチプチ切れる現象がみられるが、これで改善されなければ諦めるしかない。
f:id:eagle0wl:20161213010802p:plain

ROMフォルダのショートカットの作成

最後にこれをやっておきたい。イメージファイル選択ダイアログを開くとnp2のカレント(/opt/retropie/emulators/np2pi/)を指してしまう。
f:id:eagle0wl:20160925170419p:plain

ここからマウス操作でromsフォルダ(~/RetroPie/roms/pc98/)まで移動するのはかなり面倒であるため、シンボリックリンクを作っておくと便利である。

$ sudo ln -s ~/RetroPie/roms/pc98/ /opt/retropie/emulators/np2pi/roms

f:id:eagle0wl:20160925170444p:plain

以上で終了である。

最後に

私は当時商業ソフトにアクセスする手段が全くと行っていいほど無く、せいぜい『RPGツクール Dante98』ぐらいしかなかった。当然ながら美少女ソフトにもアクセスできなかったので、思い入れが無い。その代わりフリーソフトはよく使っていた。

個人的には『Super Depth』と『親父王』に衝撃を受けた記憶がある。『Super Depth』はフリーソフトとは思えない完成度で、単音しか出せないBEEP音を高速アルペジオで実現した擬似和音は強く耳に残る。学生の頃、コンピュータルームではどのパソコンでもこのゲームが動いていた。そして棚にチラリと見えるWIZARD98。現在このゲームはブラウザから遊べるし、Android版もある。
f:id:eagle0wl:20160925170627p:plain
bio100.jp
play.google.com

『親父王』『親父打』『親父スピリッツ』の親父三部作は衝撃的である。本作は初代プレステの発売の前年にあたる1993年の作品だが、画面は低解像度で白黒オンリー(高速点滅で中間色を作っているので実質3色)。操作方法もミサイルはオート連射でボタンを押す必要もない。プレイヤーは機体の操作とボムだけである。極めつけに音楽・効果音は全く出ない。物凄く味気ないように思えるのだが、そのぶん動作は非常に高速で、背景の演出や爆発エフェクトには非常に力が入っている。ゲームバランスも良好。無音の中黙々と遊ぶスタイルである。このエントリを書いている最中にDirectX版があることを知った。
自由遊戯黙示録 親父王:モノクロの表現力
f:id:eagle0wl:20160925170644p:plain

NECの姿勢について

ここからは完全に余談である。

バブル経済時に建設された工場ではPC-98が現役で動いているという。大手企業の大工場ほどリプレースの経費がかさむため、だましだまし使い続けているそうだ。自分も割と最近、某自動車会社の工場を訪問した際に見たことがある。

www.asahi.com

記事によると、この業者は中古のPC-98をかき集めて修理することで在庫を保っているという。すでに役目を終えたMSXX68000は、公式にエミュレータを出したりBIOSなどを公開している。NECがサポートを打ち切っているなか現役稼働しているPC-98は、自ら仕様を公開していない。第三者にライセンスを出して互換機の製造を許可するといったことも行なってないようだ。

かつてEPSONが勝手にPC-9801互換機を作ったことが問題視され、NECEPSONプロテクトなどで対抗し、NECITSUなる謎の回避IDも生み出された過去があったからかもしれない。こういった過ちが、現在になってエミュレーションの障害になっている(回避策は公知だが)。「ハードウェアの寿命を無視できる」というエミュレータの長所を見出そうとしても、エミュレータは完全ではない。これが個人用途であれば多少の誤作動は軽微な問題である。しかし、工場の稼働を考えると「完璧なエミュレーション」つまり現物でないと許容されない。
EPSONプロテクト ‐ 通信用語の基礎知識

翻って、任天堂ファミコンを現在製造していないが、ファミコン互換機は1000円台で売られている。起源をたどると、台湾UMC(聯華電子)が任天堂などの半導体製品の製造を受託しながら、その裏で互換CPUであるUM6527海賊版の開発に着手し、1994年にはファミコン本体のワンチップ化に成功したことに端を発している。現在出回っているファミコン互換機の原点とも言われている。今ある互換機に組み込まれているワンチップは1個10元以下、150円である。普及もするわけだ。既に特許なども失効し問題視されていないが、出発点は物凄くアングラだったりする。
中国のファミコンクローンハード

メガドライブに目を向けると、ブラジルTectoy社が正規にライセンスを受けてギターコントローラと新作専用ソフト付きの『メガドライブ4』(2009年)、携帯型メガドライブNOMAD『MD Play』(2011年)を現在もなお製造し続けている。ブラジルでは現地生産しないと高額の輸入税がかけられるといった事情もあるのだが。
日々是遊戯:海外で独自進化を遂げるメガドライブ――今度は「ポータブル機」に - ねとらぼ

PC-98用の計測機器がCバス、RS-232C対応のままだから計測機器メーカーに問題があるのかもしれない。NECは第三者にライセンス製造許可すればいいのにと思う。もちろん、正規にライセンスを与えたゲームソフトだけが動けばいいゲーム機と、誰でもソフトを作れるパソコンとでは、エミュレータや互換機に求める品質は段違いである。成長産業ではないから利幅が出るかは不明だが、内蔵ハードディスク80MBが1万2960円なので言い値なのかもしれない。

実家に全く使っていないPC-9821があるが売却してしまおうか。当時のNECのデスクトップPCって2~30万もするし、メモリとかマウスとかをサードパーティ製ではなくNEC純正品を後から買おうとすると価格が一桁多かったんだよ。マジで。
f:id:eagle0wl:20161007213807j:plain

でもクソ高かっただけあって、今のPCと全然違って異常なまでに頑丈なのよね。これは本当に評価できる。そのせいで今問題になっている訳だが…。