2

キーボードの現在のスキャン コード セットを取得したいと考えています。私が使用しているコードは、多かれ少なかれ次のようになります。

#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 ドライバーからこのコードを実行しました)

4

0 に答える 0