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?

questionAnswers(1)

yourAnswerToTheQuestion