|
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 --------------------------------------------------------- さて。これでうまくいくかな??? |