¿Cómo puedo desplazarme hacia arriba o hacia abajo desde Basic?

Una dirección es sencilla: locate 1,25:print. Pero, ¿cómo puedo hacer scroll hacia arriba o incluso lateralmente sin POKE e idealmente sin CALL? (¿Acaso esto último es posible?).

Mi demo va bastante avanzada, actualmente con 8 efectos en “BASIC puro” :slight_smile:

Puedes usar el código de control 11 para mover el cursor hacia arriba. Si esto ocurre en el límite de una ventana, el contenido de la misma se desplazará suavemente (soft-scroll). Si no has especificado ninguna ventana, se desplazará toda la pantalla si tu cursor está ubicado en la primera línea de la misma.

El desplazamiento suave lateral (hasta donde sé) no funcionará en BASIC, pero podrías usar el desplazamiento por hardware utilizando los registros del CRTC con comandos OUT.

1 me gusta

Los comandos Out a los registros del CRTC son generalmente la forma de hacerlo. No veo por qué eso no se consideraría «pure basic».

1 me gusta

Es simplemente una “manía” mía :wink:
¿O qué tal están Peek y Poke?
En realidad también son de BASIC —y así es como se explican los sprites, etc., en el C64.
Pero de eso se trata precisamente para mí: de mostrar lo que es posible sin rutinas “puramente internas”, es decir, las cosas que los desarrolladores hacen accesibles directamente mediante comandos.

Out está realmente en un punto medio, ya que es un medio de comunicación.
Call es una llamada directa a una rutina interna. Por desgracia, hasta ahora, no puedo evitarlo del todo…

En la C64 puedes hacer poke directamente en los registros. En el CPC, un poke solo cambiará los datos en la RAM, pero no modificará ningún registro. Para eso tendrás que usar OUT.

Claro, sigue siendo un comando de BASIC, pero al usar OUT estás manipulando el hardware directamente y tienes que entender qué está pasando, ya que BASIC no va a compensar tus acciones. Por ejemplo, la posición de la pantalla cambiará y un LOCATE 1,1 tendrá una posición diferente en la pantalla después de hacer scroll mediante OUT. A eso me refería.

¡Lo de chr 11 funciona genial! Con eso realmente se puede hacer algo. :slight_smile:

Y un último truco rápido: puedes pulsar CONTROL+K en el teclado para introducir el código de control 11 dentro de una cadena de texto (String). En lugar de print chr$(11), tendrás print “↑” en tu código, lo cual es un poco más rápido que chr$.

1 me gusta

Probablemente esto vaya a la versión final. Programo en el PC con un editor de texto, así que se hace un poco más difícil.
Pero lo que ya tengo tiene buena pinta :slight_smile: