#include <sys/bios.h> unsigned char bmp_m[] = { 0x3C, 0x7E, 0x93, 0xDB, 0xFF, 0xFF, 0xFF, 0xDB }; void main() { unsigned m[] = { 1 }; font_set_monodata(2, 1, bmp_m); m[0] = m[0] | 0x8000 ; screen_set_char(SCREEN2, 1, 1, 1 , 1 , m); key_wait(); }
disp.hの中で #define CFM_FLIP_V 0x8000 #define CFM_FLIP_H 0x4000 のように宣言されているので m[0] = m[0] | 0x8000 ;の部分は m[0] = m[0] | CFM_FLIP_V ; と記述できます。 横反転の場合は m[0] = m[0] | CFM_FLIP_H ; となります。 |
#include <sys/bios.h> #include "witch.h" unsigned witch[]={ /* 通常表示用 */ 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12, 13,14,15,16 }; unsigned witch_R[]={ /* 左右反転表示用 */ 4, 3, 2, 1, 8, 7, 6, 5, 12,11,10, 9, 16,15,14,13 }; unsigned witch_U[]={ /* 上下反転表示用 */ 13,14,15,16, 9,10,11,12, 5, 6, 7, 8, 1, 2, 3, 4, }; void main() { int i; font_set_monodata(1, 4*4, bmp_witch); screen_set_char(SCREEN2, 0, 0, 4 , 4 , witch ); /* 通常表示 */ for(i=0;i<16;i++) witch_R[i] |= CFM_FLIP_H; screen_set_char(SCREEN2, 5, 0, 4 , 4 , witch_R); /* 左右反転 */ for(i=0;i<16;i++) witch_U[i] |= CFM_FLIP_V; screen_set_char(SCREEN2, 10, 0, 4 , 4 , witch_U); /* 上下反転 */ key_wait(); }
それぞれのキャラクタ(8×8ドット)の表示位置を計算式で 求めさせこともできますが、この例のようにしたほうがわかりやすい 場合もあります。 次の例のように、キャラクタの並びを2次元配列として設定しておき、 0〜2のパラメータによって反転表示させることもできます。 |
|
#include <sys/bios.h> #include "witch.h" unsigned witch[][16]={ {1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16}, /* 通常表示用 */ {4, 3, 2, 1, 8, 7, 6, 5,12,11,10, 9,16,15,14,13}, /* 左右反転用 */ {13,14,15,16,9,10,11,12, 5, 6, 7, 8, 1, 2, 3, 4} /* 上下反転用 */ }; void main() { int i; font_set_monodata(1, 4*4, bmp_witch); for(i=0;i<16;i++) witch[1][i] |= CFM_FLIP_H; /* 左右反転設定 */ for(i=0;i<16;i++) witch[2][i] |= CFM_FLIP_V; /* 上下反転設定 */ screen_set_char(SCREEN2, 0, 0, 4 , 4 , witch[0] ); /* 通常 */ screen_set_char(SCREEN2, 5, 0, 4 , 4 , witch[1] ); /* 左右反転 */ screen_set_char(SCREEN2, 10, 0, 4 , 4 , witch[2] ); /* 上下反転 */ key_wait(); }