[ Pobierz całość w formacie PDF ]

operacje, dokonuje się, zapisując do portu baza+6 (gdzie baza to 01F0h, 0170h, 01E8h lub 168h). Bity 7 i 5
muszą być równe 1, a bitem czwartym wybiera się dysk (0=pierwszy, 1=drugi).
Komendy wysyła się do portu baza+7, a dane (po 512 bajtów) odczytuje się z portu bazowego. Przed
wysłaniem komend należy sprawdzić, czy kontroler lub dysk nie są zajęte. Robi się to odczytując port stanu,
będący zarazem portem komend (czyli baza+7). Bit 7 mówi, czy kontroler jest zajęty (powinien być równy
zero), bit 6 - czy dysk jest gotowy do operacji (powinien być równy 1), bit 4 - czy dysk przeszedł na właściwą
pozycję (powinien być równy 1). Reszta bitów jest nieistotna, jeśli chodzi o wysyłanie komend.
Portu statusu można użyć też, obok portu baza+1, do wykrywania błędów.
Możemy już więc napisać taki oto kod:
mov dx, 1f7h
spr_dysk:
in al, dx
cmp al, 50h ; dysk gotowy, kontroler niezajęty
jnz spr_dysk
Gdy dysk jest gotów na przyjmowanie komend, można zacząć wysyłać nasze żądania. Najpierw ustawiamy,
do którego dysku będziemy chcieli wysyłać dane:
mov dx, 1f6h
mov al, 10100000b ; bit 4 = 0, wiec pierwszy dysk
out dx, al
Po tym, w razie czego, sprawdzamy ponownie gotowość dysku poprzednim kodem. Jeśli dysk jest gotów,
wysyłamy komendę:
mov dx, 1f7h
mov al, 0ech ; kod rozkazu identyfikacji
out dx, al
Przed odczytaniem danych musimy jednak sprawdzić nie tylko, czy dysk już jest gotów (czy skończył
przetwarzać żądanie), ale też to, czy dane już są gotowe do odebrania. Sprawdzamy to podobnie, jak
poprzednio, zamieniając tylko 50h na 58h (co dodatkowo sprawdza, czy bufor sektorów dysku wymaga
Bogdan Drozdowski 211
Bogdan Drozdowski Język asembler dla każdego 2009-02-25
obsługi - czyli czy są już dla nas dane):
mov dx, 1f7h
spr_dysk:
in al, dx
cmp al, 58h ; dysk gotowy, kontroler niezajęty, są dane
jnz spr_dysk
Po sprawdzeniu, że dane są dostępne, odbieramy je, lecz w nietypowy sposób: zamiast odbierać po jednym
bajcie, odbieramy pod dwa na raz, do rejestru AX, po czym zamieniamy jego połówki miejscami. Jest to
związane ze sposobem wysyłania danych przez dysk. Kod wygląda tak:
mov cx, 512/2 ; tyle słów do przeczytania
mov dx, 1f0h ; stąd czytać
xor di, di ; wskaznik do bufora
czytaj:
in ax, dx ; wczytaj 2 bajty
xchg al, ah ; zamień połówki miejscami
mov [bufor+di], ax ; zapisz wynik do bufora
add di, 2 ; przejdz na kolejną pozycję w buforze
loop czytaj
...
bufor: times 513 db 0 ; dość, by pomieścić 1 sektor
Dysk zwraca nam 512 bajtów. Model dysku znajdziecie pod adresem 14h w buforze, ma on długość 10 słów
(20 bajtów). Numer seryjny jest pod adresem 36h w buforze, ma on długość 20 słów (40 bajtów). W obu tych
przypadkach, jeśli pierwszym słowem pod wskazanym adresem jest zero, to dysk nie podał tych informacji.
Pozyskanie tych informacji od napędów optycznych (CD, DVD) różni się tylko kodem operacji - zamiast ECh
jest to A1h.
Wykrywanie napędów dyskietek
(przeskocz wykrywanie napędów dyskietek)
Wykrywanie typów napędów dyskietek jest znacznie prostsze niż w przypadku dysków twardych. W czasie
uruchamiania komputera, BIOS wyszukuje napędy dyskietek i wpisuje je do CMOSu, skąd można je łatwo
odczytać. Ze te informacje odpowiada bajt numer 10h. Odczytanie go wygląda tak:
mov al, 10h ; numer bajtu do odczytania
out 70h, al ; port adresu CMOSu
out 0edh, al ; opóznienie
in al, 71h ; odczytanie wartości z portu danych CMOSu
Starsze 4 bity odczytanego bajtu odpowiadają pierwszemu napędowi, młodsze - drugiemu. I tak: wartość 0
oznacza brak danego napędu, 01h - 5,25 cala 360 kB, 02h - 5,25 cala 1,2 MB, 03h - 3,5 cala 720 kB, 04h - 3,5
cala 1,44 MB, 05h - 3,5 cala 2,88 MB.
Wykrywanie myszy
(przeskocz wykrywanie myszy)
212 Bogdan Drozdowski
2009-02-25 Język asembler dla każdego Bogdan Drozdowski
Ogólnie wykrywanie myszy jako urządzenia może być dość skomplikowane, nie tylko ze względu na
różnorodność złączy (szeregowa, PS/2, USB), ale także ze względu na różnorodność protokołów komunikacji
z myszami. Wszystko to na szczęście jest zawarte w otwartym sterowniku myszy dla DOSa - CuteMouse.
Sterownik jest napisany w asemblerze i można go pobrać oraz obejrzeć jego kod zródłowy za darmo.
Jeśli wystarczy Wam wiedzieć, czy jest załadowany jakikolwiek sterownik do myszy (co wskazywałoby na [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • freetocraft.keep.pl