Far girare Windows 95, DOS, Windows 3.x o una distribuzione Linux minimale su un microcontrollore che nasce per pilotare sensori, display e periferiche embedded sembra quasi un’impresa folle. Eppure, il progetto open source (licenza MIT) battezzato FRANK 386 dimostra che il confine tra microcontroller e computer general purpose può diventare sorprendentemente sottile.
L’iniziativa porta l’emulatore Tiny386 sul chip RP2350 usato dalla Raspberry Pi Pico 2 e da numerose schede compatibili, costruendo attorno a esso un PC i386 virtuale dotato di memoria, VGA o HDMI, storage su scheda SD, tastiera, mouse e persino periferiche audio tipiche degli anni ’90.
Intel presentò il processore 80386 il 17 ottobre 1985: era una CPU x86 completamente a 32 bit, costruita con circa 275.000 transistor e inizialmente proposta a 16 MHz. Dieci anni più tardi, il 24 agosto 1995, Microsoft lanciò Windows 95, sistema operativo che contribuì a rendere familiare l’interfaccia con menu Start e barra delle applicazioni e che vendette circa 7 milioni di copie nelle prime cinque settimane. Oggi una parte consistente di quel mondo può essere ricreata attraverso un RP2350, cioè un microcontrollore con 520 KB di SRAM interna e due core che Raspberry Pi dichiara capaci di funzionare fino a 150 MHz nelle condizioni previste dal progetto hardware.
Il firmware FRANK 386 richiede comunque una piattaforma RP2350 con memoria esterna, uscita video, storage e collegamenti appropriati. La configurazione prevista dal progetto arriva fino a 8 MB di PSRAM, una quantità minuscola rispetto a qualsiasi computer di oggi ma già sufficiente per riportare in vita una parte significativa del software per PC degli anni ’80 e ’90.

Da Tiny386 a FRANK 386: perché il progetto è stimolante
Come accennato in apertura, FRANK 386 nasce come porting di Tiny386, emulatore sviluppato da Chunhui He e scritto principalmente in C99.
Tiny386 punta da tempo sulla portabilità: prima delle versioni RP2350 era già riuscito ad avviare sistemi Windows 9x e Windows NT su microcontrollori ESP32-S3. Il “nocciolo” del progetto comprende un interprete della CPU i386 relativamente compatto, affiancato dall’emulazione delle principali periferiche necessarie per ottenere una macchina IBM PC compatibile utilizzabile.
Dietro all’iniziativa vi è la ricostruzione software di buona parte dell’architettura hardware di un vecchio PC: controller degli interrupt, timer, controller della tastiera, VGA, IDE, DMA, audio e firmware BIOS. Il microcontrollore non esegue direttamente il codice x86: traduce e interpreta il comportamento della CPU e delle periferiche che il software guest si aspetta di trovare.
Tiny386 dichiara il supporto completo alla base i386, con alcune istruzioni appartenenti alle generazioni 486 e 586 necessarie per ampliare la compatibilità con il software più recente.
Il progetto originale è cresciuto ulteriormente fino a includere componenti i686, MMX, SSE fino a SSSE3 e persino una modalità AMD64 opzionale; FRANK 386, però, concentra l’attenzione sul modello di macchina 386 e sulle estensioni realmente utili al software che intende eseguire.
RP2350 non è un processore x86: l’emulazione ha un costo
Il chip RP2350 dispone di due possibili architetture CPU: può utilizzare una coppia di core Arm Cortex-M33 oppure due core RISC-V Hazard3.
Raspberry Pi indica una frequenza nominale fino a 150 MHz, 520 KB di SRAM interna, controller USB 1.1 con modalità host e device, tre blocchi PIO per un totale di 12 state machine e varie interfacce SPI, UART, I2C e PWM.
Non esiste alcuna compatibilità hardware tra il set di istruzioni Arm o RISC-V del microcontrollore e quello x86 del software DOS o Windows. Ogni istruzione guest deve quindi passare dall’emulatore, che aggiorna registri, flag, memoria e stato delle periferiche virtuali.
Per questo motivo non bisogna interpretare i 378 o 504 MHz utilizzati da alcune configurazioni di FRANK 386 come l’equivalente della frequenza di clock di una CPU x86. Sono frequenze operative del microcontrollore configurate dal firmware; il numero effettivo di istruzioni x86 eseguibili al secondo dipende dal tipo di istruzione, dagli accessi alla memoria, dal video, dall’I/O e dalla quantità di lavoro richiesta agli altri componenti emulati.
RP2350 offre tuttavia caratteristiche particolarmente utili per progetti del genere: i blocchi PIO (Programmable I/O, blocchi hardware configurabili che gestiscono segnali e protocolli con temporizzazioni precise senza caricare la CPU) permettono di delegare a hardware programmabile una parte della gestione degli I/O con temporizzazioni precise; l’interfaccia QSPI (Quad Serial Peripheral Interface) può collegare memorie esterne; il controller USB può lavorare come host. Sono elementi che non rendono l’emulazione x86 più semplice in senso stretto, ma aiutano a costruire attorno all’emulatore un computer fisicamente utilizzabile.

Un PC virtuale con VGA, HDMI e periferiche storiche
Il firmware supporta modalità testuali e grafiche fino a 640×480 pixel, con uscita VGA oppure HDMI a seconda dell’hardware utilizzato. Nel caso delle schede RP2350 orientate al retrocomputing, GPIO e PIO possono generare segnali video senza richiedere una GPU tradizionale.
Il progetto Frank 386 eredita inoltre da Tiny386 e da altri software open source l’emulazione di numerosi componenti di un PC compatibile: controller interrupt 8259, timer 8254, controller tastiera 8042, DMA, VGA e altre periferiche.
La sezione audio è forse una delle parti più curiose. FRANK 386 contempla AdLib OPL2, Sound Blaster 16, PC Speaker, Tandy, Covox e Disney Sound Source; è previsto anche MPU-401 tra le opzioni configurabili. L’uscita fisica può passare attraverso un DAC I2S oppure PWM. Per chi vuole usare vecchi videogiochi DOS, la differenza è sostanziale: non si ottiene semplicemente un prompt dei comandi, ma una macchina che cerca di riprodurre anche l’hardware sonoro atteso dai titoli dell’epoca.
Windows 95 funziona, ma non bisogna aspettarsi un PC moderno in miniatura
Come abbiamo detto, il repository indica esplicitamente DOS, Windows 3.x, Windows 95 e Linux tra i sistemi avviabili. Sono risultati notevoli per un microcontrollore, ma la compatibilità va letta entro i limiti di Tiny386. L’emulatore originale segnala, per esempio, l’assenza di alcune funzioni poco comuni dell’i386, tra cui hardware tasking completo, debugging e parte dei controlli sui permessi.
Per Windows 95 esistono inoltre alcune particolarità. Se l’installer segnala “0 bytes of memory“, la documentazione suggerisce di avviare il setup con l’opzione setup /im, che evita il controllo della memoria.
In caso di “Windows protection error“, il progetto rimanda a patcher9x, utility nata per correggere diversi problemi di Windows 95 e Windows 98 con processori e ambienti molto più veloci o diversi rispetto a quelli per cui il software Microsoft venne originariamente progettato.
Questi accorgimenti raccontano un aspetto interessante dell’emulazione storica: riprodurre correttamente una vecchia architettura non significa soltanto implementarne le istruzioni. Alcuni sistemi operativi contengono assunzioni implicite su temporizzazioni, CPU, firmware e comportamento delle periferiche. Un emulatore sufficientemente veloce può perfino mettere in crisi software nato quando certe velocità sembravano irraggiungibili.
Perché FRANK 386 dice qualcosa anche sull’hardware odierno
Il progetto FRANK 386 mostra quanto siano diventati potenti i microcontrollori di fascia economica e, soprattutto, quanto siano migliorate le loro periferiche programmabili e le possibilità di collegare memoria esterna veloce.
Un RP2350 resta molto diverso da un processore applicativo come quelli montati su Raspberry Pi più “importanti”. Non esegue Linux nativamente come una Raspberry Pi 5 e non dispone di gigabyte di RAM, controller PCIe completi o GPU comparabili. Proprio per questo il risultato è interessante: l’obiettivo non è raggiunto aumentando semplicemente le risorse, ma sfruttando in modo estremamente efficiente quelle disponibili.
FRANK 386 rende osservabile l’architettura di un PC quasi pezzo per pezzo: CPU, BIOS, PIC, PIT, DMA, controller tastiera, VGA, IDE, audio e filesystem appaiono come componenti distinti invece di dissolversi dentro la complessità di un computer contemporaneo. Per chi studia sistemi operativi o architetture hardware, vedere Windows 95 partire da una catena di componenti software così esplicita può insegnare più di molte rappresentazioni astratte.
E poi c’è la parte più semplice, che non va sottovalutata: è divertente. Inserire una scheda SD, collegare VGA, tastiera e audio, avviare DOS o Windows 95 e sapere che tutto gira su un microcontrollore RP2350 resta uno di quei piccoli cortocircuiti tecnologici capaci di spiegare quanto sia cambiata la potenza di calcolo disponibile in pochi centimetri quadrati.