Primeros pasos para pogramar un emulador
Publicado: 04 Sep 2018, 16:53
¡Jarl, torpedos!
Resulta que me ha dado por pensar... ¿cómo se hacen los emuladores? Yo tengo cierta idea de cómo sería, y tengo la curiosidad de hacerlo y ver si al echarlo a andar, al menos el arranque sale la misma pantalla que la máquina emulada. Eso sería un puntazo.
Está claro que hay 3 cosas fundamentales:
(1) Conocer a la perfección la máquina emulada
(2) Elegir un lenguaje de pogramación adecuado
(3) Elegir librerías gráficas y de sonido adecuadas
En mi caso:
(1) voy a elegir el Zx Spectrum porque es la máquina que coñozco a la perfección.
(2) voy a elegir el VB porque es un lenguaje muy básico y que me permite tener resultados desde el primer minuto. Además, como no es para distribuir, sino que es para mi propio uso personal, pos eso.
(3) aquí ni idea.
Centrándonos pues en el caso del Zx Spectrum, sabemos que tiene una CPU Z80, una ROM de 16KB, una RAM de 16KB ó 48KB según el modelo. Tiene una ULA la cual cada 1/50 segundos bloquea a la CPU, se mete en la RAM (en los 16KB primeros) y vuelca su contenido a la pantalla, a parte de hacer más cosas como generar sonido, escuchar sonido, etc.
Quiero obtener resultados YA (jiji, qué poquita paciencia tengo), por lo que lo primero que voy a pogramar es la parte de la ULA. Al arrancar el emulador, la ULA debería leer la RAM, que tendrá valores aleatorios, y poner la pantalla llena de cuadraditos de colores aleatorios, y no hacer nada más.
Duditas: ¿cómo haríais vosotros el tema de la ULA? ¿Un disparador de tal manera que cada 1/50 segundos salte, lea la RAM, pinte la pantalla, y ponga el borde según el bus de datos?
Cuando haga la parte del Z80, ¿cómo sincronizo los timings de esta CPU con la CPU emuladora, que va a tropecientos gigahercios? ¿pongo una pausa infinita que sólo sea rota con otro disparador? Me refiero a cómo contar ciclos de reloj del Z80.
Thanx!
Resulta que me ha dado por pensar... ¿cómo se hacen los emuladores? Yo tengo cierta idea de cómo sería, y tengo la curiosidad de hacerlo y ver si al echarlo a andar, al menos el arranque sale la misma pantalla que la máquina emulada. Eso sería un puntazo.
Está claro que hay 3 cosas fundamentales:
(1) Conocer a la perfección la máquina emulada
(2) Elegir un lenguaje de pogramación adecuado
(3) Elegir librerías gráficas y de sonido adecuadas
En mi caso:
(1) voy a elegir el Zx Spectrum porque es la máquina que coñozco a la perfección.
(2) voy a elegir el VB porque es un lenguaje muy básico y que me permite tener resultados desde el primer minuto. Además, como no es para distribuir, sino que es para mi propio uso personal, pos eso.
(3) aquí ni idea.
Centrándonos pues en el caso del Zx Spectrum, sabemos que tiene una CPU Z80, una ROM de 16KB, una RAM de 16KB ó 48KB según el modelo. Tiene una ULA la cual cada 1/50 segundos bloquea a la CPU, se mete en la RAM (en los 16KB primeros) y vuelca su contenido a la pantalla, a parte de hacer más cosas como generar sonido, escuchar sonido, etc.
Quiero obtener resultados YA (jiji, qué poquita paciencia tengo), por lo que lo primero que voy a pogramar es la parte de la ULA. Al arrancar el emulador, la ULA debería leer la RAM, que tendrá valores aleatorios, y poner la pantalla llena de cuadraditos de colores aleatorios, y no hacer nada más.
Duditas: ¿cómo haríais vosotros el tema de la ULA? ¿Un disparador de tal manera que cada 1/50 segundos salte, lea la RAM, pinte la pantalla, y ponga el borde según el bus de datos?
Cuando haga la parte del Z80, ¿cómo sincronizo los timings de esta CPU con la CPU emuladora, que va a tropecientos gigahercios? ¿pongo una pausa infinita que sólo sea rota con otro disparador? Me refiero a cómo contar ciclos de reloj del Z80.
Thanx!