Power On Self Test (zkráceně POST) je diagnostický program, který kontroluje hardware v zařízení a zároveň i jeho činnost. Spouští se automaticky po startu přístroje (počítač, router nebo i tiskárna). Termín POST se však stal populárním až v souvislosti se šířením osobního počítače.
Jeho průběh začíná obvykle inicializací a konfigurací procesoru a následným spuštěním série testů ke zjištění, zda počítačový hardware pracuje správně. Případné chyby zjištěné v průběhu testu jsou uloženy nebo oznámeny prostřednictvím vizuálních (blikání LED nebo zobrazením textu na displeji) nebo zvukových prostředků (série pípnutí – tzv. beep kód). Po dokončení je řízení předáno bootovací sekvenci volající ovládací software, nebo zavaděč operačního systému.
POST se vyvinul z přímočarého jednoduchého procesu na poměrně složitý a spletitý. Je to dáno obrovským množstvím hardwaru a dalších standardů, který musí podporovat. Průměrný uživatel má tak povědomí o průběhu POSTu na osobních počítačích buď pouze prostřednictvím jednoduchých zpráv zobrazených v textovém režimu ihned po startu počítače, nebo je skryt za grafickým logem výrobce základní desky (je tu však možnost v Setupu BIOSu přepnout do textového režimu).
náhled|Jedna z fází průběhu POST náhled|Poslední z fází průběhu POST
Hlášení chyb náhled|BIOS POST karta určená pro sběrnici ISA Původní IBM BIOS hlásil chyby zjištěné během provádění POST tak, že odeslal číslo na výstupní pevnou adresu I/O portu 80. V pozdějších letech používali prodejci BIOSu posloupnosti pípání z připojeného reproduktoru známé jako beep kódy. Někteří výrobci vyvinuli vlastní varianty nebo vylepšení, jakým je např. D MSI-Bracket.
Prostřednictvím logického analyzátoru nebo specializované POST karty (na obrázku) zobrazující hodnoty na výstupní port 80 na malém displeji, může servisní technik určit původ problému. Tato činnost však není jednoduchá, neboť dnes existuje nepřeberné množství základních desek a jejich BIOSů a tedy i hodnoty těchto kódu signalizujících odlišný problém. K jeho určení je tak zapotřebí vlastnit servisní manuál. POST karty jsou k dostání i v prodejnách, jejich cena se však pohybuje v rozmezí 500–1500 Kč (v roce 2010) podle výbavy.
POST na platformě PC U osobního počítače je dnes POST nejčastěji řízen BIOSem. Skutečné testy a jejich posloupnost jsou závislé na spoustě faktorů, zejména informacemi uloženými v paměti BIOSu. Obvykle jsou však prováděny v následujícím pořadí.
Po stisku tlačítka napájení Stisknutím tlačítka napájení odešle PSU (Power Supply Unit – centrální jednotka napájení) signál základní desce skládající se z jedniček. Ta mu ho zase odešle zpět a po jeho obdržení PSU, začne okamžitě procházet elektrický proud celým systémem. Čítač/časovač (konkrétně se většinou jedná o obvod Intel 8284) začne posílat procesoru resetovací příkaz (tím je zajištěno resetování nebo i vypnutí počítače v případě přetížení, kolísavého napětí nebo přehřátí zdroje). Po skončení všech interních testů, kdy je proud dodáván všemi součástmi a je stabilizováno vstupní napětí (tj. zjištěny standardní hodnoty napětí v toleranci ±20%), začne odesílat zdroj přes port P8 pin 1 čítači na základní desce +5V signál nazývaný POWER GOOD (někde POWER_OK či POK) s přípustnou tolerancí od +2,4V do +6,0V (patrně logika TTL). Doba mezi vlastním zapnutím počítače a prvním odesláním POWER_GOOD je většinou v rozmezí od 0,1 do 0,5 sekundy.
Základní testy Na začátku rutiny BIOS zkontroluje sám sebe pomocí kontrolního součtu. Následně se spustí kontrola dat uložených na CMOS paměti (později EEPROM, u nejnovějších FLASH), přičemž na ní proběhne zároveň test zápisu/čtení. Jedná se o malou oblast paměti (64–256 bajtů), napájenou z malé baterky umístěné na základní desce. Obsahuje základní konfiguraci počítače nastavené pomocí Setupu BIOSu, jako např. informace o paměťových médiích, pořadí bootování, datum a čas a jiné. Nahrazuje konfigurační přepínače u starších modelů PC. Jelikož je spolu s obvodem reálných hodin zálohovaná z baterie (nebo u novějších základních desek vysokokapacitním elektrolytickým kondenzátorem), není závislá na napájení počítače. Je dostupná pomocí svého řadiče jako dvojice portů s adresami 70h (zde se zapisuje adresa) a 71h (odtud se čtou nebo zapisují data). Pokud se tedy provádí zápis nebo čtení musí se nejprve poslat adresa paměťové buňky na port 70h a pak se zapíšou nebo čtou data na portu 71h. Kontrola probíhá pomocí kontrolního součtu a to tak, že se jednoduše sečtou všechny požadované hodnoty bajtů na adresách, uloží se jejich nejspodnější dva bajty a ověří se součtem již uloženým a to z adresy 2Eh a 2Fh. Do procesu se zahrnují adresy 10h až 2Dh (prvních 16 bajtů slouží pro hodiny). Bližší informace o rozmístění dat v této paměti naleznete v článku BIOS.
První fáze POST testu Nyní proběhne kontrola technických prostředků počítače, informace o jejich konfiguraci jsou zjišťovány z propojek na základní desce počítače nebo z paměti CMOS. Nastavení jsou postupně konfrontována se skutečností. Tomuto procesoru se obecně říká POST. Výsledky testů se zapisují na porty 060H a na I/O port 080H (zde se ohlásí akusticky). Hodnoty jsou v rozmezí od 00h (stejné chyby při spuštění prvního BIOS příkazu k CPU) do FFh (POST dokončen, tento kód se odešle na 80h).
Základní inicializace Nastane vnitřní příprava procesoru a inicializace základních zařízení. Prvních 16 záznamů v tabulce vektorů přerušení se naplní ukazateli na přerušovací rutiny služeb (ISRs) se sídlem v BIOS ROM. Proběhne test přechodu do chráněného režimu a zpět. Maskovatelná přerušení jsou od teď zapnuta, aby bylo možné zachytávat a zpracovat přerušení dalších zařízení, neboť se budou zpracovávat BIOSy jiných zařízení.
Provede se tedy test systémového řadiče, řadiče paměti a řadiče I/O obvodů, obvodu přímého přístupu do paměti (DMA), časovači systému a programovatelného periferního rozhraní a nakonec ověření prvních 64 kB paměti (tu pak BIOS používá jako pracovní oblast). Případné chyby jsou interpretovány pomocí zvukových signálů ze speakru počítače, známé jako beep kódy. Pořadí kontrol zařízení se může mezi výrobci lišit. Všechny vstupně/výstupní sběrnice a řadiče musí být funkční. Dále proběhne vyhledání a přečtení konfiguračních informací uložených v CMOS. Nejdůležitější informací v CMOS, je z hlediska bootovacího procesu pořadí zařízení, která budou zkoušena pro zavedení operačního systému (FDD, CD-ROM, HDD, apod.). Nepovinně (záleží opět na konfiguraci) uloží (do oblasti RAM) BIOS některé rutiny, takže jsou pak rychlejší. Tato operace se nazývá jako shadow RAM. OS/2 a Windows však tyto rutiny nevyužívají, takže v těchto případech není důvod stínování zapínat. Použité místo v RAM je však někdy využíváno zařízeními IDE, což může způsobit problémy.
Vyhledávání rozšiřujících modulů Přestože jsou základní technické prostředky počítače již inicializovány, nemusí být všechna zařízení připravena k použití operačním systémem. Obsluhu těchto zařízení provádí malé podprogramy – tzv. rozšiřovacích moduly BIOSu. V podstatě se jedná o jakýsi miniaturní firmware. V rezervované paměti počítače je vyhrazen adresový prostor C0000h až DFFFFh, kde mohou být rozšiřovací moduly BIOS umístěny. Protože počítač o připojených zařízeních nic netuší, začne prohledávat tento rozsah paměti. Toto prohledávání probíhá tak, že je na začátku každého bloku paměti o velikosti 2 kB očekáván identifikační kód rozšiřovacího modulu, jehož přibližná kostra je popsána v tabulce:
offset obsah 0 55h – Identifikace hlavičky 1 AAh – Identifikace hlavičky 2 Délka ROM v 512B blocích 3 Délka ROM v 512B blocích … … n Dvojkový doplněk ke kontrolnímu součtu
První dva bajty musí nutně být 55h a AAh, neboť se podle nich poznává přítomnost ROM. Další bajt je délka ROM v 512B blocích, například ROM s délkou 16 kB bude mít zde číslo 32 (20h). Za tímto bajtem musí následovat spustitelný kód, který inicializuje příslušné vnějšího zařízení a případně upraví potřebné přerušovací vektory v tabulce vektorů přerušení. Nakonec je vráceno řízení POSTu na systémové desce prostřednictvím instrukce RETF (nesmí být použita jiná), který pokračuje v prohledávání zbylého prostoru.
Celý obsah ROM (vč. hlavičky) je zajištěn kontrolním součtem, který je dán součtem všech bajtů obsažených v ROM modulo 256 (100h). Takto spočtený kontrolní součet musí mít nulovou hodnotu. Rozsah bajtů, který bude do součtu zahrnut, je dán právě bajtem udávajícím délku modulu. Bajty, které nejsou využívány do nejbližší adresy dělitelné 2024, jsou nastaveny na nulu, aby neovlivňovaly výsledný výpočet.
Vlastní prohledávání oblasti rozšiřujících modulů lze rozdělit do dvou fází:
1. Nejprve se prohledává adresový prostor video ROM – C000:0000h až C780:0000h, kde mohou být uloženy rutiny grafických karet a to jak zapojených do slotů, tak i integrovaných (= inicializace videokarty). Pokud nějakou rutinu najde, je testována, jak už byl zmíněno, pomocí kontrolního součtu. Pokud kontrola proběhne v pořádku, je rutina vykonána, video ROM se inicializuje a zobrazí se kurzor nebo u novějších zařízení informace o kartě, případně grafická obrazovka výrobce zařízení (To je důvod, proč na moderních PC obvykle vidět něco na obrazovce o grafické kartě, než se zobrazí zprávy ze samotného systému BIOS). Chyby kontrolního testu jsou generovány zprávou
C000 ROM Error
kde C000 označuje špatný adresový segment. Nenajde-li se žádná taková rutina, použije se základní video ROM driver a v případě úspěchu se zobrazí kurzor. Nyní se inicializuje video adaptér, testuje video karta a videopaměť a zobrazí se konfigurační informace nebo chyby nebo jen kurzor.
2. ROM BIOS dále skenuje adresy C800:0000h až DF80:0000h po 2 kB blocích a hledá jiná zařízení ROM ostatních adaptérů. Proces testování probíhá stejným způsobem s tím, že chyba je generována ve tvaru
XXXX ROM Error
kde XXX označuje segment chybového modulu. Tyto rutiny mohou měnit zároveň stávající ROM BIOS rutiny či vytvářet nové. Obyčejně se na adrese C8000h nachází např. IDE/ATA řadič. Následující tabulka ukazuje přehled obsahu paměti na AT/XT počítačích:
+Rámcový přehled obsazení pamětí PC/XT/AT (zde s MS/DOSem) adresa význam 0000:0000 Tabulka vektorů přerušení složená z 256 čtyřbajtových adres. 0040:0000 Proměnné ROM-BIOSu. 0050:0000 Proměnné DOSu. a000:0000 Paměť EGA (Enhanced Graphics Adapter) v některých režimech. b000:0000 Videopaměť adaptéru MDA (a karet Hercules). b800:0000 Videopaměť adaptéru CGA. c800:0000 až e000:0000 Kod externí ROM. BIOS tuto oblast prohlíží po 2K blocích a hledá kód, který lze spustit. Takové ROMy obyčejně instalují ovladače zařízení (např. harddisk nebo EGA-BIOS). e000:0000 az e000:ffff Další rozšiřující ROM moduly na základní desce. f600:0000 ROM-rezidentní interpreter BASICu (jenom u orig. IBM) fe00:0000 ROM-BIOS: POST a kód studeného startu, obsluhy přerušení atd. f000:fff0 Instrukce JMP na první instrukci, provede se po zapnuti/resetu. f000:fff5 Datum verze BIOSu (v ASCII). f000:fffe Identifikační kód IBM PC.
Ukončovací rutiny Poté BIOS zjistí původce resetu otestováním kódu. Ten je uložen na adrese FHh v CMOS a může nabývat následujících hodnot:
Hodnota Význam 0 Start pomocí CTRL+ALT+DELETE (tzv. teplý start) 1 Start při konfiguraci paměti 2 Start po testu paměti 3 Start po chybě paměti 4 Start před zavedením systému 5 Start při vygenerovaném skoku 0476 6–8 Po návratu z chráněného režimu 9 Při přesunu paměti v chráněném režimu 10 Při skoku JMP FAR na adresu 0467
Poté zkontroluje hodnotu na adrese 0000:0472h, na základě které určí, jak bude probíhat druhá fáze POSTu. Byl-li RESET vyvolán pomocí kombinace kláves CTRL+ALT+DELETE, je hodnota této adresy 1234h (ve formátu little endian, kde nejméně významný bajt přichází jako první, bude v paměti jako 3412h) a provede se tedy tzv. teplý start, jinak je hodnota náhodná a provede se tzv. studený start. Při studeném startu provede ROM BIOS úplnou verzi POST, jinak vynechá test paměti a některé další inicializační rutiny.