motor AGD para V9958 modo gráfico G4 para HD6309

Avatar de Usuario
pser1
Mensajes: 3286
Registrado: 08 Dic 2012 18:34
Agradecido : 843 veces
Agradecimiento recibido: 813 veces

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor pser1 » 05 Mar 2021 12:45

Último mensaje de la página anterior:

Buenos días,
he decidido mantener en el motor la pequeña parte de código que añadí para pasar de una pantalla a otra sin jugar.
Ahora se compilará si DEBUG vale 1.
Se sale de la demo pulsando Break y pulsando Enter, el programa se posiciona en la primera pantalla del juego y ya se puede jugar

Bugs encontrados a partir de este momento:
- La rutina que hace parpadear las puertas no ha sido actualizada por despiste -507
- Al tocar Foggy un Objeto, el programa se 'cuelga', o sea a revisar RemoveObj y/o GetObj -banghead
Como los sprites siguen igual que en modo G3, se mueven perfectamente en todas las pantallas ... un trabajo menos -thumbup
Hasta la próxima ;-)
saludos
pere

Avatar de Usuario
pser1
Mensajes: 3286
Registrado: 08 Dic 2012 18:34
Agradecido : 843 veces
Agradecimiento recibido: 813 veces

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor pser1 » 05 Mar 2021 16:25

arreglado el tema de patrones parpadeantes, vaya berenjenal -507
Antes me guardaba el patrón y el tercio de pantalla ... Ahora calculo la dirección VRAM del ángulo superior izquierda cuando
lleno la tabla de elementos que deben parpadear. Admito máximo 8
Por ahora lo que estoy haciendo es leer los datos del pseudo-patrón desde la VRAM a un buffer en RAM por líneas
Cada vez leo cuatro bytes, los complemento a unos y los guardo en el buffer, luego los envio a la VRAM y así por cada línea
Pensaba que sería mas lento, pero no lo es, va bien y llamo a la rutina de parpadeo una de cada cuatro interrupciones ...
Pero haciendo pruebas he visto mas problemas de los objetos. Se me ha ocurrido pulsar 'I' (inventario) y ha desaparecido la llave azul -banghead
Parece que toca hacer una revisión a fondo de los objetos
Hasta pronto
pere

Avatar de Usuario
pser1
Mensajes: 3286
Registrado: 08 Dic 2012 18:34
Agradecido : 843 veces
Agradecimiento recibido: 813 veces

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor pser1 » 05 Mar 2021 18:21

He corregido el problema de los objetos que no se podían coger y 'colgaban' el programa -thumbup
Ahora ya solamente queda por revisar DropObj que es la culpable de que al dejar un objeto, este no se pinte.
Además el menú de inventario tiene una parte que invierte los colores de las letras de la línea 'cursor' y esta parte necesita
conversión para G4. Y al salir de inventario, al redibujar la pantalla no se añaden los objetos si había alguno -banghead
Parece que aún me queda trabajo por hacer -507
saludos
pere

Avatar de Usuario
pser1
Mensajes: 3286
Registrado: 08 Dic 2012 18:34
Agradecido : 843 veces
Agradecimiento recibido: 813 veces

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor pser1 » 06 Mar 2021 16:00

y sigo con la novela ...
A pesar de que "DropObj" está corregido y se muestran los objetos dejados (en el script) con el comando PUT, en la pantalla donde se
deja la "Pit plant", que se muestra bien, tras un retardo debería aparecer la "Semilla", pues bien esto no sucede *nunca*
Tras muchos intentos fallidos, me decidí por añadir código en varios puntos para grabar variables a partir de $7000 (no usado)
además añadí un bucle de espera que lee el teclado y espera una letra no usada para mover. Pusando Reset sale del programa y puedo
echar una ojeada al contenido de memoria de $7000 adelante.
Así descubrí que la coordenada Y del sprite, que se utiliza para ubicar la Semilla, llega con valor 200 (fuera de pantalla)
Fui mirando valores mas arriba en el Evnt02 que es el que gestiona algunos sprites de inventario, pero seguía llegando mal.
Al final resultó que llega mal tras la llamada a "MInve" que dibuja el menú de inventario ... Faltaría mas, tenía que ser algo que se
ha añadido hace poco para G4. Al enviar los 'patrones' de VRAM a pantalla, utilizo el registro Y que resulta ser el puntero a la
estructura del sprite en proceso dentro del script AGD. Hurgando a lo largo de las llamadas que hace "MInve" descubrí que utiliza PChr0
para dibujar caracteres, así que preservando regY al entrar y restaurando al salir se ha solucionado un problema complicado (para mí)
Ahora me quedan dos rutinas/funciones importantes para avanzar en el curso del juego:
- pbPAttr que es la rutina que dibuja patrones a petición del script AGD, que no ha sido convertida
- DBar que invierte los colores de una opción de inventario para indicar donde esta el cursor, tampoco ha sido convertida
Hasta la próxima!
pere

Avatar de Usuario
pser1
Mensajes: 3286
Registrado: 08 Dic 2012 18:34
Agradecido : 843 veces
Agradecimiento recibido: 813 veces

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor pser1 » 06 Mar 2021 23:51

Hola,
el proceso de añadir bloques ya está resuelto. Ha sido molesta la parte de controlar los bloques intermitentes (parpadeantes) cuando
son sobrescritos. Muchas diferencias respecto a la versión G3
De paso he actualizado las dos rutinas RBloc y WBloc que gestionan el modo aventura 'recordando' los cambios hechos en cada pantalla
Todavía me queda la parte del menú de inventario para invertir colores a la opción donde estaría el cursor ...
saludos
pere

Avatar de Usuario
pser1
Mensajes: 3286
Registrado: 08 Dic 2012 18:34
Agradecido : 843 veces
Agradecimiento recibido: 813 veces

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor pser1 » 07 Mar 2021 12:06

por fin todo funciona en modo G4 como antes en mode G3 -thumbup
Finalmente la rutina 'DBar' que cambia el color de la línea de inventario/menú como cursor va bien!
Me reservo la posibilidad de cambiar la única línea que invierte colores mediante un simple "com a" por otra que realmente intercambie
los colores de primer término y fondo
En cuanto me sea posible haré el video ...
saludos
pere

Avatar de Usuario
pser1
Mensajes: 3286
Registrado: 08 Dic 2012 18:34
Agradecido : 843 veces
Agradecimiento recibido: 813 veces

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor pser1 » 07 Mar 2021 19:17

@jltursan
He estado haciendo varios intentos, pero no consigo de ninguna forma invertir "TINTA" <--> "PAPEL"
El problema es que los bytes en VRAM, que contienen el color de dos pixels, pueden tener cualquiera de las combinaciones
de colores posibles (4 basados en PAPEL y TINTA). Como no hay manera de saber cual es el contenido de los 'nibbles', he desistido
en mi empeño -banghead
Mirando en MSX2, he visto que utilizas "VDPCMD_LMMM_NOT", que debe hacer lo mismo yo hago "a mano alzada", posiciono puntero
para leer, lleno un buffer con cada byte ya invertido y luego reposiciono para escritura y envio el buffer entero (una línea de pixels)
saludos
pere

jltursan
Mensajes: 3597
Registrado: 20 Sep 2011 13:59
Ubicación: Madrid
Agradecido : 376 veces
Agradecimiento recibido: 1045 veces
Contactar:

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor jltursan » 07 Mar 2021 21:43

Sí, los comandos con operaciones lógicas (iguales a los normales pero empiezan con "L") son útiles para muchas cosas. Los empleo en los objetos y en este caso particular, para invertir un área de pantalla, me dan igual los colores que contenga :-)

Avatar de Usuario
pser1
Mensajes: 3286
Registrado: 08 Dic 2012 18:34
Agradecido : 843 veces
Agradecimiento recibido: 813 veces

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor pser1 » 08 Mar 2021 10:22

jltursan escribió:Sí, los comandos con operaciones lógicas (iguales a los normales pero empiezan con "L") son útiles para muchas cosas. Los empleo en los objetos y en este caso particular, para invertir un área de pantalla, me dan igual los colores que contenga :-)

Al final no me ha quedado mas remedio que aceptar el color complementario a 15 del que haya en pantalla antes de hacer la inversión
de colores, qué le vamos a hacer -507
Por cierto, como probar es gratis, me decidí a sustituir el código en la rutina DBar (para invertir la línea completa) por un LMMM aplicando la
operación lógica NOT. No lo había intentado antes porqué me pareció que debía ir enviando carácter a carácter de nuevo y me pareció muy
costoso en tiempo. Probé a enviar toda la línea como Origen y Destino al mismo sitio con el NOT y va y funciona -thumbup
No tenía ni idea de que se pudiera hacer de esta forma. Ocupa mas código pero es mas rápido y encima me ahorro el buffer por línea que
era de 128 bytes!! Ya que el máximo sería de 32 caracteres x 4 bytes = 128. El resultado ha sido una reducción del binario final -thumbup
Echaré una ojeada por si lo puedo reutilizar para los bloques parpadeantes aunque no es importante.
saludos
pere

jltursan
Mensajes: 3597
Registrado: 20 Sep 2011 13:59
Ubicación: Madrid
Agradecido : 376 veces
Agradecimiento recibido: 1045 veces
Contactar:

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor jltursan » 08 Mar 2021 12:47

Exacto, lo de ahorrarse bufferes ha sido estupendo. En mi caso, gracias a que el HMMM opera sobre pantalla, el TICKER ya no necesita un buffer con una línea al completo sobre el cual realizar el scroll :-)
Las operaciones lógicas incrementan algo el tiempo de cada comando; pero seguro que, como dices, sigue siendo rápido y probablemente más que haciéndolo de otra manera.

Avatar de Usuario
pser1
Mensajes: 3286
Registrado: 08 Dic 2012 18:34
Agradecido : 843 veces
Agradecimiento recibido: 813 veces

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor pser1 » 08 Mar 2021 14:42

jltursan escribió:Exacto, lo de ahorrarse bufferes ha sido estupendo. En mi caso, gracias a que el HMMM opera sobre pantalla, el TICKER ya no necesita un buffer con una línea al completo sobre el cual realizar el scroll :-)
Las operaciones lógicas incrementan algo el tiempo de cada comando; pero seguro que, como dices, sigue siendo rápido y probablemente más que haciéndolo de otra manera.
Lo he aplicado a la rutina que gestiona los bloques que deben parpadear a pesar de que su buffer era de
solamente 4 bytes. Pero reusar la rutina del "DBar" ha ahorrado bastante código.
Revisaré los DoHMMM que tengo por ahí ya que patrones y objetos usan dos versiones por la distinta altura/anchura a mover y por el hecho
de que los objetos necesitan el byte alto de dirección a 1 en lugar de a 0. Con pocos cambios podría unificarlas en una sola. Le echaré una
ojeada ahora que el resto funciona correctamente
saludos
pere

Avatar de Usuario
pser1
Mensajes: 3286
Registrado: 08 Dic 2012 18:34
Agradecido : 843 veces
Agradecimiento recibido: 813 veces

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor pser1 » 08 Mar 2021 19:21

vaya palo -banghead
He ido unificando de una en una las distintas 'variantes' de comandos que había ido incorporando al motor.
Tenía como siete variantes que solamente se diferenciaban en algunos parámetros y al final me he quedado
con dos solamente, un DoHMMM y un DoHMMC que es lo correcto para mi.
El DoHMMM tiene tres puntos de entrada, uno para Patrones/Bloques, otro para Objetos y uno mas para los textos en movimiento.
El DoHMMC solo tiene dos, uno para caracteres y otro para los textos en movimiento
La verdad es que no se nota ni un ápice en la velocidad del juego y el binario ocupa menos espacio ahora -thumbup
saludos
pere
Pd A ver si me animo y hago un video aunque no se verán cambios importantes ya que todo se ve 'casi' como en la versión
anterior del motor para el modo gráfico G3

jltursan
Mensajes: 3597
Registrado: 20 Sep 2011 13:59
Ubicación: Madrid
Agradecido : 376 veces
Agradecimiento recibido: 1045 veces
Contactar:

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor jltursan » 08 Mar 2021 21:22

todo se ve 'casi' como en la versión anterior del motor para el modo gráfico G3


Eso es bueno, a fin de cuentas se trataba justo de eso :-)

Avatar de Usuario
pser1
Mensajes: 3286
Registrado: 08 Dic 2012 18:34
Agradecido : 843 veces
Agradecimiento recibido: 813 veces

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor pser1 » 08 Mar 2021 21:54

jltursan escribió:Eso es bueno, a fin de cuentas se trataba justo de eso :-)

Efectivamente, ahora puedo jugar con Foggy's Quest de cabo a rabo sin problemas -thumbup
Mientras he estado adaptando el motor al modo G4 he trabajado con el compilador ASM6809 totalmente fuera del entorno AGD
usando el fuente ASM que me generó la cadena estándar a partir del fichero FOGGY.AGD
Ahora tengo que 'extraer' el motor 'a secas' y ponerlo en el entorno AGD como "engine.inc" para comprobar que la compilación me da
el mismo binario.
En cuanto esté listo me buscaré algunos programas AGD de test para ir verificando algunas funciones que no he podido probar con
el juego Foggy's Quest.
muchas gracias por toda la ayuda e ideas que me has dado a lo largo de esta 'reconversión' -drinks
saludos
pere

jltursan
Mensajes: 3597
Registrado: 20 Sep 2011 13:59
Ubicación: Madrid
Agradecido : 376 veces
Agradecimiento recibido: 1045 veces
Contactar:

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor jltursan » 09 Mar 2021 09:17

Tendrás que reescribir las rutinas de pintado de pixels para el motor de partículas (las mías emplean CPU, me encantaría hacer una comparativa entre "plotear" con la CPU y con el VDP). Otra cosa que no se si habrás implementado es el SPRITEINK, en G4 la cosa tiene muchísima más miga que en en G3.

Avatar de Usuario
pser1
Mensajes: 3286
Registrado: 08 Dic 2012 18:34
Agradecido : 843 veces
Agradecimiento recibido: 813 veces

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor pser1 » 09 Mar 2021 10:00

jltursan escribió:Tendrás que reescribir las rutinas de pintado de pixels para el motor de partículas (las mías emplean CPU, me encantaría hacer una comparativa entre "plotear" con la CPU y con el VDP). Otra cosa que no se si habrás implementado es el SPRITEINK, en G4 la cosa tiene muchísima más miga que en en G3.
Si, de hecho este fue el motivo por el que me decidí a cambiar al modo G4 ya que en modo 'tile' me pareció demasiado elaborado por no
decir complicado el método de 'encender' y 'apagar' pixeles individuales.
El SPRITEINK está en marcha desde la versión G3, lo único que hace es aceptar un valor de colores (TINTA, PAPEL) y aplicarlo a los 16 bytes
de la tabla de color del sprite afectado.
Cuando cargo dinámicamente los sprites, guardo una tabla en RAM que contiene:

Código: Seleccionar todo

; ix+0  = type
; ix+1  = VRAM Atribute Pointer high byte       - was   sprite image number
; ix+2  = VRAM Atribute Pointer low byte       - was   frame
; ix+3  = VRAM Colour Data Pointer high byte   - was   Y coord
; ix+4  = VRAM Colour Data Pointer high byte   - was   X coord

Y además el resto de variables anteriores. Lo único que cambié fueron los valores que ya no se utilizan en MSX2+ por las direcciones
de memoria tanto a la tabla de atributos para gestionar el estado (fuera de pantalla) como la tabla de color, que me permite en un milisegundo
copiar el 'nuevo' color en dicha tabla
Respecto al 'shrapnel', primero trataré de hacer lo mismo que hacer tu via CPU, cuando funcione intentaré mi idea, quizás utópica de
emplear comandos POINT y PSET que , por cierto, ya tengo experimentados en programas de prueba y funcionan bien!
Como programa de pruebas utilizaré el 'Diamond Geezer' que tiene 'explosion' y 'trail'
Si te parece que puede servir de algo, aunque sea una lectura super pesada, te puedo enviar el fichero fuente actual 'FOG94.ASM'
que contiene el motor al principio y el juego/datos a continuación ... ya me dirás algo
saludos
pere

jltursan
Mensajes: 3597
Registrado: 20 Sep 2011 13:59
Ubicación: Madrid
Agradecido : 376 veces
Agradecimiento recibido: 1045 veces
Contactar:

Re: motor AGD para V9958 modo gráfico G4 para HD6309

Mensajepor jltursan » 09 Mar 2021 14:33

Ah, claro, tu has podido reciclar el SPRITEINK, tienes razón. En mi caso ha sido un poco más complicado; pero bueno, está operativo igualmente.
Del PSET del VDP espero bastante, o mucho me equivoco o debería ser bastante más rápido que el de la CPU.


Volver a “Software MSX”

¿Quién está conectado?

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