Karoshi MSX Community
05 de Julio de 2021, 08:13:59 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: Eliminar el efecto sprite mirroring / clonning.  (Leído 5849 veces)
0 Usuarios y 1 Visitante están viendo este tema.
WYZ
Visitante
« : 29 de Abril de 2010, 12:06:23 pm »

Esos! Cheesy

Ultimamente me ha vuelto la mania de machacar el VDP del MSX1 (cualquiera de ellos) con cositas no documentadas. He vuelto a hacer algunas demos utilizando el modo de pantalla que probé en Pirates, pero solo para cosumo propio 8-P, he seguido haciendo mas cosas con splits de pantalla y he "abusado" de los modos hibridos/mixtos. A ver si aprendo ya algo, por lo menos como no se deben hacer las cosas Grin.

Esto último es lo que me hace pensar:

* ¿porque se produce el efecto espejo con los sprites?

En este hilo Hap parece que encuentra alguna razón: http://www.msx.org/forumtopic9087.html


* Y la pregunta del millón: ¿Como se elimina? (sin usar un secador de pelo!!! juas)

http://www.msx.org/forumtopic7248.html

Aquí ARTRAG pregunta si es posible eliminarlo, pero creo que no hay respuesta. ¿Que sa sabe de esto?

Hala! un saludo y nos vemos...
En línea
cybernoid
Karoshi Maniac
****
Mensajes: 368



WWW
« Respuesta #1 : 29 de Abril de 2010, 01:57:19 pm »

y....¿que efecto es ese?  alguien me lo explica?
En línea
WYZ
Visitante
« Respuesta #2 : 29 de Abril de 2010, 04:09:24 pm »

@Gobblin. interesante verdad? Cheesy

Pues no sabría decirte si es mas un fallo de "algunos" VDP's o una caracteristica aprovechable.

A grandes rasgos se trata de que algunos modos hibridos configuran de tal forma los registros del VDP que afectan a la visualización de los sprites. Por ejemplo, ese tan famoso que clona los tiles del primer tercio en los dos siguentes tercios de la pantalla (mas o menos Screen 1 + screen 2), tiene esos efectos secundarios: Los sprites tambien aparecen clonados pero con distinta coordenada Y. Es como si tambien tuvieramos 3 sets identicos de Sprites. Al menos en el philips 8020 (TMS 9918) que tengo este efecto muy claro.

A ver si subo una imagen. Tambien está emulado por si quieres verlo rapidamente.
En línea
cybernoid
Karoshi Maniac
****
Mensajes: 368



WWW
« Respuesta #3 : 03 de Mayo de 2010, 09:41:29 am »

Pues si, la verdad es que es un rato interesante, es una lastima que no se pueda aprovechar en todos lo MSX
En línea
mohai
Karoshi Fan
**
Mensajes: 80



« Respuesta #4 : 11 de Junio de 2010, 03:30:49 pm »

Buenas,

siempre me he preguntado si este es un comportamiento totalmente normal del VDP, que responde al modo de funcionamiento de 4K RAM.
Sería lógico que, si se configura este modo, el chip intente usar sólo las primeras 4K de RAM, dando así este efecto de clonado de patrones y sprites.

Recuerdo que hace años, cuando empezaba con el MSX1, trasteando con los registros descubrí el modo mixto, para usar un solo banco de caracteres en SCREEN 1, pero con coloreado SCREEN 2. Luego, al probar el mismo efecto en el MSX2, resultó que ésto ya no funcionaba igual: los 2 tercios inferiores no clonaban al primero y los sprites parecían aparecer duplicados de vez en cuando en pantalla.

Supongo que Yamaha, al rediseñar el VDP, no implementó bien el modo de 4K y por eso se perdieron estos efectos.
En línea
Dioniso
Visitante
« Respuesta #5 : 11 de Junio de 2010, 04:37:34 pm »

Recuerdo que hace años, cuando empezaba con el MSX1, trasteando con los registros descubrí el modo mixto, para usar un solo banco de caracteres en SCREEN 1, pero con coloreado SCREEN 2. Luego, al probar el mismo efecto en el MSX2, resultó que ésto ya no funcionaba igual: los 2 tercios inferiores no clonaban al primero y los sprites parecían aparecer duplicados de vez en cuando en pantalla.

Supongo que Yamaha, al rediseñar el VDP, no implementó bien el modo de 4K y por eso se perdieron estos efectos.

Hola, Mohai. ¿No sería al revés, que trasteando en un MSX2 el modo mixto SCREEN 1 + 2 funcionaba pero en un MSX1 ya no funcionaba?

En el 2004 yo utilicé ese efecto en el T-VIRUS y en el GNIFFEL. De hecho, en la pegatina del juego GNIFFEL aparecen los SPRITES que deberían aparecer si no hubiera ningún problema con el efecto mirroring, ya que el juego fue programado sobre emulador (y las capturas corresponden a la versión emu). Al probar en un MSX1, los SPRITES que hacían de sombra gris en los dados de la izquierda eran los que se repetían. Tuve que quitar esos SPRITES y dejar los dados en blanco y negro.

Como ya se ha hablado, el (d)efecto se consigue, precisamente, en TODOS los VDP de Yamaha y no en los clones que tienen ciertos modelos de MSX1. Una pena ...
En línea
mohai
Karoshi Fan
**
Mensajes: 80



« Respuesta #6 : 12 de Junio de 2010, 03:48:26 pm »

Recuerdo que hace años, cuando empezaba con el MSX1, trasteando con los registros descubrí el modo mixto, para usar un solo banco de caracteres en SCREEN 1, pero con coloreado SCREEN 2. Luego, al probar el mismo efecto en el MSX2, resultó que ésto ya no funcionaba igual: los 2 tercios inferiores no clonaban al primero y los sprites parecían aparecer duplicados de vez en cuando en pantalla.

Supongo que Yamaha, al rediseñar el VDP, no implementó bien el modo de 4K y por eso se perdieron estos efectos.

Hola, Mohai. ¿No sería al revés, que trasteando en un MSX2 el modo mixto SCREEN 1 + 2 funcionaba pero en un MSX1 ya no funcionaba?


No, no. Estoy seguro de que el efecto se daba en MSX 1 (un Mitsubishi ML-FX1, concretamente) y en el Philips 8235 no se daba.

Si no recuerdo mal, yo primero ponía SCREEN 1 (para poder usar el comando PRINT y poner patrones) y luego ponía el bit del modo SCREEN 2 y otro registro (creo que el 2 o el 3) a 255. Luego había que redefinir los patrones y colores para poder ver algo en pantalla, pero bastaba hacerlo para el primer banco.

En aquel entonces no entendía muy bien por qué, pero de ésta manera era capaz de usar la instrucción PRINT para mostrar patrones multicolor en modo texto (SCREEN 1).


Mi teoría es la siguiente:

Los bits que configuran cada modo de pantalla no están bien explicados en los manuales oficiales. Todos nos hemos dado cuenta de que hay combinaciones posibles que no se usan, pero que configuran al VDP en modos especiales más o menos controlables. Algunas combinaciones son inútiles y otras nos dan los modos mixtos.

El modo gráfico 2 (SCREEN 2) es exactamente igual al modo gráfico 1 (SCREEN 1), pero con un bit en un registro que controla el modo de color de los patrones. Además el SCREEN 1 sólo usa un banco de patrones (ahora no recuerdo si esto lo controlaba otro bit o bastaba cambiar el puntero de la tabla de color).

Creo recordar que la tabla de patrones comienza en la misma zona de VRAM y la de colores también, e incluso la de Sprites.

Si partimos de SCREEN 1, basta cambiar este bit para cambiar el modo de coloreado. Luego redefinir los colores para poder ver algo.

No recuerdo el modo exacto en que lo hacía en el Mitsubishi (desempolvaré alguna cinta a ver...), pero estoy seguro de que conseguía un solo banco de patrones multicolor y sin problemas con sprites.

salu2
En línea
mohai
Karoshi Fan
**
Mensajes: 80



« Respuesta #7 : 24 de Junio de 2010, 10:24:17 pm »

Bueno, me respondo a mi mismo y aclaro un poco las cosas. He estado trasteando en MSX 1 (Pioneer PX-7, TMS9918A, creo).

Lo que hacia y que funciona tanto en MSX1 como en 2, es lo siguiente:

Código:
SCREEN 2
SCREEN 1
COLOR 15,4,7
VDP(0)=2
VDP(3)=255

Como veis, mas facil imposible. Basta cambiar esos 2 registros para conseguir un modo con un solo banco de patrones. El problema es que la tabla de colores sigue siendo de 6 K, es decir, que cada tercio de pantalla tiene su tabla de colores, pero el problema queda resuelto a medias y desde BASIC se pueden conseguir cosas chulas.

Importante poner primero SCREEN 2 (para limpiar la VRAM) y luego el color de borde, para poder ver algo en pantalla.

Ahora bien, se supone que el registro 3 (multiplicado por &H40) nos da la direccion de la tabla de color, pero esto no es cierto del todo. En el ejemplo la tabla de colores deberia estar en 16320, pero REALMENTE sigue en 8192. Probad a VPOKEar y vereis.

Despues de varias pruebas averigue, mas o menos el comportamiento de los bits del registro 3. Aun tengo que hacer pruebas, pero esto es lo que he descubierto:

BIT 7: Siempre a 1 o la tabla de colores se vuelve poco controlable y muestra basura.
       La tabla de color del tercio superior comienza en 8192.

BIT 6: =0, Tabla de colores tercio inferior igual a la del tercio superior (8192)
       Si =1, tabla de color independiente (8192+2048)

BIT 5: =0, Tabla de colores tercio central igual a la del tercio superior (8192)
       Si =1, tabla de color independiente (8192+2048+2048)

BIT 4,3,2,1,0: Varian el grupo de caracteres afectados por la tabla de color. Mejor dejar a 1


Luego, para activar un modo de un solo banco de patrones y colores, he hecho lo siguiente:

Código:
SCREEN 2
SCREEN 1
COLOR 15,4,7
VDP(0)=2
VDP(3)=&B10011111

Parece que el VDP se limita a usar los 3 bits altos como puntero de comienzo para la tabla de color y los 5 bits bajos como contador para recorrer la tabla (o algo asi). El funcionamiento de los 5 bits bajos no lo tengo claro.

Supongo que no he descubierto nada nuevo, pero como tampoco he encontrado documentacion clara que explique este comportamiento del VDP, estoy documentando lo que voy descubriendo.

Y otro asunto es que esto sea aplicable al V9938 y posteriores (ya lo probare).

salu2
« Última modificación: 24 de Junio de 2010, 10:33:44 pm por mohai » En línea
Mortimer
Karoshi Lover
***
Mensajes: 216


WWW
« Respuesta #8 : 24 de Junio de 2010, 11:07:55 pm »

Citar
Luego, para activar un modo de un solo banco de patrones y colores, he hecho lo siguiente:

Código:
SCREEN 2
SCREEN 1
COLOR 15,4,7
VDP(0)=2
VDP(3)=&B10011111

Parece que el VDP se limita a usar los 3 bits altos como puntero de comienzo para la tabla de color y los 5 bits bajos como contador para recorrer la tabla (o algo asi). El funcionamiento de los 5 bits bajos no lo tengo claro.

Supongo que no he descubierto nada nuevo, pero como tampoco he encontrado documentacion clara que explique este comportamiento del VDP, estoy documentando lo que voy descubriendo.

Y otro asunto es que esto sea aplicable al V9938 y posteriores (ya lo probare).

Según se desprende del documento de Sean Young sobre le VDP: http://bifi.msxnet.org/msxnet/tech/tms9918a.txt (Y de otro del TI-99/4A que no encuentro ahora y dónde viene más claro)

En modo M2, el registro 3 se comporta de la siguiente forma, el bit 7 multiplicado por 2000h nos da la dirección de inicio de la tabla de color. El resto de los bits menos significativos se utilizan como una máscara AND sobre los 7 bits más significativos del contenido de la tabla. Me explico:

Dependiendo del bit 7 sólo hay dos opciones

1xxxxxxx = Tabla de color empieza en 2000h. 0xxxxxxx = Tabla de color empieza en 0000h

Y ahora, con los 7 bits restantes pasa lo siguiente:

Byte leído de la tabla de nombre AND ((xxxxxxx << 1) OR 1)

Por eso, para que funcione normalmente hay que dejar todos los bits a 1, si no, para algunas posiciones se repiten otras. Por ejemplo, si dejas el registo 3 a 00000111, el resultado es que los 4 bits más significativos de la tabla de nombres se ignoran (Se le aplica un AND 00001111), y por tanto sólo se usarían 16*8 bytes de la tabla de color.

No sé si te he liado más o te he aclarado algo... Wink

En línea
mohai
Karoshi Fan
**
Mensajes: 80



« Respuesta #9 : 25 de Junio de 2010, 05:38:41 pm »

En modo M2, el registro 3 se comporta de la siguiente forma, el bit 7 multiplicado por 2000h nos da la dirección de inicio de la tabla de color. El resto de los bits menos significativos se utilizan como una máscara AND sobre los 7 bits más significativos del contenido de la tabla. Me explico:

Dependiendo del bit 7 sólo hay dos opciones

1xxxxxxx = Tabla de color empieza en 2000h. 0xxxxxxx = Tabla de color empieza en 0000h

Y ahora, con los 7 bits restantes pasa lo siguiente:

Byte leído de la tabla de nombre AND ((xxxxxxx << 1) OR 1)

Por eso, para que funcione normalmente hay que dejar todos los bits a 1, si no, para algunas posiciones se repiten otras. Por ejemplo, si dejas el registo 3 a 00000111, el resultado es que los 4 bits más significativos de la tabla de nombres se ignoran (Se le aplica un AND 00001111), y por tanto sólo se usarían 16*8 bytes de la tabla de color.

No sé si te he liado más o te he aclarado algo... Wink

Me has aclarado un poco el funcionamiento de los bits bajos.

Aunque el modo que yo uso no está explicado en el documento de Sean Young, me ha valido de ayuda.

Por lo que explicas y el documento de Sean Young, veo que poniendo el bit M2 a 1, se puede cambiar la tabla de colores y/o patrones a la dirección 0000h o 2000h, con sólo cambiar los bits 13 de los punteros.
Esto nos limita a tener los colores en una zona y los patrones en otra, pero no podemos colocarlos a nuestro antojo por toda la VRAM.
Este sistema nos obliga a tener un banco fijo para el tercio superior y (una de 2): compartirlo con alguno de los otros tercios o seleccionar un banco diferente para los 2 tercios inferiores. Si jugamos con los bits CT12, CT11, PG12 y PG11, podemos hacer que los tercios inferiores alternen entre el banco común con el tercio superior y el suyo propio a nuestro antojo, creando así un efecto de paginado.

Y ya puestos, y espero no ser muy pesado, ¿Los bits SGn hacen el mismo efecto para los sprites? ¿Serviría para duplicar el número de sprites en pantallä?

Todo esto está probado en el TMS9918A. Aun hay que probarlo en un V9938...
En línea
Mortimer
Karoshi Lover
***
Mensajes: 216


WWW
« Respuesta #10 : 25 de Junio de 2010, 06:14:53 pm »

Lo de poder cambiar el banco del 2º y 3er tercio entre el suyo y el principal moviendo solo dos bits es posible, y además funciona en el V9938. De hecho hasta está documentado para el TMS por TI en algún libro. Lo malo es que dónde seguro que no funciona es en el clónico del VDP de Toshiba que llevan algunas máquinas de esta marca y algunos Sony, por lo que deja de ser 100% compatible.

Ahora, el provecho que se le puede sacar a esto, pues ya es un poco relativo. Si hubiera más granularidad para colocar las tablas que no fueran 0000h y 2000h, o se pudiera elegir explícitamente que banco de los 3 dibujar en cada tercio...

Lo que sí en teoría funciona (Aunque creo recordar a Sapphire le dio problemas cuando lo intentó usar en un juego real) , es utilizar la máscara de los bits para tener varios juegos de caracteres, aunque más pequeños. Supongamos que te bastan 128 caracteres y quieres conmutar entre dos bancos rápidamente, cargas en la tabla de nombres con el bit alto, y luego cambiando el primer bit de la máscara haces que se intercambien todos los caracteres. El 0 por el 128, el 1 por el 129...






« Última modificación: 25 de Junio de 2010, 06:37:57 pm por Mortimer » En línea
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!