In che modo le persone sviluppano gli emulatori?

4

Spero che questa sia l'area giusta su Stack Exchange per porre questa domanda. Le persone là fuori hanno costruito emulatori per ogni console di gioco ma non capisco come lo fanno. Mi considero (e ho il titolo professionale di) sviluppatore di alto livello in diverse lingue incluso Javascript, ma non ho la più pallida idea di come iniziare a scrivere un emulatore in Javascript. Come fanno a capire come leggere le ROM ed emulare il gioco?

    
posta chrislondon 30.05.2013 - 16:12
fonte

1 risposta

11

Immagino che tu non abbia mai avuto il piacere di un corso universitario in cui hai dovuto auto-assemblare e disassemblare il tuo codice, o progettare una CPU. È noioso, ma in realtà non così difficile.

Prendiamo come esempio il Microchip PIC set di istruzioni , che ho scelto perché è molto semplice, solo 35 istruzioni. Se si guarda la colonna "14-bit instruction word" nella tabella a pagina 3, questi sono i bit che in realtà vengono scritti in flash, ciò che viene utilizzato principalmente oggi anziché ROM. Ogni istruzione ha un prefisso fisso univoco. ADDWF ha un prefisso di 00 0111 , ad esempio.

Un emulatore deve semplicemente controllare il valore dalla ROM rispetto a tutti i prefissi delle istruzioni finché non trova una corrispondenza, quindi analizza il resto dell'istruzione. Per ADDWF , il bit d diventa l'argomento d e i bit f diventano l'argomento f . Quindi usi questi argomenti per fare un add in Javascript, qualcosa del tipo:

addwf = function(f, d) {
  if (d == 0)
     w = w + registers[f]
  else
     registers[f] = w + registers[f]
}

Naturalmente, ci sono anche dei bit di carry e tali da impostare, ma questa è l'idea di base per emulare una CPU. Per una console di gioco, devi anche emulare l'IO, ma ci sono documenti di specifiche tecniche su Internet per aiutarti a sapere come farlo. Ad esempio, scrivere un 0x0000ff in una determinata posizione di memoria potrebbe trasformare un pixel specifico in blu. Il tuo emulatore quindi deve solo rilevare le scritture in quella posizione di memoria emulata dalla CPU emulata e tradurla in qualsiasi comando Javascript trasformi un pixel blu.

Questa è una grossolana semplificazione. Ci vuole una notevole quantità di lavoro di ottimizzazione per rendere un'emulazione abbastanza veloce da gestire il frame rate desiderato di un gioco, ma questi sono i principi di base.

    
risposta data 30.05.2013 - 17:36
fonte

Leggi altre domande sui tag