2018年4月19日木曜日

OS X (Mountain Lion) 上でXnp2 (v0.86) がビルドできて動きましたという話

MacでPC-98エミュレータを利用しようとするとき、実行形式で配布されているものはどれも制約があって帯に短く襷に長い状態だという話を以前にここでやりました。そこでわかったことは、Wineを通してWindows版のNeko Project IIとかAnex86を起動するのは、マウスが使えたりディスクイメージが(たぶん)新規作成できる点ではよいが、音もスクリーンもおかしくなるしフルスクリーンにできないので結局は選択肢たりえない、ということでした。また、RetroArch上のnp2が解像度をむりやり下げられてて全然だめ(というよりはおそらくRetroArchそのものが全然だめ)だという話も以前に述べました。

結局、製作者のYui氏のページで配布されているMac版のNeko Project IIでは(Windows版はサポートされているのに)Mac版ではサポートされていない機能や、Wineを通して起動した場合に損われる機能が同時に欲しければ、自分で xnp2 をビルドするしかないという話になりそうなわけです。

結論から言うと, Xnp2 (Version 0.86) は Moutain Lion (Mac OS X Version 10.8.5) でたぶんビルドできました。しかも難しくなかったのがよかった。その証拠がこちら:

ウィンドウの枠を見るとわかる話ですがXQuartzの上で動いています。また、このスクリーンショットからは見えないですが、マウスも占有モードON/OFFの切り替えができます。もちろんFM音源も遅れなく動きますし86音源にしてリズム音源のwavを置いておくとちゃんと鳴ります。フルスクリーンにもなります(これに関してはやや問題あり)。D88やHDIのディスクイメージも新規作成できるようです(こちらはまだ試してない)。やったね。おそらく問題はほとんど解決したのでは。

このビルドにあたっては、 xnp2 それ自体のビルドに必要だと書かれている gcc, GTK+2とその他オプションで音を鳴らすためのSDLとSDL_mixerはぜんぶMacPortsで入れることですぐにできました。MacPortsすごいね。なお、コンパイルは簡単でしたが、できた実行ファイルが動かない問題はおそらくXQuartzの方にあったことがあとでわかります。

現状だとMacPortsで提供されている SDL2_mixer (libsdl2_mixer)の最新版が 2.0.2 で、これは不具合があって音が鳴らないことがわかっているようです(「既知のバグ」参照)。SDL2とSDL1.2が両方ある環境では後者を選択することで簡単に回避できます(MacPortsを使って(1.2より新しくて)2.0.2より前の旧版を入れることも可能なはずですが、それよりはたぶんこちらが簡単)。 ./configure の時点でSDL1.2を用いることを明示することでSDL_mixerもSDL1.2に応じた libsdl_mixer が使われるようです。このために、オプション--enable-sdl2はデフォルトでyesなので、これをdisableにします。ついでに80386以降のPC-9801用エミュレータ xnp21 もビルドするようにオプションを追加しました。これらは全部 ./configure --helpに書かれています。また, gccはXcodeについてきた方(?)のgccではだめだったのでMacPortsでいつか以前に入れたgcc5を用い、それを環境変数で指名しました。まとめると、やったことは以下のリストの通り:
  1. $ CC=gcc-mp-5 CXX=g++-mp-5 ./configure --build-all --disable-sdl2
  2. $ make -j4
  3. $ make install
オプション-j4で渡す整数については、CPUが4コアの場合は4コアプラス1として-j5がコンパイル速度がもっともいいという話があるようですが、コア数と同数かプラス1のどちらがいいかはよくわかっていません。いずれにせよ、MacPorts (等)で環境の整備さえできれば簡単にビルドできるのでこれはこれでとてもうれしいことです。これで実行形式のファイル xnp2 xnp21 が手に入ったわけですが、XQuartz(最新版は2.7.11)の色深度を256色に設定しておくと、起動するときに
  • $ xnp2
    No support depth.
と返ってきてちっとも動かなかったですがこれは俺のせいなんでしょうか。これを解決するために、XQuartzのPreferencesで色深度設定を"From Display"(日本語は何でしょうか)にするとうまくいくことを確認しました。同じことをターミナルからやるには
  • $ defaults write org.macosforge.xquartz.X11 depth -int -1
または
  • $ defaults delete org.macosforge.xquartz.X11 depth
打つのだそうです(確認済)。または16色(4ビット)として
  • $ defaults write org.macosforge.xquartz.X11 depth -int 4
とやっても動きましたが、これが意味のある設定かどうかはわかりません。まあPC98のほとんどのソフトは16色しかつかわないので人によってはこれでも大丈夫かもしれませんが。 思うに、256色の色深度をPreferencesで設定できるにもかかわらずそれで動かないのはXQuartzの方に問題があるのでは。俺のせいではなさそうに思います。

最後に、フルスクリーンにやや問題があるという話をしておきます。俺のMacBook Proは画面解像度が1280x800となぜかPC-98のたてよこ2倍で面積4倍という同じアスペクト比になっています(Retinaモデルでも同じ16:10ですが)。この画面がフルスクリーンで使えるとよかったのですが、実際にはXQuartzを名乗るメニューバーが邪魔をします。XQuartzのPreferencesでも「フルスクリーンモード」をONに、かつフルスクリーンモード時メニューバーの自動出現をONにするとXQuartzのメニューバーだけは自動で隠すようにはできますが、フルスクリーンモード時のxnp2のフルスクリーンは640x400をそのまま画面中央に置くだけでその周囲を黒で埋めるだけで、1280x800を隅まで使うわけではありません。XQuartzが非フルスクリーンモード時のxnp2のフルスクリーンはほぼ隅々まで引きのばされるのでやや満足なのですが、あと一息のところで。これはなんとかならんのでしょうか。この証拠を提示してこのエントリを終えます。
  • XQuartzがフルスクリーンモード, かつ, xnp2がフルスクリーン。XQuartzのメニューバーは自動で隠す設定にしたら、このスクリーンショットでは実際xnp2のメニューバーだけが残った。PC-98正味のスクリーンぶんにはMac側全体で1280x800あるスクリーンのうちの640x400しか使われてない。残りの黒い部分にはPC-98のスクリーンをあと3枚並べることができます(理屈の上で)。
  • XQuartzが非フルスクリーンモード, かつ, xnp2がフルスクリーン。XQuartzのメニューバーが邪魔。非フルスクリーンモードなのでメニューバーを自動で隠す設定にはできない。正味のPC-98スクリーンの上にメニューバーを重ねて描いているのではなくて、タテが"800 - メニューバーの高さ"までしか拡大していない様子。あとひといきというところだが、現時点で「フルスクリーン」と実質的に呼びうる選択肢はこれしかない。

0 件のコメント:

コメントを投稿