K氏のheboOSをまねてみる

86:Re: 割り込み処理
hideyosi 10/16 22:04
まず、キーボードからやってくる、「押されたキー信号」は、
0〜6までがキーを示す値。で、最後の7bit目が、「押したのか・離したのか」をあらわします。
今現在、私のコードでは、押して一回、離して一回と割り込みを処理してしまっていますので、一回キーを押すと二回「A」が表示されます。
「キーが離されたときだけ」という反応をすれば、OKなのではと考えました。

今現在はこういうコード。

---------------------------------------------------
IINT09:
;押されたキーは何かを調べる
;IN命令で、押されたキーの値を取得
MOV DX,0x60
IN AL,DX

;持ってきた値の7ビットだけを抽出
AND AL,0x7F ;二進数 01111111 でANDSする

;もしその値が1Eだったら、Aボタンが押されている
CMP AL,0x1E

;上のCPM命令によってキャリーフラブが変化している。
;同じならZFが1,CFが0になっている
;もしそうなら、文字表示ルーチンをコールする

JE MOJIPRINT

;そうでなかったら、割り込みから戻る
JMP INTEND
-----------------------------------------------------

これを、こうしてみたらどうだろ?

------------------------------------------------------
IINT09:
;押されたキーは何かを調べる
;IN命令で、押されたキーの値を取得
MOV DX,0x60
IN AL,DX

;持ってきた値を一時、AHに複製する
MOV AH,AL
;AHに複製した値の7ビット目だけを摘出
AND AH,0x80
;もし、この結果の値が00000000すなわち0x0なら、
;キーは「押された」となるはず。ここで条件分岐
CMP AH,0x0

;なにもせずに割り込みを終了する
JE INTEND

;違うなら、キーは「離されて」いる。
;持ってきた値の7ビットだけを抽出
AND AL,0x7F ;二進数 01111111 でANDSする

;もしその値が1Eだったら、Aボタンが押されている
CMP AL,0x1E

;上のCPM命令によってキャリーフラブが変化している。
;同じならZFが1,CFが0になっている
;もしそうなら、文字表示ルーチンをコールする

JE MOJIPRINT

;そうでなかったら、割り込みから戻る
JMP INTEND
---------------------------------------------------------

さて。これでうまくいくかな???



1-

BluesBB ©Sting_Band