Während man das BIOS theoretisch in jeder Sprache schreiben kann, ist die moderne Realität, dass das BIOS meist mit Assembly, C oder einer Kombination aus beiden geschrieben wird .
Das BIOS muss in einer Sprache geschrieben sein, die sich zu Maschinencode kompilieren lässt, der von der physischen Hardwaremaschine verstanden wird. Dadurch werden die direkt oder zwischenzeitlich interpretierten Sprachen (Perl, Python, PHP, Ruby, Java, C #, JavaScript usw.) als für das Schreiben des BIOS geeignet ausgeschlossen. (Theoretisch könnte man jedoch eine dieser Sprachen implementieren, um entweder direkt in statischen Maschinencode zu kompilieren, oder den Interpreter in das BIOS einbetten. Es gibt beispielsweise das Abbruch-GCJ-Projekt für Java.)
Die meisten OEMs implementieren ein BIOS, indem sie proprietäre, generische BIOS-Implementierungen von Unternehmen wie American Megatrends und Phoenix Techologies erweitern . (Sie haben wahrscheinlich schon einmal gesehen, dass eines dieser Unternehmen auf dem ersten Startbildschirm eines Computers angezeigt wurde.) Der Quellcode für diese Implementierungen ist nicht öffentlich verfügbar, aber ein Teil davon ist durchgesickert. Ich mag nicht auf das C und Assembler - Quellcode diesen direkt verbinden, aber es gibt Orte im Internet , wo diese Quellcode wird diskutiert für diejenigen , die spähen kümmern.
Einige Hardwarehersteller, wie diejenigen, die auf den Hochleistungs- und Spielemarkt abzielen, sättigen ihre BIOS-Implementierungen mit Anpassungsfunktionen, Statistiken und attraktiven Benutzeroberflächen, die für ihre genauen Implementierungen entwickelt wurden. Viele dieser Funktionen gehen über das hinaus, was die von American Megatrends und anderen produzierten Generika bieten. Leider sehen diese Unternehmen die Veröffentlichung ihres Quellcodes oft als Sicherheitsrisiko an. Daher ist über diese High-End-Implementierungen nur wenig bekannt, da nur wenig über sie geteilt wird. Man könnte natürlich Wege finden, um auf solche BIOS-Implementierungen zuzugreifen und diese zu dekompilieren, aber dies könnte schwierig und möglicherweise illegal sein.
Zurück zur ursprünglichen Frage: Da nativer Maschinencode erstellt werden muss, muss ein BIOS in einer Programmiersprache implementiert werden, die von einem nativen Maschinencode-Compiler unterstützt wird . Obwohl es viele solcher Sprachen gibt und ich mir sicher bin, dass in den letzten Jahrzehnten mehrere Sprachen zum Experimentieren verwendet wurden, stützt sich jede offene BIOS-Implementierung, die ich finden konnte, speziell auf eine Kombination aus C und / oder Assembly. Zu den Open-Source-BIOS-Implementierungen, die ich mir angesehen habe, um diese Schlussfolgerung zu ziehen, gehören OpenBIOS , tinyBIOS , Coreboot , Intel BIOS und Libreboot. Ich habe mir auch einige sehr alte BIOS-Implementierungen angesehen, die heute nicht relevant sind, aber auch die C- und / oder Assembly-Regel befolgt haben.
Ich denke, es ist auch wichtig, sich andere Software anzusehen, die für die direkte Interaktion mit der Hardware entwickelt wurde. Wir wissen zum Beispiel, dass der Linux-Kernel , der OS X-Kernel und der Windows-Kernel größtenteils C sind, mit einigen Assembler- und einigen höheren Sprachen für bestimmte Aufgaben. Wir wissen auch, dass Hardwaretreiber unter Linux und Hardwaretreiber unter Windows größtenteils in C geschrieben sind.
Zurück zum BIOS, denke ich, ist es auch wichtig, die Wirtschaftlichkeit der gewählten Programmiersprache zu berücksichtigen. BIOS wird im Allgemeinen als eine Notwendigkeit geschrieben, den Hardware-Verkauf zu ergänzen. Es ist bekannt, dass moderne BIOS-Systeme weitgehend in C und / oder Assembly geschrieben sind. Ein Umstieg auf ein anderes Tool würde die Kosten für Warenprodukte erheblich erhöhen, was sich sehr negativ auf den Umsatz auswirken könnte. Ohne auf Economics 101 einzugehen, kann ich Ihnen versichern, dass es sich für einen OEM wahrscheinlich nicht lohnt, von jahrzehntelang bewährten Werkzeugen abzuweichen.
Natürlich gibt es und wird es auch Hobby-Projekte geben, um BIOS zu schreiben. Auch diese scheinen sich bisher für C und / oder Assembly zu entscheiden. Vielleicht werden eines Tages andere Technologien eingesetzt. Aber heute ist die Wahl gut definiert.