Nanashi-softプログラマ専用PSPでプログラミング


◇PSPでプログラミング-ファイル読込-

データは外部に置けないとメモリがきついので、外に出します。
現状では、ファイル作成方法がまだ分かっていないらしいです。

●関数定義
今回も関数そのものの定義から始めます。
サンプルのHello Worldの startup.sに定義を追記します。

キー入力の時と同じように、ディスプレイモード用関数が定義されている STUB_START "sceDisplay"の次に追加。

	STUB_START	"sceDisplay",0x40010000,0x00030005
	STUB_FUNC	0x0E20F177,pspDisplaySetMode
	STUB_FUNC	0x289D82FE,pspDisplaySetFrameBuf
	STUB_FUNC	0x984C27E7,pspDisplayWaitVblankStart
	STUB_END

	STUB_START	"IoFileMgrForUser",0x40010000,0x00050005
	STUB_FUNC	0x6a638d83,sceIoRead
	STUB_FUNC	0x42ec03ac,sceIoWrite
	STUB_FUNC	0x27eb27b8,sceIoLseek
	STUB_FUNC	0x810c4bc3,sceIoClose
	STUB_FUNC	0x109f50bc,sceIoOpen
	STUB_FUNC	0xF27A9C51,sceIoRemove
	STUB_FUNC	0x6A70004,sceIoMkdir
	STUB_FUNC	0x1117C65F,sceIoRmdir
	STUB_FUNC	0x54F5FB11,sceIoDevctl
	STUB_FUNC	0x779103A0,sceIoRename
	STUB_END

●ファイルオープン方法
int fd = sceIoOpen("ms0:/psp/game/フォルダ名/ファイル名", O_RDONLY|O_NOWAIT);
どうやらメモリースティックのデバイス名は ms0らしいです。

●データ読込方法
char dummy[1];
sceIoRead(fd, &dummy[0], 1);
とする事で1バイト読み込まれます。

sceIoRead(sceIoOpenの返り値, 読込んだデータを入れる変数ポインタ, 読込むバイト数);
です。

●ファイルクローズ方法
最後は必ず閉じて下さい。
この手のデバイスは、オープンしたまま放っておくとリソースを消費したままになる場合が多いです。

sceIoClose(fd);
これだけです。

●ソース T.BINファイルをを読込む

//file IO
#define O_RDONLY	0x0001
#define O_WRONLY	0x0002
#define O_RDWR		0x0003
#define O_NBLOCK	0x0010
#define O_APPEND	0x0100
#define O_CREAT		0x0200
#define O_TRUNC		0x0400
#define O_NOWAIT	0x8000

int xmain(void)
{
	char dummy[1];
〜プログラム〜
	int fd = sceIoOpen("ms0:/psp/game/TEST/T.BIN", O_RDONLY|O_NOWAIT);
	sceIoRead(fd, &dummy[0], 1);
	sceIoClose(fd);
〜プログラム〜

TESTフォルダを作成してアプリとT.BINファイルを置いた場合の例です。
ここまで分れば、後は想像力次第で色々とできるようになるでしょう。


TOPプログラマ専用PSPでプログラミング