Програмування порту клавіатури на асемблері

Принцип роботи контроллера клавіатури і його інтерфейс з BIOS

 

Контроллер клавіатури працює таким чином: при натисненні або відпуску будь-якої клавіші генерується байт (так званий скан-код), перші 7 бітів якого містять порядковий номер клавіші, а останній, сьомий біт, скинутий, якщо клавіша натискувала, і встановлений, якщо відпущена. Цей скан-код можна прочитати через порт 60h (насправді усередині контроллера клавіатури є якась черга скан-кодов, а порт 60h лише відображує верхній код, але про це можна і не знати). І ще. Як тільки клавіша натискується або відпускається, викликається 9-е переривання (IRQ 1).

Але не завжди натиснення або відпуск клавіші генерує один скан-код. Наприклад, натиснення клавіші Pause викликає генерацію відразу 5-и кодів. Натиснення білої стрілки вгору викликає скан-код 72, а чорної стрілки вгору - відразу 2 коди: 224 і 72. І для кожного з цих скан-кодов викликається 9-е переривання.

Таким чином, процедура обробки клавіатури BIOS, що "сидить" на 9-м перериванні, просто аналізує значення 60h-го порту і відповідним чином модифікує буфер введення. Всі процедури BIOS далі працюють не з поточному значенням порту, а з буфером введення, що дозволяє здійснювати введення з випередженням, тобто навіть тоді, коли система зайнята.

 

Програмні переривання і підпрограми обробки переривань

 

Операційна система MS-DOS надає програмістові, що працює на мові асемблера, великий набір підпрограм, що виконують різні корисні дії. Всі ці підпрограми оформлені як підпрограми обробки переривань, і для кожної підпрограми в керівництві по MS-DOS вказаний номер відповідного нею переривання. Розрізняють апаратні і програмні переривання. Програма обробки апаратного переривання викликається, якщо процесор отримує сигнал запиту переривання від одного з системних пристроїв. Ця підпрограма повинна містити, окрім власне команд, призначених для виконання деяких дій з обробки переривання, визначених програмістом, спеціальні команди, керівники контроллерами переривань. У зв'язку з цим, подпрограммы-обработчики апаратних переривань рідко безпосередньо використовуються програмістами. Підпрограма обробки програмного переривання викликається по команді INT n процесора (n - номер переривання в системній таблиці векторів переривань). Скорочено прийнято самі підпрограми обробки переривань називати "перериваннями", хоча це не правильно. У ПЕВМ IBM РС AT всі програмні переривання підрозділяються на переривання BIOS (підсистеми управління вводом/выводом), переривання ОС і переривання користувача. Підпрограми обробки переривань BIOS зазвичай знаходяться в ПЗП, вони поставляються розробниками апаратури для забезпечення єдиного інтерфейсу ОС з різними типами устаткування. Основу системи переривань ОС MS DOS складає переривання з номером 21h, зване перериванням MS DOS. Це переривання забезпечує API прикладних програм (Application Programm Interface - інтерфейс прикладних програм) в середі ОС MS DOS. Залежно від значення, що міститься при виклику переривання в регістрі AH, MS-DOS виконує при цьому один з декількох десятків підпрограм, які прийнято називати функціями DOS. Для кожного переривання і кожної функції DOS в керівництві описаний набір вхідних і вихідних параметрів, що передаються через регістри, а також перелік можливих помилок.

У даній роботі будуть описані переривання і функції DOS і BIOS, що відносяться до роботи з клавіатурою і екраном ПЕВМ IBM РС AT.



Програмування клавіатури

 

У клавіатурі IBM РС AT є мікропроцесор, який постійно сканує її в пошуку клавіш, що натискують. Процесор клавіатури пов'язаний з контроллером клавіатури. Від контроллера на клавіатуру поступають команди управління клавіатурою, а з клавіатури коди підтвердження і коди сканування.

За винятком клавіші "PAUSE" всі останні клавіші 101- клавішної клавіатури працюють на нажатие/отжатие.При натисненні генерується код натиснення, при утриманні клавіші він повторюється через певні інтервали часу, а при відпуску генерується код віджимання. Код натиснення і код віджимання разом називаються кодами сканування клавіатури (scan-коды). Код віджимання є двобайтовим: перший байт рівний F0h, а другий байт збігається з кодом натиснення.

Є три рівні програмування підсистеми клавіатури:

1) на фізичному рівні (програмування портів 60h і 64h контроллера клавіатури);

2) за допомогою BIOS (INT 09h, INT 16h);

3) за допомогою переривання DOS (INT 21h).

Для виконання введення даних з клавіатури програмістові в більшості випадків досить використовувати описані нижче функції DOS. У складніших випадках використовується переривання BIOS INT 16h, що дає деякі додаткові можливості. Максимум можливостей програміст може отримати, перехоплюючи апаратне переривання від клавіатури 09h і працюючи безпосередньо з портами ввода/вывода.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: