При включении шлюза 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 доступа к регистру команд / состояний, а не к регистрам буфера.
Тогда почему на буферах ввода / вывода столько ожиданий? Разве не должно быть одного в выходном буфере перед чтением регистра состояния и одного во входном буфере после записи нового байта команды?
Я попытался отключить все остальные ожидающие вызовы, кроме двух, упомянутых в предыдущем абзаце, и все работало нормально. Но мне любопытно, почему они там. Есть ли другая причина?