|
10:Shiftとか hideyosi 10/24 20:23 ATのキーボードは、通常は、組み合わせて使うキーは以下だけ。 ●Shift ●ALT ●Control これらのキーは、押せば押され、離せば離される。<なにいってんだろ・・・ 考え方としてはこういうことだなぁ。 ●あるエリアに、「今押されているか?」を記憶する場所を確保 ●押されればそこは1とかになり、離されると0とかになる。 ●各キーボードテーブルに、このあるエリアの判定も加える。 えーっと。ShiftやCtrlが押された場合は、ANDして・・・・ ん???? ・・・考えてみれば、これらって、全部で6個しかない・・・・ よし!じゃ! まず、キー状態格納用のエリアを作る --------------------------------- SSHIFT: DB 0 SALT: DB 0 SCTRL: DB 0 -------------------------------- で、判定部分をこんなふうに改造。 --------------------------------- IINT09: ;押されたキーは何かを調べる ;IN命令で、押されたキーの値を取得 MOV DX,0x60 IN AL,DX ;Shiftの判定。押されているか離されているかはもう ;定数で判定しちゃえ! ;離されている場合。 CMP AL,0x2A JE SHIFTON ;押されている場合。 CMP AL,0xAA JE SHIFTOFF ;同じく右側も。 ;離されている場合。 CMP AL,0x36 JE SHIFTON ;押されている場合。 CMP AL,0xB6 JE SHIFTOFF ;持ってきた値を一時、AHに複製する MOV AH,AL -------------------------------------------- さらに、ジャンプ部分を設置。 -------------------------------------------- SHIFTON: MOV BX,[SSHIFT] MOV [BX],0x01 JMP INTEND SHIFTOFF: MOV BX,[SSHIFT] MOV [BX],0x0 JMP INTEND ------------------------------------------ あとは、テーブル判定部分を設置すればOKのはず! |