Estoy haciendo un programa de ensamblaje que mueve un píxel en la pantalla dependiendo de la tecla presionada.

Según aquí, la forma de modificar el retraso de repetición es mediante

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

Este es el código completo

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

Funciona bien, excepto por el retraso de repetición del teclado que hace que el píxel se mueva una vez, luego se detiene durante 250 ms y luego reinicia el movimiento continuo sin problemas. ¿Cómo puedo eliminar el retraso de repetición?

1
Andrea Oggioni 4 oct. 2019 a las 21:24

1 respuesta

La mejor respuesta

Este retraso (y también la tasa de repetición) se puede configurar en las opciones de BIOS. Si desea omitirlo, no debe utilizar las funciones del BIOS, sino acceder directamente al controlador de teclado.

En su código

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

Tratando de establecer el valor para el retardo de repetición, el valor 0 representa 250ms, el mínimo que se puede establecer en el BIOS / vía la interrupción del BIOS. Puede verificar esto en lista de interrupciones de Ralph Brown.

2
zx485 4 oct. 2019 a las 19:49