Nanashi-soft○プログラマ専用○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
でっす。