|
|
|
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.
FOR...TO...STEP...NEXT
- El único constructor real de bucles en BASIC FOR <Variable> = <Comienzo> TO <Fin> [STEP <Tamaño>]
<Código del Bucle>
NEXT [<Variable>]
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 CondicionadaELSE
o ENDIF
. 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>
100 IF A < B THEN MN = A: GOTO 120
110 MN = B
120 ....
GOTO
o GO TO
- Salto Incondicional GOTO <Número de Línea>
o GO TO <Número de Línea>
GOSUB
- Salto Incondicional a una Subrutina GOSUB <Número de Línea>
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 SubrutinaRETURN
GOSUB
ON...GOTO
o ON...GOSUB
- Bifurcación Múltiple 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> ...
ON X GOTO 100, 200, 300
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 DEF FN <Nombre>(<Parámetro>) = <Expresión>
DEF FN SI(X) = SIN(X)/X
FN SI(π/3) -> 0.816993343
GET
- Lee Un Carácter de la Entrada Estándar GET <Nombre de Variable>
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) INPUT
[<Texto>;] <Nombre de Variable> [, <Nombre de Variable> ...]
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) PRINT <Datos>
o ? <Datos>
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 SPC(<Pasos>)
SPC(6)
TAB
- Avanza el Cursor a una Posición Específica TAB(<Posición>)
TAB(6)
POS
- Posición Actual del Cursor POS(<Valor no usado>)
LOAD
- Carga un Programa desde un Disco o una Cinta LOAD <Nombre de Archivo> [, <Dispositivo> [, <Valor Secundario>]]
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 SAVE <Nombre de Archivo> [, <Dispositivo> [, <Valor Secundario>]]
SAVE "SuperJuego", 8 -> Guarda en la Unidad de Disco nº 8
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. VERIFY <Nombre de Archivo> [, <Dispositivo> [, <Valor Secundario>]]
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 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. 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 CLOSE <ID>
CLOSE 1
GET#
- Lee Un Carácter de un Archivo GET# <ID>, <Nombre de Variable>
GET#1, A$
GET
' y '#
'.
INPUT#
- Toma Datos de un Archivo INPUT# <ID>, <Nombre de Variable> [, <Nombre de Variable>...]
INPUT#1, EN$, ER$, PT$, SC$
INPUT
' y '#
'.
PRINT#
PRINT# <ID>, <Datos>
PRINT#1, "Power64"
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 CMD <ID> [, <Mensaje>]
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)READ
- Lee Datos Estáticos de Declaraciones DATA en el Programa READ <Variable> [, <Variable>...]
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. RESTORE
READ
DATA
- Almacena Datos Estáticos DATA <Dato> [, <Dato>...]
READ
LET
- Asignación LET <Variable> = <Valor>
LET A = 6.25
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) DIM <Nombre>(<Tamaño> [, <Tamaño>...])
DIM A(7)
-> Una lista de 8(¡!) elementos de índices [0..7] DIM B$(4,5)
-> Un lista de 30(¡!) cadena de caracteresA(3) = 17 : B$(2,3) = "Power64"
+, -, *, /, ^
- Operadores Aritméticos9 + 5 * (15 - 1) / 7 + 2^4 -> 35
<, <=, =, <>, >=, >
- Operadores de Comparación 3 <> 6 -> -1 (TRUE)
3 > 4 -> 0 (FALSE)
SIN
- Seno (Argumento en Radianes) SIN(<Valor>)
SIN(π/3) -> 0.866025404
COS
- Coseno (Argumento en Radianes) COS(<Valor>)
COS(π/3) -> 0.5
TAN
- Tangente (Argumento en Radianes) TAN(<Valor>)
TAN(π/3) -> 1.73205081
ATN
- Arco Tangente (Resultado en el intervalo [-π/2 .. π/2]) ATN(<Valor>)
ATN(1) -> 0.785398163 ( = π/4)
EXP
- Exponente (ex donde e = 2.71828183...) EXP(<Valor>)
EXP(6.25) -> 518.012825
LOG
- Logaritmo Natural LOG(<Valor>)
LOG(6.25) -> 1.83258146
SQR
- Raíz Cuadrada SQR(<Valor>)
SQR(6.25) -> 2.5
ABS
- Valor Absoluto ABS(<Valor>)
ABS(-6.25) -> 6.25
ABS(0) -> 0
ABS(6.25) -> 6.25
SGN
- Signo SGN(<Valor>)
SGN(-6.25) -> -1
SGN(0) -> 0
SGN(6.25) -> 1
INT
- Entero (Trunca al mayor entero menor o igual que el Argumento) INT(<Valor>)
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] RND(<Semilla>)
(<Semilla> < 0)
el generador de Números Aleatorios se inicializa RND(-625) -> 3.85114436E-06
RND(0) -> 0.464844882
RND(0) -> 0.0156260729
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 <Expresión> AND <Expresión>
A>5 AND X<=Y
12 AND 10 -> 8 (%1100 AND %1010 = %1000)
OR
- OR Lógico y Binario <Expresión> OR <Expresión>
A>5 OR X<=Y
12 OR 10 -> 14 (%1100 OR %1010 = %1110)
NOT
- NOT Lógico y Binario NOT <Expresión>
NOT A>5
NOT 2 -> -3 (NOT $0002 = $FFFD)
+
- Concatena Cadenas de Caracteres "Pow" + "er64" -> "Power64"
<, <=, =, <>, >=, >
- Operadores de Comparación "C64" < "Power64" -> -1 (TRUE)
"Alpha" > "Omega" -> 0 (FALSE)
LEN
- Longitud de la Cadena de Caracteres LEN(<Cadena>)
LEN("Power64") -> 7
LEFT$
- Parte Izquierda de una Cadena de Caracteres LEFT$(<Cadena>, <Longitud>)
LEFT$("Power64", 5) -> "Power"
RIGHT$
- Parte Derecha de una Cadena de Caracteres RIGHT$(<Cadena>, <Longitud>)
RIGHT$("Power64", 5) -> "wer64"
MID$
- Parte Intermedia de una Cadena de Caracteres MID$(<Cadena>, <Comienzo>, <Longitud>)
MID$("Power64 para Macintosh", 14, 3) -> "Mac"
/* -- 12345678901234567890123 -- */
STR$
- Convierte un Número en una Cadena de Caracteres STR$(<Valor>)
STR$(6.25) -> " 6.25"
STR$(-6.25) -> "-6.25"
VAL
- Convierte una Cadena de Carcateres en un Número VAL(<Cadena>)
VAL("6.25") -> 6.25
VAL("6xx25") -> 6
VAL("x6x25") -> 0
ASC
- Código ASCII del Primer Carácter de una Cadena de Caracteres ASC(<Cadena>)
ASC("P") -> 80
ASC("Power64") -> 80
CHR$
- Carácter con un código ASCII específico CHR$(<Valor>)
CHR$(80) -> "P"
PEEK
- Lee un Byte de la Memoria PEEK(<Dirección de Memoria>)
PEEK(53280)
-> Color del Borde
POKE
- Escribe un Byte en la Memoria POKE <Dirección de Memoria>, <Valor>
POKE 53280, 7
-> Borde Amarillo
WAIT
- Espera hasta que un Byte de la Memoria tiene un valor específico 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
Invertir
> no se ha especificado se asume que vale 0. WAIT 198, 255
-> Espera la pulsación de una tecla en el buffer de teclado.
SYS
- Sistema - Llama a un Programa en Ensamblador SYS <Dirección de Memoria> [, <Parámetro> ...]
USR
- Orden de Usuario USR
(<Parámetro>)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.
RUN
- Comienza la ejecución del Programa BASIC RUN [<Línea>]
Línea
>, el programa comienza su ejecución en la primera línea. RUN
STOP
- Finaliza la ejecución del programa STOP
STOP
es similar a END
, pero imprime el mensaje BREAK IN <Línea>
cuando se ejecuta.
END
- Finaliza la ejecución del programa END
CONT
- Continúa con la ejecución del programa CONT
STOP
, END
o la tecla Run/Stop,CONT
puede utilizarse para reanudar la ejecución.
REM
- Comentario REM <Texto>
REM Esta línea contiene un comentario
LIST
- Muestra el listado del programa BASIC que se encuentra en memoria LIST [<Línea> | <Desde>- | -<Hasta> | <Desde>-<Hasta>]
LIST
LIST -40
LIST 100-200
NEW
- Borra el programa y todas las variables de la memoria NEW
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 CLR
FRE
- Memoria Libre FRE(<Valor no Usado>)
FRE(0)
-> -26627 (inmediatamente después del encendido)π
- Pi = 3.14159265TI
- 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/SegundosTI$
(pero no a TI
) se le puede asignar un valor!
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 |