
このキャラクタ(8×8ドット)を縦反転表示します。
#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 ;
となります。
|
このキャラクタ(32×32ドット)を反転表示します。
#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();
}