El CARDIAC (CARDboard Illustrative Aid to Computation) es un ordenador de papel diseñado por David Hagelbarger y Saul Fingerman en 1968 en los Laboratorios Bell como una herramienta de aprendizaje para enseñar a estudiantes de secundaria cómo funcionan las computadoras.
Ahora el ordenador de bolsillo Casio FX-880P puede ejecutar los programas de este ordenador “de papel” de una forma mucho más rápida y sencilla.
EL ORDENADOR CARDIAC
El ordenador consiste en dos elementos de cartón que contienen distintas tiras de papel.
El primero elemento contiene una tira de papel con la entrada de datos, llamado "INPUT", el registro Acumulator, el valor del registro Program Counter y una descripción de la instrucción a ejecutar.
La segunda parte contiene las 100 celdas de memoria y una tira de papel con la salida de datos, llamado "OUTPUT". Aquí se usan dos "bugs" para indicar donde está apuntando el registro Program Counter y en caso de saltar a una sub-rutina, desde que posición se ha saltado.
El sistema ejecuta 10 instrucciones distintas. Cada instrucción se compone de 3 dígitos. El primer dígito hace referencia a la instrucción en sí, y los dos dígitos de la derecha hacen referencia a una celda de la memoria, exceptuando la instrucción "SHIFT".
Para hacerlo funcionar necesitaremos un lápiz y una goma de borrar.
LAS INSTRUCCIONES
Tenemos 10 instrucciones distintas.
0 - INP : Input
Lee un número de INPUT y lo deja en la celda indicada.
1 - CLA : Clear & Add
Lee un número de INPUT y lo almacena en el registro Acumulator.
2 - ADD : Add
Suma al registro Acumulator el número contenido en la celda indicada.
3 - TAC : Test Acumulator Contents
Si el registro Acumulator es negativo, la ejecución del programa salta a la celda indicada.
4 - SFT : Shift
Desplaza los dígitos del registro Acumulator X posiciones a la izquierda e Y la derecha.
5 - OUT : Output
Guarda en OUTPUT los 3 dígitos de la derecha del registro Acumulator. Ignora los miles.
6 - STO : Store
Guarda los 3 dígitos de la derecha del registro Acumulator en la celda indicada.
7 - SUB : Subtract
Resta al registro Acumulator el número contenido en la celda indicada.
8 - JMP : Jump
La ejecución del programa salta a la celda indicada.
9 - HRS : Halt & Reset
Detiene la ejecución del programa.
LA MEMORIA
El sistema contiene 100 celdas de memoria que pueden contener un valor entre 999 y -999.
La celda 0 contiene la ROM del sistema, siempre es 001 (INP en 01) y sirve para hacer el bootloader de los programas.
La celda 99 es una posición de memoria que contiene la dirección de retorno de una sub-rutina, y siempre contiene un 8nn.
En las otras 98 celdas, de la 1 a la 98, podemos almacenar nuestro programa y las variables.
EL BOOTLOADER
Lo primero que hay que hacer es cargar el programa en memoria desde la tira de papel de INPUT.
El formato de la carga es el siguiente:
1) Al ejecutar el 001 de la ROM en la posición 00, cogemos un número de INPUT, lo escribimos en la celda 01 y avanzamos la tira de INPUT. Lo normal es que se haya cargado un 002 en la celda 01.
2) El registro Program Counter cambia a 01, y si hay un 002 se carga otro número de INPUT en la celda 02, avanzando INPUT otra posición. Este segundo valor suele ser un 800, un Jump a 00, que sirve para crear el bucle que cargará el resto del programa.
3) Al ejecutar el 800, saltamos de nuevo a la celda 00, y volvemos a cargar otro número de INPUT. Pero en este caso se van utilizando pares de valores de INPUT para cargar las instrucciones en el resto de la memoria. Un primer valor indica la posición de memoria con una instrucción 0nn, y un segundo valor de INPUT con la instrucción que se cargará en la celda indicada.
4) Para finalizar el bootloader se suele cargar una instrucción 8nn para saltar a la dirección donde se ha empezado a cargar el programa, para su ejecución.
Como no, todo esto hay que hacerlo con lápiz y goma, mientras se van moviendo las tiras de papel necesarias.
Es algo curioso, y como no, extremadamente lento, pero realmente funciona y acabamos con el programa en memoria listo para ser ejecutado.
Un programa puede estar contenido en varias tiras de papel, y se han de ir cambiando a medida que se va leyendo su último valor.
Evidentemente no hay nada que nos impida escribir directamente los números en las celdas de memoria correspondientes, para saltarnos la parte del bootloader.
CONCLUSIÓN
Este ordenador puede parecer una chorrada, pero realmente funciona y se pueden ejecutar programas más que curiosos... si tienes la paciencia de ir ejecutando correctamente todas las instrucciones del programa y controlando todos los pasos correspondientes.
DOCUMENTACIÓN DEL SISTEMA
En esta URL tenéis un montón de información sobre su funcionamiento, y todo lo que se puede llegar a hacer con este ordenador:
https://www.cs.drexel.edu/~bls96/museum/cardiac.html
En esta URL tenéis un manual en formato PDF. Para ser el original, es bastante mejorable.
https://archive.org/details/CardiacCard ... on_Manual/
Hay disponibles distintos emuladores de este sistema, ya sean para probar a través del navegador o como aplicaciones instalables.
https://www.cs.drexel.edu/~bls96/museum/cardsim.html
¿CÓMO HACERSE UN CARDIAC?
En los siguientes enlaces tenemos acceso a PDF que contienen el diseño del CARDIAC para ser impreso e incluso troquelado.
https://vonkonow.com/cardiac-recreating ... from-1968/
https://www.instructables.com/CARDIAC-C ... putation-/
En mi caso imprimí el modelo del primer link en una imprenta, en papel de 350 grs, y la verdad es que ha quedado de maravilla. Se puede escribir y borrar en el sin que el papel sufra más de la cuenta.
Posteriormente me tocó troquelar con un cúter tipo bisturí para que fuera totalmente funcional, pero me quedé con las ganas de troquelas las 100 posiciones de memoria, que son redondas.
EL EMULADOR
Este emulador para la Casio FX-880P emula perfectamante todos los programas de este ordenador.
Para hacer el programa más compacto se ha optado por hacer la introducción de los códigos del programa mediante líneas DATA que se han de introducir a partir de la línea 900. Si se opta por el método del Snapshot, el último código debe ser un 9999.
El programa usa un BASIC muy estándar, de forma que será fácilmente adaptable en otros equipos.
El BASIC de la Casio FX-880P es básicamente el mismo del que disponen los modelos PB-110, pero se ha mejorado el uso de strings con las instrucciones LEFT$ y RIGHT$, que además se pueden usar con cualquier variable de cadena, y no se limita al uso de la variable $. También se ha mejorado el uso de las matrices.
Disponemos de una pantalla de 2 filas y 32 columnas a las que podemos acceder mediante la instrucción LOCATE.
Con todo, el equipo sigue siendo fiel al pobre rendimiento de todos estos ordenadores pocket de Casio. De forma que el emulador funciona, pero a su ritmo. Con todo, sigue siendo más rápido que hacerlo a mano, con lápiz y goma de borrar.
OPCIONES DEL EMULADOR
El emulador dispone de un menú principal que nos permite ejecutar un programa introducido previamente en líneas DATA del código BASIC o consultar la memoria.
EXEC:
Las siguientes dos opciones nos permiten ejecutar un programa codificado de una de las dos formas permitidas. Al finalizar la ejecución aparece “HALT” en pantalla, y queda a la espera de pulsar una tecla para volver al menú principal.
1-BOOT:
Ejecuta un programa que se cargará mediante el bootloader típico del CARDIAC. Para cargar cada instrucción del programa se han de usar dos pasos de programa. Un primer código indica la dirección donde se ha de cargar la instrucción indicada en el segundo código. El programa es más lento ya que la carga del programa consume su tiempo.
2-SNAP:
Ejecuta un programa que se ha cargado mediante un volcado de la memoria. Así, cada instrucción está en la posición correspondiente. El primer código se cargará en la posición de memoria 1, ya que la posición 0 está reservada por el sistema. La ejecución es más rápida ya que no hay que cargar el programa mediante el bootloader. Se empieza a ejecutar desde la dirección 1.
DUMP:
Estas opciones nos permiten hacer un volcado de la memoria. Pulsando ENTER avanzamos 10 direcciones, y con cualquier otra tecla volvemos al menú principal.
3-OUT:
Esta opción permite acceder al buffer que contiene hasta 30 resultados del programa, grabados mediante la instrucción OUT.
4-MEM:
Esta opción muestra las 100 posiciones de la memoria del sistema.
Descargar el listado en formato TXT: Nota:
A partir de la línea 900 está el programa COUNTER 0-10 codificado para cargar como Bootloader, y en 950 el mismo programa en formato Snapshot. Poner en la línea 900 la versión deseada, o tu propio programa.
EL LISTADO (Incompleto)
Código: Seleccionar todo
NO DEJA PEGAR EL CÓDIGO !!!
' ------------------
' DUMP DE LA MEMORIA
' ------------------
200 I=0:IF K$="3" THEN C=29 ELSE C=99
202 CLS:PRINT "[DUMP]";
204 FOR F=0 TO 1:LOCATE 6,F:Z=I:GOSUB 310:PRINT K$;": ";
206 FOR I=I TO I+4:IF C=29 THEN Z=O(I) ELSE Z=M(I)
208 GOSUB 310:PRINT K$;" ";:NEXT I:NEXT F
210 GOSUB 300:IF ASC(K$)<>13 OR I>C THEN 20 ELSE 202
' Rutina lectura del teclado
300 K$=INKEY$:IF K$="" THEN 300
302 IF INKEY$<>"" THEN 302 ELSE RETURN
' Menomtécnicos de las instrucciones
800 DATA "INP","CLA","ADD","TAC","SFT"
802 DATA "OUT","STO","SUB","JMP","HRS"
' Programa Counter 0-10: Bootloader
900 DATA 2,800,10,100,11,605
902 DATA 12,104,13,322,14,505
904 DATA 15,105,16,200,17,605
906 DATA 18,104,19,700,20,604
908 DATA 21,812,22,900,4,9,2,810
' Programa Counter 0-10: Snapshot
950 DATA 810,0,0,9,0,0,0,0,0,100
952 DATA 605,104,322,505,105,200,605,104,700,604
954 DATA 812,900,9999
Pues nada más,
Os invito a probarlo