2つ同時に押されているキーを簡単に判定する方法


(永江@九工大[msx:00106],[msx:00107])

ここをクリックすると 完全なテキストが得られます。ファイルに落す時に利用してください。
> キーボードで、「○○を押しながら、××を押す」という判定を
> するには、どういうふうにしてやったら よいのでしょうか?
> (Mキーを押しながら、SPACEキーを押す、とか?)

 まず、MSX のキーボードは表 1 のように配線されています。 この線を直接調べても良いのですが、今回は別の方法を取ります。

 実はシステムもこの線を 1/60 秒ごとに調べて、メモリに保存しています。 そのアドレスが、表の左端に書かれています。



 押されているキーは 0 、押されていないキーは 1 として、 2 進数表現で入っています。 つまり、スペースキー(だけ)を押すと、 FBED の内容が&B11111110 になります。 DEL とスペースを同時に押すと、&B11110110 ですね。

 これを使うと、「 M とスペースを同時に押したか調べる」サンプルプログ ラムは、次のようになります。

10 CLS
20 LOCATE 0,0
30 IF (PEEK(&HFBE9) AND &B00000100) OR (PEEK(&HFBED) AND &B00000001) THEN
 PRINT 0; ELSE PRINT 1;
40 GOTO 20

 M キーとスペースキーを同時に押した時だけ 1 が表示され、それ以外では 0 になるはずです。(本当は 2 進数は 16 進数になおした方がいいのだけれ ど…)

 PRINT 0 と PRINT 1 を逆にしないように注意! 理由は、ド・モルガンの 法則です。(といって逃げる(^^;)


MSXに関する資料集へ
サイバラのホームページへ
(旧)サイバラのホームページへ (現在移行作業中のためコンテンツが散在します)

E-mail address :「saibara」アットマーク「big.or.jp」