Entuziastams sėkmingai pavyko išgauti ir išardyti „Intel 80386“ procesoriaus mikrokodą, kuris dėl dokumentacijos stokos buvo laikomas „juodąja dėže“. Dvejetainis mikrokodo vaizdas buvo atkurtas naudojant dirbtinį intelektą iš didelės raiškos kristalo nuotraukų, o logika buvo iššifruota naudojant kristale esančius laidus. Palaipsniui buvo nustatyta mikrooperacijų struktūra, laukai, vykdymo tvarka ir instrukcijų pabaigos žymekliai. Projekto rezultatai paskelbti „GitHub“ kaip viešai prieinami.

Buvo nustatyta, kad 80386 procesoriuje kiekviena instrukcija vykdoma tik per mikrokodą, o 8086 ir šiuolaikiniuose procesoriuose kai kurios instrukcijos apdorojamos tiesiogiai. Be to, skirtingai nei 8086 procesoriuose, 80386 mikrokodas tiesiogiai neįgyvendina algoritmų, o pirmiausia konfigūruoja aparatinės įrangos greitintuvus (daugiklį, daliklį, greitąjį perjungiklį, PTU (apsaugos bandymo bloką)).
Tyrimas taip pat atskleidė galimą saugumo problemą, susijusią su IO leidimų bitų žemėlapio tvarkymu: bandant pasiekti 4 baitų prievadus, buvo tikrinami tik pirmųjų 3 baitų leidimų bitai, o prieiga prie 4-ojo baito nebuvo tikrinama, todėl teoriškai buvo galima pasiekti aparatinės įrangos registrus, kurie neturėtų būti pasiekiami.
Remiantis publikuotu mikrokodu, buvo sukurtas atvirojo kodo z386 centrinis procesorius, įdiegtas „SystemVerilog“ aplinkoje ir veikiantis FPGA aplinkoje. Užuot įgyvendinęs kiekvieną instrukciją kaip atskirą RTL (registrų perdavimo sluoksnį), z386 įdiegia aparatinės įrangos struktūras, valdomas originalaus mikrokodo. Gautos įgyvendinimo versijos našumas atitinka greito 386 kompiuterio (~70 MHz) našumą. z386 sėkmingai paleido DOS 6/7, DOS/4GW, DOS/32A ir tokius žaidimus kaip „Doom“ ir „Cannon Fodder“.
Šaltinis: opennet.ru
