Nel vivo dell’emulazione...

Qui potete scambiare 4 chiacchiere senza problemi, se parlate di retrogaming è ancora meglio!
Rispondi
Avatar utente
Claus83
Messaggi: 82
Iscritto il: sab apr 25, 2020 12:12 am
Ha ringraziato: 29 volte
È stato ringraziato: 1 volta

Nel vivo dell’emulazione...

Messaggio da Claus83 »

Ho voluto aprire questo thread con la speranza di suscitare le curiosità di molti, che come me, non conoscono molto, se non nulla sugli emulatori, magari per sentito dire o letto su internet: cosa sono...cosa fanno...come lo fanno...e magari ricevere risposte costruttive da parte di chi, per anni di studio, lavoro ed esperienza, ne sa in maniera approfondita..
Per la maggior parte delle persone, “appassionate” di video games, sono solo un mezzo gratuito e spesso all’insaputa illegale, per poter rigiocare le vecchie glorie dei decenni passati...
Beh...da quello che so io un emulatore è un software che dalla parola stessa emula..simula..fa finta che stia lavorando su un hardware che ha tutte le caratteristiche di quello originale..ma per fare ciò deve “adattarsi” alle nuove tecnologie...da qui sorge un dubbio..forse più di uno data la mia ignoranza...perché se ora abbiamo hardware di livello, diciamo così, superiore, spesso non si raggiungono gli stessi risultati in termini di prestazioni?
Quali sono le difficoltà? Le limitazioni?
Probabilmente ho detto scemenze e magari non è così..ma vorrei cercare di capire..che lavoro c’è dietro...
Sicuramente Administrator sa cosa sto cercando di dire, visti gli ottimi risultati raggiunti dal suo porting del mame 0.61 sui raspberry pi...

P.S. siate rispettosi di chi con anni di studi e duro lavoro ci da la possibilità di poter godere, gratuitamente dal divano di casa nostra, di tanto divertimento e di poter ricordare i meravigliosi anni che hanno fatto parte della nostra vita...
"Che strano gioco... la sola mossa vincente è quella di non giocare..."

dal film "Wargames - giochi di guerra" (1983)
--------------------------------------------------------------------------------------
Raspberry Pi 4 Model B Rev 1.2

Avatar utente
Administrator
Site Admin
Messaggi: 195
Iscritto il: gio feb 25, 2016 6:32 pm
Ha ringraziato: 0
È stato ringraziato: 55 volte

Re: Nel vivo dell’emulazione...

Messaggio da Administrator »

Innanzitutto grazie per l'educazione che hai mostrato fin da subito nell'approcciarti a questa comunità rispettando le regole che ci siamo posti di far seguire per mantenere il forum ordinato e soprattutto renderlo utile a chi viene in cerca di aiuto. Avere thread buttati a caso, senza un filo logico, andare OT ecc. non serve a niente se il forum vuole veramente essere utile.

Grazie anche per l'aiuto come tester che stai dando sul progetto MAME 0.61 SDL :-)

Detto questo... Sono un Ingegnere Aerospaziale, i miei studi non sono correlati all'informatica ma il primo computer che abbiamo avuto in casa è stato uno ZX Spectrum 16k della Sinclair, ero piccolo, forse mi ha dato un certo imprinting... :D

Sono appassionato di emulazione da quando nel '97 è uscita la prima versione del MAME e anche per me era un mistero come un codice potesse eseguire un software scritto per un hardware totalmente diverso... Sì, perché è questo quello che succede, un emulatore esegue quella che genericamente viene chiamata ROM, ma una ROM altro non è che la versione digitale, ovvero un file, che contiene esattamente gli stessi bit che erano presenti nel chip originale, bit che altro non sono che un software, un gioco.

Per anni mi è rimasta la curiosità poi 4 anni fa ho iniziato a scrivere qualche piccolo programma in Python per poi passare 2 anni fa (sì, è pochissimo, ma se hai passione e un cervello curioso le cose si imparano) al C/C++. Perché questo passaggio? Semplice, perché se vuoi capire come funziona un computer a basso livello devi usare un linguaggio che non sia troppo di alto livello, altrimenti concetti come puntatori a indirizzi di memoria rimangono solo messaggi oscuri e magici...

Adesso viene la parte divertente... Come si impara a programmare bene? La risposta è forse ovvia, ma bisogna darsi un obiettivo! Bene, il mio obiettivo è stato questo: scriverò da zero un emulatore!!!

Obiettivo: Space Invaders

Mi sono documentato su internet sull'hardware, e il suo funzionamento, del cabinato arcade partendo dal suo cervello, ovvero dalla CPU. Benissimo, quel cabinato usava una CPU Intel8080, ho scaricato il manuale utente della CPU e ho iniziato a leggerlo, nel frattempo cercavo di capire come potessi fare per eseguire un programma scritto per quella CPU...

Dopo poco è arrivata la risposta, ovvero partendo dalla domanda "cosa fa una CPU?". Banalmente esegue semplici operazioni matematiche su quelli che si chiamano registri della CPU, aggiunge un 1, fa un confronto tra 2 registri, cose veramente semplici.
A quel punto è scattata la lampadina: io non dovevo cercare di capire come si potesse scrivere un videogame utilizzando solo banali operazioni matematiche, quel passaggio lo avevano fatto gli sviluppatori di Space Invaders, bensì dovevo eseguire le stesse operazioni sui registri di una CPU virtuale (dopo tornerò su questo concetto) che il software faceva eseguire alla CPU originale!!!

A questo punto dirai: ok, ma quindi? Che cavolo dovevi fare?! :lol:

Qui torna in aiuto il manuale della CPU e la ROM di Space Invaders: se si apre la ROM con un editor esadecimale all'interno vedremo una sequenza di bytes, ad esempio i primi 16 bytes del codice del gioco sono questi:

Codice: Seleziona tutto

00 00 00 C3 D4 18 00 00 F5 C5 D5 E5 C3 8C 00 00
Che ci facciamo? Apriamo il manuale della CPU Intel8080 e controlliamo a che istruzione corrisponde il byte 00... Banalmente niente, 00 significa "non fare niente"... non molto interessante :lol:

Non perdiamoci d'animo, dopo 3 comandi nulli vediamo a cosa corrisponde C3: JMP to address. Leggendo il manuale si scopre che questa istruzione usa il byte dell'istruzione stessa, C3, e i successivi 2 bytes, che altro non sono che l'indirizzo (con i bytes invertiti perché quella CPU "pensava" così), per impostare il Program Counter, ovvero quel registro della CPU che dice in quale posizione è presente l'istruzione successiva rispetto a quella che stiamo eseguendo.

Quindi C3 D4 18 significa "nel Program Counter scrivi 18D4" in modo che l'istruzione successiva che eseguirà la CPU sarà quella che si trova all'indirizzo di memoria 18D4 (quindi non verranno eseguite le istruzioni 00 00 F5 ecc. che si vedono nei primi 16 bytes del programma di Space Invaders).

Passiamo alla virtualizzazione della CPU Intel8080: questo processore era a 8 bit, ovvero aveva 256 diverse istruzioni. Perché 256? Perché 256 sono i numeri rappresentabili con 8 bit, ovvero un byte. Se conoscete un minimo di matematica binaria si ha semplicemente che 2 elevato alla 8 fa 256. In esadecimale le istruzioni sono quindi elencate con tutti i numeri che vanno da 00 a FF (FF corrisponde a 255 in decimale).

Facciamo quindi un altro step... Abbiamo capito che man mano vanno "semplicemente" eseguite alcune istruzioni sui registri della CPU, i registri di questa CPU erano a 8 bit (non proprio tutti, tipo il Program Counter era a 16 bit per indirizzare la memoria, ma lasciamo perdere i dettagli).
Adesso molto semplicemente devo rappresentare tramite delle variabili i registri della CPU, come faccio? Beh, 8 bit corrispondono a una variabile di tipo char (che è una variabile che occupa 8 bit, cioè 1 byte), a noi interessano tutti i numeri rappresentabili tramite 8 bit, quindi la prendiamo di tipo unsigned char, ovvero solo positivi da 0 a 255.

A questo punto non resta che eseguire man mano il programma di Space Invaders e fare quello che il programma dice, ovvero operazioni sui registri che per noi non sono altro che operazioni sulle nostre variabili. Ovviamente ci sono altri dettagli da tenere in conto, ad esempio quanta RAM aveva il cabinato, come era gestito l'interrupt soprattutto per il video ecc. Tutto per noi è virtualizzabile tramite variabili, la RAM sarà un array della dimensione giusta e così via...

La sto facendo semplice, ci sono diversi aspetti ostici ma alla base tutto si riassume in: leggo il programma originale, eseguo le stesse istruzioni della CPU originale sulle variabili che rappresentano registri, RAM, ecc. e se tutto viene fatto correttamente a un certo punto nel nostro array che rappresenta la RAM dell'hardware originale troverò una manciata di bytes che rappresentano esattamente il frame video, i samples audio da eseguire e così via.

L'ho semplificata perché poi dobbiamo mostrare il frame video in una finestra del sistema operativo, aggiornarla al frame rate corretto, ma alla fine tutto si impara e alla base non c'è nessuna magia.

Per rispondere alle tue domande intanto una cosa: un emulatore fa esattamente quello che faceva l'hardware originale, NON SIMULA. Questo è importante perché un simulatore prova a ricreare il gioco originale, scrivendolo da zero e cercando di imitarlo, un emulatore esegue il software originale.

Per quanto riguarda le prestazioni è presto detto: eseguire via software le stesse operazioni che venivano eseguite via hardware richiede per forza di cose una capacità di elaborazione superiore a quella dell'hardware originale e spesso le cose sono complicate. Oltre a ciò dipende dallo sviluppatore ovvero, detto in modo spicciolo, se è bravo o meno. Infatti un gioco che girava a 60 FPS comporta che il loop principale dell'emulatore deve eseguire tutte le operazioni da fare per ogni frame entro 16 millisecondi.

Spero di averti tolto qualche curiosità, se ne hai altre o non sono stato chiaro chiedi pure ;-)
Questi utenti hanno ringraziato l'autore Administrator per il post (totale 5):
PadremayiGuybrushClaus83Newtongoogjoob
Reputazione: 71.43%
"A volte sono le persone che nessuno immaginava potessero fare certe cose quelle che fanno cose che nessuno può immaginare" A. Turing
_____________________________________________________________
Aiutiamo il forum con una donazione :-)

Hardware:
Raspberry Pi v3 B

Avatar utente
Guybrush
Site Admin
Messaggi: 2005
Iscritto il: gio feb 25, 2016 6:33 pm
Ha ringraziato: 29 volte
È stato ringraziato: 55 volte

Re: Nel vivo dell’emulazione...

Messaggio da Guybrush »

Si leggono post con spunti bellissimi come questo e messaggi idioti come questi... Passa la voglia, ha scritto 4 messaggi 2 offese...
Questi utenti hanno ringraziato l'autore Guybrush per il post:
Claus83
Reputazione: 14.29%
"Dobbiamo costruire computer per le masse, non per le classi" J. Tramiel
_____________________________________________________________
Aiutiamo il forum con una donazione :-)

Hardware:
Raspberry Pi B (x2)
Raspberry Pi 3B
Raspberry Pi Zero W
Raspberry Pi 3A+

Avatar utente
Claus83
Messaggi: 82
Iscritto il: sab apr 25, 2020 12:12 am
Ha ringraziato: 29 volte
È stato ringraziato: 1 volta

Re: Nel vivo dell’emulazione...

Messaggio da Claus83 »

WOW :shock:
Hai tirato fuori un’enciclopedia :lol:
Complimenti per il raggiungimento del tuo obbiettivo! Da ammirare e prendere spunto...naturalmente devo fare come a scuola..sottolineare tutti i termini e concetti che non conosco e andarmeli a studiare...sei stato molto chiaro e mi hai aperto delle finestre/porte verso il mio obbiettivo che è quello di capire come si comporta fisicamente un’apparecchiatura elettronica...cioè come viene gestita la corrente, cosa succede nei materiali che la compongono..conduttori..semiconduttori ecc..in particolare il processore...cosa succede al suo interno...quando elabora i dati..mi ha sempre incuriosito questo lato..più che la programmazione..purtroppo per capire certi concetti devo vedere fisicamente nella mia testa il funzionamento di quella cosa..non mi basta sentir dire è così e basta...voglio sapere perché...soprattutto se è una cosa inventata dall’uomo..perché in quel modo e non in un altro..senza andare contro le leggi della fisica ovviamente...
Di domande ne avrei tante..ma poi rischio di fare come i bambini..e perché?...

Veramente grazie di cuore a tutti!
Si leggono post con spunti bellissimi come questo e messaggi idioti come questi... Passa la voglia, ha scritto 4 messaggi 2 offese...

Scusate ma...Ban e chiudo è bellissimo! Sono ancora piegato dalle risate.. :lol:
"Che strano gioco... la sola mossa vincente è quella di non giocare..."

dal film "Wargames - giochi di guerra" (1983)
--------------------------------------------------------------------------------------
Raspberry Pi 4 Model B Rev 1.2

Avatar utente
Administrator
Site Admin
Messaggi: 195
Iscritto il: gio feb 25, 2016 6:32 pm
Ha ringraziato: 0
È stato ringraziato: 55 volte

Re: Nel vivo dell’emulazione...

Messaggio da Administrator »

Claus83 ha scritto:
sab giu 13, 2020 1:10 am
...mi hai aperto delle finestre/porte verso il mio obbiettivo che è quello di capire come si comporta fisicamente un’apparecchiatura elettronica...cioè come viene gestita la corrente, cosa succede nei materiali che la compongono..conduttori..semiconduttori ecc..in particolare il processore...cosa succede al suo interno...quando elabora i dati...
Per capire queste cose devi seguire dei corsi universitari, bisogna partire dalle basi della Fisica per poi pian piano salire, altrimenti è impossibile. La Fisica è complicata, le basi si studiano nell'esame di Fisica 2 all'Università, poi si passa all'Elettrotecnica e l'Elettronica
Claus83 ha scritto:
sab giu 13, 2020 1:10 am
...purtroppo per capire certi concetti devo vedere fisicamente nella mia testa il funzionamento di quella cosa...
Questo è un problema, la Fisica dell'Elettromagnetismo è molto poco visualizzabile da un essere umano, si tratta di equazioni matematiche abbastanza complesse, non è come la Cinematica o la Meccanica della Fisica con cui, a grandi linee, abbiamo a che fare tutti i giorni e quindi più digeribile :lol:
Claus83 ha scritto:
sab giu 13, 2020 1:10 am
Di domande ne avrei tante..ma poi rischio di fare come i bambini..e perché?...
E tu falle :-)
"A volte sono le persone che nessuno immaginava potessero fare certe cose quelle che fanno cose che nessuno può immaginare" A. Turing
_____________________________________________________________
Aiutiamo il forum con una donazione :-)

Hardware:
Raspberry Pi v3 B


Avatar utente
Claus83
Messaggi: 82
Iscritto il: sab apr 25, 2020 12:12 am
Ha ringraziato: 29 volte
È stato ringraziato: 1 volta

Re: Nel vivo dell’emulazione...

Messaggio da Claus83 »

Diciamo che delle basi ce l’ho...ho studiato elettrotecnica a scuola e pochissima elettronica...diciamo che ho sbagliato indirizzo...dovevo fare elettronica...i primi 2 anni ho studiato fisica..materia fantastica..diciamo le basi..il prof ricordava Doc di ritorno al futuro..era una persona carismatica di quelle che ti fanno capire tutto al primo colpo..altra materia che mi affascina molto è l’elettromagnetismo..anche qui qualcosa l’ho diciamo intuita più che capita..Bisogna arrivare a capire come interagiscono le varie particelle all’interno degli atomi..capire poi come interagiscono tra atomi diversi..e capire come poterli utilizzare data una causa esterna per ottenere una risposta..un risultato che ci può essere utile..
Non so se ho reso l’idea di fin dove vorrei spingermi...
"Che strano gioco... la sola mossa vincente è quella di non giocare..."

dal film "Wargames - giochi di guerra" (1983)
--------------------------------------------------------------------------------------
Raspberry Pi 4 Model B Rev 1.2

Avatar utente
Guybrush
Site Admin
Messaggi: 2005
Iscritto il: gio feb 25, 2016 6:33 pm
Ha ringraziato: 29 volte
È stato ringraziato: 55 volte

Re: Nel vivo dell’emulazione...

Messaggio da Guybrush »

Hai reso l'idea ma come ti ha detto Administrator servono studi universitari, la matematica che c'è dietro è complicata, servono delle basi solide.

Tieni conto però che alcune cose sono cosi, non c'è ulteriore spiegazione. Il motivo per il quale un atomo abbia un nucleo con protoni e neutroni, più una nuvola di elettroni intorno, è un dato di fatto. Poi che si possa scendere ancora più giù è ovvio, ma si arriva sempre a un punto di partenza che è così, punto.

C'è da dire che un ingegnere elettronico studiate le basi non ha poi bisogno di pensare all'elettrone, intendo che i progettisti stessi di Intel non devono ogni volta reinventare il transistor
"Dobbiamo costruire computer per le masse, non per le classi" J. Tramiel
_____________________________________________________________
Aiutiamo il forum con una donazione :-)

Hardware:
Raspberry Pi B (x2)
Raspberry Pi 3B
Raspberry Pi Zero W
Raspberry Pi 3A+

Avatar utente
Claus83
Messaggi: 82
Iscritto il: sab apr 25, 2020 12:12 am
Ha ringraziato: 29 volte
È stato ringraziato: 1 volta

Re: Nel vivo dell’emulazione...

Messaggio da Claus83 »

Tieni conto però che alcune cose sono cosi, non c'è ulteriore spiegazione. Il motivo per il quale un atomo abbia un nucleo con protoni e neutroni, più una nuvola di elettroni intorno, è un dato di fatto. Poi che si possa scendere ancora più giù è ovvio, ma si arriva sempre a un punto di partenza che è così, punto.

Si non intendevo questo...le leggi della natura sono quelle punto e basta...intendevo capire per esempio perché si è passati dalle valvole ai transistor ai TTL ecc..da ignorante mi verrebbe da dire..solo per occupare meno spazio... :D
Vabbè sono andato un po’ fuori tema...tornando all’emulazione invece...in più di 20 anni di lavoro sul progetto M.A.M.E. ci sono state diverse diciamo così “filosofie” di pensiero? del tipo..e se facessimo così? sicuramente ci sono state delle cose da rifare, vedasi alcuni dump delle roms che poi hanno cambiato nome...
"Che strano gioco... la sola mossa vincente è quella di non giocare..."

dal film "Wargames - giochi di guerra" (1983)
--------------------------------------------------------------------------------------
Raspberry Pi 4 Model B Rev 1.2

Avatar utente
Newton
Messaggi: 261
Iscritto il: gio ago 03, 2017 7:43 am
Ha ringraziato: 14 volte
È stato ringraziato: 11 volte

Re: Nel vivo dell’emulazione...

Messaggio da Newton »

Claus83 ha scritto:
sab giu 13, 2020 3:02 pm
in più di 20 anni di lavoro sul progetto M.A.M.E. ci sono state diverse diciamo così “filosofie” di pensiero? del tipo..e se facessimo così? sicuramente ci sono state delle cose da rifare, vedasi alcuni dump delle roms che poi hanno cambiato nome...
Per quanto riguarda i dump è solo un fatto "materiale", si sono semplicemente accorti che alcuni non erano stati creati correttamente, quindi contenevano errori, e sono stati eseguiti ex novo. Per i nomi è solo una cosa organizzativa, magari la scheda madre che hanno definito come nuovo Parent aveva i chip organizzati in un certo modo e con un codice stampato sopra, che quindi è stato introdotto nel nome.

Per le scelte la filosofia, soprattutto degli ultimi anni, è quella di riprodurre via software anche le piccole cose che però come output finale non cambiano di una virgola il risultato. Quei calcoli complessi in più però impattano notevolmente sulle richieste hardware dell'host, motivo per cui gli ultimi MAME sono dei mattoni da far girare.

Però questo è intrinseco del MAME, ovvero documentare via software il funzionamento di un hardware, quindi va fatto dettagliatamente per poter dire tra 20 anni: ah, quindi funzionava "esattamente" così
Questi utenti hanno ringraziato l'autore Newton per il post:
Claus83
Reputazione: 14.29%

Avatar utente
Claus83
Messaggi: 82
Iscritto il: sab apr 25, 2020 12:12 am
Ha ringraziato: 29 volte
È stato ringraziato: 1 volta

Re: Nel vivo dell’emulazione...

Messaggio da Claus83 »

Per le scelte la filosofia, soprattutto degli ultimi anni, è quella di riprodurre via software anche le piccole cose che però come output finale non cambiano di una virgola il risultato. Quei calcoli complessi in più però impattano notevolmente sulle richieste hardware dell'host, motivo per cui gli ultimi MAME sono dei mattoni da far girare.
Ok qui siamo arrivati al punto..cioè dove molti di noi ancora non hanno capito...la differenza tra ciò che vuole fare il team M.A.M.E. e cioè quello di riprodurre via software esattame tutti i componenti hardware originali purtroppo a discapito delle prestazioni dell’hardware dove vengono riprodotti e quello per cui noi ne facciamo uso...ovvero cercare di giocarli tutti! o anche no..c’è chi vuole giocare solo quelli che gli ricordano le partite in sala giochi...
Si va quindi alla ricerca dell’ULTIMA versione più aggiornata..pensando..sicuramente avrà più giochi e gireranno meglio...avranno corretto gli errori..ecc..e soprattutto quale hardware utilizzare? su quale sistema operativo? e poi...sarebbe bello visualizzarli così..
Da qui le domande...il progetto retropie invece? modifica qualcosa di questa filosofia? i vari porting e l’utilizzo delle librerie libretro, “alleggeriscono” l’utilizzo su raspberry?
"Che strano gioco... la sola mossa vincente è quella di non giocare..."

dal film "Wargames - giochi di guerra" (1983)
--------------------------------------------------------------------------------------
Raspberry Pi 4 Model B Rev 1.2

Rispondi