Primeros pasos para pogramar un emulador

Foro dedicado a la emulación de sistemas clásicos en el PC o en otros sistemas.
Avatar de Usuario
Namek
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 633
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 12 veces
Gracias recibidas: 27 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Namek » 18 Sep 2018, 16:17

El hecho de que se puedan realizar efectos multicolor en el Spectrum me hace sospechar que la ULA genera la señal de vídeo en sincronía con el barrido, por tanto en cada barrido horizontal de pantalla la ULA ira interpretando el scanline y los atributos correspondientes. De esta forma si queremos que los efectos multicolor se muestren correctamente tendremos que calcular cuantos ciclos tarda cada barrido horizontal en completarse.

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 517
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 11 veces
Gracias recibidas: 15 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 19 Sep 2018, 11:28

OK, así he hecho. Muchas gracias, Namek. El driver de la pantalla ya lo tengo bastante avanzado:

- Funciona en ventana y a fullscreen, al menos en Window$ 7 (no lo he podidio catar en otro Window$)
- Pinta y colorea a la perfección (tinta, papel y brillo)
- Borde no implementado aún
- Flash no implementado aún

Con esto, de momento veo el arranque del Spectrum, uséase, la pantalla se pone negra, salen las rayitas rojas verticales y se borran. Esto es un chequeo que la ROM hace de la RAM al iniciar.

El tema del borde me está haciendo pensar mucho. Si la ULA va enviando los píxeles a la vez que el monitor va haciendo escanlines, esto sisnifica que por cada scanline tengo que pintar primero una línea del borde izquierdo, la línea completa de la pantalla, y una línea del borde derecho. Salvo los casos en los que la ULA esté atendiendo a la parte superior o inferior, en cuyos casos pinta líneas de borde completo.
Me imagino que esto es lo que la ULA hace realmente, ¿nor?
Pero me surge una duda con esto: mientras la ULA pinta el borde, ¿va mirando en cada escanline el valor del puerto 254, o sólo lo lee una vez y pinta con ese color todo el borde? Después de haber visto demos y juegos que pintan cosas en el borde, entiendo que la ULA consulta el puerto en cada escanline, pero me gustaría confirmación de esto pues a ver si me voy a liar a pogramar este jaleo y aluego no va a ser así :D


EDITO: Otra pregunta para los más sabios del lugar :) Los TV en modo PAL tienen 625 líneas, de las cuales se muestran 576. ¿Esto sisnifica que la ULA pinta 576 líneas en cada pantallazo? Muchas me paesen a mí, ¿nor?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 517
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 11 veces
Gracias recibidas: 15 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 19 Sep 2018, 13:54

Bueno, ya he encontrado por ahí la info que necesitaba, jiji:

http://www.zxdesign.info/vidparam.shtml
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
PabloMarmol
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 141
Registrado: 03 Sep 2012, 17:32
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
Primera consola: Nintendo NES/Clónica
Ubicación: León, España
Gracias dadas: 6 veces
Gracias recibidas: 4 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor PabloMarmol » 19 Sep 2018, 16:03

Bubu escribió:Si la ULA va enviando los píxeles a la vez que el monitor va haciendo escanlines
No, no es que sean "cosas separadas", que la ULA esté "enviando cositas" y el monitor / TV por su parte "haga sus cositas".

Por aclarar conceptos. La tele no hace "por iniciativa propia" lo de ir barriendo scanlines, ni el retrazado horizontal, ni el vertical, etc.
Hace lo que le mande el spectrum, en este caso la ULA. Si la ULA no le manda señal, no hace ná.

Bubu escribió:Pero me surge una duda con esto: mientras la ULA pinta el borde, ¿va mirando en cada escanline el valor del puerto 254, o sólo lo lee una vez y pinta con ese color todo el borde? Después de haber visto demos y juegos que pintan cosas en el borde, entiendo que la ULA consulta el puerto en cada escanline
No, no consulta el puerto mientras está pintando la pantalla, mas que nada porque los puertos, en general, "no tienen memoria".
Cuando la cpu hace "un out", si no hay algo que lo esté "escuchando", ese out se pierde.

En este caso del puerto 254, la ULA tiene dentro una "memoria" que recordará el valor del último out al 254, y será esta memoria (y no el puerto) la que consulte para poder pintar el borde convenientemente.

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 517
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 11 veces
Gracias recibidas: 15 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 19 Sep 2018, 16:49

Uséase, ¿entóns el borde sólo mira el puerto una vez y siempre le pone el mismo color pa cá pantallazo? Es que así no veo cómo se pueden hacer efestos en el borde como lo hacen muchos juegos.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
PabloMarmol
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 141
Registrado: 03 Sep 2012, 17:32
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
Primera consola: Nintendo NES/Clónica
Ubicación: León, España
Gracias dadas: 6 veces
Gracias recibidas: 4 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor PabloMarmol » 19 Sep 2018, 16:53

¿entóns el borde sólo mira el puerto una vez y siempre le pone el mismo color pa cá pantallazo?
Relee el último párrafo:

>> En este caso del puerto 254, la ULA tiene dentro una "memoria" que recordará el valor del último out al 254, y será esta memoria (y no el puerto) la que consulte para poder pintar el borde convenientemente.

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 517
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 11 veces
Gracias recibidas: 15 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 19 Sep 2018, 17:13

Sí, lo he leído, por eso la pregunta: ¿cómo se puede hacer desde el software efestos en el borde, si la ULA pinta el borde una sola vez cada pantallazo?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
PabloMarmol
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 141
Registrado: 03 Sep 2012, 17:32
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
Primera consola: Nintendo NES/Clónica
Ubicación: León, España
Gracias dadas: 6 veces
Gracias recibidas: 4 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor PabloMarmol » 19 Sep 2018, 17:18

Bubu escribió:¿cómo se puede hacer desde el software efestos en el borde, si la ULA pinta el borde una sola vez cada pantallazo?
Pero... ¿de donde sacas eso de "una sola vez"?

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 517
Registrado: 04 Abr 2018, 23:10
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Atari 2600
Primera consola: Nintendo GameBoy
Gracias dadas: 11 veces
Gracias recibidas: 15 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor Bubu » 19 Sep 2018, 17:23

Pues de lo que tú has dicho, que la ULA memoriza el último valor del puerto antes de dibujar el pantallazo. Por tanto, durante todo el pantallazo el borde sólo toma un color. La próxima vez que a la ULA le toque pintar el pantallazo, mirará de nuevo el puerto, verá el nuevo valor, lo memorizará, y de el nuevo pantallazo tendrá ese nuevo único color. Al menos así he entendido lo que has querido decir.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
PabloMarmol
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 141
Registrado: 03 Sep 2012, 17:32
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
Primera consola: Nintendo NES/Clónica
Ubicación: León, España
Gracias dadas: 6 veces
Gracias recibidas: 4 veces

Re: Primeros pasos para pogramar un emulador

Mensajepor PabloMarmol » 19 Sep 2018, 18:00

Bubu escribió:Pues de lo que tú has dicho, que la ULA memoriza el último valor del puerto antes de dibujar el pantallazo.

Es que vuelves a lo de los pantallazos. Que no hay pantallazos, que la imagen se "crea" de continuo, no de una vez. Y la ULA actualizará el color del borde cada vez que lo cambies con un out.


Volver a “Emuladores”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados