Karoshi MSX Community
05 de Julio de 2021, 03:34:47 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: ¿Dónde se almacenan los sprites hardware?  (Leído 4394 veces)
0 Usuarios y 1 Visitante están viendo este tema.
AxelStone
Karoshi Newbie
*
Mensajes: 36



« : 14 de Enero de 2015, 07:48:50 pm »

Buena señores, otra pregunta: ¿dónde se almacenan los sprites hardware? Supongo que en la VRAM pero ¿cómo se lo que están ocupando y cuánto tengo disponible aún para definir sprites?

Es que con los sprites software es fácil, se meten en páginas de VRAM y cada página es un tilesheet, así es fácil saber si he llenado o no la página, pero con sprites hardware no tengo claro cuándo he "llenado la página" y en qué página está.

Hablamos de Basic / turbo Basic. Gracias!
En línea

MSX Still alive!
aorante
Karoshi Maniac
****
Mensajes: 451


nuTella Power!


WWW Email
« Respuesta #1 : 15 de Enero de 2015, 02:04:36 pm »

Hola AxelStone!

No se que conocimiento tienes de los Sprites de las diferentes generaciones de los MSX, así que te doy una introducción de como funcionan:

En Basic tienes dos formas de trabajar con sprites: utilizando los comandos de Basic o accediendo directamente a la VRAM.
Desconozco si turbo/Nestor-basic, proporcionan alguna facilidad especifica.

Tanto en el TMS9918 como con el V9938, dispone de 32 planos de sprites visibles en pantalla, pero se pueden definir 256 patrones de 8x8 o 64 de 16x16. A cada plano se puede asignar el patrón que necesitemos.
En el TMS9918 (MSX1), los sprites solo pueden tener un color y solo se pueden mostrar 4 en una misma linea.
En los modos de pantalla del V9938 (4 para arriba), los sprites puden mostrar 1 color diferente por linea y se pueden visualizar hasta 8 por linea. Además, en los valores de los colores hay un bit (bit de OR), que sirve para mezclar los colores de dos o más sprites (como bitplanos) permitiendo 3 o más colores por linea.   

Los sprites tienen 3 tipos de datos. Estos se encuentran en diferentes áreas reservadas de la VRAM:
- patrones (dibujo del sprite sin colores, de 8x8 o 16x16). Desde Basic se define con la instrucción SPRITE$(n) o haciendo Vpoke a su correspondiente área de la memoria. (tamaño = 256 patrones * 8B = 64 patrones * 32B = 2048B)

- atributos, para asignar a cada plano la posición, número de patrón y color (y, x, número de patrón y color). Se utiliza la instrucción PUT SPRITE, o escribiendo en la zona de atributos de sprite de la VRAM.  (tamaño=32 planos * 4B = 128B).

- colores (solo para V9938 o superiores), Se define el color del patrón para cada linea (8 o 16, según tamaño). Aquí se utiliza la instrucción COLOR SPRITE$(n) o Vpoke en su correspondiente área. Aquí hay una limitación: Los colores se definen para los 32 planos, no para los patrones de sprite (que pueden ser 64 o 256, según tamaño). Ejemplo: si visualizas el patron 1, en diez planos, has de escribir los colores para ese patrón de sprite en los 10 planos. (tamaño = 32 planos * 16 lineas = 512B)

La dirección de la VRAM de cada una de estas áreas, pueden cambiar dependiendo del modo de pantalla. En Screen 1,2, 3 y 4 son las mismas. En el 5 y 6 son otras y en el screen 7 y 8, otras. Puedes localizarlas en el Portar o en el Programmers Guide del V9938:
http://problemkaputt.de/portar.htm#videomodesscreens
http://rs.gr8bit.ru/Documentation/V9938-programmers-guide.pdf

También puedes encontrar más información sobre sprites en los siguientes artículos que publique en mi blog:
http://aorante.blogspot.com.es/2013/04/sprites-del-v9938-msx2.html
http://aorante.blogspot.com.es/2013/05/sprites-del-v9938-2-or-de-colores.html
http://aorante.blogspot.com.es/2011/08/ocultate-en-la-208.html

Espero que te haya servido de ayuda...  Smiley
Saludos!
En línea

--------------------------------- ------ ----- --- -- -
aorante/303bcn
http://aorante.blogspot.com
http://twitter.com/#!/aorante
http://303bcn.wordpress.com/
--------------------------------- ------ ----- --- -- -
AxelStone
Karoshi Newbie
*
Mensajes: 36



« Respuesta #2 : 15 de Enero de 2015, 07:27:19 pm »

La respuesta es muy buena si señor. Por lo que me han comentado en los foros de MRC parece ser que se almacenan en la zona no visible de las páginas de video ¿puede ser? Es decir que aprovecha esa memoria para guardarlos, al menos entiendo que así funcionará mediante el comando SPRITE$. Si en su lugar usas el VPOKE entiendo que puedes alojarlo en cualquier zona de la VRAM.

Lo de los planos y todo lo demás lo sabía, lo que no me habían contado era lo de los 256 patrones, ahora sé donde está el límite. Creo que voy a leer un poco los enlaces que me pasas, a ver si me aclaro Wink.

Gracias por la info.
En línea

MSX Still alive!
aorante
Karoshi Maniac
****
Mensajes: 451


nuTella Power!


WWW Email
« Respuesta #3 : 16 de Enero de 2015, 02:20:47 pm »

La respuesta es muy buena si señor. Por lo que me han comentado en los foros de MRC parece ser que se almacenan en la zona no visible de las páginas de video ¿puede ser? Es decir que aprovecha esa memoria para guardarlos, al menos entiendo que así funcionará mediante el comando SPRITE$. Si en su lugar usas el VPOKE entiendo que puedes alojarlo en cualquier zona de la VRAM.

Creo que el problema que hay desde Basic de los MSX2, es que utilizando Vpoke y Vpeek, no se puede acceder a toda la VRAM (los 128k), pero las zonas destinadas a cada dato de los sprites son fijas. Los comandos de Basic han de escribir en esas mismas zonas.

Cuando inicializas el modo de pantalla con el comando screen, se definen todas las áreas de los diferentes datos que compone la pantalla. Es igual para los que programan en ensamblador, ya que se suele utilizar una función de la BIOS, que es la misma que llamará el comando screen desde el interprete Basic.

En línea

--------------------------------- ------ ----- --- -- -
aorante/303bcn
http://aorante.blogspot.com
http://twitter.com/#!/aorante
http://303bcn.wordpress.com/
--------------------------------- ------ ----- --- -- -
jrcp_kun
Karoshi Newbie
*
Mensajes: 34


Email
« Respuesta #4 : 01 de Febrero de 2015, 09:20:46 pm »

aorante como activas en ensamblador el OR de los colores de los sprites??
En línea
aorante
Karoshi Maniac
****
Mensajes: 451


nuTella Power!


WWW Email
« Respuesta #5 : 02 de Febrero de 2015, 12:38:51 pm »

aorante como activas en ensamblador el OR de los colores de los sprites??


En el área de la VRAM donde se guarda la info de color para los sprites de MSX2, dentro de esa info los 4 primeros bits (0-3) se utilizan para el color y el bit 6 es el de OR. Es un poco rollo por que se ha de indicar en los 16 colores que componen un sprite.

El bit de OR se ha de indicar en los colores del sprite que se coloca detras (en un plano inferior), al que se ha de fusionar. Luego has de procurar que los dos sprites se posicionen juntos para que se vean correctamente.


Pego aquí la info sobre los colores de sprites, sacado de portar (http://problemkaputt.de/portar.htm#foregroundsprites):

Sprite colours
In MSX2 video modes with colored sprites (screen 4-8), the fourth byte of the OAM entires is unused. Instead, the sprite attributes are stored in a separate 'color table'.
That table is always placed at the address of the above sprite attribute table minus 200h. The color table contains 20h entries (one for each entry of the OAM table), and each entry is sized 10h bytes.
The 10h bytes of each entry specify color & attributes for each line of the displayed sprites (assuming that the sprite size is set to 16x16).

The bytes in that color table are used as follow:
  Bit 0-3    CL  Color Code (0-15)
  Bit 4      0   Unused
  Bit 5      IC  Ignore collisions with other sprites. (1=Ignore)
  Bit 6      CC  Mix color with sprite that has next higher priority.
  Bit 7      EC  Early clock (shift this line of the sprite 32 pixels to left)

For screen 4-7 the color code specifies the desired palette color, for screen 8 the sprite colors are hardcoded as follows:
  Bit 0      Blue      (1=on, 0=off)
  Bit 1      Red       (1=on, 0=off)
  Bit 2      Green     (1=on, 0=off)
  Bit 3      Intensity (1=Light, 0=dark)

If the intensity-bit is set alone (with b0-2 cleared, ie. color Cool, then something like bright pink or bright orange is displayed instead.

When CC is set, the color of the sprite is logically ORed with the pixels of the sprite "that has the next higher priority, and that has CC=0". In that case a collision just mixes colors, and does not causes a conflict, ie. bit 5 of status register 0 doesn't get set.

If a line of a sprite has the CC bit set, then it MUST collide with at least one pixel of another sprite with higher priority, otherwise the line of the sprite isn't displayed at all!
En línea

--------------------------------- ------ ----- --- -- -
aorante/303bcn
http://aorante.blogspot.com
http://twitter.com/#!/aorante
http://303bcn.wordpress.com/
--------------------------------- ------ ----- --- -- -
jrcp_kun
Karoshi Newbie
*
Mensajes: 34


Email
« Respuesta #6 : 03 de Febrero de 2015, 05:46:19 pm »

si es que estoy haciendo pruebas con varios colores en la misma linea screen 5. y no me acaba de salir y creo que a lo mejor es por el or. lo estoy haciendo con tinysprite. probare con el otro que hay a ver que pasa.
Gracias
En línea
aorante
Karoshi Maniac
****
Mensajes: 451


nuTella Power!


WWW Email
« Respuesta #7 : 03 de Febrero de 2015, 06:02:44 pm »

si es que estoy haciendo pruebas con varios colores en la misma linea screen 5. y no me acaba de salir y creo que a lo mejor es por el or. lo estoy haciendo con tinysprite. probare con el otro que hay a ver que pasa.
Gracias

No es un tema sencillo de tratar.  Tongue
En el MRC hay un articulo muy completo sobre el tema. Se muestran varias tablas de combinaciones de colores.
http://www.msx.org/wiki/The_OR_Color

Y también tienes en mi blog una explicación de como funciona:
http://aorante.blogspot.com.es/2013/05/sprites-del-v9938-2-or-de-colores.html
En línea

--------------------------------- ------ ----- --- -- -
aorante/303bcn
http://aorante.blogspot.com
http://twitter.com/#!/aorante
http://303bcn.wordpress.com/
--------------------------------- ------ ----- --- -- -
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!