CARDboard Illustrative Aid to Computation
CARDIAC (CARDboard Illustrative Aid to Computation) es una herramienta de aprendizaje desarrollada por David Hagelbarger y Saul Fingerman en 1968 en los Bell Labs para enseñar a estudiantes de secundario cómo funcionan las computadoras. Consta de un manual de instrucciones y una "computadora" hecha de cartón.
La computadora "opera" mediante el uso de un lápiz y tarjetas de cartón. Las operaciones aritméticas las hace la persona que la opera. Utiliza numeración en base 10 y tiene 100 celdas de memoria, las cuales pueden contener números enteros de un rango entre -999 y +999. Tiene un conjunto de 10 instrucciones que permite sumar, restar, verificar, desplazar, realizar entradas y salidas, y saltar a una dirección.
Hardware
editarLa "CPU” de la computadora consta de 4 paneles de cartón con celdas y flechas que indican el flujo de operación, de modo que la verdadera CPU (que es el cerebro del usuario) se mueva de la manera correcta. Incluye también una bandera (+/-) que es afectada por el resultado en el acumulador.
La memoria consta de la otra mitad de la cartulina. Hay 100 celdas: la número 0 es “ROM” y siempre contiene un número "1"; las celdas 1 a 98 son “RAM” y están disponibles para almacenar instrucciones y datos; finalmente, la celda 99 puede ser descrita como “EEPROM”.
Las celdas de memoria pueden contener números decimales con signo en el rango de -999 a +999. Los números en las celdas se escriben con un lápiz y se eliminan con una goma de borrar. Un “bicho” ("bug" en el original) actúa como contador de programa, se coloca en un agujero junto a la celda de memoria actual.
Programación
editarCARDIAC tiene un lenguaje de máquina con 10 instrucciones. Cada instrucción está formada por tres dígitos decimales (se ignora el signo) con la formaOAA
. El primer dígito es el código de operación(O)
; el segundo y tercer dígitos son una dirección (AA
) que direcciona del acumulador a la memoria absoluta, de la memoria absoluta al acumulador, de la entrada a la memoria absoluta, o de la memoria absoluta a la salida.
Nunca se desarrollaron lenguajes de programación de alto nivel para CARDIAC ya que va en contra de uno de los propósitos del dispositivo: introducir conceptos de programación en lenguaje ensamblador.
Los programas son ensamblados a mano y escritos con lápiz en las celdas de memoria.
Conjunto de instrucciones
editarOpcode | Mnemotécnico | Instrucción | Descripción |
---|---|---|---|
0 | INP | Entrada | Tomar un número de la tarjeta de entrada ("INPut") y colocarlo en la celda de memoria especificada. |
1 | CLA | Borrar y sumar | Borrar ("CLear") el acumulador y sumar ("Add") el contenido de la celda de memoria al acumulador. |
2 | ADD | Sumar | Sumar ("ADD") el contenido de una celda de memoria al acumulador. |
3 | TAC | Verificar los contenidos del acumulador | Realiza una verificación ("Test") de los contenidos del ACumulador; si es menos, salta a la celda de memoria especificada. |
4 | SFT | Desplazamiento | Desplaza ("ShiFT") el acumulador x veces a la izquierda y luego z veces a la derecha, donde x es el dígito superior de la dirección y z es el inferior. |
5 | OUT | Salida | Tomar un número de la celda de memoria especificada y escribirlo en la tarjeta de salida ("OUTput"). |
6 | STO | Almacenar | Copiar ("STOre") los contenidos del acumulador en la celda de memoria especificada. |
7 | SUB | Resta | Restar ("SUBstract") los contenidos de la celda de memoria especificada a los del acumulador. |
8 | JMP | Salto | Saltar ("JuMP") a la celda de memoria especificada. El número de celda actual está escrito en la celda 99. Esto permite un nivel de subrutinas, ya que la dirección de retorno estará en la celda 99 (con un '8' como prefijo). |
9 | HRS | Detención y reinicialización | Mover el contador de programa ("bug") a la celda especificada y detener la ejecución del programa ("Halt and ReSet"). |
Operación
editarLos programas se ejecutan moviendo primero las tres tarjetas de modo que el número en el registro de instrucción sea igual al número en la cela de memoria donde está el "bug". Entonces el "bug" debe moverse a la siguiente celda de memoria. El usuario entonces sigue una flecha que le dirá qué hacer luego. Este proceso se repite durante toda la ejecución de programa.
Grupo de usuarios
editarExiste un grupo de usuarios de CARDIAC en Facebook.
Véase también
editar- Little man computer (Computadora del hombre pequeño, otro modelo educativo de computadora).
Enlaces externos (en inglés)
editar- http://cs.drexel.edu/~bls96/museum/cardiac.html - Una discusión de CARDIAC con ejemplos y un simulador en Javascript.
- https://github.com/jawhitti/cardiac - Un intérprete y depurador interactivo en la plataforma .NET.
- http://www.sourceforge.net/projects/cinc/ - Un simulador para al Plataforma Java, con ambas interfaces: línea de comandos y GUI.
- http://www.kaleberg.com/software/cardiac/ - Un simulador para Mac OS X, Macintosh Classic, Windows (no testeado) y Linux (no testeado). El simulador proporciona un editor, un ensamblador sencillo y ejemplos. Tal como se describe en la página, los códigos de operación 0 y 9 están intercambiados. El código fuente del simulador parece ser propietario, pero de descarga libre.
- https://www.youtube.com/watch?v=cw96m7r0u-s, Quick Tour of the Built CARDIAC computer (video) por Tom Higgins (Recorrido rápido por la computadora CARDIAC).
- http://www.drdobbs.com/embedded-systems/cpu-design-on-paper/240153480 - Al Williams publicó una versión en planilla de cálculos de CARDIAC en el sitio de Dr. Dobb's
- http://www.drdobbs.com/embedded-systems/paper-to-fpga/240155922 - Implementación de CARDIAC en una placa FPGA por Al Williams (artículo final de una serie en el sitio de Dr. Dobb's).