BIOS Interrupts und Funktionen
« | 04 Feb 2019 | »Aus der Sicht des Programmierers sind Betriebssysteme nichts anderes als Gerätetreibersammlungen, also Übersetzer zwischen einer individuellen Funktionswelt in einem standardisierten Schnittstellenraum.
Jeder Datenträger, jede Festplatte ist intern (oft) anders aufgebaut. Es wäre ein Alptraum, wenn die Anwendungsmacher für alle Möglichkeiten Code schreiben müssten.
Und lange bevor das aktuelle EFI eingeführt wurde und moderne Betriebssysteme für (fast) alles Treibermodule anboten, hatte IBM mit seinem IBM PC sich etwas ausgedacht, wie man diese “Übersetzung” gleich auf einen Chip unterbringen kann.
… und das waren BIOS - Interrupt-Funktionen.
Eigentlich ein blöder Name, denn ein “Interrupt” ist eine Funktion die ausgelöst wird, wenn ein externes Ereignis den normalen Programmfluss unterbrechen muss, um etwas Spezielles zu erledigen.
Das beste Beispiel ist die Tastatur. Denn wenn eine Taste gedrückt wird,
laufen Signale durch diverse Chips, bis am Prozessor eine bestimmte
“Interrupt”-Nummer ausgelöst wird.
Der Prozessor unterbricht dann das, was er eigentlich gerade tun soll
und springt zu einem anderen (früher festgelegten) Codepunkt und führt
dort Code aus, der an seinem Ende mit einem Rücksprung (IRET
,
Interrupt-Return) wieder am vorhergehenden unterbrochenen Code fortsetzt.
Und diese Eigenschaft - einfach wo anders hinzuspringen - kann man auch in Software nachbilden.
IBM hatte in seiner BIOS-Spezifikation eine dicke Liste an Funktionen festgelegt, die im Chip eingebrannt waren. Darunter fielen Grafik-Ausgabe, Disketten- und Festplatten - zugriffe, serielle Kommunikation und einiges mehr.
Und das war für das erste offizielle Betriebssystem auf dem IBM-PC, nämlich DOS (anfangs IBM-DOS, später MS-DOS) natürlich ein großer Vorteil.
Es war eine stabile Schnittstelle, über die alle beteiligten strukturiert zusammenarbeiten konnten.
Die Hardwarehersteller lieferten Code für die BIOS-Funktionen und Betriebssysteme wie DOS übersetzten die hardwarenahen BIOS-Aufrufe in uns bekannte Dimensionen wie Dateien, Verzeichnisse, Dateneingabe und -ausgabe.
Man musste also nicht die komplizierten Steuercodes kennen, um die Motoren eines Diskettenlaufwerks an die richtige Position zu fahren, sondern rief einfache einen BIOS-Interrupt auf, der über Prozessorregister die Parameter erhielt, an welcher Spur (Cylinder), auf welche Seite (Head) und welcher Sektor in einen Zielpuffer übertragen werden sollte.
DOS selbst erweiterte dieses Schema und bot seine eigenen Funktionen
ebenfalls über Software-Interrupts an. Der bekannteste davon war
der Interrupt 0x21
(hexadezimal, oder 33 in dezimal).
Wenn also ein C -
Programmierer per fopen()
eine Datei öffnete, wurde intern über den
Interrupt 0x21
DOS darüber informiert, welches Pfade in logische Sektoren
umrechnete und dann selbst wieder den Interrupt 0x13
nutzte um das BIOS
zu bitten Daten mit dem physischen Laufwerk auszutauschen.
Und eben weil das damals so einfach schien, haben nicht nur ich sondern
so einige Nerds damals versucht, ihr eigenes kleines Betriebssystem
zu basteln.
Geworden ist bei uns allen nicht viel daraus, außer, dass wir dadurch viel
Erfahrung sammeln konnten.
(SkyOS ist eines der wenigen mir bekannten nennenswerten Beispiele von damals).
Außerdem wurde das BIOS Ende der 90er immer unwichtiger. Durch seine Spezifikation aus den 80er Jahren war es immer schwerer geworden die Anforderungen moderner Hardware durch einfache Aufrufe abzudecken und die Tatsache, dass es auf den Real-Mode des X86 Prozessors beschränkt war, machte es de facto 32-bit-feindlich.
Windows und Linux schufen ihre eigenen Treiber-Frameworks und steuerten die Hardware direkt an, womit dem BIOS nur noch die Rolle des Hochfahrens und des Ladens des ersten Sektors des Bootmediums übrig blieb.
Seit dem Jahr 2010 ist das BIOS als Primärplattform Geschichte. Und EFI (Extensible Firmware Interface) heißt sein Nachfolger.
Doch meistens beinhaltet EFI noch einen BIOS-Kompatibilitätsmodus, mit dem die alten BIOS-Funkionen und -Interrupts doch noch bereit gestellt werden und intern auf moderne EFI-Routinen umleiten.
Fazit
Ich hatte damals viel Spaß mit einer gekauften BIOS-Funktions-Liste und greife auch heute noch auf die Erfahrungen von damals zurück.
Besonders erstaunt bin ich aber, dass es die Webseite des Herausgebers meines Doku-Heftes ADIM noch gibt. Und sie sieht auch noch so aus wie im Jahr 2000.
O-M-G! Sie haben die Interrupt-Doku sogar als Download bereitgestellt. Doch leider lässt sich die Datei mit meinen Tools nicht mehr entpacken.
Die Interrupt-Liste stammte von Ralf Brown (auch einer dieser Helden für uns Programmierer), der die Originale zum Glück ebenfalls als Download anbietet.
… es lebe die Nostalgie!