Esa es la idea. A ver si puedo compartir con vosotros algo digno.climacus escribió:Me alegro mucho de que te haya servido. Cuando tengas algo presentable nos lo enseñas!!!!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.
Scroll horizontal carácter a carácter
Moderador: Sir Cilve Sinclair
-
- Herbert
- Mensajes: 75
- Registrado: Lun Jul 23, 2012 1:55 pm
Re: Scroll horizontal carácter a carácter
- 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
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 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.
Soy un tío feliz, más que nada ... porque me sale más a cuenta.
- climacus
- Sabreman
- Mensajes: 411
- Registrado: Mar Ago 25, 2009 1:46 pm
Re: Scroll horizontal carácter a carácter
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.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
http://wiki.speccy.org/cursos/ensamblador/teclado
Todos mis juegos en formato físico
http://www.matranet.net/boutique/zx/zx.php
http://www.matranet.net/boutique/zx/zx.php
- Kyp
- Sabreman
- Mensajes: 444
- Registrado: Lun Dic 16, 2013 6:16 pm
Re: Scroll horizontal carácter a carácter
Issue2 1 son raras de ver, issues 2 alguna hay, e issues 3, 4 y 6 suele ser lo más habitual.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
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.
-
- Herbert
- Mensajes: 75
- Registrado: Lun Jul 23, 2012 1:55 pm
Re: Scroll horizontal carácter a carácter
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.
- climacus
- Sabreman
- Mensajes: 411
- Registrado: Mar Ago 25, 2009 1:46 pm
Re: Scroll horizontal carácter a carácter
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.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.
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
http://www.matranet.net/boutique/zx/zx.php
-
- Herbert
- Mensajes: 75
- Registrado: Lun Jul 23, 2012 1:55 pm
Re: Scroll horizontal carácter a carácter
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!
Gracias!
-
- Herbert
- Mensajes: 75
- Registrado: Lun Jul 23, 2012 1:55 pm
Re: Scroll horizontal carácter a carácter
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.
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.
- climacus
- Sabreman
- Mensajes: 411
- Registrado: Mar Ago 25, 2009 1:46 pm
Re: Scroll horizontal carácter a carácter
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.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.
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
http://www.matranet.net/boutique/zx/zx.php
-
- Herbert
- Mensajes: 75
- Registrado: Lun Jul 23, 2012 1:55 pm
Re: Scroll horizontal carácter a carácter
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.
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.
- climacus
- Sabreman
- Mensajes: 411
- Registrado: Mar Ago 25, 2009 1:46 pm
Re: Scroll horizontal carácter a carácter
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.
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
http://www.matranet.net/boutique/zx/zx.php
-
- Herbert
- Mensajes: 75
- Registrado: Lun Jul 23, 2012 1:55 pm
Re: Scroll horizontal carácter a carácter
Muchas gracias de nuevo, climacus.
Pues sí, estoy intentando depurarlo. Es un tema de la pila, creo. Ahí sigo a ver si lo consigo.
Pues sí, estoy intentando depurarlo. Es un tema de la pila, creo. Ahí sigo a ver si lo consigo.
-
- Herbert
- Mensajes: 75
- Registrado: Lun Jul 23, 2012 1:55 pm
Re: Scroll horizontal carácter a carácter
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.
He intentado guardar el valor de 16 bits de sp pero no lo consigo.
- climacus
- Sabreman
- Mensajes: 411
- Registrado: Mar Ago 25, 2009 1:46 pm
Re: Scroll horizontal carácter a carácter
Yo para almacenar SP uso lo siguiente: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.
Código: Seleccionar todo
LD (STACK+1),SP
...............
................
................
.................
STACK LD SP,0
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
http://www.matranet.net/boutique/zx/zx.php
-
- Herbert
- Mensajes: 75
- Registrado: Lun Jul 23, 2012 1:55 pm
Re: Scroll horizontal carácter a carácter
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
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
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados