BIOS-Interrupt-Aufruf - BIOS interrupt call
BIOS- Interrupt- Aufrufe sind eine Einrichtung, die Betriebssysteme und Anwendungsprogramme verwenden, um die Einrichtungen der Basic Input/Output System- Software auf IBM PC-kompatiblen Computern aufzurufen . Traditionell werden BIOS-Aufrufe hauptsächlich von DOS- Programmen und einiger anderer Software wie Bootloader verwendet (einschließlich historisch gesehen relativ einfacher Anwendungssoftware, die direkt bootet und ohne Betriebssystem läuft – insbesondere Spielesoftware). Das BIOS läuft im Real-Address-Mode (Real Mode) der x86-CPU, daher müssen Programme, die das BIOS aufrufen, entweder auch im Real-Mode laufen oder vom Protected-Mode in den Real-Mode wechseln, bevor sie das BIOS aufrufen und wieder zurückschalten. Aus diesem Grund verwenden moderne Betriebssysteme , die die CPU im geschützten Modus oder im langen Modus verwenden, im Allgemeinen die BIOS-Interrupt-Aufrufe nicht zur Unterstützung von Systemfunktionen, obwohl sie die BIOS-Interrupt-Aufrufe verwenden, um Hardware während des Bootens zu prüfen und zu initialisieren . Der Real-Modus hat die Speicherbeschränkung von 1 MB, moderne Bootloader (zB GRUB2 , Windows Boot Manager ) verwenden den Unreal-Modus oder den Protected-Modus (und führen die BIOS-Interrupt-Aufrufe im Virtual 8086-Modus aus , aber nur zum Booten des Betriebssystems), um auf bis zu 4 GB zuzugreifen Erinnerung.
Bei allen Computern steuern Softwareanweisungen die physische Hardware (Bildschirm, Festplatte, Tastatur usw.) vom Moment des Einschaltens an. Bei einem PC übernimmt das BIOS, das im ROM auf dem Motherboard vorgeladen ist, sofort nach dem Zurücksetzen der CPU die Kontrolle, auch während des Hochfahrens, wenn eine Hardware-Reset-Taste gedrückt wird oder wenn ein kritischer Softwarefehler (ein dreifacher Fehler ) vorliegt. bewirkt, dass die Mainboard-Schaltung automatisch einen Hardware-Reset auslöst. Das BIOS testet die Hardware und initialisiert ihren Zustand; findet, lädt und führt das Bootprogramm aus (normalerweise ein Betriebssystem-Bootloader und historisches ROM BASIC ); und bietet grundlegende Hardwaresteuerung für die auf der Maschine laufende Software, die normalerweise ein Betriebssystem (mit Anwendungsprogrammen) ist, aber eine direkt bootende einzelne Softwareanwendung sein kann.
Auf Seiten von IBM lieferten sie bei der Programmierung der frühen IBM PC-Modelle (vor PS/2) alle notwendigen Informationen, um ihr BIOS vollständig zu nutzen oder die Hardware direkt zu nutzen und das BIOS vollständig zu vermeiden. Von Anfang an hatten Programmierer die Wahl, ob sie das BIOS verwenden möchten oder nicht, auf Hardware-Peripherie-Basis. IBM hat die Autorenschaft von "guten" Programmen, die nur über BIOS INT-Aufrufe (und DOS-Serviceaufrufe) auf Hardware zugreifen, nachdrücklich gefördert, um die Kompatibilität von Software mit aktuellen und zukünftigen PC-Modellen mit unterschiedlicher Peripheriehardware zu unterstützen, aber IBM hat dies für einige verstanden Softwareentwicklern und Hardwarekunden war eine Fähigkeit der Anwendersoftware zur direkten Steuerung der Hardware erforderlich. Dies lag zum Teil daran, dass ein erheblicher Teil aller Hardwaremerkmale und -funktionen nicht von den BIOS-Diensten verfügbar gemacht wurde. Für zwei Beispiele (unter vielen) sind die MDA- und CGA-Adapter in der Lage, Hardware zu scrollen, und der serielle PC-Adapter ist in der Lage, Interrupt-gesteuerte Datenübertragungen durchzuführen, aber das IBM BIOS unterstützt keine dieser nützlichen technischen Funktionen.
Heute unterstützt das BIOS in einem neuen PC immer noch die meisten, wenn nicht sogar alle der von IBM für das IBM AT (eingeführt 1984) definierten BIOS-Interrupt-Funktionsaufrufe, zusammen mit vielen neueren sowie Erweiterungen einiger der Originale ( zB erweiterte Parameterbereiche), die von verschiedenen anderen Organisationen und kollaborativen Industriegruppen veröffentlicht wurden. In Kombination mit einem ähnlichen Grad an Hardwarekompatibilität bedeutet dies, dass die meisten Programme, die für einen IBM AT geschrieben wurden, auch heute noch auf einem neuen PC korrekt ausgeführt werden können, vorausgesetzt, die schnellere Ausführungsgeschwindigkeit ist akzeptabel (was normalerweise für alle Spiele gilt, die verwenden CPU-basiertes Timing). Trotz der erheblichen Einschränkungen der Dienste, auf die über die BIOS-Interrupts zugegriffen wird, haben sie sich als äußerst nützlich und beständig gegenüber technologischen Veränderungen erwiesen.
Zweck von BIOS-Aufrufen
BIOS-Interrupt-Aufrufe führen Hardwaresteuerungs- oder E/A-Funktionen durch, die von einem Programm angefordert werden, geben Systeminformationen an das Programm zurück oder führen beides aus. Ein Schlüsselelement des Zwecks von BIOS-Aufrufen ist die Abstraktion – die BIOS-Aufrufe führen allgemein definierte Funktionen aus, und die spezifischen Details, wie diese Funktionen auf der bestimmten Hardware des Systems ausgeführt werden, sind im BIOS gekapselt und vor dem Programm verborgen. So muss beispielsweise ein Programm, das von einer Festplatte lesen möchte, nicht wissen, ob es sich um ein ATA- , SCSI- oder SATA- Laufwerk (oder früher ein ESDI- Laufwerk oder ein MFM- oder RLL- Laufwerk mit vielleicht ein Seagate ST-506- Controller, vielleicht einer der verschiedenen Controller-Typen von Western Digital oder mit einem anderen proprietären Controller einer anderen Marke). Das Programm muss nur die BIOS-definierte Nummer des Laufwerks, auf das es zugreifen möchte, und die Adresse des Sektors, das es lesen oder schreiben muss, identifizieren, und das BIOS kümmert sich um die Übersetzung dieser allgemeinen Anfrage in die spezifische Abfolge der erforderlichen elementaren Operationen um die Aufgabe über die spezielle Festplattencontroller-Hardware abzuschließen, die mit diesem Laufwerk verbunden ist. Das Programm muss nicht wissen, wie auf niedriger Ebene jede Art von Festplatte (oder Anzeigeadapter oder Portschnittstelle oder Echtzeituhr-Peripheriegerät) gesteuert werden kann, auf die es möglicherweise zugreifen muss. Dies erleichtert die Programmierung von Betriebssystemen und Anwendungen und macht die Programme kleiner, wodurch die Duplizierung von Programmcode reduziert wird, da die im BIOS enthaltene Funktionalität nicht in jedem Programm enthalten sein muss, das sie benötigt; Stattdessen sind relativ kurze Aufrufe an das BIOS in den Programmen enthalten. (In Betriebssystemen, in denen das BIOS nicht verwendet wird, erfüllen Serviceaufrufe, die vom Betriebssystem selbst bereitgestellt werden, im Allgemeinen dieselbe Funktion und denselben Zweck.)
Das BIOS befreit auch Computerhardware-Designer (soweit Programme so geschrieben sind, dass sie ausschließlich das BIOS verwenden) davon, beim Entwurf neuer Systeme die genaue Hardwarekompatibilität mit alten Systemen aufrechtzuerhalten, um die Kompatibilität mit vorhandener Software aufrechtzuerhalten. Beispielsweise funktioniert die Tastaturhardware auf dem IBM PCjr ganz anders als die Tastaturhardware auf früheren IBM PC-Modellen, aber für Programme, die die Tastatur nur über das BIOS verwenden, ist dieser Unterschied fast unsichtbar. (Ein gutes Beispiel für die andere Seite dieses Problems ist, dass ein erheblicher Teil der PC-Programme, die zum Zeitpunkt der Einführung des PCjr verwendet wurden, die Tastatur nicht ausschließlich über das BIOS verwendet, daher hat IBM auch Hardwarefunktionen in den PCjr integriert, um die wie die ursprüngliche IBM PC- und IBM PC XT- Tastaturhardware funktioniert Die Hardwareemulation ist nicht genau, daher funktionieren nicht alle Programme, die versuchen, die Tastaturhardware direkt zu verwenden, auf dem PCjr korrekt, aber alle Programme, die nur die BIOS-Tastaturdienste verwenden, werden .)
Neben dem Zugriff auf Hardware-Einrichtungen bietet BIOS zusätzliche Einrichtungen, die in der BIOS-Software implementiert sind. Zum Beispiel behält das BIOS separate Cursorpositionen für bis zu acht Textanzeigeseiten bei und sorgt für eine TTY- ähnliche Ausgabe mit automatischem Zeilenumbruch und Interpretation grundlegender Steuerzeichen wie Wagenrücklauf und Zeilenvorschub, während die CGA-kompatible Textanzeigehardware über nur einen globalen Anzeigecursor und kann den Cursor nicht automatisch vorrücken, die Cursorposition verwenden, um den Anzeigespeicher zu adressieren (um zu bestimmen, welche Zeichenzelle geändert oder untersucht wird) oder Steuerzeichen interpretieren. Als weiteres Beispiel interpretiert die BIOS-Tastaturschnittstelle viele Tastenanschläge und Tastenkombinationen, um die verschiedenen Umschaltzustände (linke und rechte Umschalttaste , Strg und Alt ) zu verfolgen , den Druckbildschirmdienst aufzurufen, wenn Umschalt + PrtScrn gedrückt wird, um neu zu starten das System, wenn Strg + Alt + Entf gedrückt wird, um die Sperrzustände (Caps Lock, Num Lock und Scroll Lock) zu verfolgen und bei Maschinen der AT-Klasse die entsprechenden Sperrzustands-Anzeigeleuchten auf der Tastatur zu steuern, und um andere ähnliche Interpretations- und Verwaltungsfunktionen für die Tastatur auszuführen. Im Gegensatz dazu sind die gewöhnlichen Fähigkeiten der Standard-PC- und PC-AT-Tastaturhardware darauf beschränkt, dem System jedes primitive Ereignis eines Drückens oder Loslassens einer einzelnen Taste zu melden (dh einen Übergang vom "freigegebenen" Zustand in den "gedrückten" Zustand oder umgekehrt), Ausführen eines befohlenen Rücksetzens und Selbsttests der Tastatureinheit und bei Tastaturen der AT-Klasse Ausführen eines Befehls vom Hostsystem, um die absoluten Zustände der Sperrzustandsanzeigen (LEDs) einzustellen.
Aufruf des BIOS: BIOS-Software-Unterbrechungen
Betriebssysteme und andere Software kommunizieren mit der BIOS-Software, um die installierte Hardware über Software-Interrupts zu steuern. Ein Software-Interrupt ist eine spezielle Variante des allgemeinen Konzepts eines Interrupts. Ein Interrupt ist ein Mechanismus, durch den die CPU angewiesen werden kann, die Ausführung des Hauptleitungsprogramms zu stoppen und stattdessen sofort ein spezielles Programm auszuführen, das als Interrupt-Service-Routine (ISR) bezeichnet wird. Sobald die ISR beendet ist, fährt die CPU mit dem Hauptprogramm fort. Wenn auf x86-CPUs ein Interrupt auftritt, wird der aufzurufende ISR durch Nachschlagen in einer Tabelle von ISR-Startpunktadressen (genannt "Interrupt-Vektoren") im Speicher gefunden: der Interrupt-Vektortabelle (IVT). Ein Interrupt wird durch seine Typnummer von 0 bis 255 aufgerufen, und die Typnummer wird als Index in die Interrupt-Vektortabelle verwendet, und an diesem Index in der Tabelle wird die Adresse des ISR gefunden, der als Reaktion auf ausgeführt wird die Unterbrechung. Ein Software-Interrupt ist einfach ein Interrupt, der durch einen Software-Befehl ausgelöst wird; Daher funktionieren Software-Interrupts wie Subroutinen, mit dem Hauptunterschied, dass das Programm, das einen Software-Interrupt-Aufruf durchführt, nicht die Adresse des ISR kennen muss, sondern nur seine Interrupt-Nummer. Dies hat Vorteile hinsichtlich Modularität, Kompatibilität und Flexibilität bei der Systemkonfiguration.
BIOS-Interrupt-Aufrufe können als Mechanismus zum Weiterleiten von Nachrichten zwischen BIOS und BIOS-Client-Software, wie beispielsweise einem Betriebssystem, betrachtet werden. Die Nachrichten fordern Daten oder Aktionen vom BIOS an und geben die angeforderten Daten, Statusinformationen und/oder das Produkt der angeforderten Aktion an den Anrufer zurück. Die Nachrichten sind in Kategorien unterteilt, jede mit ihrer eigenen Unterbrechungsnummer, und die meisten Kategorien enthalten Unterkategorien, die "Funktionen" genannt und durch "Funktionsnummern" identifiziert werden. Ein BIOS-Client übergibt die meisten Informationen in CPU-Registern an das BIOS und empfängt die meisten Informationen auf die gleiche Weise zurück, aber Daten, die zu groß sind, um in Register zu passen, wie Tabellen mit Steuerparametern oder Plattensektordaten für Plattenübertragungen, werden durch Zuweisung eines Puffers weitergegeben (dh etwas Platz) im Speicher und Übergabe der Adresse des Puffers in Registern. (Manchmal können mehrere Adressen von Datenelementen im Speicher in einer Datenstruktur im Speicher übergeben werden, wobei die Adresse dieser Struktur in Registern an das BIOS übergeben wird.) Die Interrupt-Nummer wird als Parameter des Software-Interrupt-Befehls angegeben (in der Intel-Assemblersprache , ein "INT"-Befehl), und die Funktionsnummer wird im AH-Register spezifiziert; das heißt, der Anrufer setzt das AH-Register auf die Nummer der gewünschten Funktion. Im Allgemeinen arbeiten die jeder Unterbrechungsnummer entsprechenden BIOS-Dienste unabhängig voneinander, aber die Funktionen innerhalb eines Unterbrechungsdienstes werden von demselben BIOS-Programm gehandhabt und sind nicht unabhängig. (Dieser letzte Punkt ist für den Wiedereinstieg relevant .)
Die BIOS-Software kehrt normalerweise mit einem Fehlercode zum Aufrufer zurück, wenn er nicht erfolgreich ist, oder mit einem Statuscode und/oder angeforderten Daten, wenn er erfolgreich ist. Die Daten selbst können so klein wie ein Bit oder bis zu 65.536 Bytes ganzer Raw-Disk-Sektoren sein (das Maximum, das in ein Real-Mode-Speichersegment passt). Das BIOS wurde im Laufe der Jahre von vielen verschiedenen Unternehmenseinheiten oft erweitert und verbessert, und leider ist das Ergebnis dieser Entwicklung, dass nicht alle BIOS-Funktionen, die aufgerufen werden können, konsistente Konventionen zum Formatieren und Kommunizieren von Daten oder zum Berichten von Ergebnissen verwenden. Einige BIOS-Funktionen melden detaillierte Statusinformationen, während andere möglicherweise nicht einmal Erfolg oder Misserfolg melden, sondern einfach stumm zurückkehren, sodass der Anrufer den Erfolg annehmen kann (oder das Ergebnis auf andere Weise testen kann). Manchmal kann es auch schwierig sein, festzustellen, ob ein bestimmter BIOS-Funktionsaufruf vom BIOS auf einem bestimmten Computer unterstützt wird oder welche Grenzen die Parameter eines Aufrufs auf diesem Computer haben. (Bei einigen ungültigen Funktionsnummern oder gültigen Funktionsnummern mit ungültigen Werten von Schlüsselparametern – insbesondere bei einer frühen IBM BIOS-Version – tut das BIOS möglicherweise nichts und kehrt ohne Fehlercode zurück Anrufer, um diesen Fall entweder zu vermeiden, indem er solche Anrufe nicht tätigt, oder um positiv auf eine erwartete Wirkung des Anrufs zu testen, anstatt davon auszugehen, dass der Anruf effektiv war eine BIOS-Version eines bestimmten Herstellers ist möglicherweise nicht in einer früheren oder abweichenden BIOS-Version desselben Herstellers oder in einer BIOS-Version – egal welchen Alters – eines anderen Herstellers gültig.)
Da BIOS-Interrupt-Aufrufe die CPU-registerbasierte Parameterübergabe verwenden, sind die Aufrufe darauf ausgerichtet, von der Assemblersprache ausgeführt zu werden, und können nicht direkt von den meisten High-Level-Sprachen (HLLs) ausgeführt werden. Jedoch kann eine Hochsprache eine Bibliothek von wrapper Routinen bereitzustellen , die Parameter aus der Form übersetzen (üblicherweise stapelbasierten) von der Hochsprache zu dem Register-basierte Form von BIOS erforderlich verwendet wird , dann zurück zu dem HLL - Aufrufkonvention nach das BIOS kehrt zurück. In einigen Varianten von C können BIOS-Aufrufe unter Verwendung einer Inline-Assemblersprache innerhalb eines C-Moduls erfolgen. (Die Unterstützung für Inline-Assemblersprache ist nicht Teil des ANSI-C-Standards, sondern eine Spracherweiterung; daher sind C-Module, die Inline-Assemblersprache verwenden, weniger portabel als reine ANSI-Standard-C-Module.)
Aufruf eines Interrupts
Das Aufrufen eines Interrupts kann unter Verwendung des INT x86- Assemblersprachenbefehls erfolgen . Um beispielsweise mit dem BIOS-Interrupt 0x10 ein Zeichen auf dem Bildschirm zu drucken, könnten die folgenden x86-Assemblersprachenbefehle ausgeführt werden:
mov ah, 0x0e ; function number = 0Eh : Display Character
mov al, '!' ; AL = code of character to display
int 0x10 ; call INT 10h, BIOS video service
Unterbrechungstabelle
Eine Liste gängiger BIOS-Interrupt-Klassen finden Sie unten. Beachten Sie, dass einige BIOS (insbesondere alte) nicht alle diese Interrupt-Klassen implementieren.
Das BIOS verwendet auch einige Interrupts, um Hardwareereignis-Interrupts an Programme weiterzuleiten, die diese empfangen oder Nachrichten für den eigenen Gebrauch weiterleiten. Die folgende Tabelle enthält nur diejenigen BIOS-Interrupts, die von Programmen aufgerufen werden sollen (unter Verwendung des Software-Interrupt-Befehls in Assemblersprache "INT"), um Dienste oder Informationen anzufordern.
Unterbrechungsvektor | Beschreibung | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
05h
|
Wird ausgeführt, wenn der Bildschirm Shift- Print gedrückt wird, sowie wenn der BOUND Befehl einen gebundenen Fehler erkennt.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
08h
|
Dies ist der Echtzeituhr-Interrupt. Es feuert 18,2 mal/Sekunde. Das BIOS inkrementiert während dieses Interrupts den Uhrzeitzähler. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
09h
|
Dies ist der Tastatur-Interrupt. Dies wird im Allgemeinen ausgelöst, wenn eine Taste auf einer Tastatur gedrückt wird. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10h
|
Videodienste
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11h
|
Retouren-Ausrüstungsliste | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12h
|
Rück herkömmliche Speichergröße | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13h
|
Low-Level-Festplattendienste
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
14h
|
Dienste für serielle Ports
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
15h
|
Diverse Systemdienste
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16h
|
Tastaturdienste
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
17h
|
Druckerdienste
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
18h
|
Execute Cassette BASIC : Auf IBM-Maschinen bis zur frühen PS/2-Zeile würde dieser Interrupt die ROM-Cassette BASIC starten. Klone verfügten nicht über diese Funktion und verschiedene Maschinen/BIOSes führten eine Vielzahl verschiedener Aktionen aus, wenn INT 18h ausgeführt wurde, meistens eine Fehlermeldung, die besagte, dass kein bootfähiger Datenträger vorhanden war. Moderne Maschinen würden versuchen, über diesen Interrupt von einem Netzwerk zu booten . Auf modernen Maschinen wird dieser Interrupt vom BIOS als Signal des Bootloaders behandelt, dass er seine Aufgabe nicht abgeschlossen hat. Das BIOS kann dann die entsprechenden nächsten Schritte ausführen. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
19h
|
Nach dem POST wird dieser Interrupt vom BIOS verwendet, um das Betriebssystem zu laden. Ein Programm kann diesen Interrupt aufrufen, um den Computer neu zu starten (es muss jedoch sicherstellen, dass Hardware-Interrupts oder DMA-Operationen weder während der Neuinitialisierung des Systems durch das BIOS noch während des Startvorgangs dazu führen, dass das System hängt oder abstürzt). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1Ah
|
Echtzeituhr-Dienste
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1Ah
|
PCI- Dienste – von BIOS implementiert, die PCI 2.0 oder höher unterstützen
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1Bh
|
Ctrl-Break - Handler - aufgerufen durch , INT 09 wenn Strg- Pause gedrückt wurde
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1Ch
|
Timer-Tick-Handler - aufgerufen von INT 08
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1Dh
|
Nicht anzurufen; einfach ein Zeiger auf die VPT (Video Parameter Table), die Daten zu Videomodi enthält | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1Eh
|
Nicht anzurufen; einfach ein Zeiger auf die DPT (Diskette Parameter Table), die eine Vielzahl von Informationen zu den Diskettenlaufwerken enthält | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1Fh
|
Nicht anzurufen; einfach ein Zeiger auf die VGCT (Video Graphics Character Table), die die Daten für ASCII-Zeichen enthält, 80h umFFh
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
41h
|
Adresszeiger: FDPT = Fixed Disk Parameter Table (1. Festplatte) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
46h
|
Adresszeiger: FDPT = Fixed Disk Parameter Table (2. Festplatte) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4Ah
|
Von RTC wegen Alarm angerufen |
INT 18h
: BASIC ausführen
INT 18h
wechselte traditionell zu einer Implementierung von Cassette BASIC (von Microsoft bereitgestellt), die in Options-ROMs gespeichert ist . Dieser Aufruf wird normalerweise aufgerufen, wenn das BIOS beim Start keine bootfähigen Datenträger-Volumes identifizieren kann.
Als 1981 der ursprüngliche IBM-PC (IBM-Maschinentyp 5150) auf den Markt kam, war das BASIC in ROM ein wichtiges Merkmal. Zeitgenössische populäre PCs wie der Commodore 64 und die Apple II-Reihe hatten auch Microsoft Cassette BASIC im ROM (obwohl Commodore ihre lizenzierte Version Commodore BASIC umbenannte), so dass der IBM PC in einem erheblichen Teil seines beabsichtigten Marktes BASIC benötigte, um zu konkurrieren. Wie bei diesen anderen Systemen diente das ROM BASIC des IBM PCs als primitives plattenloses Betriebssystem, das es dem Benutzer ermöglichte, Programme zu laden, zu speichern und auszuführen sowie sie zu schreiben und zu verfeinern. (Der ursprüngliche IBM-PC war auch das einzige PC-Modell von IBM, das wie seine beiden oben genannten Konkurrenten eine Kassettenschnittstellenhardware enthielt. Ein IBM-Basismodell hatte nur 16 KiB RAM und keine Diskettenlaufwerke [ jeglicher Art ], so dass die Kassette Schnittstelle und BASIC im ROM waren unabdingbar, um das Basismodell nutzbar zu machen. Ein IBM PC mit weniger als 32 KiB RAM kann nicht von Diskette booten. Von den fünf 8 KiB ROM-Chips in einem originalen IBM PC mit insgesamt 40 KiB enthalten vier BASIC und nur einer enthält das BIOS; wenn nur 16 KiB RAM installiert sind, macht das ROM BASIC über die Hälfte des gesamten Systemspeichers aus [4/7, um genau zu sein].)
Als die Zeit verging und BASIC nicht mehr auf allen PCs ausgeliefert wurde, zeigte dieser Interrupt einfach eine Fehlermeldung an, die darauf hinweist, dass kein bootfähiges Volume gefunden wurde (bekanntermaßen "No ROM BASIC" oder mehr erklärende Meldungen in späteren BIOS-Versionen); in anderen BIOS-Versionen würde es den Benutzer auffordern, ein bootfähiges Volume einzulegen und eine Taste zu drücken, und dann, nachdem der Benutzer eine Taste gedrückt hat, würde es zum Bootstrap-Loader (INT 19h) zurückkehren, um den Bootvorgang erneut zu versuchen.
Das Rainbow 100 B von Digital INT 18h
nannte sein BIOS früher, das mit dem IBM-BIOS nicht kompatibel war. Turbo Pascal , Turbo C und Turbo C++ haben INT 18 für die Speicherzuweisung und das Paging umfunktioniert. Auch andere Programme verwendeten diesen Vektor für ihre eigenen Zwecke.
BIOS-Hooks
DOS
Auf DOS-Systemen hängt IO.SYS oder IBMBIO.COM INT 13 für die Erkennung von Diskettenänderungen, das Verfolgen von Formatierungsaufrufen, das Korrigieren von DMA-Grenzfehlern und das Umgehen von Problemen in IBMs ROM-BIOS "01/10/84" mit dem Modellcode 0xFC vor dem erster Aufruf.
BIOS umgehen
Viele moderne Betriebssysteme (wie Linux und Windows NT ) umgehen die BIOS-Interrupt-Aufrufe nach dem Start, der OS-Kernel schaltet die CPU beim Start in den geschützten Modus oder in den Long-Modus und zieht es vor, seine eigenen Programme (wie Kernel-Treiber ) zur Steuerung zu verwenden die angeschlossene Hardware direkt. Der Grund dafür war in erster Linie, dass diese Betriebssysteme den Prozessor im Protected Mode oder Long Mode betreiben, während das Aufrufen des BIOS-Interrupt-Calls das Umschalten in den Real Mode oder Unreal Mode oder die Verwendung des Virtual 8086 Mode erfordert . Der Real-Modus, der Unreal-Modus und der virtuelle 8086-Modus sind langsam. Es gibt jedoch auch schwerwiegende Sicherheitsgründe, nicht in den Realmodus zu wechseln, und der Realmodus-BIOS-Code weist Einschränkungen sowohl in der Funktionalität als auch in der Geschwindigkeit auf, die Betriebssystementwickler dazu motivieren, einen Ersatz dafür zu finden. Tatsächlich machten es die Geschwindigkeitsbeschränkungen des BIOS sogar in der DOS-Ära üblich, dass Programme es umgehen, um seine Leistungsbeschränkungen zu umgehen, insbesondere bei der Videografikanzeige und der schnellen seriellen Kommunikation. Zu den Problemen mit der BIOS-Funktionalität gehören Einschränkungen des definierten Funktionsumfangs, Inkonsistenz in den Teilmengen dieser Funktionen, die auf verschiedenen Computern unterstützt werden, und Schwankungen in der Qualität von BIOSes (dh einige BIOS sind vollständig und zuverlässig, andere sind gekürzt und fehlerhaft). Indem sie die Dinge selbst in die Hand nehmen und sich nicht auf das BIOS verlassen, können Betriebssystementwickler einige der Risiken und Komplikationen vermeiden, denen sie beim Schreiben und der Unterstützung von Systemsoftware begegnen. Auf der anderen Seite sind diese Entwickler dafür verantwortlich, "Bare-Metal"-Treibersoftware für jedes andere System oder Peripheriegerät bereitzustellen, mit dem ihr Betriebssystem arbeiten soll (oder die Hardwarehersteller zu veranlassen, diese Treiber bereitzustellen). Es sollte daher offensichtlich sein, dass kompakte Betriebssysteme, die mit kleinen Budgets entwickelt wurden, dazu neigen, BIOS stark zu verwenden, während große Betriebssysteme, die von riesigen Gruppen von Softwareentwicklern mit großem Budget gebaut wurden, sich häufiger dafür entscheiden würden, ihre eigenen Treiber zu schreiben, anstatt das BIOS zu verwenden , auch ohne die Kompatibilitätsprobleme von BIOS und Protected Mode zu berücksichtigen.
Siehe auch
- DOS-Unterbrechungsaufruf
- Interrupt-Deskriptor-Tabelle
- Eingangs-/Ausgangs-Basisadresse
- Die Interrupt-Liste von Ralf Brown
Verweise
- Die x86-Interrupt-Liste (auch bekannt als RBIL, Ralf Browns Interrupt-Liste)
- Benutzerhandbuch für das integrierte BIOS
- PhoenixBIOS 4.0 Benutzerhandbuch
- IBM Personal System/2 und Personal Computer BIOS Interface Technical Reference , IBM, 1988, OCLC 20737442
- System-BIOS für IBM PCs, kompatible und EISA-Computer , Phoenix Technologies , 1991, ISBN 0201577607
- Programmierhandbuch für AMIBIOS , American Megatrends , 1993, ISBN 0070015619
- The Programmer's PC Sourcebook von Thom Hogan, Microsoft Press, 1991 ISBN 155615321X