Articoli

MISTer FPGA

di: Luca Saati

Ho sentito “parlare” di MISTer qualche mese fa, quando ho per caso visto un video di gameplay di una versione di Streets of Rage 2 alla quale avevano sostituito la soundtrack originale con una di qualità CD. “Gira correttamente anche su MISTer”, c’era scritto.
Non è che io sia quello che si può definire “sprovveduto” nel mondo del Retrogaming, quindi do per scontato che questa piattaforma, da noi in Italia, non sia così famosa. Negli USA invece lo è e la community di appassionati e di gente che ha creato un vero e proprio business attorno a questo progetto continua a crescere ogni giorno sempre di più. E voi, lo sapete cosa è MISTer?

MISTer è un progetto che ha pochi anni di vita. Partito originariamente come piattaforma (chiusa, non opensource) basata su FPGA per emulare Atari-ST, ha visto una evoluzione pazzesca. La storia è abbastanza semplice, per cui ve la racconto: c’era un ragazzo che creava appunto questa scheda e la vendeva, oltre a sviluppare un proprio core dedicato. Altri (core) per console e retrocomputer hanno iniziato ad essere sviluppati da altri programmatori. La domanda c’era, il progetto, lato hardware, era però completamente in mano ad un’unica persona. Appena hanno iniziato a scarseggiare le scorte relative alla componentistica utile a crearle, unita forse alla poca voglia di continuare a produrre queste schede, il progetto ha subito una brusca frenata. Serviva quindi una nuova piattaforma su cui basarsi. Serviva però più potenza, magari a buon mercato dato che i costi delle FPGA, su cui ci si basava, erano abbastanza alti. Qualcuno (Alexey Melnikov, AKA Sorgelig) ha individuato una scheda prodotta da Terasic, la Altera DE-10 Nano FPGA Development Kit, proposta al prezzo di 130$ (qualcuno meno, 110, se acquistata per scopi educativi). Negli USA questa scheda si trova tranquillamente negli store di elettronica più diffusi, in Italia bisogna affidarsi a eBay o a qualche negozio UK dedicato a MISTer, oppure rivolgersi direttamente a Terasic, con il rischio di incappare quasi sicuramente in spese doganali (nel mio caso è successo).

Altera DE-10 Nano è una scheda di sviluppo ibrida FPGA/ARM: come core ha infatti un Intel Cyclone V che contiene appunto una unità FPGA associata ad un dual-core ARM Cortex 9 . Presenta inoltre una uscita HDMI, 3 porte USB (due mini e una micro) ognuna destinata ad uno specifico uso, una porta Ethernet, GPIO a 40 pin, 1GB di SDRAM di tipo DDR3 ed un lettore di MicroSD. Sono caratteristiche di rilievo.

Ma cosa spinge questi sviluppatori ad una FPGA? La risposta è molto semplice e si traduce in un’unica parola: lag.
Mentre gli emulatori che tutti noi abbiamo usato o usiamo, anche quelli meglio ottimizzati, per emulare restano comunque soggetti a delle logiche che governano certi processi in maniera sequenziale, FPGA emula invece direttamente l’hardware originale con le stesse identiche logiche attive sull’unità fisica reale, operando i processi in parallelo.
Nel primo caso il lag si abbassa aggiungendo mera potenza di calcolo, nel secondo caso è del tutto assente o, meglio, è identico a quello presente nell’hardware originale. Eventuale lag si aggiunge esclusivamente attraverso il monitor se questo non ha tempi di risposta veloci…in ogni caso dipende esclusivamente dalla periferica usata, non da altro.

MISTer nasce dunque come un contenitore (framework), unico e gestito direttamente dalla CPU ARM tramite una versione custom di Linux, di core dedicati a console e retrocomputer (replicati all’interno della FPGA). Il vantaggio è che una volta impostati i settaggi audio/video/I-O, tutti i core eseguiti sottostanno a questi, con la possibilità ovviamente di personalizzarli ad hoc se richiesto. Si è quindi arrivati ad avere un progetto completamente opensource che si appoggia ad un hardware diffuso e tutto sommato a buon mercato. Bingo!

Cosa serve per iniziare? Beh, intanto serve molta pazienza, perché le informazioni ci sono ma la curva d’apprendimento è parecchio difficile da scalare. Diciamo che la dotazione di base prevede l’acquisto della Altera DE-10 Nano FPGA Development Kit, che vi arriva a casa con una scheda MicroSD da 8GB, un cavo USB ed il suo alimentatore. Con questa diciamo che avete in mano una unità per MISTer già buona. Va ovviamente programmata, dopo vi spieghiamo come.
Scrivo buona perché la programmazione su FPGA si scontra con un problema relativo all’accesso della RAM di sistema, che ricordo essere 1GB. Per questioni tecniche, non si riesce ad ottenere prestazioni decenti usando questa memoria, motivo per il quale viene assegnata completamente al framework. Le uniche due memorie utilizzabili da FPGA sono quella virtuale (BRAM) oppure una eventuale RAM aggiunta utilizzando le numerose espansioni offerte dalla scheda. La prima non è tanta e per alcuni core (tra tutti quello NeoGeo) neanche sufficiente. Ecco quindi che una ottima dotazione prevederebbe l’aggiunta di un quantitativo di RAM extra. Io ho preso direttamente il taglio da 128MB, ma si può partire anche con 32MB che costa decisamente meno. Sono moduli non standard, per cui non avrete nulla da poter riciclare facilmente da vecchi PC.
Potremmo fermarci qui, ve lo dico onestamente. Tutto quello che si può aggiungere come moduli hardware è a mio avviso superfluo ma in alcuni casi, dipende sempre da quello che volete farci, potrebbe diventare utile.
Mi riferisco ad esempio al modulo di espansione USB Hub. Come scritto all’inizio la scheda ha 3 porte USB ma solo una (l’unica di tipo micro) è utilizzabile per collegarci ad esempio un pad, un disco esterno o un adattatore. Ricordatevi però che collegare molti dispositivi, utilizzando ad esempio un hub non autoalimentato, causa sempre qualche problema, specie se iniziate ad avere dischi esterni. Si possono quindi usare hub autoalimentati, oppure ricorrere ad una soluzione molto più elegante rappresentata dall’ USB Hub. Questa va posizionata sotto alla DE-10, sfruttando i piedini e collegata tramite un bridge che, vi dico subito, è molto delicato. Collegatelo e non toccatelo più, questo il mio consiglio.
I vantaggi qui sono due: si mantiene tutto all’interno di un unico dispositivo senza dover ricorrere ad alimentatori aggiuntivi, in quanto l’alimentazione viene presa tramite uno sdoppiatore direttamente da quella principale, e si hanno a disposizione subito 7 porte con relativo led di stato. Ho notato in ogni caso che sarebbe meglio passare ad un alimentatore con un amperaggio maggiore nel caso vogliate sfruttare al massimo questo accessorio: va bene qualsiasi 5V, con barilotto 5.5 e interno positivo 2.1.

Esistono poi altri due add-on, per chiudere il discorso di quelli più famosi: RTC e I/O Board. Il primo serve per avere un orologio interno alimentato a batteria. Se avete MISTer collegato ad internet, ad ogni avvio l’orario verrà impostato in automatico.
I/O Board serve invece per aggiungere degli input e output alternativi. Porta in dote 3 pulsanti (reset, menù e uno configurabile), una uscita VGA (risoluzioni a partire da 240p fino ad arrivare a 1080p) ed un jack audio da 3.5mm. Questo può essere usato, tramite adattatore, per una connessione ottica digitale TOSLink. A corredo poi alcuni led che indicano l’attività della board e l’accesso al disco.
Particolarità è che al centro risiede una ventola che servirà a raffreddare attivamente il Cyclone V, magari con l’ausilio di un bel dissipatore installato per fare le cose fatte bene. I/O Board ha poi una seconda scheda microSD che può essere usata da alcuni core come disco virtuale di sistema.
Entrambi ho scelto di non acquistarli, anche se la I/O board mi alletta più per il discorso ventola che per il resto.

Tutti questi add-on sono completamente opensource, dalle PCB fino alla scelta dei singoli componenti. Potete tranquillamente ordinare le schede e assemblarle da soli, i progetti sono tutti all’interno del canale GitHub di MISTer, altrimenti acquistarli già assemblati da numerosi negozi che offrono questo servizio.

La configurazione che vi consiglio è quindi la seguente:

  • Altera DE-10 Nano FPGA Development Kit (contiene alimentatore e microUSB da 8GB)
  • MicroSD Samsung EVO PLUS 128GB (fortemente consigliata, dimensioni e brand a piacere ma, visti i prezzi, io andrei diretto sulle 128GB)
  • 128MB MiSTer SDRAM Extra Slim Board (se volete spendere meno vi potrebbero bastare 32MB)
  • USB Hub (se possedete già un hub USB autoalimentato, usate pure quello)
  • WIFI adapter, io ho preso il modello Edimax EW-7822ULC che funziona correttamente semplicemente inserendolo (opzionale, se non avete accesso ad un cavo ethernet)
  • 8Bitdo Adattatore Bluetooth senza fili (necessario se volete un controller wireless)
  • Cavo HDMI (necessario)
  • Una tastiera USB

Come già scritto, il modulo WIFI funzionerà anche da modulo RTC per impostare data e orario.
Una configurazione di questo tipo vi verrà a costare grossomodo dalle 180€ alle 300€, cifra importante ma da valutare nell’ottica di quello che viene offerto.
Ho lasciato volontariamente fuori il discorso controller. L’adattatore che vi ho consigliato, infatti, è compatibile con tutti i controller bluetooth che hanno accompagnato le ultime generazioni di console. Se già possedete una di queste, potete usarli senza problemi, altrimenti dovete valutare le tante soluzioni in commercio, eventualmente anche quelle cablate che a questo punto potrebbero farvi evitare di spendere i soldi dell’adattatore. Se optate per una soluzione wireless, fate riferimento a questo foglio per trovare i modelli dotati di lag bassi. Io per varie ragioni ho sempre optato per i controller 8Bitdo, anche se in questo momento sto usando solo il controller di Xbox One.

Ok, abbiamo tutto sottomano quindi? Iniziamo a far funzionare questo MISTer, che dite?

Io dopo quasi due mesi di utilizzo ho capito che la strada più semplice è la migliore, quindi vi mostrerò come preparare al minimo la MicroSD per poi demandare completamente a MISTer la creazione di tutta la struttura utile a far funzionare ogni core messo a disposizione della community.

  • Inserite la MicroSD all’interno del vostro PC
  • Scaricate l’ultima versione disponibile del software per MISTer da questa pagina  e scrivetela con un software gratuito tipo Balena Etcher sulla vostra MicroSD.
  • Ora controlliamo come sono impostati i 6 dip switch presenti nella scheda. Questi sono quelli corretti:
  • Successivamente, una volta scritta con successo, trasferiamoci al monitor, colleghiamo MISTer e inseriamo la MicroSD per il primo Boot.

In questa fase MISTer creerà la struttura base del framework, dandovi poi la possibilità di intervenire e personalizzare il tutto. Terminata questa fase spegniamo (staccate la spina, non c’è un interruttore e non ci sono neanche problemi o danni causabili da questo modo di procedere), estraiamo la MicroSD e torniamo al PC.

E’ il turno di scaricare e copiare un piccolo script che si occuperà di fare il download di tutti i core e una lista completa di giochi arcade supportati, senza farvi diventare scemi tra file .mra e cartelle di vario tipo. Questo script, inoltre, ha al suo interno la possibilità di tenere aggiornato il software base di MISTer, oltre che alcune aggiunte come sfondi personalizzati, bios e altre cose che vi invito a scoprire da soli.
Collegatevi a questo indirizzo; scaricate l’ultima versione (1.3 al momento, oppure cliccate su LATEST RELEASE a destra della pagina) ed estraetela all’interno della cartella Scripts presente nella root della vostra MicroSD, tipicamente seguendo il percorso /media/fat/Scripts.

Sarete felici di apprendere che, lato PC, avete terminato il grosso del lavoro che c’era da fare. Trasferiamoci quindi di nuovo al monitor e inseriamo la MicroSD. Il sistema si accende in 1 secondo circa, ed è già pronto all’uso.

L’uso della tastiera, specie in questa prima fase, è obbligatorio. Di seguito vi riporto alcuni comandi che vi sarà utile conoscere:

  • F12 – Riporta sempre al menù principale.
  • ALT F12 – Riporta sempre nel menù di scelta dei core
  • F1 – modifica lo sfondo ciclicamente tra quelli caricati
  • F11 – Bluetooth pairing menu
  • F9 – Prompt dei comandi Linux (F12 per tornare al menù iniziale)
  • Left Shift + Left Ctrl + Left Alt + Right Alt – Riavvio
  • Windows + Print Screen – Screenshot

Per trovare lo script appena installato dobbiamo andare nel menù principale (F12):

Da qui scegliere script e successivamente la voce evidenziata (dovrebbe apparirvi se avete fatto tutto correttamente)

Date invio e, se avete una connessione internet attiva e configurata (se usate WIFI andate sempre nel menù script, dove troverete la voce “wifi” che vi guiderà alla sua configurazione) vi dovrebbe apparire dopo pochi secondi questa schermata:

Vi consiglio di scegliere la voce evidenziata, così da far scaricare tutti i core console/retropc/arcade disponibili, compresi alcuni core di vecchi giochi arcade (ci sono pure degli ottimi core di CPS1 come Street Fighter 2 e Ghouls’ n Ghosts). Al termine dovreste ritrovarvi di nuovo in questa schermata appena vista, scegliete Cancel così da tornare al menù principale. Andato nel menù dei core dovreste ora averne parecchi, soprattutto in quello arcade vi dovrebbero apparire tutte queste scelte:

Entrando dentro Arcade, ad esempio:

Qui troverete tutti i core ufficiali disponibili di vecchi giochi arcade. Sono tutti già giocabili, dentro Unofficial dovreste poi trovare anche altri core molto interessanti, soprattutto quelli basati su CPS1:

Premendo invio potete eseguire il gioco, prima però forse è il caso di configurare il vostro controller USB o Wireless. Per farlo premete F12 e scegliete la voce evidenziata:

Poi premete DESTRA nel controller così da permettere al sistema di capire di quale si tratta; a quel punto vi verrà chiesto di premere in successione alcuni tasti a cui voi dovete attribuire l’omologo rispetto al vostro controller. Se avete sbagliato o volete cambiare qualche tasto, vi basterà ricominciare. Avete la possibilità poi, all’interno di ogni core, di impostare una nuova configurazione…questa appena impostata sarà quella base che verrà proposta come default.

Avendo già il sistema creato poi, all’interno della MicroSD, la struttura completa di tutti i core disponibili, potete tranquillamente trasferire dentro la cartella che riporta il nome della console o del retrocomputer che vi interessa, tutte le vostre rom in possesso.

Una volta fatto, per eseguire ad esempio Sonic per Megadrive, non dovrete fare altro che premere ALT F12 (menù dei core), scegliere Console, Genesis (attendete qualche secondo per permettere a MISTer di caricare il core) e poi LOAD *.BIN etc.

Quello che vi apparirà poi è il contenuto della cartella Genesis della MicroSD (nel mio caso ho usato la struttura che uso abitualmente nella mia Mega Everdrive Pro)

Premendo Invio, partirà il gioco scelto. Potete poi tornare indietro e caricare un altro gioco, sempre attingendo tra quelli inseriti dentro la cartella riportante il nome del core eseguito. Il concetto è semplice: una volta caricato il core, MISTer diventerà a tutti gli effetti la console/retrocomputer/arcade che avete scelto, quindi non potete eseguire una rom SNES se state eseguendo il core Genesis!

Potete ovviamente caricare un nuovo core premendo ALT+F12, oppure riavviando MISTer.

Ci sono poi un sacco di funzioni come i cheat, settaggi per modificare la resa grafica o impostazioni proprie dei giochi; tutte cose che vi invito a scoprire o a cui dedicheremo in futuro un altro articolo. Se avete dubbi o altro commentate pure, nel possibile cercherò di rispondere.

Questo articolo è stato reso possibile grazie all’aiuto di Sharon Liu di Terasic, che ringraziamo per la disponibilità dimostrata, e a James del sito www.retrokit.tech che ci ha inviato alcuni componenti. Ad entrambi va la nostra gratitudine.