Retro gaming con FPGA

Immagine presa da qui
https://www.classicgaming.cc/classics/space-invaders/technical-info

Cos’è un FPGA

Una FPGA (Field Programmable Gate Array) è un circuito integrato che contiene un certo numero di macrocelle che si chiamano LUT o LE a seconda della marca (Lattice, Intel, Altera etc)

L’interconnessione di queste macrocelle può dare origine a qualsiasi circuito digitale esistente.

Per fare una CPU come lo Z80 (ZX Spectrum) o il 6510 (simile al 6502 usato sul Commodore 64), ad esempio, bastano circa 700 macrocelle (leggi qui)
https://electronics.stackexchange.com/questions/400504/how-many-luts-are-needed-to-implement-a-cpu

MiSTer

La piattaforma MiSTer nata nel 2017, utilizza una FPGA Cyclone V della Intel con a bordo 110.000 macrocelle.
Una roba sproporzionata rispetto alle reali necessità di un videogioco anni ’80.

In più.
Siccome dentro alle FPGA alla fine una CPU fa sempre comodo per controllare il funzionamento generale della macchina, nel Cyclone V hanno integrato una CPU Arm dual core… così non sprechi le 110.000 macrocelle per fare la tua CPU e hai una serie di software già pronti come Linux da utilizzare per il controllo del tuo chippone.

I vantaggi di usare una FPGA rispetto ad un emulatore come il MAME è evidente: latenza.
Sulla FPGA tutti i circuiti lavorano in parallelo, audio, video, controller sono interconnessi a livello hardware.

Se guardate un gioco Amiga girare su MAME, vi accorgerete che lagga, anche se il Motorola 68.000 emulato dal MAME va 100 volte più veloce di quello dell’Amiga originale!!

Il gioco che gira su MiSTer infatti gira sullo stesso hardware in cui girava allora, con la differenza che il segnale video esce su HDMI invece che in analogico.

Hardware sintetizzato

Per programmare questi circuiti hardware fatti di macrocelle, si usa un linguaggio ad alto livello; tra i più famosi abbiamo VHDL, Verilog e System Verilog .

In alcuni progetti nel repo della MiSTer li troviamo tutti e tre: .v –> Verilog, .vhd –> VHDL, .sv –> System Verilog

image

Usando questi linguaggi di descrizione dell’hardware si possono quindi definire tutti i circuiti digitali esistenti (e anche quelli non ancora inventati).

E’ software che sintetizza l’hardware (infatti il processo che avviene dopo la compilazione del sorgente si chiama sintesi ed è in quel momento che il progettista specifica l’hardware fisico (la FPGA) dove vorrà far girare il circuito digitale.

Il compilatore quindi compila il sorgente e genera/sintetizza il file binario da iniettare nell’ FPGA.

Poi si passa al testing (e qui viene il difficile perchè servono strumenti come logic analyzer, protocol analyzer etc. molto costosi, complicati da usare ma anche molto divertenti)

Il gruppo di lavoro a capo del progetto MiSTer, dal 2017 produce sorgenti di descrizione dell’hardware di tutte le architetture dei videogame esistenti (mi sembra di aver letto prima del 1995).

In pratica hanno pubblicato su GitHub (e qui c’è da chiedersi come abbiano fatto… ma serve un opera di reverse engineering piuttosto robusta) tutto l’hardware da retro gaming possibile e immaginabile descrivendo anche i classici circuiti integrati della serie SN74xxTodiys New 30Pcs for 74LS00 74LS00N SN74LS00N HD74LS00P K555LA3 DM74LS00N  DIP-14 Quad 2-Input NAND Gate IC Chip SN74LS00

image

Elenco dei giochi

Partendo dal primo videogioco della storia, Spacewar su DEC PDP-1,
https://github.com/MiSTer-devel/PDP1_MiSTer

passando dal PONG
https://github.com/MiSTer-devel/Arcade-Pong_MiSTer

e dal Breakout che NON avevano CPU ma solo logica integrata (tutti i chip della serie 74xx per intenderci)
https://github.com/MiSTer-devel/Arcade-Breakout_MiSTer

per passare allo Space Invader che aveva un 8080
https://github.com/MiSTer-devel/Arcade-SpaceInvaders_MiSTer

e al Pacman che invece aveva uno Z80.
https://github.com/MiSTer-devel/Arcade-Pacman_MiSTer

Fino ai NeoGeo, ai VS della Nintendo a al Gameboy…

MiSTer è davvero un repo denso di cultura digitale.
Se vuoi sintetizzarti il tuo Z80 o 8080, basta che dai un occhiata al loro T80 (reverse engineering dello Z80) che è arrivato alla versione 350!!
https://github.com/MiSTer-devel/ZX-Spectrum_MISTer/tree/master/rtl/T80

Qui ci sono persone che da anni lavorano per non disperdere questo patrimonio.
E lo fanno sapendo che formalmente è illegale!

Ma la passione è talmente forte che non resistono!
:-))

Questo è l’elenco dei giochi disponibili
https://www.timeextension.com/guides/all-mister-fpga-cores-and-where-to-download-them

Hardware necessario

Tutte queste architetture sono state infilate in un unica FPGA molto potente della serie Cyclone V Intel e la scheda utilizzata è la demo board DE10-nano della Terasic utilizzata nei corsi di reti logiche universitari.
https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=205&No=1046

La scheda ha un connettore HDMI quindi tutti i giochi sono stati adattati a questo standard visto che negli anni 70/80 c’erano solo dei monitor CRT monocromatici (i colori dello Space Invaders io me li ricordo… erano delle strisce di plastica colorate attaccate sul vetro del monitor).

Qui invece c’è un video lunghissimo ma molto interessante sulla quantità impressionante di videogiochi emulati dalla scheda MiSTer.
https://www.youtube.com/watch?v=rhT6YYRH1EI&t=1665s&ab_channel=MyLifeinGaming

Al minuto corrente spiega come funziona l’installazione e anche qui c’è da farsi qualche domanda sul discorso pirateria, legalità, copyright dei giochi etc.

Nel video utilizzano una sdCard da 200GB e poi si appoggiano ad un SSD esterno che ne ha altrettanti e vengono scaricati automaticamente da uno script che viene salvato sulla sdCard del MiSTer.