В общем при обращении к массиву клавы(в DInput) после прочтения девайса все клавиши оказываются сдвинуты на 4 байта, то есть чтобы обратиться к DIK_A мне надо писать keystate[DIK_A + 4], не спрашивайте, как я это выяснил, но так работает, хотелось бы знать почему так может быть, вроде хидеры в порядке, вызовы тоже.
сначала так: invoke DirectInputCreate, hInst, DIRECTINPUT_VERSION, DIINVOKE CreateDevice, lpdi, ADDR GUID_SysKeyboard, ADDR lpdikey, 0 DIDEVINVOKE SetCooperativeLevel, lpdikey, hWnd, DISCL_NONEXCLUSIVE or DISCL_BACKGROUND DIDEVINVOKE SetDataFormat, lpdikey, ADDR c_dfDIKeyboard DIDEVINVOKE Acquire, lpdikey а потом в цикле DIDEVINVOKE GetDeviceState, lpdikey,256, ADDR keystate
_220 вроде бы все в норме. по-моему, такие ошибки возникают из-за опечаток - просмотри еще раз свой код (как вариант: в ESI у тебя лежит указатель на keystate, а потом указатель незаметно портится). зы. в Dxsdk81 для masm32 есть рабочий пример использования клавиатуры.