Asm работа с клавиатурой под DOS

Для тех, кто хочет сделать мир лучше.
Ответить
Сообщение
Автор
Аватара пользователя
koshmel
VIP
VIP
Сообщения: 373
Зарегистрирован: 24.03.2007
Контактная информация:

#1 Сообщение 11.07.2010, 22:23

нужно написать две процедуры на асм
для чтения и записи (отправка команд типа $FF и других)
команды будут из 2-6 байт (нужна проверка на переполнение I/O буфера)
слышал все можно сделать через 60h порт
Изображение
kadet89 писал(а):Не врубился в этот алгоритм...но думаю моно попробовать через бинарник изменить саму команду...только вот в каком файле она?

Аватара пользователя
x_000
Полковник
Полковник
Сообщения: 4889
Зарегистрирован: 25.02.2008
Откуда: Deutsches Reich
Благодарил (а): 6 раз
Поблагодарили: 18 раз

#2 Сообщение 12.07.2010, 03:17

если нужна только проверка буфера, то это делается через порт 64h, оттуда надо просто прочесть один байт, младший бит в нем - флаг заполненности буфера

Аватара пользователя
koshmel
VIP
VIP
Сообщения: 373
Зарегистрирован: 24.03.2007
Контактная информация:

#3 Сообщение 12.07.2010, 04:28

типо так:

Код: Выделить всё

Procedure SendByte(X:byte); Assembler;
asm {Send Byte to KeyBoard}
  @WaitLoop:
  XOR    ax,ax
  in     al, 64h
  and    al, 01b
  jnz    @WaitLoop
  mov   al,[X]
  out   60h,al
end;

procedure ReadByte(var x:word); Assembler; {DOS only}
asm
  mov bx,word ptr x+2
  mov es,bx
  mov bx,word ptr x

  @WaitLoop:
  XOR    ax,ax
  in     al, 64h
  and    al, 10b
  jz     @WaitLoop
  in     al, 60h

  mov word ptr es:[bx],ax;
end;
al после 64h всегда 28
вовремя чтения через 60h у меня начинает трещать внутрений динамик (как при залипании клавиш)
Изображение
kadet89 писал(а):Не врубился в этот алгоритм...но думаю моно попробовать через бинарник изменить саму команду...только вот в каком файле она?

Ответить