PC6001VX を、Macでビルド

808 Midway

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 をベースにしているんですよねぇ。。

あのときのプログラムが形を変えて、復活。。