Chip de Sprites virtual para ZX Spectrum
- chernandezba
- Mensajes: 841
- Registrado: 02 Oct 2015, 23:35
Chip de Sprites virtual para ZX Spectrum
Hola a todos!
Bueno, como alguna vez he comentado, tenía intención de crear un chip de sprites "virtual", para mi emulador ZEsarUX. La idea es definir un chip no muy complicado por si "alguien" en el futuro quisiese hacer un chip real
Os paso un link al último video de demo que he hecho:
https://www.youtube.com/watch?v=iaVkCzPHdOA
Las características del chip de sprites es:
-Sprites de 8x8 pixeles, cada pixel con color independiente de una paleta de 16 colores. Dicha paleta puede ser la estándard de Spectrum, o de la paleta ULAplus, o de la paleta Spectra
-Puede hacer Zoom x 2 de cada sprite
-Se puede hacer espejo horizontal y vertical de cada sprite
Cada sprite se muestra por encima "overlay" de la memoria de pantalla habitual
-Se puede hacer scroll de la memoria de pantalla, en las 4 direcciones. De momento solo de pixeles (no de atributos)
A ver que os parece....
Saludos
César
Bueno, como alguna vez he comentado, tenía intención de crear un chip de sprites "virtual", para mi emulador ZEsarUX. La idea es definir un chip no muy complicado por si "alguien" en el futuro quisiese hacer un chip real
Os paso un link al último video de demo que he hecho:
https://www.youtube.com/watch?v=iaVkCzPHdOA
Las características del chip de sprites es:
-Sprites de 8x8 pixeles, cada pixel con color independiente de una paleta de 16 colores. Dicha paleta puede ser la estándard de Spectrum, o de la paleta ULAplus, o de la paleta Spectra
-Puede hacer Zoom x 2 de cada sprite
-Se puede hacer espejo horizontal y vertical de cada sprite
Cada sprite se muestra por encima "overlay" de la memoria de pantalla habitual
-Se puede hacer scroll de la memoria de pantalla, en las 4 direcciones. De momento solo de pixeles (no de atributos)
A ver que os parece....
Saludos
César
- mcleod_ideafix
- Mensajes: 831
- Registrado: 27 Sep 2015, 00:14
- Ubicación: Jerez de la Frontera
- Contactar:
Re: Chip de Sprites virtual para ZX Spectrum
La demo de Sonic ahí en el Spectrum es impresionante. Un purista estará echando ahora mismo espumarrajos por la boca, pero aun así, molachernandezba escribió:Hola a todos!
Bueno, como alguna vez he comentado, tenía intención de crear un chip de sprites "virtual", para mi emulador ZEsarUX. La idea es definir un chip no muy complicado por si "alguien" en el futuro quisiese hacer un chip real
Os paso un link al último video de demo que he hecho:
https://www.youtube.com/watch?v=iaVkCzPHdOA
Las características del chip de sprites es:
-Sprites de 8x8 pixeles, cada pixel con color independiente de una paleta de 16 colores. Dicha paleta puede ser la estándard de Spectrum, o de la paleta ULAplus, o de la paleta Spectra
-Puede hacer Zoom x 2 de cada sprite
-Se puede hacer espejo horizontal y vertical de cada sprite
Cada sprite se muestra por encima "overlay" de la memoria de pantalla habitual
Unas preguntillas técnicas:
- ¿Cuántos sprites simultáneos puede haber en pantalla?
- ¿Hay algún límite de sprites por scanline?
- ¿Cómo se definen y controlan los sprites a nivel de programación, esto es: qué puertos, registros, etc, se usan?
- El scroll de pantalla, ¿implica movimiento de bytes en la memoria de pantalla o la memoria de pantalla no se altera por hacerse el scroll?
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
- chernandezba
- Mensajes: 841
- Registrado: 02 Oct 2015, 23:35
Re: Chip de Sprites virtual para ZX Spectrum
Jejee si. Habrá más de un purista cabreado aún no he hecho post en el foro de WOS, ahí estoy seguro que habrá reacciones....mcleod_ideafix escribió:La demo de Sonic ahí en el Spectrum es impresionante. Un purista estará echando ahora mismo espumarrajos por la boca, pero aun así, molachernandezba escribió:Hola a todos!
Bueno, como alguna vez he comentado, tenía intención de crear un chip de sprites "virtual", para mi emulador ZEsarUX. La idea es definir un chip no muy complicado por si "alguien" en el futuro quisiese hacer un chip real
Os paso un link al último video de demo que he hecho:
https://www.youtube.com/watch?v=iaVkCzPHdOA
Las características del chip de sprites es:
-Sprites de 8x8 pixeles, cada pixel con color independiente de una paleta de 16 colores. Dicha paleta puede ser la estándard de Spectrum, o de la paleta ULAplus, o de la paleta Spectra
-Puede hacer Zoom x 2 de cada sprite
-Se puede hacer espejo horizontal y vertical de cada sprite
Cada sprite se muestra por encima "overlay" de la memoria de pantalla habitual
Unas preguntillas técnicas:
- ¿Cuántos sprites simultáneos puede haber en pantalla?
- ¿Hay algún límite de sprites por scanline?
- ¿Cómo se definen y controlan los sprites a nivel de programación, esto es: qué puertos, registros, etc, se usan?
- El scroll de pantalla, ¿implica movimiento de bytes en la memoria de pantalla o la memoria de pantalla no se altera por hacerse el scroll?
Los sprites se leen de la RAM, a partir de una dirección configurable se crea una tabla con todos los sprites. Cada Sprite es de 8x8 y ocupa 8 bytes de cabecera más 32 bytes de datos. O sea que cada Sprite es de 40 bytes.
Inicialmente le puse un límite de 255 sprites máximo en la tabla pero en la demo de Sonic he llegado a usar 290 sprites, dado que están todos los sprites en la tabla (todos los del movimiento del personaje) pero mediante un byte de la cabecera activo el que está visible y ocultó el resto. Por tanto el limite lo he subido, de momento a 768, por poner algo... El limite por scanline no está de momento.
Para acceder al chip utilizo dos puertos, de manera similar al zxuno, hay un puerto que selecciona el registro y otro para leer/escribir el valor de dicho registro. Por ejemplo el registro 1 y 2 los uso para decirle al chip dónde está la tabla de sprites. Actualmente solo uso 10 de esos registros, de un máximo de 256. Los registros del 3 al 10 los uso en el scroll
En cuanto al scroll, actúa directamente sobre la memoria de pantalla, o sea que altera el contenido. La idea es que la memoria de pantalla actúe como 'background' y los sprites como 'foreground'.
En concreto con él Sonic tengo una pantalla con el fondo y hago scroll circular. Y luego Sonic y el 'malo' son Sprite independientes.
De momento es solo una demo... Quizá me anime y llegue a hacer algo similar a un juego....
Saludos
- chernandezba
- Mensajes: 841
- Registrado: 02 Oct 2015, 23:35
Re: Chip de Sprites virtual para ZX Spectrum
Os paso enlaces a otros vídeos de demo del chip de sprites. Como llevo días con esto, está ordenado del más antiguo al más reciente, a medida que he ido añadiendo características al chip y mejorando el programa demo:
https://youtu.be/eygpBkvJJew
https://youtu.be/CgafVJhByag
https://youtu.be/1mNOBpNZmXU
https://youtu.be/xom2UijvhOc
https://youtu.be/iaVkCzPHdOA
https://youtu.be/eygpBkvJJew
https://youtu.be/CgafVJhByag
https://youtu.be/1mNOBpNZmXU
https://youtu.be/xom2UijvhOc
https://youtu.be/iaVkCzPHdOA
- antoniovillena
- Mensajes: 2621
- Registrado: 27 Sep 2015, 20:41
Re: Chip de Sprites virtual para ZX Spectrum
Para el scroll hardware te recomiendo que desplaces también la rejilla de atributos, así tendrás fondos más vistosos. Aquí dejo un ejemplo que hice hace tiempo en hardware real.
https://www.youtube.com/watch?v=mBAtyxzXkJA
https://www.youtube.com/watch?v=mBAtyxzXkJA
- chernandezba
- Mensajes: 841
- Registrado: 02 Oct 2015, 23:35
Re: Chip de Sprites virtual para ZX Spectrum
Gracias Antonio.
Ya vi algún vídeo tuyo similar de scroll hace tiempo...
Bueno creo que el scroll de atributos lo pondré como un comando aparte, piensa que en el scroll de pixeles puedo desplazar la pantalla en 1 línea de pixeles, en 2, en 3... Pero desplazar los atributos implica desplazar los pixeles en 8 líneas... Si en cambio le pusiese que al hacer cualquier scroll de pixeles, por ejemplo de 1 línea, también moviese los atributos, sería completamente incorrecto desplazar los atributos en ese caso
Ya vi algún vídeo tuyo similar de scroll hace tiempo...
Bueno creo que el scroll de atributos lo pondré como un comando aparte, piensa que en el scroll de pixeles puedo desplazar la pantalla en 1 línea de pixeles, en 2, en 3... Pero desplazar los atributos implica desplazar los pixeles en 8 líneas... Si en cambio le pusiese que al hacer cualquier scroll de pixeles, por ejemplo de 1 línea, también moviese los atributos, sería completamente incorrecto desplazar los atributos en ese caso
- antoniovillena
- Mensajes: 2621
- Registrado: 27 Sep 2015, 20:41
Re: Chip de Sprites virtual para ZX Spectrum
No se trata de hacer un scroll aparte para los atributos, sino de hacer el scroll de una forma diferente a la que has implementado en la que los atributos "acompañan" al bitmap, de tal forma que no se produce color clash en el scroll. Aquí tienes una demo interactiva, se maneja con OPQA. En esta demo la memoria de pantalla no cambia, lo que cambian son los valores de los registros que ajustan el scroll horizontal y vertical.
http://jbacteria.zxtres.com/48?demo.tap
http://jbacteria.zxtres.com/48?mario_scroll.tap
http://jbacteria.zxtres.com/48?demo.tap
http://jbacteria.zxtres.com/48?mario_scroll.tap
- chernandezba
- Mensajes: 841
- Registrado: 02 Oct 2015, 23:35
Re: Chip de Sprites virtual para ZX Spectrum
Mmm lo probare mañana porque estoy con el móvil y no va...
Entiendo que lo que haces es alterar la manera como se muestra en pantalla sin alterar propiamente la memoria de vídeo...
Bueno en mi caso sí que altero el contenido de la memoria de vídeo.. Hago más o menos igual que un scroll por software pero por hardware 'virtual'
Entiendo que lo que haces es alterar la manera como se muestra en pantalla sin alterar propiamente la memoria de vídeo...
Bueno en mi caso sí que altero el contenido de la memoria de vídeo.. Hago más o menos igual que un scroll por software pero por hardware 'virtual'
Re: Chip de Sprites virtual para ZX Spectrum
Impactante!
Es compatible con el modo radastaniano?
Está muy curioso la verdad, lo que pasa es que si no tiene implementación en el hard del sólo sería usable desde el emulador claro está. Igual lo habéis constestado ya, pero supongo que hipotéticamente sería viable añadir este "chip fx" de forma externa mediante el conector de expansión, no?
Es compatible con el modo radastaniano?
Está muy curioso la verdad, lo que pasa es que si no tiene implementación en el hard del sólo sería usable desde el emulador claro está. Igual lo habéis constestado ya, pero supongo que hipotéticamente sería viable añadir este "chip fx" de forma externa mediante el conector de expansión, no?
- chernandezba
- Mensajes: 841
- Registrado: 02 Oct 2015, 23:35
Re: Chip de Sprites virtual para ZX Spectrum
Si. Es compatible con cualquiera de los modos que emula ZEsarUX: standard, ulaplus incluido radastan y modos 5,7,9 propios y modos timex. Al fin y al cabo el sprite se sitúa 'por encima' de la pantalla normal y no importa lo que haya 'debajo'. Eso sí, el scroll solo funciona para el modo standard (de momento)Haplo escribió:Impactante!
Es compatible con el modo radastaniano?
Está muy curioso la verdad, lo que pasa es que si no tiene implementación en el hard del sólo sería usable desde el emulador claro está. Igual lo habéis constestado ya, pero supongo que hipotéticamente sería viable añadir este "chip fx" de forma externa mediante el conector de expansión, no?
En cuanto a una implementación física, lo he comentado con el equipo de zxuno pero no me han comentado si lo podrán o querrán agregar a zxuno. En cambio, mark smith, quien ha creado una ula física con soporte ulaplus, ya ha manifestado su interés en agregar soporte de sprites....