PSP xvi

PSPプログラミングを教えるブログ(本気で頑張る人アクセス大歓迎サイト)

PSP-X.gif

記事の間違いを報告  新アップローダー
記事修正情報 PSPプログラミング資料 自作ゲーム PSP用エミュレータ リンク

公認リンク
公式PSP専科 公式PSVita専科 はじめるPSPSDK PSP EXEC GAME M@STER PSP 猫山のYouTubeチャンネル

TAG
全記事にタグをつけています  http://nekoyama2gillien.blog36.fc2.com/?tag=タグ
PSP PSPプログラミング DXライブラリPortable OSLib ショートプログラム ハローワールド
PSP自作ゲーム PSP自作ソフト エミュレータ ゲームアーカイブス PSP動画
動画 初音ミク ミクミクダンス MMDドラマ ゲーム 魔法少女まどか☆マギカ 侵略!イカ娘
アイドルマスター

このブログについて

このブログでは、非公式のPSPソフト、いわゆる自作ソフト( PSP Homebrew )を作る事を目的とします。

著作権などの こまかい利用規約については、こちらを開いてお読み下さい

このブログについて知りたい方、初めて来訪された方はこちらを開いてお読みください
お問い合わせは 猫山猫宗(nekomune@gmail.com)までどうぞ


当ブログはリンクフリーです。ブログ名は、アルファベットで「PSP xvi」と書いて『ピーエスピー・エクシビ』とお読みください。
相互リンクを希望されるブログ運営者様は、ココで申請して下さい。


このブログで全記事から探し物の方は、ここをクリックして下さい。
http://nekoyama2gillien.blog36.fc2.com/?all

スポンサーサイト 

--/--/--
--. --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[edit]

CM: --
TB: --

page top

全角文字表示ライブラリの解析。

ビットマップ描画の解説の前にやっておくべき事でした。ごめんなさい。

  ( プログラムの一部を見たい人の為に、「続きを読む」 に追加しました 。 7/14 )

まず、東雲フォント(しののめふぉんと)の文字を全部表示するプログラムの公開から始めます。
実行してみて、絵文字が存在する事を確認しました。ナイス!

図1  絵文字 その1 は、コード : 0xF89F to 0xF8FC にかけて存在。
絵文字 その1

図2  絵文字 その2 は、コード : 0xF940 to 0xF97E と、コード : 0xF980 to 0xF9FC にかけて存在。
絵文字 その2

図3  EU文字 なども存在します。
EU文字とか。


こういう絵文字などを表示させたい場合は、下記のように記述すると可能です。

例:自動車(コード=0xF8C0)、おにぎり(コード=0xF9EE)

       mh_print( x, y, "\xF8\xC0 \xF9\xEE", colo1, col2);

「自動車」の絵文字のコードは、0xF8C0 なので、"\xF8\xC0"が本体。
「おにぎり」の絵文字のコードは、0xF9EE なので、"\xF9\xEE"が本体。




『東雲フォント文字を全部表示しちゃうプログラム』のダウンロード
ALL_Shinonome_Moji.zip  309 KB (316,475 バイト)
ダウンロード
ソース付き / 実行ファイル付き / PSP-1000&PSP-2000対応)
(ソースのコンパイルには、全角文字表示ライブラリが必要)
ユーザーモードのEBOOT.PBPです
暗号化はしてないので、正規PSPでは実行不可能!(ぐは


今回のプログラムは手抜き作成です、ごめんなさい。

プログラムの一部を見たい人の為に、「続きを読む」 に追加しました。


【 関連記事 】
PSPプログラミング 全角文字表示ライブラリをダウンロード
PSPプログラミング [ 番外編 ] 日本語の文字 一覧表(ASCII & SHIFT-JIS) 完全版
PSPプログラミング 東雲フォント文字を全部表示しちゃうプログラム
PSPプログラミング 東雲フォントのデータ構造を調べました
PSPプログラミング 全角文字表示ライブラリ公開停止中のお知らせ
PSPプログラミング 『東雲フォント』が動画になった

////////////////////////////////////////////////////////////////////////
//
// 『東雲フォント文字を全部表示しちゃうプログラム』 
//  (これは一部抜粋したものでっす)
// 製作:猫山猫三郎猫宗 in 2009.07.14(TUE)
//
////////////////////////////////////////////////////////////////////////


(この辺は省略なの)

/*****************************************************************************
* サブルーチン 絵文字の書き方
*****************************************************************************/

void emoji(void)
{
// 例えば、絵文字の 「傘」= 0xF8A1 というのを表示させる場合、
// 文字列に "\xF8\xA1" を記述すると良い。


mh_print( 347,120,"\xF8\xA1",BLUE ,WHITE); // 0xF8A1 傘 東雲
mh_print( 367,120,"\xF8\xA3",YELLOW ,BLUE); // 0xF8A3 雷 東雲
mh_print( 387,120,"\xF8\xC0",RED ,SKYBLUE); // 0xF8C0 自動車 東雲
mh_print( 407,120,"\xF9\x87",YELLOW ,BLUE); // 0xF987 □ の中に 1 東雲
mh_print( 427,120,"\x81\xF7",WHITE ,RED); // 0x81F7 ¶
mh_print( 447,120,"\x83\xCE",GREEN ,BLACK); // 0x83CE π

mh_print( 347,134,"\x83\x41",WHITE ,BLUE); // 0x8341 ア
mh_print( 367,134,"\x8A\x84",RED ,BLACK); // 0x8341 割
mh_print( 387,134,"\x93\xE5",YELLOW,BLACK); // 0x93E5 灘
mh_print( 407,134,"\xE8\xFC",GREEN ,BLUE); // 0xE8FC 顰
mh_print( 427,134,"\x84\x76",WHITE ,BLUE); // 0x8476 ё(全角)
mh_print( 447,134,"\xFD\x55",WHITE ,BLUE); // 0xFD55 ё(半角) 東雲

mh_print( 347,152,"コードの見方",YELLOW ,BLUE);
mh_print( 347,167,"'G' = 左[40]+上[+7]",YELLOW ,BLACK);
mh_print( 347,181," = 0x47 ",YELLOW ,BLACK);

mh_print( 341,197,"'完' = 左[8AA0]+上[+E]",YELLOW ,BLACK);
mh_print( 341,211," = 0x8AAE ",YELLOW ,BLACK);

}

/*****************************************************************************
* サブルーチン 2桁の16進数を表示するのだ!!
*****************************************************************************/

void hex_code2(int x,int y,int num,int col1,int col2)
//
// x == X座標( 0 to 479 )
// y == Y座標( 0 to 271 )
// num == 数値(この値を16進数で座標(x,yへ描画))
// col1 == 文字の色(24ビットカラーで指定)
// col2 == 文字の背景色(24ビットカラーで指定 / 透明の場合は -1を記述)
//

{
int i1,i2;
unsigned char c[3];

i1 = ((int)num/16); // 0x?0
num -= i1*16;
i2 = (num % 16); // 0x0?

// 16進数 上位
if(i1>9)
c[0]=0x41+(unsigned char)i1-10; // 'A' - 'F'
else
c[0]=0x30+(unsigned char)i1; // '0' - '9'

// 16進数 下位
if(i2>9)
c[1]=0x41+(unsigned char)i2-10; // 'A' - 'F'
else
c[1]=0x30+(unsigned char)i2; // '0' - '9'

c[2]=0x00; // 文字列の終わり

mh_print( x, y, c, col1, col2); // 16進数2桁の数値を文字で描画
}

/*****************************************************************************
* サブルーチン 4桁の16進数を表示するのだ!!
*****************************************************************************/

void hex_code4(int x,int y,int num,int col1,int col2)
//
// x == X座標( 0 to 479 )
// y == Y座標( 0 to 271 )
// num == 数値(この値を16進数で座標(x,yへ描画))
// col1 == 文字の色(24ビットカラーで指定)
// col2 == 文字の背景色(24ビットカラーで指定 / 透明の場合は -1を記述)
//

{
int i1,i2,i3,i4;
unsigned char c[5];

i1 = ((int)num/4096); // 16進数 左から1番目 の桁 0x?000
num -= i1*4096;
i2 = ((int)num/256); // 16進数 左から2番目 の桁 0x0?00
num -= i2*256;
i3 = ((int)num/16); // 16進数 左から3番目 の桁 0x00?0
num -= i3*16;
i4 = (num % 16); // 16進数 左から4番目 の桁 0x000?

// 16進数 0x?000
if(i1>9)
c[0]=0x41+(unsigned char)i1-10; // 'A' - 'F'
else
c[0]=0x30+(unsigned char)i1; // '0' - '9'

// 16進数 0x0?00
if(i2>9)
c[1]=0x41+(unsigned char)i2-10; // 'A' - 'F'
else
c[1]=0x30+(unsigned char)i2; // '0' - '9'

// 16進数 0x00?0
if(i3>9)
c[2]=0x41+(unsigned char)i3-10; // 'A' - 'F'
else
c[2]=0x30+(unsigned char)i3; // '0' - '9'

// 16進数 0x000?
if(i4>9)
c[3]=0x41+(unsigned char)i4-10; // 'A' - 'F'
else
c[3]=0x30+(unsigned char)i4; // '0' - '9'

c[4]=0x00; // 文字列の終わり

mh_print( x, y, c, col1, col2); // 16進数4桁の数値を文字で描画
}

/*****************************************************************************
* サブルーチン 半角文字を書いちゃう
*****************************************************************************/

void Ascii(int num)
//
// num == 0x00 → ASCIIコード , 0x80 to 0xFF → シフトJISコード(上位2桁)
//

{

unsigned char chr[2];
int i,j,y;

pgFillvram(WHITE); // PSP画面を 白色で塗りつぶし

mh_print( 347,70,"じゅうじキーで操作",PINK,BLACK);
mh_print( 395,99,"↓",BLACK,SKYBLUE);

mh_print(14, 1," アスキーコード ",RED,WHITE);
y=0;
for(i=0x20;i<0x100;i+=0x10)
{
hex_code2( 26, y*14+28, i, PINK, BLUE); // 20 から F0 までの16進数値を書く
y++;
}
mh_print(44, 14," +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F", YELLOW, BLUE);
mh_print(44,224," +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F", YELLOW, BLUE);

chr[1]=0x00; // 文字列の終わりのNULL文字

for(j=2; j<16; j++)
{
for(i=0; i<16; i++)
{
chr[0]=j*16+i;
mh_print(56+i*18,28+(j-2)*14, chr, BLACK, WHITE); // 文字を描画
}
}

mh_print( 14,258,"Rトリガーを押し続けると終了",YELLOW,BLACK); // 黄色,黒色

emoji(); // 絵文字を書く(おまけ)
}

/*****************************************************************************
* サブルーチン 全角文字を書いちゃう
*****************************************************************************/

void Shift_JIS(int num)
//
// num == 0x00 → ASCIIコード , 0x80 to 0xFF → シフトJISコード(上位2桁)
//

{

unsigned char chr[3];
int i,j,y;

pgFillvram(WHITE); // PSP画面を 白色で塗りつぶし

mh_print( 347,70,"じゅうじキーで操作",PINK,BLACK);
mh_print( 395,85,"↑",BLACK,SKYBLUE);
if(num<0xFF) mh_print( 395,99,"↓",BLACK,SKYBLUE);

mh_print(14, 1," シフトJISコード ",RED,WHITE);
y=0;
for(i=0x40;i<0x100;i+=0x10)
{
hex_code4( 20, y*14+28, ((num<<8)+i), PINK, BLUE);
y++;
}
mh_print(44, 14," +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F", YELLOW, BLUE);
mh_print(44,196," +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F", YELLOW, BLUE);

chr[2]=0x00;
chr[0]=num;

for(j=4; j<16; j++)
{
for(i=0; i<16; i++)
{
chr[1]=j*16+i;
mh_print(50+i*18,28+(j-4)*14, chr, BLACK, WHITE); // 文字を描画
}
}

mh_print( 14,258,"Rトリガーを押し続けると終了",YELLOW,BLACK); // 黄色,黒色

emoji(); // 絵文字を書く(おまけ)
}

/*****************************************************************************
* サブルーチン 表を書く
*****************************************************************************/

void hyou_draw(int num)
//
// num == 0x00 → ASCIIコード , 0x80 to 0xFF → シフトJISコード(上位2桁)
//

{
if(num==0x00) // 書く表 は、ASCIIコードか 判定します。
Ascii(num); // ASCIIコードの表 を書きます
else
Shift_JIS(num); // シフトJISコードの表 を書きます

pgScreenFlipV(); // 垂直同期信号を待つ関数 , pg.c にあります
pgWaitVn(6); // 6ミリ秒 待ちます , pg.c にあります
}

//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//■ メイン
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

int main(int argc,char *argv[])
{
int num; // 一覧表のコード(16進数4桁の、上位2桁が入ります)


SetupCallbacks(); // [HOME]ボタンのコールバック , [HOME]ボタンで終了可能

/* Gu初期化 */
sceGuInit();
sceGuStart(GU_DIRECT, list);
sceGuDrawBuffer(GU_PSM_8888, SCRBUF0, BUF_WIDTH);
sceGuDispBuffer(SCR_WIDTH, SCR_HEIGHT, SCRBUF0, BUF_WIDTH);
sceGuFinish();
sceDisplayWaitVblankStart();
sceGuDisplay(GU_TRUE);

sceCtrlSetSamplingCycle(0); // パッドの初期化
pgScreenFrame(2,0); // 表示画面と描画画面を独立させる , pg.c にあります


num=0x00; // 半角英数記号文字
hyou_draw(num); // 一覧表を書きます

do
{
hyou_draw(num); // 一覧表を書きます

LOOP: readpad(); // ← パッド状態取得 , pg.c にあります
if(old_pad==NULL) // もし、一つ過去のパッド入力が無かった場合、何もしない
goto LOOP;

if((num<0xFF)&&((now_pad&PSP_CTRL_DOWN)!=0)) // [↓]が押された時の処理
{
if((num >= 0xE0)&&(num < 0xFF)) // コード 0xE000 to 0xFE00 なら 次は +1
++num;
else
if((num >= 0x80)&&(num < 0x9f)) // コード 0x8000 to 0x9E00なら 次は +1
++num;
else
if(num == 0x00) // コード 0x00 なら 次は 0x8000
num=0x80;
else
if(num == 0x9F) // コード 0x9F00 なら 次は 0xE000
num=0xE0;
}
else
if((num>=0x80)&&((now_pad&PSP_CTRL_UP)!=0)) // [↑]が押された時の処理
{
if(num == 0x80) // コード 0x8000 なら 次は 0x00
num=0x00;
else
if((num > 0xE0)&&(num <= 0xff)) // コード 0xE100 to 0xFF00 なら 次は -1
--num;
else
if((num > 0x80)&&(num <= 0x9f)) // コード 0x8100 to 0x9F00 なら 次は -1
--num;
else
if(num == 0xE0) // コード 0xE000 なら 次は 0x9F00
num=0x9f;
}
}while((now_pad&PSP_CTRL_RTRIGGER)==0); // Rトリガー押しを待ちます

sceKernelExitGame(); // 終了してXMBへ復帰
return 0; // リターンは要らないが、念の為に記述
}

(以下、HOMEボタンのコールバックの記述とか)

関連記事
スポンサーサイト

[edit]

CM: 8
TB: 0

page top

この記事に対するコメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

# |  | 2009/07/13 22:29 * edit *

ソースを追記などで書いてくれると携帯からでも見れて外出先からでも勉強できるんで便利なんですがね~w

solve #- | URL | 2009/07/13 23:45 * edit *

ちょっと長いですねw
さすがにこれを載せるのは無理あるか??

てかプログラムとか初心者なのでここまでくるとわかんなくなりますwww

solve #- | URL | 2009/07/14 00:54 * edit *

ソースはっ!

これは、「文字と、そのコードの対応表」というのが目的だったので、ソースの記述は省略してました。

今日中に、ダウンロード物のソースを注釈付き仕様にしますので、ソースも公開予定(続きを読むにて)良かったら解析マニア(^^;;;;;

猫山猫宗 #HfMzn2gY | URL | 2009/07/14 05:51 * edit *

さすがですね^^
期待しておきますww

solve #- | URL | 2009/07/14 07:47 * edit *

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

# |  | 2009/07/14 09:14 * edit *

わざわざありがとうございます。
勉強になります。

solve #- | URL | 2009/07/14 10:42 * edit *

ソース修正とか。

コメント追加してソースを続きに貼り付けました。
役に立つのかな?

生涯勉強、って良いですな。(^^;;;

猫山猫宗 #HfMzn2gY | URL | 2009/07/15 09:44 * edit *

page top

コメントの投稿

Secret

page top

トラックバック

トラックバックURL
→http://nekoyama2gillien.blog36.fc2.com/tb.php/107-dab9fc79
この記事にトラックバックする(FC2ブログユーザー)

page top


h o m e |


 

2017-11