01 enero 2013

Redescubriendo un Casio PB-110

Comienzo el año trasteando con un aparatito que cumple 30 años: mi CASIO PB-110 del año 1983, un ordenador de bolsillo (165x71 mm, 119 gramos de peso) con pantalla incorporada.



Eso sí, aunque el tamaño, peso y el hecho de tener pantalla incorporada impresionan para aquella época, las características técnicas están en consonancia con los principios de los años 80: la memoria RAM es de 1 Kbyte (544 bytes para el usuario), ampliable a 2 KBytes, la pantalla es de cuarzo (blanco y negro sin tonalidades intermedias) con una línea de 12 caracteres. El sonido se limita a un "beep" (bueno, no uno, sino dos tonos distintos). Las especificaciones oficiales (en el manual de usuario, que también conservo) no mencionan el procesador empleado ni su velocidad, sólo hablan de "tecnología CMOS VLSI").

El equipo tiene un "modo inmediato", el que aparece al encenderlo, que permite su uso como calculadora: si tecleamos 2+3 y pulsamos el botón EXE, obtendremos como respuesta 5. Se comporta como una calculadora científica: no tiene botones dedicados para funciones matemáticas, pero podemos escribir las funciones. Por ejemplo, si tecleamos SQR 5 (con o sin paréntesis y con o sin espacio intermedio) obtendremos como respuesta 2.236067977. También hay funciones trigonométricas, y el modo de trabajo habitual es en grados (no en radianes), de modo que si tecleamos SIN 45 obtendremos el seno de 45 grados: 0.7071067812. Permite declarar variables, pero sólo de una letra de longitud, de modo que podemos hacer A=45 y luego SIN A.

También tiene una función de "banco de datos" (Data bank), que permite anotar datos como nombres y números de teléfono, y luego buscar dentro de ellos. Eso sí, la principal limitación de este modo es contar sólo con 544 bytes para el usuario (yo soy un privilegiado: tengo instalado la expansión de memoria CASIO OR-1 de 1 Kb, así que tengo 1568 bytes para el usuario).

Es programable en BASIC, y tiene 10 "áreas de programa", de modo que se podrían tener 10 programas en memoria simultáneamente, algo que usé poco con el PB-100 pero sí usé mucho más con un CASIO FX-880P, más adecuado para ingeniería, del que hablaré en otra ocasión.

Vamos a ver cómo se haría un programa sencillo, que genere dos números al azar entre 0 y 5, cuya suma tenga que adivinar el usuario (por si es poco evidente, es un programa diseñado para un niño de 4-5 años). Las consideraciones previas son:

  • Por supuesto, hay que saber algo de programación en lenguaje BASIC.
  • Para generar números al azar, se usa RAN#, que devuelve un número entre 0 (no incluido) y 1 (no incluido).
  • Si queremos que el número al azar esté entre 0 y 5, podemos multiplicar el valor de RAN# por 6 y tomar su parte entera.
  • Una peculiaridad del BASIC de estos equipos CASIO es que para comprobar si dos datos son distintos, no se hace IF a <> b THEN ... sino IF a  b THEN ... (al contrario de lo habitual en un equipo moderno, el símbolo de "distinto de" está disponible en el teclado).
  • Además, como la pantalla tiene sólo una línea, hay que ser "disciplinado" con lo que se escribe. Por ejemplo, puede ayudarnos el hacer una pausa tras mostrar algo. Esto se consigue terminando la orden PRINT con una coma.

El programa completo podría ser:

10 A=INT(RAN#*6)
20 B=INT(RAN#*6)
30 PRINT A;"+";B";
40 INPUT C
50 IF C=A+B THEN PRINT":-)",
60 IF CA+B THEN PRINT":-(",
70 GOTO 10

Para introducirlo, pulsamos MODE + 1 para entrar al modo de edición de programas, lo tecleamos, y luego pulsamos MODE + 0 para volver al modo inmediato. Si entonces pulsamos Mayúsculas + 0, se lanzará el programa 0, que es el que acabamos de crear. ¡Magia!  ;-)


4 comentarios:

Raul-Angel García dijo...

Hola, muy buenas,
Primeramente, darte mi enhorabuena por conservar esa pequenia gran maquina, tan curiosa pieza de coleccion (y de ..."trasteo nostalgico"....), interesantisimo objeto del "vintage" tecnologico, como decia, super-interesante, para gente como aqui un menda lerenda, "freaky" de la informatica, la cual ha llevado siendo mi gran vocacion desde mis tempranos 12 anios de edad, vocacion que, por fortuna, se ha convertido en mi profesion (aunque bueno, si hay algo que podria mejorar un poquito, en cuanto a mi trabajo se refiere, es que se me dejara programar para Linux (en PHP, Phiton, Java, C...), y no en la ...m... de PSEUDO-programacion con el VBA en Office de Microsoft. Pero teniendo en cuenta la crisis y como esta el trabajo por ahi, digamos que, aparte de la "geta" que tengo (en comparacion a como esta la gente en general, con el trabajo, en esta crisis...), como que un menda lerenda se "queja" por vicio, al hablar de Microsoft, bueno...)
Aunque, bueno, tambien decir que, a diferencia de vd., yo conservo mi ejemplar de Casio PB-110 desde el anio 1988, pero en aquella epoca, me acuerdo, me la pasaba haciendo programitas (juegos, experimentos (como programas para hacer sencillas formulas de quimica), y demas...), con mi tan inseparable "calculadora" con algo mas.

Raul-Angel García dijo...

Por lo que, buscando (aunque buscaba otra cosa en concreto, por cierto...) me encontre con la preciadisima por aqui menda, maquina, me puse a elaborar este sencillo programa en el BASIC del mencionado instrumento, que calcula el Numero de Control (DC) de una cuenta bancaria, cuando nosotros introducimos el resto de las cifras, en la forma EEEEOOOONNNNNNNNN:

Emprzamos "reestableciendo" la "posicion del cabezal" de los datos establecidos mediante "DATA"
10 RESTORE

Leemos los dos primeros datos, con el fin de "situarnos en la 3a posicion"
20 READ E:READ E

Recogemos la introduccion de los 18 digitos, a establecer por el usuario
30 INPUT "N.CUENTA", $

Recorremos la cadena (con los 18 digitos) de la posicion 1 a la 8, para ir sumando los productos de la cifra extraida de la cadena, por el numero que leamos de la "DATA"
40 G=0
50 FOR C=1 TO 8:GOSUB 170:READ E
60 F=D*E:G=G+F
70 NEXT C

Y, hallando el resto de la division entera de dicha suma (variable G), lo establecemos a I, para luego restar esa I a 11, y reasignarselo a I
80 I=G-(INT(G/11)*11):I=11-I

Si I vale 11, valdra 1, si vale 10, sera 0
90 IF I=11 THEN I=1:IF I=10 THEN I=0

Y, reestablecemos el "cabezal de lectura de DATA, al inicio"

100 RESTORE

Para luego, recorrer la cadena introducida por el usuario, esta vez, de la posicion 9 a la 18
110 FOR C=9 TO 18:GOSUB 170:READ E:F=D*E:G=G+F
120 NEXT C

Y hacemos, ahora con la variable J, lo que antes hicimos con I
130 J=G-(INT(G/11)*11):J=11-J
140 IF J=11 THEN J=1:IF J=10 THEN J=0

Y finalmente, construimos el valor de nuestra variable K, la cual, mostraremos en pantalla como el resultado.
150 K=10*I+J:PRINT "DC=";K

160 END

Y definimos nuestra subrutina, que se encarga de leer un caracter de $ en la posicion C, y de pasar este, a su valor entero, que establecera en la variable D
170 B$=MID(C,1):D=VAL(B$)
180 RETURN

Establecemos nuestra "DATA"
190 DATA 1, 2, 4, 8, 5, 10, 9, 7, 3, 6

Raul-Angel García dijo...

Pues bien, dicho esto, si metemos el programa en la ("mega-limitada") memoria de la PB-110, lo ejecutamos, y metemos el siguiente numero:
203822323002320995
Nos deveria devolver el programa,
DC=92

Cuenta a la cual, a aqui un menda lerenda, mucho le gustaria, le ingresaran unos cuantos euros. Digamos me conformaria con unos...
20.382.232.923.002.320.995.00 € del ala,
Bueno, jeeeeee jieee jueeee...
Con esto, y diciendo que aqui un menda tiene en su testa ka idea de elaborar otro programita para ka PB-110, que funcionaria como una mega-simple calculadora de noracion polaca inversa (RPN, Reverse Polaque Notation, bueno... un sistema de introduccion de datos que, que menda sepa, solo implementan ALGUNAS calculadoras de la firma Hewlett Packard...), por hoy, aqui le mando,
Un saludo

Raul-Angel García dijo...

CORRECCION EN EK PROGRANA:
Huuuuuy, que aqui a menda, se le escapo ayer de la melendra, bueno...

Antes de empezar con el segundo FOR ("110 FOR C=9 TO 18..."), debe de REINICIARSE A 0 la variable G,
105 G=0

De nuevo, saludos,