Aiuto - Cerca - Utenti - Calendario
Versione completa: Come funziona un emulatore?
.: GBArl.it :. News sulle Console Nintendo - Emulazione - Flash Cards - Trainer > Discussioni Console Nintendo > Programmazione & ROM Hacking (Nintendo)
Ciozun
Ciao,

come da titolo vorrei sapere come funziona un emulatore.
tafero
Un emulatore serve, principalmente, ad emulare un tuo videogioco acquistato su PC o su un'altra piattaforma (se compatibile/disponibile).
Il 99% delle volte l'emulazione su PC migliora il gioco in termini grafici e ne migliora i caricamenti.
L'emulatore puo' servire se uno non vuole usare la sua copia originale che ha in casa o avere tutti i suoi giochi direttamente su una console sola (magari portatile) senza portarsi/usare tutti i dischi ecc.
Forest87
Beh, tecnicamente sarebbe più giusto dire che un emulatore non si limita a replicare un "videogioco" ma l'intera piattaforma che lo ospita. Vengono ricreate le condizioni hardware della macchina da emulare, mediante la programmazione di codice il cui obiettivo è quello di replicare il comportamento di ogni singolo componente o quantomeno avvicinarsi al risultato perfetto ottenuto dalla risposta che quest'ultima fornisce in determinate cirscostanze. Questo fa si che la macchina emulata sia poi in grado di riprodurre lo stesso software dell'originale (opportunamente "estratto" dal supporto originale e raggirate le protezioni che ne impediscono l'avvio su hardware non ufficiale).

Ovviamente la regola implicita è che la macchina che emula debba essere più "potente" di quella emulata.. e non di poco biggrin.gif
Ciozun
CITAZIONE (Forest87 @ Sunday 24 January 2016 - 20:45) *
Beh, tecnicamente sarebbe più giusto dire che un emulatore non si limita a replicare un "videogioco" ma l'intera piattaforma che lo ospita. Vengono ricreate le condizioni hardware della macchina da emulare, mediante la programmazione di codice il cui obiettivo è quello di replicare il comportamento di ogni singolo componente o quantomeno avvicinarsi al risultato perfetto ottenuto dalla risposta che quest'ultima fornisce in determinate cirscostanze. Questo fa si che la macchina emulata sia poi in grado di riprodurre lo stesso software dell'originale (opportunamente "estratto" dal supporto originale e raggirate le protezioni che ne impediscono l'avvio su hardware non ufficiale).

Ovviamente la regola implicita è che la macchina che emula debba essere più "potente" di quella emulata.. e non di poco biggrin.gif


Quindi colui che crea un emulatore deve avere una conoscenza pressoché perfetta della macchina che deve andare a simulare?
Non basterebbe una laurea in ingegneria informatica... ohmy.gif
Ma poi, se la macchina è "chiusa", tipo un DS, come si fanno ad apprendere tutti i vari funzionamenti?
siengried
Se posso... se tu per esempio la vuoi creare per una console tipo l'xboxone...
Per farlo dovrei adattare i codici scritti per pc per la xbox One?
È un lavorone O.o
CapRichard
CITAZIONE (Ciozun @ Sunday 24 January 2016 - 21:24) *
Quindi colui che crea un emulatore deve avere una conoscenza pressoché perfetta della macchina che deve andare a simulare?
Non basterebbe una laurea in ingegneria informatica... ohmy.gif
Ma poi, se la macchina è "chiusa", tipo un DS, come si fanno ad apprendere tutti i vari funzionamenti?


Attenzione, che Simulare ed Emulare sono due cose diverse. La macchina di un emulatore non è simulata, ma emulata, per definizione. Ti chiederai: e che differenza c'è? L'emulatore ricrea il funzionamento hardware all'interno di un software, ed ha lo scopo di sostituire l'hardware nel suo funzionamento. Un simulatore è uno strumento utile per analizzare il sistema, ma non per sostituirlo (tipo un simulatore di volo. È simile alla realtà, ma non è quello).

In realtà basta avere passione e capirci, laurea o non laurea, la programmazione è una cosa che si impara anche sbattendoci la testa a ripetizione (anche se studiare un po' aiuta sempre).
Per apprendere come funziona un qualcosa ci sono molti modi. La si apre e se ne studia il circuito elettronico, la si testa inviandole segnali e capendo come essa risponde, si creano sistemi in grado di accedere al cuore del software e carpirne tutti i pezzi, si vedono le componentistiche e via dicendo.
Ciozun
CITAZIONE (CapRichard @ Sunday 24 January 2016 - 22:03) *
CITAZIONE (Ciozun @ Sunday 24 January 2016 - 21:24) *
Quindi colui che crea un emulatore deve avere una conoscenza pressoché perfetta della macchina che deve andare a simulare?
Non basterebbe una laurea in ingegneria informatica... ohmy.gif
Ma poi, se la macchina è "chiusa", tipo un DS, come si fanno ad apprendere tutti i vari funzionamenti?


Attenzione, che Simulare ed Emulare sono due cose diverse. La macchina di un emulatore non è simulata, ma emulata, per definizione. Ti chiederai: e che differenza c'è? L'emulatore ricrea il funzionamento hardware all'interno di un software, ed ha lo scopo di sostituire l'hardware nel suo funzionamento. Un simulatore è uno strumento utile per analizzare il sistema, ma non per sostituirlo (tipo un simulatore di volo. È simile alla realtà, ma non è quello).

In realtà basta avere passione e capirci, laurea o non laurea, la programmazione è una cosa che si impara anche sbattendoci la testa a ripetizione (anche se studiare un po' aiuta sempre).
Per apprendere come funziona un qualcosa ci sono molti modi. La si apre e se ne studia il circuito elettronico, la si testa inviandole segnali e capendo come essa risponde, si creano sistemi in grado di accedere al cuore del software e carpirne tutti i pezzi, si vedono le componentistiche e via dicendo.



Grazie per il chiarimento!
Forest87
CITAZIONE (Ciozun @ Sunday 24 January 2016 - 21:24) *
Quindi colui che crea un emulatore deve avere una conoscenza pressoché perfetta della macchina che deve andare a simulare?
Non basterebbe una laurea in ingegneria informatica... ohmy.gif
Ma poi, se la macchina è "chiusa", tipo un DS, come si fanno ad apprendere tutti i vari funzionamenti?

Come dice CapRichard, la conoscenza del sistema da emulare non è tanto essenziale quanto lo è molto di più capire come quest'ultimo reagisce a determinati input.
E' un po' come trovarsi di fronte ad una donna e provare a regalarle
- una scatola di cioccolatini
- un scatola di cioccolatini vuota
Non devi conoscere la donna, il suo passato, la conformazione del suo cuore o in quale percentuale è presente dell'acqua nel suo corpo: essa ti regalerà un sorriso o un calcio nelle palle in base alla circostanza rotfl[1].gif

Allo stesso modo mandi input alla macchina, scoprendo come reagisce delinei il comportamento di ogni modulo e scrivi il codice (nel linguaggio macchina che più ti aggrada) in modo che la risposta a quell'input sia la medesima
siengried
Io le regalerei una scatola vuota e le direi:"Erano buonissimi" xD
ido
come ti hanno già risposto ci sono 2 approcci, che possiamo definire come
emulare l'hardware
simulare il software che ci gira

il primo approccio è da white box, tu hai un determinato input, il tuo hardware simulato elabora l'input e produce l'output.
esempio sono tutti gli emulatori di macchine non recenti, diciamo da ps1 in giù. Prendiamo ad esempio il NES, all'interno ha una CPU ad 8bit 6502 (e altri componenti naturalmente) un emulatore ricrea quella CPU (la CPU fa calcoli matematici, ad esempio metti un valore nel registro 1, un altro valore nel registro 2 e poi chiedi alla CPU di fare la somma di questi due registri e mettere il risultato nel registro 3) in modo che il codice compilato (contenuto nella ROM del gioco) possa essere eseguito.

il secondo approccio è da black box, tu non sai come è fatto l'hardware, ma crei qualcosa che a determinati input produce determinati output.
esempio classico è l'emulatore UltraHLE del N64, in questo caso si cerca di adattare il codice compilato (contenuto nella ROM) alle istruzioni già presenti nella CPU che sta emulando il codice compilato, se io so che il codice compilato richiede la somma di due numeri, li metto nel registro AX e BX della CPU x86 e poi prendo il risultato.

Notare che non c'è una distinzione netta, molto spesso emulatori (anche di vecchie console) utilizzano approcci blackbox per far partire giochi in cui non si riesce ad emulare perfettamente l'hardware, tipo il chip Super FX di alcuni giochi SNES (questo finché quel pazzo di byuu autore del bsnes/higan non ha decappato il Super FX e altri chip)

con l'avanzare della tecnologia gli approcci whitebox si riducono (questo perché spesso si usano CPU custom e le specifiche non sono disponibili e la potenza dei sistemi aumenta) emulare nuove macchine sarà sempre più complicato ma ogni tanto una sopresa esce (tipo il CEMU per WiiU)
Ciozun
Grazie Forest89 e ido!

Ido mi sembra di capire che un emulatore basato sul metodo blackbox sia più performante rispetto ad uno basato su whitebox.
ido
CITAZIONE (Ciozun @ Monday 25 January 2016 - 14:38) *
Ido mi sembra di capire che un emulatore basato sul metodo blackbox sia più performante rispetto ad uno basato su whitebox.

a livello di framerate si, ma il fatto di non emulare esattamente la macchina si perde in accuratezza (esempio stupido: della parte audio l'emulatore simula sono il canale sinistro e non stereo, mentre emulando il chip audio in modo da avere entrambi i canali audio richiede potenza della CPU e il framerate si abbassa, ripeto esempio stupido)
Questa è la versione 'lo-fi' del forum. Per visualizzare la versione completa con molte più informazioni, formattazione ed immagini, per favore clicca qui.
Invision Power Board © 2001-2024 Invision Power Services, Inc.