
Enthusiasten vermochten erfolgreich den Mikrocode des Intel 80386 Prozessors zu extrahieren und zu disassemblieren, der aufgrund fehlender Dokumentation als „schwarze Box“ galt. Das binäre Abbild des Mikrocodes wurde mithilfe von KI aus hochauflösenden Fotos des Chips rekonstruiert, und die Funktionsweise wurde durch die Verfolgung der Verbindungen auf dem Chip analysiert. Allmählich wurden die Struktur der Mikrokommandos (μ-ops), Felder, die Ausführungsreihenfolge und Endmarkierungen für die Instruktionen bestimmt. Die Ergebnisse des Projekts sind veröffentlicht sind auf GitHub als gemeinfrei verfügbar.
Es wurde festgestellt, dass jede Anweisung in der CPU 80386 vollständig über Mikrocode ausgeführt wird, während in 8086 und modernen Prozessoren ein Teil der Anweisungen direkt verarbeitet wird. Darüber hinaus implementiert der Mikrocode in 80386 im Gegensatz zu 8086-Prozessoren die Algorithmen nicht direkt, sondern konfiguriert hauptsächlich die Hardwarebeschleuniger (Multiplikator, Divider, schnelle Verschiebung, PTU (Protection Test Unit)).
Im Rahmen der Untersuchung wurde auch ein mögliches Sicherheitsproblem bei der Verarbeitung der Berechtigungsbitmap für die Eingabe/Ausgabe (IO permission bitmap) festgestellt: Bei einem 4-Byte-Zugriff auf die Ports wurden die Berechtigungsbits nur für die ersten 3 Bytes überprüft, während der Zugriff auf das 4. Byte nicht kontrolliert wurde, was theoretisch den Zugriff auf Hardware-Register ermöglichte, dessen Zugang eigentlich verboten sein sollte.
Basierend auf veröffentlichtem Mikrokode entwickelt eine offene CPU z386, implementiert in SystemVerilog und arbeitet mit FPGA. Anstatt jede Anweisung in Form eines separaten RTL (wikipedia.org) (Register-Transfer-Level) wurden im z386 Hardware-Strukturen implementiert, die durch den ursprünglichen Mikrokode gesteuert werden. Die Leistung der erstellten Implementierung entspricht einem schnellen 386-PC (~70MHz). Auf dem z386 konnten erfolgreich DOS 6/7, DOS/4GW, DOS/32A und Spiele wie Doom und Cannon Fodder gestartet werden.
Quelle: linux.org.ru
