Compartinos en:

en English
$-USD
My account
0 $0.00
my cart: 0 item(s)- $0.00
In C64, Retro Game Dev 2022, Software, Tutorial

El BASIC de la C64 nos provee 2 instrucciones para ingresar información desde el teclado:

  1. INPUT : Para casos en los que queremos ingresar un nombre o un valor numérico
  2. GET : para cuando necesitamos detectar solo la pulsación de una tecla

Para lo que queremos hacer ahora vamos a utilizar el comando GET. El modo de uso es muy simple, solo toma como parámetro la variable en la que queremos que coloque el valor de la tecla pulsada.
Con este pequeño ejemplo vemos como funciona:

10 get a$
20 print a$;
30 goto 10

Si ejecutamos aparentemente no realiza nada, pero si pulsamos una tecla aparecera su correspondiente letra en la pantalla. Lo que esta haciendo aqui es un loop infinito en el que lee el valor de la tecla pulsada, lo imprime, y vuelve a leer, asi indefinidamente.
Con todo esto podemos hacer nuestro programita en el que controlamos una bola

10 px% = 10: py% = 10
20 a$ = ""
30 get a$ : if a$="" then 100
40 poke 1024+(py%*40)+px%,32
50 if a$="d" then px%=px%+1
60 if a$="a" then px%=px%-1
70 if a$="s" then py%=py%+1
80 if a$="w" then py%=py%-1
90 poke 1024+(py%*40)+px%,81
100 goto 30

Nuevamente definimos nuestras variables de posición, luego leemos el valor de la tecla pulsada, y si no se detecto ninguna salteamos la parte de código que mueve nuestro personaje.
Esto tal vez no tenga demasiado sentido en este ejemplo, pero en juegos mas complejos esta bueno que si no se pulsa ninguna tecla se puedan hacer otras cosas (no tiene sentido volver a imprimir el personaje en la misma posición)

En las siguientes lineas borramos la bola de la posición anterior (el caracter 32 es el Espacio), comprobamos si se pulsó alguna de las teclas W, A, S, D, e imprimimos la bola en la posición actualizada.
NOTA: se podria optimizar mucho más este ejemplo, pero a efectos didácticos vamos a mantenerlo simple.

Y así es como queda:

Agregando una cola que vaya guardando las posiciones anteriores podemos implementar un juego tipo Nibbles, o cualquier cosa que necesitemos mover por la pantalla
In C64, Retro Game Dev 2022, Software, Tutorial

Vimos en el post anterior que tenemos 2 formas de imprimir en pantalla: con el comando PRINT tradicional o directamente cargando valores en la memoria de video.

La memoria de video de la C64 se compone (simplificando mucho, para lo que queremos explicar) de una matriz de 40 columnas por 25 filas de caracteres, lo que nos da un total de 1000 caracteres. En cualquiera de estas posiciones podemos imprimir lo que deseemos, simplemente colocando el valor correcto.

La posición de memoria 1024 es el inicio de nuestra memoria de video. En ella se encuentra el caracter que corresponde a la esquina superior izquierda de la pantalla, y a medida que vamos incrementando esta posición los caracteres van llenando la pantalla.


Para muestra, vale este pequeño ejemplo:

10 for x = 0 to 1000
20 poke 1024 + x, 81
30 next

Aqui podemos ver como se va llenando la pantalla, de izquierda a derecha, las 1000 posiciones de la misma.


¿Y si queremos posicionar algo? Es muy sencillo, simplemente con esta formula:

m = 1024 + (40 * py) + px

Donde m es la posición de memoria, px es la columna y py es la fila donde queremos posicionar nuestro gráfico. Con toda esta información podemos escribir un pequeño programita que nos dibuja una pelota rebotando por la pantalla:

10 px% = 10: py% = 10: dx% = 1: dy% = 1
20 poke 1024+(py%*40)+px%,32
30 px% = px% + dx%
40 py% = py% + dy%
50 if px%=39 then dx% = -dx%
60 if px%=0 then dx% = -dx%
70 if py%=24 then dy% = -dy%
80 if py%=0 then dy% = -dy%
90 poke 1024+(py%*40)+px%,81
100 goto 20

px y py son la posición de la pelota; dx y dy su dirección.


Inmediatamente pintamos un espacio, porque si no lo hacemos la pelota nos dejará una estela de pelotas, luego incrementamos la posicion según la dirección en la que está yendo, hacemos las comprobaciones para que no salga de la pantalla, y finalmente imprimimos la pelota… y reinicia el ciclo.

Y el resultado es el siguiente… bueno, mas o menos, la captura de pantallas esta hecha a 15 cuadros (frames) por segundo, lo que hace que la pelota desaparezca un poco.

Partiendo de este código se puede realizar un clon de breakout o similar

En el próximo post vamos a ver como leer el teclado, ycontrolar con WASD nuestra bola

In C64, Retro Game Dev 2022

Para imprimir letras o los simbolos gráficos predefinidos en nuestra C64 tenemos 2 formas de hacerlo:

  1. con el comando PRINT de toda la vida
  2. accediendo directamente a la memoria de video

El comando PRINT nos permite imprimir una cadena de texto que le pasaremos entre comillas dobles
Ej: si tipeamos PRINT “HOLA MUNDO” nos imprime HOLA MUNDO en la pantalla, en la posición del cursor.

Es muy práctico cuando tenemos que imprimir texto, pero se puede llegar a complicar si queremos posicionar algo en la pantalla, ya que el BASIC de la C64 no tiene un comando para posicionar el cursor en la pantalla rapidamente.

Podemos, sin embargo, usar la instruccion SPC(n), que nos genera n espacios. No es exactamente para posicionar, pero podemos utilizarla para este fin en algunos casos, como por ejemplo:

1 rem carretera endiablada
10 x% = 10
20 a% = rnd(0) * 3 - 1
30 x% = x% + a%
40 if (x% > 28) then x% = 28
50 if (x% < 0) then x% = 0
60 print spc(x%); "o      o"
70 goto 20

Este pequeño programita de 7 líneas nos genera una carretera con scroll, como podemos ver en el siguiente video:

El programa es muy simple:
  • Las líneas 10-20 definen posición del camino y dirección que tomará (el signo % al lado de las variables las define como “integer” (o “número entero”, sin decimal), tener en cuenta porque si no por defecto son “float” ( o “número de punto flotante”, es decir, con decimal), y todas las operaciones son más lentas)
  • En la línea 30 ajusta la posición del camino según la dirección al azar que tomó.
  • En las líneas 40 y 50 se realizan comprobaciones para que no se salga de la pantalla.
  • La línea 60 imprime el camino.
  • … y finalmente vuelve a repetir el ciclo desde la línea 20, saltando a este punto con GOTO.

En el próximo post veremos como imprimir accediendo directamente a la memoria de video

In C64, Retro Game Dev 2022

Hola, mi nombre es Mauro Cifuentes, y vamos a realizar una serie de posteos en los que voy a ir mostrando lo que podemos hacer en el BASIC 2.0 de C64.
Para quien no la haya utilizado nunca, tiene algunas peculiaridades propias de una época en la que no habia nada estandarizado, tanto en el lenguaje como en la forma en que se introducen los programas.

En este primer post, mi intención es explicar alguna de esas peculiaridades para que el novato no se pierda al intentar tipear su primer programa.

Formato de texto

Como es muy probable que quien desee comenzar a programar en BASIC no tenga una C64 original, sino que lo haga a traves de un emulador (que por otra parte tiene innumerables ventajas para desarrollar) decidí escribir todos los ejemplos en minusculas, asi directamente pueden copiarlos con Ctrl-C y pegarlos en el emulador con Alt-Insert. Así, si tenemos un listado como el siguiente:

10 print "bienvenidos al curso ";
20 goto 10

si lo copiamos con Ctrl-C y lo pegamos en el emulador aparecerá así:

Como podemos ver, todas las minusculas en la C64 aparecen como mayusculas, y si en los textos yo escribo con mayusculas, en la C64 aparecerán simbolos graficos.
Por ejemplo, si el listado anterior lo paso a mayusculas:

10 PRINT "BIENVENIDOS AL CURSO ";
20 GOTO 10

y lo copio y pego en el emulador, nos aparecerá esto, que obviamente va a tirar un error:

por eso mismo, TODOS los listados que aparezcan estaran en minusculas, para que puedan copiarlos y pegarlos facilmente.

“Peculiaridades”

Como mencioné antes, la C64 tiene algunas particularidades para ingresar texto. Por ejemplo, por defecto SIEMPRE el modo de escritura es de sobreescribir, por lo que si ponemos el cursor sobre una linea con código ya escrito lo que tipeemos a partir de alli va a sobreescribir lo que estaba.

Otra particularidad es la apertura / cierre de comillas dobles (en la C64 no existen las comillas simples, por lo que a partir de ahora me voy a referir simplemente como comillas).
Por ejemplo: nosotros podemos mover libremente el cursor por la pantalla con las teclas de cursor, tambien podemos borrar toda la pantalla con la combinacion de teclas Shift+Home, o incluso podemos cambiar el color del cursor con las teclas CTRL+<número>, del 1 al 8 podemos seleccionar con que color queremos escribir en la pantalla.
PEEERO, si por alguna razon tipeamos una comilla veremos que si pulsamos los cursores, o Shift+Home o queremos cambiar el color del cursor nos salen caracteres “raros”, invertidos.
Ejemplo a continuación

Esto nos sirve para poner dentro de una instruccion PRINT los desplazamientos de caracteres, o colores, o borrar la pantalla. Una instruccion muy comun en otras computadoras para borrar la pantalla es CLS, pero en nuestra C64 tenemos que tipear lo siguiente:

El corazon invertido es lo que aparece cuando pulsamos Shift-Home. De la misma manera podemos “programar” posicionamientos de texto y secuencias de colores, por ejemplo:

este simple comando borra la pantalla, mueve el cursor 4 posiciones abajo y 4 a la derecha, en cada letra cambia el color del cursor, y “TEC” lo escribe en texto invertido, para finalmente setear el cursor en blanco para mejor legibilidad

Pasa exactamente lo mismo cuando insertamos texto. Previamente dijimos que por defecto lo que tipeamos sobreescribe lo que esta bajo el cursor.
Si queremos INSERTAR texto (por ejemplo, queremos modificar algo del código) necesitaremos insertar caracteres tantos como necesitemos (no tenemos un modo insert como en cualquier editor moderno) y allí podemos escribir.
Ejemplo:

Recursos

Emulador VICE:
https://vice-emu.sourceforge.io/index.html#download
BASIC 2.0:
https://www.c64-wiki.com/wiki/BASIC
https://www.c64-wiki.com/wiki/C64-Commands
https://www.c64-wiki.com/wiki/BASIC#Overview_of_BASIC_Version_2.0_.28second_release.29_Commands


X