Chip de Sprites virtual para ZX Spectrum

Software para o relacionado con el core ZX Spectrum / Software for or related to the ZX Spectrum core
Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Chip de Sprites virtual para ZX Spectrum

Mensaje por chernandezba » 06 Nov 2015, 19:12

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
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
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

Mensaje por mcleod_ideafix » 06 Nov 2015, 20:41

chernandezba 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
La demo de Sonic ahí en el Spectrum es impresionante. Un purista estará echando ahora mismo espumarrajos por la boca, pero aun así, mola :)

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

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: Chip de Sprites virtual para ZX Spectrum

Mensaje por chernandezba » 06 Nov 2015, 23:30

mcleod_ideafix escribió:
chernandezba 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
La demo de Sonic ahí en el Spectrum es impresionante. Un purista estará echando ahora mismo espumarrajos por la boca, pero aun así, mola :)

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?
Jejee si. Habrá más de un purista cabreado :P aún no he hecho post en el foro de WOS, ahí estoy seguro que habrá reacciones....

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
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: Chip de Sprites virtual para ZX Spectrum

Mensaje por chernandezba » 06 Nov 2015, 23:40

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
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
antoniovillena
Mensajes: 2621
Registrado: 27 Sep 2015, 20:41

Re: Chip de Sprites virtual para ZX Spectrum

Mensaje por antoniovillena » 07 Nov 2015, 00:01

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

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: Chip de Sprites virtual para ZX Spectrum

Mensaje por chernandezba » 07 Nov 2015, 00:11

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
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
antoniovillena
Mensajes: 2621
Registrado: 27 Sep 2015, 20:41

Re: Chip de Sprites virtual para ZX Spectrum

Mensaje por antoniovillena » 07 Nov 2015, 00:55

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

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: Chip de Sprites virtual para ZX Spectrum

Mensaje por chernandezba » 07 Nov 2015, 01:02

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'
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
Haplo
Mensajes: 368
Registrado: 05 Oct 2015, 13:51
Ubicación: Ciudad Real

Re: Chip de Sprites virtual para ZX Spectrum

Mensaje por Haplo » 08 Nov 2015, 13:23

Impactante!
Es compatible con el modo radastaniano? :mrgreen: :mrgreen: :mrgreen:

Está muy curioso la verdad, lo que pasa es que si no tiene implementación en el hard del :zxuno: 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?

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: Chip de Sprites virtual para ZX Spectrum

Mensaje por chernandezba » 08 Nov 2015, 16:17

Haplo escribió:Impactante!
Es compatible con el modo radastaniano? :mrgreen: :mrgreen: :mrgreen:

Está muy curioso la verdad, lo que pasa es que si no tiene implementación en el hard del :zxuno: 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?
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)
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.... ;)
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Responder