C
ゲーム制作

GBDKによるゲームボーイソフト制作-2回 文字を出してみる-

前回:GBDKによるゲームボーイソフト制作-1回 Hello World!-
次回:GBDKによるゲームボーイソフト制作-3回 キー入力-

記事の内容

gbdk\examples\gb内の「filltest.gb」を参考に色々と試してみたのでその記録。

ソースコード

実際に書いたのは以下のようなプログラム。

draw_char.c
#include <gb/drawing.h>

void main() {
    UBYTE i,x,y;

    for (i = 0; i < 256; ++i) {
        y = i / 16;
        x = i % 16;
        gotogxy(x, y);
        color(3, 1, SOLID);
        gprintf("%c", i);
    }
}

実行結果

result.png

解説のようなもの

1行目

今回使う機能は「gb/drawing.h」内で定義されているため、includeする。

4行目 UBYTE

「UBYTE」という型は、「gbdk\include\asm\types.h」で以下の通り定義されている。

/** Unsigned 8 bit.
 */
typedef UINT8           UBYTE;

つまり、8ビット(0~255)の符号なし整数ということである。
BYTEとしてるのは8bitが1Byteだからかな?

8行目 gotogxy

この関数は「gb/drawing.h」で以下のように定義されている。

/** Sets the current text position to (x,y).  Note that x and y have units
   of cells (8 pixels) */
void
    gotogxy(UINT8 x, UINT8 y);

ざっくり意訳

テキストが描画される位置を設定する。
引数x,yは8ピクセル単位での座標を意味する。

ゲームボーイの画面解像度は160x144なので、8ピクセルの塊が横に20(0~19),縦に18(0~17)入ることになる。

9行目 color

この関数もまた「gb/drawing.h」で以下のように定義されている。

/** Set the current foreground colour (for pixels), background colour, and
   draw mode */
void    color(UINT8 forecolor, UINT8 backcolor, UINT8 mode);

ざっくり意訳

前景及び背景の色と描画モードを設定する。

色の指定はUINT8(8ビット符号なし整数)で定義されているが、ゲームボーイの描画色は白黒の4階調であるため、実際に取り得る値の範囲は0~3である。
第三引数のmodeは以下の指定ができるが、筆者が試した限り変化がなかったので何か使い方があるのだろう。

    #define SOLID   0x00        /* Overwrites the existing pixels */
    #define OR  0x01        /* Performs a logical OR */
    #define XOR 0x02        /* Performs a logical XOR */
    #define AND 0x03        /* Performs a logical AND */

10行目 gprintf

今回のメイン。
この関数もまた「gb/drawing.h」で以下略。

/** Print the formatted string 'fmt' with arguments '...' */
INT8    
    gprintf(char *fmt,...) NONBANKED;

ざっくり意訳

フォーマット指定文字列fmtに従って以降の引数で渡された内容を描画する。

簡単に言うとprintfのゲームボーイ版みたいなものだと思う。たぶん。
今回、変数iを0~255までループさせているので、その数字に対応した文字が描画されている。

ということで今回はこれでおしまい。