Como alguien que tiene un buen conocimiento del software pero carece de hardware, ¿cuál es el mejor lugar para comenzar si quiero aprender emulación (gameboy)?

Si quieres aprender a escribir tus propios emuladores, tu lista de estudio debería tener este aspecto:

  1. C: sigue siendo el lenguaje más utilizado para implementar emuladores y tiempos de ejecución debido a su portabilidad y potencial de abuso intencional. Preste especial atención a los modismos estándar y los modismos de gestión de memoria.
  2. intérpretes de idiomas: implemente algunos lenguajes interpretados, como lisp o forward, y cómo estos intérpretes se pueden replantear como máquinas virtuales abstractas;
  3. máquinas virtuales abstractas: básicamente son emuladores sin todas las consideraciones de tiempo de funky de un sistema de múltiples chips, aunque existen ejemplos de este último;
  4. organización de hardware de computadora: preste especial atención al hardware de múltiples chips y en tiempo real, ya que los emuladores a menudo necesitan implementar varios procesadores diferentes para reflejar los chips especializados en el hardware original, así como los sumideros de tiempo para mantener todas las piezas en funcionamiento en paralelo – rastrear detalles específicos para los sistemas que le interesa emular;
  5. transcodificación, compilación de JIT: sobre todo de interés cuando se busca optimizar el rendimiento, pero aún hay cosas fascinantes que saber
  6. bases de código existentes : existen numerosas implementaciones de emulador de código abierto y de máquina virtual, y estudiarlas le enseñará mucho más de lo que cualquier libro o sitio web podría leer, experimentar, reflexionar, repetir.

Si ya sabes C, puedes centrarte en 6 y mezclar y combinar 2-5 a medida que encuentres el código que despierta tu interés.

Supongo que quieres escribir un emulador? Básicamente, necesita comprender lo que hace el sistema con la entrada (una ROM ensamblada); podría ser el momento de repasar su ASM! El hardware es análogo a un algoritmo; Impleméntalo. Comenzaría con la CPU (en Game Boy, es principalmente un Z80 con algunas diferencias (está bien documentado)), entonces probablemente la memoria y simplemente aborde las cosas según sea necesario hasta que pueda cargar una ROM y ejecutarla.

Naturalmente, después de haber escrito eso, recordé esta serie de artículos que presenta una buena parte del tema: Imran Nazar: GameBoy Emulation en JavaScript