Krótki opis przerwań obsługi klawiatury i dysków IBM PC

samson
  1. Omówienie przerwań obsługi klawiatury.

    Klawiatura w IBM PC obsługiwana jest przez BIOS. Mikroprocesor
    wbudowany w klawiaturę przesyła do karty głównej informacje o wciśnięciu, zwolnieniu i przekroczeniu kolejnego interwału
    przytrzymywania każdego klawisza. Nadchodzenie tych informacji sygnalizowane jest przerwaniem o numerze 9 (sprzętowe
    klawiatury). Rejestry wejścia klawiatury mieszczą się w przestrzeni wejścia/wyjścia od adresu 0060H poczynając.
    Nie wydaje się rozsądne przejmowanie obsługi tego przerwania, chociażby z tego powodu, że protokoły komunikacji klawiatur
    XT i AT są mocno skomplikowane. Na potrzeby DOS'u i programów użytkowych BIOS udostępnia przerwanie o numerze
    22(16H), a w jego ramach trzy podstawowe funkcje:

    • gdy AH=0 po wywołaniu rozkazem INT 22 podprogram obsługi udostępnia kolejny znak oczekujący w buforze klawiatury lub,
      gdy bufor jest pusty, oczekuje na przyciśnięcie klawisza generującego znak i po jego nadejściu umieszcza kod podstawowy
      (ASCII) znaku w AL, zaś kod pomocniczy w AH;
    • gdy AH=1 po wywołaniu rozkazem INT 22 podprogram obsługi sprawdza, czy w buforze klawiatury oczekuje znak .
      Jeśli znak oczekuje, jego kod podstawowy zostaje umieszczony w AL, zaś pomocniczy w AH, ustawiany jest wskaźnik ZF=0;
      jeśli brak znaku, następuje tylko ustawienie wskaźnika ZF=1; nie występuje oczekiwanie na naciśnięcie klawisza;
    • gdy AH=2 po wywołaniu rozkazem INT 22 podprogram obsługi umieszcza w rejestrze AL stan bajtu klawiszy specjalnych
      "shift", w którym poszczególne bity są interpretowane jako:
      7 - stan Insert(związany z klawiszem Ins)
      6 - stan CapsLock
      5 - stan NumLock
      4 - stan ScrollLock
      3 - Alt
      2 - Ctrl
      1 - lewy klawisz Shift
      0 - prawy Shift
      bity 3..0 odpowiadają bieżącemu stanowi(wciśnięty- 1, zwolniony- 0) odpowiednich klawiszy, zaś bity 4..7 zachowują się jak
      przerzutniki: każde naciśnięcie odpowiedniego klawisza powoduje zmianę stanu bitu na przeciwny.
      Wersje BIOS'u (z datą generacji po 11/15/85) dla AT udostępniają dodatkowo funkcję 16,17 i 18(10H,11H i 12H) przeznaczone
      głównie do obsługi klawiatur 102- znakowych. Wymienione tu funkcje przerwania 22(16H) nie dają odbicia znaku na
      ekran- tzw. echa:
    • AH=12h-funkcja ta działa podobnie jak funkcja AH=02h , lecz jest od niej nieco lepsza. Zapisuje w rejestrze AX stan klawiszy
      dodatkowych(ustawienie poszczególnych bitów oznacza , że klawisz jest aktywny):
      AL :
      7 - stan Insert(związany z klawiszem Ins)
      6 - stan CapsLock
      5 - stan NumLock
      4 - stan ScrollLock
      3 - Alt
      2 - Ctrl
      1 - lewy klawisz Shift
      0 - prawy Shift

AH- dodatkowe informacje:
bit 0 (8) - lewy Ctrl
bit 1 (9) - lewy Alt
bit 2 (10) - prawy Ctrl
bit 3 (11) - prawy Alt
bit 4 (12) - Scroll Lock
bit 5 (13) - Num Lock
bit 6 (14) - Caps Lock
bit 7 (15) - SysReq

Przerwanie 21:
AH=1 - wczytanie z klawiatury z echem
przerwanie zwraca:
AL = Znak z standardowego urządzenia wejścia

  • czeka na dane z STDIN i wyświetla na STDOUT
  • zwraca 0 dla rozszerzonych klawiszy, później funkcja musi być
    wywołana ponownie by odczytać skankod

    • jeżeli wciśnięto ~Ctrl-Break~, uruchamiane jest ~INT 23~

      AH=0CH - Czyść bufor klawiatury, uruchom funkcję wczytania
      AL = 01, 06, 07, 08 lub 0A (funkcje wczytania INT 21)
      przerwanie zwraca:

      • główną funkcją jest wyczyszczenie bufora klawiatury i wywołanie
        INT 21 z określoną (w AL) funkcją
  1. Przerwania obsługi dysków.

Przerwanie 13H- obsługa dyskietki/dysku
AH=0- inicjacja systemu dyskowego

AH=1- odczyt statusu ostatnio wykonanej operacji dyskowej
Wyniki : AL=0 - operacja wykonana prawidłowo,
AL=1 - nielegalny rozkaz dla sterowników dysków,
AL=2 - nie znaleziono znacznika,
AL=3 - próba zapisu na zabezpieczoną dyskietkę,
AL=4 - nie znaleziono sektora,
AL=6 - nie ma dyskietki w mechanizmie,
AL=8 - błąd w kanale DMA,
AL=9 - przekroczenie granicy adresowej dla kanału DMA,
AL=16 - błąd sumy kontrolnej CRC,
AL=32 - błąd sprzętowy sterownika dysków NEC 765,
AL=64 - błąd pozycjonowania głowicy,
AL=128 - przekroczony czas operacji,

AH=2- odczyt sektorów
Wejście: DL - numer stacji dysków(0 - pierwszy dla dysków elastycznych, 80H - pierwszy dla dysków stałych),
DH- numer głowicy,
CL- numer sektora,
CH- numer ścieżki,
AL- liczba sektorów,
ES:BX- adres początkowy bufora operacji,
Wyjście: AH- kod statusu,
AL- liczba rzeczywiście przeczytanych sektorów,
Znacznik C=0 - operacja wykonana prawidłowo,

AH=3 - zapis sektorów
AH=4 - weryfikacja sektorów
Wejście: DL- numer stacji dysków(0 - pierwszy dla dysków elastycznych, 80H - pierwszy dla dysków stałych),
DH- numer głowicy,
CH- numer ścieżki,
CL- numer pierwszego sektora,
AL- liczba sektorów,
ES:BX- adres bufora,
Wyjście: AH- wynik operacji,
AL- liczba sektorów, na których wykonano operację,
Bit znacznika C=1, gdy wystąpi błąd.

AH=5 - formatowanie sektorów
Wejście: DL- numer stacji dysków(0 - pierwszy dla dysków elastycznych, 80H - pierwszy dla dysków stałych),
DH- numer głowicy,
CH- numer ścieżki,
ES:BX- adres tabeli 4- bitowych pól adresowych

Przerwanie 1EH- parametry napędu dyskietek

Przerwanie 25H- odczytanie sektorów z dysku. Przerwanie to pozwala na fizyczny odczyt kolejnych sektorów. Odczyt następuje do PAO.
Wejście: DX- numer pierwszego odczytywanego sektora,
CX- liczba sektorów do odczytu,
AL- numer stacji dysków, 0=A(stacja A), 1=B, itd.
DS:BX- adres bufora odczytu,
Wyjście: flaga C=0 operacja odczytu przebiegła pomyślnie,
flaga C=1 błędna operacja odczytu, błędy zakodowane w rejestrach AL i AH.

Przerwanie 26H- zapisanie sektorów na dysku. Przerwanie to pozwala na fizyczny zapis kolejnych sektorów.
Wejście: DX- numer pierwszego zapisanego sektora logicznego,
CX- liczba sektorów,
AL- numer stacji,
DS:BX- adres bufora PAO zapisu
Wyjście: flaga C=0 operacja zapisu przebiegła pomyślnie,
flaga C=1 błędna operacja zapisu,

Przerwanie 40H- obsługa dyskietek( gdy jest twardy dysk)

Przerwanie 41H- parametry dysku stałego 1 (tablica)

Przerwanie 46H- parametry dysku stałego 2 (tablica)

0 komentarzy