使用asm获取键盘(PS / 2)扫描代码集

时间:2015-01-16 18:07:23

标签: assembly keyboard wdm

我想获得我的键盘当前扫描代码集。 我使用的代码或多或少看起来像这样:

#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(Acknowledge)。我对任何建议都非常感激。

(我从windows驱动程序运行此代码)

0 个答案:

没有答案