IBM PC. Organizacja sprzętu



Podobne dokumenty
Pośredniczy we współpracy pomiędzy procesorem a urządzeniem we/wy. W szczególności do jego zadań należy:

Organizacja typowego mikroprocesora

Sygnały DRQ i DACK jednego kanału zostały użyte do połączenia kaskadowego obydwu sterowników.

Działanie systemu operacyjnego

O grafice i monitorach. R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski

Działanie systemu operacyjnego

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

Działanie systemu operacyjnego

Budowa systemów komputerowych

Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania.

Mikroprocesor Operacje wejścia / wyjścia

BIOS, tryb awaryjny, uśpienie, hibernacja

CZYM JEST KARTA GRAFICZNA.

System operacyjny MS-DOS

ARCHITEKTURA PROCESORA,

Adam Kotynia, Łukasz Kowalczyk

Komputer IBM PC niezależnie od modelu składa się z: Jednostki centralnej czyli właściwego komputera Monitora Klawiatury

URZĄDZENIA WEJŚCIA-WYJŚCIA

Mikroinformatyka. Wielozadaniowość

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

LEKCJA TEMAT: Zasada działania komputera.

Zadanie Zaobserwuj zachowanie procesora i stosu podczas wykonywania następujących programów

UTK Można stwierdzić, że wszystkie działania i operacje zachodzące w systemie są sterowane bądź inicjowane przez mikroprocesor.

Błąd pamięci karty graficznej lub Uszkodzona lub źle podpięta karta graficzna

Organizacja pamięci VRAM monitora znakowego. 1. Tryb pracy automatycznej

Działanie systemu operacyjnego

PROGRAM TESTOWY LCWIN.EXE OPIS DZIAŁANIA I INSTRUKCJA UŻYTKOWNIKA

Zarządzanie pamięcią w systemie operacyjnym

Pliki. Operacje na plikach w Pascalu

O historycznym systemie DOS. R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Architektura komputerów

Architektura komputerów. Komputer Procesor Mikroprocesor koncepcja Johna von Neumanna

Struktura i działanie jednostki centralnej

Przykładowe zagadnienia na sprawdzian z wiedzy ogólnej. Linux to nazwa: A. Programu biurowego. B. Systemu operacyjnego. C. Przeglądarki internetowej.

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Architektura systemów komputerowych. dr Artur Bartoszewski

Technologia informacyjna. Urządzenia techniki komputerowej

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

DOS Podstawowe komendy Przygotowanie dyskietki do pracy Praca z katalogami w systemie DOS Operacje kopiowania

Pamięć wirtualna. Przygotował: Ryszard Kijaka. Wykład 4

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

DOS COMMAND.COM. Rys. 2. Główne moduły programowe systemu operacyjnego DOS. Interpreter poleceń. Rys. 3. Warstwowa struktura systemu DOS

I. Interfejs użytkownika.

Architektura komputerów. Asembler procesorów rodziny x86

MIKROKONTROLERY I MIKROPROCESORY

Publiczne Technikum Informatyczne Computer College w Koszalinie

Procesor ma architekturę rejestrową L/S. Wskaż rozkazy spoza listy tego procesora. bgt Rx, Ry, offset nand Rx, Ry, A add Rx, #1, Rz store Rx, [Rz]

WOJEWÓDZKI KONKURS INFORMATYCZNY DLA UCZNIÓW DOTYCHCZASOWYCH GIMNAZJÓW ETAP SZKOLNY BIAŁYSTOK, 22 LISTOPADA 2017 R.

Programowanie na poziomie sprzętu. Tryb chroniony cz. 1

3. Sieć PLAN. 3.1 Adresowanie płyt głównych regulatora pco

organizacja procesora 8086

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Podstawy Techniki Komputerowej. Temat: BIOS

Monitor ekranowy urządzenie, na którym wyświetlane są informacje wyprowadzane z komputera.

Układy wejścia/wyjścia

Program EDYTOR-AS-OUX

PAMIĘĆ OPERACYJNA...107

Rozdział II. Praca z systemem operacyjnym

INSTRUKCJA OBSŁUGI TABLICY WYNIKÓW SPORTOWYCH SERIA PROFI

Logiczny model komputera i działanie procesora. Część 1.

Spis treúci. Księgarnia PWN: Krzysztof Wojtuszkiewicz - Urządzenia techniki komputerowej. Cz. 1. Przedmowa Wstęp... 11

Który z podzespołów komputera przy wyłączonym zasilaniu przechowuje program rozpoczynający ładowanie systemu operacyjnego? A. CPU B. RAM C. ROM D.

Polecenia wewnętrzne:

Klawisze szybkiego wyboru układu drabinkowego

16MB - 2GB 2MB - 128MB

Lista instrukcji mikroprocesora Programowanie w assemblerze

Komputer. Komputer (computer) jest to urządzenie elektroniczne służące do zbierania, przechowywania, przetwarzania i wizualizacji informacji

Wykład PASCAL - Pliki tekstowe

Urządzenia wejścia-wyjścia

Architektura komputerów

dr inż. Jarosław Forenc

Podstawy techniki cyfrowej Układy wejścia-wyjścia. mgr inż. Bogdan Pietrzak ZSR CKP Świdwin

Technika mikroprocesorowa. Konsola do gier

Urządzenia zewnętrzne

WPROWADZENIE Mikrosterownik mikrokontrolery

Laboratorium Komputerowe Systemy Pomiarowe

Technika mikroprocesorowa I Wykład 2

ĆWICZENIE 7. Wprowadzenie do funkcji specjalnych sterownika LOGO!

KOMPUTER. Zestawy komputerowe podstawowe wiadomości

Standard transmisji równoległej LPT Centronics

Konfiguracja parametrów pozycjonowania GPS /5

Ćwiczenie Wstawianie spisu treści, indeksu alfabetycznego i indeksu ilustracji Wstaw > Indeksy i spisy > indeksy i spisy) Wskazówka:

Procesor Intel 8086 model programisty. Arkadiusz Chrobot

Opis klawiatury komputerowej

Płyta główna (ang. motherboard) najważniejsza płyta drukowana urządzenia elektronicznego, na której zamontowano najważniejsze elementy urządzenia, umo

PROGRAMY REZYDENTNE Terminate and State Resident, TSR

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Architektura systemu komputerowego. Działanie systemu komputerowego. Przerwania. Obsługa przerwań (Interrupt Handling)

Architektura komputerów

Sprzęt i architektura komputerów

Jednostka centralna. Miejsca na napędy 5,25 :CD-ROM, DVD. Miejsca na napędy 3,5 : stacja dyskietek

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

TEMAT : System operacyjny MS DOS pliki wsadowe

urządzenie elektroniczne służące do przetwarzania wszelkich informacji, które da się zapisać w formie ciągu cyfr albo sygnału ciągłego.

Programator Kart Master - klient

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

Transkrypt:

IBM PC Mikrokomputer IBM PC dostępny jest w dwóch wersjach: IBM PC/XT oraz IBM PC/AT. Oryginalne produkty IBM praktycznie nie występują na naszym rynku. Dostępne są za to różnego pochodzenia wersje z nimi kompatybilne stanowiące ich funkcjonalne kopie rozprowadzane zwykle pod nazwą IBM PC. Niektóre renomowane firmy produkują komputery funkcjonalnie zgodne z IBM PC pod własną nazwą, opatrując ją zwykle w rozszerzenie XT lub AT. Dla komputerów kompatybilnych z IBM przyjęła się nazwa "klony IBM". Polskim klonem jest Elwro 801/AT produkcji wrocławskich zakładów ELWRO. Organizacja sprzętu Podstawowym elementem IBM PC/XT jest mikroprocesor 8088 (z zegarem 4.77 MHz) lub 8088-2 (wersja "turbo" z zegarem 8 MHz), zaś IBM PC/AT mikroprocesor 80286 (z zegarem 8, 10, 12, 16 lub 20 MHz). Na rynku dostępne są również wersje AT z mikroprocesorem 80386 także o wyższych częstotliwościach zegara. Z punktu widzenia użytkownika wykorzystującego standardowe oprogramowanie różnice między tymi komputerami są niewielkie i sprowadzają się głównie do różnicy szybkości działania. W zestawach IBM PC do wspomagania mikroprocesora głównego może być zainstalowany koprocesor numeryczny 8087 w XT lub 80287 w AT. Koprocesor numeryczny jest jednym z najdroższych elementów komputera a jego wykorzystanie poza specjalistycznym oprogramowaniem jest niewielkie. Komputery IBM PC zawierają od 256 KB do 640 KB pamięci RAM i do 64 KB pamięci ROM. Standardowym wyposażeniem komputerów IBM PC jest klawiatura, monitor ekranowy i co najmniej jedna stacja dyskietek 5 1/4". W praktyce zwykle występują dwie stacje dysków: w XT obie przeznaczone do obsługi dyskietek o pojemności 360 KB, zaś w AT jedna (oznaczona A:) dla dyskietek 1.2 MB i 360 KB a druga tylko dla dyskietek 360 KB. Klawiatura zawiera specjalizowany tzw. komputer jednoukładowy (zwykle 8049 lub 8051) i współpracuje z komputerem przez specjalne wejście. Na obudowie komputera zwykle zainstalowany jest dodatkowy klawisz tzw. RESET służący do zerowania komputera bez wyłączania zasilania - klawisz ten w konsekwencji wymusza procedurę tzw. "zimnego startu". Ponadto na obudowie komputera znajduje się przełączany specjalnym kluczem przełącznik odłączający logicznie wejście klawiatury od komputera i lampki sygnalizujące obecność zasilania, ewentualnie pracę dysku twardego i częstotliwość zegara (stan "turbo"). Wewnątrz obudowy bloku głównego komputera znajduję się zasilacz sieciowy (zwykle przełączalny między napięciami zasilania 220V/50Hz i 110V/60Hz), płyta główna (mother board) czyli położony poziomo moduł (pakiet) dwuwarstwowy stanowiący miejsce instalacji podstawowych elementów komputera, dwa mechanizmy dysków elastycznych, kilka tzw. kart rozszerzeń, czyli pakietów z układami przeznaczonymi do obsługi różnorodnych urządzeń zewnętrznych komputera. Wewnątrz obudowy może być zainstalowany jeden lub dwa dyski twarde (typu Winchester). Na płycie głównej mieści się : - mikroprocesor; - miejsce (podstawka) na koprocesor numeryczny; 1

- układy zegarowe i układy pomiaru czasu rzeczywistego z własnym podtrzymaniem bateryjnym (AT); - przełączniki konfiguracji, które mogą być odczytywane jako port przez mikroprocesor - w AT zamiast przełączników konfiguracji występuje pamięć konfiguracji (setup) z podtrzymaniem bateryjnym; - dynamiczna pamięć RAM do 640 KB (niektóre wersje AT zawierają nawet 1 MB lecz tylko 640 KB wykorzystywane jest jako podstawowa pamięć RAM); - pamięć EPROM do 64 KB; - układy wspomagające (sterowniki przerwań, układy DMA, magistrali systemowej itp.); - gniazdo do podłączenia klawiatury; - gniazda (expansion slots) do włączenia kart rozszerzeń. Każdy komputer IBM PC dostarczany jest zwykle z kartą rozszerzeń zawierającą jeden ze sterowników monitora. Obecnie najbardziej rozpowszechnione są sterowniki: - CGA czyli sterownik monitora kolorowego (Color Graphics Adapter), ze względu na niewielką zdolność rozdzielczą (ekran 320 na 200 punktów przy 4 kolorach lub 640 na 200 punktów przy 2 kolorach, znak 8 na 8 punktów) rzadko obecnie kupowany; - EGA czyli sterownik monitora kolorowego o podwyższonych możliwościach (Enhanced Graphics Adapter) o rozdzielczości ekranu do 640 na 350 punktów (znak 8 na 14 punktów); - HGC czyli sterownik monitora monochromatycznego zwany "kartą Herkules" (Hercules Graphics Card), najbardziej obecnie rozpowszechniony o rozdzielczości ekranu 720 na 348 punktów i znaku 9 na 14 punktów. Mało prawdopodobne jest spotkanie z kartą MDA (Monochrome Display Adapter) zdolną do sterowania monitorem monochromatycznym tylko w trybie znakowym. Coraz częściej spotyka się różnego rodzaju karty sterowników kolorowych o bardzo dużej rozdzielczości, lecz oprogramowanie standardowe nie jest w stanie współpracować z tymi sterownikami wykorzystując pełne ich możliwości. Za standard można uznać właściwie tylko sterownik PGA lub PGC (Professional Graphics Controller) rzadko spotykany w Polsce. Na karcie sterownika monitora zwykle zainstalowane jest łącze równoległe do drukarki (tzw. port równoległy drukarki). W XT powszechnie wykorzystywana jest wielofunkcyjna karta wejścia/wyjścia (multi I/O card) zawierająca m. in. wyjście równoległe drukarki, sterownik dysków elastycznych i zegar czasu rzeczywistego. W komputerze powinny znajdować się również karty sterowników dysków: w XT zwykle sterownik dysków twardych i sterownik dyskietek występują na oddzielnych kartach, w AT stosuje się zwykle zintegrowaną kartę wielofunkcyjną zdolną do sterowania jednocześnie mechanizmami napędów dyskietek i dysków twardych. W niektórych rozwiązaniach AT sterownik dysków twardych jest zamontowany na płycie głównej. Najbardziej charakterystyczną cechą sprzętu IBM PC jest "otwartość organizacji" - zmiana konfiguracji poza wyjęciem dowolnej karty rozszerzeń lub jej wsunięciem w wolne gniazdo nie wymaga od użytkownika żadnych dodatkowych zabiegów związanych z instalacją, poza (w niektórych przypadkach) przestawieniem przełączników lub uaktualnieniem zawartości pamięci konfiguracji (realizowanym za pomocą odpowiedniego programu). Karta rozszerzeń wnosi ze sobą oprogramowanie podstawowe obsługujące sprzęt zainstalowany na tej karcie. Oprogramowanie to zawarte jest w pamięci EPROM na karcie. Pamięć zawiera jednocześnie fragmenty układów adresacji, rozpoznające tę pamięć pod ściśle określonymi adresami w przestrzeni adresowej pamięci. 2

Oprogramowanie podstawowe Warunki nakładane na wykorzystanie 1 MB przestrzeni adresowej IBM PC przez mikroprocesor (8088 lub 80286) to: przeznaczenie obszaru od adresu 0 do 3FFH (pierwszy 1 KB pamięci) na wektory przerwań oraz adresu 0FFFF0H na adres początkowy - na tę wartość ustawiany jest licznik rozkazów po wyzerowaniu procesora (CS=0FFFFH, IP=0 po sygnale RESET, a wiec i po włączeniu zasilania). Dalej blokiem nazywany będzie spójny obszar pamięci o adresie początkowym podzielnym bez reszty przez 64 K, zatem w przestrzeni adresowej 1 MB mieści się 16 bloków o numerach do 0 do 0FH. Umowa dotycząca konstrukcji sprzętu mówi, że pamięć od adresu 0 do 9FFFFH (pierwsze 640 KB, bloki od 0 do 9) powinna być pamięcią RAM (dynamiczną), zaś pamięć od adresu 0F0000H do 0FFFFFH (ostatnie 64 KB pamięci, blok F) powinna być pamięcią ROM - zwykle EPROM. W tym ostatnim obszarze w IBM PC mieści się tzw. BIOS (Basic Input/Output System). Jest to stałe oprogramowanie, zdolne do realizacji procedur startu, podprogramów obsługi przerwań sprzętowych generowanych przez sprzęt w standardowej konfiguracji oraz podprogramów obsługi pewnych przerwań programowych. W pamięci ROM mieścić się może również interpreter języka BASIC. W obszarze pamięci od 0A0000H do 0EFFFFH (bloki od A do E) mogą mieścić się fragmenty pamięci fizycznie zainstalowane jako elementy pamiętające na kartach rozszerzeń lub kasetach ROM (cartridges). W obszarze tym przyjęto następujące ustalenia: - bloki D i E przeznaczone są na kasety ROM lecz pod adresem 0D0000H może odnajdywać się moduł komunikacji głosowej o ile karta rozszerzeń syntetyzatora głosu występuje w konfiguracji; - w bloku C obszar od adresu 0C8000H przeznaczony jest na pamięć sterownika dysku twardego (występują jednak karty sterowników dysków twardych wykorzystujące pamięć od adresu 0C0000H); obszar od 0C6000H wykorzystywany jest przez sterownik monitora PGA (Professional Graphics Adapter); - w bloku B sterownik monitora CGA (Color Graphics Adapter), podobnie jak sterownik EGA (Enhanced Graphics Adapter), wykorzystuje obszar od 0B8000H, zaś sterownik HGC (Hercules Graphics Card) obszar od 0B0000H; - blok A wykorzystywany jest jako rozszerzenie pamięci przez sterownik EGA. Procedura startu po włączeniu zasilania (tzw. "zimny start") jest realizowana przez BIOS po włączeniu zasilania komputera lub po wciśnięciu klawisza zerowania (RESET) i składa się następujących działań: - POST: test po włączeniu zasilania (Power-On-Self Test), w którym inicjowane są wszystkie podzespoły zainstalowane na płycie głównej i przeprowadzane jest sprawdzenie poprawności ich pracy - łatwo zauważalny jest test pamięci RAM i jej rozszerzenia powyżej 1 MB (występuje tylko w AT); słowo pamięci o adresie bezwzględnym 00472H (Reset Flag) po włączeniu zasilania ma wartość nieokreśloną i zwykle różną od 1234H (wartość 1234H w słowie 00472H powoduje pominięcie przez POST testu pamięci w procedurze tzw. "gorącego restartu"); - ustawienie wektorów przerwań BIOS'u, pozostałe wektory ustawiane na "puste" podprogramy obsługi (składające się tylko z IRET); - ustalenie konfiguracji; - dołączenie oprogramowania z kart rozszerzeń: obszar pamięci przewidziany na rozszerzenia (od 0A0000H) jest sprawdzany co 256 B, czy nie zawiera 3

odpowiedniego nagłówka, rozpoczynającego się od słowa 55AAH - jeśli tak, to następuje wywołanie podprogramu inicjującego mieszczącego się pod adresem zapisanym w tym nagłówku; podprogram inicjujący kartę rozszerzeń powoduje inicjalizację podzespołów karty, sprawdzenie ich sprawności i ustawienie odpowiednich wektorów przerwań; - próba odczytania z mechanizmu dyskowego A: rekordu ze ścieżki zerowej (boot record), zawierającego prosty program ładujący; w razie powodzenia sterowanie jest przekazywane do tego programu; - w razie niepowodzenia próby odczytu z dysku A: dokonywana jest identyczna próba odczytu z dysku C: - w razie niepowodzenia próby odczytu z dysku C: następuje próba uruchomienia interpretera języka BASIC z pamięci RAM; - w razie niepowodzenia uruchomienia interpretera BASIC'a (niewiele IBM'ów jest wyposażanych w ten program w pamięci stałej) następuje wypisanie komunikatu (na monitorze) z żądaniem włożenia do mechanizmu A: dyskietki systemowej a następnie oczekiwanie na spełnienie tego żądania. Rekord z prostym programem ładującym znajduje się na każdym dysku twardym lub dyskietce na zerowej ścieżce, umieszczony tam w trakcie formatowania. Dalej omawiany będzie przypadek ładowania systemu operacyjnego DOS (firmy Microsoft), należy jednak pamiętać, że w przypadku innego oprogramowania - szczególnie gier - dalsza procedura może być zupełnie inna. W przypadku gdy ładowanie programu ładującego ze ścieżki zerowej dysku zakończy się powodzeniem, program ten podejmuje pracę i poszukuje na dysku dwóch zbiorów: IBMBIO.COM i IBMDOS.COM. Jeśli te zbiory nie występują (dyskietka jest sformatowana bez systemu operacyjnego) na monitor wysyłany jest odpowiedni komunikat i program zatrzymuje się w oczekiwaniu na zmianę dyskietki. Po znalezieniu poszukiwanych zbiorów do pamięci ładowany jest zbiór IBMBIO.COM i uruchamiany. Program ten zawiera część inicjującą, oraz fragmenty oprogramowania stanowiące uzupełnienie BIOS'u. Fragmenty te włączane są do oprogramowania przez zmianę wektorów przerwań. Po zakończeniu działania IBMBIO, do pamięci ładowany jest zbiór IBMDOS.COM i uruchamiany. Program ten stanowi właściwy Dyskowy System Operacyjny DOS (Disk Operating System). Jego część inicjująca rozmieszcza w pamięci część roboczą i zmienia odpowiednie wektory przerwań, organizuje pamięć m. in. odczytując z dysku i uwzględniając zawartość tzw. zbioru konfiguracji CONFIG.SYS. Zawartość tego zbioru może ustalać m. in. liczbę buforów DOS'u a także jakie dodatkowe elementy oprogramowania (tzw. driver'y związane z urządzeniami zewnętrznymi) powinny być "doładowane" z dysku. Elementy te są ładowane i rozmieszczane w pamięci. W pamięci umieszczany jest też stała (rezydentna) część interpretera komend, przejmująca działanie po osadzeniu DOS'u w pamięci. Stała część interpretera komend jest zdolna do sprawdzenia poprawności komend i wykonania komend wewnętrznych DOS'u. Wszystkie dotychczas wymienione ładowalne elementy oprogramowania zajmują obszar na początku pamięci. Ich górna granica ("górna granica DOS'u") wyznacza jednocześnie początek obszaru programów wymiennych TPA (Transient Program Area), czyli obszaru, do którego mogą być ładowane programy realizujące komendy zewnętrzne i programy użytkownika. Do tego obszaru ładowana jest m. in. w razie potrzeby wymienna część interpretera komend. Procedura startu kończy się automatycznym powołaniem interpretera komend dla wykonania działań jak dla komendy AUTOEXEC.BAT. Jeśli taki zbiór nie istnieje, procedura startu kończy się bez jego wykonania; jeśli istnieje - wykonywany jest zgodnie z zasadami wykonania makrokomend (batch files) DOS'u. Procedura startu po naciśnięciu kombinacji klawiszy Alt-Ctrl-Del, tzw. "gorący restart" różni się od zimnego startu tym, że przed wywołaniem normalnej procedury "zimnego startu" w 4

słowie o adresie 0:472H (Restart Flag w danych BIOS'u) ustawiana jest wartość 1234H, przy której POST pomija czasochłonny test pamięci. 10FFEF 100000 High Menory Area mikroprocesory od 80286 FFFFF BIOS: POST, inicjowanie pracy, obsługi przerwań, interpreter ROM F0000 języka BASIC ( ) EFFFF E0000 Karty rozszerzeń, Upper Memory Blocks DFFFF D0000 Karty rozszerzeń, UMB C8000 Karty rozszerzeń, UMB, Dysk twardy ( ) C0000 ROM-BIOS karty graficznej B8000 Pamięć obrazu w trybach tekstowych kolorowych B0000 Pamięć obrazu w trybach tekstowych monochromatycznych AFFFF A0000 Pamięć obrazu w trybach graficznych 9FFFF Transient Program Area programy użytkownika DOS, rezydentna część interpretera komend Uzupełnienia BIOSu, sterowniki, bufory 00500 Dane DOSu 004FF 00400 Dane BIOSu 003FF 00000 Wektory przerwań Po załadowaniu DOS'u poszczególne elementy oprogramowania rozmieszczone są w pamięci tak, jak to pokazano na rysunku. Wartą uwagi jest technika łączenia kolejnych, wyższych warstw oprogramowania z warstwami niższymi - obowiązuje reguła, że kolejne warstwy powinny w jak największym stopniu korzystać z przerwań warstwy niższej (w "przeciwną stronę" jest to niedozwolone), a ponadto dopuszczalne jest "poprawianie" warstwy niższej przez dostarczanie własnych podprogramów obsługi przerwań i zmianę wektorów przerwań tak, aby wskazywały na te podprogramy. Programy użytkownika mogą posługiwać się urządzeniami zewnętrznymi trzema różnymi sposobami: - przez bezpośrednie dostępy do rejestrów sterujących i danych sterowników urządzeń; - przez wywoływanie podprogramów obsług przerwań BIOS (usług BIOS'u), zdolnych do wykonywania podstawowych operacji wejścia/wyjścia; - przez wywoływanie podprogramów obsług przerwań DOS'u (usług DOS'u), zdolnych do wykonywania zarówno podstawowych, jak i bardziej złożonych operacji wejścia/wyjścia. Zaleca się użytkownikowi korzystanie z usług możliwie najwyższego poziomu, tzn. DOS'u - wyjątkiem jest współpraca z monitorem, gdzie głównie wykorzystuje się przerwania BIOS'u, a w wielu przypadkach jedynym skutecznym rozwiązaniem jest praca na pamięci ekranu. 5

Interesujące jest wykorzystanie wektorów przerwań w IBM PC po załadowaniu DOS'u. Przerwania można podzielić na: 1. Mikroprocesorowe o numerach 0 i 1; do przerwań mikroprocesorowych zaliczyć można też przerwania o numerach 3 i 4. Przez przerwania mikroprocesorowe rozumie się takie przerwania, których cechy szczególne zależą głównie od mikroprocesora. 2. Sprzętowe (zewnętrzne) o numerach 2, 8, 9, 11-15 (0BH-0FH). Przerwania sprzętowe wynikają z organizacji IBM PC i nie można ich zmienić. Przerwania te obsługiwane są przez BIOS lub podprogramy zawarte na kartach rozszerzeń. 3. BIOS'u o numerach 5, 16-28 (10H-1AH) i 72 (48H), oprócz 24 (18H). 4. Tzw. adresowe BIOS'u o numerach 27, 28 i 29 (1BH, 1DH i 1EH). W rzeczywistości są to adresy danych (FAR) specjalnych BIOS'u - pewnych tablic pomocniczych. Nie są to adresy podprogramów obsługi. 5. Główne DOS'u o numerach 32, 33, 37-39 (20H, 21H, 25H-27H). Szczególnie ważne są przerwania: - 33 (21H): tzw. przerwanie osłonowe lub usługowe - stanowi żądanie wykonania przez DOS jednej z funkcji usługowych o numerze zadanym w rejestrze AH; - 32 (20H): żądanie normalnego zakończenia pracy programu użytkowego; - 39 (27H): żądanie zakończenia pracy programu użytkowego z pozostaniem w miejscu (z przesunięciem początku TPA wg zawartości rejestru DX). 6. Tzw. adresowe DOS'u o numerach 34, 35 i 36 (22H, 23H i 24H). Można powiedzieć, że o ile pozostałe przerwania programowe wywoływane są przez program użytkownika, a obsługiwane przez oprogramowanie systemowe (BIOS lub DOS), to dla omawianych przerwań rzecz się ma dokładnie odwrotnie: przerwania te wywoływana są przez DOS, a mogą być obsługiwane przez program użytkownika, jeśli ustawi on odpowiednio wektory przerwań. Przerwania są wywoływane: - 35 (23H): po naciśnięciu kombinacji klawiszy Ctrl-Break (^C); jeśli użytkownik ustawi ten wektor, to zostanie on odtworzony po zakończeniu pracy programu; - 36 (24H): po wystąpieniu błędu krytycznego - tzn. takiego, po którym normalne kontynuowanie programu nie jest możliwe; jeśli użytkownik ustawi ten wektor, to zostanie on odtworzony po zakończeniu pracy programu; - 34 (22H): jeśli w programie wystąpi przerwanie 32 (20H - normalne zakończenie programu), lub 39 (27H - zakończenie z pozostaniem w miejscu) sterowanie zostanie przekazane pod adres międzysegmentowy określony tym wektorem, lecz nie będzie to wejście do procedury obsługi przerwania tylko normalny skok; omawiane "przerwanie" adresowe wykorzystywane jest przez tzw. nakładki na DOS (np. Norton Commander), tzn. programy powołujące do pracy inne programy pod swoją kontrolą; jeśli użytkownik zmieni ten wektor, to musi go odtworzyć przed zakończeniem pracy programu. 7. Zarezerwowane (na potrzeby wewnętrzne DOS'u) o numerach 40-95 (28H-5FH). 8. Użytkownika (do dowolnego wykorzystania w programach użytkowych) o numerach 96-103 (60H-67H). 9. Niewykorzystywane o numerach 104-127 (68H-7FH) i 241-255 (0F1H-0FFH). 6

10. Interpretera języka BASIC o numerach 24 i 128-240 (18H i 80H-0F0H). Należy zwrócić uwagę, że chociaż BIOS oferuje liczne usługi, zaleca się wykorzystywanie usług DOS'u - dla każdej nieomal usługi BIOS'u istnieje odpowiadająca jej funkcjonalnie usługa DOS'u. Ograniczenia możliwości funkcji DOS'u występują tylko dla usług związanych z monitorem ekranowym. Programy użytkowe Programy użytkowe mogą być przechowywane w zbiorach dyskowych o rozszerzeniach.com lub.exe i być ładowane do pamięci przez DOS w celu wykonania. Tzw. komendy zewnętrzne DOS'u są programami użytkowymi dostarczanymi przez Microsoft razem z właściwym systemem operacyjnym. Program użytkowy jest ładowany do pamięci przez DOS, a następnie wykonywany (co polega na przekazaniu sterowania do tego programu) po przyjęciu do wykonania komendy (z konsoli lub zbioru o rozszerzeniu.bat), na początku której występuje nazwa programu. Przed ładowaniem do pamięci programu użytkowego DOS tworzy na początku wolnego obszaru (TPA) 256-ciobajtowy obszar (jego adres początkowy podzielny jest bez reszty przez 16) zwany przedrostkiem segmentu programu PSP (Program Segment Prefix) zawierający informacje organizacyjne dotyczące programu. Programy typu.com i typu.exe ładowane są w różny sposób. Programy typu.com powinny zawierać się w obszarze nieco mniejszym niż 64 KB pamięci, a ich miejscem startu powinien być pierwszy rozkaz segmentu kodu. Zawartość zbioru dyskowego programu jest kopiowana bez analizy zawartości w obszar pamięci rozpoczynający się bezpośrednio za PSP, a wszystkie rejestry segmentowe ustawiane na tą samą wartość: część SEG adresu początkowego PSP. Rejestr IP ustawiany jest na wartość 100H (256), czyli wskazuje na pierwszy bajt za PSP. Programy typu.exe są ograniczone co do rozmiaru tylko pojemnością dostępnej w czasie ładowania pamięci (TPA). Zbiór dyskowy takiego programu zawiera nie tylko informację przewidzianą do załadowania do pamięci, ale także informacje opisujące m. in. budowę programu, żądane zawartości rejestrów segmentowych i miejsce startu. Segment kodu programu umieszczany jest bezpośrednio za PSP, zatem rejestr CS zawiera część SEG adresu pierwszego bajtu po PSP. Z programu typu.exe nie jest bezpośrednio dostępna (bez zmiany zawartości rejestrów segmentowych) zawartość PSP. Przedrostek segmentu programu zawiera wiele użytecznych informacji, w szczególności: - pod adresem 128 (80H) w PSP znajduje się jeden bajt określający długość parametrów w wierszu komendy, za pomocą której wywołano program do pracy (liczba znaków od separatora po nazwie programu poczynając); - od adresu 129 (81H) w PSP rozpoczyna się pole parametrów programu - końcowa część wiersza komendy, za pomocą której wywołano program do pracy; zawiera znaki od separatora (zwykle spacja lub znak /) po nazwie programu do końca wiersza; długość pola znajduje się pod adresem 128 PSP; uwaga: odczyt z dysku może zniszczyć ten obszar; - pod adresem 44 (2CH) znajduje się część SEG adresu początku pola opisu łańcuchów otoczenia (ustawiane są one komendą SET w DOS'ie), część OFFSET tego adresu jest równa 0; każdy łańcuch jest ciągiem ASCIIZ, tzn. ciągiem znaków ASCII zakończonych bajtem o wartości 0; sygnałem końca pola 7

opisów łańcuchów otoczenia jest bajt o wartości 0 w miejscu, gdzie oczekiwany jest początek kolejnego łańcucha; - pod adresem 2 w PSP znajduje się słowo zawierające część SEG adresu górnej granicy pamięci DOS'u; zwykle dostępna pamięć kończy się z końcem pamięci RAM obejmującej 640 KB, lecz może być ograniczona w instalacjach o mniejszej pamięci, lub w wyniku zajęcia końcowej części pamięci RAM, np. przez dysk wirtualny. Podstawy obsługi klawiatury w IBM PC Klawiatura w IBM PC obsługiwana jest przez BIOS. Mikroprocesor 8049 lub 8051 wbudowany w klawiaturę przesyła do karty głównej informację o wciśnięciu, zwolnieniu i przekroczeniu kolejnego interwału przytrzymywania każdego klawisza. Nadchodzenie tych informacji sygnalizowane jest przerwaniami 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ą różne i 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 umieszczany jest 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 klawisz 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. Nowe wersje BIOS'u (z datą generacji po 11/15/85) dla AT udostępniają dodatkowo funkcje 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. Spośród usług DOS'u związanych z klawiaturą, jedną z najbardziej przydatnych jest funkcja 10 (0AH) - tzw. wejście buforowe z klawiatury. Jego podstawową zaletą jest udostępnianie podstawowych własności edycyjnych (Delete, Backspace i Escape) obsługiwanych przez DOS. Przed wykonaniem rozkazu INT 33 należy ustawić w AH wartość 10 (0AH), zaś w DS:DX powinien znajdować się adres (FAR) pola buforowego, 8

którego pierwszy bajt (o adresie względnym 0, względem początku pola) powinien być ustawiony i zawierać długość bufora w bajtach. Wykonanie usługi polega na tym, że DOS kompletuje ciąg znaków na podstawie naciskanych klawiszy, aż do klawisza Enter lub osiągnięcia końca bufora. Ciąg ten umieszcza w polu buforowym od bajtu o adresie względnym 2 (trzeciego) poczynając, zaś w bajcie o adresie 1 (drugim) umieszcza długość ciągu, obejmującą też ostatni znak o kodzie 13 (0DH) odpowiadający klawiszowi Enter (o ile wystąpił). Podstawy obsługi ekranu w IBM PC Głównym urządzeniem wyjściowym mikrokomputera IBM PC jest monitor ekranowy sterowany za pomocą karty rozszerzeń (tzw. karta video). Jak już wspomniano wcześniej najbardziej rozpowszechnione obecnie są sterowniki monitorów monochromatycznych typu Hercules i monitorów kolorowych typu EGA. Niezależnie od typu sterownika na karcie rozszerzeń znajduje się pewien obszar pamięci RAM zwany pamięcią video, pamięcią obrazu lub wyświetlaną pamięcią. Jak sama nazwa wskazuje pamięć ta zawiera zakodowany zapis wyświetlanego obrazu. Sterownik zawiera sprzęt (m. in. zwykle układ CRTC 6845 Motoroli) i oprogramowanie zdolne do wykonania dwóch zasadniczych zadań: - wyświetlania na bieżąco obrazu na ekranie monitora na podstawie zdekodowywanej informacji z pewnego obszaru pamięci video; - wspomagania tworzenia opisu obrazu w pamięci video przez dostarczanie programiście pewnych podstawowych usług (np. zapisania w pamięci video informacji odpowiadającej zapisaniu znaku w wybranym miejscu ekranu). Urządzenia zewnętrzne powinny być w zasadzie obsługiwane za pomocą oprogramowania możliwie najwyższego poziomu (tzn. DOS'u) monitor ekranowy stanowi tu wyjątek: DOS nie udostępnia (poza wyprowadzaniem ciągu znaków) praktycznie żadnych usług wspomagających sterowanie monitorem. BIOS udostępnia sporo usług organizacyjnych i wspomagających wykorzystanie znaków, w praktyce jednak nie wspomaga grafiki. W rezultacie dość powszechne jest działanie bezpośrednio na zawartościach komórek pamięci video. Działanie takie wymaga jednak od programisty znajomości organizacji tej pamięci i sposobu kodowania poszczególnych elementów obrazu. Wyróżnia się dwa główne sposoby działania sterownika obrazu: znakowy i graficzny. Istnieje kilka trybów znakowych i graficznych o z góry ustalonych cechach - nie wszystkie są jednak dostępne dla wszystkich sterowników. W trybach znakowych pojedynczym elementem obrazu na ekranie jest znak. Znak jest obszarem prostokątnym, który może znajdować się na ekranie tylko w jednym ze ściśle określonych położeń: cały obraz na ekranie w trybie znakowym składa się z pewnej liczby wierszy i kolumn znakowych. Rozmiar pola znaku (w punktach) zależy od typu sterownika, zaś liczby kolumn i wierszy zależą od wybranego trybu znakowego. Każdy znak w pamięci video kodowany jest w postaci dwóch bajtów: pierwszy (o niższym adresie) zawiera kod znaku (ASCII), zaś drugi bajt (o adresie o 1 większym) zawiera tzw. atrybut, określający barwę lub stopień szarości znaku (tzw. kolor pierwszoplanowy), barwę lub stopień szarości tła i wskaźnik migotania znaku. Migotanie polega na okresowym przełączaniu koloru znaku z koloru pierwszoplanowego do koloru tła i odwrotnie. Bit sterujący migotaniem może być wykorzystywany jako bit sterujący jasnością koloru tła. 9

W trybie graficznym pojedynczym elementem obrazu jest punkt (pixel). Każdemu punktowi w pamięci obrazu odpowiada od jednego do kilku bitów kodujących kolor tego punktu. Dla całego ekranu ustalony jest jeden wspólny kolor tła. W trybach graficznych nie występuje migotanie. 10

Tablica trybów pracy sterowników obrazu Pamięć Tryb Rodzaj Rozdzielczość Sterowniki Kolory obrazu 00h Tekstowy 40 x 25 Oprócz MDA 16 stopni szarości B8000 01h Tekstowy 40 x 25 Oprócz MDA 16 znak/8 tło B8000 02h Tekstowy 80 x 25 Oprócz MDA 16 stopni szarości B8000 03h Tekstowy 80 x 25 Oprócz MDA 16 znak/8 tło B8000 04h Graficzny 320 x 200 Oprócz MDA 4 B8000 05h Graficzny 320 x 200 Oprócz MDA 4 stopnie szarości B8000 06h Graficzny 640 x 200 Oprócz MDA 2 B8000 07h Tekstowy 80 x 25 MDA,EGA,HGC czerń/biel B0000 0Bh Zarezerwowany (wewnętrzny dla EGA) 0Ch Zarezerwowany (wewnętrzny dla EGA) 0Dh Graficzny 320 x 200 EGA 16 A0000 0Eh Graficzny 640 x 200 EGA 16 A0000 0Fh Graficzny 640 x 350 EGA czerń/biel A0000 10h Graficzny 640 x 350 EGA 16 A0000 CGA i EGA bit nr: 7 6 5 4 3 2 1 0 B R G B I R G B Kolor tła Kolor pierwszego planu (znaku) migotanie Intensywność koloru znaku R - składowa czerwona barwy (Red); G - składowa zielona barwy (Green); B - składowa niebieska barwy (Blue). Dla karty Hercules (HGC) dopuszczalne są następujące postaci atrybutu: 76543210 B000I111 jasny znak na ciemnym tle; B111I000 ciemny znak na jasnym tle (wyświetlanie w kontrze); B000I001 podkreślenie. bit znaki gdy sterownik Wartość I R G B Monochrom. Kolor 0 0 0 0 0 Czarne Czarne 1 0 0 0 1 Podkreślone Niebieskie 2 0 0 1 0 Zielone 3 0 0 1 1 Cyjan 4 0 1 0 0 Czerwone 5 0 1 0 1 Magenta 6 0 1 1 0 Brązowe 7 0 1 1 1 Białe Białe 11

8 1 0 0 0 Szare 9 1 0 0 1 Jasne Podkr. Jasne Niebieskie 10 1 0 1 0 Jasne Zielone 11 1 0 1 1 Jasne Cyjan 12 1 1 0 0 Jasne Czerwone 13 1 1 0 1 Jasne Magenta 14 1 1 1 0 Żółte 15 1 1 1 1 Jasne Białe Jasne Białe Cyjan - kolor niebieskozielony; Magenta - fioletowy. gdzie: Obowiązują następujące reguły wyznaczania położenia bajtów opisujących znak w pamięci obrazu: AdK = 2*LK*Y + 2*X AdA = 2*LK*Y + 2*X + 1 AdK - adres kodu znaku względem początku strony w pamięci obrazu; AdA - adres atrybutu znaku względem początku strony w pamięci obrazu; LK - liczba kolumn w aktualnym trybie, LK {40,80}; X - numer kolumny pozycji znaku na ekranie, X {0..LK-1}; Y - numer wiersza pozycji znaku na ekranie, Y {0..24}. W trybie graficznym dla karty Harcules obowiązują następujące reguły lokalizacji w pamięci obrazu bitu opisującego punkt obrazu o współrzędnych (x,y): adres bajtu zawierającego bit: adb = 2000H*(y mod 4) + 90H*(y/4) + int(x/8) numer bitu w bajcie o adresie adb: nrb = 7 - (x mod 8) wartość 0 bitu oznacza punkt ciemny, zaś 1 - jasny. Należy jednak pamiętać, że tryb graficzny i zmiany trybów w przypadku sterownika Hercules nie są obsługiwane przez BIOS ani DOS. Dla BIOS'u sterownik ten zawsze jest w trybie 7 (symuluje MDA). Tylko działanie w trybie znakowym pozwala wykorzystywać odpowiednie funkcje BIOS'u. Przełączanie trybów i działania na pikselach w trybie graficznym wymagają sterowania portów wejścia/wyjścia karty Hercules. Pamięć wyświetlana w zależności od typu sterownika, własnej pojemności i aktualnego trybu pracy zwykle jest zdolna do przechowywania więcej niż jednego obrazu, który może być wyświetlany na ekranie. W takich przypadkach w pamięci wyświetlanej wyróżnia się stałe fragmenty (o ustalonych adresach początkowych) nazywane stronami. Można nakazać wyświetlanie dowolnej z tych stron. W niniejszym tekście wzory określające odwzorowanie informacji z pamięci w elementy obrazu zostały podane dla stron o numerze 0. BIOS na potrzeby obsługi obrazu udostępnia przerwanie 16 (10H), zaś w jego ramach 17 funkcji, identyfikowanych zawartością rejestru AH. Dalej opisano wybrane spośród tych funkcji. AH=0 - ustawienie nowego trybu wyświetlania: dane: AL - nowy tryb wyświetlania; wyniki: nie ma; AH=1 - ustawienie rozmiaru kursora: dane: CL (bity 4..0) - numer pierwszej (licząc od góry) linii kursora w polu znaku; CH (bity 4..0) - numer ostatniej (licząc od góry) linii kursora w polu znaku; wyniki: nie ma; 12

AH=2 - ustawienie położenia kursora: dane: BH - numer strony; DL - nr kolumny; DH - nr wiersza; wyniki: nie ma; AH=3 - odczytanie położenia i rozmiaru kursora: dane: BH - numer strony; wyniki : DL - nr kolumny, w której znajduje się kursor; DH - nr wiersza, w którym znajduje się kursor; CL (bity 4..0) - numer pierwszej (licząc od góry) linii kursora w polu znaku; CH (BITY 4..0) - numer ostatniej (licząc od góry) linii kursora w polu znaku; AH=4 - ustawienie numeru (przełączenie) strony wyświetlanej: dane: AL - nowy numer strony do wyświetlania; wyniki: nie ma; AH=8 - odczytanie znaku i atrybutu z pozycji wskazywanej przez kursor: dane: BH - numer strony; wyniki: AL - kod znaku; AH - atrybut; AH=9 - zapisanie znaku i atrybutu wielokrotnie na pozycji wskazywanej przez kursor: dane: BH - nr strony; AL - kod znaku; BL - atrybut; CX - liczba powtórzeń znaku; wyniki: nie ma; AH=10 (0AH) - zapisanie znaku wielokrotnie na pozycji wskazywanej przez kursor: dane: BH - nr strony; AL - kod znaku; CX - liczba powtórzeń znaku; wyniki: nie ma; AH=12 (0CH) - zapisanie punktu na ekranie (w trybie graficznym; funkcja niedozwolona dla dane: sterownika Hercules): AL - kolor punktu (piksela); CX - pionowa pozycja punktu (numer wiersza punktów na ekranie); DX - pozioma pozycja punktu (numer kolumny punktów na ekranie); BH - numer strony wyświetlanej; wyniki: nie ma; AH=13 (0DH) - odczytanie punktu z ekranu (w trybie graficznym; funkcja niedozwolona dla dane: sterownika Hercules): CX - pionowa pozycja punktu (numer wiersza punktów na ekranie); DX - pozioma pozycja punktu (numer kolumny punktów na ekranie); BH - numer strony wyświetlanej; wyniki: AL - kolor punktu (piksela); AH=14 (0EH) - zapisanie znaku na ekranie na polucji kursora i przesunięcie kursora (tzw. dane: zapis w trybie TTY): AL - kod znaku do zapisania; BL - kolor tła (gdy tryb graficzny); BH - numer strony; wyniki: nie ma; AH=15 (0FH) - pobranie aktualnego trybu video: dane: nie ma; wyniki: AL - tryb video; AH - liczba kolumn na stronie; BH - numer strony wyświetlanej. Spośród wymienionych tu funkcji przerwania 16 (10H) większość (poza zapisem znaku TTY) może spowodować zmiany rejestrów SP, BP, SI i DI. 13

DOS dostarcza jednej funkcji (w ramach tzw. przerwania usługowego o numerze 33 tj. 21H) wyprowadzania łańcucha znaków: AH=9 przy wywołaniu przerwania INT 33 (21H) - wyprowadzenie łańcucha znaków ograniczonego znakiem $ (dolara): dane: DS:DX - adres początku łańcucha znaków; wyniki: nie ma; łańcuch znaków powinien być zakończony znakiem $ (dolara), który nie będzie wysyłany na ekran. Nie ma sposobu wyświetlenia znaku dolara za pomocą tej funkcji. W oprogramowaniu IBM PC istnieją wbudowane mechanizmy pozwalające na komunikowanie się między sobą procesów (programów wymiennych w TPA i rezydujących). Szczególnie ważne są mechanizmy komunikacyjne pozwalające uniknąć osadzania się w pamięci operacyjnej kolejnych kopii tego samego programu rezydentnego. Najprostszym takim mechanizmem jest szesnastobajtowy obszar komunikacyjny tzw. ICA (Intra-Application Communications Area) położony w obszarze pamięci o adresach fizycznych od 004F0H do 004FFH, a zatem na końcu obszaru danych BIOS'u. Obszar ten może służyć jako wspólny dla wielu programów, w szczególności zaś jako międzyprogramowa skrzynka pocztowa. Minusem wykorzystywania tego obszaru w programach rozszerzających DOS, czy tzw. programach ogólnego przeznaczenia, jest fakt, że na ten sam świetny pomysł mogą wpaść także twórcy innych programów, co oczywiście spowoduje wzajemne uszkadzanie zapisanych informacji. Zaletą ICA jest możliwość pozostawiania informacji przez program usuwany z pamięci, dla programu powoływanego później. ICA dostępny jest w każdej wersji DOS'u. Do komunikacji między procesami może zostać użyte również przerwanie komunikacyjne o numerze 2FH. Wektor tego przerwania może zostać przechwycony przez dowolny program, obowiązuje jednak (poza oczywistym obowiązkiem odtwarzania stanu pierwotnego wektora przed usunięciem się programu z pamięci) zasada, że jeśli przerwanie nie jest adresowane do tego programu, to program powinien wykonać skok długi (JMP FAR) pod adres starego wektora przerwania nie zmieniając żadnych rejestrów. W przeciwnym wypadku należy po wykonaniu niezbędnych działań zakończyć obsługę przerwania za pomocą rozkazu IRET. Rejestr AH w trakcie wykonywania przerwania 2FH powinien zawierać numer procesu, do którego przerwanie jest adresowane. Programista może dla swoich programów wybrać numery z przedziału od 80H do 0FFH, poza 0B7H (już wykorzystanym dla komendy APPEND DOS'u). Zakłada się, że rejestr AL zawiera numer funkcji do wykonania przez procedurę obsługi przerwania, przy czym obowiązuje umowa, że AL=0 jest żądaniem ujawnienia obecności - w praktyce zalecana jest odpowiedź ustawieniem wartości równej 0FFH ("program już zainstalowany"). W przypadku "dojścia" wywołania tego programu do DOS'u, podprogram obsługi nie zmienia wartości AL, zatem wartość AL=0 w odpowiedzi oznacza "nie zainstalowany"). Zarezerwowane są jednak wartości AL {0F8H,..,0FFH} (podobnie jak AH {0,..,80H,0B7H}). Następujące komendy DOS'u (rezydentne) wykorzystują opisany tu mechanizm: PRINT z numerem procesu 1, ASSIGN z numerem 2, SHARE z numerem 10H i APPEND z numerem 0B7H. Niestety przerwanie komunikacyjne dotępne jest tylko dla wersji DOS'u 3.1 i późniejszych. Najbardziej wyrafinowanym rozwiązaniem jest zarezerwowanie przez programy niewielkiego obszaru pamięci i umieszczanie w nim przekazywanej informacji. Wymaga 14

to badania bloków allokacji pamięci DOS'u przez każdy nowy program korzystający z tego mechanizmu. Badanie to jest sposobem zlokalizowania obszaru komunikacyjnego w pamięci. Pamięć W DOS'ie 3.1 i wyższych wersjach cały obszar pamięci, który pozostaje po załadowaniu do pamięci zbiorów IBMBIO.COM i IBMDOS.COM jest zorganizowany w postaci obszarów o długościach podzielnych przez 16. Każdy z takich obszarów, nazywany blokiem, identyfikowany jest za pomocą części SEG adresu początkowego (część OFFSET jest równa 0). Każdy blok w pamięci poprzedzony jest w przestrzeni adresowej szesnastobajtowym obszarem zwanym blokiem allokacji (przydziału) pamięci. Adres Długość Budowa bloku allokacji pamięci: względny [B] Opis 00H 1 Bajt identyfikujący o wartości 4DH lub 5AH (znak "M" lub "Z") 01H 2 Identyfikator procesu lub typ bloku 03H 2 Długość (w paragrafach) właściwego bloku pamięci opisywanego przez ten blok allokacji 05H-0FH 9 Nieokreślone Dla każdego z procesów identyfikatorem jest adres (SEG) bloku pamięci zawierającego tzw. przedrostek segmentu programu (PSP). Bloki niezajęte mają typ (słowo o adresie względnym 1) równy 0. Inne typy bloków wykorzystywane są na potrzeby DOS'u i zainstalowanych driver'ów (np. 5 i 8). Bloki allokacji pamięci układają się w łańcuch w ten sposób, że następny blok allokacji leży pod adresem: SEG i+1 =SEG i +[SEG i :0003]+1 gdzie: SEG i - adres (SEG) i-tego bloku allokacji; [SEG i :0003] - długość obszaru allokowanego przez i-ty blok. Ostatni blok allokacji ma bajt identyfikujący równy 5AH ("Z") i w typowych konfiguracjach wskazuje na wartość 0A000H jako adres "następnego" bloku allokacji. Przy zwalnianiu obszarów pamięci, DOS łączy przylegające wolne bloki, ale nie przesuwa zajętych (jak np. E6RM w ODRZE 1305), co może prowadzić do zjawiska tzw. fragmentacji pamięci. Każdemu procesowi, w chwili tworzenia, przydzielany jest zawsze obszar pamięci zawierający kopię opisu łańcuchów otoczenia (blok opisu otoczenia) oraz obszar programu. Blok opisu otoczenia zawiera tzw. łańcuchy otoczenia (environment - ciągi znaków ASCIIZ) oraz zwykle ścieżkę i nazwę programu. Część SEG adresu tego obszaru dostępna jest w PSP pod adresem 02CH, część OFFSET adresu tego obszaru jest zawsze równa 0. Ponadto oczywiście programowi przydzielany jest obszar TPA od adresu początkowego PSP poczynając. Obszar przydzielony wstępnie programowi kończy się przed adresem, którego część SEG znajduje się pod adresem 02H w PSP (część OFFSET równa jest 0). Należy pamiętać, że DOS przydziela nowo ładowanemu programowi cały dostępny obszar TPA. Zatem po załadowaniu programu w systemie nie ma zwykle wolnej pamięci poza przypadkami, gdy występuje spowodowana wcześniej fragmentacja pamięci lub ładowanie odbywa się pod kontrolą specjalnych programów sterujących, np. DDOS (DoubleDOS'u). Programy załadowane do pamięci mogą zażądać więcej pamięci od DOS'u (np. dla załadowania nakładek) lub zwolnić część tej pamięci o ile to jest wskazane, potrzeba taka występuje np. w przypadku programów sterujących, takich jak Pathminder, Norton Commander, PCShell itp. powołujących inne programy pod swoją kontrolą. Programy rezydentne zbudowane w celu rozszerzenia systemu zwalniają zwykle końcową część przydzielonej im pamięci 15

operacyjnej kończąc swą część inicjującą (por. rolę rejestru DX w funkcjach "kończ z pozostaniem w pamięci"). Do uzyskania informacji o adresie początkowym PSP aktualnie działającego programu służy funkcja 98 (62H) przerwania usługowego (o numerze 33 tj. 21H) DOS'u: Funkcja 98 (62H) przerwania 33 (21H): Pobranie adresu segmentowego PSP Dane: Wyniki: Uwaga: AH=62H BX=część SEG adresu początkowego PSP (część OFFSET=0) dostarczany adres dotyczy programu, który jest aktualnie wykonywany "z punktu widzenia" DOS'u, tzn. ostatnio załadowany, lub na zasoby którego dokonano ostatnio przełączenia za pomocą funkcji 51H przerwania 21H. Identyczny efekt jak funkcja 98 (62H) daje funkcja 81 (51H) przerwania 33 (21H). Należy wspomnieć, że adres początku PSP służy DOS'owi jako identyfikator procesu, np. na potrzeby gospodarki zasobami. Do przełączania między zasobami procesów służy funkcja 80 (50H) DOS'u: Funkcja 80 (50H) przerwania 33 (21H): Przełączenie na zasoby innego procesu Dane: AH=50H BX=część SEG adresu początkowego PSP (część OFFSET=0) procesu, na którego zasoby ma nastąpić przełączenie Wyniki: nie ma Funkcja 73 (49H) przerwania 33 (21H): Zwolnienie bloku zajmowanej pamięci Do manipulacji przydzieloną pamięcią służą funkcje 72, 73 i 74 (tj. 48H, 49H i 4AH) przerwania 33 (21H): Dane: AH=49H ES=część SEG adresu początkowego zwalnianej pamięci Wyniki: CF=wskaźnik błędu (1 - błąd, 0 - OK) AX=kod błędu jeśli CF=1 Kody błędów: 7 - zniszczone bloki sterujące pamięci 9 - błędny adres bloku pamięci w ES Blok pamięci stanie się wolny - w słowie o adresie 1 jego bloku allokacji pamięci zostanie ustawiona wartość 0 i, w razie możliwości, zostanie on scalony z przyległymi niezajętymi blokami. Funkcja 72 (48H) przerwania 33 (21H): Próba zajęcia (przydziału) bloku pamięci Dane: AH=48H BX=liczba żądanych paragrafów (jednostek po 16 B) pamięci Wyniki: CF=wskaźnik błędu (1 - błąd, 0 - OK) część SEG adresu przydzielonej pamięci, gdy CF=0 AX= kod błędu, gdy CF=1 BX=rozmiar największego dostępnego bloku, gdy CF=1 Kody błędów: 7 - zniszczone bloki sterujące pamięci 8 - brak wolnej pamięci dostatecznych rozmiarów Funkcja ta spowoduje zajęcie (w obszarze pierwszego wolnego bloku o odpowiednich rozmiarach) żądanego bloku pamięci, poprzedzonego własnym blokiem allokacji, z identyfikatorem bieżącego procesu. Łańcuch bloków allokacji zostanie uaktualniony. Funkcja 74 (4AH) przerwania 33 (21H): Próba zmiany rozmiaru przydzielonego bloku pamięci Dane: AH=4AH BX=nowy rozmiar bloku pamięci 16

ES=część SEG adresu początkowego bloku pamięci Wyniki: AX=kod błędu, gdy CF=1 BX=maks. możliwy rozmiar bloku, gdy CF=1 Kody błędów: 7 - zniszczone bloki sterujące pamięci 8 - brak wolnej pamięci dostatecznych rozmiarów 9 - błędny adres bloku pamięci w ES Funkcja ta dokonuje zmiany długości bloku pamięci - zmienia się długość bloku wpisana w bloku allokacji wskazanego bloku pamięci, zaś cały łańcuch bloków allokacji jest uaktualniany. Dla zwolnienia pamięci zajmowanej przez normalny program wystarczy zwolnienie wszystkich bloków pamięci zajętych wcześniej za pomocą funkcji 48H a następnie wykonanie funkcji kończącej działanie programu (4CH) lub przerwania kończącego 20H (w tym ostatnim przypadku rejestr CS musi zawierać część SEG adresu PSP). Jeśli wcześniej nastąpiło przełączenie na zasoby innego procesu - np. w przypadku osadzonych programów rezydentnych, należy zwolnić bloki zajęte za pomocą funkcji 62H, blok pamięci zawierający łańcuchy otoczenia oraz blok pamięci samego programu (od PSP). Sygnalizowanie DOS'owi końca wykonywania programu Program może zakończyć pracę normalnie lub z pozostaniem w pamięci. Przez pozostanie w pamięci rozumie się zajęcie niektórych bloków pamięci operacyjnej. Bloki te stają się nieużyteczne dla DOS'u. Funkcja 76 (4CH) przerwania 33 (21H): Koniec działania procesu (EXIT) Dane: AH=4CH AL=kod powrotu Wyniki: nie ma Uwagi: Funkcja ta kończy działanie procesu, zamyka wszystkie zbiory, przenosi sterowanie z powrotem do procesu powołującego (zwykle jest to COMMAND.COM); kod powrotu jest jednobajtową wartością zapamiętywaną przez DOS, która to wartość może być sprawdzana za pomocą funkcji 4DH z programu lub za pomocą operatora ERRORLEVEL w komendach IF zbiorów przetwarzania wsadowego (*.BAT) DOS'u. Funkcja 49 (31H) przerwania 33 (21H): Koniec działania procesu z pozostaniem w pamięci Dane: AH=31H AL=kod powrotu DX=rozmiar (w paragrafach po 16 B) obszaru pamięci rozpoczynającego się od początku PSP, który ma pozostać niedostępny dla DOS'u (zajęty) po zakończeniu Wyniki: nie ma Uwagi: Funkcja ta nie powoduje zamknięcia otwartych zbiorów, ani zwolnienia bloków pamięci zajętych przez kończący pracę proces za pomocą funkcji 48H. Pozostanie też zajęty obszar kopii łańcuchów otoczenia (wskazywany przez słowo o adresie 2CH w PSP) utworzony przez DOS w czasie ładowania programu. 17

Przedrostek segmentu programu PSP Przedrostek segmentu programu PSP (Program Segment Prefix) zajmuje pierwsze 256 (100H) bajtów bloku przydzielanego procesowi przez DOS, poprzedzając bezpośrednio segment kodu programu. Adres segmentowy bloku programu, a zatem i adres PSP, stanowi dla DOS'u identyfikator procesu - za proces uważany jest każdy program dla którego utworzony został blok zawierający PSP i blok ten nie został zwolniony (przez zakończenie działania programu z usunięciem z pamięci lub funkcję 73). PSP poprzedzony jest blokiem allokacji pamięci o długości 16 B i adresie segmentowym równym dokładnie części SEG adresu PSP pomniejszonej o 1. Adres Długość Budowa PSP: względny [B] Opis 00H 2 Rozkaz INT 20H (0CDH, 20H) 02H 2 Koniec pamięci: część SEG adresu następnego obszaru pamięci po końcu bloku programu (zwykle jest to suma słów o adresach 1 i 3 z bloku allokacji pamięci), wartość ta ustalana jest w chwili tworzenia procesu i nie ulega później zmianie nawet w przypadku zmian długości bloku programu 04H 1 Zarezerwowane dla DOS'u 05H 5 CALL (FAR) seg:offset - wywołanie dyspozytora funkcji DOS'u (jednak nie powinno być wykorzystywane do wywoływania funkcji) 06H 2 Dostępna pamięć: liczba bajtów dostępnych w segmencie kodu programu (maks. 0FFF0H); słowo to jest częścią pola PSP rozpoczynającego się od adresu względnego 05H 0AH 4 Wektor obsługi przerwania o numerze 22H; DOS odtworzy ten stan wektora w początkowym obszarze pamięci po zakończeniu programu 0EH 4 Wektor obsługi przerwania o numerze 23H (obsługa Ctrl-Break); DOS odtworzy ten stan wektora w początkowym obszarze pamięci po zakończeniu programu 12H 4 Wektor obsługi przerwania o numerze 24H (błędu krytycznego); DOS odtworzy ten stan wektora w początkowym obszarze pamięci po zakończeniu programu 16H 22 Zarezerwowane dla DOS'u 2CH 2 część SEG adresu bloku pamięci zawierającego kopie łańcuchów otoczenia (environment) z chwili ładowania programu, nie zmienia się nawet w przypadku zwolnienia tego bloku w czasie pracy programu 2EH 34 Zarezerwowane dla DOS'u 50H 2 Rozkaz INT 21H (0CDH, 21H) 52H 1 Rozkaz RET FAR (0CBH) 53H 2 Zarezerwowane dla DOS'u 55H 7 Pole rozszerzające FCB1 5CH 16 Początek standardowego (nieotwartego) bloku sterującego zbiorem FCB1 (File Control Block) formułowany na podstawie pierwszego parametru z wiersza wywołania programu (jeśli wystąpił) 18

65H 6CH 80H 7 Pole rozszerzające FCB2; obszar ten jest częścią pola PSP rozpoczynającego się od adresu względnego 05CH. FCB1 i FCB2 "zachodzą na siebie", zatem jeśli mają być użyte oba FCB, to przynajmniej jeden powinien być przeniesiony w inne miejsce 20 Początek standardowego (nieotwartego) bloku sterującego zbiorem FCB2 formułowany na podstawie drugiego parametru z wiersza wywołania programu (jeśli wystąpił) 1 długość parametrów w wierszu wywołania programu (wraz z separatorem po nazwie programu i znakiem nowej linii) 81H 127 wiersz wywołania programu od separatora (włącznie) po nazwie programu do znaku Enter (0DH), nie zawiera nazwy programu; używany także jako domyślne położenie obszaru DTA (Disk Transfer Area) Uwaga: Programy nie powinny zmieniać wartości żadnego bajtu PSP poniżej 5CH w PSP, do chwili zakończenia działania (normalnego lub z pozostaniem w miejscu); programy rezydentne po zakończeniu mogą używać swobodnie całego PSP. Kontakty z dyskiem zwykle spowodują zniszczenie zawartości bufora komendy gdyż obszar DTA leży w tym samym miejscu co bufor komendy. Blok opisu otoczenia ENVIRONMENT W trakcie powoływania procesu oprócz głównego bloku programu (identyfikowanego adresem PSP) tworzony jest dodatkowy blok pamięci przydzielony temu procesowi, a zawierający kopię łańcuchów otoczenia (ustawianych w zbiorze CONFIG.SYS lub za pomocą komendy SET) oraz pełną ścieżkę i nazwę programu wraz z rozszerzeniem. DOS zawiera zarezerwowany obszar na przechowywanie łańcuchów otoczenia - standardowo o długości 160 B, jednak do bloku opisu otoczenia kopiowana jest tylko wykorzystywana część tego obszaru. Wielkość tego bloku może być różna od 160 B, gdy użyto parametru /e:wrt w wierszach SHELL zbioru CONFIG.SYS lub COMSPEC komendy SET; wartość liczbowa wrt (w bajtach) oznacza nową pojemność obszaru dla łańcuchów otoczenia. Należy pamiętać, że po utworzeniu bloku opisu otoczenia, jego treść nie jest aktualizowana przez DOS. Adres segmentowy tego bloku mieści się pod adresem względnym 2CH w PSP. Blok opisu otoczenia może zostać zwolniony przez program w dowolnym momencie (czyni tak np. program PRINT - standardowa komenda DOS'u) lecz jego adres w PSP pozostaje, co może powodować zakłócenia w pracy programów analizujących zawartość pamięci (np. programu SMAP). Dla niektórych programów wywoływanych automatycznie przez DOS, np. interpretera komend, w bloku opisu otoczenia nie jest umieszczana ścieżka i nazwa programu, oznacza to, że program został wywołany wg wartości łańcucha COMSPEC, zawsze występującego jako pierwszy. Blok opisu otoczenia zawiera (od adresu względnego 0 poczynając) ciąg łańcuchów ASCIIZ, tzn. ciągów znaków ASCII zakończonych znakiem o kodzie 00H (NUL) traktowanym jako znacznik końca i stanowiącym integralną część tego łańcucha. Pierwszym ciągiem jest zwykle łańcuch lokalizujący interpreter komend, rozpoczynający się od COMSPEC=; po ostatnim łańcuchu ASCIIZ występuje dodatkowy bajt o wartości 00H (NUL), identyfikujący koniec skopiowanego obszaru łańcuchów otoczenia - zatem znacznikiem końca tego obszaru jest słowo o wartości 0: pierwszy bajt tego słowa jest znacznikiem końca ostatniego łańcucha, drugi zaś znacznikiem końca całego obszaru; 19

bezpośrednio po tym słowie następuje kolejne słowo o wartości 0000H lub 0001H. Jeśli po znaczniku końca obszaru łańcuchów otoczenia znajduje się słowo o wartości 0000H oznacza to, że proces jest interpreterem komend wywoływanym wg wartości łańcucha COMSPEC. Jeśli po znaczniku końca obszaru łańcuchów otoczenia znajduje się słowo o wartości 0001H (kolejno bajty 01H i 00H) oznacza to, że bezpośrednio po tym słowie rozpoczyna się łańcuch ASCIIZ identyfikujący pełną ścieżkę dostępu i nazwę (wraz z rozszerzeniem) zbioru, z którego ładowany był proces. Bajt o wartości 00H stanowiący ostatni znak tego łańcucha jest jednocześnie znacznikiem końca istotnej części bloku. Na końcu bloku mogą znajdować się jeszcze znaki uzupełniające długość bloku do wartości podzielnej przez 16. Długość bloku opisu otoczenia nie jest bezpośrednio związana z wielkością obszaru zarezerwowanego przez DOS na przechowywanie łańcuchów otoczenia. Główny semafor DOS'u Głównym semaforem DOS'u nazwano bajt, którego zawartość nieustannie zmienia się w czasie działania systemu i sygnalizuje, czy możliwe jest użycie funkcji DOS'u (przerwania usługowego 21H). Wartość 0 semafora oznacza, że można wywołać funkcję systemową, wartość różna od zera zabrania wywołań. Semafor ten ustawiany jest w stan różny od zera zwykle w trakcie obsługi wywołań funkcji systemowych, zatem w czasie wykonywania normalnego programu nie ma potrzeby sprawdzania tego semafora. W programach rezydentnych wywoływanych asynchronicznie - np. pobudzanych przerwaniem zegarowym, sprawdzanie semafora przed wywołaniem funkcji systemowych jest konieczne. Sprawdzanie semafora nie jest konieczne również w podprogramach wywoływanych przez DOS przerwaniem 28H. Funkcja 52 (34H) przerwania 33 (21H): Pobranie adresu semafora systemowego Dane: Wyniki: Uwagi: AH=34H ES:BX - adres FAR głównego semafora systemowego Odczytanie adresu semafora systemowego powinno nastąpić w czasie gdy funkcje systemowe na pewno są dostępne. Przerwanie o numerze 40 (28H) wywoływane jest przez DOS (podobnie jak przerwania 22H, 23H i 24H) w sytuacjach gdy oczekuje on na zakończenie podjętych dłuższych akcji lub na zlecenie. Przechwycenie tego przerwania może pozwolić programom rezydentnym na wykonanie zadań, które nie mogły być wykonane przy wywołaniu asynchronicznym ze względu na stan semafora systemowego i konieczność przywołania funkcji systemowych. Przerwanie to jednak ze względu na nierównomierną częstość wykonywania może okazać się narzędziem o ograniczonej stosowalności. W podprogramach obsługi tego przerwania należy bezwzględnie chronić stan wszystkich rejestrów procesora. W przypadku gdy przerwanie 28H nie spełnia oczekiwań twórcy programu rezydentnego, możliwe jest przechwycenie przerwania zegarowego. Przerwanie zegarowe użytkownika o numerze 28 (1CH) wywoływane jest przez podprogram obsługi zegara systemowego 18.2 razy na sekundę tzn. co 55 ms. Nie należy mylić przerwania zegarowego użytkownika (1CH) z systemowym przerwaniem zegarowym o numerze 08H wywoływanym sprzętowo. Przerwanie 1CH jest wywoływane z podprogramu obsługi przerwania 08H. 20