テキスト(文字)の表示


テキスト表示の実態

どんな言語でも最初は「Hello」と画面に表示させることから始めます。
ワンダーウィッチのサンプルにも「hello」がありますが、これは実際には次のような 流れで文字を表示させています。

#include <sys/bios.h>

void main(void)
{
    text_set_screen(SCREEN2);             @テキスト表示スクリーンの指定
    text_screen_init();                Aスクリーンをテキスト用に設定
    text_put_string(5, 5, "Hello Wonder Swan !!");   B指定位置に文字表示
    key_wait();
}

@text_set_screen(SCREEN2)    スクリーン2を文字表示用にします。

Atext_screen_init()

スクリーンには横28、縦18のキャラクタ(文字)を表示できます。text_screen_init()が 実行されると、キャラクタフォント番号「8〜511」(28×18=504個)の『空白』 のキャラクタがスクリーンに敷き詰められます。
つまり画面一杯に文字を使用すると、512個定義できるキャラクタのうち504個をテキスト用 に取られ、残りの8個しか使用できなくなります。

Btext_put_string(5, 5, "Hello Wonder Swan !!");

キャラクタ座標の横5,縦5の位置から「Hello Wonder Swan!!」の文字を表示します。
これは指定位置に設定されているキャラクタを「H」「e」などの文字形データで再定義しているに すぎません。
つまり、文字を表示するということはスクリーンに敷き詰められたキャラクタへ、文字のデータ(キャラクタ) を再定義するということになります。

ワンダースワンに使われている文字は、8x8 ドットのフリー日本語フォント 「恵梨沙フォント」 です。
つまり1キャラクタと同じ大きさで1文字を表しています。



試しに次のようなプログラムを作成してみると、8番のキャラクタが設定されている スクリーン位置0,0の場所に が表示されます。

#include <sys/bios.h>

unsigned char bmp_m[] = {
    0x3C, 0x7E, 0x93, 0xDB, 0xFF, 0xFF, 0xFF, 0xDB 
};

void main(void)
{
    text_set_screen(SCREEN2);
    text_screen_init();
    text_put_string(5, 5, "Hello Wonder Swan !!");

    font_set_monodata(8, 1, bmp_m);

    key_wait();
}



数値(整数値)の表示

スクリーンに数値(整数値)を表示するには text_put_numeric 関数を使います。

text_put_numeric(X座標, Y座標, 表示桁数, フォーマット, 数値)

フォーマットは図のようなビットパターンの組み合わせで指定します。 実際にはtext.hの中で次のように定義されていますので、これを組み合わせて使用します。

#define NUM_HEXA        0x01
#define NUM_PADZERO     0x02
#define NUM_PADSPACE    0x00
#define NUM_ALIGN_LEFT  0x04
#define NUM_ALIGN_RIGHT 0x00
#define NUM_SIGNED      0x08
#define NUM_STORE       0x80
表示できるのは整数値のみです。
#include <sys/bios.h>

void main(void)
{
    int a=255;
    double b=3.141592;

    text_set_screen(SCREEN2);
    text_screen_init();
    text_put_numeric(5, 2, 5, 0, a);
    text_put_numeric(5, 3, 5, NUM_HEXA, a);
    text_put_numeric(5, 4, 5, NUM_HEXA | NUM_PADZERO, a);
    text_put_numeric(5, 6, 5, 0, b);

    key_wait();
}
範囲を指定してのテキスト表示
この例のように、スクリーンの指定した範囲をテキスト表示用に初期化するには

text_window_init  を使用します。

text_window_init(横開始位置,縦開始位置,横幅,縦幅,ベースフォント)

ベースフォントはスクリーンに敷き詰めるキャラクタフォント番号の最初の 数値を指定します。この例では、ブロックのキャラクタで4番までを使用 しているので、「5番」以降を指定しています。
text_put_string で指定する座標は、設定したウインドの左上が「0,0」 になります。

#include <sys/bios.h>

#include "block.h"

unsigned block[] = {1,2,3,4};
void main()
{
    int x,y;
    font_set_colordata(1, 2*2, bmp_block);

    for(y=0;y<18;y+=2)
        for(x=0;x<28;x+=2)
        screen_set_char(SCREEN2, x, y, 2 , 2 , block);    /* ブロックを敷き詰める */

    text_window_init(2, 12, 24, 5, 5);                    /* テキストウインド初期化 */
    text_put_string(1, 1,"西暦20XX年。");
    text_put_string(1, 2,"ワンダースワンの物語が今、始まる・・・");
    key_wait();
}