Primeros pasos para pogramar un emulador
- Namek
- Atari 1040 STf
- Mensajes: 840
- Registrado: 11 Jul 2011, 13:13
- Gracias dadas: 18 veces
- Gracias recibidas: 63 veces
Re: Primeros pasos para pogramar un emulador
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.
- Bubu
- Atari 1040 STf
- Mensajes: 895
- 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: 21 veces
- Gracias recibidas: 67 veces
Re: Primeros pasos para pogramar un emulador
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í
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?
- 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í

EDITO: Otra pregunta para los más sabios del lugar

Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!
- Bubu
- Atari 1040 STf
- Mensajes: 895
- 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: 21 veces
- Gracias recibidas: 67 veces
Re: Primeros pasos para pogramar un emulador
Bueno, ya he encontrado por ahí la info que necesitaba, jiji:
http://www.zxdesign.info/vidparam.shtml
http://www.zxdesign.info/vidparam.shtml
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!
- PabloMarmol
- Amstrad PCW 8256
- Mensajes: 171
- 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: 18 veces
- Gracias recibidas: 18 veces
Re: Primeros pasos para pogramar un emulador
No, no es que sean "cosas separadas", que la ULA esté "enviando cositas" y el monitor / TV por su parte "haga sus cositas".Bubu escribió:Si la ULA va enviando los píxeles a la vez que el monitor va haciendo escanlines
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á.
No, no consulta el puerto mientras está pintando la pantalla, mas que nada porque los puertos, en general, "no tienen memoria".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
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.
- Bubu
- Atari 1040 STf
- Mensajes: 895
- 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: 21 veces
- Gracias recibidas: 67 veces
Re: Primeros pasos para pogramar un emulador
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!!
- PabloMarmol
- Amstrad PCW 8256
- Mensajes: 171
- 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: 18 veces
- Gracias recibidas: 18 veces
Re: Primeros pasos para pogramar un emulador
Relee el último párrafo:¿entóns el borde sólo mira el puerto una vez y siempre le pone el mismo color pa cá pantallazo?
>> 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.
- Bubu
- Atari 1040 STf
- Mensajes: 895
- 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: 21 veces
- Gracias recibidas: 67 veces
Re: Primeros pasos para pogramar un emulador
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!!
- PabloMarmol
- Amstrad PCW 8256
- Mensajes: 171
- 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: 18 veces
- Gracias recibidas: 18 veces
Re: Primeros pasos para pogramar un emulador
Pero... ¿de donde sacas eso de "una sola vez"?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?
- Bubu
- Atari 1040 STf
- Mensajes: 895
- 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: 21 veces
- Gracias recibidas: 67 veces
Re: Primeros pasos para pogramar un emulador
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!!
- PabloMarmol
- Amstrad PCW 8256
- Mensajes: 171
- 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: 18 veces
- Gracias recibidas: 18 veces
Re: Primeros pasos para pogramar un emulador
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.
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados