下図のようなキャラクタをデザインし、これをスクリーンに表示させるまでの手順は
unsigned char bmp_m[] = { 0x3C, 0x7E, 0x93, 0xDB, 0xFF, 0xFF, 0xFF, 0xDB }; |
@白黒2値データを16進2ケタに変換する。 Aデータを配列に設定する。 (実際にはこの部分はWonderWitchに付属している「Bmpcnv」で行う) |
|
Bキャラクタフォントの番号を指定して登録する。 この例では、「2番」から「1個分」のキャラクタフォントに、Aで宣言した配列「bmp_m」の内容を設定している。 |
|
Cスクリーンに表示させるデータにはキャラクタフォントの番号だけでなく、以下の情報を組み合わせて2バイト(unsigned型)とし、そのアドレスを与えます。
・キャラクタフォント番号 通常は8×8ドットより大きなキャラクタを使用するので、以上の情報は『配列』としてその先頭アドレスを与える方法をとります。今回は1キャラですが、これに順じてコーディングしました。 |
|
Dデータが用意できたところでスクリーンへセットします。 この例ではスクリーン2の「横3、縦1」のキャラクタ座標位置へ、データ配列mの内容を 「横1列、縦1行」へ展開しています。 |
#include <sys/bios.h> unsigned char bmp_m[] = { 0x3C, 0x7E, 0x93, 0xDB, 0xFF, 0xFF, 0xFF, 0xDB }; void main() { unsigned m[] = { 2 }; font_set_monodata(2, 1, bmp_m); screen_set_char(SCREEN2, 3 , 1, 1 , 1 , m); key_wait(); } |
以上の説明をプログラムにするとこのようになります。 最後の「key_wait();」はプログラム終了後なにかキーが押されるまで 待機します。すぐに終了してしまうと実行結果が確認できないためです。 |
キャラクタの単位は8×8ドットなので、縦横の大きさが8の倍数のもののみ設定可能。 これを8×8づつに区切って、キャラクタフォントへ登録していく。 データ変換は手計算では大変なので、付属ツール『Bmpcnv』ビットマップコンバータを使用する。 図のような32×32ドットの『Witch.bmp』のデータファイル「witch.h」を生成する。 |
|
witch.h
#define witch_width 4 #define witch_height 4 unsigned char bmp_witch[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x40, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x01, 0x03, 0x07, 0x0D, 0x18, 0x7F, 0xFF, 0xFF, 0x90, 0x26, 0x26, 0x46, 0x80, 0xFF, 0xFF, 0xFF, 0x02, 0x19, 0x19, 0x18, 0x00, 0x80, 0xFC, 0xFE, 0x60, 0x30, 0x38, 0xAC, 0x46, 0x30, 0x21, 0x02, 0xF8, 0x8E, 0x83, 0x81, 0xCD, 0xE0, 0x1F, 0x01, 0x03, 0x07, 0x07, 0x4F, 0x3F, 0x01, 0xFE, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFD, 0xC3, 0x21, 0x10, 0x10, 0x08, 0x00, 0x01, 0x03, 0x47, 0x73, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xCF, 0x77, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0xF8, 0xFF, 0x30, 0x17, 0x1F, 0x1C, 0xFE, 0x48, 0xC8, 0x38, 0x00, 0x00, 0x00, 0x00, }; |
変換されるとこのようなヘッダファイルとして生成される。 witch_width は横のキャラクタ数(横ドット数/8) witch_height は縦のキャラクタ数(縦ドット数/8) を表す定数として宣言される。(ビットマップファイル名に _width , _height がぞれぞれ付加される) 実際のデータは bmp_witch という配列に設定される。 |
#include <sys/bios.h> #include "witch.h" void main() { unsigned witch[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 }; font_set_monodata(1, witch_width, witch_height, bmp_witch); screen_set_char(SCREEN2, 0, 0, witch_width , witch_height , witch); key_wait(); }
「1番」から「16個分」のキャラクタフォントに、「witch.h」
で宣言した配列「bmp_witch」の内容を設定している。 0番のパレットを使うとすると、表示するデータは「witch」の配列内容となる。 スクリーン2の「横2、縦1」のキャラクタ座標位置へ、データ配列 witch の内容を 「横1列、縦1行」へ展開しています。
|