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

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

大雑把ですが、解析してみました。

この記事は、知らなくても良い事を記述していますので、深く考えて混乱しないようにお願いします。
mh_print( );関数で 文字が書ける、という事だけ知っていればおっけーです。



東雲フォントのデータ構造は 至って単純で、文字の形があれば「1」、文字の形が無ければ「0」、という点の情報の連続で、この「1」と「0」を並べると、モノクロのビットマップの図形でした。

つまり、東雲フォントのデータ = 2色ビットマップ。

サイズは、
半角文字=ヨコ:6ピクセル×高さ:12ピクセル
全角文字=(左側半分)ヨコ:6ピクセル×高さ:12ピクセル、(右側半分)ヨコ:6ピクセル×高さ:12ピクセル

でした。

これを図におこすと、このようになります。


SHINONOME_SHARP.png

SHINONOME_NEKO.png

ここで、mediumgauge氏 製作の 全角文字表示ライブラリから「shinonomefont.c」というファイル(C言語のソース)を開いて見て頂きたいです。

まず、5行目。ここは、半角文字で「#」のデータが格納されています。16進数ですね。何でしょう?機械語でしょうか? 謎の9バイト・データ。

いえいえ、これは、文字のビットマップデータ:( )なのです。

ひも解く手段として、まず、2進数に置き換えます。

16進数 0x01,0x45,0x3E,0x51,0x45,0x3E,0x51,0x40,0x00
     ↓↓↓↓↓↓↓↓↓↓↓↓
2進数 0000 0001 0100 0101 0011 1110 0101 0001 0100 0101 0011 1110 0101 0001 0100 0000 0000 0000

んー、ますます解かりませんね(汗)。
でも、この2進数データを分解して 6ビットづつ並べると・・・。

2進数 000000 010100 010100 111110 010100 010100 010100 111110 010100 000000 000000 000000

↑↑ これですよ、これ。この2進数は、上の図の左側の数値列と同じですね。
この数値列の「1」を青色に、「0」を白色で、塗りつぶすと上の図の「#」の左側の絵になります。

解かりましたね。(^o^)ノ
「#」を構成する点の情報(ビットマップ)が、左から右へ、上から下へ、の順番に並んでいます。
この9バイト・データは、ヨコ:6ピクセル×高さ:12ピクセル=72ピクセル=9バイト・データ長だったのです。謎は解けたっっ(笑)。
これで、「#」についての解析は おしまいです。

次に、全角文字の場合。( )=シフトJISコードで 0x944C なので、3438行目を見て下さい。

>3438行目:/*944C*/0x95,0x72,0x59,0xAC,0xA3,0x9B,0xA8,0xA2,0xF0,
0x13,0xE2,0x08,0xF9,0x24,0xBE,0x49,0x2F,0x80,

まず、9バイト単位に分割します。
何故かと言うと、mh_print( ); という関数は、全角文字を書く作業の実態は、左側 ヨコ:6ピクセル×高さ:12ピクセル を書いてから、右側 ヨコ:6ピクセル×高さ:12ピクセル を書いている、という事実だからです。

だから、データも、
前半の9バイト=ヨコ:6ピクセル×高さ:12ピクセル → 全角文字の、左側半分
前半の9バイト=ヨコ:6ピクセル×高さ:12ピクセル → 全角文字の、右側半分
のように分割されている、という事なのです。

ゆえに、この18バイト・データを2進数に変換すると・・・。

前半:2進数 1001 0101 0111 0010 0101 1001 1010 1100 0101 0011 1001 1011 1010 1000 1010 0010 1111 0000
後半:2進数 0001 0011 1110 0010 0000 1000 1111 1001 0010 0100 1011 1110 0100 1001 0010 1111 1000 0000

これらも、モノクロのビットマップ画像なので、6ピクセル単位に区切って並べると・・・
前半:2進数 100101 010111 001001 011001 101011 000101 001110 011011 101010 001010 001011 110000
後半:2進数 000100 111110 001000 001000 111110 010010 010010 111110 010010 010010 111110 000000

これは、「猫」の図の右側の数値列と同一ですね、ねっ。
縦長で見づらいですね、ごめんなさい。

「猫」を構成する点の情報(ビットマップ)が、左右6ピクセルづつに分割されて、左から右へ、上から下へ、の順番に並んでいます。
この18バイト・データは、左側半分 ヨコ:6ピクセル×高さ:12ピクセル、右側半分 ヨコ:6ピクセル×高さ:12ピクセル=144ピクセル=18バイト・データ長だったのです。



で、文字データってナニ?という方の為に、解説します。
簡単に言うと、文字群の情報を、少ない情報量で分かりやすく表現したデータです。
つまり、半角文字は1バイトで、全角文字は2バイト、と、簡単に分類できます。
(ただし、2バイト長の半角文字もあったようですが、Windowsには2バイト半角文字は存在せず)

詳しく知りたい方は、「文字コード(完全版)」の一覧表をダウンロードして 解凍して 見てください。

それには、文字一覧表の左側に 2桁 or 4桁 の16進数が記載されていますね?
それは、該当の文字が 1バイト、もしくは2バイト、で表現できるデータである、という事を表し、ACIIコード(アスキーコード)や、シフトJISコード(シフトジスコード)等の文字一覧表として表現されます。

その一覧表を見ると、半角文字で「A」は 0x41(16進数) というアスキーコード番号である事が分かるかと存じます。同様に、全角文字で「亜」は 0x889F(16進数) というシフトJISコード番号である事が分かるハズ。

更に、バイナリエディター(テキストエディターに対抗して、文字以外の16進数データも全て扱える数値エディター)で、テキスト文書(拡張子.TXT)を覗いてみると、半角文字=1バイト長、全角文字=2バイト長、で延々と書き連ねられている、という事が分かるかと存じます。

昔のパソコンでは、テキストV-RAMというメモリが存在して、そのテキストV-RAMに、例えば1バイトの 0x42(16進数) というデータを書き込めば、画面に「B」という半角文字が表示されました。
昔のパソコンでは、文字のフォントは、ROMで用意されていましたので、フォントの事を気にせずに文字をバンバン書き込めたのです。しかも、1文字が1バイト。
その1バイトの情報が、ASCIIコード であり、テキストデータの原理(?)であったのです。
同様に、全角文字は、2バイトの情報で、シフトJISコードが一般的でした。

これ以上、つまらないハナシをしても無駄なので要約すると、文字は、1バイト長、もしくは2バイト長、のデータとして扱える、という事を覚えておいて下さい。


全角文字表示ライブラリは、東雲フォントの文字を描画する事が目的です。

している事は、簡単に解説しますと、文字のコード番号を読み取って、その文字に対応するフォントデータのアドレス(番地)を割り出して、フォントのビットマップ情報に従って、指定された色で 点を打ったり点を打たなかったりして1文字ずつ文字を描画しています。

Windows や PSP にはテキストV-RAM が存在しないので、グラフィック画面に絵を描く原理で文字を描画しないと、文字が書けない、という事実も覚えておいて下さい。
その為の、全角文字表示ライブラリなのです。解かりましたか?

それでは、これで、東雲フォントのデータ解析についての講釈を終わります。

上にも書きましたが、もう一回書いておきます。
この記事の内容は、知らなくても良い事なので深く考えて混乱しないようにお願いします。
mh_print( );関数で 文字が書ける、という事だけ分かってもらえればおっけーです。



さあ、つぎに行こう!今回はダウンロード物は ありません。


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

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

[edit]

CM: 2
TB: 0

page top

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

お疲れです。
全角文字表示ライブラリは使用上の問題なのか東雲フォントのソースそのままのデータ配列だと2バイト文字が正常に表示されないんですよね。
わざわざ秀丸でマクロ作って変換したなぁ。

pppm #rkzq7EIc | URL | 2009/07/20 17:57 * edit *

遅れました。

> お疲れです。
やあ、お久しぶり(笑)。

> 全角文字表示ライブラリは使用上の問題なのか東雲フォントのソースそのままのデータ配列だと2バイト文字が正常に表示されないんですよね。

ん? 「十字」という単語(漢字)が文字化けするんですが・・・wwww

データが 左側と右側に分割されているのが原因かなぁ・・・・・・・。

> わざわざ秀丸でマクロ作って変換したなぁ。

秀丸は 使ってますが、このブログではフリーウェアのテキストエディターを推奨しているので、使用することを記事にしないのですよ。

いつのまにか、秀丸のシェアウェア支払額 が、\4,200-円に値上げしていたッッッッ!!(笑)

ついでに禿丸(ぉ

猫山猫宗 #HfMzn2gY | URL | 2009/07/21 04:20 * edit *

page top

コメントの投稿

Secret

page top

トラックバック

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

page top


h o m e |


 

2017-09