Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

jltursan
Mensajes: 2935
Registrado: 20 Sep 2011 13:59
Agradecido : 240 veces
Agradecimiento recibido: 702 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor jltursan » 13 Mar 2020 19:49

Último mensaje de la página anterior:

Pues dado que se trata de G4, hasta 16 colores.

Respecto a la codificación en AGD, ya que yo me basé en la de Spectrum, esta era totalmente diferente y correspondía a la de los attributos de color empleada en esa máquina. Esto es lo que te sueles encontrar en los listados AGD de Spectrum, por eso incluí un conversor en mi suite. ¿He de entender que ese 66 lo ves en un listado Spectrum o en uno MSX?

Avatar de Usuario
pser1
Mensajes: 2984
Registrado: 08 Dic 2012 18:34
Agradecido : 689 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 13 Mar 2020 20:12

jltursan escribió:Pues dado que se trata de G4, hasta 16 colores.

Respecto a la codificación en AGD, ya que yo me basé en la de Spectrum, esta era totalmente diferente y correspondía a la de los attributos de color empleada en esa máquina. Esto es lo que te sueles encontrar en los listados AGD de Spectrum, por eso incluí un conversor en mi suite. ¿He de entender que ese 66 lo ves en un listado Spectrum o en uno MSX?

El valor este aparece en el fichero FOGGYBW.AGD que se generó mientras iba convirtiendo el motor.
Los datos son los de Spectrum ya que nosotros no hicimos conversión alguna al 'pasar' de los colores puesto que en 6809
trabajamos en blanco y negro para tener 256x192
saludos
pere

jltursan
Mensajes: 2935
Registrado: 20 Sep 2011 13:59
Agradecido : 240 veces
Agradecimiento recibido: 702 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor jltursan » 13 Mar 2020 21:02

Pues entonces lo dicho, se sigue esta codificación:

- Bit 7 if set indicates the colour flashes between the fore and back colours.
- Bit 6 if set indicates the colours are rendered bright.
- Bits 5 to 3 contain the paper (background) colour 0..7
- Bits 2 to 0 contain the ink (foreground) colour 0..7

Empleando mi conversor puedes obtener la pareja de nibbles empleada en MSX (más o menos ya que ambas paletas no son 100% iguales, claro)

Avatar de Usuario
pser1
Mensajes: 2984
Registrado: 08 Dic 2012 18:34
Agradecido : 689 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 13 Mar 2020 23:22

Buenas noches,
os adjunto una foto de la pantalla inicial de Foggy cargada en Dragon64 con la V9958
Los colores ha sido obtenidos con la utilidad de jltursan
Por cierto, para confirmar, te adjunto aquí los valores que envio a los 16 colores de la paleta
Cuando puedas, trata de verificar si son los mismos que tu utilizas ...

Código: Seleccionar todo

;                  RB  0G   RB  0G   RB  0G   RB  0G
defCols     fcb   $00,$00, $00,$03, $11,$06, $33,$07    ; colours 0  to 3
            fcb   $17,$01, $27,$03, $51,$01, $27,$06    ; colours 4  to 7
            fcb   $71,$01, $73,$03, $61,$06, $64,$06    ; colours 8  to 11
            fcb   $11,$04, $65,$02, $55,$05, $77,$07    ; colours 12 to 15

saludos
pere
Foggy-Dragon-MSX2+.jpg
Foggy-Dragon-MSX2+.jpg (130.89 KiB) Visto 126 veces

Avatar de Usuario
pser1
Mensajes: 2984
Registrado: 08 Dic 2012 18:34
Agradecido : 689 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 13 Mar 2020 23:41

He modificado dos colores de la paleta, uno es el numero 1 que ahora si es negro ...
saludos
pere
MejorPaletaHastaAhoraCorrectedGamma.jpg
MejorPaletaHastaAhoraCorrectedGamma.jpg (120.16 KiB) Visto 100 veces

jltursan
Mensajes: 2935
Registrado: 20 Sep 2011 13:59
Agradecido : 240 veces
Agradecimiento recibido: 702 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor jltursan » 14 Mar 2020 09:52

Impresionante ver algo ya -shock , ¿al final estás usando G3, no?, lo digo porque el AGD MSX realmente no define ninguna paleta especial (dado que el MSX1 no dispone de ella) así que esos gráficos se hicieron con la paleta estandar en mente. Los otros gráficos que he enseñado en G4 usan una paleta totalmente reorganizada.

De todas formas, esta paleta es la del MSX1, en el V9958 tiene más brillo y eso le da un poco más de caracter (¡ojo, GRB!):

Código: Seleccionar todo

DW $000,$000,$611,$733,$117,$327,$151,$627
DW $171,$373,$661,$664,$411,$265,$555,$777

Y hablando de sprites...¿inicialmente vas a respetar los de modo 1 o vas a ir directo al modo 2?

EDITO: Y veo que la paleta es la que has obtenido tú... -thumbup

Avatar de Usuario
pser1
Mensajes: 2984
Registrado: 08 Dic 2012 18:34
Agradecido : 689 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 14 Mar 2020 11:37

jltursan escribió:Impresionante ver algo ya -shock , ¿al final estás usando G3, no?, lo digo porque el AGD MSX realmente no define ninguna paleta especial (dado que el MSX1 no dispone de ella) así que esos gráficos se hicieron con la paleta estandar en mente. Los otros gráficos que he enseñado en G4 usan una paleta totalmente reorganizada.
De todas formas, esta paleta es la del MSX1, en el V9958 tiene más brillo y eso le da un poco más de caracter (¡ojo, GRB!):

Código: Seleccionar todo

DW $000,$000,$611,$733,$117,$327,$151,$627
DW $171,$373,$661,$664,$411,$265,$555,$777

Y hablando de sprites...¿inicialmente vas a respetar los de modo 1 o vas a ir directo al modo 2?
EDITO: Y veo que la paleta es la que has obtenido tú... -thumbup

Muchas gracias José Luis,
Efectivamente estoy usando G3, luego verificaré la paleta que indicas, solo con corregir el negro ya mejoró algo, pero toqué también
los colores 7 y 11 y el azul se ha hecho demasiado claro.
Trataré de poner en pantalla la imagen del Foggy para Spectrum y, cuando pueda, jugaré con la paleta del programa a ver si puedo
conseguir colores mas exactos. Espero que entre 512 se pueda!
Respecto a los Sprites, ni siquiera he mirado la diferencia entre tipo 1 y tipo 2, pero como tanto G3 como G4 admiten Tipo2, trataré de
ir directamente a este modo.
Como hay cantidad de 'espacio' libre en los 256 Patterns, de los que utilizamos solo 79, incluso añadiendo ahí los caracteres para mostrar texto,
o sea, otros 96 habría 175 así que estaba pensando en meter ahí también los Objetos. 80 patterns darían para 20 objetos solamente si
recuerdo bien ¿Donde los ubicaste tu? Me temo que usarlos como pattern implicaría guardar en alguna parte los tiles que sobreescriben
para reponerlos cuando sean recogidos ... es mi gran duda/dilema!
saludos
buen fin de semana aunque sea ante el PC ;-)
pere

jltursan
Mensajes: 2935
Registrado: 20 Sep 2011 13:59
Agradecido : 240 veces
Agradecimiento recibido: 702 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor jltursan » 14 Mar 2020 11:46

En un principio muy principio pensaba en usar G2 en modo tiles; pero rápidamente me dí cuenta que era imposible. Si se emplean los 256 tiles no da realmente para definir los objetos más los posibles bloques y es totalmente imposible poder imprimir textos con los colores que uno quiera, todo esto hablando desde un punto de vista genérico y no sólo del Foggy; visto eso, el empleo que hago de G2 es tal como si fuese un bitmap ordinario trabajando únicamente sobre las tablas de patrones y colores y dejando la de nombres intacta. Una pena, porque con tiles muchas cosas habrían volado, habría ahorrado memoria y me habría evitado tener que implementar unas cuantas cosas para acelerar el rendimiento y equipararlo al del Spectrum :-(
Todo esto no quita que más adelante la aproveche (para los conveyor puede ir de lujo).

Ojo con los sprites en modo 2, que son complicadetes ;-)

Y lo de los colores...es que es un fiasco la conversión ZX-MSX. En el Spectrum, los colores "bright" en algunas ocasiones encajan con ciertos colores de la paleta MSX1; pero esos colores no siempre tienen su versión "dark" y viceversa. En la conversión simplemente aplico el criterio, cuando es posible, de buscar un color MSX "dark" y su equivalente "bright", por lo que muchas veces quedan los colores algo desvirtuados. En el V9958 no habría ningún problema ya que para los colores "bright" siempre vas a encontrar un "dark" similar al del ZX.
Si generas esa paleta "ZX Spectrum", ¡pásamela! :-)

Avatar de Usuario
pser1
Mensajes: 2984
Registrado: 08 Dic 2012 18:34
Agradecido : 689 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 14 Mar 2020 12:38

de acuerdo ... gracias por la explicación.
Yo voy a explorar por decirlo de alguna manera.
Utilizaré 'tiles' para formar las pantallas ya que es super directo a pesar de tener que replicar tanto los patrones/tiles como los colores
en las tres áreas en que dividen la pantalla.
De momento estoy mirando la pantalla de la V9958 con la imagen de la primera pantalla de Foggy y la verdad es que me gusta!
Ahora lo que voy a hacer es meter todas las pantallas en el fuente y pondré un 'esperar tecla' para ir presentándolas de 1 en 1
El siguiente paso serán los objetos y finalmente los sprites, en realidad es el orden en que se van mostrando en el motor AGD
Pensando en voz alta, a lo mejor los objetos podrían ser sprites inmóviles, así se detectaría la colisión de Foggy con ellos y al
quitarlos debería pasar a verse el fondo de pantalla ... elucubraciones ;-)
saludos
pere
MejorPaletaHastaAhoraCorrectedGamma.jpg
MejorPaletaHastaAhoraCorrectedGamma.jpg (120.16 KiB) Visto 98 veces

Pd El color azul se vuelve mas claro en la foto. Afortunadamente en pantalla la mayoría de colores son mas vivos!
También es verdad que al reducir la imagen a 640 pixels horizontales, se pierde mucha definición, pero así se ve directamente ...

Avatar de Usuario
pser1
Mensajes: 2984
Registrado: 08 Dic 2012 18:34
Agradecido : 689 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 14 Mar 2020 17:12

@jltursan
He conseguido colores prácticamente como los del original (página de Foggy's Quest) pero he modificado además de la mitad de los
colores de la paleta, los colores asignados a unos cuantos 'tiles' dos de los cuales también he modificado.
La paleta usada es esta:

Código: Seleccionar todo

defCols     fcb   $00,$00, $00,$00, $11,$07, $44,$07    ; colours 0  to 3
            fcb   $07,$00, $27,$03, $41,$01, $27,$06    ; colours 4  to 7
            fcb   $70,$00, $74,$04, $70,$07, $74,$07    ; colours 8  to 11
            fcb   $11,$04, $65,$02, $44,$04, $77,$07    ; colours 12 to 15

saludos
pere
CorrectedPaletteAndPatterns.jpg
CorrectedPaletteAndPatterns.jpg (121.47 KiB) Visto 88 veces

Pd Los colores siguen viéndose apagados en las fotos 'reducidas' pero en la pantalla se ven perfectamente brillantes!

Avatar de Usuario
pser1
Mensajes: 2984
Registrado: 08 Dic 2012 18:34
Agradecido : 689 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 14 Mar 2020 23:04

He ido modificando el programa para que pueda leer varias pantallas, juntando los datos de cada tile/pattern con sus colores
Luego he estado leyendo el tema de Sprites y es increíble como puede haber información tan contradictoria en un mismo documento
por ejemplo en "V9938-programmers-guide-v1.01c.pdf" en el apartado del MODE G3 en la página 42 de 108 propone unas direcciones de memoria
para cada tipo de datos, pero si vas al final del modo, en la página 46 de 108 propone algunos valores diferentes.
Lo malo es que yo me había fiapo de los últimos ya que se muestran en una pila vertical que parece correcta ...
Ha funcionado para cargar pantallas, pero a la hora de buscar espacio para los sprites no ha habido manera -banghead
Solo reserva 1024 bytes para sprite pattern generator cuando en realidad hacen falta 2048 para poder definir hasta 256 sprites de 8x8
léase 256x8=2048, o también 64 sprites de 16x16
Como creo que en Foggy tanto los objetos como los sprites son de 16x16, he contado los que hay y los frames necesarios, resultado:
- 11 sprites usando 39 frames
- 20 objetos usando 20 frames
Esto da un total de 59 frames que requieren 4 patterns de 8x8 cada uno, o sea 236 patterns
Estos números me permitirían implementar tanto los objetos como los sprites con el mismo sistema.
Lo que me preocupa es que en muchos otros juegos este número pueda superar 256 y el sistema ya no me valdría ...
@jltursan
Sin prisas, ¿ Podrías contarme como implementaste los Objetos y las Fuentes para el modo G2?
hasta luego y muchas gracias por toda tu ayuda!
saludos
pere

jltursan
Mensajes: 2935
Registrado: 20 Sep 2011 13:59
Agradecido : 240 veces
Agradecimiento recibido: 702 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor jltursan » 15 Mar 2020 15:02

Esos son algunos de los problemas a los que me enfrenté al convertir el motor...

Te hago un resumen de lo que empleo para cada objeto:

- Fuentes: Tal cual, se vuelca su patrón y relleno de color, un atributo único, según corresponde.

- Bloques: Idem que las fuentes pero respetando el que cada bloque permita 8 atributos de color.

- Objetos: Entiendelos como un grupo de 4 bloques; no son sprites por tanto. La ventaja es que tengo máxima definición de color, la desventaja que tengo que recuperar el fondo cuando un objeto desaparece y que obviamente, no son tan rápidos como los sprites hardware. Otras limitaciones adicionales son que sólo pueden ocupar posiciones múltiplos de 8 y que no hacen XOR con el fondo, no creo que eso de muchos problemas.

- Sprites: Pues eso, el recurso más valioso, los sprites hardware. Como los 64 patrones no dan ni de lejos para albergar todos los posibles frames que muchos juegos emplean, me vi obligado a implementar un "mapeador" dinámico que en todo momento quita y pone en la VRAM los patrones que en ese momento se están empleando. Eso implica que sí que existe un límite físico, 64 patrones en una pantalla en concreto. Igualmente tengo un multiplexador de sprites para compensar el que puedan existir más de cuatro en la misma fila.

Avatar de Usuario
pser1
Mensajes: 2984
Registrado: 08 Dic 2012 18:34
Agradecido : 689 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 15 Mar 2020 15:24

jltursan escribió:Esos son algunos de los problemas a los que me enfrenté al convertir el motor...
Te hago un resumen de lo que empleo para cada objeto:
- Fuentes: Tal cual, se vuelca su patrón y relleno de color, un atributo único, según corresponde.
Si pongo las fuentes en el área de patrones (en las tres de G3), una vez definida una letra, todas sus ocurrencias en pantalla se verán con el mismo color ya que el área de atributos es única por patrón ... o voy a tener que crear un fuente distinto para cada color :-(
- Bloques: Idem que las fuentes pero respetando el que cada bloque permita 8 atributos de color.
De momento yo copio el mismo color original de Spectrum en las ocho filas de cada patrón, pero ciertamente se podrían definir mas colores con paciencia (y mucho trabajo)
- Objetos: Entiendelos como un grupo de 4 bloques; no son sprites por tanto. La ventaja es que tengo máxima definición de color, la desventaja que tengo que recuperar el fondo cuando un objeto desaparece y que obviamente, no son tan rápidos como los sprites hardware. Otras limitaciones adicionales son que sólo pueden ocupar posiciones múltiplos de 8 y que no hacen XOR con el fondo, no creo que eso de muchos problemas.
Esta es la desventaja mas grave, el tener que guardar el fondo sobre el que encuentra cada objeto para reponerlo luego ...
- Sprites: Pues eso, el recurso más valioso, los sprites hardware. Como los 64 patrones no dan ni de lejos para albergar todos los posibles frames que muchos juegos emplean, me vi obligado a implementar un "mapeador" dinámico que en todo momento quita y pone en la VRAM los patrones que en ese momento se están empleando. Eso implica que sí que existe un límite físico, 64 patrones en una pantalla en concreto. Igualmente tengo un multiplexador de sprites para compensar el que puedan existir más de cuatro en la misma fila.
Esta es una buena idea ya que nunca hay necesidad de tantos 'frames' incluso se podrían tener los objetos ahí. Tampoco hay tantos en cada pantalla ... emplear justo los necesarios al cargar una pantalla puede ser mas 'pesado' pero seguramente ahorre mucho espacio para frames de sprites. El tema del limite de sprites por línea se alivia en modo Sprite 2 ya que permite el doble y deberían ser suficientes, espero.
saludos
pere

BlackHole
Mensajes: 1193
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 13 veces
Agradecimiento recibido: 266 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor BlackHole » 15 Mar 2020 16:05

Es que los equipos que tienen sprites por hardware, van moviendo los patrones desde la memoria principal en el momento que se necesitan, no están en memoria de vídeo todo el rato. Incluso el Commodore 64, que no tiene memoria de vídeo independiente y los punteros a los sprites apuntan a la memoria principal, solo cuenta con 8 de ellos simultaneamente... y no se puede decir que los juegos de C64 carezcan de dinamismo gráfico.

jltursan
Mensajes: 2935
Registrado: 20 Sep 2011 13:59
Agradecido : 240 veces
Agradecimiento recibido: 702 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor jltursan » 15 Mar 2020 16:16

Si pongo las fuentes en el área de patrones (en las tres de G3), una vez definida una letra, todas sus ocurrencias en pantalla se verán con el mismo color ya que el área de atributos es única por patrón ... o voy a tener que crear un fuente distinto para cada color


No me he explicado bien entonces. La fuente funciona como en el ZX: reside en RAM y cuando se imprime un caracter en pantalla se copia el patrón de la RAM a su posición en pantalla en la tabla de patrones (0000-17FF) y se rellena con el mismo atributo de color los correspondientes bytes de la tabla de color (2000-37FF)

Esta es la desventaja mas grave, el tener que guardar el fondo sobre el que encuentra cada objeto para reponerlo luego ...


Bastante trabajo, sí, además tenía que encajar eso con el mecanismo de actualización de la pantalla basado en "dirty tiles". Afortunadamente el resultado acabó siendo bastante bueno :-)

El tema del limite de sprites por línea se alivia en modo Sprite 2 ya que permite el doble y deberían ser suficientes, espero.


¡Nunca son suficientes!, el problema de ese modo es que es muy goloso el juntarlos de dos en dos para multiplicar por 2 el número de colores, la pena es que con eso vuelves a estar con la limitación de 4 por línea.

Es que los equipos que tienen sprites por hardware, van moviendo los patrones desde la memoria principal en el momento que se necesitan, no están en memoria de vídeo todo el rato.


Nope, en MSX lo más obvio es que cuando no se superan los 64 patrones (que es en la mayoría de ocasiones en los juegos normalitos), se cargue la memoria de video al comienzo y uno se olvida ya del tema. Obviamente todo depende del juego; si hace uso y abuso de animaciones e imágenes, los 64 patrones no serán suficientes y será necesario cargarlos empleando la estrategia que mejor le convenga al juego.

Avatar de Usuario
pser1
Mensajes: 2984
Registrado: 08 Dic 2012 18:34
Agradecido : 689 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 15 Mar 2020 16:52

Hola,
se ma ha ocurrido copiar las 28 pantallas del "Foggy's Quest" en el programa de prácticas en que trabajo y por poco la lío.
Parece poco, pero 28 pantallas con 20 filas de 28 columnas requieren 15.689 bytes como quien no quiere la cosa -banghead
Y no es cuestión de entrar ya en MAP1, o sea, todo RAM mientras estoy con el cartel de Prácticas -507
He de reconocer que es alucinante ver las 28 pantallas en el Dragon-MSX2+ ... las ganas de pasar a convertir el motor AGD
aumentan exponencialmente -thumbup
Ahora a por los objetos ... a ver si los puedo colar como sprites inmóviles.
saludos
pere

Avatar de Usuario
pser1
Mensajes: 2984
Registrado: 08 Dic 2012 18:34
Agradecido : 689 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 15 Mar 2020 16:55

Adjunto unas pocas capturas de pantalla ...
saludos
pere
Snap01.jpg
Snap01.jpg (137.85 KiB) Visto 114 veces
Snap02.jpg
Snap02.jpg (131.84 KiB) Visto 114 veces
Snap03.jpg
Snap03.jpg (101.24 KiB) Visto 114 veces
Snap04.jpg
Snap04.jpg (111.66 KiB) Visto 114 veces
Snap05.jpg
Snap05.jpg (142.66 KiB) Visto 114 veces
Snap06.jpg
Snap06.jpg (120.73 KiB) Visto 114 veces
Snap07.jpg
Snap07.jpg (131.86 KiB) Visto 114 veces


Volver a “Software MSX”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados