PC6001VX を、Macでビルド
eighttail3の方で、PC6001VXが公開されていました。
PC6001VXというのは、何かというと、ゆみたろさん作の、PC-6000/6600シリーズエミュレータの、PC6001Vを、マルチプラットフォーム化したものらしいです。
もともと、PC6001Vのベースは、SDLで組まれていますが、GUI部分は、Win32 APIべったりで組まれているので、移植する度に、GUI部分をいじらないと行けないのが、問題の種でした。
が、PC6001VXでは、GUI部分は、Qtというライブラリを使っているそうです。
Qtは、マルチプラットフォームで、Windowsでも、Linuxでも、Macでも動くように出来ます。
ちゃんと、見た目も、各プラットフォームに合わせてくれるようです。
まずは、Macで動くかどうかやってみたのですが、qmakeすると、Xcodeのプロジェクトファイルが出来ます。
それをひらいて、ビルドしていると、リンク以外は、すんなり、成功しました。すごい。。
リンクでは、SDLライブラリと、PNGライブラリと、XinitThreads() という関数がないといわれましたので、SDLのframework と、libpngの framework を追加しました。
XinitThreads()に関しては、とりあえず、コメントアウトしました。
X11を使ってない場合は、要らないそうですね。
Mac上のSDLでは、SDL_VIDEO_DRIVER_X11 が、1に define されていますが、これは、環境の中に、X11があるというだけなのか?
それで、実行させたのですが、何度やっても、ROMが見つからない!の一点張りで、起動してもすぐに終了します。汗
うーん。この辺、終了せずに、プログラム上で選択できると、有りがたいと思いました。
まぁ、一番ありがたいのは、自動的に検索して、設定してくれることですが、なかなか。。うーん。
実行ファイルと同じディレクトリにROMファイルをコピーしてもだめ。。
そもそも、作られているはずの、ROMディレクトリや、FONTディレクトリがどこにもない??
よくよく説明を見ると、ホームディレクトリの下に、「.pc6001vx 」というディレクトリが作られるので、そこに設定やら、ROM、FONTディレクトリーなどが入るとのこと。
な、なんと。Σ(・∀・;)
しかしながら、MacのFinder 、ドットファイルとかは、デフォルトで、みえないんですよね。。。
これを、見えるように設定するか、ターミナルのcpコマンドでコピーするしかないようです。。
結局は、cpコマンドで、ROMファイルをコピーすると、起動しました。( ´ ▽ ` )ノ
この辺、要変更ですね。。pc6001vx.config などという、ディレクトリ名にするとか。。?
バグ
しかし、なんか、動作がおかしいです。
右クリックでメニューが出るのですが、それを閉じると、エミュレータが固まってしまいます。 orz
このプログラムは、ベースはSDLで組んでいるが、GUI部分は、Qtで作っているので、その辺が関係しているのかも知れません。。
もしかすると、XinitThreadsが無いからダメなのかと思って、X11ライブラリをリンクして、コメントアウトしていたのを、外しても、同じでした。。
うーん。困りました。。(´・ω・`)ショボーン
この辺になってくると、お手上げですね。。
Linuxや、Windowsでは動いているということは、そっちでは問題がないんでしょうね。。
eighttaildsさんによると、ゆくゆくは、SDLを切り離すということです。。
つまり、SDLを辞めて、Qtだけで組むということ?
そうすれば、動くようになるのかも知れません。。うーんん。
他にもおかしい点がありました。
エミュレータが動いているときに、PC6001VXの終了を選ぶと、終了するのですが、終了処理を実行しないで、終了してしまっています。
これで、多重起動防止用の、lock ファイルが残ってしまいます。
一回起動して、終了すると、lock ファイルを手動で消さないと、次回以降起動しません。
うーん。これも不思議なんだよなぁ。。どこで終了しているんだろう?
追記
eighttails さんと話していてたら、下記の箇所が出てきたので、試しに、下記の処理を省いてみたら、治りました。( ´ ▽ ` )ノ
void VM6::ShowPopupMenu( int x, int y ) の、終わりの方です。
#ifndef __APPLE__ // Apple のときは、何もしない
// ダイアログの後始末など、キューに溜まっているイベントを処理する
while(QApplication::hasPendingEvents()){
QApplication::processEvents();
}
#endif
Linuxでは必要だったそうですが、Macでは、要らなかったようです。。
とりあえず、動いていますが、右クリックでメニューを出した後、普通なら、メニュー以外のところをクリックで、メニューが消えるはずが、消えません。
仕方ないので、どこかのメニューを選ぶと、消えてくれます。。
あと、Core2duo 2.0GHz では、重いですね。。
なぜ、ここまで重いのでしょうか?
スキャンラインオフ、4:3オフ、15fpsにしても、まだ処理落ちします。。
うーん。。
あと、lock ファイルが残ってしまう現象ですが、解消していました。。何故? (^^;
重いのと、音楽がつまるのが問題だなぁ。。
MacProなら、なんとか動かせるかな? 汗
あと、設定ファイルのディレクトリーを .pc6001vx から、変えないと。。
ただ、公開するかどうかは。。
まさに、誰得?という感じではある。。
でも、このプログラムって、以前凍結した、PC6001V Ver.1.13 をベースにしているんですよねぇ。。
あのときのプログラムが形を変えて、復活。。