Non è un PC, ma fa girare DOS e Windows

Ogni tanto capita di raccogliere qualcosa a una fiera e poi tenerlo in un cassetto finché non arriva il momento giusto per tirarla fuori. Questa scheda l’ho presa all’ultima Maker Faire, da Shighe, un amico giapponese che gestisce un negozio in Giappone e aveva uno stand molto interessante. L’idea di fondo era semplice quanto simpatica: una scheda pensata per fare retrocomputing, costruita però su hardware moderno, combinando il progetto dell’italiano Fabrizio Di Vittorio — ovvero la libreria FABGL — con un ESP32.

Il risultato? Un sistema che monta un ESP32 da 38 pin come cuore tecnologico e che, con la giusta configurazione, riesce a emulare DOS, Windows 3.0, CP/M e altro ancora. Non un PC nel senso classico, ma qualcosa che ci si avvicina in modo sorprendentemente funzionale.

La libreria FABGL

FABGL è una libreria grafica per ESP32 che permette, tra le altre cose, di pilotare un monitor VGA direttamente dal microcontrollore. Non è solo un controller video: include anche un emulatore di CPU x86 che consente di far girare sistemi operativi come DOS e le prime versioni di Windows.

Per chi ha seguito i video dedicati alla VGA su questo canale — soprattutto il percorso verso la scheda video per ALEX80 — ritroverà concetti familiari: segnali di sincronismo, livelli di tensione, resistenze di terminazione da 75 ohm. Il collegamento tra i due percorsi non è casuale.

Assemblaggio della scheda

La scheda arriva da assemblare. Shighe fornisce anche una documentazione tradotta in italiano, con schema elettrico completo e lista dei componenti. L’assemblaggio procede per strati di altezza: prima le resistenze (da 120 Ω fino a 10 kΩ), poi il lettore di schede SD in SMD, i condensatori (due da 100 nF e due elettrolitici da 10 µF), i connettori per l’ESP32 montati su zoccolo, il connettore VGA e le due porte PS/2 per tastiera e mouse.

Un paio di note pratiche dall’assemblaggio:

  • I condensatori da 10 µF, nonostante il disegno potesse far pensare a componenti ceramici, sono elettrolitici. La polarità non è indicata nella serigrafia, ma si ricava facilmente seguendo il circuito: entrambi con il negativo verso destra.
  • Il jack audio non era disponibile nel kit (i componenti erano finiti alla Maker Faire), quindi ho usato un jack volante collegando i due canali destro e sinistro — che sulla scheda sono uniti — a uno dei pin, e la massa all’altro.
  • L’ESP32 va montato su zoccolo per poterlo rimuovere e riprogrammare facilmente. Attenzione alle dimensioni: il modulo da 38 pin è quello previsto dallo schema; un modulo più stretto con meno pin non è compatibile.

Configurazione in Arduino IDE

FABGL si installa tramite il gestore librerie di Arduino IDE. Il supporto ESP32 si aggiunge dalle impostazioni delle board aggiuntive (URL di Espressif), ma c’è un dettaglio importante: FABGL richiede una versione più vecchia del pacchetto ESP32, non quella più recente. Installare la versione sbagliata produce una quantità considerevole di errori di compilazione.

Una volta installato tutto correttamente, tra gli esempi disponibili compaiono Space Invaders, il simulatore Commodore VIC-20 e il PC emulator.

Test con l’oscilloscopio

Prima di collegare il monitor VGA ho fatto un rapido test all’oscilloscopio, usando un adattatore VGA con i pin esposti. Per verificare i livelli corretti dei segnali colore ho inserito una resistenza di terminazione da 75 Ω, come da standard VGA.

I risultati erano quelli attesi:
– Segnali colore limitati a circa 700 mV picco, in linea con lo standard VGA.
– Segnali di sincronismo a 3,3 V, il livello logico dell’ESP32, compatibile con lo standard TTL previsto per il sync.

Space Invaders e il primo test su monitor

Dopo il test con l’oscilloscopio, possiamo collegare senza problemi il monitor VGA. Space Invaders parte correttamente: grafica, audio e velocità di gioco nella norma. Si nota anche il classico effetto di accelerazione progressiva dei nemici man mano che vengono eliminati — un comportamento legato all’hardware originale, non un effetto voluto del gioco.

DOS e Windows 3.0: serve la PSRAM

Per l’emulazione PC completa la situazione si complica leggermente. Il PC emulator richiede:

  • Una scheda SD (da 8 GB in su) su cui vengono scaricate le immagini dei sistemi operativi.
  • Un modulo ESP32 con PSRAM, ovvero un modello che integra RAM esterna sul package. Il modulo standard non è sufficiente. Ho usato un modello WROVER, riconoscibile anche dalla presenza del connettore per la camera.
  • In Arduino IDE, selezionare il profilo “ESP32 WROVER Kit all version” (non il semplice WROVER Module, che non espone alcune opzioni di configurazione necessarie).
  • Nei tool di configurazione: impostare la CPU a 240 MHz, disabilitare il supporto PSRAM a livello IDE (il codice la gestisce direttamente a basso livello per motivi di prestazioni).

La prima volta che si avvia il sistema, viene richiesta la configurazione Wi-Fi. L’ESP32 la usa per scaricare le immagini dei sistemi operativi dal server di FABGL, salvarle sulla scheda SD e poi avviarle localmente. I download successivi sono rapidi (un floppy da 1,44 MB si scarica in pochi secondi); le immagini più grandi, fino a 20 MB, possono richiedere una ventina di minuti — ma è un’operazione che si fa una volta sola.

I sistemi disponibili includono, tra gli altri: FreeDOS, Windows 3.0, CP/M con Turbo Pascal, GEM 3.13.

Considerazioni finali

Windows 3.0 parte in modalità monocromatica — non c’è abbastanza capacità per risoluzioni più alte — e l’immagine è un po’ allungata verticalmente. Non è il massimo della fedeltà visiva, ma il sistema operativo funziona: si avvia il Program Manager, si lancia il Solitario, il mouse PS/2 risponde. Serve un vero mouse PS/2 (gli adattatori USB-PS/2 da quattro soldi non funzionano in questo contesto).

Le prestazioni sono quelle che ci si aspetta da un microcontrollore che emula hardware x86 degli anni ’90: non velocissime, ma non drammaticamente lente per i sistemi di quel periodo.

L’aspetto che trovo più interessante di questo progetto è il collegamento con il lavoro sulla VGA per ALEX80: ritrovare all’oscilloscopio gli stessi segnali che stiamo cercando di generare con l’FPGA è un buon modo per consolidare la comprensione del protocollo. Due progetti completamente diversi per architettura, ma con un punto di contatto preciso.

Nel video trovate l’assemblaggio completo, i test all’oscilloscopio e la dimostrazione dei vari sistemi operativi in funzione.

Avatar Paolo Godino