同時キー入力のチェック方法


 本書はZ-1/FX-890Pで同時キー入力判定を行う方法を紹介したものです。
なお、本書では前提条件として8086アセンブラに関する基本的な知識があるものとして説明を行っていますので、「アセンブラってなに?」という人はこれ以上読み進めないほうが賢明でしょう。

 アセンブラからキー入力を行う最も簡単な方法はBIOSを使う事ですが、BIOSのキー入力処理はキーバッファの取得を行っているため、複数キーの同時押しやその瞬間にキーが押されているのかどうかを知りたい、といった事柄には対応できません。
こういった事柄を可能にするためにはキーマトリックスの状態を直接チェックすることが必要となります。
 ここではアセンブラからキーマトリックスを扱う方法について解説します。

1.キーポート

 キーマトリックスはI/Oポートに接続されています。
アドレス 内容
0200H KO port (Key Out)
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
- - - DATA KOS KO10 KO9 KO8 KO7 KO6 KO5 KO4 KO3 KO2 KO1 KO0
0202H KI port (Key In)
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
KINT SW 0 0 KIS 0 KI9 KI8 KI7 KI6 KI5 KI4 KI3 KI2 KI1 KI0
0204H KEYCTL
b0 0のときキー割り込み禁止
b1 1→0でキー割り込みクリア

2.キーマトリックス

KO0 KO1 KO2 KO3 KO4 KO5 KO6 KO7 KO8 KO9 KO10 KOS
KI0 BRK
KI1 TAB W R Y I P MENU CAL DEGR SQR
KI2 Q E T U O S log ln sin X2
KI3 RESET S F H K ; MR M+ ( ENG
KI4 A D G J L : 7 8 ) CLS
KI5 CAPS X V N , 4 5 9 cos
KI6 Z C B M INS DEL 1 2 6 ^
KI7 SRCH OUT SPACE . 3 * ANS
KI8 IN CALC = 0 E + /
KI9 - BS tan
KIS SHIFT

3.操作方法

 キーマトリックスを読むときの手順は、

1.キー入力割り込みを禁止する。
2.キー読み取りをしたいKOのビットをセット(1)し、KO portにOUTする。
3.一定時間待つ
4.KI portをINする。押されているキーに対応するKIのビットが1になる。
5.KEYCTLを操作し、割り込みフラグを初期化する。

 例えば「G」をチェックしたいときは、

KO portに0004HをOUT
wait
KI port をINし、0010HでANDを取って0ならば「G」は押されていない

となります。
以下にサンプルプログラムを紹介します。
KOUT EQU 200H
KIN EQU 202H
KCTL EQU 204H

INKEY:
 PUSH SI
 PUSH DX
 PUSH CX
 PUSH BX
 CLI
 MOV DX,KOUT
 MOV AX,1FFFH
 OUT DX,AX
 XOR AX,AX
 OUT DX,AX
 MOV CX,8
 MOV SI,OFFSET KDATA
INLP1:
 MOV AX,[SI]
 ADD SI,2
 MOV BX,[SI]
 ADD SI,2
 CALL KSUB
 DEC CL
 JNZ INLP1
 MOV AX,7FFH
 OUT DX,AX
 CALL WAIT
 MOV DX,KCTL
 MOV AL,3
 OUT DX,AL
 DEC AL
 OUT DX,AL
 MOV AL,CH
 STI
 POP BX
 POP CX
 POP DX
 POP SI
WAIT:
 RET

KSUB:
 OUT DX,AX
 CALL WAIT
 MOV DX,KIN
 IN AX,DX
 MOV DX,KOUT
 TEST AX,BX
 JZ KSJP1
 STC
 KSJP1:
 RCR CH,1
 RET

KDATA:
 DW 100H,040H #2
 DW 080H,020H #4
 DW 200H,040H #6
 DW 100H,010H #8
 DW 010H,080H #SPACE
 DW 800H,800H #SHIFT
 DW 080H,200H #↵
 DW 001H,001H #BRK
AL = キー状態(0:OFF 1:ON)
b7 b6 b5 b4 b3 b2 b1 b0
BRK SHIFT SPACE 8 6 4 2

4.本書について

本書は「Z-1/FX-890P活用研究(工学社)」を参考として、一部ミスがあった所を修正し幾つかの補足事項を付け加えたものです。

 なお、本書の内容について工学社およびCASIOに問い合わせる事はおやめください。

NIFTY-Serve YHW02344
村中 昭雄(STEAR)