Hola a todos,
a colación del hilo que hizo Bubu sobre cómo crear los laberintos del Berzerk; me dio la tontuna y me puse a probar a hacer algo parecido a Berzerk en Spectrum. No sé programar en ensamblador y, como lo quiero escribir directamente en el spectrum (en el zxuno) no puedo usar Z88dk. He hecho alguna prueba y el pintado en pantalla, a base de PRINT AT, es lento. Muy lento. Hace la torta de años me pareció leer que se podía escribir en pantalla con POKE (moviendo valores directamente a la memoria de video, supongo). He bicheado por internet y no he visto cómo escribir un UDG o un carácter normal. Por ejemplo escribir una X en una fila/columna determinada... una especie de PRINT AT con POKE, que supongo que será más rápido... ¿Se puede hacer? ¿Alguna pista?
Muchas gracias!
Saludos.
ZX Spectrum: escribir en pantalla con POKE
-
- Amstrad PCW 8256
- Mensajes: 150
- Registrado: 05 Oct 2012, 17:42
- Sistema Favorito: Commodore Amiga
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Nintendo GameBoy
- Primera consola: Atari 2600
- Gracias dadas: 8 veces
- Gracias recibidas: 2 veces
- Bubu
- Atari 1040 STf
- Mensajes: 895
- Registrado: 04 Abr 2018, 23:10
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Atari 2600
- Primera consola: Nintendo GameBoy
- Gracias dadas: 21 veces
- Gracias recibidas: 67 veces
Re: ZX Spectrum: escribir en pantalla con POKE
¡Buen día, oscarbraindead!
Lo que vas a hacer es muy chuli y me encantaría verlo evolucionar. Bueno, dices que PRINT AT es muy leeeeento, pero es porque... ¡¡todo en BASIC es leeeeento!! Y no, no hay ninguna forma de hacer un POKE y que te escriba direstamente en pantalla un dibujo o GDU. Y es que la pantalla del Spectrum no está basada en tilesets, sino en scanlines, quiere decir esto que para pintar un carácter o GDU en Spectrum hay que meter en memoria una a una las 8 scanlines, sí o sí. Pero p.ej. en Gameboy tú metes el número 25 en la VRAM, y ya te dibuja el dibujo nº 25, porque antes has definido en otra zona de memoria que el 25 es tal dibujo.
En fins, que no hay manera. De todas formas yo creo que dibujar el laberinto es bastante rápido en BASIC, ¿nor? ¿o lo que tú quieres hacer es el juego completo y que el personaje y los robots se desplacen al píxel?
Lo que vas a hacer es muy chuli y me encantaría verlo evolucionar. Bueno, dices que PRINT AT es muy leeeeento, pero es porque... ¡¡todo en BASIC es leeeeento!! Y no, no hay ninguna forma de hacer un POKE y que te escriba direstamente en pantalla un dibujo o GDU. Y es que la pantalla del Spectrum no está basada en tilesets, sino en scanlines, quiere decir esto que para pintar un carácter o GDU en Spectrum hay que meter en memoria una a una las 8 scanlines, sí o sí. Pero p.ej. en Gameboy tú metes el número 25 en la VRAM, y ya te dibuja el dibujo nº 25, porque antes has definido en otra zona de memoria que el 25 es tal dibujo.
En fins, que no hay manera. De todas formas yo creo que dibujar el laberinto es bastante rápido en BASIC, ¿nor? ¿o lo que tú quieres hacer es el juego completo y que el personaje y los robots se desplacen al píxel?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!
- chernandezba
- MSX Turbo R
- Mensajes: 264
- Registrado: 11 Mar 2015, 10:42
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: ZX81
- consola_favorita: NeoGeo
- Primera consola: Atari 2600
- Gracias dadas: 13 veces
- Gracias recibidas: 167 veces
Re: ZX Spectrum: escribir en pantalla con POKE
Si sólo vas a usar basic, lo mas rápido sin lugar a dudas, es el print, no hay mas que eso
Si pretendes escribir en pantalla en basic mediante pokes, va ser horriblemente lento
Supongo que sabes que tienes unos cuantos udg definibles (desde la letra A a la U) si no recuerdo mal, que te permite crear tus propios gráficos de 8x8 para usar con Print.
Luego ten en cuenta que las lineas de programa en basic se ejecutan siempre mas rápido las primeras que las últimas, básicamente porque para saltar a una línea concreta tiene que seguir una a una, todas las anteriores, hasta llegar a la indicada. Por tanto esos print , para que vayan lo mas rápido posible, es conveniente meterlos en las primeras lineas del basic
Incluso sin dejar de usar basic, podrías utilizar alguno de los compiladores de basic que te compilan a código máquina, como el de Hisoft:
http://www.worldofspectrum.org/infoseek ... id=0008249
Esto te permite acelerar tu programa entre 3 o 4 veces mas rápido, para que te hagas una idea, pero lógicamente depende del tipo de programa, se podrá optimizar y acelerar mas o no.
Estas pruebas tuyas me recuerdan a muchos de nosotros hace años, empezando a conocer el Spectrum y aprender Basic. Pero luego te dabas cuenta que el basic tiene limitaciones (de velocidad, principalmente) que hacía que acabases aprendiendo assembler para superar esas limitaciones, cosa que te recomiendo....
Saludos
Si pretendes escribir en pantalla en basic mediante pokes, va ser horriblemente lento
Supongo que sabes que tienes unos cuantos udg definibles (desde la letra A a la U) si no recuerdo mal, que te permite crear tus propios gráficos de 8x8 para usar con Print.
Luego ten en cuenta que las lineas de programa en basic se ejecutan siempre mas rápido las primeras que las últimas, básicamente porque para saltar a una línea concreta tiene que seguir una a una, todas las anteriores, hasta llegar a la indicada. Por tanto esos print , para que vayan lo mas rápido posible, es conveniente meterlos en las primeras lineas del basic
Incluso sin dejar de usar basic, podrías utilizar alguno de los compiladores de basic que te compilan a código máquina, como el de Hisoft:
http://www.worldofspectrum.org/infoseek ... id=0008249
Esto te permite acelerar tu programa entre 3 o 4 veces mas rápido, para que te hagas una idea, pero lógicamente depende del tipo de programa, se podrá optimizar y acelerar mas o no.
Estas pruebas tuyas me recuerdan a muchos de nosotros hace años, empezando a conocer el Spectrum y aprender Basic. Pero luego te dabas cuenta que el basic tiene limitaciones (de velocidad, principalmente) que hacía que acabases aprendiendo assembler para superar esas limitaciones, cosa que te recomiendo....

Saludos
- Bubu
- Atari 1040 STf
- Mensajes: 895
- Registrado: 04 Abr 2018, 23:10
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Atari 2600
- Primera consola: Nintendo GameBoy
- Gracias dadas: 21 veces
- Gracias recibidas: 67 veces
Re: ZX Spectrum: escribir en pantalla con POKE
Esta parte no la entiendo yo:
Eso es como decir que un coche que va a 100Km/h recorre más rápido el 1er kilómetro que el 2º. No, lo que hace es que lo recorre antes, pero no más rápido, ¿nor?
oscarbraindead, ¿tú lo que quieres hacer en BASIC es sólo dibujar los laberintos, o hacer el juego entero? Si es el laberinto solamente, PRINT te irá de lujo. Si es el juego entero, tendrás que tener en cuén que los muñecos, disparos, etc, se moverán de 8 en 8 píxeles, useáse, que van a dar saltos los sprites, y así PRINT tamién te irá de lujo.
chernandezba escribió:Luego ten en cuenta que las lineas de programa en basic se ejecutan siempre mas rápido las primeras que las últimas, básicamente porque para saltar a una línea concreta tiene que seguir una a una, todas las anteriores, hasta llegar a la indicada. Por tanto esos print , para que vayan lo mas rápido posible, es conveniente meterlos en las primeras lineas del basic
Eso es como decir que un coche que va a 100Km/h recorre más rápido el 1er kilómetro que el 2º. No, lo que hace es que lo recorre antes, pero no más rápido, ¿nor?
oscarbraindead, ¿tú lo que quieres hacer en BASIC es sólo dibujar los laberintos, o hacer el juego entero? Si es el laberinto solamente, PRINT te irá de lujo. Si es el juego entero, tendrás que tener en cuén que los muñecos, disparos, etc, se moverán de 8 en 8 píxeles, useáse, que van a dar saltos los sprites, y así PRINT tamién te irá de lujo.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!
-
- Amstrad PCW 8256
- Mensajes: 150
- Registrado: 05 Oct 2012, 17:42
- Sistema Favorito: Commodore Amiga
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Nintendo GameBoy
- Primera consola: Atari 2600
- Gracias dadas: 8 veces
- Gracias recibidas: 2 veces
Re: ZX Spectrum: escribir en pantalla con POKE
Hola a todos,
perdonad por no haber contestado antes... os he leído pero no podía escribir.
Lo que he comenzado e intento hacer es el juego completo, en BASIC. Tendrá, como ha apuntado Bubu, que moverse de 8 en 8 píxeles...
Miraré los compiladores que indica chernandezba porque con el intérprete del Spectrum, malamente... ya lo usé en su día y, aunque no era un bólido, me pareció un poco más rápido. También puede ser que yo haya empeorado programando desde hace 30 y pico años...
Decididamente, probaré el compilador de Hisoft a ver qué consigo y os cuento. Si la mejora de velocidad respecto al intérprete es de 3 ó 4 veces, creo que sería más que suficiente.
¡Os mantendré informados de los retrocesos del juego! ¡Jajajajaj!
¡Muchas gracias!
perdonad por no haber contestado antes... os he leído pero no podía escribir.
Lo que he comenzado e intento hacer es el juego completo, en BASIC. Tendrá, como ha apuntado Bubu, que moverse de 8 en 8 píxeles...
Miraré los compiladores que indica chernandezba porque con el intérprete del Spectrum, malamente... ya lo usé en su día y, aunque no era un bólido, me pareció un poco más rápido. También puede ser que yo haya empeorado programando desde hace 30 y pico años...
Decididamente, probaré el compilador de Hisoft a ver qué consigo y os cuento. Si la mejora de velocidad respecto al intérprete es de 3 ó 4 veces, creo que sería más que suficiente.
¡Os mantendré informados de los retrocesos del juego! ¡Jajajajaj!
¡Muchas gracias!
-
- Amiga 1200
- Mensajes: 1489
- Registrado: 07 Nov 2009, 11:38
- Sistema Favorito: C64
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Nintendo SNES
- Primera consola: Nintendo SNES
- Ubicación: Madrid
- Gracias dadas: 14 veces
- Gracias recibidas: 244 veces
Re: ZX Spectrum: escribir en pantalla con POKE
Luego está el Boriel ZXBasic, un programa de PC que tengo yo también pendiente probar, y que genera también código máquina Z80 ejecutable en un Spectrum. Al ser externo, no tienes las restricciones de memoria y tamaño máximo de programa que te podrías encontrar al cargar un compilador en la máquina real. Además, se integra bien con los emuladores y entre compilar y lanzar lo compilado tarda 2 segundos.
- explorer
- MSX Turbo R
- Mensajes: 444
- Registrado: 11 May 2014, 17:10
- Sistema Favorito: Atari ST
- primer_sistema: Atari 800XL/600XL
- consola_favorita: Atari 2600
- Primera consola: Atari 2600
- Ubicación: Valladolid, España
- Gracias dadas: 2 veces
- Gracias recibidas: 162 veces
- Contactar:
Re: ZX Spectrum: escribir en pantalla con POKE
Y si se hiciera una pequeña rutina que imitara ese POKE, ¿sería más rápida que el PRINT AT?
La podría meter en el programa en BASIC con los clásicos DATA, READ...
La podría meter en el programa en BASIC con los clásicos DATA, READ...
-
- Amstrad PCW 8256
- Mensajes: 150
- Registrado: 05 Oct 2012, 17:42
- Sistema Favorito: Commodore Amiga
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Nintendo GameBoy
- Primera consola: Atari 2600
- Gracias dadas: 8 veces
- Gracias recibidas: 2 veces
Re: ZX Spectrum: escribir en pantalla con POKE
BlackHole escribió:Luego está el Boriel ZXBasic, un programa de PC que tengo yo también pendiente probar, y que genera también código máquina Z80 ejecutable en un Spectrum. Al ser externo, no tienes las restricciones de memoria y tamaño máximo de programa que te podrías encontrar al cargar un compilador en la máquina real. Además, se integra bien con los emuladores y entre compilar y lanzar lo compilado tarda 2 segundos.
Sí, el ZXBasic de Boriel lo he probado un poco y está muy bien, pero la idea es hacerlo directamente desde el spectrum/zxuno...
explorer escribió:Y si se hiciera una pequeña rutina que imitara ese POKE, ¿sería más rápida que el PRINT AT?
La podría meter en el programa en BASIC con los clásicos DATA, READ...
Sería una posibilidad aunque se escapa a mi conocimiento y no sé el rendimiento cómo mejoraría.
Gracias por las ideas!
Como curiosidad he zascandileado un poco con el HiSoft Basic. Un programa que itera del 0 al 2000 con un FOR y escribe en pantalla el número por el que va con PRINT AT, en BASIC sin compilar tarda 37 segundos, una vez compilado lo realiza en 22 segundos.
No está mal...
- Bubu
- Atari 1040 STf
- Mensajes: 895
- Registrado: 04 Abr 2018, 23:10
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Atari 2600
- Primera consola: Nintendo GameBoy
- Gracias dadas: 21 veces
- Gracias recibidas: 67 veces
Re: ZX Spectrum: escribir en pantalla con POKE
Efestivamente eso sería más rápido, pues la nueva rutina no tendría que hacer los tediosos chequeos de números, sintaxis, etc, que sí hace el intérprete BASIC, pero la idea de oscarbraindead era usar sólo el BASIC, no el ensamblador. por cierto, hace poco el compi IvanZx me descubrió esta maravilla:
https://www.youtube.com/watch?v=3uJjLeSnOzo
Tela marinera. Lo que pasa es veo la máquina mucho más difícil que este clon, nu sé por qué.
oscarbraindead, yo creo que lo primero que tendrías que hacer es diseñar el apartado gráfico, y a partir de ahí ya pogramar en el lenguaje que sea. Respecto a la rutina de pintar, te podría preparar como dice explorer un PRINT murrápido en código máquina, pero nu sé si es lo que quieres, o prefieres currártelo tú en BASIC, tú dirás
El PRINT murrápido funcionaría de la siguiente manera:
donde X=fila, Y=columna, N=carácter del tileset
https://www.youtube.com/watch?v=3uJjLeSnOzo
Tela marinera. Lo que pasa es veo la máquina mucho más difícil que este clon, nu sé por qué.
oscarbraindead, yo creo que lo primero que tendrías que hacer es diseñar el apartado gráfico, y a partir de ahí ya pogramar en el lenguaje que sea. Respecto a la rutina de pintar, te podría preparar como dice explorer un PRINT murrápido en código máquina, pero nu sé si es lo que quieres, o prefieres currártelo tú en BASIC, tú dirás

El PRINT murrápido funcionaría de la siguiente manera:
Código: Seleccionar todo
POKE 60000, X
POKE 60001, Y
POKE 60002, N
RANDOMIZE USR 60003
donde X=fila, Y=columna, N=carácter del tileset
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!
- Namek
- Atari 1040 STf
- Mensajes: 840
- Registrado: 11 Jul 2011, 13:13
- Gracias dadas: 18 veces
- Gracias recibidas: 63 veces
Re: ZX Spectrum: escribir en pantalla con POKE
Bubu escribió:Efestivamente eso sería más rápido, pues la nueva rutina no tendría que hacer los tediosos chequeos de números, sintaxis, etc, que sí hace el intérprete BASIC, pero la idea de oscarbraindead era usar sólo el BASIC, no el ensamblador. por cierto, hace poco el compi IvanZx me descubrió esta maravilla:
https://www.youtube.com/watch?v=3uJjLeSnOzo
Tela marinera. Lo que pasa es veo la máquina mucho más difícil que este clon, nu sé por qué.
oscarbraindead, yo creo que lo primero que tendrías que hacer es diseñar el apartado gráfico, y a partir de ahí ya pogramar en el lenguaje que sea. Respecto a la rutina de pintar, te podría preparar como dice explorer un PRINT murrápido en código máquina, pero nu sé si es lo que quieres, o prefieres currártelo tú en BASIC, tú dirás
El PRINT murrápido funcionaría de la siguiente manera:Código: Seleccionar todo
POKE 60000, X
POKE 60001, Y
POKE 60002, N
RANDOMIZE USR 60003
donde X=fila, Y=columna, N=carácter del tileset
Llamadme loco, pero me da a mi que 3 POKEs y un RANDOMIZE USR van a tardar casi lo mismo que un PRINT AT...

¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados