
EL PROGRAMA
La calculadora programable CASIO FX-180P llevaba incorporado un sencillo lenguaje de programación llamado LEARN. Con el podíamos simplificar el cálculo de fórmulas, entre otras cosas.
Este programa es un intérprete, limitado, del lenguaje LEARN para ordenadores de bolsillo CASIO PB y FX, aunque el código es fácilmente adaptable a otros sistemas.
Características del Intérprete
Este intérprete reconoce las siguientes instrucciones:
PCL: Borra el programa introducido y entra en modo edición.
. : Finaliza la introducción del programa y empieza a ejecutarlo.
P1: Ejecuta el programa introducido.
ENT: Permite introducir un valor durante la ejecución del programa.
HLT: Detiene el programa y muestra el valor en curso.
RAN#: Calcula un número aleatorio.
+ : Hace una suma con el valor posterior (Número o registro K).
RTN: Vuelve al principio del programa.
X>0: Vuelve al principio si el valor es mayor de 0.
X<=M: Vuelve al principio si el valor es menor o igual al valor de la memoria.
MIN: Introduce un valor en la memoria M.
MR: Recupera el valor de la memoria M.
KIN: 1,2 o 3. Introduce un valor en uno de los 3 registros K.
KOUT: 1,2 o 3. Recupera el valor de uno de los 3 registros K.
KAC: Borra todos los registros K.
n : Valor numérico de hasta 7 cifras.
El intérprete admite la entrada de un único programa (2 en el original) de hasta 15 pasos (38 en el original) y el uso de 3 registros (6 en el original).
Solo permite realizar sumas.
COMO FUNCIONA
El programa tiene tres sencillos bloques:
Menú Principal:
5 - Seleccionamos entrar (PCL) o ejecutar el programa (P1).
7 - Si no se introduce "PCL" vuelve a la línea 5.
Introducción del programa:
10 - Bucle donde introducimos las instrucciones del programa. Pulsa "." para acabar.
Ejecución del programa:
15 - Bucle de inicio de ejecución del programa introducido.
16 - Si el primer carácter de un paso es un número, se interpreta que es un valor.
18 - Si no es un número nos quedamos solo con los dos primeros caracteres de la instrucción.
20 - Si es "RT" volvemos a ejecutar desde el principio del programa.
22 - Si el valor (X) es inferior al de la memoria M (T) vuelve al principio.
24 - Si el valor (X) es mayor o igual al de la memoria M (T) vuelve al principio.
26 - Si es "HL" muestra el valor en curso. Pulsando "RETURN" sigue la ejecución.
28 - Si es "EN" permite introducir un valor y lo guarda en X.
30 - Si es "KO" coge el valor del registro y lo pone en X.
32 - Si es "KI" coge el valor de X y lo pone en el registro K correspondiente.
34 - Si es "KA" inicializa el valor de los 3 registros K.
40 - Si es "MI" guarda en la memoria M (T) el valor actual.
42 - Si es "MR" recupera el valor de la memoria M.
44 - Si hay un número en la memoria M (T<>0), pone una M en pantalla.
46 - Si es "RAN#" se calcula un número aleatorio a partir del siguiente número. No se ha respetado la funcionalidad original.
50 - Si no hay una suma salta a la línea 80 para continuar el bucle.
52 - En caso de suma se coge la instrucción siguiente. Si es un número se suma.
54 - En caso de no ser un número se toma por defecto que es un valor de un registro K.
80 - Cierra el bucle. En caso de terminar de ejecutar el programa imprime el valor actual. Al pulsar "RETURN" vuelve al menú.
LISTADO BASIC

ATENCIÓN:
Hay que tener en cuenta que las condiciones <> <= y => deben ser introducidas según los signos de la propia calculadora.
PROGRAMAS LEARN DE EJEMPLO
Para introducir un programa hacer "PCL" y teclear los comandos pulsando la tecla EXE entre uno y otro.
Para terminar la introducción y ejecutar el programa, pulsar la tecla punto (.) y EXE.
También se puede volver a ejecutar el programa poniendo "P1" en el menú.
BINGO
RAN#
90
+
1
HLT
RTN
SUMA 2 NUMEROS
ENT
KIN1
ENT
KIN2
KOUT1
+
KOUT2
HLT
RTN
APUNTES FINALES
El BASIC de las primeras CASIO era bastante lento y limitado. Detallo algunas de sus limitaciones:
No hay posibilidad de hacer un AND o un OR. En el primer caso hay que usar un THEN IF y en el segundo hay que hacer un nuevo IF en otra línea.
En este BASIC, y por compatibilidad con la PB-110 (que es aún más simple), se puede sustituir el THEN por un punto y coma (;).
El tema variables también es muy limitado ya que los nombres de las variables solo pueden tener una letra. Para almacenar más variables hay que usar matrices, asignando una parte de la memoria RAM con el comando DEFM.
También hay que tener en cuenta que las matrices realmente ocupan la misma memoria que las variables de una letra. Así A(1)=B, A(3)=D, B(1)=C, etc.
Debido al tema de las variables, y teniendo en cuenta que la primera versión la programé en 1986 en una PB-110 con solo 544 pasos, he tenido que limitar la longitud del programa en LEARN que nos permite introducir (15 en lugar de 38), las operaciones matemáticas que podemos realizar (solo suma) y la cantidad de registros (solo 3).
La versión original ocupaba 538 pasos, pero en esta revisión lo he conseguido rebajar a 495 pasos a pesar de incorporar dos comandos más. También he depurado ciertas partes para optimizar el código.
Se podría acelerar la ejecución del intérprete poniendo un "GOTO 80" al final de las líneas 26, 28, 30, 32, 34, 40, 42 y 46, pero lo he omitido para hacer el programa más corto.
Pues nada más, solo me queda...
Invitaros a probarlo.
