Lucrarea 10. Echipamente pentru introducerea datelor

Similar documents
Metrici LPR interfatare cu Barix Barionet 50 -

Titlul lucrării propuse pentru participarea la concursul pe tema securității informatice

2. Setări configurare acces la o cameră web conectată într-un router ZTE H218N sau H298N

Versionare - GIT ALIN ZAMFIROIU


Textul si imaginile din acest document sunt licentiate. Codul sursa din acest document este licentiat. Attribution-NonCommercial-NoDerivs CC BY-NC-ND

Reflexia şi refracţia luminii. Aplicaţii. Valerica Baban

9. Memoria. Procesorul are o memorie cu o arhitectură pe două niveluri pentru memoria de program și de date.

Semnale şi sisteme. Facultatea de Electronică şi Telecomunicaţii Departamentul de Comunicaţii (TC)

Ghid identificare versiune AWP, instalare AWP şi verificare importare certificat în Store-ul de Windows

Structura și Organizarea Calculatoarelor. Titular: BĂRBULESCU Lucian-Florentin

MS POWER POINT. s.l.dr.ing.ciprian-bogdan Chirila

Mecanismul de decontare a cererilor de plata

Procesarea Imaginilor

Update firmware aparat foto

ARBORI AVL. (denumiti dupa Adelson-Velskii si Landis, 1962)

Subiecte Clasa a VI-a

Lucrarea 5. Portul paralel standard

2. PORTUL PARALEL ÎMBUNĂTĂŢIT

Documentaţie Tehnică

CURS 9 SEMNALE LA INTERFAŢA UC CU EXTERIORUL CONTINUARE. Şef lucr. dr. ing. Dan FLOROIAN

Itemi Sisteme de Operare

Calculatoare Numerice II Interfaţarea unui dispozitiv de teleghidare radio cu portul paralel (MGSH Machine Guidance SHell) -proiect-

Lucrarea nr. 7. Configurarea reţelelor în Linux

X-Fit S Manual de utilizare

Aspecte controversate în Procedura Insolvenţei şi posibile soluţii

Olimpiad«Estonia, 2003

2. Setări configurare acces la o cameră web conectată într-un echipament HG8121H cu funcție activă de router

Mods euro truck simulator 2 harta romaniei by elyxir. Mods euro truck simulator 2 harta romaniei by elyxir.zip

Nume şi Apelativ prenume Adresa Număr telefon Tip cont Dobânda Monetar iniţial final

Specificaţiile mecanice ale interfeţei RS 232 C

Modalitǎţi de clasificare a datelor cantitative

D în această ordine a.î. AB 4 cm, AC 10 cm, BD 15cm

CERERI SELECT PE O TABELA

Arhitectura calculatoarelor Lucrarea de laborator Nr. 6 1 PORTUL PARALEL

La fereastra de autentificare trebuie executati urmatorii pasi: 1. Introduceti urmatoarele date: Utilizator: - <numarul dvs de carnet> (ex: "9",

9. INTERFAŢA SCSI Scopul lucrării Consideraţii teoretice Prezentarea interfeţei SCSI

Propuneri pentru teme de licență

Programare în limbaj de asamblare 16. Formatul instrucţiunilor (codificare, moduri de adresare).

MODELUL UNUI COMUTATOR STATIC DE SURSE DE ENERGIE ELECTRICĂ FĂRĂ ÎNTRERUPEREA ALIMENTĂRII SARCINII

Pornire rapidă. NETGEAR Trek N300 Router de călătorie şi extensor rază de acţiune. Model PR2000 NETGEAR LAN. Power. WiFi USB USB. Reset Internet/LAN

Mai bine. Pentru c putem.

The First TST for the JBMO Satu Mare, April 6, 2018

Achiziţia de date în sistemele SCADA

Posibilitati de realizare a transferurilor de date

Auditul financiar la IMM-uri: de la limitare la oportunitate

7. INTERFAȚA ATA Prezentare generală a interfeței ATA. Sisteme de intrare/ieșire și echipamente periferice

SISTEMUL DE INTRARE - IEŞIRE

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

Lucrarea Nr.1. Sisteme de operare. Generalitati

Curs 4 Tehnici şi sisteme de semnalizare utilizate în reţele telefonice clasice. Definiţii. Caracteristici.

Nu găseşti pe nimeni care să te ajute să transporţi comenzile voluminoase?

Ghid de utilizare a Calculatorului valorii U

Arbori. Figura 1. struct ANOD { int val; ANOD* st; ANOD* dr; }; #include <stdio.h> #include <conio.h> struct ANOD { int val; ANOD* st; ANOD* dr; }

REVISTA NAŢIONALĂ DE INFORMATICĂ APLICATĂ INFO-PRACTIC

manivelă blocare a oglinzii ajustare înclinare

Dispozitive Electronice şi Electronică Analogică Suport curs 02 Metode de analiză a circuitelor electrice. Divizoare rezistive.

GHID RAPID PENTRU. Instalarea Nokia Connectivity Cable Drivers

RC-5 Elitech Înregistrator Temperatură (Data Logger) USB Instrucţiuni de operare

CHAMPIONS LEAGUE 2017 SPONSOR:

ISBN-13:

Candlesticks. 14 Martie Lector : Alexandru Preda, CFTe

Ce pot face pe hi5? Organizare si facilitati. Pagina de Home

3.2 Arhitectura setului de instrucţiuni ISA. Copyright Paul GASNER

Constructii sintetizabile in verilog

INTEROGĂRI ÎN SQL SERVER

Reţele Neuronale Artificiale în MATLAB

INFORMAȚII DESPRE PRODUS. FLEXIMARK Stainless steel FCC. Informații Included in FLEXIMARK sample bag (article no. M )

GHID DE TERMENI MEDIA

CERERI SELECT PE MAI MULTE TABELE

Ierarhia memoriilor Tipuri de memorii Memorii semiconductoare Memoria cu unități multiple. Memoria cache Memoria virtuală

Principalele blocuri interne ale microprocesorului 8085 sunt prezentate în Figura 1: Comandă întreruperi și I/O seriale. Bistabile condiții (5 biți)

Sistem Home Theatre. Ghid de pornire HT-XT1

Laborator 1. Programare declarativă. Programare logică. Prolog. SWI-Prolog

6. Bucle. 6.1 Instrucţiunea while

Ghid pentru configurarea şi utilizarea aplicaţiei clicksign Demo

1. Creaţi un nou proiect de tip Windows Forms Application, cu numele MdiExample.

Tema 1 - Transferuri de date DMA intr-o arhitectura de tip Cell

COMUNICAȚII INFORMATIZARE

2.3 PROTOCOLUL DE MESAJE DE CONTROL PENTRU INTERNET (ICMP)

Laborator 07. Procesorul MIPS versiune pe 16 biți, cu un ciclu de ceas pe instrucțiune

Proceduri stocate. Crearea procedurilor stocate. Varianta 1 În Management Studio se dă clic pe New Query ca în imaginea de mai jos: Fig.

AMPLIFICATOR PROGRAMABIL AVANT 3 PENTRU RECEPTIE DVB-T SI RADIO FM / DAB

Curs 1 17 Februarie Adrian Iftene

Lucrarea de laborator nr. 4

9. CURSOARE. Obiective. În acest Capitol, vom învăţa despre: Manipularea cursoarelor. Folosirea Cursor FOR Loops şi Nesting Cursors.

:= 950; BEGIN DELETE FROM

COBRA SISTEM DE OPERARE PE DISC FLEXIBIL

SPEED CONTROL OF DC MOTOR USING FOUR-QUADRANT CHOPPER AND BIPOLAR CONTROL STRATEGY

INTERPRETOARE DE COMENZI

CAIETUL DE SARCINI Organizare evenimente. VS/2014/0442 Euro network supporting innovation for green jobs GREENET

Evoluția pieței de capital din România. 09 iunie 2018

Actualizarea firmware-ului pentru aparatul foto digital SLR

Sisteme de numeraţie Reprezentarea informaţiei numerice în calculatoare Terminologia folosită în legătură cu erorile de calcul Reprezentarea

Printesa fluture. Мобильный портал WAP версия: wap.altmaster.ru

Universitatea George Bariţiu, Braşov

NEC. Ghid de rezervări

4. Asignarea adreselor IP

În continuare vom prezenta unele dintre problemele de calcul ale numerelor Fibonacci.

O abordare Data Mining pentru detectarea accesului neautorizat la baza de date.

Transcription:

Lucrarea 10 Echipamente pentru introducerea datelor I. TASTATURA În ciuda tuturor dispozitivelor moderne de introducere a datelor, cum ar fi mouse-ul, scaner-ul şi sistemele de comandă prin voce, tastatura joacă încă un rol major în introducerea datelor şi a comenzilor într-un calculator. Cît de importantă este tastatura se poate constata, de exemplu, din faptul că un calculator nu va încarca sistemul de operare dacă nu va recunoaşte tastatura. Acest lucru este bineînţeles acceptabil: cum va putea rula un calculator programe, dacă el nu va putea primi comenzi şi nici date. Dacă utilizaţi o tastatură cu o asignare a limbii americană, britanică, sau oricare alta, câteva taste de control, shift sau altele pot fi denumite diferit. Mai mult, în literatura de specialitate vom întâlni nume diferite pentru aceleaşi taste, un exemplu fiind tasta ENTER sau CR. De aceea în tabelul 1.1 sunt prezentate câteva denumiri diferite pentru aceleaşi taste. De acum încolo vom utiliza numai denumirile prezentate în prima coloană a acestui tabel. Tasta Denumirea Denumirea alternativa tasta ENTER CR Ctrl tasta de control Alt tasta alternativă Shift tasta shift Caps Lock tasta caps-lock cursor sus cursor jos cursor stânga cursor dreapta Ins insert Del delete Home cursor home clear home End end Page Up pagina anterioară Page Down pagina următoare SysReq system request Tabelul 1.1 Denumiri alternative ale tastelor I.1.1. Structura şi funcţionarea tastaturilor Tastatura şi interfaţa aferentă, în special cea pentru AT-uri şi în special cele folosite în mare masură astăzi, tastaturile MF II (tastaturi multifuncţionale) sunt dispozitive destul de complexe. Fiecare tastatură are un chip propriu, chiar şi modelele mai vechi pentru PC/XT conţin un circuit 8048. Chip-ul de tastatură face selecţia unei taste prin aşa-numitele matrici de scanare (scan-matrix), formate prin încrucişarea liniilor de adresa X şi Y. La fiecare comutare a unei taste, intersecţia acestor linii conduce la localizarea ei. Microprogramul implementat în chip-ul tastaturii este destul de inteligent pentru a detecta fenomenul ce se produce atunci când comutatorul unei taste este întâi închis, când tasta este apasată, apoi comutatorul se redeschide şi se închide din nou. Chip-ul tastaturii trebuie să fie capabil să distingă acest fenomen de o dublă apăsare a unei taste de către utilizator.

În figura 1.1 este prezentată schema de principiu a unei tastaturi însoţită de interfaţa de rigoare pentru PC: Figura 1.1 Structura şi interfaţa tastaturii Chip-ul de tastatură verifică starea matricii de scanare şi determină stările închis sau deschis a comutatoarelor. Pentru realizarea acestui lucru, activează succesiv şi individual liniile X şi se detectează de la care terminal Y recepţionează un semnal. Prin intermediul coordonatelor X şi Y, o apăsare şi eliberare a unei taste este identificată precis. Circuitul de comandă al tastaturii determină dacă o tastă - şi eventual care anume - a fost apasată sau eliberată, şi va scrie codul corespondent ei în buffer-ul intern al tastaturii. După aceea tastatura transmite codul respectiv printr-un cablu serial conectat la interfaţa tastaturii din PC. Figura 1.2 indică structura unui pachet de biţi transmis de tastatură, precum şi asignarea pinilor mufei pentru tastatură. Figura 1.2 Structura informaţiei transmisă de tastatură Linia de ceas transferă datele semnalului de ceas folosit pentru schimbul de informaţie cu interfaţa tastaturii de pe placa de bază. Astfel, transferul este realizat în mod sincron, spre deosebire de cel efectuat de UART 8250. Activarea semnalului de reset al tastaturii conduce, prin intermediul interfeţei, la iniţializarea sa. Prin linia de date sunt transferate informaţii între tastatura propriu-zisă şi interfaţa sa din PC.

La calculatoarele PC/XT interfaţa de tastatură este în esenţă formată dintr-o interfaţă serială simplă ce acceptă numai un transfer serial al datelor de la tastatură. Nu este posibil transfer de date către tastatură. De aceea circuitul 8048 din tastatura de la PC/XT nu este în măsură să accepte date de la interfaţa de tastatură din PC. Astfel, tastatura de la PC/XT nu poate fi programată. La recepţia unui cod de la tastatură, interfaţa generează o întrerupere hardware prin IRQ1 corespunzătoare INT 09h şi furnizează date la portul B al circuitului 8255 PPI. La AT, în locul interfeţei seriale de tastatură, a fost instalat un controler. La vechile AT-uri se găseste chip-ul Intel 8042, iar în cele mai noi, chip-urile Intel 8741 sau Intel 8742 (sau altele compatibile). Astfel interfaţa tastaturii a devenit inteligentă şi este aptă să facă mai mult decât un simplu transfer serial al unui pachet de date sau generarea unei întreruperi. Controlerul de tastatură poate fi programat, de exemplu, să dezactiveze tastatura. Mai mult, este posibil un transfer de date bidirecţional între tastatură şi controlerul său. De aceea microcodul din chip-ul tastaturii este pregătit pentru a recepţiona direct comenzi de control, de exemplu setarea ratei de repetiţie a tastaturii. I.1.2. Programarea tastaturii prin porturile I/O. Următorul paragraf se concentrează în principal pe tastaturile de la AT şi MF II. De asemenea, la unele modele PS/2 se poate accesa mouse-ul prin controlerul de tastatură. În figura 1.3 se prezintă schema controlerului de tastatură de la AT, MF II sau PS/2 cu mouse. Figura 1.3 Controlerul de tastatură AT, MF II sau PS/2 Registre şi porturi Pentru programarea directă la tastaturile de la AT şi MF II sunt disponibile două adrese de porturi: 60h şi 64h. Utilizând aceste adrese de porturi se poate accesa buffer-ul de intrare, cel de ieşire şi registrele de control din controlerul de tastatură. În tabelul 1.2 se prezintă adresele corespunzatoare registrelor. Următoarele descrieri se referă numai la tastaturile AT şi MF II.

Port Registru Read(R) / Write(W) 60h buffer de ieşire R 60h buffer de intrare W 64h registru de control W 64h registru de stare R Tabelul 1.2 Regiştrii de control ai tastaturii. Utilizând registrul de stare puteţi determina starea curenta a controlerului de tastatură. Structura read-only a registrului de stare este prezentată în figura 1.4. Registrul de stare poate fi citit printr-o simplă instrucţiune IN referitoare la adresa de port 64h. Figura 1.4 Registrul de stare (64h) Bitul PARE indică dacă eroarea de paritate a avut loc în timpul desfăşurării transferului ultimului SDU de la tastatură sau de la dispozitivul auxiliar (începând cu PS/2). Dacă bitul TIM este setat atunci, dacă tastatura sau mouse-ul nu răspund unei cereri în cadrul unei perioade de timp se va înregistra o eroare de time-out. În amândoua cazurile, va cere byte-ul de date utilizând comanda Resend a controlerului de tastatură. Bitul AUXB se scrie dacă un byte de date de la mouse este disponibil în buffer-ul de ieşire. Când procesorul citeşte byte-ul din buffer-ul de ieşire, AUXB sau OUTB, respectiv, este anulat automat. Înainte de a citi buffer-ul de ieşire utilizând o instrucţiune IN va trebui întotdeauna să se marcheze (în acord cu OUTB sau AUXB) dacă controlerul a transferat bine un octet în buffer-ul de ieşire. Aceasta se poate face câteodată, de exemplu când se realizează un test propriu al tastaturii şi se aşteaptă pentru byte-ul rezultat. Tastatura nu poate să transfere un alt caracter prin portul de intrare la controlerul de tastatură înainte ca CPU să fi citit ultimul caracter depus în bufferul de ieşire. Invers, bitul INPB indică dacă un caracter se mai află în buffer-ul de intrare al controlerului de tastatură, sau dacă CPU poate permite intrarea altuia. Bitul C/D ne indică

dacă ultimul byte scris a fost un byte de comandă ce a fost transferat de către CPU prin portul de adresă 64h, sau un byte de date ce a fost scris de CPU prin portul de adresă 60h. În sfârşit, biţii KEYL şi SYSF indică dacă propriul test a putut fi trecut cu succes sau nu. Exemplu: citirea registrului de stare. IN AL, 64h ; instrucţiunea IN accesează portul de adresă 64h ; şi transferă conţinutul registrului de stare în AL Figura 1.5 Registrul de control Se poate accesa registrul de control (un registru write-only prezentat în figura 1.5) printr-o instrucţiune OUT cu referire la adresa de port 64h. Controlerul tastaturii interpretează fiecare octet trimis pe această cale ca o comandă. Comenzile pentru tastatură sunt scrise în buffer-ul de intrare cu o instrucţiune OUT, ce conţine codul comenzii respective, prin portul 60h. Cod Comandă Descriere a7h dezactivare dispozitiv auxiliary dezactivează dipozitivul auxiliar a8h activare dispozitiv auxiliar activează dispozitivul auxiliar a9h verificare interfaţă dispozitiv verifică interfaţă cu dispozitivul auxiliar auxiliar şi păstrează codul de verificăre în bufferul de ieşire (00h=fara eroare, 01h=octetul mai puţin semnificativ al tactului, 02h=octetul mai semnificativ al tactului, 03h=octetul mai puţin semnificativ al liniei de date, 04h=octetul mai semnificativ al liniei de date, ffh=nu există dispozitiv auxiliar) aah autotest controlerul de tastatură execută un autotest şi scrie octetul 55h în bufferul de ieşire dacă nici o eroare nu a fost detectată abh verificăre interfaţă tastatură controlerul de tastatură verifică interfaţa tastaturii şi scrie rezultatul în bufferul de ieşire(00h=fără eroare, 01h=octetul mai puţin semnificativ al tactului, 02h=octetul mai semnificativ al tactului, 03h=octetul mai puţin semnificativ al liniei de date, 04h=octetul mai semnificativ al liniei de date, ffh=eroare generală) adh dezactivare tastatură dezactivează tastatura aeh activare tastatură activează tastatura c0h citire port de intrare citeste portul de intrare şi transferă datele în portul de ieşire c1h citire port intrare (low) citeşte în mod repetat biţii 3-0 ai portului de intrare şi transferă datele în biţii 7-4 ai registrului de stare până când bitul INPB este setat.

c2h citire port intrare(high) citeşte în mod repetat biţii 7-4 ai portului de intrare şi transferă date în biţii 7-4 ai registrului de stare până când bitul INPB este setat. d0h citire port ieşire citeşte portul de ieşire şi transferă datele în bufferul de ieşire d1h scriere port ieşire scrie octetul de date următor în portul de ieşire d2h scriere în bufferul de scrie octetul de date următor în bufferul de ieşire al tastaturii ieşire şi resetează bitul AUXB din registrul de stare d3h scriere în bufferul de scrie octetul de date următor în bufferul de ieşire al dispozitivului ieşire şi setează bitul AUXB din registrul de stare auxiliar d4h scriere în dispozitivul scrie octetul de date următor în dispozitivul auxiliar auxiliar e0h citeşte portul de intrare controlerul de tastatură îşi citeşte portul de intrare şi scrie de test bitul T0 în bitul 0 şi bitul T1 în bitul 1 al bufferului de ieşire f0h-ffh trimite impulsuri la portul trimite cei mai puţini semnificativi biţi, adică de ieşire biţii 3-0 ai portului de ieşire Tabelul 1.3 Comenzile valide pentru controlerul de tastatură. Exemplu: dezactivarea tastaturii. start: IN AL, 64h TEST AL, 02h JNZ start OUT 64h, 0ADh ;citeşte registrul de stare ;verifică dacă buffer-ul de intrare este plin ;aşteaptă cât timp un caracter este în bufer ;dezactivează tastatura Utilizând buffer-ul de intrare sau cel de ieşire se pot trasfera date de la controlerul tastaturii, comenzi valide, datele de la tastatură şi, de asemenea, se pot recepţiona date de controlerul de tastatură sau chiar de la tastatură. Se poate accesa buffer-ul de intrare cu o instrucţiune OUT la adresa de port 60h, dacă bitul INPB al registrului de stare este 0. Prin buffer-ul de intrare octeţii de date sunt eventual transferaţi la controlerul de tastatură, aceştia aparţinând unei comenzi de control generată în avans prin portul de adresă 64h. Figura 1.6 Buffer-ul de intrare-ieşire (60h) Exemplu: scrierea octetului 01h în portul de ieşire. wait: OUT 64h, 0D1h IN AL, 64h TEST AL, 02h ; trimite codul pentru comanda "write output ; port" prin registrul de control al controlerului de tastatură ; citeşte registrul de stare ; verifică dacă buffer-ul de intrare este plin

JNZ wait ; aşteaptă cât timp buffer-ul de intrare e plin OUT 60h, 01h ; trimite byte-ul 01h la controler Pe aceeaşi cale sunt plasate comenzile de control către tastatură prin scrierea codului comenzii destinate tastaturii în buffer-ul de intrare al controlerului de tastatură. Atunci când controlerul transferă o comandă (reprezentând un singur octet) la tastatură, aceasta o intepretează şi apoi o execută. O listă a tuturor comenzilor de tastatură şi modul cum sunt interpretate se găseşte în paragraful următor. Controlerul de tastatură scrie toate datele, la cererea CPU, în urma comenzii de control, în buffer-ul de ieşire. Dacă se apasă o tastă atunci tastatura trimite codul de scanare corespunzător în forma SDU la controlerul de tastatură, care, după ce-l primeşte, îl scrie în buffer-ul de ieşire. În ambele cazuri controlerul de tastatură generează (prin IRQ1) o întrerupere hardware corespunzătoare INT 09h dacă a recepţionat un caracter de la tastatură şi-l scrie în buffer-ul de ieşire. Atunci rutina de tratare a acestei întreruperi hardware poate aduce caracterul prin intermediul unei instructiuni IN (prin portul 60h), determină codul ASCII şi le pune pe amândouă în buffer-ul tastaturii din spaţiul de date al BIOS-ului, procesul returnând codurile pentru ACK, precum şi alte coduri. Detalii despre tranferul codurilor de scanare sunt discutate în continuare. Porturile de intrare şi ieşire ale controlerului de tastatură stabilesc nu numai o conexiune cu tastatură sau (în cazul PS/2) cu mouse-ul, ci controlul altor circuite în PC sau informaţii despre starea ieşirii altor periferice. A nu se confunda porturile de intrare-ieşire cu bufferele de intrare-ieşire. În fig. 1.7 se prezintă structura portului de intrare, iar în fig. 1.8 pe cea a portului de ieşire. Figura 1.7 Portul de intrare Putem citi portul de intrare prin plasarea în controlerul de tastatură a comenzii read input port, prin portul de adresă 64h. Controlerul de tastatură transferă conţinutul portului de intrare în buffer-ul de intrare, din care putem citi octetul înscris pritr-o instrucţiune IN referind adresa 60h. Cel mai semnificativ bit, KBLK, indică dacă tastatura este sau nu conectată la calculator. La primele AT-uri utilizatorul era nevoit să seteze nişte switch-uri pentru a informa sistemul despre tipul adaptorului grafic instalat (color sau monocrom). Bitul C/M indică corespunzător poziţia comutatorului. Utilizind cei doi biţi AUXB şi KBD putem citi pachetul de date serial al mouse-ului (numai la PS/2) şi al tastaturii.

Exemplu: citirea portului de intrare. wait: OUT 64h, C0h IN AL, 64h TEST AL, 01h JZ wait IN AL, 60h ; trimite comanda "read input port" la ; controlerul de tastatură ; citeşte registrul de stare ; verifică dacă octetul e în buffer-ul de ieşire ; aşteaptă până când este gata ; citeste byte-ul din portul de intrare al ; buffer-ului de ieşire al controlerului de ; tastatură în AL Figura 1.8 Portul de ieşire Portul de ieşire al controlerului de tastatură nu numai controlează tastatura prin biţii KBDO şi KCLK (la PS/2 şi mouse-ul prin biţii AXDO şi ACLK), ci poate localiza suplimentar o linie de adresă A20 de la 80286 şi, pe deasupra, prin bitul GA20 să gestioneze adresele de depăşire segment la 8086/88. Dacă se doreşte accesarea a peste 64kbytes de memorie, trebuie setat bitul GA20. Fişierul HIMEM.SYS se execută automat când se accesează această zonă de memorie. Aşa cum se ştie la 80286 nu esistă opţiunea de comutare a procesorului la modul real de funcţionare printr-o simplă anulare a indicatorului PM. Aceasta este posibil la 80286 numai la resetarea procesorului, resetare care trebuie să fie realizată hardware. În acest scop bitul SYSR este implementat în portul de ieşire al controlerului de tastatură. Dacă se setează SYSR la valoarea 1 atunci se realizează o resetare a procesorului. Dar rutina de start a BIOSului de la AT recunoaşte (în acord cu setarea byte-ului shut-down din CMOS) dacă procesul de boot-are este în desfăşurare sau dacă programul a generat a resetare a procesorului prin SYSR, pentru comutarea lui (la 80286) în modul real. În ultimul caz rutina de start din BIOS returnează imediat controlul înapoi la programul apelant, de exemplu HIMEM.SYS sau RAMDRIVE.SYS. Biţii OUTB şi AUXB indică dacă buffer-ul de ieşire al tastaturii sau al mouse-ului (numai la PS/2) este plin. Exemplu: resetarea procesorului. OUT 64h, D0h ; trimite comanda "read output port" la controlerul de tastatură wait: IN AL, 64h ; citeşte registrul de stare TEST AL, 01h ; verifică dacă octetul e în buffer-ul de ieşire

JZ wait ; aşteaptă până când este gata IN AL, 60h ; citeşte byte-ul din portul de intrare al ; buffer-ului de ieşire al controlerului de tastatură în AL OR AL, 01h ; setează bitul SYSR OUT 64h, D1h ; trimite comanda "write output port" la ; controlerul de tastatură OUT 60h, AL ; resetează procesorul Recepţionarea caracterelor de la tastatură Dacă nu se generează o comandă de tastatură pentru care aceasta returnează niste biţi de date, se vor recepţiona numai codurile de contact sau întrerupere în acord cu apăsarea sau eliberarea unei taste. Tastaturile au un buffer de memorie mic, care uzual are în jur de 20 bytes. Dacă buffer-ul intern al tastaturii este depăşit pentru că CPU nu poate citi datele din buffer-ul controlerului de tastatură (de exemplu dacă IRQ1 din 8259 este dezactivat), atunci tastatura plasează valoarea 00h sau FFh în buffer-ul ce indică condiţia de depăşire (OVF). Tabelul 1.4 prezintă codurile returnate de tastatură. Codul Denumirea 00h eroare de depăşire sau FFh eroare tastă 41ABh ID-ul tastaturii MF II AAh codul complet BAT EEh ecou după ecoul comenzii FAh ACK FCh eroare de BAT FEh cerere de retransmitere 1h-58h codurile tastelor Tabelul 1.4 Codurile returnate de tastatură. Dacă buffer-ul de ieşire al controlerului de tastatură este plin (bitul OUTB din registrul de stare nu este setat), atunci tastatura transferă un scan-cod (sau un cod returnabil) în buffer-ul intern, deoarece un pachet de biţi seriali se transferă în controlerul de tastatură. Controlerul plasează, în ordine, caracterul în buffer-ul său de ieşire, setează bitul OUTB din registrul de stare şi generează o întrerupere hardware prin IRQ1 (adică INT 09h). La o tastatură PC/XT handler-ul va trebui întâi să seteze bitul SW1 al portului B pentru ca portul A să conţină într-adevar codul de scanare de la tastatură şi nu datele din configuraţia switchurilor DIP. Cum este în cazul altor tastaturi scan-codul poate fi extras printr-o simplă instrucţiune IN referitoare la portul de adresă 60h. Astfel caracterul a fost citit din buffer-ul de ieşire, iar tastatura poate plasa următorul cod de scanare din buffer-ul său intern. Următorul exemplu ilustrează principiul transferului de caractere între controlerul de tastatură şi CPU. Prin dezactivarea lui IRQ1, bitul 1 din IMR al PIC 8259A este mascat. Dacă se rulează următorul program se va putea vedea clar importanţa codurilor de apăsare şi eliberare a unei taste, atunci când se foloseşte o tastatură MF II.

Exemplu: detectează şi afişează pe display scan-codul până când este apasată tasta ESC. main() { int status, scan_code; outp(0x21, 0x02); /* lock IRQ1 */ for(;;) { for(;;) { status = inp(0x64); if ((status & 0x01) == 0x01) break; scan_code = inp(0x60); printf("\t%d", scan_code); if (code == 0x01) break; outp(0x21, 0x00); /* eliberează IRQ1 */ exit(0); I.1.3. Comenzi pentru tastatură Tasturile de AT şi MF II implementează câteva comenzi care se transmit prin bufferul de intrare al controlerului de tastatură. Tabelul 1.5 prezintă sumar toate comenzile aferente pentru tastaturile AT şi MF II. Codul Comanda Descriere EDh turn on/off LEDs aprinde/stinge LED-urile tastaturii EEh echo returnează octetul EEh F0h set/identify scan codes setează unul din cele trei coduri şi identifică codul scanat curent F2h identify keyboard identifică tastatura F3h set repetition rate/delay setează rata de repetiţie şi delay pentru tastatură F4h enable activează tastatura F5h standard/disable setează valorile standard şi dezactivează tastatura F6h standard/enable setează valorile standard şi activează tastatura FEh resend tastatura transferă ultimul caracter transmis încă o dată la controlerul de tastatură FFh reset executa un reset intern al tastaturii şi apoi BAT Tabelul 1.5 Comenzi de tastatură (AT, PS/2). În continuare se prezintă pe scurt cele mai importante comenzi. În general, tastaturile returnează un semnal ACK ce corespunde valorii FAh după fiecare comandă, exceptând echo şi resend. Fiecare caracter transmis de la tastatură la controler generează o întrerupere prin IRQ1. În mod normal driver-le de tastatură prelucrează numai coduri între 0 şi 127. Astfel semnalul ACK şi toate celelalte mesaje returnate sunt şterse de driver-ul de tastatură. Numai

dacă se interzice generarea întreruperii INT 09h, de exemplu, prin mascarea lui IRQ1 în IMR din PIC 8259A, se pot detecta mesajele returnate. - Comanda Turn on/off LEDs (EDh): După transmiterea comenzii, tastatura răspunde cu un semnal ACK către controler, anulează citirea scan matricii şi aşteaptă octetul indicator de la controler, care trebuie de altfel transmis prin buffer-ul de intrare. Figura 1.9 prezintă structura octetului indicator. Figura 1.9 Octetul indicator Exemplu: Aprinderea LED-ului NumLock şi stingerea celorlalte OUT 60h, EDh ; trimite comanda "turn on/off LEDs" wait: IN AL, 64h ; citeşte registrul de stare TEST AL, 02h ; verifică dacă buffer-ul de intrare este plin JNZ wait ; aşteaptă cât timp buffer-ul de intrare e plin OUT 60h, 02h ; aprinde LED-ul NumLock - Comanda Echo (EEh): Această comandă verifică calea de transfer şi logica de comandă a tastaturii. După ce tastatura a recepţionat comanda, ea returnează un byte de răspuns EEh corespunzător ecoului întors la controlerul de tastatură. - Comanda Set/Identify Scan Codes (F0h): Această comandă selectează unul din cele trei seturi de coduri de scanare alternative a tastaturii MF II; 01h, 02h şi 03h sunt cele valide. În setup-ul standard este setat codul de scanare 02h. După trimiterea comenzii tastatura răspunde cu un semnal ACK şi aşteaptă transferul byte-ului ales. Valorile 01h, 02h şi 03h selectează seturile 1, 2 sau 3; o valoare 00h informează tastatura să returneze, în afara de ACK, alt octet la controlerul de tastatură care specifică codul de scanare activ pe setare. - Comanda Identify Keyboard (F2h): Această comandă indentifică tastatura conectată. O tastatură PC/XT fără controler nu răspunde în nici un fel ceea ce conduce la apariţia unei erori de time-out. O tastatură de AT returnează numai un semnal ACK, dar o tastatură MF II returnează un ACK urmat de doi octeţi ABh şi 41h care sunt byte-ul "low" şi respectiv "high" ai cuvântului identificatorului (ID) tastaturii MF II 41ABh. Exemplu: identificarea tastaturii. int keyb_ident(void) { /* functia returnează idendificatorii: */ /* 0=PC/XT, 1=AT, 2=MF II, 3=eroare */ int satus, code, ret_code;

outp(0x21, 0x02); /* lock IRQ1 */ outp(0x60, 0xF2); /* output command */ timeout_wait(); /* aşteaptă ACK */ status = inp(0x64); /* citeşte registrul de stare */ if ((status & 0x01)!= 0x01) { else { ret_code = 0; /* nu primeşte ACK tastatura PC/XT*/ code = inp(0x60); /* citeşte un caracter */ if (code!= 0xFA) { /* eroare */ ret_code = 4; else { timeout_wait(); /* aşteaptă primul byte ID */ status = inp(0x64); /* citeşte registrul de stare */ if ((status & 0x01)!= 0x01) { ret_code = 1; /* nu primeşte byte-ul ID tastatură AT */ else { code = inp(0x60); /* citeşte primul byte ID*/ if (code!= 0xAB) { /* eroare */ ret_code = 5; else { timeout_wait(); /* aşteaptă al doilea byte ID */ status = inp(0x64); /* citeşte registrul de stare */ if ((status & 0x01)!= 0x01) {/* nu primeşte al doilea byte ID eroare */ ret_code = 6; else { code = inp(0x60); /* citeşte al doilea ID */ if (code!= 0x41) { /* eroare */ ret_code = 7; else { ret_code = 2; outp(0x21, 0x00); /* eliberează IRQ1 */ return(ret_code); /* returnează identificatorul tastaturii */ - Comanda Set repetition rate/delay (F3h): Cu această comandă se poate seta rata de repetiţie şi de asemenea întârzierea tastaturilor AT şi MF II. După transmiterea comenzii,

tastatura returnează un semnal ACK şi aşteaptă octetul de date, care poate fi transmis prin buffer-ul de intrare la tastatură. Figura 1.10 Rata de repetiţie şi întârziere. Exemplu: setează rata de 30 caractere/s şi 150 ms delay int max_rate(void) { /* funcţia setează rata maxima a tastaturii */ /* returnează codul: 0 = bine, -1 = eroare */ int satus, ret_code; outp(0x21, 0x02); /* lock IRQ1 */ outp(0x60, 0xF3); /* output command */ timeout_wait(); /* aşteaptă ACK */ status = inp(0x64); /* citeşte registrul de stare */ if ((status & 0x01)!= 0x01) { ret_code = -1; /* nu primeşte ACK eroare */ else { outp(0x60, 0x00); /* output: octetul de date */ ret_code = 0; /* bine! */ outp(0x21, 0x00); /* eliberează IRQ1 */ return(ret_code); /* returnează codul */ - Comanda Resend (FEh): Dacă apare o eroare în timpul procesului de transfer de date între tastatură şi controlerul de tastatură, cu aceasta comandă se solicită transmiterea încă o dată a ultimului caracter. - Comanda Reset (FFh): Această comandă efectuează un test intern al tastaturii. După recepţionarea byte-ului de comandă, tastatura întâi transmite la ieşire semnalul ACK. Controlerul de tastatură trebuie să răspundă prin ridicarea liniilor de date şi ceas către tastatură la un nivel high pentru cel puţin 500µs. După aceea tastatura îndeplineşte cererea testului BAT (basic assurance test). La terminarea BAT-ului, se transferă un cod AAh (test passed) sau FCh (keyboard error) la controler. Se pot seta liniile de date şi de ceas la un nivel high, utilizând biţii 6 şi 7 din portul de ieşire.

II. Mouse-uri Cel mai cunoscut dispozitiv de poziţionare a cursorului este mouse-ul, un dispozitiv de dimensiuni reduse care se poate ţine în mână şi care se mişcă pe o suprafaţă plană. Mouseurile sunt într-o mare măsură cele mai rapide dispozitive de poziţionare. Mouse-urile mecanice sunt cele mai ieftine, dar au probleme legate de coeficientul de fiabilitate în exploatare, când bila începe să acumuleze impurităţi de pe suprafaţa pe care rulează (aceste mouse-uri mecanice folosesc în general senzori optici pentru a determina mişcarea bilei, astfel încât ei sunt adevăraţi hibrizi ai dispozitivelor optico-mecanice). Pe lângă aceasta, uneori bila alunecă, ceea ce cauzează lipsa mişcării. Mouse-urile optice rezolvă aceste inconveniente prin folosirea unor fotosenzori care citesc semnalele de pe un suport haşurat. Au fost dezvoltate o mare varietate de tehnici inovatoare pentru mouse-uri. Toate aceste tehnici necesită o suprafaţă specială pe care trebuie să ruleze mouse-ul. Se foloseşte o suprafaţă reflectoare care conţine trasate pe ea linii de două culori: o culoare pe orizontală şi una pe verticală. Mouse-ul conţine o sursă de lumină şi doi senzori, câte unul pentru fiecare culoare. În acest mod fiecare senzor produce un impuls de fiecare dată când linia adecvată este traversată. Mouse-urile optice mai noi nu au nevoie de astfel de grille sau pad-uri speciale, deoarece senzorii lor sunt destul de sensibili pentru a detecta mişcarea, observând modelul oricărei suprafeţe. Deoarece nu au părţi în mişcare, mouse-urile optice nu au practic nevoie de întreţinere, nu se defectează mecanic, iar mecanismul optic nu se lipeşte şi nu alunecă. Deseori mouse-urile mecanice aveau ieşirile sub forma unui semnal dreptunghiular. Totuşi, în prezent majoritatea mouse-urilor sunt construite cu microcontrolere interne, pentru a urmări mişcarea şi pentru a memora poziţia X şi Y. Mouse-ul este conectat cu calculatorul printr-o interfaţă serială standard. Poziţia poate fi transmisă de fiecare dată când mouse-ul se mişcă sau numai la o cerere explicită a procesorului. De obicei, mouse-urile sunt evaluate prin rezoluţia lor măsurată în impulsuri pe inchi (cpi). Cele mai multe mouse-uri au o rezoluţie cuprinsă între 100-200 cpi. Cu cât rezoluţia este mai mare, cu atât cea mai mică mişcare obligă cursorul să se deplaseze pe o distanţă stabilită, dar mai greu este să se poziţioneze cursorul într-un punct exact. Rezoluţia poate fi modificată de către utilizator prin software pentru a face o poziţionare mai precisă prin împărţirea valorii numărătorului la scara dorită. Când se deplasează mouse-ul, bila se roteşte în aceeaşi direcţie Cablul serial pentru conectare cu calculatorul Butoanele mouse-ului, care trimit semnale către calculator când sunt apăsate Discuri de codare Când se roteşte bila pune în mişcare două role, una pentru deplasarea pe orizontală şi una pentru deplasarea pe verticală Emiţători-senzori optici ce generează semnale electrice ce corespund vitezei şi distanţei de deplasare a mouse-ului Figura 1.15 Mecanismul unui mouse opto-mecanic În general, mouse-urile au unu până la patru butoane încorporate pe partea superioară. Un buton poate fi apăsat pentru selectarea unui obiect indicat, ca de exemplu un element de

meniu sau pentru marcarea unei poziţii, ca de exemplu începutul unui bloc de text care trebuie mutat. De asemenea, butoanele pot fi folosite pentru alte aplicaţii. Mouse-ul, ca toate celelalte dispozitive de tip non-tastatură, obligă utilizatorul să-şi mute mâna de pe el pe tastatură, ceea ce este un inconvenient în unele aplicaţii, ca de exemplu editarea de texte, proces care impune folosirea tastaturii într-o foarte mare masură; de aceea este preferată uneori poziţionarea cursorului cu ajutorul tastelor cu săgeţi. 3. Desfăşurarea lucrării 3.1. Se desface carcasa unei tastaturi şi se identifica elementele sale constructive. Se determina tipul conectorilor si al cablurilor folosite pentru conectarea tastaturii la unitatea centrala a calculatorului. 3.2 Se va scrie un program care va aprinde pe rând led-urile Caps Lock, Num Lock si Scrl Lock de pe tastatură 3.3 Se va scrie un program care permite identificarea tipului de tastatură conectata la calculator 3.4 Se va scrie un program care detectează şi afişează pe display scan-codul tastelor apăsate până când este apăsată tasta ESC INT 16h Servicii de tastatura Reg. AH Functia 00 Asteapta apasare tasta si citeste 01 Citeste starea tastaturii (taste apasate) 02 Citeste stare taste Shift 03 Setare rata de scriere 04 Ajustare click 05 Scriere in buffer de tastatura Continutul altor registre AL- codul tastei apasate Exemplu: ; this sample shows the use of keyboard functions. ; try typing something into emulator screen. ; ; keyboard buffer is used, when someone types too fast. ; ; this code will loop until you press esc key, ; all other keys will be printed. name "keybrd" org 100h ; print a welcome message: mov dx, offset msg mov ah, 9 int 21h ;============================ ; eternal loop to get ; and print keys:

wait_for_key: ; check for keystroke in ; keyboard buffer: mov ah, 1 int 16h jz wait_for_key ; get keystroke from keyboard: ; (remove from the buffer) mov ah, 0 int 16h ; print the key: mov ah, 0eh int 10h ; press 'esc' to exit: cmp al, 1bh jz exit jmp wait_for_key ;============================ exit: ret msg db 'type anything...', 0Dh,0Ah db '[enter] - carriage return.', 0Dh,0Ah db '[ctrl]+[enter] - line feed.', 0Dh,0Ah db 'you may hear a beep', 0Dh,0Ah db ' when buffer is overflown.', 0Dh,0Ah db 'press esc to exit.', 0Dh,0Ah, '$' end