При включении шлюза A20 требуется так много вызовов контроллера клавиатуры

ОтСтраница OSDev в строке A20 код для включения A20 имеет вид:

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 ждет в буфере ввода иa20wait2 на выходе буфера.

Из того, что я понял, запись в / чтение из 0x64 доступа к регистру команд / состояний, а не к регистрам буфера.

Тогда почему на буферах ввода / вывода столько ожиданий? Разве не должно быть одного в выходном буфере перед чтением регистра состояния и одного во входном буфере после записи нового байта команды?

Я попытался отключить все остальные ожидающие вызовы, кроме двух, упомянутых в предыдущем абзаце, и все работало нормально. Но мне любопытно, почему они там. Есть ли другая причина?

Ответы на вопрос(1)

Ваш ответ на вопрос