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


◇PSPでプログラミング-点を打つ-

画面上に点を打ってみましょう。

●画面初期化
PSPは様々な画面モードを持っていると思われます。
サンプルのHello Worldで画像を描画していたので、そのモードでやってみましょう。

ソースを眺めると、pspDisplaySetModeで画面モードを設定しているように思われます。
#define SCREEN_WIDTH 480
#define SCREEN_HEIGHT 272
pspDisplaySetMode(0, SCREEN_WIDTH, SCREEN_HEIGHT);
これでフル画面でしょうか?

フレームモードがあるように見えます。
char *pg_vramtop=(char *)0x04000000;
#define PIXELSIZE 1
#define LINESIZE 512
pspDisplaySetFrameBuf(pg_vramtop, LINESIZE, PIXELSIZE, 1);
これでドット描画ができるフレームでしょうか?

よく分りませんが、このままやってみます。

●VRAM構造
画面モードは適当に決めたとして、VRAM構造が分らないと何もできません。
サンプルのHello Worldを見て推測してみましょう。

まずは、VRAMの先頭アドレスを知る必要がありますね。
char *pg_vramtop=(char *)0x04000000;
より、0x04000000だとわかります。

1ピクセルのサイズは?
pg.cのカラーをセットする時のアドレスの型を見れば分ります。
*(unsigned short *)vptr0=color;
より、16bitだと分ります。
RGBのビット数が分りませんが、後で調べる事にします。

オフセット位置は?
pgGetVramAddr関数を見れば一目瞭然です。
左上隅が0x44000000になります。

この手の機器に共通してある、行の概念も把握しておきます。
これもpgGetVramAddr関数を見れば一目瞭然です。
1行は1024バイトになります。

●つまり点を打つには?
(x,y)座標に点を打ちたい場合は、
0x44000000 + x * 2 + y * 1024
の座標に値を入れれば良い事になります。

カラーは 16bitなので、黒なら 0x0000、白なら 0xffffですね。

●画面の左上に白い点を打つソース

char *pg_vramtop=(char *)0x04000000;

#define SCREEN_WIDTH  480
#define SCREEN_HEIGHT 272

#define PIXELSIZE 1
#define LINESIZE 512

int xmain(void)
{
	pspDisplaySetMode(0, SCREEN_WIDTH, SCREEN_HEIGHT);
	pspDisplaySetFrameBuf(pg_vramtop, LINESIZE, PIXELSIZE, 1);

	*(unsigned short *)(pg_vramtop + 0x40000000)=0xffff;
}

●RGBは15bit
先程放置したRGBの構成を解析しました。
未使用(?)1bit 青5bit 緑5bit 赤5bit

つまり、
黒 0x0000
赤 0x001F
緑 0x03E0
青 0x7C00
白 0xFFFF
でっす。



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