2011年04月05日


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

■makeが通る様にごりごり手直しをする

とりあえず、ごりごりして共通部分のコンパイルは通り、残すはpsp/unix.cppとpsp/x11.cppのコンパイルを残すのみとなった。
まぁ、ここからが本番の様なものですが。

ごりごりした内容としては、

Makefileからzip, png関連を削除
存在しないインクルードファイルに関する修正
ソースの方もちょっと手直し。ただしmovie.cpp内のftruncate()は今後ちゃんと実装しないとだめ。
といったところ。

前回からの差分は
続きを読む


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

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

■Ubuntu 10.10向けに生成されたMakefileをPSP向けに手直しする

それでは、Ubuntu 10.10向けに生成されたMakefileをチェックしてみる。

気になるところとしては、以下でzlibやlibpng、それにpthreadをPSPがサポートしているの?というところ。

CCFLAGS = -O3 -fomit-frame-pointer -fno-exceptions -fno-rtti -pedantic -Wall -W -Wno-unused-parameter -DJOYSTICK_SUPPORT -DZLIB -DUNZIP_SUPPORT -DJMA_SUPPORT -DHAVE_LIBPNG -DHAVE_MKSTEMP -DHAVE_STRINGS_H -DHAVE_SYS_IOCTL_H -DHAVE_STDINT_H -DRIGHTSHIFT_IS_SAR -DUSE_THREADS $(DEFS)

ここからは少々泥臭い作業となるが、少しずつ修正を加えて試行錯誤しながら、Makefileを修正していきます。

●build.makをincludeする

psp開発環境のディレクトリはユーザー毎に違う可能性がありますが、これは
psp-config --pspsdk-path
を実行することで知ることができます。

hissoriiの環境では、

hissorii@MBA:~/src/snes9x-1.52.81-psp/psp$ psp-config --pspsdk-path
/usr/local/pspdev/psp/sdk
となります。

Makefileに以下を追加することで、build.makをMakefileにincludeできます。

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

詳しい内容は、/usr/local/pspdev/psp/sdk/lib/build.makを参照すれば分かりますが、
CC, CXX, AS, LDといったコマンドの設定は、以下の様にbuild.mak内で行うのでMakefileでは不要になります。

CC = psp-gcc
CXX = psp-g++
AS = psp-gcc
LD = psp-gcc
これで、元々のMakefileではUbuntu向けのコンパイラが使用されていたのが、PSP向けのクロスコンパイラが使用される様に変更されました。

all:やclean:等もbuild.mak内で用意されているため、Makefileからは削除しておきます。

また、snes9xのMakefileでは、オブジェクトはOBJECTSであるのに対し、build.makではOBJSであるのが前提となっているので、以下を追加します。

OBJS = $(OBJECTS)
また、snes9xは(better Cとして)C++で書かれておりコンパイラはg++が要求されますが、Makefile内では変数CCCを前提としているので、以下も追加します。

CCC = $(CXX)
最後に、インクルードファイルのディレクトリ指定ですが、Makefileでは

INCLUDES = -I. -I.. -I../apu/ -I../unzip/ -I../jma/ -I../filter/
と定義され、build.mak内では、変数INCDIRで定義されますが、こちらは-Iのつかない単純なディレクトリ指定なので、以下の様にINCDIRの各ディレクトリに-IがつくようにしてINCLUDESに追加します。

INCLUDES += $(addprefix -I,$(INCDIR))

まずは、以下の差分の様にMakefileを修正しました。
続きを読む
タグ:SNES9X PSP
posted by ひっそりぃ at 2011/04/05 00:39 | Comment(0) | TrackBack(0) | SNES9X for PSP | このブログの読者になる | 更新情報をチェックする

2011年04月04日


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

NP2 for PSPもまだまだいろいろと修正したいところがありますが、無性に別の何かをPSPに移植したくなってきた。
その移植過程を示すことで、ブログの記事が書けて、さらにいろいろとノウハウを伝えられるとよいかなと。

そんな訳で、せっかくだからsnes9xの最新版をPSPに移植してみることにした。

■なにをベースとするか

ベースとなるsnes9xはsnes9x-gtk revision 81にする。

現在公開されている最新のsnes9xはバージョン1.52であるが、
上記snes9x-gtkはバージョン1.53向け開発ツリーのスナップショットを取り込んでいる。

つまり1.52と(未完成の)1.53の間に位置するバージョンであり、現在使用できる最新のsnes9xと考えてよいだろう。

■まずはソースをよく眺める

早速ベースとする snes9x-1.52-src-gtk-81.tar.bz2 を展開し、中身をチェックする。

docsディレクトリには、porting.htmlというドキュメントがあった。これには、他のプラットフォームへ移植する場合のノウハウが記述されている。すばらしい。

i386ディレクトリには、i386向けのアセンブラコードが置かれている。PSPでこのディレクトリを使うことはないだろう。

gtkディレクトリには、X11/gtk向けのソースが入っている。これをPSPのベースにするには少々おおげさで面倒だ。

snes9x 1.52のソース snes9x-1.52-src.tar.bz2 を見てみると、gtkの他に、macosx、unix、win32というディレクトリが存在する。
それぞれMAC OS X用、gtkを用いないunix/X11用、Windows用のようだ。
各ディレクトリを見比べてみると、unixディレクトリが一番移植元としてシンプルでよさそうだ。他が数十のソースが含まれるのに対し、unixディレクトリのソースは unix.cpp と x11.cpp のみである。

ということで、1.52から1.52.81へunixディレクトリをコピーして使うことにする。ディレクトリ名はunixからpspに変更しておく。不要なgtk、i386ディレクトリについては削除しておく。
注意しておくことは、unixディレクトリ以下が1.52向けに書かれているのに対し、それ以外のファイルはすべて1.52.81向けに書かれていることである。
続きを読む
タグ:SNES9X PSP
posted by ひっそりぃ at 2011/04/04 22:45 | Comment(0) | TrackBack(0) | SNES9X for PSP | このブログの読者になる | 更新情報をチェックする
×

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