Pues... nunca he visto el código de un emulador, pero te explicaré como lo haría yo, seguro que de forma anticuada y poco eficiente.
Un programa está formado por instrucciones y datos codificadas en binario. Cada instrucción del procesador (carga, desplazamiento, operaciones booleanas, aritméticas...) se identifica por un código que es diferente segun el procesador.
Un programa se codifica como una sucesión de unos y ceros que por comodidad se representan en base 16 (hexadecimal).
Imaginate que en un punto del programa de la máquina A (la emulada) aparece la secuencia hexadecimal CD 18 BB que corresponde a la instrucción CALL &HBB18, que es una llamada a una rutina del firmware que espera a la pulsación de una tecla.
El emulador lee la secuencia desde el disco, va a una tabla e identifica la instrucción.
Entonces lo que tiene que hacer es enviarle al procesador de la máquina B (sobre la que corre el emulador) la cadena hexadecimal que hace que dicha máquina B espere a que se pulse una tecla.
Porque puede que el procesador de la máquina B no tenga la instrucción CALL (bueno, esta seguro que la tiene), es muy posible que CALL no se representa con el código hexadecimal CD; y lo que es mas, seguro que la posición &HBB18 no contiene ninguna rutina para esperar a la pulsación de una tecla. Por ejemplo, en un PC lo que debería hacer es cargar en el registro AH el código de una función y llamar a una interrupción del sistema. No me acuerdo de los códigos ahora, seria algo así como
MOV AH,
INT x
que en hexadecimal se representará de una determinada manera.
Ahora imagina que no es algo tan simple como la pulsación de una tecla, sino que hablamos de rutinas de la GPU para el movimiento de agua o generación de luces y sombras, que seguro que no tienen en común las dos máquinas.