Шаги выполнения алгоритмов.

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 - выключение любого светодиода.