#systemyoperacyjne #linux #oesowo
Sterowniki urządzeń
Długo żem się zbierał do tego wpisu. Jak tu zrobić żeby nie było za nudno albo niezrozumiale, a pewnie i jedno o drugie, no nie da się.
Obsługa jakiegokolwiek urządzenia, czy to wewnątrz czy na zewnątrz kąkutera polega na wysyłaniu określonych w dokumentacji urządzenia komend pod adresy pod którymi te urządzenia nasłuchują. Procesory linii 8086 od Intela miały osobne rozkazy do pisania i czytania z komórek pamięci, a osobne do pisania i czytania z urządzeń. Trudno teraz odkopać faktyczny i oficjalny powód dlaczego Intel tak zrobił. Czyli napisanie czegoś do pamięci (mov) pod adres 0xb00b wypełniało komórkę pamięci, a wysłanie czegoś pod adres IO (out) wysyłało bajty na szynę w nadziei że pod PORTEM (bo adresy IO Intel nazywał portami) o tym adresie słucha jakieś urządzenie.
Szyna ISA o ile dobrze pamiętam była po prostu wystawieniem szyny systemowej. Urządzenia - jakieś soundblastery, sieciówki, modemy itp miały na płytach zworki do konfiguracji. Nie przewidywano, że to system czy bios będą się dogadywać z urządzeniami i ustalać pod jakimi adresami IO będą występować ani jakie numery przerwań trącać. To robił człowiek przed umieszczeniem karty w slocie, a potem musiał pamiętać.
Sound Blaster, na adresie IO 0x220, nr przerwania 7, kanał DMA 1. Chyba tak domyślnie układano zwory i rzadko kto to ruszał chyba że inna karta nie dała się ustawić tak, żeby nie kłóciła się z SB.
DOS umiał obsługiwać szereg urządzeń - kartę graficzną w trybie tekstowym, dyski i system plików FAT, dzięku czemu można było czytać plik c:\file.txt i wystarczyło wywołać ze swojego programu funkcję systemową. DOS z kolei wołał funkcję BIOSa do odczytu sektorów. Jak w wierszyku o rzepce - program do DOSa, DOS do BIOSa, BIOS do dysku. Po drodze w DOSie był jeszcze właśnie "sterownik" FAT umiejący przetłumaczyć żądanie o plik po nazwie na szereg odczytów z sektorów dysku.
DOS jednak nie umiał ani w karty muzyczne ani w sieciówki. W CD ROMa też nie umiał.
Co robili programiści - głównie gier, bo to one napędzały rynek mikrokomputerów IBMopochodnych? DOS całe szczęście był prymitywny aż do końca. Architektura już chyba od 286 pozwalała na rozgraniczenie co może robić program użytkownika a co (wszystko) system operacyjny. DOS miał to w pompie, wszystkim wolno wszystko, niech klawisz Reset ma nas w swojej opiece. I całe szczęście.
Sterowniki do kart muzycznych były częściami programów gier. Program install.exe albo częściej setup.exe pozwalał ustawić, przetestować i zapisać ustawienia karty muzycznej dla danej gry. Potem właściwa gra korzystała ze SWOJEGO sterownika. Biedny Gravis Ultrasound mimo że produktem był świetnym to spóźnił się na pociąg i niewiele gier go wspierało. To był ten minus. Można było mieć GUSa ale w ulubionej gierce być skazanym na pierdzenie z PC speakera.
Opcja druga - tak jak robiły to sieciówki. Chciało się pograć w Dooma z kolegami? Najpierw każdy musiał załadować w odpowiedniej kolejności pakiet sterowników dla swojej karty. lsl.exe, potem właściwy sterownik karty, zwykle nazywający się jak model karty - np ne2000.exe dla kart Novella czy 3c5x9x.exe dla 3COM, a na końcu stos protokołu, w Doomie był to IPX, czyli o ile pamiętam ipxodi.exe. Albo .com zamiast exe. Sterowniki były programami wykonywalnymi ale "kończąc" swoje działanie zamiast uruchamiać w dosie funkcję terminate wołały terminate and stay resident co powodowało że mimo że już formalnie skończyły, DOS po nich nie sprzątał. Ich kod zostawał dostępny w pamięci. I tak stawały się sterownikami, z których mógł skorzystać Doom, bo producenci kart umówili się na wspólny interfejs programowy.
Można by zaryzykować stwierdzenie, że DOS był akurat tak prymitywny, że nie przeszkadzał w niezwykle gwałtownym rozwoju zarówno sprzętu jak i gier. Wobec braku internetu ciągłe aktualizacje systemu były w zasadzie niemożliwe, bardziej elegancki system operacyjny wykorzystujący ochronę pamięci i jądra mógł być poważną przeszkodą dla twórców gier. Ale był DOS - może nie najtaniej ale jako tako.

