У клавы есть свой контроллер, свой буффер наполнения. 16 двухбайтовых посадочных мест. Своего рода змея гоняется за своим хвостом. Беда будет если догонит.)
Два двухбайтовых указателя на начало (голову змеи) и конец (хвост змеи). Хотя используются только младшие байты, этого хватает, поскольку змея всего 32 байтовая.
Младший байт буфера — сканкод. Старший байт буфера — символ.
Это ребята уже сами поймут. Главное, ты рассказал, что есть скан-коды, которые контроллер клавиатуры передаёт через порт ввода-вывода. Мы читаем скан-код, и если это клавиша "конец работы", то выходим из цикла. Если это цифровая клавиша или пробел, то обрабатываем это событие. Если ничего нет, то есть пользователь ничего не нажал, то опрашиваем порт опять.