SCROLL (Vertical - Horizontal)

Avatar de Usuario
Chema
Mensajes: 2664
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 3190 veces
Agradecimiento recibido: 926 veces
Contactar:

Re: SCROLL vertical

Mensajepor Chema » 20 Oct 2016 16:38

Último mensaje de la página anterior:

Hola pser! Bienvenido a mi mundo... ordenadores sin ayuda hard para hacer scrolls :)

Lo que dices es así. En un Oric no hay tiempo en los 20.000 ciclos que hay entre cuadros (vamos a 1MHz) ni para borrar la pantalla (escribir ceros). Si vas a usar un doble buffer, aparte de la cantidad de memoria extra que necesitas, hay que copiar el buffer sobre la pantalla. Igual podéis volcar en esos 17.800 ciclos, pero si no da tiempo, volverá a haber glitches (tearing) porque pillará parte actualizada y parte sin actualizar.

Eso sí, es cosa de hacer el scroll sobre la imagen en doble buffer e ir volcando el mismo sobre la memoria de pantalla en cada barrido vertical. O sea el scroll igual que ahora, pero sobre el buffer oculto, más una rutina de volcado que *vuele*.

Ojo que creo que no es tan fácil como se pinta. En realidad para que se vea perfecto debería volcarse en el tiempo que el haz no está barriendo la pantalla, o sea cuando acaba por abajo y antes de que empiece por arriba. O asegurar mucho los timings para ir volcando "persiguiendo el haz" (por detrás de lo que está actualizando).

O eso creo recordar de cuando miré estas cosas para Oricium. Lo que pasa es que allí era otro problema y me bastaba con actualizar pocas cosas en el tiempo entre frames (el resto de cálculos sí que llevaban tiempo y no pude ir más allá de 25 frames por segundo).

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Re: SCROLL vertical

Mensajepor pser1 » 20 Oct 2016 17:50

Hola Chema,
alguna ventajilla tenían que presentar Dragon y CoCo2 ...
La pantalla en PMODE3 muestra 6144 bytes, pero tu decides CUALES.
Se puede mostrar cualquier cosa siempre que este alineada a bloques de 512 bytes ($200)
Por esto el estandar es $0C00-$23ff (con discos conectados), pero se puede usar como buffer $2400-3bff por ejemplo
y en su momento conmutar unos pocos bits en la SAM para que en el siguiente FRAME aparezca la nueva pantalla -507
No hay necesidad de trasladar datos de un sitio a otro!
En cuanto me sea posible voy a preparar una variante con doble buffer y ya la subiré

saludos
pere

Pd. Para pruebas siempre elijo el modo mas doloroso. Muchos juegos se conforman con el PMODE1 (Flagon Bird)
que solo mueve 3072 bytes (la mitad) y solo 96 filas (de ahí la diferencia)
Si el peor caso funciona, los otros serán mas suaves

Avatar de Usuario
Chema
Mensajes: 2664
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 3190 veces
Agradecimiento recibido: 926 veces
Contactar:

Re: SCROLL vertical

Mensajepor Chema » 20 Oct 2016 18:11

Ah, que suerte. El C64 creo que también permite conmutar dónde empieza la memoria de vídeo, haciéndolo todo mucho más fácil. Entonces puedes tener dos copias del gráfico, desplazas una un pixel y, a partir de ahí, desplazar dos pixels cada una e ir intercambiando una por otra (muestro A, desplazo 2 B, muestro B, desplazo 2 A, etc). Si esto quiere usarse en un juego ya se hará más complicado..

Avatar de Usuario
ron
Mensajes: 21856
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 3862 veces
Agradecimiento recibido: 4754 veces

Re: SCROLL vertical

Mensajepor ron » 20 Oct 2016 18:14

Solo pensando es estos tricks y en la forma de explotar algo que no está integrado en el hardware, si en su día hubieran utilizado estas técnicas no todos los ordenadores hubieran sido tan malos y probablemente los programas hubieran ganado mucho.

Habría que ver que hay hecho desde la SCENE respecto al scrolls no implementados por HW, aunque viendo las aportaciones de pser1 se podría decir que ahora si se pueden hacer demos razonables. A ver si le dedico un poco de tiempo y lo miro con mucho más detalle porque da para muchas ideas.

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Re: SCROLL vertical

Mensajepor pser1 » 20 Oct 2016 18:31

veamos ...
he tenido suerte y a la tercera ha funcionado -thumbup
Os adjunto el VDK y el fuente de una posible solución para hacer scroll con un buffer aparte de la pantalla (2 buffers en realidad)
Para probar ahora lanzad
RUN"TESTDB"
1) Vemos la pantalla STD, se copia un pixel para abajo en el buffer y una vez acabado se espera a la llegada de la interrupción
que indica final de pantalla para conmutar la SAM para que el video apunte al buffer.
2) Vemos el buffer bajado un pixel. Ahora copiamos el buffer a la pantalla STD un pixel para abajo (misma rutina que antes con punteros
invertidos) y esperamos nueva interrupción para conmutar la SAM de forma que apunte a la zona STD de video
Y a volver al punto 1 hasta que hayamos movido la pantalla enterita -507

Veréis que ahora no hay glitch (pelea entre lo que muestra el Video y lo que estamos machacando por programa)
Por el mero hecho de mover colores, los pixeles cambian de color 25 veces por segundo y en las combinaciones
rojo-azul se notan las diferencias de luminancia o brillo entre ambos colores.

saludos
pere
SCROLL7.ZIP
(31.63 KiB) Descargado 29 veces

Avatar de Usuario
minter
Mensajes: 4826
Registrado: 22 Jul 2014 18:51
Agradecido : 6762 veces
Agradecimiento recibido: 2602 veces

Re: SCROLL vertical

Mensajepor minter » 20 Oct 2016 18:34

Toma castaña!

https://www.youtube.com/watch?v=da5kzy5BkCA&feature=youtu.be

Nota: Este vídeo pertenece a la versión Scroll6. Es mas antigua a la versión scroll7 recién colgada

No esta nada mal. -thumbup
En el fondo es mover bloques de datos de forma ordenada y en su momento adecuado.

Una lastima que algunos equipos no dispusieran de hard dedicado para vídeo, como comenta chema. En el C64, un comando a una posición de memoria, y el VIC realizaba todo el scroll. Ni tampoco tenemos la velocidad del Z80 a 4 Mhz.
Por eso preguntaba la cantidad de ciclos empleados por el 6809, para ver si es suficientemente fuerte en la gestión de bloques de memoria.

Edito: Estaba escribiendo esto, y ya hay novedades por parte de Pere! Que bestia! -shock

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Re: SCROLL vertical

Mensajepor pser1 » 20 Oct 2016 18:47

como he visto que a minter le mola el tema del scroll circular ...
he decidido cambiar levemente el anterior y sacar esta nueva versión S7C.BIN
Adjunto VDK y fuente como siempre.

Lo mismo que antes pero la linea 192 de cada pantalla se copia en la linea 1 de la copia ...
Para probar haced
RUN"TESTDBC"

saludos
pere
SCROLL7C.ZIP
(31.77 KiB) Descargado 30 veces

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Re: SCROLL vertical

Mensajepor pser1 » 20 Oct 2016 21:40

Una vez sorteadas las dificultades del scroll vertical, he empezado a mirar el horizontal.
Al trabajar en PMODE3 hay que mover DOS bits cada vez, puesto que cada pixel tiene su
color definido en DOS bits del byte de memoria.
He acabado con dos versiones, una que hace scroll hacia la derecha llenando la izquierda
y otra que hace scroll circular (para minter ;-))
Al reaprovechar código de versiones recientes, ambas mantienen el doble buffer ...
En el VDK estan las dos con sus fuentes. Para probarlas haced
RUN"TESTHS" para el simple
RUN"TESTHSC" para el circular

Todas estas versiones son borradores, si se analizan con cariño seguro que se pueden acelerar
sin llegar a crear monstruos de 7 u 8 Kb
A ver ahora que se nos ocurre para utilizar esto ...

saludos
pere

EDITO 2016-10-21 - Elimino el fichero adjunto por contener programa antiguo erróneo.
La versión correcta se puede descargar varios posts mas abajo!

Avatar de Usuario
minter
Mensajes: 4826
Registrado: 22 Jul 2014 18:51
Agradecido : 6762 veces
Agradecimiento recibido: 2602 veces

Re: SCROLL (Vertical - Horizontal)

Mensajepor minter » 20 Oct 2016 23:34

Ya los he probado!
La caña! -thumbup
Lo que no sabía era el tema de los dos bits en Mode3, eso explica algunos tirones en juegos de dragón.
Tengo que mirarlo con calma como solucionaste el tema horizontal. No es moco de pavo.
https://youtu.be/RLaMdvQxU_A
No se quiebra ninguna linea. :D

Avatar de Usuario
Chema
Mensajes: 2664
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 3190 veces
Agradecimiento recibido: 926 veces
Contactar:

Re: SCROLL (Vertical - Horizontal)

Mensajepor Chema » 21 Oct 2016 08:54

Vaya bien que va... sí señor... :)

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Re: SCROLL (Vertical - Horizontal)

Mensajepor pser1 » 21 Oct 2016 10:23

Buenos días,
no sé en que entorno lo estáis probando vosotros, pero me interesaría que lo comentárais.
Sobretodo saber desde donde estás grabando los videos, minter! (XRoar, Mame, Mess, Dragón32-64 ... )

En mi instalación, con XRoar para Window$ 64bits, los cambios de pixels de rojo a azul y viceversa producen
un parpadeo que yo justificaba debido al cambio de brillo entre ambos colores, pero no parece ésto.
Cuando he probado a ejecutarlo en MAME, ahí el scroll horizontal no muestra dicho defecto.
Pero, en cambio, el scroll vertical parpadea en algunas líneas, así que habrá que probarlo en un Dragón
real para ver el comportamiento de la sincronización. Malditos emuladores -banghead

saludos
pere

Avatar de Usuario
Chema
Mensajes: 2664
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 3190 veces
Agradecimiento recibido: 926 veces
Contactar:

Re: SCROLL (Vertical - Horizontal)

Mensajepor Chema » 21 Oct 2016 10:28

Pues yo estaba viendo los vídeos de minter, así que... A ver si saco un hueco para probar con el XRoar.

Al final cómo estás haciendo el scroll vertical? Como te apunté yo (dos copias de la pantalla, una con un scroll de una línea, y vas conmutando y haciendo scroll de dos líneas en cada una? Eso permite ciertas optimizaciones interesantes, creo yo...

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Re: SCROLL (Vertical - Horizontal)

Mensajepor pser1 » 21 Oct 2016 10:56

Hola Chema,
tanto el vertical como el horizontal los hago muy parecidos.
Copio la pantalla original al buffer desplazando un pixel (vertical = 1 linea o sea 32 bytes), mientras que en el horizontal
es mas doloroso tener que hacer dos shift right por byte, pero lo hago igual desde origen al buffer
Una vez mostrado el buffer, copio datos del buffer al área normal de pantalla desplazando otra fila o dos pixels
Y así hasta final de pantalla. A -> B y luego B -> A
Ya sé que el 6809 es diferente si no lo conoces, de todas formas espero que mi manía de comentar cada línea
pueda echar una mano a quien intente leerse los ficheros fuente ...

saludos
pere

Avatar de Usuario
minter
Mensajes: 4826
Registrado: 22 Jul 2014 18:51
Agradecido : 6762 veces
Agradecimiento recibido: 2602 veces

Re: SCROLL (Vertical - Horizontal)

Mensajepor minter » 21 Oct 2016 11:08

Buenos días Pere!

Estoy con el Xroar 0.34.5 para w32. Con el basic 1.3 y el dos 4.0
El parpadeo lo veo únicamente el la primera versión del scroll horizontal. En el que rota, la segunda versión, ya viste que no me aparece el parpadeo.

https://youtu.be/4XNiJY4ZdJE

Lo de comentar el código, a parte de una muy buena practica, para los que NO nos conocemos de memoria los mnemonicos del 6809, nos viene de perlas. -thumbup

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Re: SCROLL (Vertical - Horizontal)

Mensajepor pser1 » 21 Oct 2016 12:31

@minter
No se que versión de scroll es el que has grabado en este video, pero parece incorrecto.
Es como si solamente moviera UN bit a la derecha, de ahí los cambios de color.

Como cada octeto lleva info de cuatro pixels, cada DOS bits representan el color de un pixel.
Si tenemos un byte así: 10101010 y lo movemos SOLAMENTE un bit, pasa a ser 01010101
Y sorpresa, el color 10 (azul) Ha pasado a ser 01 (amarillo)

La versión que está dentro del último disco (SCROLL7HV.VDK) es errónea y mueve solamente un pixel
cada vez y por tanto presenta los cambios de color que observo en el video -banghead
La circular es correcta y NO los presenta.

Actualizo el fichero VDK con el scroll horizontal simple corregido (2 bits de golpe)
No sé como acabó esta versión dentro del disco ... Murphy siempre está al acecho -507

saludos
pere
SCROLL7HV.ZIP
(32.64 KiB) Descargado 36 veces

Avatar de Usuario
minter
Mensajes: 4826
Registrado: 22 Jul 2014 18:51
Agradecido : 6762 veces
Agradecimiento recibido: 2602 veces

Re: SCROLL (Vertical - Horizontal)

Mensajepor minter » 24 Oct 2016 15:29

Ahora si que va sin parpadeos.
Debían de ser gremlins!!! -grin
https://youtu.be/ZWHZ6rDFG5Y

Gracias Pere!

Por cierto... estoy mirando libros de Dragón, estoy buscando el " Dragon 32 Programmers Reference Guide".

O me recomiendas algún otro?

gacaffe
Mensajes: 56
Registrado: 08 Dic 2015 18:32
Agradecido : 13 veces
Agradecimiento recibido: 26 veces
Contactar:

Re: SCROLL (Vertical - Horizontal)

Mensajepor gacaffe » 24 Oct 2016 16:52

Me encanta este hilo.

Ya hablé con Pere en Retroparla 8.0 de que quería programar un juego con scroll para el Dragon, así que el hilo me viene de perlas. El problema que tengo es, como siempre, la falta de tiempo. Para que os hagáis una idea, este mes me he dedicado a hacer música para MSX. En un mes, he conseguido sacar un total de 5 horas al proyecto (conseguí "componer" algo medio decente -thumbup). Esto también va un poco en la línea del post de Ron sobre si el foro está vivo o muerto: por mi parte, lo retro está muy presente, pero la falta de tiempo hace que mis proyectos avancen muuuuy lentos.

Ahora que me he quitado la espinita del MSX, es probable que ahora continue con esta idea de hacer algo para el Dragon. Os cuento.... algún día.
A bit of this a byte of that -codrg1 -m3s3x -coam1
http://gacaffe.net


Volver a “Software Dragon”

¿Quién está conectado?

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