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 BOUNDBefehl 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
AH Beschreibung
00h Videomodus einstellen
01h Cursorform einstellen
02h Cursorposition einstellen
03h Cursorposition und -form abrufen
04h Holen Sie sich die Position des Lichtstifts
05h Anzeigeseite einstellen
06h Bildschirm löschen/aufwärts scrollen
07h Bildschirm löschen/nach unten scrollen
08h Zeichen und Attribut am Cursor lesen
09h Schreiben Sie Zeichen und Attribut am Cursor
0Ah Zeichen am Cursor schreiben
0Bh Rahmenfarbe einstellen
0Ch Grafikpixel schreiben
0Dh Grafikpixel lesen
0Eh Zeichen im TTY-Modus schreiben
0Fh Holen Sie sich den Videomodus
10h Palettenregister setzen (EGA, VGA, SVGA)
11h Zeichengenerator (EGA, VGA, SVGA)
12h Alternative Auswahlfunktionen (EGA, VGA, SVGA)
13h Zeichenfolge schreiben
1Ah Abrufen oder Festlegen des Anzeigekombinationscodes (VGA, SVGA)
1Bh Funktionsinformationen abrufen (VGA, SVGA)
1Ch Videostatus speichern oder wiederherstellen (VGA, SVGA)
4Fh VESA-BIOS-Erweiterungsfunktionen (SVGA)
11h Retouren-Ausrüstungsliste
12h Rück herkömmliche Speichergröße
13h Low-Level-Festplattendienste
AH Beschreibung
00h Festplatten zurücksetzen
01h Laufwerkstatus prüfen
02h Sektoren lesen
03h Sektoren schreiben
04h Sektoren überprüfen
05h Spur formatieren
08h Antriebsparameter abrufen
09h Feste Laufwerksparameter initialisieren
0Ch Angegebenen Track suchen
0Dh Festplatten-Controller zurücksetzen
15h Laufwerkstyp abrufen
16h Status des Diskettenlaufwerk-Medienänderungsstatus abrufen
17h Festplattentyp einstellen
18h Medientyp des Diskettenlaufwerks einstellen
41h Installationsprüfung für erweitertes Festplattenlaufwerk (EDD)
42h Erweiterte Lesesektoren
43h Erweiterte Schreibsektoren
44h Erweiterte Sektoren überprüfen
45h Laufwerk sperren/entsperren
46h Medien auswerfen
47h Erweiterte Suche
48h Erweiterte Laufwerksparameter abrufen
49h Erweiterter Medienwechselstatus abrufen
4Eh Erweiterte Hardwarekonfiguration
14h Dienste für serielle Ports
AH Beschreibung
00h Initialisierung der seriellen Schnittstelle
01h Zeichen übertragen
02h Charakter empfangen
03h Status
15h Diverse Systemdienste
AH AL Beschreibung
00h Kassettenantriebsmotor einschalten (nur IBM PC/PCjr)
01h Kassettenantriebsmotor ausschalten (nur IBM PC/PCjr)
02h Datenblöcke von Kassette lesen (nur IBM PC/PCjr)
03h Datenblöcke auf Kassette schreiben (nur IBM PC/PCjr)
4Fh Abfangen der Tastatur
83h Ereignis warten
84h Joystick lesen (BIOS ab 1986)
85h Legende der Sysreq-Taste
86h Warte ab
87h Block verschieben
88h Erhalten Extended Memory Größe
89h Wechseln Sie in den geschützten Modus
C0h Systemparameter abrufen
C1h Holen Sie sich das erweiterte BIOS-Datenbereichssegment
C2h Funktionen des Zeigegeräts
C3h Watchdog-Timer-Funktionen – nur PS/2-Systeme
C4h Programmierbare Optionsauswahl – nur MCA- Bus-PS/2-Systeme
D8h EISA- Systemfunktionen - nur EISA-Bussysteme
E8h 01h Get Extended Memory Size (Neuere Funktion, seit 1994). Liefert Ergebnisse für Speichergrößen über 64 MB.
E8h 20h Systemadresszuordnung abfragen. Die von E820 zurückgegebenen Informationen ersetzen die von den älteren AX=E801hund AH=88hSchnittstellen zurückgegebenen.
16h Tastaturdienste
AH Beschreibung
00h Charakter lesen
01h Eingangsstatus lesen
02h Status der Tastaturverschiebung lesen
05h Tastenanschlag im Tastaturpuffer speichern
10h Lesezeichen erweitert
11h Leseeingangsstatus erweitert
12h Lesen Sie den Tastatur-Shift-Status erweitert
17h Druckerdienste
AH Beschreibung
00h Zeichen auf Drucker drucken
01h Drucker initialisieren
02h Druckerstatus prüfen
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
AH Beschreibung
00h Echtzeituhr lesen
01h Echtzeituhr einstellen
02h RTC-Zeit lesen
03h RTC-Zeit einstellen
04h RTC-Datum lesen
05h RTC-Datum einstellen
06h Set RTC Alarm
07h RTC-Alarm zurücksetzen
1Ah PCI- Dienste – von BIOS implementiert, die PCI 2.0 oder höher unterstützen
AX Beschreibung
B101h PCI-Installationsprüfung
B102h PCI-Gerät finden
B103h PCI-Klassencode finden
B106h PCI-Bus-spezifische Operationen
B108h Konfigurationsbyte lesen
B109h Konfigurationswort lesen
B10Ah Konfigurations-Dword lesen
B10Bh Konfigurationsbyte schreiben
B10Ch Konfigurationswort schreiben
B10Dh Konfigurations-Dword schreiben
B10Eh Informationen zur IRQ-Routine erhalten
B10Fh PCI-IRQ einstellen
1Bh Ctrl-Break - Handler - aufgerufen durch , INT 09wenn 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, 80humFFh
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 18hwechselte 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 18hnannte 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

Verweise