Un emulatore non "traduce" semplicemente, un emulatore è simile a una macchina virtuale su cui puoi far girare del codice nativo della macchina emulata. Altrimenti sarebbe come dire che il VICE traduce "LDA #$08" in un'istruzione x86 che carica un numero in un registro. Evidentemente non è questo che avviene.
Si questo concetto vale per quegli emulatori che emulano tutto il sistema. Prendi ad esempio il vice64 che emula il sid il 6502, il bios o kernel che si voglia dire e in pratica tutto il commodore. Li hai una buona, se non ottima probabilità, che l'applicazione venga emulata correttamente proprio perchè non c'è una traduzione (cmq mi rendo conto che il termine corretto sarebbe translazione). Poi c'è da vedere il perchè alcune applicazioni non vengono emulate ma questo è un discorso tecnico che non conosco bene e che non saprei riferire se non con termin "asileschi" :-)
Se però analizzi un "emulatore di PC" la cosa cambia, caro eregil, e di molto. Innanzitutto
non viene emulato il processore cosa molto ma molto complicata. Hai fatto caso che sia in vmware che in connectix/microsoft virtual pc andando sulle informazioni del sistema guest (sia che ci sia linux, windows) appare il nome del tuo processore. Io ho un AthlonXP 64 3000, e mi viene scritto processore:AthlonXP 64 3000. Sicuramente però il virtual PC che uso (che risale a quasi tre anni fa) non mi emula il processore.
Puttroppo negli "emulatori di PC" viene gestita tutta la trafila degli IRQ e definito un intervallo di memoria presa in prestito dall'host ma il processore non viene affatto emulato, come non viene emulato il bios (se non in una piccolissima parte) anche perchè voglio vedere una 440VX che monta un Athlon XP :-P! e qui già sorge un problema.
1) Problema fast tracker (codice e driver).
Se l'eseguibile ha delle particolari richieste che soltanto una macchina vecchia (quindi chessò particolari IRQ, o anche periferiche che si trovano in un DMA particolare, e altro non saprei non essendo un tecnico) allora l'emulatore non riuscirà mai ad emulare il programma proprio perchè si appoggia, trasla, alcune parti del codice e le affida alla macchina guest. Il fast tracker (credo) non mi funziona perchè il codice (che se non sbaglio deriva dal sorgente esclusivamente ASM) ha delle particolari richieste che il mio host non riesce ad interpretare; preciso che non è un problema di driver audio, setblaster e simili, perchè nei vecchi computer senza scheda audio fast tracker si avvia senza però emettere suoni.
Ti dico questo perchè sono anni che provo a dar vita all'amato fast tracker, ma in ogni salsa non sono riuscito ad emularlo
Poi c'è un'altra cosa
2) Problema Quake II.
Due anni fa giocavo a Quake II su Connectix Virtual PC. Il computer host era abbastanza performante per l'epoca ma il guest era un semplice Windows 98 con una S3 Trio 64 V+ (La mia prima scheda video sigh!) con un MB di RAM. Il frame rate era quasi identico al frame rate senza emulazione quindi, secondo te, la macchina guest emulava: 1) Il processore 2) La scheda video ed il proprio BIOS 3) Le directX (da qui il mio riferimento alle DLL)? Io penso che tutte e tre i punti erano traslati al sistema HOST altrimenti non spiego l'elevato tasso di FPS, la sola S3TRIO sarebbe un collo di bottoglia.
Mamma mia che post lungo :huh: Termino dicendo che l'unico software in stato avanzato, sempre che io conosco eh!, che emula praticamente tutto mi sembra sia il dosbox (dosbox.sourceforge.net) ma fa molta fatica ad emulare un 386 e molti giochi sono scatterellosi.
EDIT:
Ovviamente il VirtualPC per mac, anche se non ne ho mai usato uno, deve emulare la CPU from scratch.