
Entuzjaści sukcesywnie wydobyli i zdemontowali mikrokod procesora Intel 80386, który przez brak dokumentacji był uważany za „czarną skrzynkę”. Obraz binarny mikrokodu został odtworzony przy pomocy AI na podstawie zdjęć w wysokiej rozdzielczości kryształu, a logika działania została rozpracowana poprzez śledzenie połączeń na kryształach. Stopniowo zdefiniowano strukturę mikrokrotek (μ-ops), pola, kolejność wykonania oraz znaczniki końca instrukcji. Osiągnięcia projektu opublikowane znajdują się na GitHubie jako dobro publiczne.
Zidentyfikowano, że w procesorze 80386 każda instrukcja jest w pełni realizowana przez mikrokod, podczas gdy w 8086 i nowoczesnych procesorach część instrukcji jest przetwarzana bezpośrednio. Ponadto, w przeciwieństwie do procesorów 8086, w 80386 mikrokod nie realizuje algorytmów bezpośrednio, a głównie konfiguruje przyspieszacze sprzętowe (mnożnik, dzielnik, szybkie przesunięcie, PTU (Protection Test Unit)).
W trakcie badania również odkryto potencjalny problem z bezpieczeństwem podczas przetwarzania bitmapy praw dostępu do wejścia/wyjścia (bitmapa uprawnień IO): przy 4-bajtowym dostępie do portów sprawdzano bity uprawnień tylko dla pierwszych 3 bajtów, a dostęp do 4. bajtu nie był weryfikowany, co teoretycznie umożliwiało dostęp do rejestrów sprzętowych, do których dostęp powinien być zabroniony.
Na podstawie opublikowanego mikrokodu został opracowany otwarty CPU z386, zaimplementowany w języku SystemVerilog i działający z wykorzystaniem FPGA. Zamiast implementacji każdej instrukcji w formie oddzielnego RTL (wikipedia.org) (Register-transfer level) w z386 wprowadzone są struktury sprzętowe, którymi zarządza oryginalny mikrokod. Wydajność przygotowanej implementacji odpowiada szybkiemu PC386 (~70MHz). Na z386 udało się skutecznie uruchomić DOS 6/7, DOS/4GW, DOS/32A oraz gry, takie jak Doom i Cannon Fodder.
Źródło: linux.org.ru
