CATEGORII DOCUMENTE |
Serviciile BIOS
Prezentam in continuare o serie de servicii BIOS ce pot fi accesate utilizand functii de biblioteca ale limbajului C.
1) accesul la imprimanta
Inainte ca un program sa scrie iesirea la imprimanta utilizand indicatorul de fisier stdprn se poate face o verificare daca imprimanta este conectata si daca are hartie utilizand functia biosprint din fisierul antet bios.h:
int biosprint(int comanda,int octet,int nr_port)
unde comanda specifica una din urmatoarele operatii:
0 - tipareste octetul specificat;
1 - initializeaza portul imprimantei;
2 - citeste starea imprimantei.
Parametrul octet specifica valoarea ASCII a caracterului ce se doreste a fi scris la imprimanta iar nr_port specifica portul imprimantei care poate fi 0 pentru LPT1, 1 pentru LPT2, s.a.m.d.
Functia biosprint returneaza o valoarea inteaga pe un octet ai carui biti au urmatoarea semnificatie:
0 - dispozitiv in pauza;
3 - eroare I/O;
4 - imprimanta selectata;
5 - lipsa hartie;
6 - confirmare dispozitiv;
7 - dispozitivul nu este ocupat.
2) operatii intrare/iesire
Operatiile intrare/iesire de nivel jos pot fi realizate utilizand functia biodisk ce are urmatoarea sintaxa:
int biodisk(int operatie, int unitate, int head, int track, int sector, int nr_sector, void *buffer)
unde parametrul unitate precizeaza numarul unitatii, care este 0 pentru A, 1 pentru B, si asa mai departe. Parametrii head, track, sector si nr_sector precizeaza sectoarele fizice ale disculuice trebie scris sau citit. Parametru buffer este un pointer la bufferul din care sunt citite sau in care sunt scrise datele. Parametru operatie specifica functia dorita astfel:
0 |
Initializeaza sistemul de disc |
1 |
Returneaza starea ultimei operatii pe disc |
2 |
Citeste numarul precizat de sectoare |
3 |
Scrie numarul precizat de sectoare |
4 |
Verifica numarul precizat de sectoare |
5 |
Formateaza pista specificata |
6 |
Formateaza pista specificata si marcheaza sectoarele defecte |
7 |
Formateaza unitatea incepand cu pista specificata |
8 |
Returneaza parametrii unitatii de disc |
9 |
Initializeaza unitatea de disc |
10 |
Executa o citire lunga - 512 octeti de sector plus patru suplimentari |
11 |
Executa o scriere lunga - 512 octeti de sector plus patru suplimentari |
12 |
Executa o pozitionare pe disc |
13 |
Initializarea alternativa a discului |
14 |
Citeste bufferul sectorului |
15 |
Scrie bufferul sectorului |
16 |
Testeaza daca unitatea este pregatita |
17 |
Recalibreaza unitatea |
18 |
Executa diagnosticarea unitatii de RAM |
19 |
Executa diagnosticarea unitatii |
20 |
Executa diagnosticarea interna a controlerului |
Daca se executa cu succes, functia returneaza valoarea 0. Daca apare o eroare, valoarea returnata precizeaza eroarea.
3) servicii de tastatura din BIOS
Pentru accesul la serviciile de tastatura din BIOS, C-ul pune la dispozitie functia _bios_keybrd ce are urmatoarea sintaxa:
unsigned _bios_keybrd(unsigned comanda)
unde parametrul comanda specifica operatia dorita si poate avea una din urmatoarele valori:
_KEYBRD_READ |
Indica functiei sa citeasca un caracter de la tastatura |
_KEYBRD_READY |
Determina daca este prezent un caracter la bufferul tastaturii. Daca functia returneaza 0, inseamna ca nici o intrare de la tastatura nu este prezenta. Daca valoarea returnata este 0xFFFF, utilizatorul a apasat CTRL C |
_KEYBRD_SHIFTSTATUS |
Returneaza starea tastelor de control: Bit 7 - INS este activat Bit 6 - CAPSLOCK este activat Bit 5 - NUMLOCK este activat Bit 4 - SCRLLOCK este activat Bit 3 - ALT este apasata Bit 2 - CTRL este apasata Bit 1 - SHIFT stanga este apasata Bit 0 - SHIFT dreapta este apasata |
_NKEYBRD_READ |
Indica functiei sa citeasca un caracter de la tastatura, inclusiv tastele speciale, cum ar fi tastele cu sageti |
_NKEYBRD_READY |
Determina daca este prezent un caracter la bufferul tastaturii. Daca functia returneaza 0, inseamna ca nici o intrare de la tastatura nu este prezenta. Daca valoarea returnata este 0xFFFF, utilizatorul a apasat CTRL C Functia accepta inclusiv tastele speciale, cum ar fi tastele cu sageti |
_NKEYBRD_SHIFTSTATUS |
Returneaza starea tastelor de control, inclusiv a tastelor speciale: Bit 15 - SYSREQ este activat Bit 14 - CAPSLOCK este activat Bit 13 - NUMLOCK este activat Bit 12 - SCRLLOCK este activat Bit 11 - ALT dreapta este apasata Bit 10 - CTRL dreapta este apasata Bit 9 - ALT stanga este apasata Bit 8 - CTRL stanga este apasata |
4) obtinerea listei cu echipamente din BIOS
Unele programe necesita determinarea caracteristicilor hardware ale calculatorului. Pentru aceasta se utilizeaza functia _bios_equiplist care are urmatoarea sintaxa:
unsigned _bios_equiplist(void);
Functia returneaza o valoare pe 16 biti a caror valoare are urmatoarea semnificatie:
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
15:14 - numarul de imprimante paralele instalate (de la 0 la 3);
13 - imprimanta seriala;
12 - adaptorul de jocuri;
11:10:9 - numarul de porturi seriale COM (de la 0 la 7);
8 - prezenta DMA (Direct Memory Acces); bitul are valoarea 0 daca exista DMA si 1 daca nu exista;
7:6 - numarul drieverelor de disc;
5:4 - modul video: 00-neutilizat, 01-mod video 40x25 mono, 10-mod video 80x25 color, 11-mod video 80x25 mono;
3:2 - dimensiunea memorie RAM: 00-16Kb, 01-32Kb, 10-48Kb, 11-64Kb;
1 - prezenta coprocesorului matematic;
0 - prezenta unitatii de disc flexibile.
5) controlul intrarilor si iesirilor pentru portul serial
Pentru a executa operatii intrare/iesire utilizand portul serial se utilizeaza functia bioscom ce are urmatoarea sintaxa:
unsigned bioscom(int comanda,int port,char octet);
Parametrul comanda specifica operatia dorita si poate avea una din urmatoarele valori:
_COM_INIT |
Stabileste valorile pentru comunicare ale portului |
_COM_RECEIVE |
Primeste un octet de la port |
_COM_SEND |
Trimite un octet la port |
_COM_STATUS |
Returneaza valorile portului |
Parametrul port specifica portul serial ce se doreste a fi utilizat, unde 0 corespunde lui COM1, 1 lui COM2 si asa mai departe.
Parametrul octet specifica fie octetul pentru iesire, fie valorile de comunicare dorite.
6) determinarea volumului de memorie conventionala BIOS
Pentru a determina memoria conventionala ce poate fi utilizata de catre un proggram se utilizeaza functia biosmemory ce are urmatoarea sintaxa:
int biosmemory(void);
Valoarea returnata de aceasta functie nu cuprinde memoria extinsa, expandata sau superioara.
7) citirea cronometrului BIOS
BIOS are incorporat un ceas intern ce bate de 18.2 ori pe secunda. Acest cronometru este util pentru a genera punctul initial al unui generator de numere aleatoare. Multe compilatoare de C pun la dispozitie doua functii pentru accesul la cronometrul BIOS: biostime si _bios_timeofday. Sintaxa acestor functii este urmatoarea:
long biostime(int operatie,long timp_nou);
Parametrul operatie poate lua doua valori:
0 - daca se doreste ca functia sa citeasca valoarea curenta a cronometrului;
1 - pentru a fixa valoarea cronometrului la valoarea timp_nou.
long _bios_timeofday(int operatie,long *batai);
Aceasta functie poate fi, de asemenea, utilizata pentru a citi sau a fixa cronometrul BIOS.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1224
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved