Пернетақтаны басқару

Автор работы: Пользователь скрыл имя, 20 Декабря 2011 в 14:11, курсовая работа

Описание

Жүйелік платада орналасқан А микросхемасының интерфейсына пернетақтаның әрбір пернесін басқанда скан-код шығарылады. Скан-код дегеніміз бір байтты сан, кіші 7 биті әрбір пернеге меншіктелген идентификациялық номер, АТ дан басқа барлық машиналарда үлкен биттің коды перненің басылғанын (бит=1,басу коды) немесе жіберілгенін көрсетеді (бит=0,жіерілді).

Содержание

Кіріспе...................................................................................
1 Негізгі бөлім..........................................................................
1.1 Пернетақтаны басқару...............................................................
1.2 Пернетақта буферін тазалау.........................................................
1.3 Буфердегі символдарды тексеру...................................................
1.4 Символ енгізілуін күту және оны экранға бейнелеу.................
1.5 Экранда перне басылуы мен жаңғырықты күту.........................
1.6 Символдарды күтусіз қабылдау....................................................
1.7 Символдар жолы ашу.................................................................
1.8 Пернетақтадан процедураның жазылуын енгізу.........................
1.9 Пернетақта үзілісін қайта бағдарламалау.................................
1.10 Скан-кодтың қосалқы кестесі...................................................
1.11 ASCII кодынын қосымша кестесі.............................................
Қорытынды ...........................................................................

Работа состоит из  1 файл

Жанерке.doc

— 529.50 Кб (Скачать документ)
 

Қалған  биттер қолданылмайды.

      Пернетақтада  үзіліс болғанда,буферден ешқандай символ оқылмасада, қосқыш пернелердің біреуі басылғанда-ақ биттар статусы жаңартылады. Осы 8 перненің ішінде кодты буферге орналастыратын INS бұл дұрыс ереже (INS статусын орнату буферде символға бос орын жоқ болса да ауысады). CTRL+ NUMLOCK тоқтату режимі іске қосылғанда 0040:0018 адресінен 3 биті 1 ге орналасады, бұл жағдайда бағдарлама тоқтатылады.

      Пернетақтадағы  үзіліс статустың биттерді басылған пернелерді интерпретациялаудың алдында  тексереді,сондықтан бағдарлама биттердің  біреуін аыстырғанда,оның нәтижесі сәйкес пернені физикалық шертудегідей болады. Енгізу сәйкес типте болу үшін NUMLOCK және CAPSLOCK пернелері жағдайлары қайта орнатылады. 

ОРТАША  ДЕҢГЕЙ  

2 функциясы  16Н үзілісі-статустық белгі бір  байтына жол ашады. Ол 0040:0017 адресіндегі  байт, байт AL-ге қайтарылады 

;_ _ _ _ _ қою пернесінің статусын тексеру. 

MOV AH,2 ; функция номері
INT 16H ; статус байтын  алу
TEST AH,10000000B ; 7 битті тексеру
JZ INSERT_OFF ;  егер 0 болса, INSERT қосулы
 

ТӨМЕНГІ  ДЕҢГЕЙ 

Бұл мысалда қою режимі орнатылады 

SUB AX,AX ; қосымша сегмент орнатамыз
MOV ES,AX ; жады басы
MOV AH,10000000D ; 7 битін орнатуға  дайындау
OR ES:(417H),AL ; статус байтын  өзгертеміз
 

1.8. Пернетақтадан процедураның жазылуын енгізу 

     Пернетақтада қолданылатын код  системасы жай интерпретатцияға берілмейді. Кодтар 1 немесе 2 байт ұзындықта болуы мүмкін. Пернелердің барлық комбинациясы әмбебап код бермейді, сондықтан оларды ажырату үшін қосымша күш қажет. ASCLL кодтары да, кеңейтілген  кодтар да жай біріктірулер мен қателікті тексере алмайды.

     Орташа деңгей.

     Бұл мысал алдыңғыдан төрт  жақты жағдайды Ctrl+H, Ctrl+M тану методымен ерекшеленеді. Бұл жерде пернені басқан кезде немесе Ctrl пернесімен комбинацияланған пернелерді басқан кезде көрсетілген код енгізіледі ма? деген сұрақ туғанда скан код тексеріледі. Бұл статус бетін тексергеннен дұрыс метод болып табылады, себебі скан код пернетақта буферінде сақталады, ал бит статусын орнату өзгертілуі мүмкін.

 

; _  _  _  _  _ басылған перненің кодын алу және оны тексеру 

NEXT MOV AH,0 ;BIOS пернетақтасынан енгізу функциясы
  INT 16H ; Енгізілген  кодты алу
  CMP AL,0 ; кеңейтілген  кодтқа тексеру
  JE EXTENDET_CODE ; иә, арнайы процедураға жіберу
  CMP AL,32 ; басқару символына тексеру
  JL CONTROL_CODE ; егер иә, онда арнайы процедураға жіберу
  CMP AL,65 ; егер символ теру машинкасына ендесе
  JL NEXT ; келесін аламыз
  CMP AL,123  
  JL NEXT  
 

; _  _  _  _  _ енді AL-дағы символды өңдейміз. 

STOSB   ;ES:DI адресіндегі символды есте сақтау
MOV AH,2 ;экранға шығатын символ функциясын шығу
MOV DL,AL ;шығарудан бұрын символды DL–ге орнату
INT 21H ;оны экранға шығарамыз
.    
JMP NEXT ;келесі символға көшеміз
 

; _  _  _  _  _ кодты басқаратын анализаторлар 

CONTROL_CODE: CMP AL,13 ; ASCII 13 коды ма?
  JNE TAB ; жоқ, келесі  тексеру
  CMP AH,28 ; әйтпесе <CR> скан-код тексеру
  JNE C_M ;жоқ,онда Ctrl+M
  CALL CARRIAGE_RET ;кареткаға қайтуды өңдеу
  JMP NEXT ; келесі символға  көшу
C_M: CALL CTRL_M ; Ctrl-M өңдеу
  JMP NEXT ; келесі символға  көшу
TAB: CMP AL,9 ; табуляцияға  тексеру
  CMP AL,10 ; басқаларын  тексеру
REJECT JMP NEXT ;келесі символға  көшу
 

; _  _  _  _  _ кеңейтілген код анализі (2 байт коды АН-та орналасады) 

EXTENDED_CODE: CMP AH,71 ; төменгі шекті  тексеру
  JL REJECT ; егер кіші  болса, онда келесі символға
  CMP AH,81 ; жоғары шекті  тексеру
  JL REJECT ; егер үлкен  болса, онда келесі символ
 

; _  _  _  _  _ курсорды басқаратын символ АН-та орналасқан, өңдеу 

  CMP AH,72 ; «курсор-үстіге»?
  JL C_U ; егер иә, онда процедураға көшу
  CMP AH,80 ; «курсор-төмен»?
  JL C_D ; егер иә, онда процедураға көшу
C_U CALL CURSOR_UP ;сәйкес процедураны шақыру
  JMP NEXT ; келесі символға  көшу
C_D CALL CURSOR_DOWN ;сәйкес процедураны шақыру
  JMP NEXT ; келесі символға  көшу
 

1.9. Пернетақта үзілісін қайта бағдарламалау 

Микропроцессор  пернетақтасы скан коды 8255 микросхемасының А портына орналастырылғанда 9 үзілісі шақырылады. Бұл үзілістің атқаратын қызметі қайта қосқыш пернесін  жағдайына жүгіне отырып скан кодты символға айналдыру және оны пернетақта буферіне орналастыру. Егер скан код қайта қосқыш пернесіне сәйкес келсе пернетақта буферіне сәйкес келеді. Бірақ бұл жағдайға <Ins> пернесіне қатысты емес, мұның орнына статус  байтын өзгертеді, ол байттар BIOS мәліметтер обылысында орналасқан. DOS және BIOS  «пернетақтадан енгізу» үзілісі болып табылады. Шынында оларға перненің басылуы сезілмейді. Анығырақ айтсақ олар енгізген перненің интерпритациясын оқиды. Оны 9 үзіліс қамтамасыз етеді. PCJR 62 пернесінен 82 пернелік протоколға және басқа да IBM PC-ларымен пайдаланылатын енгізілгендерді өңдеу үшін арнайы процедураларды қолданады. Бұл процедура нәтижесі әдеттегідей жұмысын атқаратын 9 үзіліске жіберіледі. Пернетақта үзілісінен 3 негізгі қадамды атап айтуға болады

  1. Скан кодты оқып және оны сигналды нақтылайтын пернеге жіберу.
  2. Скан кодты код номеріне ауыстыру немесе қайтасозғыш перне статусы регисторының орнатқышына ауыстыру.
  3. Перне кодын пернетақта буферіне орналастыру. Үзілісті шақыру сәтінде скан код А портында болады. Сондықтан бұл кодты алғашында оқып алып,и кейіннен стекте сақтау қажет. Пернетақта микропроцессорына растау сигналын тез жіберу үшін В порты қолданылады. Ол үшін жай ғана 7 битін орнату керек. Одан соң оны бірден 0-ге өзгерту керек. В портының 6-ншы биті пернетақта сағатының сигналын басқарып тұратынын байқаймыз. Ол әрдайым 1-іншіден орнығуы қажет, кері жағдайда пернетақта өшіп қалады. Ол микросхемада 8255 переферилі интерфейсі болмаса да бұл порттар адрестері АТ-ға да қолдануға болады.

 Бірінші  скан код  басылған басу  коды  басшылығына анализданады. АТ-дан басқа барлық машиналарда  босату коды 7 скан кодының 1-ге орналастыруы арқылы иницялизоцияланады. АТ үшін 7 бит әрқашан 0-ге тең, босату коды 2 байттан тұрады:  алдымен оған , кейін скан код.

          Статустарында байтқа сәйкес  өзгерістер енгізілетін қайта  қосқыш пернелерінен басқа, босату  кодтары істен шығарылады. Басқа жағынан, басу кодтары барлығы өңделеді. Осы кезде тағы да қайта-қосу пернелерінің байт статусы өзгеруі мүмкін. Сондықтан символдық кодтарды тексеріп отыру қажет, мысалы; 30 скан-коды А әріпінің төмнегі немесе жоғарғы регисторының қайсысына сәйкес келетінін анықтау.

           Енгізілген символ идентиорикоияланғаннан  кейін, пернетақтадан еЖалпы жағдайда  скан-код нгізу процедурасы өзіне  сәйкес ASCII коды мен кеңейтілегн кодын табу керек.Жалпы жағдайда скан-код XLAT инструкциясымен анализданатын мәліметтер таблициясының элементтерімен слыстырылады. XLAT AL-ға 0 ден 255-ке дейін сандарды қабылдайды, ол AL-ға қайтарғанда DS:BX-ті көрсететін 256 байтты таблициядан 1 байттық мән жібереді. Таблица мәліметтер сегментінде болуы мүмкін. Егер AL-да 30 скан- коды болса, онда оған кестеден 30 санды байты орналастырылады. Таблицадағы бұл байт 97-ге тең орналастырылуы және ASCII-де коды «а» сәйкес болуы керек. Ал А әріпін алу үшін басқа кесте қажет, егер жылжу статусы орныққан болса, оларға қатынас орнатылады. Немесе үлкен әріптер осы кестенің басқа бөлігінде де сақталуы мүмкін.

      Аяғында код номерлері пернетақта буферіне орналастырылады. Процедура алдыиен  буферде келесі символға орын бар  екенін тексереді. 0040:001А жады ұяшығында буфер басына нұсқағыш бар, ал 0040-001С буфер соңын көрсетеді. Бұл нұсқағыштар BIOS мәлімметтер облысында орналасады, ол 40Н сегментінен басталады да, 30-60 диапазон аралығында болады. Жаңа символ буфер ұяшығына үлкен адрестермен қойылады, ал жоғарғы шекараға жеткен кезде, келесі символ буфердің төменгі шегіне орналасады. 
 
 

ТӨМЕНГІ ДЕҢГЕЙ 

; _  _  _  _  _ мәліметер сегментінде 

TABLE DB 16 DUP (0) ;алғашқы 16 битті өткіземіз
  DB ‘Qwertyuiop’, 0.0.0.0. ;пернетақтаның жоғарғы қатары
  DB ‘asdfghjkl’,0.0.0.0.0 ;пернетақтаның ортаңғы қаттары
  DB ‘zxcvbnm’ ; пернетақтаның төменгі қаттары
  DB 16 DUP (0) ;жоғарғы регистрға дейінгі босату
  DB ‘QWERTYUIOP’,0.0.0.0 ;сол символдар жоғарыда
  DB ‘ASDFGHJKL’,0.0.0.0.0 ;регистрда
  DB ‘ZXCVBNM’ ;

Информация о работе Пернетақтаны басқару