Retrogames.cl
Página principal Sección Atari Articulos para leer

Proyectos y modificaciones de hardware

Clases elementales RG, su gente y actividades

El foro más antiguo de Chile

Un lugar para recordar

_a

_/|\_
ATARI
B.A.S.I.C.

Por ZZT

En esta sección repasaremos el lenguaje BASIC, que no significa básico, sino Beginner's All-purpose Symbolic Instruction Code o Código de instrucciones simbolicas de porpósito general para principiantes. Leyendo esa descripción, podemos afirmar que es un lenguaje orientado principalmente a estudiantes o personas autodidactas.

Hay que aclarar que Basic no es exclusivo de Atari, ya que muchas marcas de microcomputadores lo incluían de fábrica. Con algunas sutiles diferencias, todos hacían casi lo mismo. Lo importante aquí es la SINTAXIS, que es orden de como se ingresan los nombres y datos, osea, como debemos comunicarnos con la máquina. Esto no es como en la película WarGames donde le preguntan directamente a la computadora WORP "si quiere jugar o como la está pasando" o como cuando en Viaje a las Estrellas IV, Scotty trata de comunicarse hablandole a la computadora en la fábrica de plexiglás, que era una Apple. :D

Dicho esto, debemos dejar bien claro que esta sección solo pretende ayudarnos a recordar esos maravillosos años en que eramos jovenes, o niños, y enfrentabamos nuestro Atari más allá de jugar Montezuma. Ahora si ud. aprende a programar, bienvenido sea. :)

a

CAPITULO 1

Matemáticas/Calculadora

Quizas una de las funciones más desconocidas y simples de los Atari es que se pueden realizar operaciones matemáticas sin necesidad de hacer un programa ni tener conocimientos avanzados de programación, incluso de uso de microcomputadores.
La sintaxis para utilizar esta funciones son: primero se debe escribir PRINT, seguido de la función y entre paréntesis el número. Para ejecutar y obtener el resultado presionar [RETURN]
A continuación veremos ejemplos:

a

I-Matemática básica

PRINT (2+2)
4

PRINT 2+2
4

PRINT 2-2
0

PRINT 2*2
4

PRINT 2/2
1

Como vemos en el primer ejemplo se usa paréntesis para los operandos y en los siguentes no. En el caso de matemáticas básicas no son necesarios, pero para cálculos más complejos o como veremos más adelante con funciones aritméticas y trigonométricas son obligatorios.

TIP: Recomiendo a los que tiene hijos menores de 10 años repasen estas básicas instrucciones con ellos. Es muy entretenido y les acercaran un pasito al mundo de la informática.

TIP: también existen los operadores < (menor que), > (mayor que) y ^ (elevado a). Los veremos más adelante.

a

II-Funciones aritméticas

ABS

ABSolute, entrega el valor absoluto de un número sin importar si es positivo o negativo

PRINT ABS(-45)

Resultado 45

CLOG

Common LOGarithm (logaritmo común). Entrega el valor logarítmico del número ingresado

PRINT CLOG (2)

Resultado 0.301029995

EXP

EXPonential, (exponencial). Entrega el valor de 2.71828179 elevado a la potencia indicada entre paréntesis

PRINT EXP(2)

Resultado 7.38905599

INT

INTeger, entrega un número entero, si éste contiene decimales los elimina. El redondeo siempre es hacia abajo.

PRINT INT(3.1416)

Resultado 3

LOG

LOGaritmo natural, entrega el logaritmo del valor indicado entre paréntesis

PRINT LOG(10)

Resultado 2.30258509

RND

RaNDomize, entrega un número al azar. Su sintaxis es un poco más compleja que las anteriores RND(0)*X, donde X es el número máximo al cual deseamos llegar.

PRINT RND(0)*10

Resultado: un número entre 0 y 10 con decimales. Para eliminar los decimales o redondear (o enterar) se usa INT(RND(0)*10)

SGN

SiGN. Entrega el signo -1 si el resultado será negativo, un 0 si será cero y 1 si será positivo

PRINT SGN(-7) PRINT SGN(7) PRINT SGN(7-7)

Resultado -1 Resultado 1 Resultado 0

SQR

SQuaRe root, entrega la raiz cuadrada del número entre paréntesis

PRINT SQR(10)

Resultado 3.16227766

Tip: Recordemos que el punto decimal es el punto, no la coma.

a

III-Funciones trigonométricas

ATN

ArcTanGent (arcotangente). Entrega el valor arcotangente del número entre paréntesis

PRINT ATN(10)

Resultado 1.47112767

COS

COSine (coseno). Entrega el coseno del número entre paréntesis

PRINT COS(10)

Resultado -0.83907215

SIN

SINe (seno). Entrega el seno del número entre paréntesis

PRINT SIN(10)

Resultado -0.544020157

DEG Y RAD

DEGrees - RADians. permite indicarle al Atari se deseamos que calcule en grados o radianes. Se utiliza en modo directo.

Para grados

DEG [RETURN]

Para radianes

RAD [RETURN]

El Atari esta seteado para radianes por defecto. Si se especifica RAD, quedará así hasta que se ingrese DEG nuevamente.

¿Quién dijo que la matemática era fácil o entretenida? Bueno, lamentablemente es necesario repasar esto primero, ya que la idea es ir escalando dificultades, lo cual permite acometer tareas más complejas a futuro.

A

CAPITULO 2

Comandos

Ahora revisaremos algunos comandos que son de vital importancia para programar.

I-Comandos básicos

LIST
Muestra el listado del programa.

NEW
Borra el programa que escribimos (cuidado con este comando! Atari no tiene papelera de reciclaje).

RUN
Una vez tenemos un programa listo, para que funcione debemos escribir RUN (correr).

BYE
Se va al SELF TEST y se borra el programa, sin posibilidad de recuperación.

a

II-Comandos especiales

PRINT FRE(0)
Indica la cantidad de memoria RAM que queda disponible.

PEEK(X)
Entrega el valor de la posición de memoria indicada entre paréntesis

PEEK(710)
148
La posición 710 controla el color de fondo de la pantalla, en este caso 148 es el azul que todos recordamos

POKE A,B
Guarda en la posición de memoria A el valor B

POKE 710,0 [RETURN]

Después de ejecutar veremos que la pantalla se a puesto negra, pues al ingresar el cero en la posición 710 corresponde al color negro.
Si desea explorar o divertirse, ingrese otros valores y vea los colores generados. El Nº debe ser entre 0 y 255.

No tenga miedo de usar el comando POKE! Las direcciones de memoria modificadas están grabadas en la ROM del Atari y cada vez que se apague y encienda volveran a la normalidad.

TIP: El color de las letras se controla con la posición 709 y el margen la 712. Si desea volver a la pantalla original pero no recuerda los valores originales, escriba GR.0 o simplemente presione [RESET].

NOTA: Si ud. no posee casetera, disketera o impresora, salte al CAPITULO 3.

a

III- Comandos de casetera y disketera

TIP: Para utilizar la disketera debe tener un diskete que contenga los programas DOS.SYS y DUP.SYS. El orden correcto es:
Encender la disketera==> Ingresar el disco con DOS (cerrar el pasador)==> Encender el Atari. Con eso el Atari sabrá comunicarse con la disketera, ya que su sistema operativo contenido en la ROM no puede hacerlo por si solo. Solo la casetera puede operarse sin sistema operativo ya que la ROM si tiene las rutinas de comunicación con ella.

CSAVE
Graba el programa en la casetera

CLOAD
Carga un programa desde la casetera

SAVE"D:ATARI.BAS"
Graba en la disketera el programa que hemos tipeado y le pone el nombre ATARI.BAS. El nombre puede contener solo letras mayúsculas y un número pero no comenzar con número.

ATARI1.BAS = válido
1ATARI.BAS = error
1aTaRi.Bas = error

La extensión (.BAS) puede contener números o letras sin importar el orden, incluso no es necesaria. Claro que a veces ocho caracteres eran muy pocos para detallar claramente que hace el programa que grabamos. Por ejemplo, si a nuestro programa que ordena palabras le ponemos "HOLA1" .... y después de un tiempo revisamos el diskete y .... ¿que diablos hará HOLA1? En ese caso es mejor "ORDENA.PAL". ¿no?

TIP: El Atari puede manejar hasta 4 disketeras. Cuando hay una sola no es necesario especificar D1: pero es igual de válido que D:
La extención se utiliza para recordar si el archivo es BASIC=BAS ASSEMBLER=ASM COMPILADO=COM EXECUTABLE=EXE. No hay asociación de archivos como en windows!

LOAD"D:ATARI.BAS
Carga desde la disketera el programa ATARI.BAS. Los programas grabados en diskete no se pueden alterar a menos de sobreescribirlos (grabando un nuevo programa con el mismo nombre). Claro que también existen los terribles CRC, errores físicos de escritura que dejan inutilizable el disco. Por eso siempre era una buena medida de seguridad grabar el programa en otro disco.

TIP: Si ud. quiere cargar un programa previamente grabado y no recuerda el nombre, escriba DOS y se ejecutará el menú contenido en el diskete. Ahi encontrará multiples funciones, como ver el directorio (opción A). Para volver al Basic la opción B. Más adelante revisaremos en extenso todas las opciones del DOS.
*Recuerde que ir al DOS automáticamente borra el programa que esta escribiendo (guárdelo antes!).

LPRINT
Indica a la impresora (si es que esta conectada) que imprima el listado del programa.

a

CAPITULO 3

Instrucciones


Bien, revisamos lo más básico y comenzaremos a revisar instrucciones de programación. No las veremos en orden alfabético, sino de menor a mayor complejidad. Recordemos que después de cada instrucción hay que presionar [RETURN], sino, el Atari hará nada.

REMember (recuerda). Es una instrución muy importante y sin embargo hace nada! Solo nos recuerda que es lo que hace cierta parte del programa o un mensaje.

10 REM PROGRAMADO JULIO 2013

10 REM INICIO DE PROGRAMA
REM es un recordatorio que nos permite mantener un programa ordenado y entendible por cualquiera, pero ojo: consume memoria.

PRINT "" (Imprime). Esta instrucción imprime en la pantalla lo que se encuentre entre comillas.

PRINT "ATARI"
Esto imprime la palabra Atari inmediatamente. Si queremos que la palabra aparezca en un lugar especifico debemos usar la instrucción POSITION.

PRINT X
Si dentro de un programa hay una variable llamada X, se imprimirá su valor numérico.

POSITION X,Y (posición). Con position se asignan coordenadas de pantalla donde queremos ubicar el cursor, una palabra o texto. La X equivale a las columnas y la Y a las filas. La pantalla se divide en 40 columnas por 24 filas, por lo tanto los valores deben estar entre 0 y 39 para X y entre 0 y 23 para Y.

POSITION 1,5: PRINT ¨HOLA¨
Esto imprimirá la palabra HOLA en la columna 1 fila 5.

TIP: Cuando se desean juntar dos (o más) instrucciones en una misma linea se hace separandolas con el simbolo dos puntos (:).

GRAPHICS (gráficos) El Atari posee 15 modos graficos, la mayoría orientado a juegos. El modo normal de texto es el GRAPHICS 0 ó gráfico 0 ó simplemete GR.0.

GR.0
Borra todo lo que hay en pantalla. Es muy útil ya que si tenemos la pantalla llena de textos y queremos limpiarla éste el método más fácil. Esta instrucción NO borra el programa de la memoria, solo deja limpia la pantalla.

SOUND A,B,C,D (sonido). El Atari puede generar muchos sonidos, pero hay que saber como obtenerlos. Lo más básico es ésta instrucción, la cual con los valores A,B,C,D generará sonidos.
-A es uno de los cuatro canales disponibles valor entre (0 y 3)
-B es la nota, valor entre 0 y 255
-C es la distorsión que se le puede asiganar a la nota, valor entre 0 y 14
-D es el volumen al que sonará la nota, valor entre 1 y 15 (1 es el más despacio, 15 el más fuerte)

SOUND 1,100,10,10
Esto causará que el Atari comienze a emitir un pitido. Para terminarlo escriba SOUND 1,0,10,10 ó END ó presione [RESET]

END (fin) Finaliza lo que el Atari esté ejecutando. Si hay sonido, lo apaga. Si hay ejecución de programa, lo detiene, etc.

CONT (continuar). En el caso que un programa se haya detenido por el uso de la tecla [BREAK] o por algún error de programación, con esta instrucción se puede forzar la reanudación a pesar de los errores.

FOR / NEXT (para / siguiente). For next es lo que se conoce como un loop, osea, un lazo o circulo cerrado que no finaliza hasta que se complete el ciclo.

FOR X=A TO B:NEXT X
Crea un contador: para X asigne el valor desde A hasta B antes de parar.

FOR X=1 TO 200:NEXT X
Si lo ejecutamos, veremos que el Atari demora alrededor de un segundo en devolver READY, indicando que ejecutó la instrucción (contar desde 1 hasta 200).

Agreguemos un PRINT:

FOR X=1 TO 200:PRINT X: NEXT X
Si lo ejecutamos, veremos que el Atari imprime un listado con el valor de X, osea, desde 1 a 200.

FOR X=1 TO 200:PRINT X,: NEXT X
Aca en la instrucción PRINT X agregamos una coma después de PRINT X y veremos los numeros tabulados.

FOR X=1 TO 200:PRINT X;: NEXT X
Si en vez de la coma ponemos punto y coma, los numeros saldrán pegados unos con otros.

Estas sencillas modificaciones pueden ser triviales, pero tienen importancia. Al ir aumentando la complejidad más habilidad se gana.

TIP: En el caso de repetir un ciclo FOR/NEXT el primer valor para X vuelve a ser el primero (1 en este caso)

IF / THEN (si / entonces) If /then son super importantes para capturar condiciones y derivar el programa por distintos caminos.

IF X=200 THEN END
SI X es igual a 200 entonces finalize.

GOTO (vaya a). Es una manera de desviar el programa por distintas opciones.
IF X=200 THEN GOTO 1000
SI X es igual a 200 entonces vaya a la línea 1000.

GOSUB (vaya a subrutina). Es otra manera de desviar el programa, pero en este caso es más útil cuando es una rutina que se ocupe varias veces, asi no tenemos que repetir código que nos consuma más memoria. En la subrutina, después de la última instrucción, se debe escribir RETURN, para que el Atari vuelva a la línea de donde se hizo el GOSUB.

10 FOR X=1 TO 200
20 IF X=100 THEN GOSUB 1000
30 NEXT X
40 GOTO 10
1000 PRINT ¨LLEGUE A 100"
1001 RETURN

READ/DATA (lee/datos). Read lee los datos almacenados en una línea bajo la instrucción DATA. Si no hay una instrucción RESTORE que indique una línea específica el Atari tomará los datos desde la primera línea disponible.

TRAP (trampa). Esta instrucción se coloca en una línea donde pueden suceder errores, por ejemplo si se necesita ingresar datos numéricos y se ingresa un caracter (letra) se produce un error, que sin TRAP hará que el programa se detenga.

TRAP 100
Enviara el programa a la línea 100 si se produjo un error.

Vamos progresando, en el siguiente capítulo veremos ejemplos más concretos de FOR/NEXT IF/THEN GOTO GOSUB

a

CAPITULO 4

Programación

Cuando se tipea un programa se debe asignar un Nº de línea, que puede estar entre 0 y 65535. Además se debe escribir con mayúsculas (minúsculas o caracteres inversos son rechazados) y por supuesto no olvidar [RETURN] para que la línea sea ingresada a la RAM.
Aca veremos una serie de ejemplos de uso de las instrucciones REM FOR/NEXT IF/THEN GOTO GOSUB/RETURN

1 REM PROGRAMADO POR ZZTOP 2013
2 REM INICIO DE PROGRAMA
3 FOR X=1 TO 255
4 PRINT X
5 NEXT X

Mensaje del autor
Mensaje dejando claro que es el verdadero inicio del programa
Para X asigne un valor desde 1 a 255 (primer valor 1 último 255)
Imprima en pantalla el valor de X
El Atari vuelve automáticamente a la línea 3 donde esta el FOR y pasa al sgte. valor (2) y asi repetirá este ciclo hasta completar 255 y con esto finaliza el programa.

1 REM PROGRAMADO POR ZZTOP 2013
2 REM INICIO DE PROGRAMA
3 FOR X=1 TO 255
4 PRINT X
5 NEXT X

6 GOTO 3

Mensaje del autor
Mensaje dejando claro que es el verdadero inicio del programa
Para X asignele un valor desde 1 a 255 (primer valor 1)
Imprima en pantalla el valor de X
El Atari vuelve automáticamente a la línea 3 donde esta el FOR y pasa al sgte. valor (2) y asi repetirá este ciclo hasta completar 255 y liberarse el FOR/NEXT
Ahora agregamos un GOTO 3, de tal forma que el ciclo se vuelve a repetir, indefinidamente.

Para finalizar presionar [BREAK]

1 REM PROGRAMADO POR ZZTOP 2013
2 REM INICIO DE PROGRAMA
3 FOR X=1 TO 255
4 PRINT X
4 IF X=100 THEN GOTO 100
5 NEXT X

6 END

100 PRINT "SUFICIENTE CON 100"
101 END








100 POP
101 PRINT "SUFICIENTE CON 100"
102 GOTO 3

Mensaje del autor
Mensaje dejando claro que es el verdadero inicio del programa
Para X asignele un valor desde 1 a 255 (primer valor 1)
Imprima en pantalla el valor de X
Si X es igual a 100 entonces vaya a la línea 100

El Atari vuelve automáticamente a la línea 3 donde esta el FOR y pasa al sgte. valor (2) y asi repetirá este ciclo hasta completar 255 y liberarse el FOR/NEXT
Con END termina el programa.

Imprima "SUFICIENTE CON 100".
Finalize programa.

El programa cumplió con su cometido, pero.... pusimos un GOTO en la línea 4, el que hizo al programa salir del ciclo FOR NEXT cuando X valió 100. Eso no se puede llegar y hacer! Hay que agregar una instrución POP. Como hemos visto, el Atari vuelve automáticamente a la línea que corresponde al FOR, eso lo hace internamente llevando un registro o STACK. Si nos salimos del FOR y en el programa hay otro ciclo FOR se forma un lio. POP limpia el STACK y asi el programa puede ejecutar tranquilamente un nuevo ciclo. Corregido, queda así:

POP limpia el registro stack
Imprima "SUFICIENTE CON 100".
Vaya a la línea 3 (Vuelva a empezar) El valor de X será el primero osea 1.

Para finalizar presionar [BREAK]

1 REM PROGRAMADO POR ZZTOP 2013
2 REM INICIO DE PROGRAMA
3 FOR X=1 TO 255
4 PRINT X
5 POKE 710,X
6 NEXT X

6 GR.0
7 GOTO 3

Mensaje del autor
Mensaje dejando claro que es el verdadero inicio del programa
Para X asignele un valor desde 1 a 255 (primer valor 1)
Imprima en pantalla el valor de X
Asigna a la posición de memoria 710 el valor de X (desde 1 a 255) (color de pantalla)
El Atari vuelve automáticamente a la línea 3 donde esta el FOR y pasa al sgte. (next) valor (2) y asi repetirá este ciclo hasta completar 255.

Borra y reinicializa la pantalla
Vuelva a la línea 3 (Vuelva a empezar)

Para finalizar presionar [BREAK]

1 REM PROGRAMADO POR ZZTOP 2013
2 REM INICIO DE PROGRAMA
3 DATA 1,2,3,4,5,6,7,8,9,10
4 READ A
5 PRINT A
6 GOTO 4




6 RESTORE 3
7 GOTO 4

Mensaje del autor
Mensaje dejando claro que es el verdadero inicio del programa
Datos para ser leidos
Lee uno de los datos y lo asigna a "A" (primer valor 1) (último 10)
Imprima en pantalla el valor de A
Vuelve a la línea 4 a leer el siguiente dato. Asi repetirá este ciclo hasta completar los 10.

Pero cometimos un error. Ya que el Atari no puede volver por si solo a ubicar la linea de los datos una vez que ya fueron leidos. Nos faltó RESTORE. Debemos corregir la línea 6:

Realmacena los valores que están ubicados en la línea 3.
Vuelve a la línea 4 y asi seguirá indefinidamente.

Para finalizar presionar [BREAK]

1 REM PROGRAMADO POR ZZTOP 2013
2 REM INICIO DE PROGRAMA
3 DATA 1,2,3,4,5,6,7,8,9,10
4 FOR X=1 TO 11
5 READ A
6 PRINT A
7 NEXT X
8 RESTORE 3
9 GOTO 4


100 END


5 TRAP 100: READ A
.
.

Mensaje del autor
Mensaje dejando claro que es el verdadero inicio del programa
Datos para ser leidos
Se crea un ciclo en que se asigna a X el valor de 1 a 11 (once pasos)
Asigna a A el valor del primer DATO (1)
Imprima en pantalla en valor de A
El Atari vuelve automáticamente a la línea 4 donde esta el FOR y pasa al sgte. (next) valor (2) y asi repetirá este ciclo hasta completar 11 pasos
¿Todo ok?
No! Cometimos un grave error, el ciclo FOR/NEXT es de 11 pasos, pero solo hay 10 datos! Esto hara que el programa se detenga! Debemos corregir la línea 5:



Si hay un error vaya a la línea 100. Esto finalizará el programa, pero lo hará de manera controlada.

 

Continuará...............

PEEK(764) teclado, PEEK(53279) teclas consola

POKE 82 borde de la pantalla, POKE 709 color de las letras, POKE 710 color del fondo, POKE 712 color del margen, 752 cursor

¿Alguna duda? Puedes consultar en el foro.