
I. rész
Miután sikeresen kiveséztük a DOS-t lépjünk tovább és tekintsünk
egy réteggel mélyebbre a számítógép belső világába.
A PC BIOS
A BIOS (Basic Input/Output System - alapvető ki-/beviteli rendszer) - mint
neve is mutatja - a legelemibb ki-/beviteli funkciókat ellátó szoftver,
amely minden PC-ben megtalálható. (Igazából a BIOS-okat nem is szoftvernek,
hanem firmware-nek szokták hívni, mert olyan szoros egységet képeznek az
alaplap hardverével.) A PC-kben több fajta BIOS is megtalálható. A rendszer
BIOS-on kívül az EGA vagy fejlettebb video-rendszert tartalmazó gépekben
egy video BIOS is található ami a megjelenítő egység vezérlését végzi.
A bővítő kártyák is rendelkezhetnek BIOS-okkal, amik speciális egységek
vezérlését végzik (pl. LAN adapter - Boot eprom ; SCSI vezérlő - SCSI BIOS,
stb.). Ezeken kívül minden rendszer tartalmaz egy billentyűzet-vezérlő
BIOS-t (Keyboard Controller BIOS) is a billentyűzet-illesztőben.
Bár a PC-kben több BIOS is található, a ROM BIOS szó alatt általában
specifikusan a rendszer-BIOS-t (a továbbiakban BIOS) szokás érteni. A BIOS
nem más, mint inicializációs rutinok és primitív eszközmeghajtók gyűjteménye.
A BIOS elsődleges feladata - szoftver-megszakításokon keresztül - olyan
funkciók nyújtása, melyek segítségével egyszerű műveletek végezhetők el,
mint olvasás vagy írás a merevlemezre, a hajlékonylemezes meghajtóra vagy
a képernyőre. Ezen rutinok jelentősége absztraktságukban rejlik: olyan
eszköz-független szolgáltatásokat bocsátanak az operációs rendszer és a
programok rendelkezésére, melyek a rendszerben installált konkrét eszköz
típusától függetlenül, minden környezetben egységes módon teszik lehetővé
a minden egység által támogatott, de amúgy különböző módon kiváltható funkciók
elérését. A gyakorlatban ez azt jelenti, hogy például a video-megjelenítő
típusától függetlenül, ugyanazzal a BIOS funkcióhívással lehet egy karaktert
kiírni a képernyőre, annak ellenére, hogy például a különböző adapterek
video-memóriája eltérő címeken helyezkedik el, így közvetlen elérésük esetén
nem lehetne - ebből a szempontból - egységesen kezelni őket.
E technika részint jelentősen csökkenti az alkalmazások méretét - hiszen
azokat nem kell felkészíteni az összes ismert, de esetleg eltérő programozású
egység kezelésére - másrészt lehetőséget biztosít a rendszer, az alkalmazások
számára "láthatatlan" bővítésére, átalakítására, esetlegesen emulációk
közbeiktatására. Többek között ennek köszönhető, hogy még a legújabb SVGA
kártyákon és SCSI illesztésű merevlemezeken is (nagyrészt) hibátlanul futnak
a BIOS rutinokat használó olyan alkalmazások is, melyek megalkotásakor
még csak hajlékonylemezes meghajtók és Hercules illesztők léteztek. A BIOS
rutinok használatának azonban ára van. Egyrészt - az absztrakció lényegéből
adódóan - elérhetetlenné válnak az egységek specialitásai, másrészt - többek
között az előző következményeként - a BIOS szervzirutinok legtöbbje meglehetősen
lassú a közvetlen programozással elérhető sebességhez képést. Így minden
egyes program esetében egyedi mérlegelés tárgyát kell, hogy képezze a BIOS
rutinok vagy a közvetlen programozás alkalmazásának kérdése. Általánosságban
elmondható, hogy a nem különösebben sebességkritikus feladatok esetén célszerűbb
- többek közt a kompatibilitás érdekében - a BIOS szervizrutinokra támaszkodni
és csak akkor a hardver közvetlen programozásához folyamodni , ha a BIOS
rutinok alkalmazása nem vezet elfogadható sebességhez vagy nem teszi lehetővé
az egység által nyújott és az alkalmazás által megkövetelt speciális szolgáltatások
elérését.
Az újabb alaplapokon a BIOS általában ún. Flash-EPROM-ban van tárolva.
A Flash-EPROM elektornikus úton - meglehetősen gyorsan - törölhető és újraírható
memória-egység. Ezen BIOS-ok előnye, hogy időközben megjelenő újabb változataik
a ROM modul fizikai kicserlésése helyett egy egyszerű segédprogram segítségével
betölthetők.
A RENDSZER INDÍTÁSÁNAK MENETE
A számítógép bekapcsolása vagy hidegindítása (RESET) után a processzor
a vezérlést a 0FFFF0h fizikai címre adja. A memória ezen területére a ROM-BIOS
van betükrözve. A ROM-BIOS POST (Power-On Self Test - bekapcsolási önteszt)
ezek után a következő műveleteket végzi el:
-
letiltja a megszakításokat (köztük az NMI-t is, mert a memóriacellák bitjei
véletlenszerűen állítódnak be a reset után, és ez azok elérésekor "paritáshibát"
okozhat),
-
teszteli a flageket és a CPU egyéb regisztereit,
-
ellenőrzi a ROM-BIOS ellenőrzöösszegét (checksum),
-
engedélyezi a megszakításokat,
-
inicializálja és teszteli a DMA vezérlőt,
-
ellenőrzi a memória első 64KB-ját (a megszakítás-vektor táblázat miatt),
-
inicalizálja és teszteli a megszakítás-vezérlőt és beállítja a 10h-17h
BIOS megszakításokat,
-
rendszer-konfiguárció (megjelenítő, memória, stb) megállapítása,
-
inicalizálja és teszteli a CRT-kontrollert, a video-memóriát és a video-BIOS-t,
-
inicalizálja és teszteli a programozható időzítőt,
-
inicalizálja, teszteli majd engedélyezi a billentyűzetet,
-
beállítja a hardver megszakítás-vektorokat,
-
memória tesztelése (kivéve, ha a CMOS-ban a reset word értéke 1234h),
-
a C8000h-EFFFFh közti területen ROM-bővítéseket keres és ha talál elindítja
azokat,
-
inicalizálja és teszteli a floppy- és merevlemezes meghajtó(ka)t, ha van(nak),
-
megkeresi és inicializálja a soros és párhuzamos illesztőket,
-
engedélyezi az NMI-t,
-
az első hajlékony- vagy merevlemezes meghajtóról megpróbálja betölteni
a boot-szektort ill. a partíciós táblát,
-
ha ez nem sikerül, akkor egy INT 18h-val megpróbáljani elindítani a ROM-BASIC-et.
Minden teszt megkezdése előtt a diagnosztikai porta a tesztnek megfelelő
kódot ír ki. Ez a kód egy 16-bites (word) szám, melynek felső 8 bitje az
egységet azonosítja, míg az alsó nyolc bitje a teszt eredményét tartalmazza
(00h - ha a teszt sikeres volt).
BŐVÍTŐ ROM-OK
A bővítőkártyákon elhelyezhető ROM egységek lehetőségét biztosítanak a
BIOS rutinjainak az adott egység igényei szerinti kiegészítésére vagy átalakítására.
A bővítő ROM-okat a rendszer-BIOS a POST során keresi meg és inicializálja.
A ROM-ok a C0000h-DFFFFFh memória-tartományban helyezkedhetnek el. Minden
ROM BIOS egy egységes fejlécet tartalmaz, melynek felépítése a következő:
RomHeader |
Offset
|
Méret
|
Leírás
|
|
00h
|
2
|
AA55h (bővítő ROM szignatúra) |
|
02h
|
1
|
a ROM blokk hossza 512 bájtos egységekben |
|
03h
|
n
|
BIOS program-kód (0003h az inicializációs kód belépési
pontja) |
A rendszer-BIOS a bővítéseket az AA55h szignatúra alapján és a megadott
hosszúságú kód 8 biten vett összegének (összeg modulo 256) 0-val való összehasonlításával
ismeri fel. Ha a POST rutin érvényes fejlécet talál a megadott tartományban,
akkor egy távoli ugrással (call far) a belépési pontra adja a vezérlést.
A bővítő-BIOS inicalizációs rutinja az egység alaphelyzetbe állítása és
a megfelelő megszakításvektorok esetleges átirányítása után visszaadja
a vezérlést a POST rutinnak, ami tovább folytatja a bővítések keresését.
