De hecho es relativamente facil si sabes lo que estas haciendo. Solo no quieres empezar por querer emular un ps5 xd.
Yo como un ejercicio de programación eh estado considerando hacer un emulador (o varios no se). Y de lo que eh visto el mejor lugar para empezar es emular un chip-8 y despues pasarte a mime. Esto te dará mucho conocimiento base para que comprendas como funciona la emulacion. Aqui un link:
chip-8 que esta en ingles lo se pero es el mejor que eh encontrado yes muy extenso la verdad. Y despues te puedes pasar a la emulación de un gba que es muy interesante tambie.
En terminos de como funcionan hay dos tipos, los de nivel alto y los de nivel bajo. No entraré en mucho detalle sobre los de nivel alto ya que el concpepto no es muy complicado simplemente das un entorno donde se pueda ejecutar el codigo de la aplicación deseada.
Primero quisiera dar una distinción entre virtualización y emulacion. En la virtualización por ejemplo en virtualvox o incluso el JVM, le das accesso a los recursos de tu sistema de forma virtualizada para el programa que deseas correr. Osea que le das acceso al programa al hardware real. En caso de una emulacion lo que haces es crear ese hardware de manera logica. Osea que un emulador nivel bajo lo que hace es simular el hardware del sistema que se esta emulando. Esto puede tomar varias forma como incluso mandarle al programa las señales que le mandaria el hardware original. Entonces entre mas chip y mas complejo sea el dispositivo que quieres simular, pues mas complejo seria tu emulador.
La verdad este es un tema nuevo para mi y espero que te haya ayudado esta información en darte algo de orientación.