Un PC i386 su Raspberry Pi Pico 2: l’emulatore Tiny386 su RP2350

Una scheda di sviluppo da pochi euro puo’ diventare un PC i386 completo. E’ quello che fa l’emulatore Tiny386 portato sulle schede RP2350 da Mikhail Matveev: la Raspberry Pi Pico 2 emula una CPU i386, dialoga con una scheda SD, pilota un’uscita VGA o HDMI e accetta tastiera, mouse e gamepad. Il firmware avvia DOS, Windows 3.x, Windows 95 e Linux, quindi si comporta come un vero PC degli anni Novanta, solo molto piu’ piccolo.

Il cuore e’ il core Tiny386 di Chunhui He, che emula una CPU i386 completa con istruzioni parziali i486 e i586 e un x87 FPU opzionale. L’integrazione sulla piattaforma RP2350 si chiama Pico-286 e riprende i pattern hardware di QuakeGeneric. Per le periferiche PC il codice arriva da QEMU, mentre il BIOS e’ SeaBIOS con il suo VGA BIOS. Il tutto gira su Raspberry Pi Pico SDK versione 2.0 o superiore.

PSRAM da 8MB, SD in SPI e clock a 378 MHz

La memoria e’ il vincolo principale di un emulatore x86 su microcontrollore, e qui si risolve con la PSRAM da 8MB montata sulla scheda. L’emulatore usa fino a 8MB di RAM, mentre il menu impostazioni lascia configurare da 1 a 8 MB. La frequenza CPU predefinita nella build e’ 378 MHz, con opzione a 504 MHz, e la PSRAM gira a 133 MHz con opzione a 166 MHz. Sono numeri che vanno tenuti d’occhio, perche’ spingere il clock aiuta l’emulazione ma scalda e consuma di piu’.

Lo storage passa dalla scheda SD in modalita’ SPI, gestita dal modulo FatFs per il filesystem FAT. Le immagini disco si leggono a runtime tramite un disk manager che si apre con Win+F12: da li’ si scelgono floppy, disco rigido e CD-ROM. La dimensione massima delle immagini disco rigido supportate e’ 2GB, mentre i floppy standard sono da 1.44MB, cioe’ 1474560 byte. Il menu impostazioni si apre invece con Win+F11 e modifica la configurazione dell’emulatore a caldo, senza riavviare.

VGA o HDMI, PS/2, USB Host e audio I2S

L’uscita video arriva su un connettore VGA o HDMI e copre le modalita’ testo e grafica fino a 640×480. Per l’input ci sono due strade. La prima e’ la classica PS/2, con tastiera e mouse dedicati. La seconda sfrutta l’USB Host nativo dell’RP2350, quindi si possono collegare tastiera e mouse USB. In piu’ c’e’ il supporto al gamepad NES, che puo’ lavorare in modalita’ emulazione mouse. L’audio esce da un DAC I2S e la sintesi FM per AdLib arriva dal MAME FM Sound Generator, il modulo fmopl.

  • Raspberry Pi Pico 2 con RP2350 come scheda di base
  • PSRAM da 8MB per arrivare a 8MB di RAM emulata
  • scheda SD in modalita’ SPI per floppy, disco rigido e CD-ROM
  • tastiera e mouse PS/2, oppure tastiera e mouse USB via USB Host nativo
  • gamepad NES o SNES con modalita’ emulazione mouse
  • DAC I2S per l’uscita audio
  • connettore VGA o HDMI per il video

Chi vuole rifare il progetto trova nel repository di Mikhail Matveev il codice da compilare, con l’integrazione Pico-286 per RP2350 e i moduli di terze parti gia’ collegati. Il parser dei file INI e’ inih, il filesystem e’ FatFs, il BIOS e il VGA BIOS vanno forniti come bios.bin e vgabios.bin. La build si fa con Raspberry Pi Pico SDK 2.0 o superiore, quindi serve una toolchain ARM aggiornata e un po’ di pazienza sulla configurazione dei clock.

Per il montaggio non servono componenti esotici: la scheda, la PSRAM, lo slot SD, i connettori e il DAC. Per la parte di storage, un modulo MicroSD Card Reader con interfaccia SPI replica lo schema di lettura in SPI usato dal firmware per floppy, disco rigido e CD-ROM. Per l’uscita audio, un convertitore audio DAC con interfaccia I2S copre la stessa funzione del DAC descritto nel progetto.

Il risultato e’ un PC i386 con periferiche complete al costo di una scheda di sviluppo economica. DOS, Windows 3.x, Windows 95 e Linux girano su hardware tascabile, con 8MB di RAM, 640×480 di grafica e storage su SD. Per chi vuole capire come si emula una macchina x86 su un microcontrollore, o semplicemente vuole un DOS portatile da banco, questo e’ un punto di partenza concreto.


Fonte: https://github.com/rh1tech/frank-386

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Menu