47737 (Низькорівневе програмування контроллера клавіатури), страница 3

2016-07-30СтудИзба

Описание файла

Документ из архива "Низькорівневе програмування контроллера клавіатури", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "47737"

Текст 3 страницы из документа "47737"



void irq_keyboard(void)

{

char scan,tmp;

/* отримуємо сканкод */

scan = inb(0x60);

/* проводимо його обробку */

...

/********************************/

/* ось ця частка мені не зрозуміла */

/********************************/

/* через порт 0x61 відключають клавіатуру */

tmp = inb(0x61);

outb(tmp|0x80,0x61);

/* потім назад включають */

outb(tmp,0x61);

/********************************/

/* скидання контроллера переривань */

outb(0x20,0x20);

}

Якщо встала необхідність прямої роботи з клавіатурою, застосовується наступний метод: на 9-е переривання встановлюється "латка", яка насамперед обробляє стан порту, а потім, за бажання, передає управління старому обробникові клавіатури BIOS. Якщо управління BIOS не передається, необхідно не забути команду виведення значениа 20h а порт 20h, щоб вирішити наступні переривання від клавіатури.

IDEAL

P386

MODEL MEDIUM

STACK 400

DATASEG

PressCounter DW ?

OldKbdIntOffset DW ?

OldKbdIntSegment DW ?

CharInputFlag DB 0

ASCIICode DB 0

label RusNorm byte

DB 0,0,'1','2','3','4','5','6'

DB '7','8','9','0','-','=',0,0

DB 'й','ц','у','к','е','н','г'

DB 'ш','щ','з','х','ъ',0,0

DB 'ф','ы','в','а','п','р','о'

DB 'л','д','ж','э','Ё',0,'\'

DB 'я','ч','с','м','и','т','ь'

DB 'б','ю','.',0,'*',0,' '

ENDS

CODESEG

PROC KeyboardDriver

mov AX, DGROUP

mov DS,AX

mov [PressCounter],0

call SetKeyboardInterrupt

@@NextChar:

cmp [CharInputFlag],0

je @@NextChar

mov [CharInputFlag],0

mov DL,[ASCIICode]

mov AH,2h

int 21h

inc [PressCounter]

cmp [PressCounter],80

jb @@NextChar

call RestoreOldKeyboardInterrupt

mov AH,4Ch

int 21h

ENDP KeyboardDriver

proc KeyboardInterrupt far

pusha

push DS

mov AX,DGROUP

mov DS,AX

in AL,60h

push AX

mov AL,20h

out 20h,AL

pop AX

sti

cmp AL,39h

ja @@End

xor BX,BX

mov BL,AL

add BX, offset RusNorm

mov AL,[BX]

cmp AL,32

jb @@END

mov [ASCIICode],AL

mov [CharInputFlag],1

@@End: pop DS

popa

iret

endp KeyboardInterrupt

PROC SetKeyboardInterrupt NEAR

pusha

push ES

mov AX,0

mov ES,AX

mov AX,[ES:9*4]

mov [OldKbdIntOffset],AX

mov ax,[ES:9*4+2]

mov [OldKbdIntSegment],AX

cli

mov AX,offset KeyboardInterrupt

mov [ES:9*4],AX

mov AX,CS

mov [ES:9*4+2],AX

sti

pop ES

popa

ret

ENDP SetKeyboardInterrupt

PROC RestoreOldKeyboardInterrupt NEAR

pusha

push ES

mov AX,0

mov ES,AX

cli

mov AX,[OldKbdIntOffset]

mov [ES:9*4],AX

mov AX,[OldKbdIntSegment]

mov [ES:9*4+2],AX

sti

pop ES

popa

ret

ENDP RestoreOldKeyboardInterrupt

ENDS

END

А ось приклад розробки програми на мові С:

void interrupt (*SvInt09)(void)=NULL;

int IsBIOSActive=1;

char KeyPressed[256];

char CurKey;

void ProcessKeyb(void)

{ static PrevKey=0;

char key,IsGray;

key=inportb(0x60);

if(PrevKey==224) IsGray=0x80; else IsGray=0;

if(key!=224) /* если не признак черной клавиши"... */

{ if(key&0x80) /* клавиша отпущена */

KeyPressed[(key&0x7F)|IsGray]=0;

else /* клавиша нажата */

KeyPressed[(key&0x7F)|IsGray]=1;

}

if(!(key&0x80)) CurKey=key|IsGray;

PrevKey=key;

}

void interrupt NewInt09(void)

{ ProcessKeyb();

if(IsBIOSActive) SvInt09(); /* не блокировать BIOS? */

else outportb(0x20,0x20); /* ... нужно блокировать */

}

void CloseKeyboard(void); /* предварительное определение */

void OpenKeyboard(int LockBIOS)

{ memset(KeyPressed,0,256); CurKey=0;

SvInt09=getvect(9);

setvect(9,NewInt09);

IsBIOSActive=!LockBIOS;

atexit(CloseKeyboard);

}

void CloseKeyboard(void)

{ if(!SvInt09) return; /* клавиатура не открыта */

setvect(9,SvInt09); SvInt09=NULL;

}

Безумовно, існують і інші можливості по програмуванню контроллера клавіатури (наприклад, включение/выключение її лампочок). Проте ці можливості використовуються вже дуже рідко.

На закінчення можна привести одну корисну інформацію про обробника клавіатури BIOS. Байт пам'яті з адресою 40h:17h містить інформацію про стан спеціальних клавіш клавіатури:

Бит 7 - INSert активний

Бит 6 - CapsLock активний

Бит 5 - NumLock активний

Бит 4 - ScrollLock активний

Бит 3 - Alt натиснутий

Бит 2 - Ctrl натиснутий

Бит 1 - LeftShift натиснутий

Бит 0 - RightShift натиснутий



Висновок

Навіщо може знадобитися низькорівневе програмування клавіатури? Саме, мабуть, головне, це те, що при написанні дуже багатьох програм (в основному, звичайно, ігор) необхідно уміти "уловлювати" одночасне натиснення декількох клавіш (наприклад, одночасне натиснення стрілки вгору і пропуску і т.д). Стандартні засоби BIOS дозволяють це робити, але тільки не з будь-якими клавішами, а з функціональними (такими, як Shift, Alt і др). Насправді, у недосвідченого програміста може скластися враження, що, наприклад, Shift - клавіша особлива, оскільки вона, нібито, змінює значення останніх, тоді як насправді вона з погляду контроллера клавіатури абсолютно нічим не відрізняється від всіх останніх клавіш. Відмінності здійснюються тільки на рівні BIOS.

Інша причина прямого програмування контроллера клавіатури - це небажання програміста вирішувати BIOS обробку клавіш, що натискують, наприклад, з метою блокування роботи комбінацій Ctrl+Break або Ctrl+Alt+Del. Відмова від використання буфера введення - теж вимушена необхідність, оскільки деякі версії BIOS при натисненні на клавішу видають дуже короткий звуковий сигнал, який, звичайно, буде порить власні звуки програми (наприклад фонову музику).



Список літератури

1. Вострікова З. П. Программірованіє на мові асемблера ЄС ЕОМ. М.: Наука, 1985.

2. Галісєєв Г. В. Ассемблер для Win 32. Самовчитель. - М.: «Діалектика», 2007. - З. 368. - ISBN 978-5-8459-1197-1

3. Зубків С. В. Ассемблер для DOS, Windows і UNIX.

4. Кіп Ірвіна. Мова асемблера для процесорів Intel = Assembly Language for Intel-Based Computers. - М.: «Вільямс», 2005. - З. 912. - ISBN 0-13-091013-9

5. Магда Ю. З. Асемблер. Розробка і оптимізація Windows-приложений. СПб.: БХВ-Петербург, 2003.

6. Нортон П., Соухе Д. Язик асемблера для IBM РС. М.: Комп'ютер, 1992.

7. Владислав Пірогов. Асемблер для Windows. - СПб.: БХВ-Петербург, 2007. - 896 з. - ISBN 978-5-9775-0084-5

8. Владислав Пірогов. Асемблер і дизасемблювання.. - СПб.: БХВ-Петербург, 2006. - 464 з. - ISBN 5-94157-677-3

9. Сингер М. Міні-ЕВМ PDP-11: Програмування на мові асемблера і організація машини. М.: Мир, 1984.

10. Ськенлон Л. Персональниє ЕОМ IBM РС і XT. Програмування на мові асемблера. М.: Радіо і зв'язок, 1989.

11. Юров Ст, Хорошенко З. Assembler: учбовий курс. - СПб.: «Пітер», 2000. - З. 672. - ISBN 5-314-00047-4

12. Юров Ст І. Assembler : підручник для вузів. / 2-е видавництво СПб.: «Пітер», 2004.

13. Юров Ст І. Assembler. Практикум. : підручник для вузів / 2-е видавництво СПб.: «Пітер», 2004.

14. Юров Ст І. Assembler. Спеціальний довідник. СПб.: «Пітер», 2000.

15. Річард Саймон. Microsoft Windows API Довідник системного програміста.

16. Фрунзе А. Ст Мікроконтролери? Це ж просто! Т. 1.

18

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5184
Авторов
на СтудИзбе
435
Средний доход
с одного платного файла
Обучение Подробнее