キーボードの現在のスキャン コード セットを取得したいと考えています。私が使用しているコードは、多かれ少なかれ次のようになります。
#define STATUSPORT 64h
#define DATAPORT 60h
#define PS2controllerOutputFull 0x20
#define PS2controllerInputFull 2h
void sendByte()
{
__asm
{
push eax
repeat :
in al, STATUSPORT
test al, PS2controllerInputFull
jne repeat
pop eax
out DATAPORT, al
clc
}
}
UCHAR getByte()
{
__asm
{
repeat:
in al, STATUSPORT
test al, PS2controllerOutputFull
jne repeat
in al, DATAPORT
clc
}
}
UCHAR getScanCodeSet()
{
__asm
{
mov al, 0xF0
call sendByte
mov al, 0x00
call sendByte
call getByte
cmp al, 0xFA
jne unknownError
call getByte; AL = Scan Code Set
jmp exit
unknownError:
mov al, 0xDD
exit:
}
}
現在のコントロール セット番号を取得する代わりに、キーボードから 0xFA を受け取ります (確認)。どんな提案にもとても感謝しています。
(私は Windows ドライバーからこのコードを実行しました)