Simple-As-Possible computer
# Simple-As-Possible computer

El Simple-As-Possible (SAP) computer, o computador Más Sencillo Posible, es una arquitectura de computadoras diseñada con fines educativos y descrita en el libro Digital Computer Electronics de Albert Paul Malvino y Jerald A. Brown. La arquitectura SAP sirve como ejemplo en Digital Computer Electronics para construir y analizar sistemas lógicos complejos con electrónica digital.

En dicho libro los autores desarrollan sucesivamente tres versiones de este computador, denominadas SAP-1, SAP-2 y SAP-3, respectivamente. La segunda y la tercera se apoyan en la versión inmediatamente anterior y añaden nuevas funcionalidades computacionales, de control de flujo y de entrada/salida. El SAP-2 y el SAP-3 son máquinas de Turing completas.

El conjunto de instrucciones de la versión final (SAP-3) está diseñado para que sea compatible a nivel binario con la familia de los microprocesadores Intel 8080/8085. Por tanto, las instrucciones implementadas en las tres variantes del computador SAP son, en cada caso, un subconjunto del repertorio de instrucciones del 8080/8085.

## Variante

### Diseño de Ben Eater

El youtuber y antiguo empleado de la Khan Academy Ben Eater creó un tutorial para construir un computador SAP Turing completo de 8 bits usando placas de pruebas con chips lógicos de la serie 7400 capaces de ejecutar programas sencillos como el cálculo de la serie de Fibonacci. El diseño de Eater consta de los siguientes módulos:

* Un módulo de reloj de velocidad ajustable (con la limitación superior de unos cientos de hercios) que se puede poner en "modo manual" para ejecutar paso a paso en cada ciclo de reloj.
* Tres registros (A, B y el de instrucción) que "almacenan pequeñas cantidades de datos que la CPU es capaz de procesar".
* Una unidad aritmética lógica (ALU) capaz de sumar y restar enteros de 8 bits en complemento a 2, tomados de los registros A y B. Este módulo también dispone de un registro de indicadores de resultado (flags Z y C). La Z viene de "zero" (cero en inglés) y se activa si el resultado de la ALU es 0. C viene de "carry" (acarreo en inglés) y se activa si la ALU produce un bit de acarreo.
* Un módulo de memoria RAM con una capacidad de almacenamiento de 16 bytes. Consta de 16 direcciones de 1 byte cada una, lo cual significa que las direcciones de memoria se expresan en binario con 4 bits. Según la web de Eater, "esta es la mayor limitación de este computador".
* Un registro contador de programa de 4 bits que contiene la dirección de memoria de la instrucción que va a ejecutar el procesador.
* Un registro de salida que muestra su contenido en cuatro visualizadores de siete segmentos, capaz de mostrar tanto enteros sin signo como con signo en complemento a 2. Las salidas de este visualizador se controlan con varias EEPROM, programadas mediante un microcontrolador Arduino.
* Un bus que conecta entre sí todos estos componentes. Los componentes se conectan al bus mediante buffers triestado.
* Un módulo de lógica de control que define "los códigos de operación que reconoce el procesador y todo lo que ocurre cuando se ejecuta cada instrucción," además de permitir que el computador sea Turing completo. Las microinstrucciones de la CPU se programan en varias EEPROM mediante Arduino.

El diseño de Ben Eater ha inspirado muchas otras variantes y mejoras, principalmente en el foro Reddit de Eater. Algunas de estas mejoras son las siguientes:

* Un módulo de expansión de la RAM para albergar 256 bytes, que utiliza todo el espacio de direcciones de 8 bis. Con la ayuda de registros de segmentación, se puede aumentar la memoria aún más para disponer de un espacio de direcciones de 16 bits, al igual que en los computadores típicos de 8 bits.
* Un registro de pila que permite incrementar o decrementar el puntero de pila.
