2つ同時に押されているキーを簡単に判定する方法
(永江@九工大[msx:00106],[msx:00107])
> キーボードで、「○○を押しながら、××を押す」という判定を
> するには、どういうふうにしてやったら よいのでしょうか?
> (Mキーを押しながら、SPACEキーを押す、とか?)
まず、MSX のキーボードは表 1 のように配線されています。
この線を直接調べても良いのですが、今回は別の方法を取ります。
実はシステムもこの線を 1/60 秒ごとに調べて、メモリに保存しています。
そのアドレスが、表の左端に書かれています。
+------+------+------+------+------+------+------+------+
FBE5 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+------+------+------+------+------+------+------+------+
FBE6 | ; | [ | @ | ¥ | ^ | − | 9 | 8 |
+------+------+------+------+------+------+------+------+
FBE7 | B | A | _ | / | . | , | ] | : |
+------+------+------+------+------+------+------+------+
FBE8 | J | I | H | G | F | E | D | C |
+------+------+------+------+------+------+------+------+
FBE9 | R | Q | P | O | N | M | L | K |
+------+------+------+------+------+------+------+------+
FBEA | Z | Y | X | W | V | U | T | S |
+------+------+------+------+------+------+------+------+
FBEB | F3 | F2 | F1 | かな | CAPS |GRAPH | CTRL |SHIFT |
+------+------+------+------+------+------+------+------+
FBEC |RETURN|SELECT| BS | STOP | TAB |ESC| F5 | F4 |
+------+------+------+------+------+------+------+------+
FBED | → | ↓ | ↑ | ← |DEL|INS| HOME |SPACE |
+------+------+------+------+------+------+------+------+
[TEN KEY]
+------+------+------+------+------+------+------+------+
FBEE | 4 | 3 | 2 | 1 | 0 |OPTION|OPTION|OPTION|
+------+------+------+------+------+------+------+------+
FBEF | . | , | − | 9 | 8 | 7 | 6 | 5 |
+------+------+------+------+------+------+------+------+
表 1 キーマトリクス
(MSX2 テクニカルハンドブック P.284 より)
押されているキーは 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 を逆にしないように注意! 理由は、ド・モルガンの
法則です。(といって逃げる(^^;)