Emulazione: tra realtà fisica ed empirismo

INTRODUZIONE

In questo spazio esploreremo il mondo dell’emulazione, sarà un viaggio nel tempo e per apprezzarne i dettagli utilizzeremo le informazioni tecniche disponibili al tempo dei sistemi emulati. Tratteremo questo argomento con lo scopo di appassionare le persone ad approfondire la conoscenza di sistemi oggi poco presenti sul mercato o che non sono disponibili al pubblico o anche se disponibili non sono utilizzabili perchè tenuti in musei o altri tipologie di esposizioni pubbliche/private.

L’emulazione è un argomento abbastanza controverso per quanto riguarda il copyright, sino ad una ventina di anni fa chi sviluppava gli emulatori era soggetto a cause legali in modo “quasi” sistematico per la violazione dei diritti del copyright. Con il passare degli anni è cambiata la percezione dell’emulazione, i detentori dei diritti restano sempre tali ma sono state definite deroghe a seconda dei Paesi con il fine di non arrecare danno economico ai detentori dei diritti e nel contempo distribuire ed utilizzare gli emulatori che hanno il pregio di mantenere viva l’eredità culturale di sistemi destinati a sparire o non funzionare più.

Il cambiamento della percezione dei diritti del copyright in generale ha portato alla realizzazione di Internet Archive una organizzazione no-profit con sede negli Stati Uniti riconosciuta ufficialmente e nata con il fine di preservare tutto il materiale digitale e dare libero accesso con finalità didattiche ai ricercatori, storici, studiosi, studenti ed in generale al pubblico. I detentori dei diritti in qualunque momento possono richiedere la cancellazione parziale o totale del materiale presente in archivio. Inoltre a partire dagli anni ’90 il collettivo di Bitsavers si è occupato della scansione di documentazione e materiali relativi ai computer e del salvataggio di software da supporti in rapida obsolesecenza. Destinata ad essere una collezione permanente e liberamente accessibile di manuali, specifiche tecniche e conoscenze relative a marchi e materiali informatici, la collezione ospita oggi migliaia di documenti contenenti milioni di pagine. Queste due fonti di informazione insieme ad altre ci accompagneranno in questo viaggio.

EMULARE O SIMULARE, QUESTO E’ IL PROBLEMA.

In rete si trovano software indicati come emulatori e/o simulatori, ma

  • che cosa sono simulazione ed emulazione ?
  • qual’è la differenza tra le due e da quale punto di vista ?
  • è migliore la simulazione o l’emulazione ?

Senza la pretesa di fornire risposte assiomatiche partiamo dal significato naturale di simulare come “fingere di” ed emulare come “imitare qualcosa” e cerchiamo di adattarli all’elettronica a partire da sistemi semplici estendendo poi il discorso a sistemi più complessi.

Per cercare di dare risposta alle nostre domande possiamo partire dall’evoluzione tecnologica delle console. La prima generazione (1972-1976) ha come capostipite la console Magnavox Odyssey (Fig.1) creata da Ralph Baer che per la prima volta trasforma il televisore in un dispositivo interattivo.

Magnavox Odyssey Console_BOT
Magnavox-Odyssey-Schematics-Detail_BOT

Fig.1 – La console Magnavox Odyssey, 1972. “Smithsonian National Museum of American History”
Fig.2 – Schemi Elettrici (Estratto da) “Magnavox Odyssey series Service Manuals & Game Manuals”

Iniziamo a pensare a come sviluppare un software che sia il più fedele al funzionamento della console: come si può vedere già dal piccolo estratto dagli schemi della console (Fig.2) ed in generale come per tutte le console della sua generazione questa è realizzata con componenti discreti come resistori, condensatori, diodi, transistor, induttori ed eventuali circuiti integrati (IC) che contengono i suddetti elementi circuitali miniaturizzati. Tutti questi componenti sono caratterizzati da caratteristiche fisiche nominali e caratteristiche circuitali reali che dipendono dal processo produttivo e sono conosciute dai produttori. Tramite queste informazioni, ammesso di avere accesso, sarebbe possibile realizzare programmi che simulano il comportamento di tutti i componenti circuitali e delle loro connessioni. Un esempio concreto è il simulatore di modellazione elettronica pSpice.
Un’altra soluzione è quella di osservare il funzionamento dei giochi della console e realizzare empiricamente un software che si comporti nello stesso modo senza conoscere i dettagli tecnici della console oppure in modo più accurato che emuli il comportamento dei circuiti o parte di questi.

Vediamo quali sono i pro e i contro di questi due approcci al problema:

  • Simulazione: questa sarebbe un’ottima soluzione se non fosse che necessita di una enorme velocità di calcolo per riuscire a simulare tutti i componenti elettrici della console ed avere un comportamento in tempo reale uguale a quello della console. Il limite massimo della fedeltà alla console è il software di modellazione del sistema e le informazioni relative alle caratteristiche reali dei componenti elettrici.

  • Emulazione: quello che si riesce emulare è al massimo quello che si riesce ad osservare. Solo annotando tutti i possibili eventi del gioco dai quali estrapolare le regole di funzionamento è possibile realizzare un software che riproduca il comportamento della console. Più il gioco e le sue regole sono semplici e più è facile realizzare un’emulazione fedele della console. Dallo studio dei circuiti analogico/digitali si potrebbe ottenere una emulazione più accurata, ma è un lavoro molto complicato e l’emulazione è più pesante dal punto di vista computazionale. Ad un gioco semplice non corrisponde necessariamente una semplicità dello hardware della console e la difficoltà di analisi del gioco è legata al fatto che gli elementi sullo schermo e la logica del gioco sono “dispersi” nello hardware e dipendono da come i circuiti elettronici si attivano durante il gioco: ad esempio in Fig.1 c’è il resistore variabile R51 che è utilizzato per modificare la “velocità della palla” (BALL SPEED) che cambia al variare del valore della resistenza, oppure il resistore variabile R55 che stabilisce la posizione del “muro a sinistra” (LEFT WALL). Già da questi due semplicissimi dettagli “statici” si capisce come sia difficile realizzare una emulazione fedele alla console che abbia origine dall’osservazione del gioco e/o dallo studio delle caratteristiche hardware della console.

Con la disponibilità di microcontrollori economici nasce la seconda generazione di console (1976-1984). Questa nuova generazione è caratterizzata dall’introduzione di un nuovo componente elettronico detto microcontrollore che stravolge e semplifica la struttura hardware delle console: gli elementi e la logica del gioco non sono più “dispersi” nei componenti discreti sulla scheda elettronica della console ma sono concentrati in un circuito integrato sotto forma di firmware ovvero istruzioni programmabili eseguite dal microcontrollore. Questo libera il programmatore di videogiochi dalla complessità fisica della console e finalmente può iniziare a creare giochi completamente diversi tra loro sia come oggetti sullo schermo che come logica di gioco senza modificare lo hardware della console. Attraverso trasformazioni graduali legate al progresso dei microcontrollori le console iniziano ad avere caratteristiche più simili a quelle odierne trasferendo al software funzionalità che in precedenza erano destinate allo hardware. Magnavox utilizza per la nuova console Magnavox Odyssey2 (venduta in europa con il nome di Philips Videopac) il microcontrollore intel 8048. Per il videogiocatore non cambia molto, ma per le console è un punto di svolta: ora una console dispone della potenza di calcolo del primo computer general purpose della storia l’Eniac del 1946. L’Eniac occupa lo spazio di centinaia di metri cubi, pesa alcune tonnellate ed utilizza 18000 valvole termoioniche che assorbono 150 kW per eseguire una somma in 200 microsecondi. Tutta questa potenza di calcolo è concentrata nello Intel 8048 in 7 centimetri cubi, pesa 30 grammi ed utilizza 5000 transistor che assorbono 1.5 W per eseguire una somma nello stesso tempo. Direi che sia uno dei primi microcontrollori che si possa fregiare del titolo di dispositivo “green” con un consumo elettrico ridotto di 100000 volte!

Vediamo quali sono le conseguenze di questa rivoluzione in termini di simulazione/emulazione:

  • Simulazione: la possibilità di realizzare una simulazione si allontana sempre di più, si riducono i componenti sulla scheda elettronica ma un microcontrollore di questo periodo contiene già circa 5000 transistor. Per avere un’idea della difficoltà reale della simulazione di questa console per chi ha esperienza di progettazione con microcontrollori è sufficiente leggere le specifiche tecniche (Cap.6) dell’Intel 8048: per ottenere una simulazione in tempo reale della console è necessario che siano rispettate tutte le tempistiche riportate nelle specifiche tecniche altrimenti la simulazione semplicemente non funziona, è un problema sia di modellazione dei circuiti e numero di elementi circuitali che di soluzioni tecnologiche coperte da copyright, ma è già sufficiente la prima parte del problema a rendere l’impresa improba.

  • Emulazione: mentre i circuiti della precedente generazione di console potevano essere analizzati con un oscilloscopio ed emulati in modo più o meno accurato ora non è più possibile in quanto è tutto sepolto nel silicio, però i microcontrollori introducono un nuovo elemento: il firmware che è una sequenza di istruzioni eseguita dal microcontrollore, detto in modo grossolano è il software del microcontrollore. Ogni microcontrollore è dotato di un manuale reso pubblico dal produttore, dove tra le informazioni necessarie per l’uso del microcontrollore ci sono tutte le istruzioni supportate da questo: come sono identificate, cosa fanno, ed il loro preciso tempo di esecuzione. Ora si hanno a disposizione tutte le informazioni di come funziona il firmware ed il problema di realizzare un emulatore estremamente accurato si semplifica notevolmente: a differenza delle console di prima generazione non è più necessario analizzare lo hardware per estrarre le informazioni necessarie ad emulare un gioco, addirittura si possono ignorare, l’importante è emulare in modo accurato l’esecuzione delle istruzioni del firmware. Per emulare un gioco è quindi necessario avere il firmware che però è coperto da copyright ed è di proprietà di chi l’ha prodotto. Il firmware comunemente indicato con il termine “ROM” è in realtà il codice estratto dal chip fisico ROM (Read Only Memory).

Possiamo dire che la simulazione dello hardware in linea di principio sarebbe la soluzione migliore ma è fortemente limitata da motivi tecnici e di copyright posto sulle soluzione tecnologiche. Per inciso nessun produttore di circuiti integrati ha interesse nel realizzare un simulatore pubblico il cui reverse engineering rivelerebbe le soluzione tecniche adottate. Invece con l’emulazione si ottengono ottimi risultati, è solitamente gratuita, “open source” e ad alto valore didattico.

Anche se il mondo dell’emulazione sembra essere monopolizzato dai soliti noti in realtà ci sono ampi spazi ancora inesplorati o poco esplorati di emulazione ad alto livello di sistemi anni ’70/’80 anche di notorietà globale. Di questa emulazione avanzata hanno pubblicato i propri risultati due sviluppatori: Alessandro Scotti e “Adam”. Per l’emulazione di sistemi anni ’50/’70 se ne occupano centri universitari che hanno a disposizione i sistemi, la documentazione e le competenze d’uso. Questi sistemi dotati di interfacce poco amichevoli hanno già contenuti innovativi che non avreste mai immaginato e che quando li conoscerete gli attuali sistemi videoludici vi sembreranno la reinvenzione della ruota.

TICKLE

TickleLogo_BOT
Space Invaders weird BUG Step1 BOT
Space Invaders weird BUG Step2 BOT

Fig.1 – Emulatore Tickle v0.94
Fig.2 – Svelato bug sconosciuto di Space Invaders (Parte 1)
Fig.3 – Svelato bug sconosciuto di Space Invaders (Parte 2)

Alessandro Scotti è uno sviluppatore che ha concentrato l’attenzione sulla emulazione di dispositivi a componenti discreti. Non solo ha sviluppato questi emulatori ma ha anche reso disponibile il codice sorgente e documentato il percorso che ha seguito per lo sviluppo realizzando così un ottimo tutorial: per realizzare un emulatore è importante sapere leggere gli schemi elettrici, riuscire ad identificare i blocchi logici e la loro funzione, sapere fare i conti con i circuiti dotati di amplificatori operazionali, conoscere linguaggio C++ ed avere un buon intuito aiuta molto in questa impresa.
Per curiosità ho lanciato l’emulatore “Tickle Rebound” (gira in “attract” mode) che emula l’elettronica di “Rebound” un gioco di pallavolo simile allo storico Pong. A differenza dell’originale 700 MHz Athlon nonostante utilizzi un AMD Phoenom II X6 @2.8GHz il gioco è ancora estremamente lento. Potrebbe essere ricompilato per le nuove CPU, ma ad oggi il progetto è chiuso.
Un altro cavallo di battaglia, ma non è l’unico, di questo sviluppatore talentuoso è l’emulazione dei suoni di Space Invaders (1978). In questo caso il gioco è dotato un Intel 8080 a 2 Mhz e l’audio è di tipo analogico/digitale. Tutti gli emulatori più noti utilizzano i suoni campionati dal gioco originale, invece Tickle emula lo hardware che li genera e non ha bisogno dei suoni campionati. La velocità dell’emulazione non è in alcun modo limitata. Questo modo avanzato di emulare l’elettronica analogico/digitale che sembra così perfettamente deterministico in realtà non è tale ed è stato necessario trovare soluzioni empiriche ragionate. Tutto questo è molto bene dettagliato nella interessante lettura della sezione “Space Invaders sound emulation”.
La versione di Tickle che emula perfettamente tutti i suoni di Space invaders è la 0.94 del 2011. Questa versione fu disponibile senza codice sorgente per un pò di tempo ed anche se non è più presente sul sito ufficiale la si può trovare in alcuni siti dedicati all’emulazione.
Breve aneddoto personale: nel 1980 giocando al bar a Space Invaders provai a lasciare da solo uno degli alieni più grandi, con meraviglia scoprii che questo correndo lasciava una “scia” (Fig.2) e successivamente cadendo giù concludeva il gioco per “invasione” (Fig.3). E’ inutile dire che rimasi molto male! A distanza di 38 anni con l’emulatore Tickle ho cercato di ripetere quella fase di gioco e posso dire che l’emulazione è perfetta con l’esatta replica del bug.

D.I.C.E.

DiceLogo_BOT
Dice Rebound BOT
Dice PONG BOT

Fig.1 – Emulatore D.I.C.E v0.9
Fig.2 – Rebound
Fig.3 – PONG

D.I.C.E. (Discrete Integrated Circuit Emulator) è un emulatore di sistemi elettronici privi di CPU, costituiti esclusivamente da componenti discreti. L’autore di questo emulatore è “Adam” e non si sa se sia un talentuoso sviluppatore o un gruppo di sviluppatori. Anche questo emulatore in alcuni casi può essere lento, ma ci sono giochi in cui la velocità è ottima ed i suoni sono emulati. D.I.C.E. emula senza problemi il mitico PONG e come Tickle supporta il gioco Rebound, in questo caso con il mio Phenom II gira a 60 fps senza problemi. L’emulatore è freeware, open source ed i sorgenti sono disponibili al pubblico. Purtroppo è sprovvisto di tutorial e di documentazione di sviluppo dettagliata. L’ultima versione è la 0.9 e risale a 4 anni fa.

Personalmente penso che alla luce delle CPU odierne l’emulazione anzichè integrare all’interno degli emulatori sempre più sistemi o varianti dello stesso gioco potrebbe seguire il percorso indicato da questi due emulatori puntando anche ad una migliore qualità dell’emulazione ai fini di una preservazione più fedele ai sistemi originali soprattutto nei riguardi dei sistemi più vecchi che a volte sembrano essere i più trascurati. Per chi ha vissuto l’epopea dei sistemi anni ’70/’80 l’emulazione assume una connotazione che va al di là della preservazione storica, è un modo per ricordare il tempo passato con gli amici, le sfide in casa, le code in salagiochi o al bar, i litigi, i record di giochi in cui anche l’aggiunta di una manciata di colori sullo schermo entusiasmava le persone oltre misura. Come dice il replicante Roy Batty in Blade Runner “… e tutti quei momenti andranno perduti nel tempo come lacrime nella pioggia.” … per fortuna che ci sono gli emulatori che ci aiutano a ricordare!

eNJoy aND STay TuNeD WiTH uS!

Raffaele “MOS” Sanapo

Questo è un articolo con finalità didattiche e le informazioni sono fornite “così come sono”. I link ai contenuti verso siti web di terzi sono forniti con finalità informative. Non c’è alcun controllo e non si assume alcuna responsabilità dei contenuti o siti web altrui che sono collegati. Tutti i nomi di prodotti, schemi, loghi e marchi sono di proprietà dei legittimi proprietari. L’ uso di questi non implica approvazione degli stessi.

Raffaele Sanapo

“We don't stop playing because we grow old; we grow old because we stop playing.” (George Bernard Shaw)

%d blogger hanno fatto clic su Mi Piace per questo:

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie, cliccando su "Accetta" o continuando la navigazione permetti il loro utilizzo.

Chiudi