1. Готовность клавиатуры. В цикле опрос первого бита 64h порта. Если
0 ,- клавиатура готова к приему команды. Port[$64] and $02=0.
2. Наличие ошибки. После определения готовности выполняется
проверка: Port[$64] and $Е0 ¹ 0 - ошибка.
3. Чтение буфера клавиатуры. В цикле определяется неравенство головы
и хвоста буфера: mem[$40:$ 1С] ¹ mem[$40:$lA]. Если неравенство
выполнилось, читаем ASCII-код из буфера памяти по адресу
mem[$40:mem[$40:$lA]] и скан-код по адресу mem[$40:mem[$40:$lA]+l] и сравнить с эталоном из массива.
4. Чтение скан-кода через 60h порт:
· задержка ~ 2000 мс;
· первое чтение 60h порта;
· в цикле выполняется второе чтение 60h порта до тех пор, пока их
значения не совпадут;
· вывод скан-кода как второго считанного байта.
5. Чтение с помощью 16h прерывания. Имеет 2 подфункции: 0 и 10h.
Запуск 0-й подфункции: в регистр АН загружается "0", вызывается 16h
прерывание. Выходные параметры: AL- ASCII код; АН - скан код.
6. Проверка команд 8042:
· в порт 64h загружается команда (например, FFh или ABh);
· задержка порядка 10000 мс;
· проверка готовности и ошибок;
· проверка правильности выполнения команды - вывод результата;
· сброс команды (в 64h порт записывается AЕh).
7. Проверка команд 8048:
· готовность;
· в 60h порт записывается команда(ЕЕh);
· задержка » 2000мс;
· ошибка;
· чтение 60h порта (при команде EEh ответ должен быть EEh);
· сброс.
8. Светодиоды:
· в 60h порт посылается команда EDh;
· задержка;
· в 60h порт посылается одна из 3 команд включения светодиодов
(1 - Scroll, 2 - Num, 4 - Caps);
· в 60h порт посылается команда EDh;
· задержка;
· в 60h порт засылается 0 - выключение любого светодиода.