2011年04月05日


SNES9X最新版をPSPに移植してみる(6) psplinkでデバッグ

■psplinkを用いたPSP実機でのデバッグ

psplinkを使うと、ホストPCとPSPをUSBで接続することで、以下の様な便利な機能が利用できるようになります。
ホストPCで作成した実行ファイルやコンフィグ、ROMファイル等をいちいちPSPのメモリに転送しなくてもプログラムを実行することができる。
stderrにfprintf()することで、ホストPCへのデバッグ出力が可能となる。
起動したプログラムがエラーで止まったときに、レジスタを参照したり、逆アセンブルしたりといったデバッグが可能。
ホストPC側でGDBを起動してリモートでソースコードデバッグができる。

ひっそりぃは、psptoolchainに含まれていたpsplinkを使用しました。詳細は付属のpdfドキュメントを参照してください。利用したホストPCはUbuntu 10.10です。

●psplinkのmake
psplinkusbディレクトリ直下でmake releaseするだけで完了です。

●psplinkのPSPへの転送
psplinkusb/release_oe/psplinkをPSP側のメモリの/PSP/GAME/psplinkにコピーします。
ちなみにひっそりぃはPSP Goで6.20 TN-Dを使っていますが、1.0とか1.5な方はpsplinkusb/release/以下の該当psplinkを使用してください。

●実際に動かしてみよう
続きを読む


タグ:SNES9X PSP
posted by ひっそりぃ at 2011/04/05 16:18 | Comment(0) | TrackBack(0) | SNES9X for PSP | このブログの読者になる | 更新情報をチェックする

SNES9X最新版をPSPに移植してみる(5)

サウンドはオフだし、コントローラの実装も未、もちろんGUIもまだありませんが、最低限のPSP向け実装が完了したので、ここからmakeが完了しオブジェクトが作成されるところまで行ってみたいと思います。

●/usr/local/pspdev/psp/sdk/include/pspiofilemgr_stat.h:69: error: 列挙子リストの最後にカンマがあります

PSP関連のヘッダファイルをincludeしてコンパイルすると、上記の様なエラーが出ることがあります。これは、読んだままなのですが、以下の様に列挙子や構造体のメンバ等の最後がカンマで終わっている場合にエラーになります。

{a, b, c, }

C言語で上記がエラーになるのは正しいです。ではどうするかというとgcc(g++も同じ)の拡張機能を使います。gccでは、特に指定しなくてもこの拡張機能が有効で、列挙子の最後にカンマがあってもエラーになりません。逆にエラーになる場合は、gccの拡張機能を止めるオプション-pedanticが有効になっているはずです。
Makefileを見直してみると、確かにCCFLAGSの中に-pedanticがありましたので、削除しておきます。

●リンク時のエラー

各ファイルのコンパイルが終了し、なんとかリンクフェーズまでたどり着いたのですが、ものすごい量のエラーが。それもC++に関するエラーだらけです。よく見るとpsp-gccでリンクしようとしているので、psp-g++でリンクするように変更します。

CC = $(CXX)


●sceGu関係のリンクエラー

build.makの中では、pspguのライブラリはリンク指定してくれないのでMakefileのbuild.makをincludeする前に以下を追加する

LIBS = -lpspgu


●libc関連のリンクエラー

リンク指定では、libcをリンクするようになっているはずなのに、なぜかエラーになる。とりあえず明示的に-lcをつけてlibcをリンクするようにする。理由がよく分からないので対症療法ですが。

LIBS = -lpspgu -lc


●relocation truncated to fit: R_MIPS_GPREL16 against `typeinfo for int' のようなエラーがでる

これは、ググってみると、mips固有のコンパイルオプション-G numにnum 0で指定すればよいとのことで、MakefileのCCFLAGSに-G0を追加する。
これはコンパイルオプションなので、make cleanしてコンパイルからやり直す必要がある。

●Error, no sceModuleInfo section found というエラー。

リンクも終わり、elfファイルの生成までは完了したが以下の様なエラーが発生。

psp-fixup-imports snes9x15281.elf
Error, no sceModuleInfo section found
make: *** [snes9x15281.elf] エラー 1
hissorii@MBA:~/src/snes9x-1.52.81-psp/psp$

main()関数の前あたりに以下のコードを追加する。意味はよく分かりません(オイ)。あわせてpspkernel.hもincludeするようにします。

PSP_MODULE_INFO("snes9x/1.52.81 for PSP", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);


●とりあえずオブジェクトが完成

そんな訳で、適当に修正したところも多々ありますが、EBOOT.PBPができあがりました。サイズが3Mぐらいあります。
この後は、psplink経由でPSP実機でのデバッグを行います。
posted by ひっそりぃ at 2011/04/05 15:52 | Comment(0) | TrackBack(0) | SNES9X for PSP | このブログの読者になる | 更新情報をチェックする

SNES9X最新版をPSPに移植してみる(4)

■psp/unix.cpp psp/x11.cpp をPSP用に修正する

まだ、pspディレクトリ配下のソースは、元にしたunix/X11用のコードのままなので、これをPSP用に置き換えていく必要がある。項目としては、
グラフィック関連
サウンド関連
ジョイスティック関連
といったところか。

unix.cpp、x11.cppというファイル名もPSP用としてはいまいちですね。そのうち直しましょう。

ここからは、機種依存部分で大きな変更が伴うので、main()関数から順をおって修正していく。

続きを読む
タグ:SNES9X PSP
posted by ひっそりぃ at 2011/04/05 15:35 | Comment(0) | TrackBack(0) | SNES9X for PSP | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。