#019

【MSX,Z88DK】C言語で任意の座標に文字描画【MSX,Z88DK】C言語で任意の座標に文字描画戻る 設定


概要

 MSXで文字を描画するには、いくつかの方法があります。ここでは文字描画のBIOS呼び出しではなく、VDP直接アクセスでもなく、BIOS経由でVRAM書き込みをして描画したいと思います。

 MSXは画面モードが複数あり、それによって当然ながら処理も異なってくるのですが、今回は起動直後のモードである「GRAPHIC 1(SCREEN 1)」で行なってみます。

【参考】4章 V9938の画面モード - MSX Datapack wiki化計画(外部サイト)

ソース

void main()
{
#asm
    LD      A, 41h      ; 'A'
    LD      HL, 1825h   ; x=5; y=1; 1800h + y * 0x20 + x = 1825h
    CALL    004Dh       ; WRTVRM
#endasm
}

解説

 #asmから#endasmで囲った部分はC言語ではなくアセンブリ言語として解釈されます。つまり、今回のソースは全てアセンブリ言語です。

 「CALL 004Dh」は、BIOSの「WRTVRM」という機能を呼び出します。これはVRAMに1バイト書き込む処理になります。Aレジスタに文字コード、HLレジスタにアドレスを指定します。

 文字コードは普通のASCIIコードですが、8bit目も有効でMSXの場合、カタカナの他にひらがなも存在します。

 アドレスは1800hから始まり、32桁x24行ぶんのコードが順番に並んでいます。そのため、計算式は以下のようになります。

 0x1800 + y * 0x20 + x

 例えば、x=5;y=1;なら

 0x1800 + 1 * 20x + 5 = 0x1825

となります。


関連記事

#022 【MSX,Z88DK】C言語でキースキャン

#016 【MSX,Z88DK】C言語でゲームループとFPS制御

#012 【MSX,Z88DK】C言語でHelloWorld


最終更新日時:2022/05/03
戻る戻る back