을 사용할 때 필요한 많은 키보드 컨트롤러 대기 호출되며, A20을 가능하게하기위한 코드들 바와 같이 다음에는 A20 선에 <a href="http://wiki.osdev.org/A20_Line#Enabling" rel="nofollow">OSDev page</a>부터 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에서 쓰기/읽기는 버퍼 레지스터가 아닌 명령/상태 레지스터에 액세스합니다.
그런데 입/출력 버퍼에서 너무 많은 대기가 발생하는 이유는 무엇입니까? 상태 레지스터를 읽기 전에 출력 버퍼에 하나가 있어야하고 새로운 명령 바이트를 기록한 후 입력 버퍼에 하나가 있어야합니까?
이전 단락에서 언급 한 두 가지 대기 호출을 제외하고 다른 모든 대기 호출을 사용하지 않으려 고 시도했지만 정상적으로 작동했습니다. 그러나 나는 그들이 왜 거기에 있는지 궁금해. 다른 이유가 있습니까?
a20wait 함수는 입력 버퍼 상태 비트가 지워졌는지 테스트합니다. 이는 입력 된 값이 포트 0x60 또는 0x64에 기록되기 전에 필요합니다. 자세한 내용은 http://wiki.osdev.org/%228042%22_PS/2_Controller#Status_Register를 참조하십시오. –
또한 여기서는 운영 체제 개발에 대한 몇 가지 질문을 던졌습니다. http://forum.osdev.org/index.php에서 계정을 등록하는 것이 좋습니다. 실제로 읽은 모든 자습서는 해당 커뮤니티의 사람들이 작성하기 때문에. 당신이 아마 거기에 물어 보면 더 적은 시간에 더 상세한 대답을 얻을 수있을 것입니다. –