BIOSに「SNSMAT(0141H)」という機能があり、Aレジスタに取得したいキーマトリクスの行(0~10)をセットし、BIOS CALLします。すると、状態がAレジスタに渡されます。
【参考】3章 キーボード・インターフェイス - MSX Datapack wiki化計画(外部サイト)
#include <stdio.h>
#define TRUE 1
int snsmat( char line )
{
#asm
LD A, L ; line
CALL 0141h ; SNSMAT
LD L, A ; return
LD H, 0
#endasm
}
void main()
{
while( TRUE ){
for( int i = 0; i < 10; i++ ){
printf( "%X", snsmat( i ) );
}
printf( "\n" );
}
}
Z88DKのC言語では、関数の引数が1つだった場合、アセンブリ側ではHLレジスタで取得できます。また、C言語関数としての戻り値もHLレジスタの値が使われます。
#025 【MSX,Z88DK】C言語でBeep音
#019 【MSX,Z88DK】C言語で任意の座標に文字描画
#016 【MSX,Z88DK】C言語でゲームループとFPS制御