|
13:Re: Shiftとか hideyosi 10/24 20:50 さらに、Shiftキー判定部分と、テーブルを追加。 -------------------------------------------------------;乗っ取ったキーボード割り込み部分 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 ;AHに複製した値の7ビット目だけを摘出 AND AH,0x80 ;もし、この結果の値が00000000すなわち0x80なら、 ;キーは「押された」となるはず。ここで条件分岐 CMP AH,0x80 ;なにもせずに割り込みを終了する JE INTEND ;持ってきた値の7ビットだけを抽出 AND AL,0x7F ;二進数 01111111 でANDする ;Shiftが押されているかどうか判定 MOV AH,[SSHIFT] CMP AH,0x0 JE SHIFTONPRINT CMP AH,0x01 JE SHIFTOFFPRINT SHIFTONPRINT: ; ALには0x1e(A)などのキースイッチの値が入る MOV BH,0 MOV BL,AL MOV AL,[BX+KEYTABLESHIFTON] ;この処理で、ALには、文字コードが入っている JMP MOJIPRINT ;実際に文字を表示する処理 SHIFTOFFPRINT: ; ALには0x1e(A)などのキースイッチの値が入る MOV BH,0 MOV BL,AL MOV AL,[BX+KEYTABLESHIFTOFF] ;この処理で、ALには、文字コードが入っている JMP MOJIPRINT ;実際に文字を表示する処理 ---------------------------------------------------------- テーブル ---------------------------------------------------------- ;文字コードとキースイッチコードの対応表。英字キーボード、ShiftOFF KEYTABLESHIFTOFF: ; 0 , 01 ,・・・・・ DB 0 , 0 , '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', 8, 9 ; 10, 11,・・・・・ DB 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '{', '}', 10, 0 ; 1E, 1F,・・・・・ DB 'a', 's','d', 'f', 'g', 'h', 'j', 'k', 'l', ':','"','~', 0, '|' ; 2C, 2D,・・・・・ DB 'z', 'x', 'c', 'v','b', 'n', 'm', '<', '>', '?', 0 ; 37 ,38,・・・・ DB '*' , 0,0x20,0,0,0,0,0,0,0,0,0,0,0,0,0,'7','8','9','-','4','5','6','+' ; 4F , 50,・・・・ DB '1' , '2' , '3','0','.' ; 54,55,・・・・ DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 73,74,・・・・ DB 0,0,0,0,0,0,0,0,0,0,'\' --------------------------------------------------------- よし! コンパイルエラーもないぞ! いっけえぇぇぇぇ!! ・・・・・・・だめじゃん・・・・orz うーーーん。どこがまずいのかな? ひとつづつ検証してみよう。 |