z386 ricrea un 80386 open source partendo dal microcodice originale

z386 è un core FPGA open source che utilizza il microcodice originale dell'Intel 80386. Il progetto ricostruisce la microarchitettura storica del processore x86 a 32 bit.

Un gruppo di appassionati di reverse engineering e retrocomputing è riuscito in qualcosa che fino a poco tempo fa sembrava poco realistico: riportare in vita il comportamento interno dello storico (e glorioso) processore Intel 80386 usando il microcodice originale estratto dal chip. Il progetto si chiama z386 ed è un core CPU open source sviluppato in SystemVerilog che gira su FPGA moderne, capace di avviare DOS 6 e DOS 7, eseguire software in modalità protetta e persino far funzionare giochi come Doom e Cannon Fodder.

La vicenda ha un valore storico notevole. La CPU 80386, introdotta da Intel nel 1985, fu il primo processore x86 a 32 bit realmente utilizzabile in ambito PC. Portò con sé la memoria virtuale paginata, uno spazio di indirizzamento da 4 GB e una modalità protetta finalmente pratica da usre per sistemi operativi multitasking. Windows 3.x, OS/2 e le prime distribuzioni Linux devono parecchio alla piattaforma 386.

z386 non nasce come semplice emulatore software: l’autore del progetto, noto online come nand2mario (repository GitHub), ha cercato di ricostruire il comportamento microarchitetturale del processore originale utilizzando il microcodice Intel recuperato direttamente dal die del chip. In pratica, anziché descrivere ogni istruzione x86 manualmente in RTL, il progetto prova a ricreare hardware “compatibile” da permettere al microcodice originale di governare davvero la CPU.

Il recupero del microcodice Intel 80386

La base del progetto arriva da un lavoro di reverse engineering iniziato anni fa nella comunità specializzata. Dopo il recupero del microcodice dell’8086, alcuni ricercatori indipendenti hanno applicato tecniche simili al 386: immagini ad alta risoluzione del die, elaborazione automatica, riconoscimento delle celle ROM e ricostruzione binaria delle microistruzioni.

Il lavoro non era banale. Il microcode ROM del 386 contiene circa 94.720 bit organizzati in una struttura molto più complessa rispetto a quella dell’8086: il team ha dovuto capire la disposizione delle micro-operazioni, i campi interni delle istruzioni e la logica dei decoder PLA usati da Intel negli anni ’80.

Come funziona z386

z386 gira principalmente su FPGA come DE10-Nano: il core replica l’architettura generale dell’Intel 80386 originale, includendo unità di prefetch per il caricamento anticipato delle istruzioni, decoder per l’interpretazione dei comandi, un sequencer a microcodice per la gestione delle operazioni interne, ALU per i calcoli aritmetici e logici, shifter per gli spostamenti di bit, TLB per accelerare la traduzione degli indirizzi di memoria nel sistema di paging e la logica di protezione che controlla accessi e privilegi del processore.

L’implementazione impiega una ROM con microcodice da 37 bit con 2.560 voci, una configurazione compatibile con quanto rilevato durante l’analisi del chip Intel originale. Il decoder delle istruzioni utilizza tabelle di tipo PLA, cioè strutture logiche programmabili usate per riconoscere prefissi, opcode, byte ModR/M, SIB e valori immediati. In pratica, il frontend della CPU ricrea il processo storico di decodifica delle istruzioni adottato dal processore 386.

Una delle parti più interessanti riguarda il sequencer del microcodice, cioè il componente che coordina le micro-operazioni interne del processore. Il processore 386 originale eseguiva sempre istruzioni tramite microcodice e non utilizzava una logica di esecuzione “hardwired“, ovvero circuiti dedicati che eseguono direttamente le istruzioni come avviene nei moderni processori superscalari. z386 riproduce questo comportamento lasciando al microcodice la gestione di eccezioni hardware (fault), salti, prefissi delle istruzioni e operazioni con privilegi di sistema.

Dal punto di vista prestazionale, il progetto raggiunge circa 85 MHz su chip FPGA moderni: i benchmark mostrano prestazioni paragonabili a un 386 di punta o a un 486 entry-level. Doom gira intorno ai 16,5 fps alla massima qualità, mentre 3DBench raggiunge circa 34 fps.

Perché il progetto interessa anche chi lavora oggi sulle CPU

Ridurre z386 a semplice nostalgia sarebbe un errore: progetti di questo tipo aiutano a capire come Intel progettava CPU complesse con budget transistor estremamente limitati. Il 386 originale conteneva circa 275.000 transistor; numeri minuscoli rispetto ai miliardi presenti nei processori moderni.

Osservando il microcodice emerge una filosofia diversa da quella attuale: molte operazioni che oggi finiscono in hardware dedicato erano orchestrate direttamente attraverso l’uso del microcodice. Le operazioni di moltiplicazione e divisione, per esempio, utilizzavano circuiti hardware dedicati per accelerare i calcoli, ma il loro funzionamento continuava a essere gestito da sequenze di istruzioni microprogrammate eseguite in ciclo.

Tra le caratteristiche più affascinanti l’efficienza e la compattezza delle soluzioni progettate da Intel. Nel processore 386, ad esempio, il barrel shifter – il circuito hardware che esegue rapidamente spostamenti e rotazioni dei bit – era utilizzato sia per le normali operazioni di shift sia per le più complesse rotate-through-carry, che coinvolgono anche il flag di riporto della CPU. In pratica, una singola unità hardware riusciva a svolgere funzioni molto diverse grazie a micro-operazioni altamente ottimizzate e dense di logica.

Un laboratorio aperto sulla storia dell’x86

La parte più importante del progetto forse non è nemmeno il core FPGA in sé. z386 dimostra quanto il reverse engineering hardware sia cambiato negli ultimi anni: tecniche di imaging ad alta risoluzione, strumenti automatici di analisi e collaborazione open source permettono oggi di esplorare CPU storiche con un livello di dettaglio impensabile fino a pochi anni fa.

Per chi studia architetture CPU, compatibilità x86 o progettazione microcodice, lavori di questo tipo valgono quasi come documentazione interna Intel. E non capita spesso.

In chiusura, un’osservazione cruciale. L’architettura x86 usata oggigiorno conserva ancora parecchi meccanismi ereditati direttamente dal 386: paging, privilege ring, modalità protetta, eccezioni precise, gestione dei fault e parte del modello segmentazione. Studiare il 386 significa ancora oggi capire le fondamenta dell’intera piattaforma PC contemporanea.

Ti consigliamo anche

Link copiato negli appunti