Home
Home
Principio Anterior Contenido Próximo Término
Principio - Anterior - Contenido - Próximo - Término
English Deutsch Italiano
English - Deutsch - Italiano

Apéndice A: Commodore 64 BASIC V2

Aquí se muestra un pequeño resumen de las órdenes del BASIC V2, incorporado en el Commodore 64. Tenga en cuenta que esto no pretende ser un tutorial, sino solamente una referencia rápida para refrescar las neuronas largo tiempo inactivas.
Si está buscando un tutorial de BASIC, eche un vistazo al manual original del C64. Se encuentra disponible (en Inglés) en formato texto en: http://project64.c64.org

En el BASIC V2 de C64 sólo hay unos pocos tipos de variables:

Únicamente los DOS PRIMEROS (¡!) caracteres del nombre de una variable son significativos. Así 'CO', 'COCOS' y 'COLLOSEUM' (pero no 'C' y 'CA') son nombres equivalentes para una única variable. Por otro lado el identificador de tipo puede utilizarse para distinguir entre variables. Por tanto 'CO', 'CO%' y 'CO$' son tres variables diferentes.

Control de Flujo del Programa:

FOR...TO...STEP...NEXT - El único constructor real de bucles en BASIC
Sintaxis:
FOR <Variable> = <Comienzo> TO <Fin> [STEP <Tamaño>]
<Código del Bucle>
NEXT [<Variable>]

Ejemplos:
FOR I=1 TO 5: PRINT I;: NEXT -> 1 2 3 4 5
FOR I=1 TO 5 STEP 2: PRINT I;: NEXT -> 1 3 5
FOR I=5 TO 1 STEP -2: PRINT I;: NEXT I -> 5 3 1
FOR I=3 TO 1: PRINT I;: NEXT -> 3 (!)
IF...THEN - Ejecución de Programa Condicionada
Nota: No existe ninguna cosa semejante a ELSE o ENDIF.
Sintaxis:
IF <Condición> THEN <Declaraciones> o
IF <Condición> GOTO <Número de Línea> o
IF <Condición> THEN <Número de Línea>
Ejemplo:
100 IF A < B THEN MN = A: GOTO 120
110 MN = B
120 ....
GOTO o GO TO - Salto Incondicional
Sintaxis:
GOTO <Número de Línea> o
GO TO <Número de Línea>
GOSUB - Salto Incondicional a una Subrutina
Observe que no es posible pasarle parámetros a una subrutina.
Todo debe hacerse utilizando variables globales.
Sintaxis:
GOSUB <Número de Línea>
Ejemplo:
10 PRINT "Programa Principal"
20 GOSUB 100
30 PRINT "Vuelve al Principal"
40 GOSUB 100
50 PRINT "Una Vez Más en el Principal"
60 END
100 PRINT "Esta es la Subrutina"
110 RETURN
RETURN - Vuelve de una Subrutina
Sintaxis:
RETURN
Ejemplo:
Ver GOSUB
ON...GOTO o ON...GOSUB - Bifurcación Múltiple
Sintaxis:
ON <Expresión Entera> GOTO <Número de Línea 1>, <Número de Línea 2> ... o
ON <Expresión Entera> GOSUB <Número de Línea 1>, <Número de Línea 2> ...
Ejemplo:
ON X GOTO 100, 200, 300
Esto es equivalente a:
IF X = 1 THEN GOTO 100
IF X = 2 THEN GOTO 200
IF X = 3 THEN GOTO 300
DEF FN- Define una Función/Subrutina en BASIC
Sintaxis:
DEF FN <Nombre>(<Parámetro>) = <Expresión>
Ejemplo:
DEF FN SI(X) = SIN(X)/X
FN SI(π/3) -> 0.816993343

Entrada/Salida:

GET - Lee Un Carácter de la Entrada Estándar
Sintaxis:
GET <Nombre de Variable>
Ejemplo:
100 GET A$: IF A$ = "" THEN GOTO 100 -> Espera a que se pulse una Tecla
INPUT - Toma Datos de la Entrada Estándar (normalmente el Teclado)
Sintaxis:
INPUT[<Texto>;] <Nombre de Variable> [, <Nombre de Variable> ...]
Ejemplos:
INPUT "USUARIO:"; US$
INPUT "Por favor introduzca A, B y C"; A, B, C
INPUT A
PRINT - Escribe en la Salida Estándar (normalmente la Pantalla)
Sintaxis:
PRINT <Datos> o
? <Datos>
Ejemplos:
PRINT "Hola Mundo"
PRINT "Aquí", "hay", "Tabuladores" -> Observe las ','
PRINT "Primera Línea"; -> Observe el ';'
PRINT "Todavía la misma línea"
PRINT "Power"; 2*32
SPC - Avanza el Cursor un Número de Pasos Específico
Sintaxis:
SPC(<Pasos>)
Ejemplo:
SPC(6)
TAB- Avanza el Cursor a una Posición Específica
Sintaxis:
TAB(<Posición>)
Ejemplo:
TAB(6)
POS - Posición Actual del Cursor
Sintaxis:
POS(<Valor no usado>)

Archivos:

LOAD- Carga un Programa desde un Disco o una Cinta
Sintaxis:
LOAD <Nombre de Archivo> [, <Dispositivo> [, <Valor Secundario>]]
Ejemplos:
LOAD "SuperJuego", 8, 1 -> Carga absoluta desde la Unidad de Disco nº 8
LOAD "*", 9 -> Carga el primer programa desde la Unidad de Disco nº 9
LOAD "", 1 -> Carga el primer programa desde la Unidad de Cinta (nº 1)
SAVE - Guarda un Programa en un Disco o una Cinta
Sintaxis:
SAVE <Nombre de Archivo> [, <Dispositivo> [, <Valor Secundario>]]
Ejemplo:
SAVE "SuperJuego", 8 -> Guarda en la Unidad de Disco nº 8
Para sobreescribir un archivo que ya existe en un disco, hay que utilizar el prefijo '@' en el nombre del archivo
Ejemplo:
SAVE "@SuperJuego",8 -> Guarda en la Unidad de Disco nº 8, sobreescribiendo el archivo antiguo
VERIFY - Comprueba si el Programa almacenado en Memoria y un Programa de un Disco o una Cinta son iguales. No modifica nada.
Sintaxis:
VERIFY <Nombre de Archivo> [, <Dispositivo> [, <Valor Secundario>]]
Ejemplos:
VERIFY "SuperJuego", 8 -> Comprueba SuperJuego desde la Unidad de Disco nº 8
VERIFY "*", 9 -> Comprueba el primer programa desde la Unidad de Disco nº 9
VERIFY "", 1 -> Comprueba el primer programa desde la Unidad de Cinta (nº 1)
OPEN- Abre un Archivo
Sintaxis:
OPEN <ID>, <Dispositivo> [, <Valor Secundario> [, <Nombre y Modo>]]
El valor <Valor Secundario> es un entero opcional comprendido dentro del intervalo 0-15 y con el siguiente significado: 0..Utilizado para LOAD, 1..Utilizado para SAVE, 2-14..Utilizable libremente para el Acceso a Archivos del Usuario, 15..Canal de Orden/Error.
<Nombre y Modo>
utiliza el formato: "<Nombre de Archivo> [,<Tipo de Archivo> [,<Modo de Acceso>]]" donde <Tipo de Archivo> es P (Programa), S (Secuencial), L (Relativo) o U (Usuario) y <Modo de Acceso> es R (Lectura), W (Escritura), A (Añadir) o el número de Bytes/Grabación para Archivos Relativos.
Ejemplos:
OPEN 1, 4 -> Abre un Archivo de Salida hacia la Impresora nº 4
OPEN 1, 8, 15 -> Abre el Canal de Orden/Error

OPEN 1, 8, 2, "Mi Archivo,P,R" -> Abre un Programa para Lectura
OPEN 1, 8, 2, "Mi Archivo,S,W" -> Abre un Archivo Secuencial para Escritura
OPEN 1, 8, 2, "Mi Archivo,L,"+CHR$(40) -> Abre un Archivo Relativo con 40
Bytes/Grabación
CLOSE - Cierra un Archivo
Sintaxis:
CLOSE <ID>
Ejemplo:
CLOSE 1
GET# - Lee Un Carácter de un Archivo
Sintaxis:
GET# <ID>, <Nombre de Variable>
Ejemplo:
GET#1, A$
Observe que no hay espacio entre 'GET' y '#'.
INPUT# - Toma Datos de un Archivo
Sintaxis:
INPUT# <ID>, <Nombre de Variable> [, <Nombre de Variable>...]
Ejemplo:
INPUT#1, EN$, ER$, PT$, SC$
Observe que no hay espacio entre 'INPUT' y '#'.
PRINT#
Sintaxis:
PRINT# <ID>, <Datos>
Ejemplo:
PRINT#1, "Power64"
Observe que no hay espacio entre 'PRINT' y '#'. Observe también que
?# no es PRINT# aunque parezcan lo mismo en un listado.
CMD - Redirecciona la Salida Estándar (no afecta a la Entrada) y escribe un Mensaje en ella
Sintaxis:
CMD <ID> [, <Mensaje>]
Ejemplo:
OPEN 1, 4 ; Abre un Archivo nº 1 en la Impresora nº 4
CMD 1 ; Redirecciona la Salida Estándar a ese Archivo
PRINT "La Salida que Quiera"
PRINT "Más Salida"
PRINT#1 ; Deshace CMD 1
CLOSE 1
ST- Estado del Dispositivo (Variable Interna)
ST = 0 .. Dispositivo en Correcto Orden
Bit 6: 1 .. Fin de Archivo
Bit 7: 1 .. Dispositivo No Presente o No Preparado
READ - Lee Datos Estáticos de Declaraciones DATA en el Programa
Sintaxis:
READ <Variable> [, <Variable>...]
Ejemplo:
10 RESTORE
20 READ X$
30 PRINT X$;
40 S = 0
50 FOR I=1 TO 3
60 READ X
70 S = S + X
80 NEXT I
90 PRINT S
100 DATA "Power", 12, 34, 18
RESTORE - Pone el Puntero al Siguiente elemento de DATA en la primera declaración DATA del programa.
Sintaxis:
RESTORE
Ejemplo:
Ver READ
DATA- Almacena Datos Estáticos
Sintaxis:
DATA <Dato> [, <Dato>...]
Ejemplo:
Ver READ

Funciones Matemáticas:

LET - Asignación
Sintaxis:
LET <Variable> = <Valor>
Ejemplo:
LET A = 6.25
Observe que la palabra clave LET no es necesaria. <Variable> = <Valor> es todo lo que se necesita. LET sólo hace que las cosas vayan más lentas -> ¡No lo utilice!
DIM - Declaración de Listas Ordenadas (Arrays)
Sintaxis:
DIM <Nombre>(<Tamaño> [, <Tamaño>...])
Ejemplo:
DIM A(7) -> Una lista de 8(¡!) elementos de índices [0..7]
DIM B$(4,5) -> Un lista de 30(¡!) cadena de caracteres
Utilización de los Elementos: A(3) = 17 : B$(2,3) = "Power64"
+, -, *, /, ^- Operadores Aritméticos
Ejemplo:
9 + 5 * (15 - 1) / 7 + 2^4 -> 35
<, <=, =, <>, >=, > - Operadores de Comparación
Ejemplos:
3 <> 6 -> -1 (TRUE)
3 > 4 -> 0 (FALSE)
SIN - Seno (Argumento en Radianes)
Sintaxis:
SIN(<Valor>)
Ejemplo:
SIN(π/3) -> 0.866025404
COS - Coseno (Argumento en Radianes)
Sintaxis:
COS(<Valor>)
Ejemplo:
COS(π/3) -> 0.5
TAN - Tangente (Argumento en Radianes)
Sintaxis:
TAN(<Valor>)
Ejemplo:
TAN(π/3) -> 1.73205081
ATN - Arco Tangente (Resultado en el intervalo [-π/2 .. π/2])
Sintaxis:
ATN(<Valor>)
Ejemplo:
ATN(1) -> 0.785398163 ( = π/4)
EXP - Exponente (ex donde e = 2.71828183...)
Sintaxis:
EXP(<Valor>)
Ejemplo:
EXP(6.25) -> 518.012825
LOG - Logaritmo Natural
Sintaxis:
LOG(<Valor>)
Ejemplo:
LOG(6.25) -> 1.83258146
SQR - Raíz Cuadrada
Sintaxis:
SQR(<Valor>)
Ejemplo:
SQR(6.25) -> 2.5
ABS - Valor Absoluto
Sintaxis:
ABS(<Valor>)
Ejemplos:
ABS(-6.25) -> 6.25
ABS(0) -> 0
ABS(6.25) -> 6.25
SGN - Signo
Sintaxis:
SGN(<Valor>)
Ejemplos:
SGN(-6.25) -> -1
SGN(0) -> 0
SGN(6.25) -> 1
INT - Entero (Trunca al mayor entero menor o igual que el Argumento)
Sintaxis:
INT(<Valor>)
Ejemplos:
INT(-6.25) -> -7 (!)
INT(-5) -> -5
INT(0) -> 0
INT(5) -> 5
INT(6.25) -> 6
RND - Número Aleatorio entre [0.0 .. 1.0]
Sintaxis:
RND(<Semilla>)
Si (<Semilla> < 0) el generador de Números Aleatorios se inicializa
Ejemplos:
RND(-625) -> 3.85114436E-06
RND(0) -> 0.464844882
RND(0) -> 0.0156260729

Operadores Lógicos y Binarios:

Recuerde la codificación de los Valores Booleanos:
FALSE <--> 0 (0x0000) y TRUE <--> -1 (0xFFFF) o cualquier valor distinto de cero

AND- AND Lógico y Binario
Sintaxis:
<Expresión> AND <Expresión>
Ejemplos:
A>5 AND X<=Y
12 AND 10 -> 8 (%1100 AND %1010 = %1000)
OR - OR Lógico y Binario
Sintaxis:
<Expresión> OR <Expresión>
Ejemplos:
A>5 OR X<=Y
12 OR 10 -> 14 (%1100 OR %1010 = %1110)
NOT- NOT Lógico y Binario
Sintaxis:
NOT <Expresión>
Ejemplos:
NOT A>5
NOT 2 -> -3 (NOT $0002 = $FFFD)

Tratamiento de Caracteres y Cadenas de Caracteres:

+ - Concatena Cadenas de Caracteres
Ejemplo:
"Pow" + "er64" -> "Power64"
<, <=, =, <>, >=, > - Operadores de Comparación
Ejemplos:
"C64" < "Power64" -> -1 (TRUE)
"Alpha" > "Omega" -> 0 (FALSE)
LEN - Longitud de la Cadena de Caracteres
Sintaxis:
LEN(<Cadena>)
Ejemplo:
LEN("Power64") -> 7
LEFT$ - Parte Izquierda de una Cadena de Caracteres
Sintaxis:
LEFT$(<Cadena>, <Longitud>)
Ejemplo:
LEFT$("Power64", 5) -> "Power"
RIGHT$ - Parte Derecha de una Cadena de Caracteres
Sintaxis:
RIGHT$(<Cadena>, <Longitud>)
Ejemplo:
RIGHT$("Power64", 5) -> "wer64"
MID$ - Parte Intermedia de una Cadena de Caracteres
Sintaxis:
MID$(<Cadena>, <Comienzo>, <Longitud>)
Ejemplo:
MID$("Power64 para Macintosh", 14, 3) -> "Mac"
/* -- 12345678901234567890123 -- */
STR$ - Convierte un Número en una Cadena de Caracteres
Sintaxis:
STR$(<Valor>)
Ejemplos:
STR$(6.25) -> " 6.25"
STR$(-6.25) -> "-6.25"
VAL - Convierte una Cadena de Carcateres en un Número
Sintaxis:
VAL(<Cadena>)
Ejemplos:
VAL("6.25") -> 6.25
VAL("6xx25") -> 6
VAL("x6x25") -> 0
ASC- Código ASCII del Primer Carácter de una Cadena de Caracteres
Sintaxis:
ASC(<Cadena>)
Ejemplos:
ASC("P") -> 80
ASC("Power64") -> 80
CHR$ - Carácter con un código ASCII específico
Sintaxis:
CHR$(<Valor>)
Ejemplo:
CHR$(80) -> "P"

Acceso a Memoria:

PEEK - Lee un Byte de la Memoria
Sintaxis:
PEEK(<Dirección de Memoria>)
Ejemplo:
PEEK(53280) -> Color del Borde
POKE - Escribe un Byte en la Memoria
Sintaxis:
POKE <Dirección de Memoria>, <Valor>
Ejemplo:
POKE 53280, 7 -> Borde Amarillo
WAIT - Espera hasta que un Byte de la Memoria tiene un valor específico
Sintaxis:
WAIT <Dirección de Memoria>, <Máscara> [, <Invertir>]
WAIT detendrá el programa hasta que ((PEEK(<Dirección de Memoria>) EXOR <Invertir>) AND <Máscara>) != 0
Si <Invertir> no se ha especificado se asume que vale 0.
Ejemplo:
WAIT 198, 255 -> Espera la pulsación de una tecla en el buffer de teclado.

Interfaz para Programas en Ensamblador:

SYS - Sistema - Llama a un Programa en Ensamblador
Sintaxis:
SYS <Dirección de Memoria> [, <Parámetro> ...]
El número de parámetros depende del programa llamado.
USR- Orden de Usuario
Sintaxis:
USR(<Parámetro>)
Similar a SYS pero la <Dirección de Memoria> es siempre $0310 y el primer y único <Parámetro> es evaluado y almacenado en FloatAccu1 (FAC1) cuando se llama al Programa en Ensamblador. Es menos flexible que SYS y por tanto raramente utilizado.

Ejecución de Programas:

RUN - Comienza la ejecución del Programa BASIC
Sintaxis:
RUN [<Línea>]
Si no se especifica ninguna <Línea>, el programa comienza su ejecución en la primera línea.
Ejemplo:
RUN
STOP- Finaliza la ejecución del programa
Sintaxis:
STOP
STOP es similar a END, pero imprime el mensaje BREAK IN <Línea> cuando se ejecuta.
END - Finaliza la ejecución del programa
Sintaxis:
END
CONT - Continúa con la ejecución del programa
Sintaxis:
CONT
Cuando la ejecución de un programa es interrumpida por STOP, END o la tecla Run/Stop,
la orden CONT puede utilizarse para reanudar la ejecución.

Varios:

REM - Comentario
Sintaxis:
REM <Texto>
Ejemplo:
REM Esta línea contiene un comentario
LIST - Muestra el listado del programa BASIC que se encuentra en memoria
Sintaxis:
LIST [<Línea> | <Desde>- | -<Hasta> | <Desde>-<Hasta>]
Sin argumentos se muestra el listado completo del programa.
Ejemplos:
LIST
LIST -40
LIST 100-200
NEW - Borra el programa y todas las variables de la memoria
Sintaxis:
NEW
Si la orden NEW es utilizada accidentalmente, el programa eliminado puede ser recuperado utilizando el programa NEW Magician descrito en la Sección 7.2.
CLR - Borra todas las variables
Sintaxis:
CLR
FRE - Memoria Libre
Sintaxis:
FRE(<Valor no Usado>)
Ejemplo:
FRE(0) -> -26627 (inmediatamente después del encendido)
Devuelve el número de Bytes libres para programas BASIC como un entero de 16 Bits con signo. Si la memoria libre excede de 32 KBytes entonces se devolverá un número negativo (el número actual de Bytes libres - 65536). Por tanto -26627 debería leerse como 65536-26627 = 38909.
π - Pi = 3.14159265
TI - Pasos del Temporizador transcurridos desde el Encendido (1 Paso = 1/60 Segundos)
TI$ - Tiempo del Temporizador transcurrido desde el Encendido en el Formato Horas/Minutos/Segundos
¡A TI$ (pero no a TI) se le puede asignar un valor!
La precisión del Temporizador es muy deficiente (>1% desviación)

Home Principio Anterior Contenido Próximo Término Top of Page

Fuente: http://www.infinite-loop.at/Power64/Documentation/Power64-Leame/AA-C64_BASIC.html
Power64 Homepage: http://www.infinite-loop.at y http://www.salto.at - EMail:
© Roland Lieger, Goethegasse 39, A-2340 Mödling, Austria - Europe
Últiomo Modificación: 29 de Febrero de 2008
Valid HTML 4.01!