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