Comandos especiales en el V9958

jltursan
Mensajes: 3429
Registrado: 20 Sep 2011 13:59
Agradecido : 336 veces
Agradecimiento recibido: 947 veces

Re: Comandos especiales en el V9958

Mensajepor jltursan » 18 Feb 2021 21:27

Último mensaje de la página anterior:

¡Buenas noticias y notable el progreso! -thumbup

Cuando esta parte esté funcionando tal vez podríamos hablar de la compresión LZ. ¿Se gana mucho espacio al emplearla?
¿Has notado el posible aumento de tiempo al descomprimir?


Aprox. una media del 40% en el espacio ocupado por el mapa. Se nota el tiempo; pero la verdad es que en la práctica no resulta molesto. Recuerdo que en el AEON2 si que parecía algo noticiable. La principal "desventaja" es que necesita un buffer para descomprimir previamente la pantalla al completo (buffer que por otra parte te puede venir bien). Estuve probando otro mecanismo de compresión que permitía el streaming de los bytes; pero no está bien documentado y había que adaptarlo, no tuve éxito y lo aparqué.
Mi plan es que con eso y un soporte apropiado para los metablocks, el tema de los mapas recupere bastante espacio malgastado.

Otra cosa es que el "Pick Axe" cuando está en pantalla se muestra negro sobre negro, o sea invisible. He visto que la versión
MSX se ve en color en el pantallazo que adjuntaste (jltursan), así que he modificado el compilador para que cuando un objeto
resulte con colores negro sobre negro se cambie a azul oscuro sobre negro


-507 es cierto. La verdad es que lo diseñé sin saber que posición ocupaba (ya sabes que para mí eso es irrelevante dado que doto a los objetos de su propio color) y cuando ví que lo habían hecho invisible, me pareció que era pasarse un pelín así que lo dejé como estaba. Lo podría haber dejado en negro o emplear tu solución, que me parece la mejor, el objeto se ve; pero oscurecido.

Si quieres estudiar lo de la compresión tendré que pasarte también la fuente del compilador, ya te explicaría un poco como lo he montado. A ver si te las empaqueto y te las paso.

Avatar de Usuario
pser1
Mensajes: 3154
Registrado: 08 Dic 2012 18:34
Agradecido : 784 veces
Agradecimiento recibido: 799 veces

Re: Comandos especiales en el V9958

Mensajepor pser1 » 18 Feb 2021 21:40

jltursan escribió:¡Buenas noticias y notable el progreso! -thumbup
Aprox. una media del 40% en el espacio ocupado por el mapa. Se nota el tiempo; pero la verdad es que en la práctica no resulta molesto. Recuerdo que en el AEON2 si que parecía algo noticiable. La principal "desventaja" es que necesita un buffer para descomprimir previamente la pantalla al completo (buffer que por otra parte te puede venir bien). Estuve probando otro mecanismo de compresión que permitía el streaming de los bytes; pero no está bien documentado y había que adaptarlo, no tuve éxito y lo aparqué.
Mi plan es que con eso y un soporte apropiado para los metablocks, el tema de los mapas recupere bastante espacio malgastado.
Si quieres estudiar lo de la compresión tendré que pasarte también la fuente del compilador, ya te explicaría un poco como lo he montado. A ver si te las empaqueto y te las paso.
Muchas gracias, José Luis.
Ya veremos, de momento no me dan problemas los mapas reducidos un poco con el método RLE y menos al desaparecer de memoria el espacio
ocupado por los patrones/tiles y los objetos de los que solo me quedo el bloque de datos que precede a la definición del objeto, que ahora en
mi caso serán unos 18 bytes por objeto ya que he añadido tres mas para los colores y cuatro para disponer de las coordenadas del objeto en VRAM
Voy a seguir con el tema de ficheros en lugar de .ASM así que, de momento, no te preocupes por el compresor ... ya tendremos tiempo.
El buffer donde hay que descomprimirlo podría ser la misma área que usamos como copia en RAM del mapa de 'tiles' en VRAM de la pantalla
en juego. De esta forma no se requerirá ni un solo byte adicional
Seguimos en contacto
saludos
pere

Avatar de Usuario
pser1
Mensajes: 3154
Registrado: 08 Dic 2012 18:34
Agradecido : 784 veces
Agradecimiento recibido: 799 veces

Re: Comandos especiales en el V9958

Mensajepor pser1 » 19 Feb 2021 15:12

otra cosa mas ...
El compilador ya genera los dos ficheros, uno para Patrones/Tiles y otro para Objetos ambos con cabecera para Dragón de momento
La última compilación que hice para el modo gráfico G3 generó estos ficheros (con longitudes)
- FOG93.ASM --> 449.150 bytes
- FOG93.BIN --> 24.064 bytes
Ahora, para el modo gráfico G4 me genera estos ficheros
- FOG94.ASM --> 440.098 bytes ----- 9.052 bytes menos
- FOG94.BIN --> 22.272 bytes ----- 1.792 bytes menos
- FOG94.PAT --> 3.081 bytes ----- 96 patrones x 32 bytes + 9 cabecera (múltiplo de 32 patrones)
- FOG94.OBJ --> 4.105 bytes ----- 32 objetos x 128 bytes + 9 cabecera (múltiplo de 16 objetos)

Al haber desaparecido de memoria RAM las tablas 'chgFx' y 'bCol' para los patrones/tiles y sus colores y la definición de Objetos, el binario
se reduce un poco. No es mucho pero siempre se agradece que quede mas espacio para juegos mayores ...
Una ventaja que le veo al hecho de generar los ficheros de patrones y objetos es que los podría usar en un programa editor parecido al
que me hice para el MC6847, dando la posibilidad al usuario de que los edite, aplicando a cada pixel el color que quiera de la paleta
disponible de 16 colores.

Voy a preparar unos programas para mostrar en pantalla los datos generados por la versión de anteayer (declaraciones fcb) y poder
comprobar que generan lo mismo que los datos de los dos ficheros generados. de paso ya tendré el programa que los cargue en memoria ...
saludos
pere

jltursan
Mensajes: 3429
Registrado: 20 Sep 2011 13:59
Agradecido : 336 veces
Agradecimiento recibido: 947 veces

Re: Comandos especiales en el V9958

Mensajepor jltursan » 19 Feb 2021 16:02

Yo ni me plantearía crear ningún editor para la nueva tarjeta. Para este tipo de gráficos (con 16 colores y paleta la cosa ya se aproxima mucho a lo que se maneja sin problemas en un PC) no me cabe duda alguna que se debe de emplear algún programa estandar como el GIMP o PSPro y como mucho, desarrollar un conversor.

En mi caso, es el compilador el que crea el archivo compatible MSX a partir de una imagen estandar. Más sencillo imposible :-)

Aprovechando que el Pisuerga pasa por Valladolid, ¿John Whitworth vende la placa?. Lo digo porque en su tienda veo cosillas interesantes (¡me gusta ese lowercase upgrade!); pero nada de la V9958...

Avatar de Usuario
pser1
Mensajes: 3154
Registrado: 08 Dic 2012 18:34
Agradecido : 784 veces
Agradecimiento recibido: 799 veces

Re: Comandos especiales en el V9958

Mensajepor pser1 » 19 Feb 2021 21:36

jltursan escribió:Yo ni me plantearía crear ningún editor para la nueva tarjeta. Para este tipo de gráficos (con 16 colores y paleta la cosa ya se aproxima mucho a lo que se maneja sin problemas en un PC) no me cabe duda alguna que se debe de emplear algún programa estandar como el GIMP o PSPro y como mucho, desarrollar un conversor.
En mi caso, es el compilador el que crea el archivo compatible MSX a partir de una imagen estandar. Más sencillo imposible :-)
Aprovechando que el Pisuerga pasa por Valladolid, ¿John Whitworth vende la placa?. Lo digo porque en su tienda veo cosillas interesantes (¡me gusta ese lowercase upgrade!); pero nada de la V9958...
Todavía està en fase de test, creo que ya tiene otra variante de diseño que va a ser otra más ... la tercera en concreto.
Los chips de sonido heredan algo de ruido del V9958 dependiendo mucho del color mayoritario en pantalla.
Se estaba planteando poner algún blindaje y/o algunas bobinas pequeñas para mejorar el filtrado en el raíl +5V

Por cierto, he descubierto que el fichero de objetos que genera el compilador es pura basura :-(
El de patrones es correcto y se muestra bien al cargarlo en RAM y llamar al pgm que lo sube a VRAM
La versión anterior, cuando grababa objetos como valores hexadecimales en los fcb lo hacía perfectamente.
El mero hecho de añadir un fichero mas parece que lo estropea ... Desconozco si este C tiene límite de ficheros abiertos y si existe
alguna forma de configurarlo para que acepte mas ...
saludos
pere

Avatar de Usuario
pser1
Mensajes: 3154
Registrado: 08 Dic 2012 18:34
Agradecido : 784 veces
Agradecimiento recibido: 799 veces

Re: Comandos especiales en el V9958

Mensajepor pser1 » 19 Feb 2021 22:09

@jltursan
el compilador que estoy utilizando, tenía declaradas 9 FILEs, así que al añadir Patrones lo acepta y funciona correctamente,
pero por el simple hecho de declarar uno más, crearlo y cerrarlo sin haber escrito nada en el ... ya destroza el fichero ASM
y por tanto caca la compilación (fichero truncado)

Código: Seleccionar todo

FILE *pObject;                           /* output file. */
FILE *pEngine;                           /* engine source file. */
FILE *pWorkMsg;                           /* message work file. */
FILE *pWorkBlk;                           /* block work file. */
FILE *pWorkSpr;                           /* sprite work file. */
FILE *pWorkScr;                           /* screen layout work file. */
FILE *pWorkNme;                           /* sprite position work file. */
FILE *pWorkObj;                           /* objects work file. */
FILE *pConfig;                           /* game.cfg flag settings file. */

FILE *pPattern;                           // patterns output file
FILE *pNewObject;                        // objects output file

Parece un tema de memoria o de numero de ficheros o mezcla de ambos ya que la versión última de ayer generaba ambos ficheros
aunque el de objetos estaba fatal
No acabo de entender porqué pasa ...
saludos
pere

Avatar de Usuario
pser1
Mensajes: 3154
Registrado: 08 Dic 2012 18:34
Agradecido : 784 veces
Agradecimiento recibido: 799 veces

Re: Comandos especiales en el V9958

Mensajepor pser1 » 19 Feb 2021 23:08

no he sido capaz de abrir el segundo fichero sin tener problemas de datos por lo que he decidido que tanto patrones como objetos
irán en el mismo fichero.
Patrones ocupa a piñón fijo 8192 bytes hasta el final de los primeros 32K
Y los objetos vienen a continuación, solamente los que tenga el juego.
De esta forma cada cosa irá a su sitio en VRAM y un único fichero bastará.
Hasta que, de alguna forma, se puedan abrir mas ficheros para el compilador GCC
Ahora a verificar como comparar en pantalla los datos en FCB y el fichero
Saludos
pere

jltursan
Mensajes: 3429
Registrado: 20 Sep 2011 13:59
Agradecido : 336 veces
Agradecimiento recibido: 947 veces

Re: Comandos especiales en el V9958

Mensajepor jltursan » 20 Feb 2021 10:02

¿Que entorno de desarrollo C empleas que impone esas condiciones tan paupérrimas? -shock

Ningún programa más o menos normalilo debería encontrar problemas por abrir una docena de ficheros...¿cuales son los flags que empleas para compilar, no será que activas un profiler?. La otra y más probable es que sea algún error; pero me extraña, no creo que hayas hecho tantos cambios como para provocar un "resource leak", que esté dejando sin cerrar continuamente archivos (por ejemplo, que estés abriendo dentro de un bucle).

Avatar de Usuario
pser1
Mensajes: 3154
Registrado: 08 Dic 2012 18:34
Agradecido : 784 veces
Agradecimiento recibido: 799 veces

Re: Comandos especiales en el V9958

Mensajepor pser1 » 20 Feb 2021 14:04

jltursan escribió:¿Que entorno de desarrollo C empleas que impone esas condiciones tan paupérrimas? -shock
Ningún programa más o menos normalilo debería encontrar problemas por abrir una docena de ficheros...¿cuales son los flags que empleas para compilar, no será que activas un profiler?. La otra y más probable es que sea algún error; pero me extraña, no creo que hayas hecho tantos cambios como para provocar un "resource leak", que esté dejando sin cerrar continuamente archivos (por ejemplo, que estés abriendo dentro de un bucle).

La verdad es que no he cambiado *nada* ...
De momento funciona perfectamente con un solo fichero, pero conseguiré mas ficheros.
Tengo dos posibilidades, como el programa se ejecuta secuencialmente, puedo utilizar un fichero de salida para crear Patrones, cerrarlo
y abrirlo de nuevo para Objetos y para otras cosas que quiera extraer a fichero ... Tenía demasiada prisa ayer y no pensé en este truco.
Además debería mirarme el programa que hice para el MC6847 que extraía del fichero AGD todos y cada uno de los tipos editables, incluido
un fichero con la definición de la ventana y las pantallas de juego. Ya me lo miraré esta tarde ...
saludos
pere

Avatar de Usuario
pser1
Mensajes: 3154
Registrado: 08 Dic 2012 18:34
Agradecido : 784 veces
Agradecimiento recibido: 799 veces

Re: Comandos especiales en el V9958

Mensajepor pser1 » 20 Feb 2021 17:48

Ya he echado una ojeada al programa que genera los ficheros de los elementos del juego ...
Es una copia del compilador solo que desviando los ficheros temporales a ficheros en disco 'reales' pero sigue empleando solamente ocho!
Me he decidido por la idea de crear y abrir un fichero para Patrones y una vez rellenado, lo cierro.
Luego al llegar a Objetos creo otro fichero asociándole el mismo puntero y descriptor pero con nombre nuevos y funciona sin problemas
Ahora ya tengo los ficheros separados y he preparado un programa que los suba a la VRAM y un programa Basic que va cargando ficheros
a $3000 y luego pasando parámetros al cargador que los lleva a pantalla o a VRAM. Actualmente a pantalla para ver los resultados
En la parte superior de la foto adjunta se ven los elementos creados con las definiciones FCB, en la parte inferior son los elementos
cargados como ficheros y pasados a VRAM. La parte superior se la ha cargado la destreza del fotógrafo ;-)
El siguiente paso va a ser ya empezar a modificar el motor AGD de G3 a modo G4
@jltursan
por cierto, José Luis, ¿Has elegido alguna zona especial de VRAM para los sprites o los has puesto directamente a partir de $8000?
saludos
pere
Patrones-Objetos.jpg
Patrones-Objetos.jpg (118.81 KiB) Visto 164 veces

jltursan
Mensajes: 3429
Registrado: 20 Sep 2011 13:59
Agradecido : 336 veces
Agradecimiento recibido: 947 veces

Re: Comandos especiales en el V9958

Mensajepor jltursan » 20 Feb 2021 18:35

La más alta, $F800 :-)
Así tengo todo despejado hasta casi el final de la VRAM.

Tu puedes estirarte muchisimo más, si empleas los 128KB, puedes escoger ;-)

Avatar de Usuario
pser1
Mensajes: 3154
Registrado: 08 Dic 2012 18:34
Agradecido : 784 veces
Agradecimiento recibido: 799 veces

Re: Comandos especiales en el V9958

Mensajepor pser1 » 20 Feb 2021 18:51

jltursan escribió:La más alta, $F800 :-)
Así tengo todo despejado hasta casi el final de la VRAM.
Tu puedes estirarte muchisimo más, si empleas los 128KB, puedes escoger ;-)

Muy bien, muchas gracias. Me parece perfecto mantenerme dentro de las 64k bajas, nunca se sabe si se puede hacer alguna cosa en las
64K de mas arriba ... guardar música, tal vez ya que la máquina solo dispone de 32K en modo normal que es el que trato de mantener
para permitir que los programas los puedan utilizar los usuarios de Dragon 32 también.
Empezaré la conversión de G3 a G4 la próxima semana ...
saludos
pere

Avatar de Usuario
pser1
Mensajes: 3154
Registrado: 08 Dic 2012 18:34
Agradecido : 784 veces
Agradecimiento recibido: 799 veces

Re: Comandos especiales en el V9958

Mensajepor pser1 » 21 Feb 2021 19:12

jltursan escribió:La más alta, $F800 :-)
Así tengo todo despejado hasta casi el final de la VRAM.

Estas son las direcciones que he elegido. No puedo empezar en $F800 si quiero mantenerme dentro de los 64 Kb bajos ...
Los bytes que definen a los sprites ocupan $f000 - $f7ff (2048 bytes -> 256 patrones x 8 bytes cada uno)
Los datos de color ocupan $f800 - $f9ff (512 bytes -> 16 bytes x 32 sprites)
Los datos de atributos ocupan $fa00 - $fa7f (128 bytes -> 4 bytes x 32 sprites)

saludos
pere

jltursan
Mensajes: 3429
Registrado: 20 Sep 2011 13:59
Agradecido : 336 veces
Agradecimiento recibido: 947 veces

Re: Comandos especiales en el V9958

Mensajepor jltursan » 21 Feb 2021 20:06

Claro que si que puedes, ¡así los tengo yo! ;-). Estas son las direcciones que te recomiendo, que son las más altas dentro de los primeros 64KB:

SPRCLR = $F400 (-$F5FF)
SPRATR = $F600 (-$F67F)
SPRPTN =$F800 (-$FFFF)

Avatar de Usuario
pser1
Mensajes: 3154
Registrado: 08 Dic 2012 18:34
Agradecido : 784 veces
Agradecimiento recibido: 799 veces

Re: Comandos especiales en el V9958

Mensajepor pser1 » 21 Feb 2021 20:12

jltursan escribió:Claro que si que puedes, ¡así los tengo yo! ;-). Estas son las direcciones que te recomiendo, que son las más altas dentro de los primeros 64KB:
SPRCLR = $F400 (-$F5FF)
SPRATR = $F600 (-$F67F)
SPRPTN =$F800 (-$FFFF)

Tienes razón, pasando delante colores y atributos ... mejor que siguiendo el orden indicado en la hoja de datos del V9938
muchas gracias
hasta luego
pere

Avatar de Usuario
pser1
Mensajes: 3154
Registrado: 08 Dic 2012 18:34
Agradecido : 784 veces
Agradecimiento recibido: 799 veces

Re: Comandos especiales en el V9958

Mensajepor pser1 » 21 Feb 2021 20:25

jltursan escribió:Claro que si que puedes, ¡así los tengo yo! ;-). Estas son las direcciones que te recomiendo, que son las más altas dentro de los primeros 64KB:
SPRCLR = $F400 (-$F5FF)
SPRATR = $F600 (-$F67F)
SPRPTN =$F800 (-$FFFF)

Tengo una duda con la dirección $F600 = %1111 0110 0000 0000
Tiene a UNO los bits 9-10-12-13-14-15
Pero en el registro R#5 solo se pueden indicar los bits del 10 para arriba, así que el bit 9 o queda indefinido o adquiere el valor
del 1 que está a la derecha del bit 10, no estoy seguro aunque prefiero pensar ésto último ;-)
Así es como lo tengo ahora

Código: Seleccionar todo

fcb   $ef,$85   ;A14 A13 A12 A11 A10   1   1   1 -> set A10-12-13-14-15 Sprite Attrib Table     - %1111 0110 0000 0000
fcb   $01,$8b   ;  0   0   0   0   0   0 A16 A15 ->   here $0f600
fcb   $1f,$86   ;  0   0 A16 A15 A14 A13 A12 A11 -> set A11-A12-13-14-15 Sprite PattGen  $0f800   - %1111 1000 0000 0000

saludos
pere

Avatar de Usuario
pser1
Mensajes: 3154
Registrado: 08 Dic 2012 18:34
Agradecido : 784 veces
Agradecimiento recibido: 799 veces

Re: Comandos especiales en el V9958

Mensajepor pser1 » 21 Feb 2021 21:21

la pregunta del millón es, ¿Cómo se diferenciaría estas dos direcciones? $f400 de $f600?
- - - - - - - - - - - - - - - - - - - - -
bit num -- 1111 1100 0000 0000
------------ 5432 1098 7654 3210
- - - - - - - - - - - - - - - - - - - - -
- $f400 - %1111 0100 0000 0000
- $f600 - %1111 0110 0000 0000
- - - - - - - - - - - - - - - - - - - - -
En el registro R#5
contenido = A14 A13 A12 A11 A10 1 1 1, pondríamos el valor $E4 para valor $f400 mas los unos fijos = $EF
contenido = A14 A13 A12 A11 A10 1 1 1, pondríamos el valor $E6 para valor $f600 mas los unos fijos = $EF
¿Como sabe el sistema cual es la dirección de inicio que hemos configurado?
saludos
pere


Volver a “Software MSX”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado