Karoshi MSX Community
05 de Julio de 2021, 03:31:54 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1] 2
  Imprimir  
Autor Tema: Volcado de pantallazos a lo cafre  (Leído 8975 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« : 22 de Abril de 2006, 10:50:13 am »

Estoy experimentando en hacer una cosilla a la vieja usanza (léase Spectrum) para lo cual en lugar de trabajar con la tabla de nombres, lo hago con la de patrones directamente. En cada iteración estoy volcando 6kb a la VRAM a saco usando la BIOS y el problema es un apreciable parpadeo (además de que el juego no es muy rápido). He probado a volcar 2 tercios de pantalla (el resto para marcadores) y el problema es el mismo. Sé que es el puñetero barrido el que tiene la culpa, pero en una revista que no recuerdo (era una microhobby) se comentaba que se usaban nops y no sé qué historias para evitar los parpadeos. Quería saber si alguno sabe algo, porque había conversiones spectrum que eran muy suaves, a no ser que usaran otra técnica y no volcasen la pantalla completa. Please, any information is uel uelcomed Grin

Otra cosilla es que necesito tela de ram para trabajar con las pantallas, por lo que si saliera un juego ya no cumpliría los requisitos de la dev, ya que necesito RAM en la página 2 Sad

¡Gracias!
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #1 : 22 de Abril de 2006, 10:57:41 am »

Vamos a ver, Darth, no nos pongamos nerviosos... 6KB para generar una pantalla!!!, Dios, pero porqué me das tanto miedo?  Wink. No me extraña que veas parpadeos!, es que vas completamente desincronizado!, aparte de ir a 8 fps (que eso no es lo peor). Y además estarás volcando cosas a piñón, sin tener aún la música por interrupciones ni controlar a un personaje ni a sus enemigos y sus colisiones!... 6KB es una bañada... si lo dejamos en los dos primeros bancos (eso sí, solo pasando los patrones, nada de colores -monochrome forever-), ahí tenemos 4KB... irá todo ún poco más rápido (13 fps en PAL aprox.), pero el tema de los barridos es impepinable, ya que el propio refresco de la zona de juego te va a pillar entre el barrido de pantalla SIEMPRE...  Roll Eyes

...algún experto en el VDP que le pueda dar alguna esperanza a Darth con su propósito (yo no termino de ver la luz por esa vía)?.  Undecided
En línea

Jon Cortázar Abraido (aka El Viejo Archivero)
RELEVO Videogames
[Dioniso: La cafeína está haciendo su trabajo; yo espero hacer el mío.]
[pitpan: Me sigue pareciendo más productivo jugar al SNAIL MAZE que seguir esta discusión.]
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #2 : 22 de Abril de 2006, 12:09:31 pm »

Es que 6Kb son muchos... Tongue. Está claro que a 50/60 fps no va a ir nunca. Lo que si que es posible que puedas hacer y seguramente a eso te referías cuando comentas lo de los NOPs, es utilizarlos para hacer que el refresco te pille en una zona en la que no estés volcando pantalla, marcadores por ejemplo. El truco podría funcionar bien si tienes muy controlado lo que te tarda el volcado; si ves que el barrido te pilla siempre en una zona determinada, puedes desplazar la interferencia empezando con unos NOPs (o mejor aun, cualquier otro cálculo útil que te lleve un tiempo más o menos fijo); así con suerte podrás quitarte de enmedio la interferencia. Smiley
De todas formas, unas ideas:
  • Sólo se justifica la transferencia de toda la pantalla, si toda la pantalla se está moviendo, un scroll horizontal o vertical (Operation Wolf o Silent Shadow). De no ser así compensa con creces el volcar únicamente los sprites.
  • Si la vuelcas completa y es un scroll horizontal, puedes aprovechar y montarte algún chanchullo parallax y así dividir la pantalla en franjas que se desplazarán a diferentes velocidades. Con eso te ahorrarás el tener que volcar toda la pantalla cada fotograma. Cuanto más lentas sean algunas de las franjas, más tiempo podrás destinar a las otras. Wink
En línea

Doom dee doom dee doom
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #3 : 22 de Abril de 2006, 12:15:47 pm »

Ok, sí, es una borricada total Grin Pero para lo que estoy probando, no veo otra manera clara de hacerlo. Alguna forma habrá, visto la suavidad de juegos como Freddy Hardest, cualquiera de Ultimate, Venom strikes back y tantos otros. Claro, supongo que sólo transferiran las partes de los muñecos con una rutina y borran lo anterior, supongo (salvo en los de Ultimate).

Los movimientos ya están hechos, Jon, pero no es eso lo que más me preocupa, no ralentiza mucho la cosa Wink

Y si no se puede, pues a jodelse Grin Juegos a la antigua usanza... ¡a soportar "olas" en pantalla! Grin
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #4 : 22 de Abril de 2006, 12:25:34 pm »

Vaya, he respondido y no he visto tu mensaje Smiley

Citar
Es que 6Kb son muchos... Tongue. Está claro que a 50/60 fps no va a ir nunca. Lo que si que es posible que puedas hacer y seguramente a eso te referías cuando comentas lo de los NOPs, es utilizarlos para hacer que el refresco te pille en una zona en la que no estés volcando pantalla, marcadores por ejemplo.

Supongo que a eso se referían en la microhobby.

Citar
El truco podría funcionar bien si tienes muy controlado lo que te tarda el volcado; si ves que el barrido te pilla siempre en una zona determinada, puedes desplazar la interferencia empezando con unos NOPs (o mejor aun, cualquier otro cálculo útil que te lleve un tiempo más o menos fijo); así con suerte podrás quitarte de enmedio la interferencia. Smiley

¿Dónde iría el bucle de nops, después de call LDIRVM? Podría intentar ajustarlo a ojímetro. Podría también volcar cada tercio por separado, después del preceptivo HALT, pero entonces me parece que aunque más suave, la acción estaría "desincronizada", ¿verdad?
 Embarrassed


Citar
[li]Sólo se justifica la transferencia de toda la pantalla, si toda la pantalla se está moviendo, un scroll horizontal o vertical (Operation Wolf o Silent Shadow). De no ser así compensa con creces el volcar únicamente los sprites.[/li]

No exactamente un scroll, pero sí, necesito volcar toda la pantalla, no sólo trozos.


Citar
[li]Si la vuelcas completa y es un scroll horizontal, puedes aprovechar y montarte algún chanchullo parallax y así dividir la pantalla en franjas que se desplazarán a diferentes velocidades. Con eso te ahorrarás el tener que volcar toda la pantalla cada fotograma. Cuanto más lentas sean algunas de las franjas, más tiempo podrás destinar a las otras. Wink[/li]
[/list]

¿Parallax? ¿Eso qué es lo que é? Grin ¡Otra cosa para experimentar! Cheesy Mi socio me va a cortar los cataplines de tanto experimento y no centrarme en hacer lo que queda pendiente Cheesy


Jon, respecto al "monocroming", primero volcaría la tabla de colores y así, al menos, ya hay algo... emborrachamiento de color, como los de toda la vida Grin

No, no os asustéis, algún día lo aplicaré en color. No es imitar al Spectrum lo que busco Smiley

Citar
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
RC743
Karoshi Maniac
****
Mensajes: 495


No Pain, No Gain!


Email
« Respuesta #5 : 22 de Abril de 2006, 12:34:31 pm »

Citar
Mi socio me va a cortar los cataplines de tanto experimento y no centrarme en hacer lo que queda pendiente

Tranquilo, tus genitales están a salvo. Eres un brainstroming en potencia... luchar contra eso es absurdo, asi que te dejo hacer, don´t worry  Wink  cmptr:) <Darth  :wallball: < RC
En línea

Obsoletobots : Transformense y Avancen!
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #6 : 22 de Abril de 2006, 05:27:15 pm »

Citar
¿Dónde iría el bucle de nops, después de call LDIRVM? Podría intentar ajustarlo a ojímetro.

En el MSX es más difícil ajustar con precisión los ciclos del código que se ejecuta que en el spectrum, lo más fácil es hacerlo a ojo. Los NOPs o lo que sea, es más sencillo que vayan inmediatamente despues del HALT, así lo que consigues es desplazar en el tiempo el comienzo del volcado y por tanto la posición de la interferencia en la pantalla. Como esto ya comienza a ser magia negra te recomiendo que le eches un vistazo a este snippet de Sapphire en el que se comentan unas cosas muy interesantes acerca del HALT y de como darle por saco a la BIOS (mucho ojito que como ya digo, esto es juju).

Citar
No exactamente un scroll, pero sí, necesito volcar toda la pantalla, no sólo trozos.

Me pregunto que se estará cociendo en el lado oscuro de la fuerza... Grin

Citar
¿Parallax? ¿Eso qué es lo que é? Grin ¡Otra cosa para experimentar!

Imagínate que la pantalla se divide en tres franjas horizontales, cada una de 64 píxeles de alto, la franja inferior contiene un suelo lunar con rocalla y demás (estilo Freddy Hardest) que se desplaza 1 píxel cada fotograma, la franja central contiene unas montañas y detalles lejanos, esta se desplazará a 1 píxel cada dos fotogramas y por último la franja superior que contendra un cielo tachonado de estrellas y algún planeta, su velocidad será de 1 píxel cada tres (o cuatro) fotogramas. De esta forma consigues un bonito efecto de profundidad y además ganas un montón en velocidad ya que rara vez transfieres más de dos franjas en un mismo fotograma (de hecho lo ideal es buscar una relación de velocidades que minimice estas coincidencias).
¡Ah! y por supuesto no uses LDIRVM, hazte una rutinilla que use OUTIs a saco para exprimir al máximo el Z80.


Cindy Lauper
Hacía tiempo que no ponía el smiley por aquí...
En línea

Doom dee doom dee doom
SapphiRe
Visitante
« Respuesta #7 : 22 de Abril de 2006, 05:40:48 pm »

La ventaja que tenían los spectrum con respecto a los MSX era que la cpu podía acceder directamente a la memoria de vídeo, con lo cual es muy sencillo realizar modificaciones en ésta.

Tiene que ser MUY bestia lo que estás haciendo para tener que volcar 6k de vídeo en cada frame. Además tienes que calcular qué valor debe ir en cada posición, lo cual también consume lo suyo. ¿Seguro que no hay otra forma de hacerlo? ¿Seguro seguro? Quizá combinando un volcado sobre la tabla de nombres y la de patrones conseguirías el mismo efecto con muchísimo menor coste.

Piensatelo Cheesy
En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #8 : 23 de Abril de 2006, 10:23:13 am »

Lo de combinar la tabla de nombres y patrones me viene bien pero para otra ocasión, en este caso lo estoy haciendo de otra manera. Sobre si hay otra forma de hacerlo, seguro que la hay, pero bueno, si llegáis a verlo funcionando ya me daréis collejas. Otra cosa que no mencioné es que al trabajar en un buffer, tengo una copia de los 6kbs de la pantalla en RAM y otra copia donde trabajo que es la que se vuelca en pantalla. Vamos, otros 12kbs de RAM también gastados a lo cafre Grin Antes de trabajar con la pantalla, vuelco la copia original a la copia de trabajo con un ldir lo que supongo que también tardará lo suyo (mover los 6kbs). Voy a echar un vistazo a un artículo sobre un ldir rápido publicado por Guyver a ver si saco algo de provecho.

Respecto a volcados rápidos con OUTI, lo único que he visto en el MRC es esta rutina publicada por Robsy (no sé si con copyrights y esas cosas) Smiley

Código:
; Parameters:
; HL: source address (RAM)
; DE: destiny address (VRAM)
; B: number of 8 byte blocks to be copied
RAM2VRAM:
ld a,e
di
out (99h),a
ld a,d
or a,40h
out (99h),a
ei
ld c,98h
LOOP:
ld d,b
outi ; now only 7xOUTI
outi
outi
outi
outi
outi
outi
ld b,d
outi
jp nz,LOOP ; faster, takes 10T
ret
« Última modificación: 23 de Abril de 2006, 10:26:07 am por Darth_Fistro » En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #9 : 23 de Abril de 2006, 11:01:19 am »

Citar
Vamos, otros 12kbs de RAM también gastados a lo cafre

¡¿Pero en que leshes estás trabajando?! Shocked

Citar
Respecto a volcados rápidos con OUTI, lo único que he visto en el MRC es esta rutina publicada por Robsy

Está perfecta; pero si quieres ejecutarla en los MSX1 necesitarás meter un NOP (o incluso dos) entre cada uno de los 6 primeros OUTI. De no hacerlo así la rutina sólo funcionaría en los MSX2.
Y si tan pillado vas con la velocidad, en vez de hacer 8 OUTIs de un tirón, puedes expandirla un poco y usar 16 o 32 OUTIs seguidos.

En línea

Doom dee doom dee doom
WYZ
Visitante
« Respuesta #10 : 23 de Abril de 2006, 03:44:38 pm »

Si solo vas a trabajar con formas y los colores van a ser fijos (o en Blanco y negro como si fuera un spectrum) la solución para evitar parpadeo y hacerlo de una forma elegante es usar un "doble buffer" de VRAM  y cambiar la direccion de la tabla de formas en cada frame. El numero de frames por segundo será exactamente el mismo que si vuelcas a VRAM de la forma que explicas porque la transferencia de datos es la misma, solo que en este caso no ves lo que escribes. El problema es que creo que tendrías que desactivar sprites o buscartelos de alguna forma.

La secuencia sería esta:

1-desactivar VRAM y organizarla:(por ejemplo)

 6 kb para buffer 1 de formas en $0000
 6 kb para buffer 2 de formas en $2000
 tabla de color en $3800 

2- Volcado a buffer 1
3- Activar VRAM

4- Activar tabla de formas en $0000
5- Volcado a buffer 2
6- Activar tabla de formas en $2000
7- Volcado a buffer 1
8- ir a 4

Espero que te sirva.  cmptr:)

y..
Citar
Está perfecta; pero si quieres ejecutarla en los MSX1 necesitarás meter un NOP (o incluso dos) entre cada uno de los 6 primeros OUTI. De no hacerlo así la rutina sólo funcionaría en los MSX2.

Lo evitas de esta forma.

PS: sobre el codigo que has pegado ahi arriba.... que recuerdos Grin
« Última modificación: 23 de Abril de 2006, 04:02:44 pm por WYZ » En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #11 : 23 de Abril de 2006, 05:18:43 pm »

La idea es buena; pero creo que no hay VRAM suficiente... Sad

Formas 1 : 6144
Formas 2 : 6144
Colores   : 6144
Nombres : 768

Total : 19200

Y eso sin contar con que en screen 2, cada una de las tablas de formas y de colores sólo pueden estar en $0000 o en $2000, por lo que no se podría tampoco definir ninguna tabla de patrones extra Cry. Me temo que en este caso la superioridad del VDP de los MSX2 es realmente humillante (y frustrante).

Respecto a los sprites, en un MSX2 los podrías desactivar del todo, en un MSX1 la única solución es meter 208 en la ordenada del sprite 0 y quitarlos de enmedio, de esta forma en la tabla de patrones de sprites puede haber toda la basura que se quiera, que no se verá nada; pero claro, de poco sirve.....

Por cierto, ¿pasará como con los MSX2?, que cuando no hay sprites el VDP va un pelín más rápido, o sea, ¿si el VDP no tiene sprites que dibujar en pantalla se ganará algo de velocidad en el acceso al VDP?......supongo que no, después de todo el VDP de los MSX1 no tiene la capacidad de procesar instrucciones como el 9938 o 9958.
En línea

Doom dee doom dee doom
WYZ
Visitante
« Respuesta #12 : 23 de Abril de 2006, 05:54:09 pm »

Segun lo que comenta Darth no es necesaria una tabla de colores de 6kb. Quien ha dicho SC2?  Wink
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #13 : 23 de Abril de 2006, 09:12:05 pm »

 Grin Conociendo a Darth seguro que está metiéndose a fondo con SC2. Además si que creo que comentó algo de que iba a hacer nosequé con la tabla de colores... Wink
En línea

Doom dee doom dee doom
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #14 : 24 de Abril de 2006, 08:33:58 am »

Segun lo que comenta Darth no es necesaria una tabla de colores de 6kb. Quien ha dicho SC2?  Wink

Yap, pero en screen 1 tan solo dispones de 256 caracteres para definir (un tercio de la pantalla)... ¿o estás hablando de alguna especie de modo mixto que acepte 768 caracteres sin tabla de color?. Huh
En línea

Jon Cortázar Abraido (aka El Viejo Archivero)
RELEVO Videogames
[Dioniso: La cafeína está haciendo su trabajo; yo espero hacer el mío.]
[pitpan: Me sigue pareciendo más productivo jugar al SNAIL MAZE que seguir esta discusión.]
Páginas: [1] 2
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!