Scroll horizontal carácter a carácter

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Kodaly
Herbert
Mensajes: 75
Registrado: Lun Jul 23, 2012 1:55 pm

Re: Scroll horizontal carácter a carácter

Mensaje por Kodaly » Mié May 11, 2016 10:15 am

climacus escribió:
Kodaly escribió:Pues sí. Gracias a las orientaciones de climacus me está quedando un scroll bastante decente. Al final estoy haciendo el buffer con la pila. Laborioso pero efectivo.
Me alegro mucho de que te haya servido. Cuando tengas algo presentable nos lo enseñas!!!!
Esa es la idea. A ver si puedo compartir con vosotros algo digno.

Avatar de Usuario
Alxinho
Freddy Hardest
Mensajes: 896
Registrado: Mar Jun 19, 2007 11:20 am
Ubicación: Barcelona
Contactar:

Re: Scroll horizontal carácter a carácter

Mensaje por Alxinho » Mié May 11, 2016 12:07 pm

Una pregunta algo offtopic, sorry ...

Yo en los juegos siempre programo para el teclado los valores en los dos issues, el 2 y el 3 para que vaya en todos lados pero en realidad no sé muy bien porqué existen los dos issues éstos de los cojones. Los Spectrum que tuvimos eran Issue 2 o el 3? Puedo programar para un issue sólo y no tener que calentarme tanto la cabeza?

Yo es que de Hardware no entiendo mucho :(
Retrobytes Productions --> http://retrobytesproductions.blogspot.com.es

Soy un tío feliz, más que nada ... porque me sale más a cuenta.

Avatar de Usuario
climacus
Sabreman
Mensajes: 411
Registrado: Mar Ago 25, 2009 1:46 pm

Re: Scroll horizontal carácter a carácter

Mensaje por climacus » Mié May 11, 2016 1:03 pm

Alxinho escribió:Una pregunta algo offtopic, sorry ...

Yo en los juegos siempre programo para el teclado los valores en los dos issues, el 2 y el 3 para que vaya en todos lados pero en realidad no sé muy bien porqué existen los dos issues éstos de los cojones. Los Spectrum que tuvimos eran Issue 2 o el 3? Puedo programar para un issue sólo y no tener que calentarme tanto la cabeza?

Yo es que de Hardware no entiendo mucho :(
Yo para leer el teclado siempre uso el método de la BIBLIA de Romero. Nunca me ha dado problemas: Simplemente testear con la instrucción BIT y todo va como la seda.

http://wiki.speccy.org/cursos/ensamblador/teclado
Todos mis juegos en formato físico
http://www.matranet.net/boutique/zx/zx.php

Avatar de Usuario
Kyp
Sabreman
Mensajes: 444
Registrado: Lun Dic 16, 2013 6:16 pm

Re: Scroll horizontal carácter a carácter

Mensaje por Kyp » Jue May 12, 2016 12:36 am

Alxinho escribió:Una pregunta algo offtopic, sorry ...

Yo en los juegos siempre programo para el teclado los valores en los dos issues, el 2 y el 3 para que vaya en todos lados pero en realidad no sé muy bien porqué existen los dos issues éstos de los cojones. Los Spectrum que tuvimos eran Issue 2 o el 3? Puedo programar para un issue sólo y no tener que calentarme tanto la cabeza?

Yo es que de Hardware no entiendo mucho :(
Issue2 1 son raras de ver, issues 2 alguna hay, e issues 3, 4 y 6 suele ser lo más habitual.

Como sabéis cada fila de teclado usa solo 5 de los 8 bits posibles. La diferencia entre issues 1-2 y las demás es como se leen los bit que no se usan. Se puede acceder con la instrucción BIT o enmascarar antes los bits no usados para que no den guerra.

Kodaly
Herbert
Mensajes: 75
Registrado: Lun Jul 23, 2012 1:55 pm

Re: Scroll horizontal carácter a carácter

Mensaje por Kodaly » Jue May 12, 2016 11:07 pm

Climacus, ¿cuánto suele ocupar de memoria el buffer con la pila? Llevo unos 7kb. No sé si es normal que coja tanto. El área del scroll es de 20x16 caracteres.

Avatar de Usuario
climacus
Sabreman
Mensajes: 411
Registrado: Mar Ago 25, 2009 1:46 pm

Re: Scroll horizontal carácter a carácter

Mensaje por climacus » Vie May 13, 2016 10:48 am

Kodaly escribió:Climacus, ¿cuánto suele ocupar de memoria el buffer con la pila? Llevo unos 7kb. No sé si es normal que coja tanto. El área del scroll es de 20x16 caracteres.
No te puedo dar una respuesta muy fina, ya que no sé cómo lo estás haciendo. En principio el buffer te debería ocupar 20x16x8 bytes.
Si en el buffer usas el mismo sistema de direccionesl que usa la pantalla real, asegúrate de usar tercios enteros de pantalla y que el buffer empiece en una dirección #XX00
Todos mis juegos en formato físico
http://www.matranet.net/boutique/zx/zx.php

Kodaly
Herbert
Mensajes: 75
Registrado: Lun Jul 23, 2012 1:55 pm

Re: Scroll horizontal carácter a carácter

Mensaje por Kodaly » Vie May 13, 2016 12:38 pm

Pues lo he hecho haciendo pop y push con registros de 16 bits. A eso hay que sumarle los atributos, pintados en la pantalla del buffer por el mismo procedimiento.

Gracias!

Kodaly
Herbert
Mensajes: 75
Registrado: Lun Jul 23, 2012 1:55 pm

Re: Scroll horizontal carácter a carácter

Mensaje por Kodaly » Vie May 13, 2016 6:11 pm

Se me ha suscitado otra duda importante sobre el buffer. Perdonad que pregunte tanto!
A ver si me entero de lo que necesito y empiezo un proyecto de juego que tengo.

Entiendo que todos los sprites se pintan en el buffer. Entonces, cada vez que un sprite se mueve,¿hay que volver a pintar todos los demás aunque éstos estén quietos? Si es así, ¿ralentiza mucho el juego?

Por lo demás, he solucionado lo del parpadeo y el scroll va a una velocidad aceptable. He tenido que meter una instrucción halt porque si no salen a veces pixeles que no deberían estar en la parte izquierda y derecha del área del scroll. Con el halt este problema desaparece.

Avatar de Usuario
climacus
Sabreman
Mensajes: 411
Registrado: Mar Ago 25, 2009 1:46 pm

Re: Scroll horizontal carácter a carácter

Mensaje por climacus » Vie May 13, 2016 7:12 pm

Kodaly escribió:Se me ha suscitado otra duda importante sobre el buffer. Perdonad que pregunte tanto!
A ver si me entero de lo que necesito y empiezo un proyecto de juego que tengo.

Entiendo que todos los sprites se pintan en el buffer. Entonces, cada vez que un sprite se mueve,¿hay que volver a pintar todos los demás aunque éstos estén quietos? Si es así, ¿ralentiza mucho el juego?

Por lo demás, he solucionado lo del parpadeo y el scroll va a una velocidad aceptable. He tenido que meter una instrucción halt porque si no salen a veces pixeles que no deberían estar en la parte izquierda y derecha del área del scroll. Con el halt este problema desaparece.
Yo suelo pintar todos los sprites activos cada vez, ya que la velocidad máxima del juego me la marca "el caso más lento". Osea cuando se pintan todos los posibles a la vez. Meto las pausas justas. Por eso imprimo todos. He visto algunos juegos que imprimen sólo los sprites que se mueven cada vez y luego meten pausas más largas.

No veo claro eso que dices de que si no pones halt salen pixeles por ahí. Algo tiene que fallar.

Y por favor, sigue preguntando, que da mucha vidilla!!

Por favor, sigue preguntando.
Todos mis juegos en formato físico
http://www.matranet.net/boutique/zx/zx.php

Kodaly
Herbert
Mensajes: 75
Registrado: Lun Jul 23, 2012 1:55 pm

Re: Scroll horizontal carácter a carácter

Mensaje por Kodaly » Sab May 14, 2016 9:14 am

Muchísimas gracias, climacus. Yo encantado de preguntar porque esto del ensamblador es un vicio cuando te inicias y vas viendo resultados pero a la vez salen muchos interrogantes. Me alegro de que haya siempre tan buena gente en el foro dispuesta a ayudar.

Pues lo de los pixels que no deberian estar me sigue ocurriendo. He repasado las posiciones de memoria del buffer y todo ok. La primera pantalla la imprime correctamente, incluso cualquier pantalla que se indique desde la cual empezar. Pero al moverse a la derecha a veces salen líneas donde no debieran.
Si le metes un halt antes del buffer...problema resuelto.
Algo habré hecho mal pero no sé qué es...o.es un tema del haz de electrones que desconozco.

Otro tema que veo es que cuando el sprite de 16x16 se pinta en el buffer para moverlo arriba o abajo (con el scroll parado) va mucho más lento que si se hiciera sin buffer. Es lógico pero me temo que cuando pinte más sprites para moverlo se me va a ralentizar mucho, más habiendo metido el halt de antes.

Avatar de Usuario
climacus
Sabreman
Mensajes: 411
Registrado: Mar Ago 25, 2009 1:46 pm

Re: Scroll horizontal carácter a carácter

Mensaje por climacus » Sab May 14, 2016 9:45 am

En el spectrum el tema de la velocidad es importante. Intenta optimizar lo más posible las rutinas de impresión, que suelen ser las que más ralentizan. De todas formas, lo que más tiempo te consume será el mapeado y el volcado, por lo que seguro que si pones dos o tres sprites más, no se notará mucho.
Tienes que intentar depurar eso de los pixeles que te aparecen. Es un error, e igual que te aparecen en la pantalla te pueden estar machacando otra zona de la memoria.
Todos mis juegos en formato físico
http://www.matranet.net/boutique/zx/zx.php

Kodaly
Herbert
Mensajes: 75
Registrado: Lun Jul 23, 2012 1:55 pm

Re: Scroll horizontal carácter a carácter

Mensaje por Kodaly » Sab May 14, 2016 11:49 pm

Muchas gracias de nuevo, climacus.
Pues sí, estoy intentando depurarlo. Es un tema de la pila, creo. Ahí sigo a ver si lo consigo. :x

Kodaly
Herbert
Mensajes: 75
Registrado: Lun Jul 23, 2012 1:55 pm

Re: Scroll horizontal carácter a carácter

Mensaje por Kodaly » Dom May 15, 2016 11:18 pm

Bueno, parece que el error está en que no almaceno correctamente el puntero de la pila antes del buffer y tampoco lo recupero bien. Lo estaba guardando en una parte de la memoria con defb pero no había caído en que sólo me estaba guardando un valor de 8 bits.
He intentado guardar el valor de 16 bits de sp pero no lo consigo. :cry:

Avatar de Usuario
climacus
Sabreman
Mensajes: 411
Registrado: Mar Ago 25, 2009 1:46 pm

Re: Scroll horizontal carácter a carácter

Mensaje por climacus » Lun May 16, 2016 8:43 am

Kodaly escribió:Bueno, parece que el error está en que no almaceno correctamente el puntero de la pila antes del buffer y tampoco lo recupero bien. Lo estaba guardando en una parte de la memoria con defb pero no había caído en que sólo me estaba guardando un valor de 8 bits.
He intentado guardar el valor de 16 bits de sp pero no lo consigo. :cry:
Yo para almacenar SP uso lo siguiente:

Código: Seleccionar todo

         LD (STACK+1),SP
...............
................
................
.................

STACK    LD SP,0
Así me ahorro dos posiciones de memoria y velocidad al no usar un

STACK DEFW 0

De todas formas, a no ser de que a esa rutina se le llame desde distintos puntos en los que el stack pueda cambiar, como éste será fijo, no me molesto en guardar el valor de SP. Directamente, al final de la rutina pongo:

LD SP, dirección_de_la_pila_al_entrar_en_la_rutina

Así gano velocidad y memoria.

Por lo que me dices del problema que tienes, que te aparecen pixeles raros, ¿podría ser porque usas la pila para almacenar valores de los registros, cuando la has direccionado a la pantalla para volcar?
Eso me pasaba a mí al principio. Ten en cuenta que cuando usas la pila para meter datos, ésta no la puedes usar para almacenar registros, ya que la rutina no funcionaría correctamente.
Todos mis juegos en formato físico
http://www.matranet.net/boutique/zx/zx.php

Kodaly
Herbert
Mensajes: 75
Registrado: Lun Jul 23, 2012 1:55 pm

Re: Scroll horizontal carácter a carácter

Mensaje por Kodaly » Lun May 16, 2016 3:47 pm

Pues, climacus, creo que el problema va a ser debido a lo que dices tú porque he corregido lo del puntero y el problema sigue.

A raíz de la sugerencia que hiciste del doble buffer para solucionar lo del parpadeo al inicio del post, busqué y encontré en http://old8bits.blogspot.com.es/2016/05 ... -zx_3.html una forma de hacerlo con pop y push. De esta forma lo he hecho.

SEG1 equ 16514
SEG2 equ 18434
SEG3 equ 20482

P0 equ 0
P1 equ 256
P2 equ 512
P3 equ 768
P4 equ 1024
P5 equ 1280
P6 equ 1536
P7 equ 1792

C0 equ 0
C1 equ 32
C2 equ 64
C3 equ 96
C4 equ 128
C5 equ 160
C6 equ 192
C7 equ 224


xfer ld (stptr),sp ; guardar puntero de pila.

; Character line 0.

ld sp,WINDOW ; inicio del búferde la linea.
pop af
pop bc
pop de
pop hl
exx
pop bc
pop de
pop hl
ld sp,SEG1+C0+P0+14 ; final de la línea de la pantalla.
push hl
push de
push bc
exx
push hl
push de
push bc
push af

.
.

ld sp,WINDOW+4784 ; inicio del búfer de la linea.
pop af
pop bc
pop de
pop hl
exx
pop bc
pop de
pop hl
ld sp,SEG3+C7+P7+28 ; final de la línea de la pantalla.
push hl
push de
push bc
exx
push hl
push de
push bc
push af

okay ld sp,(stptr) ; restaurar el puntero de pila.
ret

Responder

¿Quién está conectado?

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