São necessárias tantas chamadas de espera do controlador do teclado ao ativar o portão A20
DePágina OSDev na linha A20, o código para ativar o A20 é fornecido como:
enable_A20:
cli
call a20wait
mov al,0xAD
out 0x64,al
call a20wait
mov al,0xD0
out 0x64,al
call a20wait2
in al,0x60
push eax
call a20wait
mov al,0xD1
out 0x64,al
call a20wait
pop eax
or al,2
out 0x60,al
call a20wait
mov al,0xAE
out 0x64,al
call a20wait
sti
ret
a20wait:
in al,0x64
test al,2
jnz a20wait
ret
a20wait2:
in al,0x64
test al,1
jz a20wait2
ret
a20wait
aguarda no buffer de entrada ea20wait2
no buffer de saída.
Pelo que entendi, escrevendo para / lendo de 0x64 acesse o registro de comando / status e não os registros de buffer.
Então, por que existem tantas esperas nos buffers de entrada / saída? Não deveria haver um no buffer de saída antes de ler o registro de status e outro no buffer de entrada após escrever o novo byte de comando?
Tentei desativar todas as outras chamadas de espera, exceto as duas que mencionei no parágrafo anterior, e funcionou bem. Mas estou curioso para saber por que eles estão lá. Existe algum outro motivo?