OSを作れたらいいねぇPart2

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

うーーーん。どこがまずいのかな? ひとつづつ検証してみよう。


1-

BluesBB ©Sting_Band