Dragon con V9958, YM2149 e YM2413 = Dragon-MSX2+

Avatar de Usuario
minter
Mensajes: 3006
Registrado: 22 Jul 2014 18:51
Agradecido : 3353 veces
Agradecimiento recibido: 1404 veces

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor minter » 22 May 2020 23:45

Último mensaje de la página anterior:

Que scroll mas suave!!! Queda muy bonito!!! :)

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

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor pser1 » 25 May 2020 19:59

Hola,
me ha traído unos cuantos quebraderos de cabeza el bendito compilador de ficheros AGD.
Ahora ya me genera un fichero en ensamblador idéntico al que yo he estado modificando para ir probando la conversión
de funciones en el motor AGD para el V9958 de forma que utilizando los procedimientos empleados para el MC6847
ya me genera discos virtuales para CoCo y Dragón
Reordenar los datos de sprites y objetos ha sido mas simple de lo esperado, pero el tema de colores me ha liado bastante -banghead
Tanto SpriteInk como SetBorder y Colour funcionan bien ahora.
He añadido una función para imprimir números en formato hexadecimal pues me ayuda a comparar con mis ficheros.
Supongo que este es un buen momento para compilar y probar unos cuantos programas de pruebas de funciones concretas
Potencialmente, ahora se podrían convertir todos aquellos juegos que *NO* están basados en disparos, explosiones, láser, etc.
Pero voy a seguir convirtiendo funciones del motor todavía no utilizadas ...
saludos
pere

jltursan
Mensajes: 3037
Registrado: 20 Sep 2011 13:59
Agradecido : 255 veces
Agradecimiento recibido: 756 veces

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor jltursan » 25 May 2020 22:45

Veo que la cosa progresa a buen ritmo -drinks

Mira tú po donde que el "Meteormania" me ha venido simplemente de lujo. Un error que aparecía muy de tanto en tanto y sobre todo en máquinas a 60Hz (japos especialmente) se reproducía con la frecuencia suficiente como para que gracias al fantástico OpenMSX haya podido depurarlo y corregirlo. Afectaba a la rutina de flicker y ya me habían apuntado a ella; pero sin poder reproducirlo era casi imposible dar con el fallo.

A ver si aprovecho y actualizo la Suite MSX con alguna cosa más ya de paso...¿los crumbling blocks?...:-)

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

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor pser1 » 26 May 2020 08:49

@jltursan
me alegra saberlo, enhorabuena!!
Yo de momento debo decir que al compilar "Diamond Geezer" tras haberle 'comentado' las funciones que aún no están implementadas,
tuve un montón de problemas ...
Tendré que buscar el AGD original, para evitar las personalizaciones que yo le hice
De entrada ha resultado que mi rutina DRoom se empeñaba en empezar la pantalla en la fila de arriba. Sin problemas para Foggy, pero
en DiamondGeezer ha de ser en la siguiente. Al no hacerlo, todos los sprites se veían desplazados 8 píxels hacia abajo. Arreglado
Los movimientos son correctos, no he visto problemas y he pasado por las cuatro pantallas.
Me queda un problema, complicado, por resolver y es que a pesar de mostrar los textos bien, en cuanto se dibuja la pantalla de juego,
aparecen signos imprevistos por la zona exterior de pantalla y muchas veces afectando caracteres de texto escrito anteriormente, como
por ejemplo "SCORE", "LIVES" e incluso el título "DIAMOND GEEZER"
A ver si hoy puedo echarle un repaso al motor ya que parece que está demasiado enfocado al Foggy -507
La principal diferencia que veo o puedo intuir es que Diamond solamente utiliza *cuatro* bloques para definir las pantallas!
Así que cualquier texto que se imprima hará que los contadores de tercios de pantalla lleguen mucho mas lejos y no tengo
claro en que puntos se 'rebobinan' a solamente los bloques de pantalla ...
Me temo que acabaré debugando, para variar, en XRoar
Por cierto, en tu mensaje anterior comentas algo sobre rutina de 'flicker'. ¿A qué rutina te refieres?
saludos
pere

Pd Buena idea lo de los 'crumbling blocks', creo que el juego Bean Brothers los utiliza. Suerte!

dancresp
Mensajes: 5641
Registrado: 13 Nov 2010 02:08
Agradecido : 323 veces
Agradecimiento recibido: 452 veces

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor dancresp » 26 May 2020 12:05

Realmente me estás picando con el AGD, porque visto lo visto, salen unos juegos "muy profesionales".

Si es tan sencillo de usar como dices, probablemente sea capaz de hacer algo con él.

Aquí dejo un vídeo interesante: https://www.youtube.com/watch?v=xw7v9KqnEiM
Buscando la IP de la W.O.P.R. he encontrado mi índice

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

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor pser1 » 26 May 2020 13:23

dancresp escribió:Realmente me estás picando con el AGD, porque visto lo visto, salen unos juegos "muy profesionales".
Si es tan sencillo de usar como dices, probablemente sea capaz de hacer algo con él.
La verdad es que partiendo del fichero ariginal AGD para Spectrum, el compilador genera un fichero en ensamblador para 6309 y video V9958 que posiblemente solo requiera retoques/personalizaciones igual que nos pasó con los que convertí para el MC6847. Y acabé haciendo 219 -thumbup
De momento es temprano para liberarlo para usuarios ya que quedan algunas rutinas pendientes de conversión y van a ser 'dolorosas'
saludos
pere

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

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor pser1 » 26 May 2020 13:26

@jltursan
después de tropecientos intentos de debug, sorprendentemente se ha arreglado todo sin mas ni mas.
Bueno, digamos que he parado Dragón y he empezado de cero, tras re-asentar en el mini-MPI la tarjeta con el V9958 ...
Lo tendré bajo observación (pruebas) durante un par de días, pero parece funcionar perfectamente.
Mientras trataré de implementar la función Random ya que la Trail es del grupo del Shrapnel y lo haré mas adelante ...
saludos
pere

jltursan
Mensajes: 3037
Registrado: 20 Sep 2011 13:59
Agradecido : 255 veces
Agradecimiento recibido: 756 veces

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor jltursan » 26 May 2020 17:30

Si te refieres a los caracteres extraños que te estaban apareciendo de repente, ojo, ten siempre presente que en algún momento puedas estar haciendo algún acceso un pelín rápido...
La rutina de flicker que mencionaba es cosa exclusiva de la versión para MSX1; el TMS9918 sólo puede mostrar 4 sprites en línea y hay que multiplexarlos cuando acumulan más de cuatro. En el V9958 como puedes con 8 en línea, no parece que vayas a necesitar algo parecido (y menos mal, porque es un par de grados más complicada)

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

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor pser1 » 26 May 2020 22:57

jltursan escribió:Si te refieres a los caracteres extraños que te estaban apareciendo de repente, ojo, ten siempre presente que en algún momento puedas estar haciendo algún acceso un pelín rápido...
Ha sido mas simple ... Resulta que al arrancar yo no *limpio* la memoria VRAM, así que, si por cualquier motivo se produce un error y se llena de basura parte de la pantalla, si arranco el programa de nuevo sin apagar y re-arrancar Dragón y V9958, los patrones no usados por el programa pero 'sucios' de la vez anterior, siguen ahí dando la impresión de que algo va muy mal :-(
Quizás valdria la pena añadir una rutina que le escriba ceros desde $0000 hasta $3fff (los 16k que se utilizan)
¿Haces algo parecido tu en tu versión para MSX?
La rutina de flicker que mencionaba es cosa exclusiva de la versión para MSX1; el TMS9918 sólo puede mostrar 4 sprites en línea y hay que multiplexarlos cuando acumulan más de cuatro. En el V9958 como puedes con 8 en línea, no parece que vayas a necesitar algo parecido (y menos mal, porque es un par de grados más complicada)
Entendido, creo que ya me habías comentado algo sobre este tema.
muchas gracias
pere

Pd El Diamond Geezer ya me funciona normal con todas las funciones salvo las de shrapnel (Trail y Explode), además he cambiado los SOUND n
por BEEP xx para que haga algo de ruido.

jltursan
Mensajes: 3037
Registrado: 20 Sep 2011 13:59
Agradecido : 255 veces
Agradecimiento recibido: 756 veces

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor jltursan » 27 May 2020 15:16

¿Haces algo parecido tu en tu versión para MSX?


Sí y no :-). Directamente no; pero como la inicialización de la pantalla la hago a través de la BIOS, lo hace ella. En tu caso, como tu haces y deshaces la tabla de nombres a tu antojo, no tendrías problema con meter a ceros también esa área.

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

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor pser1 » 27 May 2020 21:52

jltursan escribió:Sí y no :-). Directamente no; pero como la inicialización de la pantalla la hago a través de la BIOS, lo hace ella. En tu caso, como tu haces y deshaces la tabla de nombres a tu antojo, no tendrías problema con meter a ceros también esa área.
He usado un programa de pruebas para verificar las rutinas que acababa de convertir, las que manejan Scores y Bonus y me he tropezado con problemas de nuevo.
Está claro que no tiene nada que ver con la inicialización ya que mi versión actual del motor ya lo hace cuando recibe un comando CLS
Lo que estoy viendo es que programas como TESTSCORE que imprimen cantidad de veces en pantalla lo mismo con distinto número de dígitos,
acaban por desbordar el contador del primer tercio y el programa se dirige a un punto que, de momento, muestra un cero en rojo en la parte
inferior derecha y emite un pitido -banghead
Esto significa que, aunque funcionen Foggy y DiamondGeezer, los programas que se basan en texto en lugar de sprites no están haciendo lo
esperado, es decir emplear el patrón al que sobreescriben redefiniéndolo. Por desgracia crean uno nuevo -banghead
Yo tengo 'previsto' que si se muestran dígitos, siempre se intente reutilizar el patrón que se sobreescribe *salvo* si éste es el de fondo de pantalla
ya que equivaldría a llenar todos los espacios en blanco de este tercio de pantalla con la nueva cifra ... y ésto es lo que me estaba sucediendo.
Ahora ésto parece controlado, pero me sigue generando continuamente nuevos patrones hasta acabar con los 256 posibles ...
Mal rollo ya que no puedo debugar de ninguna manera con XRoar, ya lo he intentado, pero cuando el programa pide el contenido de la
celda en VRAM de la tabla Pattern Layout, siempre me devuelve $A7 ya que no existe el módulo ...
Me veo incluyendo rutinas en el motor para poder mostrar variables o mensajes en la pantalla std del Dragón, qué palo -banghead
saludos
pere

jltursan
Mensajes: 3037
Registrado: 20 Sep 2011 13:59
Agradecido : 255 veces
Agradecimiento recibido: 756 veces

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor jltursan » 27 May 2020 23:18

A lo mejor digo una tontería; pero para facilitar el debug, ¿no podrías implementar un modo en el que el pattern layout residiese en RAM y al acabar su actualización se volcara a la VRAM?. Eso es más lento; pero total, como sería empleado sólo para depurar...

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

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor pser1 » 28 May 2020 10:14

jltursan escribió:A lo mejor digo una tontería; pero para facilitar el debug, ¿no podrías implementar un modo en el que el pattern layout residiese en RAM y al acabar su actualización se volcara a la VRAM?. Eso es más lento; pero total, como sería empleado sólo para depurar...

La verdad es que ya tengo una copia en RAM, pero es la que utilizo para 'reponer' la pantalla de juego cuando se muestra el inventario
o cualquier mensaje que pueda destruir parte de la pantalla de juego, ya que estas funciones 'solo' actualizan la VRAM y en cuanto
acaban llaman a la rutina que copia de la RAM a la VRAM, justo al revés. Pero también tengo una función para grabar la VRAM a la RAM.
He acabado por implementar en el motor una rutina que muestra en la pantalla std del Dragón las variables que uno quiera ver (en hexadecimal)
De momento viendo el valor del patrón para fondo de pantalla y los tres contadores me ha permitido 'descubrir' como funciona *mi motor* -507
Así que con muy pocos cambios en el TESTSCORE ya hace lo que debe ... excepto la parte del HighScore que aún no he 'tocado', pero hacía cosas
raras. Tendré que ver que he puesto en el motor para esta función ...
saludos
pere

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

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor pser1 » 28 May 2020 11:45

Hola de nuevo,
leves retoques y el TESTSCORE funciona entero!
Lo mas importante es que los textos *SIEMPRE* reservan patrones nuevos y además solo se reflejan en la VRAM
para poder reponer la situación anterior en cuanto el jugador haya leído el mensaje ...
Pero, como esto es una peculiaridad de mi motor para V9958, si preparas un pequeño AGD que solo tenga código en MAINLOOP
haciendo
LINE 10
COLUMN3
PRINT"ESTO SON CUATRO PALABRAS"
WAITKEY

Al ejecutarlo, cada vez que pulsemos una tecla se vuelve a ejecutar una y otra vez, pero a cada pasada reserva 24 patrones
así que en 10 pasadas habrá reservado 240, asumiendo que el programa solo tiene un patrón a ceros por defecto, serán 241
A la onceava pasada ya NO puede reservar 24 caracteres (241 + 24 = 265 overflow!) con lo que el motor desvía la ejecución
a la rutina de aviso de 'desbordamiento' de número de patrón ...
La solución es simplísima, añadir un CLS antes de LINE 10
El efecto positivo de CLS es que 'repone' el patrón de color de fondo y los tres contadores a NUMPATTS mas 1, en este caso 2
evitando el problema de crecimiento incontrolado ;-)
De todas formas, no es correcto estar escribiendo los mismos textos cada vez dentro del bucle principal.
Solo hay que ver que los valores de vidas, objetos y puntuaciones solo se actualizan en los eventos donde se detectan las
acciones que requieren cambios en dichas variables. Dicho claramente, si un programa da problemas con el motor V9958,
no está mal hecho pero no está 'afinado' para optimizar velocidad de ejecución
saludos
pere

Avatar de Usuario
minter
Mensajes: 3006
Registrado: 22 Jul 2014 18:51
Agradecido : 3353 veces
Agradecimiento recibido: 1404 veces

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor minter » 28 May 2020 11:57

Despues de esta explicación, hay que estudiar Metodología de Programación.
Para que luego... el profesor que expmica esos contenidos, no aplique ninguno de ellos en su programación. -507
(No va por ti, Pere. La coña es para otra. XD )

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

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor pser1 » 28 May 2020 18:34

minter escribió:Despues de esta explicación, hay que estudiar Metodología de Programación.
Para que luego... el profesor que expmica esos contenidos, no aplique ninguno de ellos en su programación. -507
(No va por ti, Pere. La coña es para otra. XD )

De todas formas yo mas bien diría que he encontrado una buena excusa para darle la culpa al programador que escribe a cada iteración del
bucle principal texto fijo como títulos de variables (vidas, puntos, etc). La verdad es que el procesador 6809 soporta estos malos hábitos
sin resentirse en velocidad ... pero mejor no emplear esta forma de programar -thumbup
saludos
pere

Pd Perdiendo todavía mas tiempo, se podría verificar si el 'pattern' de la celda a ocupar tiene la misma definición que la que vamos a escribir
y, solo en este caso, no hacer nada y mirar la siguiente. Se podría hacer, pero no se si merece la pena. Se queda como solución en caso de
tener problemas con algún juego mas recalcitrante -507

jltursan
Mensajes: 3037
Registrado: 20 Sep 2011 13:59
Agradecido : 255 veces
Agradecimiento recibido: 756 veces

Re: Dragon con V9958 = Dragon-MSX2+

Mensajepor jltursan » 28 May 2020 18:47

Pues mucho ojo porque ese hábito, el de reescrbir textos tontamente en el MAINLOOP, me lo he encontrado en la mayoría de juegos que he visto. Tanto que en mi GitHub le dediqué una entrada advirtiendo de ello -no
En algún caso es flagrante, una implementación muy descuidada; el Oceano por ejemplo en su primera versión convertida hacía que el MSX se arrastrara (el motor también era primitivo) y cambiando todo el MAINLOOP para evitar repeticiones la cosa mejoró increiblemente.

Lo dicho, aunque sea poco, lo he visto en bastantes juegos y me temo que a 25fps el desbordamiento tardaría poco en aparecer...


Volver a “Software Dragon”

¿Quién está conectado?

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