OSを作れたらいいねぇPart2

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のはず!

1-

BluesBB ©Sting_Band