Есть ли способ установить задержку повторения клавиатуры на ноль в сборке? - PullRequest
1 голос
/ 04 октября 2019

Я делаю программу сборки, которая перемещает пиксель на экране в зависимости от нажатой клавиши.

Согласно здесь способ изменить задержку повторения использует

mov ah, 03h 
mov al, 05h ;set typematic rate/delay
mov bh, 00h ;repeat delay: 250ms <-- this has to be 0
mov bl, 00h ;typematic rate: 30
int 16h

Это весь код

cmp [keypress], 'a'
je left
cmp [keypress], 'A'
je left
cmp [keypress], 'd'
je right
cmp [keypress], 'D'
je right
jmp endMove
left:
    dec xpos
    jmp endMove
right:
    inc xpos
    jmp endMove
endMove:
call drawPixel
input:
mov keypress, 0
mov ah, 01h
int 16h
jnz animLoop
mov ah, 00h
int 16h
mov keypress, al
jmp animLoop

Работает нормально, за исключением задержки повторения клавиатуры, из-за которой пиксель движется один раз, затем останавливается на 250 мс, а затем возобновляет непрерывное движение без проблем. Как я могу удалить задержку повторения?

1 Ответ

2 голосов
/ 04 октября 2019

Эту задержку (а также частоту повторения) можно настроить в настройках BIOS. Если вы хотите обойти это, вы не должны использовать функции BIOS, а должны напрямую обращаться к контроллеру клавиатуры .

В вашем коде

mov bh, 00h ;repeat delay: 250ms <-- this has to be 0

, пытаясь установитьзначение для задержки повтора, значение 0 обозначает 250 мс, минимум, который может быть установлен в BIOS / через прерывание BIOS. Вы можете проверить это в списке прерываний Ральфа Брауна .

...