Контролер i8042 має наступні порти:
· 8-розрядний вихідний порт для контролю системних функцій та зв’язку з клавіатурою;
· 8-розрядний вхідний порт для зчитування стану системних функцій;
· 2-розрядний TEST-порт для прийому стану ліній Clock і Data.
Таблиця 1 – Вихідний порт контролера i8042
Біт | Значення |
D0 | 1 – системне скидання |
D1 | 0 – адресація до 1 Мб (Gate A20) 1 – адресація вище 1 Мб (Gate A20) |
D3, D2 | 00 – не використовуються |
D4 | 1 – вихідний буфер повний |
D5 | 1 – вхідний буфер очищено |
D6 | Clock у клавіатуру |
D7 | Data у клавіатуру |
Запис у вихідний порт здійснюється послідовністю команд:
· запис команди D1h у порт 64h;
· запис значення в порт 60h.
Послідовність команд для читання з вихідного порту:
· запис команди D0h у порт 64h;
· читання буфера – порт 60h.
Перед передачею команд та даних у порти 61h та 60h необхідно звільнити буфер контролера i8042 – порт 60h.
Таблиця 2 – Вхідний порт контролера i8042
Біт | Значення |
D1, D0 | 00 – не використовуються |
D2 | 0 – співпроцесор встановлено 1 – співпроцесор не встановлено |
D3 | 0 – встановлено співпроцесор i80287 (4 МГц) 1 – встановлено співпроцесор i80287 (8 МГц) |
D4 | 0 – після ввімкнення живлення вибрана швидкість AUTO 1 – після ввімкнення живлення вибрана швидкість HIGH |
D5 | 0 – DIP СП ввімкнено контакт 5 (резерв) 1 – DIP СП вимкнено контакт 5 (резерв) |
D6 | 0 – застосовано монітор COMPAQ 1 – застосовано інший монітор |
D7 | 0 – замок замкнено 1 – замок відкрито |
|
|
сті:
Читання значень вхідного порту контролера відбувається в такій послідовно-
· запис команди C0h у порт 64h;
· читання вихідного буфера (порт 60h) контролера.
Зчитування значень вхідного порту TEST та посилання інформації в контро-
лер i8042 здійснюється так:
· запис команди E0h у порт 64h;
· читання вихідного буфера (порт 60h).
Таблиця 3 – Байт TEST контролера i8042
Біт | Значення |
D0 | Тест 0 – Clock з клавіатури |
D1 | Тест 1 – Data з клавіатури |
D7 – D2 | 000000 – не використовуються |
Контролер i8042 має системні порти з адресами 60h (регістр даних в/в) та 64h
(регістр команд/регістр стану).
Перед записом команди або даних у порт 60h або 64h регістр стану контроле-
ра повинен показати, що вхідний буфер вільний; перед читанням даних з порту
60h перевірка регістра стану повинна свідчити, що дані знаходяться у буфері.
Процесор системного блока ПЕОМ використовує команду IN для читання даних з вихідного буфера (порт 60h) контролера.Інформація в регістр даних в/в (порт 60h) з клавіатури буде передана по команді 20h – “Читання командного байта”. Для передачі даних у клавіатуру процесор i8042 використовує команду OUT у багатобайтній команді 60h – “Запис командного байта”. При передачі багатобайтної команди в клавіатуру перший командний байт записується в порт
|
|
64h, а другий – у порт 60h.
Команда IN, звернена процесором системного блока до порту 64h, викликає читання стану контролера i8042 та клавіатури.
Таблиця 4 – Порт 64h, регістр стану
Біт | Значення |
D0 | 0 – даних у буфері (порту 60h) немає 1 – дані в буфері (порт 60h) |
D1 | 0 – буфер вільний (60h або 64h) 1 – буфер повний (порт 60h або порт 64h) |
D2 | 0 – скидання за ввімкненням живлення (холодний старт) 1 – програмне скидання (гарячий старт) |
D3 | 0 – у вихідному буфері дані 1 – у вихідному буфері команда |
D4 | 0 – замок закрито 1 – замок відкрито |
D7 – D5 | 001 – немає передачі 011 – передача є, немає відповіді 101 – передача є, помилка парності |
За командою OUT (порт 64h) процесор передає команду в контролер i8042.
Запис у порт 64h свідчить про те, що наступний байт, записаний у порт 60h –
командний.
Таблиця 5 – Порт 64h, регістр команд
Біт | Значення |
D0 | 0 – переривання не виконувати 1 – переривання виконувати |
D1 | 0 – резерв |
D2 | Системний прапорець записується в поточний розряд регістра стану |
D3 | 0 – підпорядкування замку 1 – ігнорування замка |
D4 | 0 – дозвіл клавіатури 1 – заборона клавіатури |
D5 | 0 – використання 11-розрядного клавіатурного коду (i80286, i80386) 1 – використання кодів, сумісних з i8086 та i8088 |
D6 | 0 – перетворення клавіатурних кодів немає 1 – перетворення клавіатурних кодів у скан-коди, сумісні з i8086/88 |
D7 | 0 – резерв |
Таблиця 6 – Деякі командні коди контролера i8042
Код | Функція |
20h | Завантаження поточного командного байта в порт 60h |
60h | Завантаження нового командного байта (двобайтова операція): 1) запис 60h у порт 64h; 2) запис командного байта в порт 60h |
AAh | Ініціалізація: контролер ініціалізує вхідний та вихідний порти, відключає клавіатуру та очищує буфери; у вихідний буфер (порт 60h) поміщується код 55h |
ADh | Заборона клавіатури: встановлення розряду 4 командного байта (порт 64h) контролера |
AEh | Дозвіл клавіатури: скидання розряду 4 командного байта (порт 64h) контролера |
C0h | Читання вхідного порту: передача контролером стану вхідного порту у вихідний буфер (порт 60h). Команда використовується при вільному вхідному буфері (порт 60h) |
D0h | Читання вихідного порту: передача контролером поточного значення вихідного порту у вихідний буфер (порт 60h). Команда використовується при очищеному буфері (порт 60h) |
D1h | Запис вихідного порту: розміщення наступного байта, записаного в регістр даних (порт 60h), у вихідний порт контролера. Команду D1h слід використовувати илше для зміни розряду 1 |
E0h | Читання вхідних ліній Test 0 і Test 1: контролер розміщує поточний стан Test 0 і Test 1 у вихідному буфері (порт 60h) |