X68000エミュレータPX68K for PSPの現状報告(8/20)
そんな訳でX68KエミュPX68K for PSPについての進捗報告。
twitterの方ではちょくちょく報告していましたが、SDLで画面描画していたのをGUを使うように変更しました。ソースはGitHubにpush済み。これにより画面いっぱいに出力できるようになりました。画面比率は4:3になるようにしているので、左右に隙間はできますが。
でもまだまだ遅い。ただグラフィック出力のない場面でも遅いこと、同じMPUコアのCPS2PSPはバリバリ動いていることを考えると、何か単純なヘマをやって遅くなっているだけかもしれないなーと楽観的に考えてみたりしますが、甘いかな。
まぁ、性能関連は後回し。基本機能がまだまだなので。
GUを使うことにより、画面の拡大縮小もHW任せにできるので楽ちんなのですが、Human68kやSX-Window等の756x512画面はかなり小さくて見づらくなります。主にゲームで使われるであろう256x256はPSPの480x272への拡大処理になるので問題はないのですが。
SX-Windowはこんな感じ。PSP Goは普通のPSPよりさらに画面が小さいのでより見づらい。

twitterの方ではちょくちょく報告していましたが、SDLで画面描画していたのをGUを使うように変更しました。ソースはGitHubにpush済み。これにより画面いっぱいに出力できるようになりました。画面比率は4:3になるようにしているので、左右に隙間はできますが。
でもまだまだ遅い。ただグラフィック出力のない場面でも遅いこと、同じMPUコアのCPS2PSPはバリバリ動いていることを考えると、何か単純なヘマをやって遅くなっているだけかもしれないなーと楽観的に考えてみたりしますが、甘いかな。
まぁ、性能関連は後回し。基本機能がまだまだなので。
GUを使うことにより、画面の拡大縮小もHW任せにできるので楽ちんなのですが、Human68kやSX-Window等の756x512画面はかなり小さくて見づらくなります。主にゲームで使われるであろう256x256はPSPの480x272への拡大処理になるので問題はないのですが。
SX-Windowはこんな感じ。PSP Goは普通のPSPよりさらに画面が小さいのでより見づらい。

Human68kは文字の判別がやっとな感じ。

Texture FilterをGU_LINEARからGU_NEARESTに変更してみたら、ドットが抜けてもはや判別不能に。

将来的には、NP2 for PSPの様に縮小しない画面モード(画面からはみでる部分はPSPのアナログパッドでスクロールして見ることができる)も必要でしょうか。
とりあえず画面出力は落ち着いたのでjoystickの実装をして、PX68K for PSP Ver.0.01のリリースしようと思ったのですが、PPSSPPだと大丈夫なのに、実機では電源が落ちてしまう不具合を検出。
PPSSPPだとOKで実機だとNGの場合は、おそらくアライメントがらみ。奇数番地からのワードアクセスとか、ロングワードアライメントまたぎのロングワードアクセス等。
早速デバッガで追ってみた。
うむ、ビンゴですね。srcpはWORD (unsigned short)のポインタなので、奇数番地へのワードアクセスをしています。
x86だと大丈夫ですが、PSPのMIPSやAndroidのARMではアウト。
PPSSPPもJITを使わない設定があるようなので、もしかしたらこの類のエラーも検出できるようになるかもしれませんが未確認。
ということで、このバグ(x86だとokなのでkeropiやxkeropiのバグではないです)を修正したらVer.0.01をリリース予定です。
今日は眠いのでここまで。

Texture FilterをGU_LINEARからGU_NEARESTに変更してみたら、ドットが抜けてもはや判別不能に。

将来的には、NP2 for PSPの様に縮小しない画面モード(画面からはみでる部分はPSPのアナログパッドでスクロールして見ることができる)も必要でしょうか。
とりあえず画面出力は落ち着いたのでjoystickの実装をして、PX68K for PSP Ver.0.01のリリースしようと思ったのですが、PPSSPPだと大丈夫なのに、実機では電源が落ちてしまう不具合を検出。
PPSSPPだとOKで実機だとNGの場合は、おそらくアライメントがらみ。奇数番地からのワードアクセスとか、ロングワードアライメントまたぎのロングワードアクセス等。
早速デバッガで追ってみた。
(gdb) c
Continuing.
[New Thread 68732991]
Program received signal SIGHUP, Hangup.
[Switching to Thread 68732991]
0x08815028 in Grp_DrawLine4 (page=3, opaq=1) at x68k/gvram.c:1217
1217 v = *srcp++;
(gdb) p/x srcp
$1 = 0x8e929fd
(gdb)
うむ、ビンゴですね。srcpはWORD (unsigned short)のポインタなので、奇数番地へのワードアクセスをしています。
x86だと大丈夫ですが、PSPのMIPSやAndroidのARMではアウト。
PPSSPPもJITを使わない設定があるようなので、もしかしたらこの類のエラーも検出できるようになるかもしれませんが未確認。
ということで、このバグ(x86だとokなのでkeropiやxkeropiのバグではないです)を修正したらVer.0.01をリリース予定です。
今日は眠いのでここまで。
Comment
コメントの投稿
Trackback
http://hissorii.blog45.fc2.com/tb.php/224-90d11b11