Ninguna de las dos.
La idea es programar un programa que haga lo mismo que cada dispositivo de la consola.
Por ejemplo, si tenemos un procesador z80, tenemos que programar una aplicación que reciba de entrada un parámetro en el formato que lo reciba el z80, y que de salida salga el parámetro que salga sea la salida que el z80 le daría a esa entrada.
A continuación tenemos que hacer un interpretador que convierta la salida creada por z80 en una salida que sea óptima para nuestro ordenador o máquina que emule.
Por ejemplo, tenemos un chip de sonido. Tenemos que crear una aplicación que reciba 16 canales de audio y las mezcle, que sería lo que realizaría el chip de sonido. Luego tendríamos que crear otra aplicación que coja los canales de audio mezclados y ejecute el sonido correspondiente en pc.
Luego se puede simplificar, evidentemente. Por ejemplo, si nuestra tarjeta de sonido tiene más de 16 canales, podemos directamente mandar cada pista a un canal diferente.
Es por eso que hay emuladores que funcionan mejor en unos sistemas que en otros. Depende del sistema a emular. Si el dispositivo emulador puede hacer lo mismo, las instrucciones que tienes que hacer son las mismas pero en el formato del emulador, mientras que si son distintos, tienes que programar tanto la transformación como la adaptación. Por eso es muy facil hacer un emulador de supernes para la nintendo ds y sin embargo es tan dificil hacer uno de ps2 para pc.